@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 @@
|
|
|
1
|
+
{"version":3,"file":"cookie-utils.js","names":[],"sources":["../../../../src/server/hono/utils/cookie-utils.ts"],"sourcesContent":["import type { Context } from 'hono';\n\nexport interface SetResponseCookieOptions {\n c: Context;\n value: string;\n}\n\n/**\n * Appends a `Set-Cookie` header to the response. Hono replaces single\n * headers by default, so this uses `{ append: true }` to emit multiple\n * cookies on the same response.\n */\nexport function setResponseCookie(options: SetResponseCookieOptions): void {\n const { c, value } = options;\n c.header('Set-Cookie', value, { append: true });\n}\n\nexport interface SerializeCookieOptions {\n name: string;\n value: string;\n /** `__Host-` prefix requires `Path=/` and is recommended for session cookies. */\n path: string;\n /** Defaults to `Strict`. Use `Lax` for short-lived OAuth temp cookies. */\n sameSite?: 'Strict' | 'Lax';\n /** Lifetime in seconds. `0` deletes the cookie. */\n maxAge: number;\n /** Defaults to `true`; only set `false` for tests or non-HTTPS dev hosts. */\n secure?: boolean;\n /** Defaults to `true`. */\n httpOnly?: boolean;\n}\n\n/**\n * Builds a `Set-Cookie` header value with HubSpot's default attributes\n * (HttpOnly, Secure, SameSite). Centralizes the serialization so all\n * cookies share the same policy.\n */\nexport function serializeCookie(options: SerializeCookieOptions): string {\n const {\n name,\n value,\n path,\n sameSite = 'Strict',\n maxAge,\n secure = true,\n httpOnly = true,\n } = options;\n const parts: string[] = [`${name}=${value}`];\n if (httpOnly) parts.push('HttpOnly');\n if (secure) parts.push('Secure');\n parts.push(`SameSite=${sameSite}`);\n parts.push(`Path=${path}`);\n parts.push(`Max-Age=${maxAge}`);\n return parts.join('; ');\n}\n"],"mappings":";;;;;;AAYA,SAAgB,kBAAkB,SAAyC;CACzE,MAAM,EAAE,GAAG,UAAU;CACrB,EAAE,OAAO,cAAc,OAAO,EAAE,QAAQ,MAAM,CAAC;;;;;;;AAuBjD,SAAgB,gBAAgB,SAAyC;CACvE,MAAM,EACJ,MACA,OACA,MACA,WAAW,UACX,QACA,SAAS,MACT,WAAW,SACT;CACJ,MAAM,QAAkB,CAAC,GAAG,KAAK,GAAG,QAAQ;CAC5C,IAAI,UAAU,MAAM,KAAK,WAAW;CACpC,IAAI,QAAQ,MAAM,KAAK,SAAS;CAChC,MAAM,KAAK,YAAY,WAAW;CAClC,MAAM,KAAK,QAAQ,OAAO;CAC1B,MAAM,KAAK,WAAW,SAAS;CAC/B,OAAO,MAAM,KAAK,KAAK"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { base64StandardToArrayBuffer } from "./shared/encoding/base64.js";
|
|
2
|
+
//#region src/server/import-app-keys.ts
|
|
3
|
+
/**
|
|
4
|
+
* Imports a base64-encoded PKCS8 ES256 private key into the
|
|
5
|
+
* `AppKeys` shape used throughout the SDK.
|
|
6
|
+
*
|
|
7
|
+
* The function imports the key twice: once as **extractable** to
|
|
8
|
+
* derive the public JWK (via `crypto.subtle.exportKey`), and once
|
|
9
|
+
* as **non-extractable** so the long-lived `appPrivateKey` can never
|
|
10
|
+
* be exfiltrated.
|
|
11
|
+
*
|
|
12
|
+
* @throws {Error} When `envKey` is empty/undefined or when the key
|
|
13
|
+
* isn't an EC P-256 keypair.
|
|
14
|
+
*/
|
|
15
|
+
async function importAppKeys(envKey) {
|
|
16
|
+
const b64 = envKey?.trim() ?? "";
|
|
17
|
+
if (!b64) throw new Error("HUBSPOT_APP_PRIVATE_KEY is not set");
|
|
18
|
+
const pkcs8 = base64StandardToArrayBuffer(b64);
|
|
19
|
+
const tempPrivateKey = await crypto.subtle.importKey("pkcs8", pkcs8, {
|
|
20
|
+
name: "ECDSA",
|
|
21
|
+
namedCurve: "P-256"
|
|
22
|
+
}, true, ["sign"]);
|
|
23
|
+
const privateJwk = await crypto.subtle.exportKey("jwk", tempPrivateKey);
|
|
24
|
+
if (privateJwk.kty !== "EC" || privateJwk.crv !== "P-256" || typeof privateJwk.x !== "string" || typeof privateJwk.y !== "string") throw new Error("Expected P-256 EC private key JWK with x and y");
|
|
25
|
+
const appPublicKeyJwk = {
|
|
26
|
+
kty: "EC",
|
|
27
|
+
crv: "P-256",
|
|
28
|
+
x: privateJwk.x,
|
|
29
|
+
y: privateJwk.y
|
|
30
|
+
};
|
|
31
|
+
return {
|
|
32
|
+
appPrivateKey: await crypto.subtle.importKey("pkcs8", pkcs8, {
|
|
33
|
+
name: "ECDSA",
|
|
34
|
+
namedCurve: "P-256"
|
|
35
|
+
}, false, ["sign"]),
|
|
36
|
+
appPublicKeyJwk
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//#endregion
|
|
40
|
+
export { importAppKeys };
|
|
41
|
+
|
|
42
|
+
//# sourceMappingURL=import-app-keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-app-keys.js","names":[],"sources":["../../src/server/import-app-keys.ts"],"sourcesContent":["import type { AppKeys } from './types.ts';\nimport { base64StandardToArrayBuffer } from './utils/base64-utils.ts';\n\n/**\n * Imports a base64-encoded PKCS8 ES256 private key into the\n * `AppKeys` shape used throughout the SDK.\n *\n * The function imports the key twice: once as **extractable** to\n * derive the public JWK (via `crypto.subtle.exportKey`), and once\n * as **non-extractable** so the long-lived `appPrivateKey` can never\n * be exfiltrated.\n *\n * @throws {Error} When `envKey` is empty/undefined or when the key\n * isn't an EC P-256 keypair.\n */\nexport async function importAppKeys(\n envKey: string | undefined\n): Promise<AppKeys> {\n const b64 = envKey?.trim() ?? '';\n if (!b64) {\n throw new Error('HUBSPOT_APP_PRIVATE_KEY is not set');\n }\n\n const pkcs8 = base64StandardToArrayBuffer(b64);\n const tempPrivateKey = await crypto.subtle.importKey(\n 'pkcs8',\n pkcs8,\n { name: 'ECDSA', namedCurve: 'P-256' },\n true,\n ['sign']\n );\n const privateJwk = await crypto.subtle.exportKey('jwk', tempPrivateKey);\n if (\n privateJwk.kty !== 'EC' ||\n privateJwk.crv !== 'P-256' ||\n typeof privateJwk.x !== 'string' ||\n typeof privateJwk.y !== 'string'\n ) {\n throw new Error('Expected P-256 EC private key JWK with x and y');\n }\n const appPublicKeyJwk: JsonWebKey = {\n kty: 'EC',\n crv: 'P-256',\n x: privateJwk.x,\n y: privateJwk.y,\n };\n const appPrivateKey = await crypto.subtle.importKey(\n 'pkcs8',\n pkcs8,\n { name: 'ECDSA', namedCurve: 'P-256' },\n false,\n ['sign']\n );\n return { appPrivateKey, appPublicKeyJwk };\n}\n"],"mappings":";;;;;;;;;;;;;;AAeA,eAAsB,cACpB,QACkB;CAClB,MAAM,MAAM,QAAQ,MAAM,IAAI;CAC9B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,qCAAqC;CAGvD,MAAM,QAAQ,4BAA4B,IAAI;CAC9C,MAAM,iBAAiB,MAAM,OAAO,OAAO,UACzC,SACA,OACA;EAAE,MAAM;EAAS,YAAY;EAAS,EACtC,MACA,CAAC,OAAO,CACT;CACD,MAAM,aAAa,MAAM,OAAO,OAAO,UAAU,OAAO,eAAe;CACvE,IACE,WAAW,QAAQ,QACnB,WAAW,QAAQ,WACnB,OAAO,WAAW,MAAM,YACxB,OAAO,WAAW,MAAM,UAExB,MAAM,IAAI,MAAM,iDAAiD;CAEnE,MAAM,kBAA8B;EAClC,KAAK;EACL,KAAK;EACL,GAAG,WAAW;EACd,GAAG,WAAW;EACf;CAQD,OAAO;EAAE,eAAA,MAPmB,OAAO,OAAO,UACxC,SACA,OACA;GAAE,MAAM;GAAS,YAAY;GAAS,EACtC,OACA,CAAC,OAAO,CACT;EACuB;EAAiB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { SecureStartContext } from "../secure-start-core.js";
|
|
2
|
+
import { Logger } from "../shared/logger.js";
|
|
3
|
+
import { AppConnectHonoEnv } from "../hono/types.js";
|
|
4
|
+
import { Hono } from "hono";
|
|
5
|
+
|
|
6
|
+
//#region src/server/lovable/create-app-function-start.d.ts
|
|
7
|
+
type RegisterAppFunctionRoutesFunction = (app: Hono<AppConnectHonoEnv>) => void;
|
|
8
|
+
interface CreateAppFunctionStartOptions {
|
|
9
|
+
/** Base path the user's routes are mounted under (e.g. `/functions/v1/api`). */
|
|
10
|
+
basePath: string;
|
|
11
|
+
/** Attach app routes to the SDK-owned Hono instance. */
|
|
12
|
+
registerRoutes: RegisterAppFunctionRoutesFunction;
|
|
13
|
+
/** Optional logger forwarded to `createAppConnectRequestHandler`. */
|
|
14
|
+
logger?: Logger;
|
|
15
|
+
}
|
|
16
|
+
type AppFunctionStart = (context: SecureStartContext) => Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Builds a Deno-style `start({ appKeys })` entry point that boots a
|
|
19
|
+
* Hono app under `basePath`, wires the SDK's per-request HubSpot
|
|
20
|
+
* proxy via `createAppConnectRequestHandler`, and serves it with
|
|
21
|
+
* `Deno.serve` on `PORT`.
|
|
22
|
+
*/
|
|
23
|
+
declare function createAppFunctionStart(options: CreateAppFunctionStartOptions): AppFunctionStart;
|
|
24
|
+
//#endregion
|
|
25
|
+
export { AppFunctionStart, CreateAppFunctionStartOptions, RegisterAppFunctionRoutesFunction, createAppFunctionStart };
|
|
26
|
+
//# sourceMappingURL=create-app-function-start.d.ts.map
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { createAppConnectRequestHandler } from "../hono/hono-request-handler.js";
|
|
2
|
+
//#region src/server/lovable/create-app-function-start.ts
|
|
3
|
+
const PORT = Deno.env.get("PORT");
|
|
4
|
+
const serveOptions = typeof PORT === "string" ? { port: parseInt(PORT, 10) } : {};
|
|
5
|
+
/**
|
|
6
|
+
* Builds a Deno-style `start({ appKeys })` entry point that boots a
|
|
7
|
+
* Hono app under `basePath`, wires the SDK's per-request HubSpot
|
|
8
|
+
* proxy via `createAppConnectRequestHandler`, and serves it with
|
|
9
|
+
* `Deno.serve` on `PORT`.
|
|
10
|
+
*/
|
|
11
|
+
function createAppFunctionStart(options) {
|
|
12
|
+
const { basePath, registerRoutes, logger } = options;
|
|
13
|
+
return ({ appKeys }) => {
|
|
14
|
+
Deno.serve(serveOptions, createAppConnectRequestHandler({
|
|
15
|
+
appKeys,
|
|
16
|
+
...logger !== void 0 ? { logger } : {},
|
|
17
|
+
registerRoutes: (app) => {
|
|
18
|
+
registerRoutes(app.basePath(basePath));
|
|
19
|
+
}
|
|
20
|
+
}));
|
|
21
|
+
console.log(`[app-function ${basePath}] Listening on http://localhost:${PORT}`);
|
|
22
|
+
return Promise.resolve();
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { createAppFunctionStart };
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=create-app-function-start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-app-function-start.js","names":[],"sources":["../../../src/server/lovable/create-app-function-start.ts"],"sourcesContent":["import type { Hono } from 'hono';\n\nimport type { Logger } from '../../shared/logger.ts';\nimport { createAppConnectRequestHandler } from '../hono/hono-request-handler.ts';\nimport type { AppConnectHonoEnv } from '../hono/types.ts';\nimport type { SecureStartContext } from '../secure-start-core.ts';\n\nconst PORT = Deno.env.get('PORT');\nconst serveOptions =\n typeof PORT === 'string' ? { port: parseInt(PORT, 10) } : {};\n\nexport type RegisterAppFunctionRoutesFunction = (\n app: Hono<AppConnectHonoEnv>\n) => void;\n\nexport interface CreateAppFunctionStartOptions {\n /** Base path the user's routes are mounted under (e.g. `/functions/v1/api`). */\n basePath: string;\n /** Attach app routes to the SDK-owned Hono instance. */\n registerRoutes: RegisterAppFunctionRoutesFunction;\n /** Optional logger forwarded to `createAppConnectRequestHandler`. */\n logger?: Logger;\n}\n\nexport type AppFunctionStart = (context: SecureStartContext) => Promise<void>;\n\n/**\n * Builds a Deno-style `start({ appKeys })` entry point that boots a\n * Hono app under `basePath`, wires the SDK's per-request HubSpot\n * proxy via `createAppConnectRequestHandler`, and serves it with\n * `Deno.serve` on `PORT`.\n */\nexport function createAppFunctionStart(\n options: CreateAppFunctionStartOptions\n): AppFunctionStart {\n const { basePath, registerRoutes, logger } = options;\n\n return ({ appKeys }) => {\n Deno.serve(\n serveOptions,\n createAppConnectRequestHandler({\n appKeys,\n ...(logger !== undefined ? { logger } : {}),\n registerRoutes: (app) => {\n registerRoutes(app.basePath(basePath));\n },\n })\n );\n\n console.log(\n `[app-function ${basePath}] Listening on http://localhost:${PORT}`\n );\n return Promise.resolve();\n };\n}\n"],"mappings":";;AAOA,MAAM,OAAO,KAAK,IAAI,IAAI,OAAO;AACjC,MAAM,eACJ,OAAO,SAAS,WAAW,EAAE,MAAM,SAAS,MAAM,GAAG,EAAE,GAAG,EAAE;;;;;;;AAuB9D,SAAgB,uBACd,SACkB;CAClB,MAAM,EAAE,UAAU,gBAAgB,WAAW;CAE7C,QAAQ,EAAE,cAAc;EACtB,KAAK,MACH,cACA,+BAA+B;GAC7B;GACA,GAAI,WAAW,KAAA,IAAY,EAAE,QAAQ,GAAG,EAAE;GAC1C,iBAAiB,QAAQ;IACvB,eAAe,IAAI,SAAS,SAAS,CAAC;;GAEzC,CAAC,CACH;EAED,QAAQ,IACN,iBAAiB,SAAS,kCAAkC,OAC7D;EACD,OAAO,QAAQ,SAAS"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { HubSpotConnectCimdClientMetadata } from "../../hono/hubspot-connect-routes/cimd-client-metadata-types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/server/lovable/hubspot-connect/index.d.ts
|
|
4
|
+
interface StartHubSpotConnectFunctionOptions {
|
|
5
|
+
client: HubSpotConnectCimdClientMetadata;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Lovable-style entry point for the hubspot-connect Deno function.
|
|
9
|
+
* Loads `HUBSPOT_APP_PRIVATE_KEY` via `secureStart`, then serves OAuth
|
|
10
|
+
* and CIMD routes under `/functions/v1/hubspot-connect`.
|
|
11
|
+
*/
|
|
12
|
+
declare function startHubSpotConnectFunction(options: StartHubSpotConnectFunctionOptions): Promise<void>;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { StartHubSpotConnectFunctionOptions, startHubSpotConnectFunction };
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { secureStart } from "../../deno/start.js";
|
|
2
|
+
import { assertHubSpotConnectCimdClientMetadata } from "../../hono/hubspot-connect-routes/cimd-client-metadata-types.js";
|
|
3
|
+
import { runHubSpotConnectLovableServer } from "./run-hubspot-connect-lovable-server.js";
|
|
4
|
+
//#region src/server/lovable/hubspot-connect/index.ts
|
|
5
|
+
/**
|
|
6
|
+
* Lovable-style entry point for the hubspot-connect Deno function.
|
|
7
|
+
* Loads `HUBSPOT_APP_PRIVATE_KEY` via `secureStart`, then serves OAuth
|
|
8
|
+
* and CIMD routes under `/functions/v1/hubspot-connect`.
|
|
9
|
+
*/
|
|
10
|
+
async function startHubSpotConnectFunction(options) {
|
|
11
|
+
assertHubSpotConnectCimdClientMetadata(options.client);
|
|
12
|
+
await secureStart(async () => ({ start: (context) => runHubSpotConnectLovableServer({
|
|
13
|
+
...context,
|
|
14
|
+
cimdClientMetadata: options.client
|
|
15
|
+
}) }));
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
export { startHubSpotConnectFunction };
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/server/lovable/hubspot-connect/index.ts"],"sourcesContent":["import { secureStart } from '../../deno/start.ts';\nimport { assertHubSpotConnectCimdClientMetadata } from '../../hono/hubspot-connect-routes/cimd-client-metadata-types.ts';\nimport type { HubSpotConnectCimdClientMetadata } from '../../hono/hubspot-connect-routes/cimd-client-metadata-types.ts';\nimport { runHubSpotConnectLovableServer } from './run-hubspot-connect-lovable-server.ts';\n\nexport type { HubSpotConnectCimdClientMetadata } from '../../hono/hubspot-connect-routes/cimd-client-metadata-types.ts';\n\nexport interface StartHubSpotConnectFunctionOptions {\n client: HubSpotConnectCimdClientMetadata;\n}\n\n/**\n * Lovable-style entry point for the hubspot-connect Deno function.\n * Loads `HUBSPOT_APP_PRIVATE_KEY` via `secureStart`, then serves OAuth\n * and CIMD routes under `/functions/v1/hubspot-connect`.\n */\nexport async function startHubSpotConnectFunction(\n options: StartHubSpotConnectFunctionOptions\n): Promise<void> {\n assertHubSpotConnectCimdClientMetadata(options.client);\n await secureStart(async () => ({\n start: (context) =>\n runHubSpotConnectLovableServer({\n ...context,\n cimdClientMetadata: options.client,\n }),\n }));\n}\n"],"mappings":";;;;;;;;;AAgBA,eAAsB,4BACpB,SACe;CACf,uCAAuC,QAAQ,OAAO;CACtD,MAAM,YAAY,aAAa,EAC7B,QAAQ,YACN,+BAA+B;EAC7B,GAAG;EACH,oBAAoB,QAAQ;EAC7B,CAAC,EACL,EAAE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { registerHubSpotConnectRoutes } from "../../hono/hubspot-connect-routes/hubspot-connect-routes.js";
|
|
2
|
+
import { loadHubSpotConnectRoutesEnv } from "../../hono/hubspot-connect-routes/load-hubspot-connect-routes-env.js";
|
|
3
|
+
import "../../hono/index.js";
|
|
4
|
+
import { Hono } from "hono";
|
|
5
|
+
//#region src/server/lovable/hubspot-connect/run-hubspot-connect-lovable-server.ts
|
|
6
|
+
const PORT = Deno.env.get("PORT");
|
|
7
|
+
const serveOptions = typeof PORT === "string" ? { port: parseInt(PORT, 10) } : {};
|
|
8
|
+
const HUBSPOT_CONNECT_BASE_PATH = "/functions/v1/hubspot-connect";
|
|
9
|
+
function runHubSpotConnectLovableServer(options) {
|
|
10
|
+
const { appKeys, cimdClientMetadata } = options;
|
|
11
|
+
const hubspotConnectEnv = loadHubSpotConnectRoutesEnv();
|
|
12
|
+
const result = Deno.serve(serveOptions, (request) => {
|
|
13
|
+
const app = new Hono();
|
|
14
|
+
registerHubSpotConnectRoutes({
|
|
15
|
+
app: app.basePath(HUBSPOT_CONNECT_BASE_PATH),
|
|
16
|
+
appKeys,
|
|
17
|
+
basePath: HUBSPOT_CONNECT_BASE_PATH,
|
|
18
|
+
hubspotConnectEnv,
|
|
19
|
+
cimdClientMetadata
|
|
20
|
+
});
|
|
21
|
+
return app.fetch(request);
|
|
22
|
+
});
|
|
23
|
+
console.log(`[hubspot-connect] Listening on ${result.addr.port}`);
|
|
24
|
+
return Promise.resolve();
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { runHubSpotConnectLovableServer };
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=run-hubspot-connect-lovable-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-hubspot-connect-lovable-server.js","names":[],"sources":["../../../../src/server/lovable/hubspot-connect/run-hubspot-connect-lovable-server.ts"],"sourcesContent":["import { Hono } from 'hono';\n\nimport type { SecureStartContext } from '../../deno/start.ts';\nimport type { HubSpotConnectCimdClientMetadata } from '../../hono/hubspot-connect-routes/cimd-client-metadata-types.ts';\nimport {\n loadHubSpotConnectRoutesEnv,\n registerHubSpotConnectRoutes,\n} from '../../hono/index.ts';\n\nconst PORT = Deno.env.get('PORT');\nconst serveOptions =\n typeof PORT === 'string' ? { port: parseInt(PORT, 10) } : {};\nconst HUBSPOT_CONNECT_BASE_PATH = '/functions/v1/hubspot-connect';\n\nexport interface RunHubSpotConnectLovableServerOptions extends SecureStartContext {\n cimdClientMetadata: HubSpotConnectCimdClientMetadata;\n}\n\nexport function runHubSpotConnectLovableServer(\n options: RunHubSpotConnectLovableServerOptions\n): Promise<void> {\n const { appKeys, cimdClientMetadata } = options;\n const hubspotConnectEnv = loadHubSpotConnectRoutesEnv();\n const result = Deno.serve(serveOptions, (request) => {\n const app = new Hono();\n\n registerHubSpotConnectRoutes({\n app: app.basePath(HUBSPOT_CONNECT_BASE_PATH),\n appKeys,\n basePath: HUBSPOT_CONNECT_BASE_PATH,\n hubspotConnectEnv,\n cimdClientMetadata,\n });\n\n return app.fetch(request);\n });\n\n console.log(`[hubspot-connect] Listening on ${result.addr.port}`);\n return Promise.resolve();\n}\n"],"mappings":";;;;;AASA,MAAM,OAAO,KAAK,IAAI,IAAI,OAAO;AACjC,MAAM,eACJ,OAAO,SAAS,WAAW,EAAE,MAAM,SAAS,MAAM,GAAG,EAAE,GAAG,EAAE;AAC9D,MAAM,4BAA4B;AAMlC,SAAgB,+BACd,SACe;CACf,MAAM,EAAE,SAAS,uBAAuB;CACxC,MAAM,oBAAoB,6BAA6B;CACvD,MAAM,SAAS,KAAK,MAAM,eAAe,YAAY;EACnD,MAAM,MAAM,IAAI,MAAM;EAEtB,6BAA6B;GAC3B,KAAK,IAAI,SAAS,0BAA0B;GAC5C;GACA,UAAU;GACV;GACA;GACD,CAAC;EAEF,OAAO,IAAI,MAAM,QAAQ;GACzB;CAEF,QAAQ,IAAI,kCAAkC,OAAO,KAAK,OAAO;CACjE,OAAO,QAAQ,SAAS"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { SecureStartContext, SecureStartLoader } from "./secure-start-core.js";
|
|
2
|
+
import { secureStart } from "./deno/start.js";
|
|
3
|
+
import { HubSpotConnectCimdClientMetadata } from "./hono/hubspot-connect-routes/cimd-client-metadata-types.js";
|
|
4
|
+
import { StartHubSpotConnectFunctionOptions, startHubSpotConnectFunction } from "./lovable/hubspot-connect/index.js";
|
|
5
|
+
import { AppFunctionStart, CreateAppFunctionStartOptions, RegisterAppFunctionRoutesFunction, createAppFunctionStart } from "./lovable/create-app-function-start.js";
|
|
6
|
+
export { type AppFunctionStart, type CreateAppFunctionStartOptions, type HubSpotConnectCimdClientMetadata, type RegisterAppFunctionRoutesFunction, type SecureStartContext, type SecureStartLoader, type StartHubSpotConnectFunctionOptions, createAppFunctionStart, secureStart, startHubSpotConnectFunction };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { secureStart } from "./deno/start.js";
|
|
2
|
+
import { startHubSpotConnectFunction } from "./lovable/hubspot-connect/index.js";
|
|
3
|
+
import { createAppFunctionStart } from "./lovable/create-app-function-start.js";
|
|
4
|
+
export { createAppFunctionStart, secureStart, startHubSpotConnectFunction };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { JwkSet } from "./types.js";
|
|
2
|
+
import { getJwkThumbprint } from "./utils/jwk-utils.js";
|
|
3
|
+
import { verifyDpopProof } from "./utils/dpop-utils.js";
|
|
4
|
+
import { signJwt, verifyJwt } from "./utils/jwt-utils.js";
|
|
5
|
+
import { sha256base64url } from "./shared/encoding/sha256.js";
|
|
6
|
+
export { type JwkSet, getJwkThumbprint, sha256base64url, signJwt, verifyDpopProof, verifyJwt };
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { getJwkThumbprint } from "./utils/jwk-utils.js";
|
|
2
|
+
import { signJwt, verifyJwt } from "./utils/jwt-utils.js";
|
|
3
|
+
import { verifyDpopProof } from "./utils/dpop-utils.js";
|
|
4
|
+
import { sha256base64url } from "./shared/encoding/sha256.js";
|
|
5
|
+
export { getJwkThumbprint, sha256base64url, signJwt, verifyDpopProof, verifyJwt };
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { signDpopProof } from "./utils/dpop-utils.js";
|
|
2
|
+
import { sha256base64url } from "./shared/encoding/sha256.js";
|
|
3
|
+
import { isHubspotDpopEnabled, requireEnv } from "./utils/env-utils.js";
|
|
4
|
+
import { noopLogger } from "./shared/logger.js";
|
|
5
|
+
//#region src/server/proxy.ts
|
|
6
|
+
const HUBSPOT_API_ORIGIN = requireEnv("HUBSPOT_API_ORIGIN");
|
|
7
|
+
const notAuthenticated = {
|
|
8
|
+
authenticated: false,
|
|
9
|
+
fetch: async () => {
|
|
10
|
+
return new Response(null, {
|
|
11
|
+
status: 401,
|
|
12
|
+
statusText: "Unauthorized",
|
|
13
|
+
headers: { "Content-Type": "application/json" }
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
const EMPTY_HEADERS = {};
|
|
18
|
+
function createHubSpotProxy(options) {
|
|
19
|
+
const { userCredentials, appKeys, logger = noopLogger } = options;
|
|
20
|
+
if (isHubspotDpopEnabled() && appKeys === null) throw new Error("createHubSpotProxy: appKeys is required when HUBSPOT_DPOP_ENABLED is not false");
|
|
21
|
+
const { accessToken, sessionId } = userCredentials;
|
|
22
|
+
if (!accessToken || !sessionId) {
|
|
23
|
+
logger.debug("createHubSpotProxy: returning unauthenticated proxy (missing cookies)");
|
|
24
|
+
return notAuthenticated;
|
|
25
|
+
}
|
|
26
|
+
async function proxyFetch(request) {
|
|
27
|
+
const { path, method = "GET", headers = EMPTY_HEADERS, body } = request;
|
|
28
|
+
const targetUrl = `${HUBSPOT_API_ORIGIN}${path}`;
|
|
29
|
+
const useDpop = isHubspotDpopEnabled();
|
|
30
|
+
let authorizationHeaders;
|
|
31
|
+
if (useDpop) {
|
|
32
|
+
const ath = await sha256base64url(accessToken);
|
|
33
|
+
const sid = await sha256base64url(sessionId);
|
|
34
|
+
const dpopProof = await signDpopProof({
|
|
35
|
+
appKeys,
|
|
36
|
+
claims: {
|
|
37
|
+
htm: method,
|
|
38
|
+
htu: targetUrl,
|
|
39
|
+
jti: crypto.randomUUID(),
|
|
40
|
+
iat: Math.floor(Date.now() / 1e3),
|
|
41
|
+
ath,
|
|
42
|
+
sid
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
authorizationHeaders = {
|
|
46
|
+
Authorization: `DPoP ${accessToken}`,
|
|
47
|
+
DPoP: dpopProof
|
|
48
|
+
};
|
|
49
|
+
} else authorizationHeaders = { Authorization: `Bearer ${accessToken}` };
|
|
50
|
+
const requestInit = {
|
|
51
|
+
headers: {
|
|
52
|
+
...headers,
|
|
53
|
+
...authorizationHeaders
|
|
54
|
+
},
|
|
55
|
+
method
|
|
56
|
+
};
|
|
57
|
+
if (body != null) requestInit.body = body;
|
|
58
|
+
return fetch(targetUrl, requestInit);
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
authenticated: true,
|
|
62
|
+
fetch: proxyFetch
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//#endregion
|
|
66
|
+
export { createHubSpotProxy };
|
|
67
|
+
|
|
68
|
+
//# sourceMappingURL=proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.js","names":[],"sources":["../../src/server/proxy.ts"],"sourcesContent":["import { noopLogger, type Logger } from '../shared/logger.ts';\nimport {\n type AppKeys,\n type HubSpotProxy,\n type HubSpotProxyRequest,\n type UserCredentials,\n} from './types.ts';\nimport { sha256base64url } from './utils/crypto-utils.ts';\nimport { signDpopProof } from './utils/dpop-utils.ts';\nimport { isHubspotDpopEnabled, requireEnv } from './utils/env-utils.ts';\n\nconst HUBSPOT_API_ORIGIN = requireEnv('HUBSPOT_API_ORIGIN');\n\n/**\n * Options accepted by {@link createHubSpotProxy}.\n */\nexport interface CreateHubSpotProxyOptions {\n /**\n * User session context from the incoming browser request.\n */\n userCredentials: UserCredentials;\n\n /**\n * Imported app keys from `secureStart`, or `null` when CIMD and DPoP\n * are both disabled.\n */\n appKeys: AppKeys | null;\n /** Optional logger. Defaults to a no-op logger. */\n logger?: Logger;\n}\n\nconst notAuthenticated: HubSpotProxy = {\n authenticated: false,\n fetch: async (): Promise<Response> => {\n return new Response(null, {\n status: 401,\n statusText: 'Unauthorized',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n },\n};\n\nconst EMPTY_HEADERS = {};\n\nexport function createHubSpotProxy(\n options: CreateHubSpotProxyOptions\n): HubSpotProxy {\n const { userCredentials, appKeys, logger = noopLogger } = options;\n\n if (isHubspotDpopEnabled() && appKeys === null) {\n throw new Error(\n 'createHubSpotProxy: appKeys is required when HUBSPOT_DPOP_ENABLED is not false'\n );\n }\n\n const { accessToken, sessionId } = userCredentials;\n\n if (!accessToken || !sessionId) {\n logger.debug(\n 'createHubSpotProxy: returning unauthenticated proxy (missing cookies)'\n );\n return notAuthenticated;\n }\n\n async function proxyFetch(request: HubSpotProxyRequest): Promise<Response> {\n const { path, method = 'GET', headers = EMPTY_HEADERS, body } = request;\n\n const targetUrl = `${HUBSPOT_API_ORIGIN}${path}`;\n const useDpop = isHubspotDpopEnabled();\n\n let authorizationHeaders: Record<string, string>;\n if (useDpop) {\n const ath = await sha256base64url(accessToken!);\n const sid = await sha256base64url(sessionId!);\n const dpopProof = await signDpopProof({\n appKeys: appKeys!,\n claims: {\n htm: method,\n htu: targetUrl,\n jti: crypto.randomUUID(),\n iat: Math.floor(Date.now() / 1000),\n ath,\n sid,\n },\n });\n authorizationHeaders = {\n Authorization: `DPoP ${accessToken}`,\n DPoP: dpopProof,\n };\n } else {\n authorizationHeaders = {\n Authorization: `Bearer ${accessToken}`,\n };\n }\n\n const finalHeaders = { ...headers, ...authorizationHeaders };\n\n const requestInit: RequestInit = {\n headers: finalHeaders,\n method,\n };\n\n if (body != null) {\n requestInit.body = body;\n }\n\n return fetch(targetUrl, requestInit);\n }\n\n return {\n authenticated: true,\n fetch: proxyFetch,\n };\n}\n"],"mappings":";;;;;AAWA,MAAM,qBAAqB,WAAW,qBAAqB;AAoB3D,MAAM,mBAAiC;CACrC,eAAe;CACf,OAAO,YAA+B;EACpC,OAAO,IAAI,SAAS,MAAM;GACxB,QAAQ;GACR,YAAY;GACZ,SAAS,EACP,gBAAgB,oBACjB;GACF,CAAC;;CAEL;AAED,MAAM,gBAAgB,EAAE;AAExB,SAAgB,mBACd,SACc;CACd,MAAM,EAAE,iBAAiB,SAAS,SAAS,eAAe;CAE1D,IAAI,sBAAsB,IAAI,YAAY,MACxC,MAAM,IAAI,MACR,iFACD;CAGH,MAAM,EAAE,aAAa,cAAc;CAEnC,IAAI,CAAC,eAAe,CAAC,WAAW;EAC9B,OAAO,MACL,wEACD;EACD,OAAO;;CAGT,eAAe,WAAW,SAAiD;EACzE,MAAM,EAAE,MAAM,SAAS,OAAO,UAAU,eAAe,SAAS;EAEhE,MAAM,YAAY,GAAG,qBAAqB;EAC1C,MAAM,UAAU,sBAAsB;EAEtC,IAAI;EACJ,IAAI,SAAS;GACX,MAAM,MAAM,MAAM,gBAAgB,YAAa;GAC/C,MAAM,MAAM,MAAM,gBAAgB,UAAW;GAC7C,MAAM,YAAY,MAAM,cAAc;IAC3B;IACT,QAAQ;KACN,KAAK;KACL,KAAK;KACL,KAAK,OAAO,YAAY;KACxB,KAAK,KAAK,MAAM,KAAK,KAAK,GAAG,IAAK;KAClC;KACA;KACD;IACF,CAAC;GACF,uBAAuB;IACrB,eAAe,QAAQ;IACvB,MAAM;IACP;SAED,uBAAuB,EACrB,eAAe,UAAU,eAC1B;EAKH,MAAM,cAA2B;GAC/B,SAAS;IAHY,GAAG;IAAS,GAAG;IAGf;GACrB;GACD;EAED,IAAI,QAAQ,MACV,YAAY,OAAO;EAGrB,OAAO,MAAM,WAAW,YAAY;;CAGtC,OAAO;EACL,eAAe;EACf,OAAO;EACR"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { isProtectedCookieName } from "./constants.js";
|
|
2
|
+
import { parseCookies } from "./utils/cookie-utils.js";
|
|
3
|
+
//#region src/server/sanitize-request.ts
|
|
4
|
+
function serializeCookies(cookies) {
|
|
5
|
+
const parts = [];
|
|
6
|
+
for (const [name, value] of cookies) parts.push(`${name}=${value}`);
|
|
7
|
+
return parts.join("; ");
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Returns a clone of `original` whose `Cookie` header has every
|
|
11
|
+
* protected cookie removed (see
|
|
12
|
+
* {@link isProtectedCookieName}). When no other cookies
|
|
13
|
+
* remain, the header is dropped entirely.
|
|
14
|
+
*
|
|
15
|
+
* Used by `createAppConnectRequestHandler` so the user's route
|
|
16
|
+
* handlers never see — and therefore cannot leak — the access token,
|
|
17
|
+
* session ID, or refresh-token cookies.
|
|
18
|
+
*/
|
|
19
|
+
function sanitizeRequest(original) {
|
|
20
|
+
const cookies = parseCookies(original.headers.get("Cookie"));
|
|
21
|
+
const surviving = /* @__PURE__ */ new Map();
|
|
22
|
+
for (const [name, value] of Object.entries(cookies)) if (!isProtectedCookieName(name)) surviving.set(name, value);
|
|
23
|
+
const headers = new Headers(original.headers);
|
|
24
|
+
if (surviving.size === 0) headers.delete("cookie");
|
|
25
|
+
else headers.set("cookie", serializeCookies(surviving));
|
|
26
|
+
const init = {
|
|
27
|
+
method: original.method,
|
|
28
|
+
headers,
|
|
29
|
+
redirect: original.redirect,
|
|
30
|
+
signal: original.signal
|
|
31
|
+
};
|
|
32
|
+
if (original.body !== null) {
|
|
33
|
+
init.body = original.body;
|
|
34
|
+
init.duplex = "half";
|
|
35
|
+
}
|
|
36
|
+
return new Request(original.url, init);
|
|
37
|
+
}
|
|
38
|
+
//#endregion
|
|
39
|
+
export { sanitizeRequest };
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=sanitize-request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize-request.js","names":[],"sources":["../../src/server/sanitize-request.ts"],"sourcesContent":["import { isProtectedCookieName } from './constants.ts';\nimport { parseCookies } from './utils/cookie-utils.ts';\n\nfunction serializeCookies(cookies: Map<string, string>): string {\n const parts: string[] = [];\n for (const [name, value] of cookies) {\n parts.push(`${name}=${value}`);\n }\n return parts.join('; ');\n}\n\n/**\n * Returns a clone of `original` whose `Cookie` header has every\n * protected cookie removed (see\n * {@link isProtectedCookieName}). When no other cookies\n * remain, the header is dropped entirely.\n *\n * Used by `createAppConnectRequestHandler` so the user's route\n * handlers never see — and therefore cannot leak — the access token,\n * session ID, or refresh-token cookies.\n */\nexport function sanitizeRequest(original: Request): Request {\n const cookies = parseCookies(original.headers.get('Cookie'));\n\n const surviving = new Map<string, string>();\n for (const [name, value] of Object.entries(cookies)) {\n if (!isProtectedCookieName(name)) {\n surviving.set(name, value);\n }\n }\n\n const headers = new Headers(original.headers);\n if (surviving.size === 0) {\n headers.delete('cookie');\n } else {\n headers.set('cookie', serializeCookies(surviving));\n }\n\n const init: RequestInit = {\n method: original.method,\n headers,\n redirect: original.redirect,\n signal: original.signal,\n };\n\n if (original.body !== null) {\n init.body = original.body;\n (init as RequestInit & { duplex: 'half' }).duplex = 'half';\n }\n\n return new Request(original.url, init);\n}\n"],"mappings":";;;AAGA,SAAS,iBAAiB,SAAsC;CAC9D,MAAM,QAAkB,EAAE;CAC1B,KAAK,MAAM,CAAC,MAAM,UAAU,SAC1B,MAAM,KAAK,GAAG,KAAK,GAAG,QAAQ;CAEhC,OAAO,MAAM,KAAK,KAAK;;;;;;;;;;;;AAazB,SAAgB,gBAAgB,UAA4B;CAC1D,MAAM,UAAU,aAAa,SAAS,QAAQ,IAAI,SAAS,CAAC;CAE5D,MAAM,4BAAY,IAAI,KAAqB;CAC3C,KAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,QAAQ,EACjD,IAAI,CAAC,sBAAsB,KAAK,EAC9B,UAAU,IAAI,MAAM,MAAM;CAI9B,MAAM,UAAU,IAAI,QAAQ,SAAS,QAAQ;CAC7C,IAAI,UAAU,SAAS,GACrB,QAAQ,OAAO,SAAS;MAExB,QAAQ,IAAI,UAAU,iBAAiB,UAAU,CAAC;CAGpD,MAAM,OAAoB;EACxB,QAAQ,SAAS;EACjB;EACA,UAAU,SAAS;EACnB,QAAQ,SAAS;EAClB;CAED,IAAI,SAAS,SAAS,MAAM;EAC1B,KAAK,OAAO,SAAS;EACrB,KAA2C,SAAS;;CAGtD,OAAO,IAAI,QAAQ,SAAS,KAAK,KAAK"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { AppKeys } from "./types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/server/secure-start-core.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Context passed to a function-style entrypoint loaded by `runSecureStart`.
|
|
6
|
+
* Contains imported `AppKeys` when CIMD or DPoP is enabled; otherwise
|
|
7
|
+
* `null` (traditional OAuth with `client_secret` and Bearer API calls).
|
|
8
|
+
*/
|
|
9
|
+
interface SecureStartContext {
|
|
10
|
+
appKeys: AppKeys | null;
|
|
11
|
+
}
|
|
12
|
+
interface SecureEntryPointExports {
|
|
13
|
+
start: (context: SecureStartContext) => Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Loader returned to `runSecureStart` that produces the entrypoint
|
|
17
|
+
* module. Always pass an `() => import('...')` arrow so the bundler
|
|
18
|
+
* preserves dynamic-import semantics.
|
|
19
|
+
*/
|
|
20
|
+
type SecureStartLoader = () => Promise<SecureEntryPointExports>;
|
|
21
|
+
//#endregion
|
|
22
|
+
export { SecureStartContext, SecureStartLoader };
|
|
23
|
+
//# sourceMappingURL=secure-start-core.d.ts.map
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { importAppKeys } from "./import-app-keys.js";
|
|
2
|
+
import { isHubspotAppPrivateKeyRequired } from "./utils/env-utils.js";
|
|
3
|
+
//#region src/server/secure-start-core.ts
|
|
4
|
+
const APP_PRIVATE_KEY_ENV = "HUBSPOT_APP_PRIVATE_KEY";
|
|
5
|
+
/**
|
|
6
|
+
* Loads `HUBSPOT_APP_PRIVATE_KEY` when CIMD or DPoP is enabled, deletes
|
|
7
|
+
* it from the environment so later code cannot re-read it, imports the
|
|
8
|
+
* entrypoint module via `loader`, and invokes `start` with `AppKeys` or
|
|
9
|
+
* `null` when both features are off. On failure, logs the error and
|
|
10
|
+
* exits with code 1.
|
|
11
|
+
*/
|
|
12
|
+
async function runSecureStart(loader, adapter) {
|
|
13
|
+
let appKeys = null;
|
|
14
|
+
if (isHubspotAppPrivateKeyRequired()) {
|
|
15
|
+
const envKey = adapter.readEnv(APP_PRIVATE_KEY_ENV)?.trim();
|
|
16
|
+
if (!envKey) throw new Error(`${APP_PRIVATE_KEY_ENV} is not set`);
|
|
17
|
+
appKeys = await importAppKeys(envKey);
|
|
18
|
+
adapter.deleteEnv(APP_PRIVATE_KEY_ENV);
|
|
19
|
+
}
|
|
20
|
+
return (await loader()).start({ appKeys }).catch((error) => {
|
|
21
|
+
console.error(error);
|
|
22
|
+
return adapter.exit(1);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { runSecureStart };
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=secure-start-core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secure-start-core.js","names":[],"sources":["../../src/server/secure-start-core.ts"],"sourcesContent":["import { importAppKeys } from './import-app-keys.ts';\nimport type { AppKeys } from './types.ts';\nimport { isHubspotAppPrivateKeyRequired } from './utils/env-utils.ts';\n\n/**\n * Context passed to a function-style entrypoint loaded by `runSecureStart`.\n * Contains imported `AppKeys` when CIMD or DPoP is enabled; otherwise\n * `null` (traditional OAuth with `client_secret` and Bearer API calls).\n */\nexport interface SecureStartContext {\n appKeys: AppKeys | null;\n}\n\ninterface SecureEntryPointExports {\n start: (context: SecureStartContext) => Promise<void>;\n}\n\n/**\n * Loader returned to `runSecureStart` that produces the entrypoint\n * module. Always pass an `() => import('...')` arrow so the bundler\n * preserves dynamic-import semantics.\n */\nexport type SecureStartLoader = () => Promise<SecureEntryPointExports>;\n\n/**\n * Platform adapters injected by the runtime-specific shim\n * (`node/start.ts` or `deno/start.ts`). Keeping the env/exit/delete\n * functions out of the core lets the shared logic stay platform-free.\n */\nexport interface SecureStartAdapter {\n /** Reads the named env var, or returns `undefined` when unset. */\n readEnv: (key: string) => string | undefined;\n /** Removes the named env var so child processes cannot read it. */\n deleteEnv: (key: string) => void;\n /** Terminates the process with the given exit code. */\n exit: (code: number) => never;\n}\n\nconst APP_PRIVATE_KEY_ENV = 'HUBSPOT_APP_PRIVATE_KEY';\n\n/**\n * Loads `HUBSPOT_APP_PRIVATE_KEY` when CIMD or DPoP is enabled, deletes\n * it from the environment so later code cannot re-read it, imports the\n * entrypoint module via `loader`, and invokes `start` with `AppKeys` or\n * `null` when both features are off. On failure, logs the error and\n * exits with code 1.\n */\nexport async function runSecureStart(\n loader: SecureStartLoader,\n adapter: SecureStartAdapter\n): Promise<void> {\n let appKeys: AppKeys | null = null;\n if (isHubspotAppPrivateKeyRequired()) {\n const envKey = adapter.readEnv(APP_PRIVATE_KEY_ENV)?.trim();\n if (!envKey) {\n throw new Error(`${APP_PRIVATE_KEY_ENV} is not set`);\n }\n appKeys = await importAppKeys(envKey);\n adapter.deleteEnv(APP_PRIVATE_KEY_ENV);\n }\n\n const exports = await loader();\n return exports.start({ appKeys }).catch((error) => {\n console.error(error);\n return adapter.exit(1);\n });\n}\n"],"mappings":";;;AAsCA,MAAM,sBAAsB;;;;;;;;AAS5B,eAAsB,eACpB,QACA,SACe;CACf,IAAI,UAA0B;CAC9B,IAAI,gCAAgC,EAAE;EACpC,MAAM,SAAS,QAAQ,QAAQ,oBAAoB,EAAE,MAAM;EAC3D,IAAI,CAAC,QACH,MAAM,IAAI,MAAM,GAAG,oBAAoB,aAAa;EAEtD,UAAU,MAAM,cAAc,OAAO;EACrC,QAAQ,UAAU,oBAAoB;;CAIxC,QAAO,MADe,QAAQ,EACf,MAAM,EAAE,SAAS,CAAC,CAAC,OAAO,UAAU;EACjD,QAAQ,MAAM,MAAM;EACpB,OAAO,QAAQ,KAAK,EAAE;GACtB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/shared/constants.ts
|
|
2
|
+
/**
|
|
3
|
+
* Constants whose values are part of the contract between the browser
|
|
4
|
+
* controller and the server-side hubspot-connect routes. Both halves
|
|
5
|
+
* import from this module so the wire format stays in sync.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Query parameter on the OAuth return URL that carries the new access
|
|
9
|
+
* token's expiry (Unix epoch milliseconds). The server emits this on
|
|
10
|
+
* the `auth/callback` redirect; the browser parses it during `initSdk`
|
|
11
|
+
* and then strips it from the URL via `history.replaceState`.
|
|
12
|
+
*/
|
|
13
|
+
const EXPIRES_AT_URL_PARAM = "__hs_expires_at";
|
|
14
|
+
//#endregion
|
|
15
|
+
export { EXPIRES_AT_URL_PARAM };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","names":[],"sources":["../../../src/shared/constants.ts"],"sourcesContent":["/**\n * Constants whose values are part of the contract between the browser\n * controller and the server-side hubspot-connect routes. Both halves\n * import from this module so the wire format stays in sync.\n */\n\n/**\n * Query parameter on the OAuth return URL that carries the new access\n * token's expiry (Unix epoch milliseconds). The server emits this on\n * the `auth/callback` redirect; the browser parses it during `initSdk`\n * and then strips it from the URL via `history.replaceState`.\n */\nexport const EXPIRES_AT_URL_PARAM = '__hs_expires_at';\n"],"mappings":";;;;;;;;;;;;AAYA,MAAa,uBAAuB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
//#region src/shared/encoding/base64.ts
|
|
2
|
+
/**
|
|
3
|
+
* Base64url encoding and decoding helpers shared by the browser and
|
|
4
|
+
* server halves of `@hubspot/app-connect-sdk`.
|
|
5
|
+
*
|
|
6
|
+
* Base64url (RFC 4648 §5) replaces `+`/`/` with `-`/`_` and drops `=`
|
|
7
|
+
* padding. JWT, DPoP, and JWK thumbprints all use this variant.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Encodes a binary buffer as a base64url string (RFC 4648 §5).
|
|
11
|
+
*/
|
|
12
|
+
function base64url(input) {
|
|
13
|
+
const bytes = input instanceof Uint8Array ? input : new Uint8Array(input);
|
|
14
|
+
let binary = "";
|
|
15
|
+
for (const byte of bytes) binary += String.fromCharCode(byte);
|
|
16
|
+
return btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Decodes a base64url string into a `Uint8Array`. Tolerates missing
|
|
20
|
+
* padding by re-adding it before delegating to `atob`.
|
|
21
|
+
*/
|
|
22
|
+
function base64urlDecode(encoded) {
|
|
23
|
+
const padLen = (4 - encoded.length % 4) % 4;
|
|
24
|
+
const padded = encoded.replace(/-/g, "+").replace(/_/g, "/") + "=".repeat(padLen);
|
|
25
|
+
const binary = atob(padded);
|
|
26
|
+
const out = new Uint8Array(new ArrayBuffer(binary.length));
|
|
27
|
+
for (let i = 0; i < binary.length; i++) out[i] = binary.charCodeAt(i) ?? 0;
|
|
28
|
+
return out;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Decodes a *standard* base64 string (with `+`/`/` and required `=`
|
|
32
|
+
* padding) into an `ArrayBuffer`. Used for PKCS8-encoded private keys
|
|
33
|
+
* stored in environment variables.
|
|
34
|
+
*/
|
|
35
|
+
function base64StandardToArrayBuffer(b64) {
|
|
36
|
+
const bin = atob(b64);
|
|
37
|
+
const buf = new ArrayBuffer(bin.length);
|
|
38
|
+
const view = new Uint8Array(buf);
|
|
39
|
+
for (let i = 0; i < bin.length; i++) view[i] = bin.charCodeAt(i) ?? 0;
|
|
40
|
+
return buf;
|
|
41
|
+
}
|
|
42
|
+
//#endregion
|
|
43
|
+
export { base64StandardToArrayBuffer, base64url, base64urlDecode };
|
|
44
|
+
|
|
45
|
+
//# sourceMappingURL=base64.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64.js","names":[],"sources":["../../../../src/shared/encoding/base64.ts"],"sourcesContent":["/**\n * Base64url encoding and decoding helpers shared by the browser and\n * server halves of `@hubspot/app-connect-sdk`.\n *\n * Base64url (RFC 4648 §5) replaces `+`/`/` with `-`/`_` and drops `=`\n * padding. JWT, DPoP, and JWK thumbprints all use this variant.\n */\n\n/**\n * Encodes a binary buffer as a base64url string (RFC 4648 §5).\n */\nexport function base64url(input: ArrayBuffer | Uint8Array): string {\n const bytes = input instanceof Uint8Array ? input : new Uint8Array(input);\n let binary = '';\n for (const byte of bytes) {\n binary += String.fromCharCode(byte);\n }\n return btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\n}\n\n/**\n * Decodes a base64url string into a `Uint8Array`. Tolerates missing\n * padding by re-adding it before delegating to `atob`.\n */\nexport function base64urlDecode(encoded: string): Uint8Array<ArrayBuffer> {\n const padLen = (4 - (encoded.length % 4)) % 4;\n const padded =\n encoded.replace(/-/g, '+').replace(/_/g, '/') + '='.repeat(padLen);\n const binary = atob(padded);\n const out = new Uint8Array(new ArrayBuffer(binary.length));\n for (let i = 0; i < binary.length; i++) {\n out[i] = binary.charCodeAt(i) ?? 0;\n }\n return out;\n}\n\n/**\n * Decodes a *standard* base64 string (with `+`/`/` and required `=`\n * padding) into an `ArrayBuffer`. Used for PKCS8-encoded private keys\n * stored in environment variables.\n */\nexport function base64StandardToArrayBuffer(b64: string): ArrayBuffer {\n const bin = atob(b64);\n const buf = new ArrayBuffer(bin.length);\n const view = new Uint8Array(buf);\n for (let i = 0; i < bin.length; i++) {\n view[i] = bin.charCodeAt(i) ?? 0;\n }\n return buf;\n}\n"],"mappings":";;;;;;;;;;;AAWA,SAAgB,UAAU,OAAyC;CACjE,MAAM,QAAQ,iBAAiB,aAAa,QAAQ,IAAI,WAAW,MAAM;CACzE,IAAI,SAAS;CACb,KAAK,MAAM,QAAQ,OACjB,UAAU,OAAO,aAAa,KAAK;CAErC,OAAO,KAAK,OAAO,CAAC,QAAQ,OAAO,IAAI,CAAC,QAAQ,OAAO,IAAI,CAAC,QAAQ,MAAM,GAAG;;;;;;AAO/E,SAAgB,gBAAgB,SAA0C;CACxE,MAAM,UAAU,IAAK,QAAQ,SAAS,KAAM;CAC5C,MAAM,SACJ,QAAQ,QAAQ,MAAM,IAAI,CAAC,QAAQ,MAAM,IAAI,GAAG,IAAI,OAAO,OAAO;CACpE,MAAM,SAAS,KAAK,OAAO;CAC3B,MAAM,MAAM,IAAI,WAAW,IAAI,YAAY,OAAO,OAAO,CAAC;CAC1D,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KACjC,IAAI,KAAK,OAAO,WAAW,EAAE,IAAI;CAEnC,OAAO;;;;;;;AAQT,SAAgB,4BAA4B,KAA0B;CACpE,MAAM,MAAM,KAAK,IAAI;CACrB,MAAM,MAAM,IAAI,YAAY,IAAI,OAAO;CACvC,MAAM,OAAO,IAAI,WAAW,IAAI;CAChC,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAC9B,KAAK,KAAK,IAAI,WAAW,EAAE,IAAI;CAEjC,OAAO"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region src/shared/encoding/sha256.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Hashes a UTF-8 string with SHA-256 and encodes the digest as
|
|
4
|
+
* base64url. Used to compute DPoP `ath`/`sid` claims, JWK thumbprints
|
|
5
|
+
* (RFC 7638), and PKCE code challenges.
|
|
6
|
+
*/
|
|
7
|
+
declare function sha256base64url(input: string): Promise<string>;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { sha256base64url };
|
|
10
|
+
//# sourceMappingURL=sha256.d.ts.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { base64url } from "./base64.js";
|
|
2
|
+
//#region src/shared/encoding/sha256.ts
|
|
3
|
+
/**
|
|
4
|
+
* Hashes a UTF-8 string with SHA-256 and encodes the digest as
|
|
5
|
+
* base64url. Used to compute DPoP `ath`/`sid` claims, JWK thumbprints
|
|
6
|
+
* (RFC 7638), and PKCE code challenges.
|
|
7
|
+
*/
|
|
8
|
+
async function sha256base64url(input) {
|
|
9
|
+
const digest = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(input));
|
|
10
|
+
return base64url(new Uint8Array(digest));
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { sha256base64url };
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=sha256.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sha256.js","names":[],"sources":["../../../../src/shared/encoding/sha256.ts"],"sourcesContent":["import { base64url } from './base64.ts';\n\n/**\n * Hashes a UTF-8 string with SHA-256 and encodes the digest as\n * base64url. Used to compute DPoP `ath`/`sid` claims, JWK thumbprints\n * (RFC 7638), and PKCE code challenges.\n */\nexport async function sha256base64url(input: string): Promise<string> {\n const digest = await crypto.subtle.digest(\n 'SHA-256',\n new TextEncoder().encode(input)\n );\n return base64url(new Uint8Array(digest));\n}\n"],"mappings":";;;;;;;AAOA,eAAsB,gBAAgB,OAAgC;CACpE,MAAM,SAAS,MAAM,OAAO,OAAO,OACjC,WACA,IAAI,aAAa,CAAC,OAAO,MAAM,CAChC;CACD,OAAO,UAAU,IAAI,WAAW,OAAO,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/shared/logger.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Pluggable logger contract used by the SDK on both the browser and
|
|
4
|
+
* server. Consumers can pass `console`-like loggers, structured
|
|
5
|
+
* loggers (pino / winston / etc.) or no-op stubs in tests.
|
|
6
|
+
*/
|
|
7
|
+
interface Logger {
|
|
8
|
+
debug: (message: string, ...args: unknown[]) => void;
|
|
9
|
+
info: (message: string, ...args: unknown[]) => void;
|
|
10
|
+
warn: (message: string, ...args: unknown[]) => void;
|
|
11
|
+
error: (message: string, ...args: unknown[]) => void;
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
export { Logger };
|
|
15
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/shared/logger.ts
|
|
2
|
+
/**
|
|
3
|
+
* Logger that swallows every message. Convenient for tests and for
|
|
4
|
+
* the SDK's server-side handlers when no logger is provided by the
|
|
5
|
+
* host application.
|
|
6
|
+
*/
|
|
7
|
+
const noopLogger = {
|
|
8
|
+
debug: () => {},
|
|
9
|
+
info: () => {},
|
|
10
|
+
warn: () => {},
|
|
11
|
+
error: () => {}
|
|
12
|
+
};
|
|
13
|
+
//#endregion
|
|
14
|
+
export { noopLogger };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","names":[],"sources":["../../../src/shared/logger.ts"],"sourcesContent":["/**\n * Pluggable logger contract used by the SDK on both the browser and\n * server. Consumers can pass `console`-like loggers, structured\n * loggers (pino / winston / etc.) or no-op stubs in tests.\n */\nexport interface Logger {\n debug: (message: string, ...args: unknown[]) => void;\n info: (message: string, ...args: unknown[]) => void;\n warn: (message: string, ...args: unknown[]) => void;\n error: (message: string, ...args: unknown[]) => void;\n}\n\nfunction formatPrefix(name: string): string {\n return `[${name}]`;\n}\n\n/**\n * Creates a console-backed logger that prefixes every line with the\n * supplied `name`. Used as the default when no custom logger is\n * provided.\n */\nexport function createLogger(name: string): Logger {\n const prefix = formatPrefix(name);\n return {\n debug: (message, ...args) => {\n console.debug(prefix, message, ...args);\n },\n info: (message, ...args) => {\n console.info(prefix, message, ...args);\n },\n warn: (message, ...args) => {\n console.warn(prefix, message, ...args);\n },\n error: (message, ...args) => {\n console.error(prefix, message, ...args);\n },\n };\n}\n\n/**\n * Logger that swallows every message. Convenient for tests and for\n * the SDK's server-side handlers when no logger is provided by the\n * host application.\n */\nexport const noopLogger: Logger = {\n debug: () => {},\n info: () => {},\n warn: () => {},\n error: () => {},\n};\n"],"mappings":";;;;;;AA4CA,MAAa,aAAqB;CAChC,aAAa;CACb,YAAY;CACZ,YAAY;CACZ,aAAa;CACd"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
//#region src/server/types.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Imported app key material used to sign client assertions and DPoP
|
|
4
|
+
* proofs. Produced by `secureStart`/`importAppKeys`; never store this
|
|
5
|
+
* shape on disk.
|
|
6
|
+
*/
|
|
7
|
+
interface AppKeys {
|
|
8
|
+
/** ES256 private key as a non-extractable WebCrypto `CryptoKey`. */
|
|
9
|
+
appPrivateKey: CryptoKey;
|
|
10
|
+
/** Public key in JWK form. Used to derive the JWK thumbprint and `cnf`. */
|
|
11
|
+
appPublicKeyJwk: JsonWebKey;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Request shape accepted by `HubSpotProxy.fetch`. Only the `path`
|
|
15
|
+
* is required; everything else mirrors the equivalent fetch fields.
|
|
16
|
+
*/
|
|
17
|
+
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
|
+
* Authenticated proxy returned by `createHubSpotProxy`. Use it
|
|
33
|
+
* inside Hono handlers (via `c.env.hubSpotProxy`) to call
|
|
34
|
+
* HubSpot's API on behalf of the browser session that issued the
|
|
35
|
+
* incoming request.
|
|
36
|
+
*/
|
|
37
|
+
interface HubSpotProxy {
|
|
38
|
+
/**
|
|
39
|
+
* `true` when the session cookies present on the inbound request
|
|
40
|
+
* yielded a usable access token. When `false`, every `fetch()` call
|
|
41
|
+
* returns a 401 without contacting the upstream.
|
|
42
|
+
*/
|
|
43
|
+
authenticated: boolean;
|
|
44
|
+
/** Performs an authenticated upstream request. */
|
|
45
|
+
fetch: (request: HubSpotProxyRequest) => Promise<Response>;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* RFC 7517 JWK Set. Returned by HubSpot's `/oauth/v1/jwks` endpoint
|
|
49
|
+
* and used to verify access tokens on the resource server.
|
|
50
|
+
*/
|
|
51
|
+
interface JwkSet {
|
|
52
|
+
keys: JsonWebKey[];
|
|
53
|
+
}
|
|
54
|
+
//#endregion
|
|
55
|
+
export { AppKeys, HubSpotProxy, JwkSet };
|
|
56
|
+
//# sourceMappingURL=types.d.ts.map
|