@hubspot/app-connect-sdk 1.0.0-alpha.3 → 1.0.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-tsdown.log +20 -492
- package/build/tsconfig.browser.tsbuildinfo +1 -1
- package/build/tsconfig.server.tsbuildinfo +1 -1
- package/dist/browser/{create-crdncXsh.js → create-hzqjIhmO.js} +2 -2
- package/dist/browser/create-hzqjIhmO.js.map +1 -0
- package/dist/browser/index.js +1 -1
- package/dist/browser/react/lovable.js +1 -1
- package/dist/server/api-client.d.ts +60625 -197
- package/dist/server/api-client.js +5826 -100
- package/dist/server/api-client.js.map +1 -0
- package/dist/server/{api-client-core/client.js → binary-data-BOalJzKu.js} +58 -3
- package/dist/server/binary-data-BOalJzKu.js.map +1 -0
- package/dist/server/lovable.d.ts +117 -6
- package/dist/server/lovable.js +1458 -3
- package/dist/server/lovable.js.map +1 -0
- package/dist/server/oauth.d.ts +128 -6
- package/dist/server/oauth.js +1 -4
- package/dist/server/sha256-B7y8GBFB.js +228 -0
- package/dist/server/sha256-B7y8GBFB.js.map +1 -0
- package/dist/server/{types.d.ts → types-5gfN91Fq.d.ts} +2 -2
- package/dist/server/{api-client-core/types.d.ts → types-DEOUH4wE.d.ts} +2 -2
- package/package.json +5 -11
- package/src/browser/app-connect-controller/connect-start.ts +2 -1
- package/tsdown.config.ts +1 -1
- package/.turbo/turbo-format$colon$check.log +0 -4
- package/.turbo/turbo-lint.log +0 -2
- package/.turbo/turbo-test.log +0 -78
- package/dist/browser/create-crdncXsh.js.map +0 -1
- package/dist/server/api-client-core/apis/account/account-info-types.generated.d.ts +0 -111
- package/dist/server/api-client-core/apis/account/account-info.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/account/account-info.generated.js +0 -9
- package/dist/server/api-client-core/apis/account/account-info.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/account/audit-logs-types.generated.d.ts +0 -247
- package/dist/server/api-client-core/apis/account/audit-logs.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/account/audit-logs.generated.js +0 -28
- package/dist/server/api-client-core/apis/account/audit-logs.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/auth/oauth-types.generated.d.ts +0 -121
- package/dist/server/api-client-core/apis/auth/oauth.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/auth/oauth.generated.js +0 -19
- package/dist/server/api-client-core/apis/auth/oauth.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/automation/actions-types.generated.d.ts +0 -933
- package/dist/server/api-client-core/apis/automation/actions.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/automation/actions.generated.js +0 -121
- package/dist/server/api-client-core/apis/automation/actions.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/automation/sequences-types.generated.d.ts +0 -422
- package/dist/server/api-client-core/apis/automation/sequences.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/automation/sequences.generated.js +0 -22
- package/dist/server/api-client-core/apis/automation/sequences.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/business-units-types.generated.d.ts +0 -75
- package/dist/server/api-client-core/apis/business-units.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/business-units.generated.js +0 -12
- package/dist/server/api-client-core/apis/business-units.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/cms/authors-types.generated.d.ts +0 -551
- package/dist/server/api-client-core/apis/cms/authors.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/cms/authors.generated.js +0 -163
- package/dist/server/api-client-core/apis/cms/authors.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/cms/blog-settings-types.generated.d.ts +0 -366
- package/dist/server/api-client-core/apis/cms/blog-settings.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/cms/blog-settings.generated.js +0 -43
- package/dist/server/api-client-core/apis/cms/blog-settings.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/cms/cms-content-audit-types.generated.d.ts +0 -157
- package/dist/server/api-client-core/apis/cms/cms-content-audit.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/cms/cms-content-audit.generated.js +0 -18
- package/dist/server/api-client-core/apis/cms/cms-content-audit.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/cms/domains-types.generated.d.ts +0 -193
- package/dist/server/api-client-core/apis/cms/domains.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/cms/domains.generated.js +0 -20
- package/dist/server/api-client-core/apis/cms/domains.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/cms/hubdb-types.generated.d.ts +0 -1097
- package/dist/server/api-client-core/apis/cms/hubdb.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/cms/hubdb.generated.js +0 -192
- package/dist/server/api-client-core/apis/cms/hubdb.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/cms/media-bridge-types.generated.d.ts +0 -1780
- package/dist/server/api-client-core/apis/cms/media-bridge.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/cms/media-bridge.generated.js +0 -185
- package/dist/server/api-client-core/apis/cms/media-bridge.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/cms/pages-types.generated.d.ts +0 -1768
- package/dist/server/api-client-core/apis/cms/pages.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/cms/pages.generated.js +0 -331
- package/dist/server/api-client-core/apis/cms/pages.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/cms/posts-types.generated.d.ts +0 -1090
- package/dist/server/api-client-core/apis/cms/posts.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/cms/posts.generated.js +0 -201
- package/dist/server/api-client-core/apis/cms/posts.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/cms/site-search-types.generated.d.ts +0 -200
- package/dist/server/api-client-core/apis/cms/site-search.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/cms/site-search.generated.js +0 -32
- package/dist/server/api-client-core/apis/cms/site-search.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/cms/source-code-types.generated.d.ts +0 -218
- package/dist/server/api-client-core/apis/cms/source-code.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/cms/source-code.generated.js +0 -52
- package/dist/server/api-client-core/apis/cms/source-code.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/cms/tags-types.generated.d.ts +0 -515
- package/dist/server/api-client-core/apis/cms/tags.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/cms/tags.generated.js +0 -163
- package/dist/server/api-client-core/apis/cms/tags.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/cms/url-mappings-types.generated.d.ts +0 -177
- package/dist/server/api-client-core/apis/cms/url-mappings.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/cms/url-mappings.generated.js +0 -14
- package/dist/server/api-client-core/apis/cms/url-mappings.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/cms/url-redirects-types.generated.d.ts +0 -226
- package/dist/server/api-client-core/apis/cms/url-redirects.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/cms/url-redirects.generated.js +0 -26
- package/dist/server/api-client-core/apis/cms/url-redirects.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/communication-preferences/subscriptions-types.generated.d.ts +0 -802
- package/dist/server/api-client-core/apis/communication-preferences/subscriptions.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/communication-preferences/subscriptions.generated.js +0 -74
- package/dist/server/api-client-core/apis/communication-preferences/subscriptions.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/conversations/custom-channels-types.generated.d.ts +0 -551
- package/dist/server/api-client-core/apis/conversations/custom-channels.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/conversations/custom-channels.generated.js +0 -80
- package/dist/server/api-client-core/apis/conversations/custom-channels.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/conversations/visitor-identification-types.generated.d.ts +0 -60
- package/dist/server/api-client-core/apis/conversations/visitor-identification.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/conversations/visitor-identification.generated.js +0 -6
- package/dist/server/api-client-core/apis/conversations/visitor-identification.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/conversations-types.generated.d.ts +0 -908
- package/dist/server/api-client-core/apis/conversations.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/conversations.generated.js +0 -108
- package/dist/server/api-client-core/apis/conversations.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/app-uninstalls-types.generated.d.ts +0 -37
- package/dist/server/api-client-core/apis/crm/app-uninstalls.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/app-uninstalls.generated.js +0 -6
- package/dist/server/api-client-core/apis/crm/app-uninstalls.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/appointments-types.generated.d.ts +0 -989
- package/dist/server/api-client-core/apis/crm/appointments.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/appointments.generated.js +0 -118
- package/dist/server/api-client-core/apis/crm/appointments.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/associations-schema-types.generated.d.ts +0 -329
- package/dist/server/api-client-core/apis/crm/associations-schema.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/associations-schema.generated.js +0 -60
- package/dist/server/api-client-core/apis/crm/associations-schema.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/associations-types.generated.d.ts +0 -661
- package/dist/server/api-client-core/apis/crm/associations.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/associations.generated.js +0 -83
- package/dist/server/api-client-core/apis/crm/associations.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/calling-extensions-types.generated.d.ts +0 -466
- package/dist/server/api-client-core/apis/crm/calling-extensions.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/calling-extensions.generated.js +0 -42
- package/dist/server/api-client-core/apis/crm/calling-extensions.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/calls-types.generated.d.ts +0 -850
- package/dist/server/api-client-core/apis/crm/calls.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/calls.generated.js +0 -66
- package/dist/server/api-client-core/apis/crm/calls.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/carts-types.generated.d.ts +0 -850
- package/dist/server/api-client-core/apis/crm/carts.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/carts.generated.js +0 -66
- package/dist/server/api-client-core/apis/crm/carts.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/commerce-payments-types.generated.d.ts +0 -850
- package/dist/server/api-client-core/apis/crm/commerce-payments.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/commerce-payments.generated.js +0 -66
- package/dist/server/api-client-core/apis/crm/commerce-payments.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/commerce-subscriptions-types.generated.d.ts +0 -847
- package/dist/server/api-client-core/apis/crm/commerce-subscriptions.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/commerce-subscriptions.generated.js +0 -66
- package/dist/server/api-client-core/apis/crm/commerce-subscriptions.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/communications-types.generated.d.ts +0 -850
- package/dist/server/api-client-core/apis/crm/communications.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/communications.generated.js +0 -66
- package/dist/server/api-client-core/apis/crm/communications.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/companies-types.generated.d.ts +0 -884
- package/dist/server/api-client-core/apis/crm/companies.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/companies.generated.js +0 -67
- package/dist/server/api-client-core/apis/crm/companies.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/contacts-types.generated.d.ts +0 -899
- package/dist/server/api-client-core/apis/crm/contacts.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/contacts.generated.js +0 -70
- package/dist/server/api-client-core/apis/crm/contacts.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/contracts-types.generated.d.ts +0 -850
- package/dist/server/api-client-core/apis/crm/contracts.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/contracts.generated.js +0 -66
- package/dist/server/api-client-core/apis/crm/contracts.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/courses-types.generated.d.ts +0 -853
- package/dist/server/api-client-core/apis/crm/courses.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/courses.generated.js +0 -66
- package/dist/server/api-client-core/apis/crm/courses.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/crm-owners-types.generated.d.ts +0 -140
- package/dist/server/api-client-core/apis/crm/crm-owners.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/crm-owners.generated.js +0 -20
- package/dist/server/api-client-core/apis/crm/crm-owners.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/custom-objects-types.generated.d.ts +0 -934
- package/dist/server/api-client-core/apis/crm/custom-objects.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/custom-objects.generated.js +0 -101
- package/dist/server/api-client-core/apis/crm/custom-objects.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/deal-splits-types.generated.d.ts +0 -196
- package/dist/server/api-client-core/apis/crm/deal-splits.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/deal-splits.generated.js +0 -9
- package/dist/server/api-client-core/apis/crm/deal-splits.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/deals-types.generated.d.ts +0 -872
- package/dist/server/api-client-core/apis/crm/deals.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/deals.generated.js +0 -67
- package/dist/server/api-client-core/apis/crm/deals.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/discounts-types.generated.d.ts +0 -846
- package/dist/server/api-client-core/apis/crm/discounts.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/discounts.generated.js +0 -66
- package/dist/server/api-client-core/apis/crm/discounts.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/emails-types.generated.d.ts +0 -850
- package/dist/server/api-client-core/apis/crm/emails.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/emails.generated.js +0 -66
- package/dist/server/api-client-core/apis/crm/emails.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/exports-types.generated.d.ts +0 -281
- package/dist/server/api-client-core/apis/crm/exports.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/exports.generated.js +0 -12
- package/dist/server/api-client-core/apis/crm/exports.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/feedback-submissions-types.generated.d.ts +0 -616
- package/dist/server/api-client-core/apis/crm/feedback-submissions.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/feedback-submissions.generated.js +0 -55
- package/dist/server/api-client-core/apis/crm/feedback-submissions.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/fees-types.generated.d.ts +0 -850
- package/dist/server/api-client-core/apis/crm/fees.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/fees.generated.js +0 -66
- package/dist/server/api-client-core/apis/crm/fees.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/goal-targets-types.generated.d.ts +0 -850
- package/dist/server/api-client-core/apis/crm/goal-targets.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/goal-targets.generated.js +0 -66
- package/dist/server/api-client-core/apis/crm/goal-targets.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/imports-types.generated.d.ts +0 -371
- package/dist/server/api-client-core/apis/crm/imports.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/imports.generated.js +0 -30
- package/dist/server/api-client-core/apis/crm/imports.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/invoices-types.generated.d.ts +0 -850
- package/dist/server/api-client-core/apis/crm/invoices.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/invoices.generated.js +0 -66
- package/dist/server/api-client-core/apis/crm/invoices.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/leads-types.generated.d.ts +0 -850
- package/dist/server/api-client-core/apis/crm/leads.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/leads.generated.js +0 -66
- package/dist/server/api-client-core/apis/crm/leads.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/limits-tracking-types.generated.d.ts +0 -331
- package/dist/server/api-client-core/apis/crm/limits-tracking.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/limits-tracking.generated.js +0 -22
- package/dist/server/api-client-core/apis/crm/limits-tracking.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/line-items-types.generated.d.ts +0 -850
- package/dist/server/api-client-core/apis/crm/line-items.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/line-items.generated.js +0 -66
- package/dist/server/api-client-core/apis/crm/line-items.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/listings-types.generated.d.ts +0 -853
- package/dist/server/api-client-core/apis/crm/listings.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/listings.generated.js +0 -66
- package/dist/server/api-client-core/apis/crm/listings.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/lists-types.generated.d.ts +0 -2265
- package/dist/server/api-client-core/apis/crm/lists.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/lists.generated.js +0 -105
- package/dist/server/api-client-core/apis/crm/lists.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/meetings-types.generated.d.ts +0 -850
- package/dist/server/api-client-core/apis/crm/meetings.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/meetings.generated.js +0 -66
- package/dist/server/api-client-core/apis/crm/meetings.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/notes-types.generated.d.ts +0 -850
- package/dist/server/api-client-core/apis/crm/notes.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/notes.generated.js +0 -66
- package/dist/server/api-client-core/apis/crm/notes.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/object-library-types.generated.d.ts +0 -60
- package/dist/server/api-client-core/apis/crm/object-library.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/object-library.generated.js +0 -9
- package/dist/server/api-client-core/apis/crm/object-library.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/objects-types.generated.d.ts +0 -712
- package/dist/server/api-client-core/apis/crm/objects.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/objects.generated.js +0 -76
- package/dist/server/api-client-core/apis/crm/objects.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/orders-types.generated.d.ts +0 -850
- package/dist/server/api-client-core/apis/crm/orders.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/orders.generated.js +0 -66
- package/dist/server/api-client-core/apis/crm/orders.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/partner-clients-types.generated.d.ts +0 -725
- package/dist/server/api-client-core/apis/crm/partner-clients.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/partner-clients.generated.js +0 -71
- package/dist/server/api-client-core/apis/crm/partner-clients.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/partner-services-types.generated.d.ts +0 -725
- package/dist/server/api-client-core/apis/crm/partner-services.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/partner-services.generated.js +0 -71
- package/dist/server/api-client-core/apis/crm/partner-services.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/pipelines-types.generated.d.ts +0 -430
- package/dist/server/api-client-core/apis/crm/pipelines.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/pipelines.generated.js +0 -94
- package/dist/server/api-client-core/apis/crm/pipelines.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/postal-mail-types.generated.d.ts +0 -844
- package/dist/server/api-client-core/apis/crm/postal-mail.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/postal-mail.generated.js +0 -66
- package/dist/server/api-client-core/apis/crm/postal-mail.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/products-types.generated.d.ts +0 -850
- package/dist/server/api-client-core/apis/crm/products.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/products.generated.js +0 -66
- package/dist/server/api-client-core/apis/crm/products.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/projects-types.generated.d.ts +0 -881
- package/dist/server/api-client-core/apis/crm/projects.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/projects.generated.js +0 -67
- package/dist/server/api-client-core/apis/crm/projects.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/properties-types.generated.d.ts +0 -603
- package/dist/server/api-client-core/apis/crm/properties.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/properties.generated.js +0 -86
- package/dist/server/api-client-core/apis/crm/properties.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/property-validations-types.generated.d.ts +0 -121
- package/dist/server/api-client-core/apis/crm/property-validations.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/property-validations.generated.js +0 -25
- package/dist/server/api-client-core/apis/crm/property-validations.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/public-app-crm-cards-types.generated.d.ts +0 -486
- package/dist/server/api-client-core/apis/crm/public-app-crm-cards.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/public-app-crm-cards.generated.js +0 -34
- package/dist/server/api-client-core/apis/crm/public-app-crm-cards.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/public-app-feature-flags-types.generated.d.ts +0 -247
- package/dist/server/api-client-core/apis/crm/public-app-feature-flags.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/public-app-feature-flags.generated.js +0 -69
- package/dist/server/api-client-core/apis/crm/public-app-feature-flags.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/quotes-types.generated.d.ts +0 -850
- package/dist/server/api-client-core/apis/crm/quotes.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/quotes.generated.js +0 -66
- package/dist/server/api-client-core/apis/crm/quotes.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/schemas-types.generated.d.ts +0 -669
- package/dist/server/api-client-core/apis/crm/schemas.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/schemas.generated.js +0 -41
- package/dist/server/api-client-core/apis/crm/schemas.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/services-types.generated.d.ts +0 -853
- package/dist/server/api-client-core/apis/crm/services.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/services.generated.js +0 -66
- package/dist/server/api-client-core/apis/crm/services.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/tasks-types.generated.d.ts +0 -850
- package/dist/server/api-client-core/apis/crm/tasks.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/tasks.generated.js +0 -66
- package/dist/server/api-client-core/apis/crm/tasks.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/taxes-types.generated.d.ts +0 -850
- package/dist/server/api-client-core/apis/crm/taxes.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/taxes.generated.js +0 -66
- package/dist/server/api-client-core/apis/crm/taxes.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/tickets-types.generated.d.ts +0 -884
- package/dist/server/api-client-core/apis/crm/tickets.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/tickets.generated.js +0 -67
- package/dist/server/api-client-core/apis/crm/tickets.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/timeline-types.generated.d.ts +0 -187
- package/dist/server/api-client-core/apis/crm/timeline.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/timeline.generated.js +0 -12
- package/dist/server/api-client-core/apis/crm/timeline.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/transcriptions-types.generated.d.ts +0 -152
- package/dist/server/api-client-core/apis/crm/transcriptions.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/transcriptions.generated.js +0 -15
- package/dist/server/api-client-core/apis/crm/transcriptions.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/users-types.generated.d.ts +0 -850
- package/dist/server/api-client-core/apis/crm/users.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/users.generated.js +0 -66
- package/dist/server/api-client-core/apis/crm/users.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/crm/video-conferencing-extension-types.generated.d.ts +0 -72
- package/dist/server/api-client-core/apis/crm/video-conferencing-extension.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/crm/video-conferencing-extension.generated.js +0 -13
- package/dist/server/api-client-core/apis/crm/video-conferencing-extension.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/events/manage-event-definitions-types.generated.d.ts +0 -1005
- package/dist/server/api-client-core/apis/events/manage-event-definitions.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/events/manage-event-definitions.generated.js +0 -39
- package/dist/server/api-client-core/apis/events/manage-event-definitions.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/events/send-event-completions-types.generated.d.ts +0 -94
- package/dist/server/api-client-core/apis/events/send-event-completions.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/events/send-event-completions.generated.js +0 -9
- package/dist/server/api-client-core/apis/events/send-event-completions.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/events-types.generated.d.ts +0 -137
- package/dist/server/api-client-core/apis/events.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/events.generated.js +0 -23
- package/dist/server/api-client-core/apis/events.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/files-types.generated.d.ts +0 -791
- package/dist/server/api-client-core/apis/files.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/files.generated.js +0 -119
- package/dist/server/api-client-core/apis/files.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/marketing/campaigns-public-api-types.generated.d.ts +0 -989
- package/dist/server/api-client-core/apis/marketing/campaigns-public-api.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/marketing/campaigns-public-api.generated.js +0 -139
- package/dist/server/api-client-core/apis/marketing/campaigns-public-api.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/marketing/marketing-emails-types.generated.d.ts +0 -883
- package/dist/server/api-client-core/apis/marketing/marketing-emails.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/marketing/marketing-emails.generated.js +0 -108
- package/dist/server/api-client-core/apis/marketing/marketing-emails.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/marketing/marketing-events-types.generated.d.ts +0 -1788
- package/dist/server/api-client-core/apis/marketing/marketing-events.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/marketing/marketing-events.generated.js +0 -176
- package/dist/server/api-client-core/apis/marketing/marketing-events.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/marketing/single-send-types.generated.d.ts +0 -123
- package/dist/server/api-client-core/apis/marketing/single-send.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/marketing/single-send.generated.js +0 -6
- package/dist/server/api-client-core/apis/marketing/single-send.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/marketing/transactional-single-send-types.generated.d.ts +0 -257
- package/dist/server/api-client-core/apis/marketing/transactional-single-send.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/marketing/transactional-single-send.generated.js +0 -20
- package/dist/server/api-client-core/apis/marketing/transactional-single-send.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/meta/origins-types.generated.d.ts +0 -77
- package/dist/server/api-client-core/apis/meta/origins.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/meta/origins.generated.js +0 -15
- package/dist/server/api-client-core/apis/meta/origins.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/scheduler/meetings-types.generated.d.ts +0 -913
- package/dist/server/api-client-core/apis/scheduler/meetings.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/scheduler/meetings.generated.js +0 -34
- package/dist/server/api-client-core/apis/scheduler/meetings.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/settings/multicurrency-types.generated.d.ts +0 -404
- package/dist/server/api-client-core/apis/settings/multicurrency.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/settings/multicurrency.generated.js +0 -38
- package/dist/server/api-client-core/apis/settings/multicurrency.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/settings/tax-rates-types.generated.d.ts +0 -111
- package/dist/server/api-client-core/apis/settings/tax-rates.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/settings/tax-rates.generated.js +0 -13
- package/dist/server/api-client-core/apis/settings/tax-rates.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/settings/user-provisioning-types.generated.d.ts +0 -297
- package/dist/server/api-client-core/apis/settings/user-provisioning.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/settings/user-provisioning.generated.js +0 -31
- package/dist/server/api-client-core/apis/settings/user-provisioning.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/webhooks-journal-types.generated.d.ts +0 -643
- package/dist/server/api-client-core/apis/webhooks-journal.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/webhooks-journal.generated.js +0 -75
- package/dist/server/api-client-core/apis/webhooks-journal.generated.js.map +0 -1
- package/dist/server/api-client-core/apis/webhooks-types.generated.d.ts +0 -1016
- package/dist/server/api-client-core/apis/webhooks.generated.d.ts +0 -7
- package/dist/server/api-client-core/apis/webhooks.generated.js +0 -105
- package/dist/server/api-client-core/apis/webhooks.generated.js.map +0 -1
- package/dist/server/api-client-core/binary-data.d.ts +0 -33
- package/dist/server/api-client-core/binary-data.js +0 -29
- package/dist/server/api-client-core/binary-data.js.map +0 -1
- package/dist/server/api-client-core/client.d.ts +0 -14
- package/dist/server/api-client-core/client.js.map +0 -1
- package/dist/server/api-client-core/codegen-helpers/file-op-wrappers.js +0 -25
- package/dist/server/api-client-core/codegen-helpers/file-op-wrappers.js.map +0 -1
- package/dist/server/api-client-core/errors.d.ts +0 -27
- package/dist/server/api-client-core/errors.js +0 -33
- package/dist/server/api-client-core/errors.js.map +0 -1
- package/dist/server/api-client-core/op.d.ts +0 -37
- package/dist/server/api-client-core/op.js +0 -44
- package/dist/server/api-client-core/op.js.map +0 -1
- package/dist/server/api-client-core/pagination.d.ts +0 -60
- package/dist/server/api-client-core/pagination.js +0 -103
- package/dist/server/api-client-core/pagination.js.map +0 -1
- package/dist/server/api-client-core/plugins/fetch-transport.js +0 -76
- package/dist/server/api-client-core/plugins/fetch-transport.js.map +0 -1
- package/dist/server/constants.js +0 -73
- package/dist/server/constants.js.map +0 -1
- package/dist/server/deno/start.d.ts +0 -12
- package/dist/server/deno/start.js +0 -21
- package/dist/server/deno/start.js.map +0 -1
- package/dist/server/hono/hono-request-handler.js +0 -59
- package/dist/server/hono/hono-request-handler.js.map +0 -1
- package/dist/server/hono/hubspot-connect-routes/auth-complete.js +0 -154
- package/dist/server/hono/hubspot-connect-routes/auth-complete.js.map +0 -1
- package/dist/server/hono/hubspot-connect-routes/auth-init-session.js +0 -101
- package/dist/server/hono/hubspot-connect-routes/auth-init-session.js.map +0 -1
- package/dist/server/hono/hubspot-connect-routes/auth-logout.js +0 -114
- package/dist/server/hono/hubspot-connect-routes/auth-logout.js.map +0 -1
- package/dist/server/hono/hubspot-connect-routes/auth-refresh.js +0 -107
- package/dist/server/hono/hubspot-connect-routes/auth-refresh.js.map +0 -1
- package/dist/server/hono/hubspot-connect-routes/cimd-client-metadata-types.d.ts +0 -16
- package/dist/server/hono/hubspot-connect-routes/cimd-client-metadata-types.js +0 -13
- package/dist/server/hono/hubspot-connect-routes/cimd-client-metadata-types.js.map +0 -1
- package/dist/server/hono/hubspot-connect-routes/cimd-public-routes.js +0 -42
- package/dist/server/hono/hubspot-connect-routes/cimd-public-routes.js.map +0 -1
- package/dist/server/hono/hubspot-connect-routes/constants.js +0 -8
- package/dist/server/hono/hubspot-connect-routes/constants.js.map +0 -1
- package/dist/server/hono/hubspot-connect-routes/fetch-hubspot-client-metadata.js +0 -43
- package/dist/server/hono/hubspot-connect-routes/fetch-hubspot-client-metadata.js.map +0 -1
- package/dist/server/hono/hubspot-connect-routes/hubspot-connect-routes.js +0 -37
- package/dist/server/hono/hubspot-connect-routes/hubspot-connect-routes.js.map +0 -1
- package/dist/server/hono/hubspot-connect-routes/load-hubspot-connect-routes-env.js +0 -34
- package/dist/server/hono/hubspot-connect-routes/load-hubspot-connect-routes-env.js.map +0 -1
- package/dist/server/hono/hubspot-connect-routes/oauth-client.js +0 -104
- package/dist/server/hono/hubspot-connect-routes/oauth-client.js.map +0 -1
- package/dist/server/hono/hubspot-connect-routes/utils.js +0 -120
- package/dist/server/hono/hubspot-connect-routes/utils.js.map +0 -1
- package/dist/server/hono/index.js +0 -4
- package/dist/server/hono/types.d.ts +0 -32
- package/dist/server/hono/utils/cookie-utils.js +0 -30
- package/dist/server/hono/utils/cookie-utils.js.map +0 -1
- package/dist/server/hono/utils/cors-middleware.js +0 -85
- package/dist/server/hono/utils/cors-middleware.js.map +0 -1
- package/dist/server/import-app-keys.js +0 -42
- package/dist/server/import-app-keys.js.map +0 -1
- package/dist/server/lovable/create-app-function-start.d.ts +0 -26
- package/dist/server/lovable/create-app-function-start.js +0 -28
- package/dist/server/lovable/create-app-function-start.js.map +0 -1
- package/dist/server/lovable/hubspot-connect/index.d.ts +0 -15
- package/dist/server/lovable/hubspot-connect/index.js +0 -20
- package/dist/server/lovable/hubspot-connect/index.js.map +0 -1
- package/dist/server/lovable/hubspot-connect/run-hubspot-connect-lovable-server.js +0 -29
- package/dist/server/lovable/hubspot-connect/run-hubspot-connect-lovable-server.js.map +0 -1
- package/dist/server/proxy.js +0 -68
- package/dist/server/proxy.js.map +0 -1
- package/dist/server/sanitize-request.js +0 -55
- package/dist/server/sanitize-request.js.map +0 -1
- package/dist/server/secure-start-core.d.ts +0 -23
- package/dist/server/secure-start-core.js +0 -28
- package/dist/server/secure-start-core.js.map +0 -1
- package/dist/server/shared/constants.js +0 -30
- package/dist/server/shared/constants.js.map +0 -1
- package/dist/server/shared/encoding/base64.js +0 -45
- package/dist/server/shared/encoding/base64.js.map +0 -1
- package/dist/server/shared/encoding/sha256.d.ts +0 -10
- package/dist/server/shared/encoding/sha256.js +0 -15
- package/dist/server/shared/encoding/sha256.js.map +0 -1
- package/dist/server/shared/logger.d.ts +0 -15
- package/dist/server/shared/logger.js +0 -16
- package/dist/server/shared/logger.js.map +0 -1
- package/dist/server/utils/cookie-utils.js +0 -21
- package/dist/server/utils/cookie-utils.js.map +0 -1
- package/dist/server/utils/dpop-utils.d.ts +0 -67
- package/dist/server/utils/dpop-utils.js +0 -75
- package/dist/server/utils/dpop-utils.js.map +0 -1
- package/dist/server/utils/env-utils.js +0 -54
- package/dist/server/utils/env-utils.js.map +0 -1
- package/dist/server/utils/jwk-utils.d.ts +0 -16
- package/dist/server/utils/jwk-utils.js +0 -24
- package/dist/server/utils/jwk-utils.js.map +0 -1
- package/dist/server/utils/jwt-utils.d.ts +0 -39
- package/dist/server/utils/jwt-utils.js +0 -87
- package/dist/server/utils/jwt-utils.js.map +0 -1
|
@@ -1,55 +0,0 @@
|
|
|
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
|
-
* Mutates `headers` in place: parses the `Cookie` header, drops every
|
|
11
|
-
* protected cookie (see {@link isProtectedCookieName}), and rewrites
|
|
12
|
-
* the header. Deletes the header entirely when nothing survives.
|
|
13
|
-
*
|
|
14
|
-
* Used by the SDK's auth middleware after it has read the access
|
|
15
|
-
* token / session ID, so user route handlers never see — and
|
|
16
|
-
* therefore cannot leak — those cookies, while CORS / auth
|
|
17
|
-
* middleware that ran first still got the raw values.
|
|
18
|
-
*/
|
|
19
|
-
function stripProtectedCookies(headers) {
|
|
20
|
-
const cookies = parseCookies(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
|
-
if (surviving.size === 0) headers.delete("cookie");
|
|
24
|
-
else headers.set("cookie", serializeCookies(surviving));
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Returns a clone of `original` whose `Cookie` header has every
|
|
28
|
-
* protected cookie removed (see {@link isProtectedCookieName}). When
|
|
29
|
-
* no other cookies remain, the header is dropped entirely.
|
|
30
|
-
*
|
|
31
|
-
* Standalone helper retained for callers that want a new Request
|
|
32
|
-
* (e.g. tests). Inside the SDK's per-request handler, the auth
|
|
33
|
-
* middleware uses {@link stripProtectedCookies} directly on
|
|
34
|
-
* `c.req.raw.headers` so the auth check itself can still read the
|
|
35
|
-
* protected cookies before they are stripped.
|
|
36
|
-
*/
|
|
37
|
-
function sanitizeRequest(original) {
|
|
38
|
-
const headers = new Headers(original.headers);
|
|
39
|
-
stripProtectedCookies(headers);
|
|
40
|
-
const init = {
|
|
41
|
-
method: original.method,
|
|
42
|
-
headers,
|
|
43
|
-
redirect: original.redirect,
|
|
44
|
-
signal: original.signal
|
|
45
|
-
};
|
|
46
|
-
if (original.body !== null) {
|
|
47
|
-
init.body = original.body;
|
|
48
|
-
init.duplex = "half";
|
|
49
|
-
}
|
|
50
|
-
return new Request(original.url, init);
|
|
51
|
-
}
|
|
52
|
-
//#endregion
|
|
53
|
-
export { sanitizeRequest };
|
|
54
|
-
|
|
55
|
-
//# sourceMappingURL=sanitize-request.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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 * Mutates `headers` in place: parses the `Cookie` header, drops every\n * protected cookie (see {@link isProtectedCookieName}), and rewrites\n * the header. Deletes the header entirely when nothing survives.\n *\n * Used by the SDK's auth middleware after it has read the access\n * token / session ID, so user route handlers never see — and\n * therefore cannot leak — those cookies, while CORS / auth\n * middleware that ran first still got the raw values.\n */\nexport function stripProtectedCookies(headers: Headers): void {\n const cookies = parseCookies(headers.get('Cookie'));\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 if (surviving.size === 0) {\n headers.delete('cookie');\n } else {\n headers.set('cookie', serializeCookies(surviving));\n }\n}\n\n/**\n * Returns a clone of `original` whose `Cookie` header has every\n * protected cookie removed (see {@link isProtectedCookieName}). When\n * no other cookies remain, the header is dropped entirely.\n *\n * Standalone helper retained for callers that want a new Request\n * (e.g. tests). Inside the SDK's per-request handler, the auth\n * middleware uses {@link stripProtectedCookies} directly on\n * `c.req.raw.headers` so the auth check itself can still read the\n * protected cookies before they are stripped.\n */\nexport function sanitizeRequest(original: Request): Request {\n const headers = new Headers(original.headers);\n stripProtectedCookies(headers);\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,sBAAsB,SAAwB;CAC5D,MAAM,UAAU,aAAa,QAAQ,IAAI,SAAS,CAAC;CACnD,MAAM,4BAAY,IAAI,KAAqB;CAC3C,KAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,QAAQ,EACjD,IAAI,CAAC,sBAAsB,KAAK,EAC9B,UAAU,IAAI,MAAM,MAAM;CAI9B,IAAI,UAAU,SAAS,GACrB,QAAQ,OAAO,SAAS;MAExB,QAAQ,IAAI,UAAU,iBAAiB,UAAU,CAAC;;;;;;;;;;;;;AAetD,SAAgB,gBAAgB,UAA4B;CAC1D,MAAM,UAAU,IAAI,QAAQ,SAAS,QAAQ;CAC7C,sBAAsB,QAAQ;CAE9B,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"}
|
|
@@ -1,23 +0,0 @@
|
|
|
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
|
|
@@ -1,28 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
//#region src/shared/constants.ts
|
|
2
|
-
/**
|
|
3
|
-
* Path the browser visits after HubSpot's authorize endpoint
|
|
4
|
-
* redirects back to the app. Mounted on the **frontend** origin (not
|
|
5
|
-
* the SDK's edge function host) so all OAuth-related cookies live in
|
|
6
|
-
* the `(frontend, edge)` CHIPS partition.
|
|
7
|
-
*
|
|
8
|
-
* The SDK's `auth/init-session` builds the OAuth `redirect_uri` as
|
|
9
|
-
* `${requestOrigin}${HUBSPOT_FRONTEND_CALLBACK_PATH}`. The browser
|
|
10
|
-
* controller, on `start()`, recognizes this path on `window.location`
|
|
11
|
-
* and forwards `?code` + `?state` to the SDK's `auth/complete`
|
|
12
|
-
* endpoint via a credentialed cross-site fetch. The host app must
|
|
13
|
-
* register `${app_origin}${HUBSPOT_FRONTEND_CALLBACK_PATH}` as a
|
|
14
|
-
* redirect URI in its HubSpot app settings.
|
|
15
|
-
*/
|
|
16
|
-
const HUBSPOT_FRONTEND_CALLBACK_PATH = "/__hubspot_oauth_callback";
|
|
17
|
-
/**
|
|
18
|
-
* Query parameter on the `auth/complete` POST request carrying the
|
|
19
|
-
* authorization `code` HubSpot returned to the frontend callback.
|
|
20
|
-
*/
|
|
21
|
-
const AUTH_COMPLETE_CODE_PARAM = "code";
|
|
22
|
-
/**
|
|
23
|
-
* Query parameter on the `auth/complete` POST request carrying the
|
|
24
|
-
* OAuth `state` HubSpot echoed back to the frontend callback.
|
|
25
|
-
*/
|
|
26
|
-
const AUTH_COMPLETE_STATE_PARAM = "state";
|
|
27
|
-
//#endregion
|
|
28
|
-
export { AUTH_COMPLETE_CODE_PARAM, AUTH_COMPLETE_STATE_PARAM, HUBSPOT_FRONTEND_CALLBACK_PATH };
|
|
29
|
-
|
|
30
|
-
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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 browser controller\n * sets this in the URL after a successful `auth/complete` call and\n * then strips it during `initAppConnect` via `history.replaceState`.\n */\nexport const EXPIRES_AT_URL_PARAM = '__hs_expires_at';\n\n/**\n * Path the browser visits after HubSpot's authorize endpoint\n * redirects back to the app. Mounted on the **frontend** origin (not\n * the SDK's edge function host) so all OAuth-related cookies live in\n * the `(frontend, edge)` CHIPS partition.\n *\n * The SDK's `auth/init-session` builds the OAuth `redirect_uri` as\n * `${requestOrigin}${HUBSPOT_FRONTEND_CALLBACK_PATH}`. The browser\n * controller, on `start()`, recognizes this path on `window.location`\n * and forwards `?code` + `?state` to the SDK's `auth/complete`\n * endpoint via a credentialed cross-site fetch. The host app must\n * register `${app_origin}${HUBSPOT_FRONTEND_CALLBACK_PATH}` as a\n * redirect URI in its HubSpot app settings.\n */\nexport const HUBSPOT_FRONTEND_CALLBACK_PATH = '/__hubspot_oauth_callback';\n\n/**\n * Query parameter on the `auth/complete` POST request carrying the\n * authorization `code` HubSpot returned to the frontend callback.\n */\nexport const AUTH_COMPLETE_CODE_PARAM = 'code';\n\n/**\n * Query parameter on the `auth/complete` POST request carrying the\n * OAuth `state` HubSpot echoed back to the frontend callback.\n */\nexport const AUTH_COMPLETE_STATE_PARAM = 'state';\n"],"mappings":";;;;;;;;;;;;;;;AA4BA,MAAa,iCAAiC;;;;;AAM9C,MAAa,2BAA2B;;;;;AAMxC,MAAa,4BAA4B"}
|
|
@@ -1,45 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
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
|
|
@@ -1,15 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
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
|
|
@@ -1,16 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
//#region src/server/utils/cookie-utils.ts
|
|
2
|
-
/**
|
|
3
|
-
* Parses an HTTP `Cookie` request header into a `name -> value` map.
|
|
4
|
-
* Tolerates leading/trailing whitespace, missing `=` (treats the
|
|
5
|
-
* cookie value as empty), and duplicate names (last write wins).
|
|
6
|
-
*
|
|
7
|
-
* Returns an empty object when `cookieHeader` is `null`/`undefined`
|
|
8
|
-
* /empty so callers don't have to null-check the input.
|
|
9
|
-
*/
|
|
10
|
-
function parseCookies(cookieHeader) {
|
|
11
|
-
if (!cookieHeader) return {};
|
|
12
|
-
return Object.fromEntries(cookieHeader.split(";").map((pair) => {
|
|
13
|
-
const eqIdx = pair.indexOf("=");
|
|
14
|
-
if (eqIdx === -1) return [pair.trim(), ""];
|
|
15
|
-
return [pair.slice(0, eqIdx).trim(), pair.slice(eqIdx + 1).trim()];
|
|
16
|
-
}).filter(([name]) => name.length > 0));
|
|
17
|
-
}
|
|
18
|
-
//#endregion
|
|
19
|
-
export { parseCookies };
|
|
20
|
-
|
|
21
|
-
//# sourceMappingURL=cookie-utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cookie-utils.js","names":[],"sources":["../../../src/server/utils/cookie-utils.ts"],"sourcesContent":["/**\n * Parses an HTTP `Cookie` request header into a `name -> value` map.\n * Tolerates leading/trailing whitespace, missing `=` (treats the\n * cookie value as empty), and duplicate names (last write wins).\n *\n * Returns an empty object when `cookieHeader` is `null`/`undefined`\n * /empty so callers don't have to null-check the input.\n */\nexport function parseCookies(\n cookieHeader: string | null | undefined\n): Record<string, string> {\n if (!cookieHeader) return {};\n return Object.fromEntries(\n cookieHeader\n .split(';')\n .map((pair) => {\n const eqIdx = pair.indexOf('=');\n if (eqIdx === -1) return [pair.trim(), ''] as [string, string];\n return [pair.slice(0, eqIdx).trim(), pair.slice(eqIdx + 1).trim()] as [\n string,\n string,\n ];\n })\n .filter(([name]) => name.length > 0)\n );\n}\n"],"mappings":";;;;;;;;;AAQA,SAAgB,aACd,cACwB;CACxB,IAAI,CAAC,cAAc,OAAO,EAAE;CAC5B,OAAO,OAAO,YACZ,aACG,MAAM,IAAI,CACV,KAAK,SAAS;EACb,MAAM,QAAQ,KAAK,QAAQ,IAAI;EAC/B,IAAI,UAAU,IAAI,OAAO,CAAC,KAAK,MAAM,EAAE,GAAG;EAC1C,OAAO,CAAC,KAAK,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,MAAM,QAAQ,EAAE,CAAC,MAAM,CAAC;GAIlE,CACD,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE,CACvC"}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
//#region src/server/utils/dpop-utils.d.ts
|
|
2
|
-
/**
|
|
3
|
-
* Claims that go into a DPoP proof JWT (RFC 9449 §4.2). Extra
|
|
4
|
-
* properties pass through to the encoder unchanged so callers can
|
|
5
|
-
* include implementation-specific claims.
|
|
6
|
-
*/
|
|
7
|
-
interface DpopClaims {
|
|
8
|
-
/** HTTP method of the protected request, uppercase. */
|
|
9
|
-
htm: string;
|
|
10
|
-
/** Target URI of the protected request, fully-qualified. */
|
|
11
|
-
htu: string;
|
|
12
|
-
/** Unique proof identifier (RFC 9449 §4.2, recommended UUID). */
|
|
13
|
-
jti: string;
|
|
14
|
-
/** Issuance time, Unix epoch seconds. */
|
|
15
|
-
iat: number;
|
|
16
|
-
/**
|
|
17
|
-
* Hash of the access token presented alongside this proof, if any
|
|
18
|
-
* (RFC 9449 §4.2). Required for resource-server DPoP.
|
|
19
|
-
*/
|
|
20
|
-
ath?: string;
|
|
21
|
-
/**
|
|
22
|
-
* App session ID hash. Custom HubSpot extension that lets the auth
|
|
23
|
-
* server bind tokens to the browser session that minted them.
|
|
24
|
-
*/
|
|
25
|
-
sid?: string;
|
|
26
|
-
[key: string]: unknown;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Result of a successful {@link verifyDpopProof} call.
|
|
30
|
-
*/
|
|
31
|
-
interface VerifiedDpopProof {
|
|
32
|
-
/** Public JWK extracted from the proof's header. */
|
|
33
|
-
publicKeyJwk: JsonWebKey;
|
|
34
|
-
/** RFC 7638 JWK thumbprint of `publicKeyJwk`. */
|
|
35
|
-
jkt: string;
|
|
36
|
-
/** Decoded claims from the proof's payload. */
|
|
37
|
-
claims: DpopClaims;
|
|
38
|
-
}
|
|
39
|
-
interface VerifyDpopProofOptions {
|
|
40
|
-
/** The compact-serialized DPoP proof. */
|
|
41
|
-
proof: string;
|
|
42
|
-
/** Expected HTTP method (RFC 9449 `htm` claim). */
|
|
43
|
-
htm: string;
|
|
44
|
-
/** Expected request URI (RFC 9449 `htu` claim). */
|
|
45
|
-
htu: string;
|
|
46
|
-
/** Expected access-token hash (RFC 9449 `ath` claim). */
|
|
47
|
-
ath?: string;
|
|
48
|
-
/** Expected app-session-ID hash (`sid` claim). */
|
|
49
|
-
sid?: string;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Verifies a DPoP proof JWT and returns the embedded public JWK,
|
|
53
|
-
* its thumbprint, and the decoded claims.
|
|
54
|
-
*
|
|
55
|
-
* Enforces RFC 9449's required checks:
|
|
56
|
-
*
|
|
57
|
-
* - `typ=dpop+jwt`, `alg=ES256`, and a JWK in the header.
|
|
58
|
-
* - Signature is valid against the embedded JWK.
|
|
59
|
-
* - `htm`, `htu`, and (when supplied) `ath`/`sid` match.
|
|
60
|
-
* - `iat` is within ±5 minutes of "now".
|
|
61
|
-
*
|
|
62
|
-
* @throws {Error} If any of the above checks fail.
|
|
63
|
-
*/
|
|
64
|
-
declare function verifyDpopProof(options: VerifyDpopProofOptions): Promise<VerifiedDpopProof>;
|
|
65
|
-
//#endregion
|
|
66
|
-
export { verifyDpopProof };
|
|
67
|
-
//# sourceMappingURL=dpop-utils.d.ts.map
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { base64urlDecode } from "../shared/encoding/base64.js";
|
|
2
|
-
import { getJwkThumbprint } from "./jwk-utils.js";
|
|
3
|
-
import { decodeAndVerifyJwt, encodeAndSignJwt } from "./jwt-utils.js";
|
|
4
|
-
//#region src/server/utils/dpop-utils.ts
|
|
5
|
-
function ecPublicJwkForDpopHeader(jwk) {
|
|
6
|
-
if (jwk.kty !== "EC" || jwk.crv !== "P-256" || typeof jwk.x !== "string" || typeof jwk.y !== "string") throw new Error("Expected P-256 EC public JWK");
|
|
7
|
-
return {
|
|
8
|
-
kty: "EC",
|
|
9
|
-
crv: "P-256",
|
|
10
|
-
x: jwk.x,
|
|
11
|
-
y: jwk.y
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Mints a DPoP proof JWT (RFC 9449) signed with the app's private
|
|
16
|
-
* key. The header is set to `typ=dpop+jwt`, `alg=ES256`, and embeds
|
|
17
|
-
* the public JWK so the receiver can verify the signature without
|
|
18
|
-
* out-of-band key distribution.
|
|
19
|
-
*/
|
|
20
|
-
async function signDpopProof(options) {
|
|
21
|
-
const { appKeys, claims } = options;
|
|
22
|
-
return encodeAndSignJwt({
|
|
23
|
-
header: {
|
|
24
|
-
alg: "ES256",
|
|
25
|
-
typ: "dpop+jwt",
|
|
26
|
-
jwk: ecPublicJwkForDpopHeader(appKeys.appPublicKeyJwk)
|
|
27
|
-
},
|
|
28
|
-
payload: claims,
|
|
29
|
-
privateKey: appKeys.appPrivateKey
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Verifies a DPoP proof JWT and returns the embedded public JWK,
|
|
34
|
-
* its thumbprint, and the decoded claims.
|
|
35
|
-
*
|
|
36
|
-
* Enforces RFC 9449's required checks:
|
|
37
|
-
*
|
|
38
|
-
* - `typ=dpop+jwt`, `alg=ES256`, and a JWK in the header.
|
|
39
|
-
* - Signature is valid against the embedded JWK.
|
|
40
|
-
* - `htm`, `htu`, and (when supplied) `ath`/`sid` match.
|
|
41
|
-
* - `iat` is within ±5 minutes of "now".
|
|
42
|
-
*
|
|
43
|
-
* @throws {Error} If any of the above checks fail.
|
|
44
|
-
*/
|
|
45
|
-
async function verifyDpopProof(options) {
|
|
46
|
-
const { proof, htm, htu, ath, sid } = options;
|
|
47
|
-
const parts = proof.split(".");
|
|
48
|
-
if (parts.length !== 3) throw new Error("Invalid DPoP proof format");
|
|
49
|
-
const encodedHeader = parts[0];
|
|
50
|
-
if (!encodedHeader) throw new Error("Missing DPoP header");
|
|
51
|
-
const header = JSON.parse(new TextDecoder().decode(base64urlDecode(encodedHeader)));
|
|
52
|
-
if (header.typ !== "dpop+jwt") throw new Error("Invalid DPoP typ header");
|
|
53
|
-
if (header.alg !== "ES256") throw new Error("Unsupported DPoP algorithm");
|
|
54
|
-
const publicKeyJwk = header.jwk;
|
|
55
|
-
if (!publicKeyJwk) throw new Error("Missing jwk in DPoP header");
|
|
56
|
-
const claims = await decodeAndVerifyJwt({
|
|
57
|
-
token: proof,
|
|
58
|
-
publicKeyJwk
|
|
59
|
-
});
|
|
60
|
-
if (claims.htm !== htm) throw new Error(`DPoP htm mismatch: expected ${htm}, got ${claims.htm}`);
|
|
61
|
-
if (claims.htu !== htu) throw new Error(`DPoP htu mismatch: expected ${htu}, got ${claims.htu}`);
|
|
62
|
-
if (ath !== void 0 && claims.ath !== ath) throw new Error("DPoP ath mismatch");
|
|
63
|
-
if (sid !== void 0 && claims.sid !== sid) throw new Error("DPoP sid mismatch");
|
|
64
|
-
const now = Math.floor(Date.now() / 1e3);
|
|
65
|
-
if (Math.abs(now - claims.iat) > 300) throw new Error("DPoP proof expired or too far in future");
|
|
66
|
-
return {
|
|
67
|
-
publicKeyJwk,
|
|
68
|
-
jkt: await getJwkThumbprint({ publicKeyJwk }),
|
|
69
|
-
claims
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
//#endregion
|
|
73
|
-
export { signDpopProof, verifyDpopProof };
|
|
74
|
-
|
|
75
|
-
//# sourceMappingURL=dpop-utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dpop-utils.js","names":[],"sources":["../../../src/server/utils/dpop-utils.ts"],"sourcesContent":["import { type AppKeys } from '../types.ts';\nimport { base64urlDecode } from './base64-utils.ts';\nimport { getJwkThumbprint } from './jwk-utils.ts';\nimport { decodeAndVerifyJwt, encodeAndSignJwt } from './jwt-utils.ts';\n\n/**\n * Claims that go into a DPoP proof JWT (RFC 9449 §4.2). Extra\n * properties pass through to the encoder unchanged so callers can\n * include implementation-specific claims.\n */\nexport interface DpopClaims {\n /** HTTP method of the protected request, uppercase. */\n htm: string;\n /** Target URI of the protected request, fully-qualified. */\n htu: string;\n /** Unique proof identifier (RFC 9449 §4.2, recommended UUID). */\n jti: string;\n /** Issuance time, Unix epoch seconds. */\n iat: number;\n /**\n * Hash of the access token presented alongside this proof, if any\n * (RFC 9449 §4.2). Required for resource-server DPoP.\n */\n ath?: string;\n /**\n * App session ID hash. Custom HubSpot extension that lets the auth\n * server bind tokens to the browser session that minted them.\n */\n sid?: string;\n [key: string]: unknown;\n}\n\nfunction ecPublicJwkForDpopHeader(jwk: JsonWebKey): JsonWebKey {\n if (\n jwk.kty !== 'EC' ||\n jwk.crv !== 'P-256' ||\n typeof jwk.x !== 'string' ||\n typeof jwk.y !== 'string'\n ) {\n throw new Error('Expected P-256 EC public JWK');\n }\n return {\n kty: 'EC',\n crv: 'P-256',\n x: jwk.x,\n y: jwk.y,\n };\n}\n\nexport interface SignDpopProofOptions {\n /** App key material produced by `secureStart`. */\n appKeys: AppKeys;\n /** Claims to include in the DPoP proof. */\n claims: DpopClaims;\n}\n\n/**\n * Mints a DPoP proof JWT (RFC 9449) signed with the app's private\n * key. The header is set to `typ=dpop+jwt`, `alg=ES256`, and embeds\n * the public JWK so the receiver can verify the signature without\n * out-of-band key distribution.\n */\nexport async function signDpopProof(\n options: SignDpopProofOptions\n): Promise<string> {\n const { appKeys, claims } = options;\n const publicJwk = ecPublicJwkForDpopHeader(appKeys.appPublicKeyJwk);\n return encodeAndSignJwt({\n header: { alg: 'ES256', typ: 'dpop+jwt', jwk: publicJwk },\n payload: claims,\n privateKey: appKeys.appPrivateKey,\n });\n}\n\n/**\n * Result of a successful {@link verifyDpopProof} call.\n */\nexport interface VerifiedDpopProof {\n /** Public JWK extracted from the proof's header. */\n publicKeyJwk: JsonWebKey;\n /** RFC 7638 JWK thumbprint of `publicKeyJwk`. */\n jkt: string;\n /** Decoded claims from the proof's payload. */\n claims: DpopClaims;\n}\n\nexport interface VerifyDpopProofOptions {\n /** The compact-serialized DPoP proof. */\n proof: string;\n /** Expected HTTP method (RFC 9449 `htm` claim). */\n htm: string;\n /** Expected request URI (RFC 9449 `htu` claim). */\n htu: string;\n /** Expected access-token hash (RFC 9449 `ath` claim). */\n ath?: string;\n /** Expected app-session-ID hash (`sid` claim). */\n sid?: string;\n}\n\ninterface DpopProofHeader {\n typ?: string;\n alg?: string;\n jwk?: JsonWebKey;\n}\n\n/**\n * Verifies a DPoP proof JWT and returns the embedded public JWK,\n * its thumbprint, and the decoded claims.\n *\n * Enforces RFC 9449's required checks:\n *\n * - `typ=dpop+jwt`, `alg=ES256`, and a JWK in the header.\n * - Signature is valid against the embedded JWK.\n * - `htm`, `htu`, and (when supplied) `ath`/`sid` match.\n * - `iat` is within ±5 minutes of \"now\".\n *\n * @throws {Error} If any of the above checks fail.\n */\nexport async function verifyDpopProof(\n options: VerifyDpopProofOptions\n): Promise<VerifiedDpopProof> {\n const { proof, htm, htu, ath, sid } = options;\n const parts = proof.split('.');\n if (parts.length !== 3) throw new Error('Invalid DPoP proof format');\n\n const encodedHeader = parts[0];\n if (!encodedHeader) throw new Error('Missing DPoP header');\n\n const header = JSON.parse(\n new TextDecoder().decode(base64urlDecode(encodedHeader))\n ) as DpopProofHeader;\n\n if (header.typ !== 'dpop+jwt') throw new Error('Invalid DPoP typ header');\n if (header.alg !== 'ES256') throw new Error('Unsupported DPoP algorithm');\n const publicKeyJwk = header.jwk;\n if (!publicKeyJwk) throw new Error('Missing jwk in DPoP header');\n\n const payload = await decodeAndVerifyJwt({ token: proof, publicKeyJwk });\n const claims = payload as unknown as DpopClaims;\n\n if (claims.htm !== htm) {\n throw new Error(`DPoP htm mismatch: expected ${htm}, got ${claims.htm}`);\n }\n if (claims.htu !== htu) {\n throw new Error(`DPoP htu mismatch: expected ${htu}, got ${claims.htu}`);\n }\n if (ath !== undefined && claims.ath !== ath) {\n throw new Error('DPoP ath mismatch');\n }\n if (sid !== undefined && claims.sid !== sid) {\n throw new Error('DPoP sid mismatch');\n }\n\n const now = Math.floor(Date.now() / 1000);\n if (Math.abs(now - claims.iat) > 300) {\n throw new Error('DPoP proof expired or too far in future');\n }\n\n const jkt = await getJwkThumbprint({ publicKeyJwk });\n return { publicKeyJwk, jkt, claims };\n}\n"],"mappings":";;;;AAgCA,SAAS,yBAAyB,KAA6B;CAC7D,IACE,IAAI,QAAQ,QACZ,IAAI,QAAQ,WACZ,OAAO,IAAI,MAAM,YACjB,OAAO,IAAI,MAAM,UAEjB,MAAM,IAAI,MAAM,+BAA+B;CAEjD,OAAO;EACL,KAAK;EACL,KAAK;EACL,GAAG,IAAI;EACP,GAAG,IAAI;EACR;;;;;;;;AAgBH,eAAsB,cACpB,SACiB;CACjB,MAAM,EAAE,SAAS,WAAW;CAE5B,OAAO,iBAAiB;EACtB,QAAQ;GAAE,KAAK;GAAS,KAAK;GAAY,KAFzB,yBAAyB,QAAQ,gBAEM;GAAE;EACzD,SAAS;EACT,YAAY,QAAQ;EACrB,CAAC;;;;;;;;;;;;;;;AA+CJ,eAAsB,gBACpB,SAC4B;CAC5B,MAAM,EAAE,OAAO,KAAK,KAAK,KAAK,QAAQ;CACtC,MAAM,QAAQ,MAAM,MAAM,IAAI;CAC9B,IAAI,MAAM,WAAW,GAAG,MAAM,IAAI,MAAM,4BAA4B;CAEpE,MAAM,gBAAgB,MAAM;CAC5B,IAAI,CAAC,eAAe,MAAM,IAAI,MAAM,sBAAsB;CAE1D,MAAM,SAAS,KAAK,MAClB,IAAI,aAAa,CAAC,OAAO,gBAAgB,cAAc,CAAC,CACzD;CAED,IAAI,OAAO,QAAQ,YAAY,MAAM,IAAI,MAAM,0BAA0B;CACzE,IAAI,OAAO,QAAQ,SAAS,MAAM,IAAI,MAAM,6BAA6B;CACzE,MAAM,eAAe,OAAO;CAC5B,IAAI,CAAC,cAAc,MAAM,IAAI,MAAM,6BAA6B;CAGhE,MAAM,SAAS,MADO,mBAAmB;EAAE,OAAO;EAAO;EAAc,CAAC;CAGxE,IAAI,OAAO,QAAQ,KACjB,MAAM,IAAI,MAAM,+BAA+B,IAAI,QAAQ,OAAO,MAAM;CAE1E,IAAI,OAAO,QAAQ,KACjB,MAAM,IAAI,MAAM,+BAA+B,IAAI,QAAQ,OAAO,MAAM;CAE1E,IAAI,QAAQ,KAAA,KAAa,OAAO,QAAQ,KACtC,MAAM,IAAI,MAAM,oBAAoB;CAEtC,IAAI,QAAQ,KAAA,KAAa,OAAO,QAAQ,KACtC,MAAM,IAAI,MAAM,oBAAoB;CAGtC,MAAM,MAAM,KAAK,MAAM,KAAK,KAAK,GAAG,IAAK;CACzC,IAAI,KAAK,IAAI,MAAM,OAAO,IAAI,GAAG,KAC/B,MAAM,IAAI,MAAM,0CAA0C;CAI5D,OAAO;EAAE;EAAc,KAAA,MADL,iBAAiB,EAAE,cAAc,CAAC;EACxB;EAAQ"}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
//#region src/server/utils/env-utils.ts
|
|
2
|
-
/**
|
|
3
|
-
* Reads an environment variable in a way that works under both Node
|
|
4
|
-
* (`process.env`) and Deno (`Deno.env.get`). Returns `undefined` when
|
|
5
|
-
* the variable is unset or when neither runtime is available.
|
|
6
|
-
*/
|
|
7
|
-
function getEnv(key) {
|
|
8
|
-
const g = globalThis;
|
|
9
|
-
const proc = g.process;
|
|
10
|
-
if (proc?.env) return proc.env[key];
|
|
11
|
-
const deno = g.Deno;
|
|
12
|
-
if (deno !== void 0) return deno.env.get(key);
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Reads an environment variable and throws when it is missing or empty.
|
|
16
|
-
* Use for values the SDK cannot fall back on (e.g. upstream service
|
|
17
|
-
* URLs).
|
|
18
|
-
*
|
|
19
|
-
* @throws {Error} When the environment variable is unset or an empty
|
|
20
|
-
* string.
|
|
21
|
-
*/
|
|
22
|
-
function requireEnv(key) {
|
|
23
|
-
const value = getEnv(key);
|
|
24
|
-
if (!value) throw new Error(`Missing required environment variable: ${key}`);
|
|
25
|
-
return value;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Whether outbound HubSpot OAuth and API calls should attach DPoP on
|
|
29
|
-
* the wire. Disabled only when `HUBSPOT_DPOP_ENABLED` is exactly the
|
|
30
|
-
* string `"false"` (unset or any other value keeps DPoP enabled).
|
|
31
|
-
*/
|
|
32
|
-
function isHubspotDpopEnabled() {
|
|
33
|
-
return getEnv("HUBSPOT_DPOP_ENABLED") !== "false";
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Whether the SDK should use CIMD-style OAuth (client ID URL + JWT client
|
|
37
|
-
* assertion). Disabled only when `HUBSPOT_CIMD_ENABLED` is exactly the
|
|
38
|
-
* string `"false"` (unset or any other value keeps CIMD enabled).
|
|
39
|
-
*/
|
|
40
|
-
function isHubspotCimdEnabled() {
|
|
41
|
-
return getEnv("HUBSPOT_CIMD_ENABLED") !== "false";
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Whether `HUBSPOT_APP_PRIVATE_KEY` must be set for `secureStart`. False
|
|
45
|
-
* when both CIMD and DPoP are disabled — the SDK then uses
|
|
46
|
-
* `client_secret` for OAuth and Bearer tokens only for API calls.
|
|
47
|
-
*/
|
|
48
|
-
function isHubspotAppPrivateKeyRequired() {
|
|
49
|
-
return isHubspotCimdEnabled() || isHubspotDpopEnabled();
|
|
50
|
-
}
|
|
51
|
-
//#endregion
|
|
52
|
-
export { isHubspotAppPrivateKeyRequired, isHubspotCimdEnabled, isHubspotDpopEnabled, requireEnv };
|
|
53
|
-
|
|
54
|
-
//# sourceMappingURL=env-utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"env-utils.js","names":[],"sources":["../../../src/server/utils/env-utils.ts"],"sourcesContent":["interface GlobalWithOptionalEnv {\n process?: { env?: Record<string, string | undefined> };\n Deno?: { env: { get(name: string): string | undefined } };\n}\n\n/**\n * Reads an environment variable in a way that works under both Node\n * (`process.env`) and Deno (`Deno.env.get`). Returns `undefined` when\n * the variable is unset or when neither runtime is available.\n */\nexport function getEnv(key: string): string | undefined {\n const g = globalThis as GlobalWithOptionalEnv;\n const proc = g.process;\n if (proc?.env) {\n return proc.env[key];\n }\n const deno = g.Deno;\n if (deno !== undefined) {\n return deno.env.get(key);\n }\n return undefined;\n}\n\n/**\n * Reads an environment variable and throws when it is missing or empty.\n * Use for values the SDK cannot fall back on (e.g. upstream service\n * URLs).\n *\n * @throws {Error} When the environment variable is unset or an empty\n * string.\n */\nexport function requireEnv(key: string): string {\n const value = getEnv(key);\n if (!value) {\n throw new Error(`Missing required environment variable: ${key}`);\n }\n return value;\n}\n\n/**\n * Whether outbound HubSpot OAuth and API calls should attach DPoP on\n * the wire. Disabled only when `HUBSPOT_DPOP_ENABLED` is exactly the\n * string `\"false\"` (unset or any other value keeps DPoP enabled).\n */\nexport function isHubspotDpopEnabled(): boolean {\n return getEnv('HUBSPOT_DPOP_ENABLED') !== 'false';\n}\n\n/**\n * Whether the SDK should use CIMD-style OAuth (client ID URL + JWT client\n * assertion). Disabled only when `HUBSPOT_CIMD_ENABLED` is exactly the\n * string `\"false\"` (unset or any other value keeps CIMD enabled).\n */\nexport function isHubspotCimdEnabled(): boolean {\n return getEnv('HUBSPOT_CIMD_ENABLED') !== 'false';\n}\n\n/**\n * Whether `HUBSPOT_APP_PRIVATE_KEY` must be set for `secureStart`. False\n * when both CIMD and DPoP are disabled — the SDK then uses\n * `client_secret` for OAuth and Bearer tokens only for API calls.\n */\nexport function isHubspotAppPrivateKeyRequired(): boolean {\n return isHubspotCimdEnabled() || isHubspotDpopEnabled();\n}\n"],"mappings":";;;;;;AAUA,SAAgB,OAAO,KAAiC;CACtD,MAAM,IAAI;CACV,MAAM,OAAO,EAAE;CACf,IAAI,MAAM,KACR,OAAO,KAAK,IAAI;CAElB,MAAM,OAAO,EAAE;CACf,IAAI,SAAS,KAAA,GACX,OAAO,KAAK,IAAI,IAAI,IAAI;;;;;;;;;;AAa5B,SAAgB,WAAW,KAAqB;CAC9C,MAAM,QAAQ,OAAO,IAAI;CACzB,IAAI,CAAC,OACH,MAAM,IAAI,MAAM,0CAA0C,MAAM;CAElE,OAAO;;;;;;;AAQT,SAAgB,uBAAgC;CAC9C,OAAO,OAAO,uBAAuB,KAAK;;;;;;;AAQ5C,SAAgB,uBAAgC;CAC9C,OAAO,OAAO,uBAAuB,KAAK;;;;;;;AAQ5C,SAAgB,iCAA0C;CACxD,OAAO,sBAAsB,IAAI,sBAAsB"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
//#region src/server/utils/jwk-utils.d.ts
|
|
2
|
-
interface GetJwkThumbprintOptions {
|
|
3
|
-
/** EC P-256 public JWK whose thumbprint to compute. */
|
|
4
|
-
publicKeyJwk: JsonWebKey;
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* Computes the RFC 7638 JWK thumbprint of an EC P-256 public JWK.
|
|
8
|
-
* Per §3.2 the canonical form contains only `crv`, `kty`, `x`, `y`,
|
|
9
|
-
* sorted lexicographically — no whitespace, no other members. The
|
|
10
|
-
* SHA-256 of this canonical UTF-8 JSON, base64url-encoded, is the
|
|
11
|
-
* stable identifier (`jkt`) DPoP uses to bind tokens to public keys.
|
|
12
|
-
*/
|
|
13
|
-
declare function getJwkThumbprint(options: GetJwkThumbprintOptions): Promise<string>;
|
|
14
|
-
//#endregion
|
|
15
|
-
export { getJwkThumbprint };
|
|
16
|
-
//# sourceMappingURL=jwk-utils.d.ts.map
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { base64url } from "../shared/encoding/base64.js";
|
|
2
|
-
//#region src/server/utils/jwk-utils.ts
|
|
3
|
-
/**
|
|
4
|
-
* Computes the RFC 7638 JWK thumbprint of an EC P-256 public JWK.
|
|
5
|
-
* Per §3.2 the canonical form contains only `crv`, `kty`, `x`, `y`,
|
|
6
|
-
* sorted lexicographically — no whitespace, no other members. The
|
|
7
|
-
* SHA-256 of this canonical UTF-8 JSON, base64url-encoded, is the
|
|
8
|
-
* stable identifier (`jkt`) DPoP uses to bind tokens to public keys.
|
|
9
|
-
*/
|
|
10
|
-
async function getJwkThumbprint(options) {
|
|
11
|
-
const { publicKeyJwk } = options;
|
|
12
|
-
const canonical = JSON.stringify({
|
|
13
|
-
crv: publicKeyJwk.crv,
|
|
14
|
-
kty: publicKeyJwk.kty,
|
|
15
|
-
x: publicKeyJwk.x,
|
|
16
|
-
y: publicKeyJwk.y
|
|
17
|
-
});
|
|
18
|
-
const digest = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(canonical));
|
|
19
|
-
return base64url(new Uint8Array(digest));
|
|
20
|
-
}
|
|
21
|
-
//#endregion
|
|
22
|
-
export { getJwkThumbprint };
|
|
23
|
-
|
|
24
|
-
//# sourceMappingURL=jwk-utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"jwk-utils.js","names":[],"sources":["../../../src/server/utils/jwk-utils.ts"],"sourcesContent":["import { base64url } from './base64-utils.ts';\n\nexport interface GetJwkThumbprintOptions {\n /** EC P-256 public JWK whose thumbprint to compute. */\n publicKeyJwk: JsonWebKey;\n}\n\n/**\n * Computes the RFC 7638 JWK thumbprint of an EC P-256 public JWK.\n * Per §3.2 the canonical form contains only `crv`, `kty`, `x`, `y`,\n * sorted lexicographically — no whitespace, no other members. The\n * SHA-256 of this canonical UTF-8 JSON, base64url-encoded, is the\n * stable identifier (`jkt`) DPoP uses to bind tokens to public keys.\n */\nexport async function getJwkThumbprint(\n options: GetJwkThumbprintOptions\n): Promise<string> {\n const { publicKeyJwk } = options;\n const canonical = JSON.stringify({\n crv: publicKeyJwk.crv,\n kty: publicKeyJwk.kty,\n x: publicKeyJwk.x,\n y: publicKeyJwk.y,\n });\n const digest = await crypto.subtle.digest(\n 'SHA-256',\n new TextEncoder().encode(canonical)\n );\n return base64url(new Uint8Array(digest));\n}\n"],"mappings":";;;;;;;;;AAcA,eAAsB,iBACpB,SACiB;CACjB,MAAM,EAAE,iBAAiB;CACzB,MAAM,YAAY,KAAK,UAAU;EAC/B,KAAK,aAAa;EAClB,KAAK,aAAa;EAClB,GAAG,aAAa;EAChB,GAAG,aAAa;EACjB,CAAC;CACF,MAAM,SAAS,MAAM,OAAO,OAAO,OACjC,WACA,IAAI,aAAa,CAAC,OAAO,UAAU,CACpC;CACD,OAAO,UAAU,IAAI,WAAW,OAAO,CAAC"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
//#region src/server/utils/jwt-utils.d.ts
|
|
2
|
-
interface VerifyJwtOptions {
|
|
3
|
-
/** Compact-serialized JWT to verify. */
|
|
4
|
-
token: string;
|
|
5
|
-
/** Public key in JWK form. Caller is responsible for trusting it. */
|
|
6
|
-
publicKeyJwk: JsonWebKey;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Verifies signature and (if present) `exp` (RFC 7519 §4.1.4) on a
|
|
10
|
-
* JWT and returns its payload.
|
|
11
|
-
*
|
|
12
|
-
* @throws {Error} When the signature fails or when `exp` has passed.
|
|
13
|
-
*/
|
|
14
|
-
declare function verifyJwt(options: VerifyJwtOptions): Promise<Record<string, unknown>>;
|
|
15
|
-
interface SignJwtOptions {
|
|
16
|
-
/** ES256 private key as a non-extractable WebCrypto key. */
|
|
17
|
-
privateKey: CryptoKey;
|
|
18
|
-
/**
|
|
19
|
-
* Custom claims merged onto an `iat` claim (and `exp` when
|
|
20
|
-
* `ttlSeconds` is supplied). Caller-provided keys override the
|
|
21
|
-
* standard ones.
|
|
22
|
-
*/
|
|
23
|
-
payload: Record<string, unknown>;
|
|
24
|
-
/**
|
|
25
|
-
* Lifetime of the token in seconds. When set, the JWT's `exp` claim
|
|
26
|
-
* is computed as `iat + ttlSeconds`. When omitted, no `exp` is added
|
|
27
|
-
* (the caller is responsible for one if needed).
|
|
28
|
-
*/
|
|
29
|
-
ttlSeconds?: number;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Signs a JWT (RFC 7519) with `alg=ES256, typ=JWT` and returns the
|
|
33
|
-
* compact serialization. Always sets `iat` to the current second; the
|
|
34
|
-
* caller controls every other claim via `payload`.
|
|
35
|
-
*/
|
|
36
|
-
declare function signJwt(options: SignJwtOptions): Promise<string>;
|
|
37
|
-
//#endregion
|
|
38
|
-
export { signJwt, verifyJwt };
|
|
39
|
-
//# sourceMappingURL=jwt-utils.d.ts.map
|