@squadbase/vite-server 0.1.4-dev.0 → 0.1.4-dev.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.
Files changed (50) hide show
  1. package/dist/cli/index.js +26 -16
  2. package/dist/connectors/airtable-oauth.js +10 -0
  3. package/dist/connectors/airtable.js +10 -0
  4. package/dist/connectors/amplitude.js +10 -0
  5. package/dist/connectors/anthropic.js +10 -0
  6. package/dist/connectors/asana.js +10 -0
  7. package/dist/connectors/attio.js +10 -0
  8. package/dist/connectors/backlog-api-key.js +10 -0
  9. package/dist/connectors/customerio.js +10 -0
  10. package/dist/connectors/dbt.js +10 -0
  11. package/dist/connectors/gamma.js +10 -0
  12. package/dist/connectors/gemini.js +10 -0
  13. package/dist/connectors/gmail-oauth.js +10 -0
  14. package/dist/connectors/gmail.js +14 -4
  15. package/dist/connectors/google-ads.js +10 -0
  16. package/dist/connectors/google-analytics-oauth.js +10 -0
  17. package/dist/connectors/google-analytics.js +10 -0
  18. package/dist/connectors/google-calendar-oauth.js +10 -0
  19. package/dist/connectors/google-calendar.js +14 -6
  20. package/dist/connectors/google-docs.js +10 -0
  21. package/dist/connectors/google-drive.js +10 -0
  22. package/dist/connectors/google-sheets.js +10 -0
  23. package/dist/connectors/google-slides.js +10 -0
  24. package/dist/connectors/grafana.js +10 -0
  25. package/dist/connectors/hubspot-oauth.js +10 -0
  26. package/dist/connectors/hubspot.js +10 -0
  27. package/dist/connectors/intercom-oauth.js +10 -0
  28. package/dist/connectors/intercom.js +10 -0
  29. package/dist/connectors/jira-api-key.js +10 -0
  30. package/dist/connectors/kintone-api-token.js +10 -0
  31. package/dist/connectors/kintone.js +10 -0
  32. package/dist/connectors/linkedin-ads.js +10 -0
  33. package/dist/connectors/mailchimp-oauth.js +10 -0
  34. package/dist/connectors/mailchimp.js +10 -0
  35. package/dist/connectors/mixpanel.js +10 -0
  36. package/dist/connectors/notion-oauth.js +10 -0
  37. package/dist/connectors/notion.js +10 -0
  38. package/dist/connectors/openai.js +10 -0
  39. package/dist/connectors/sentry.js +10 -0
  40. package/dist/connectors/shopify-oauth.js +10 -0
  41. package/dist/connectors/shopify.js +10 -0
  42. package/dist/connectors/stripe-api-key.js +10 -0
  43. package/dist/connectors/stripe-oauth.js +10 -0
  44. package/dist/connectors/wix-store.js +10 -0
  45. package/dist/connectors/zendesk-oauth.js +10 -0
  46. package/dist/connectors/zendesk.js +10 -0
  47. package/dist/index.js +26 -16
  48. package/dist/main.js +26 -16
  49. package/dist/vite-plugin.js +26 -16
  50. package/package.json +1 -1
package/dist/cli/index.js CHANGED
@@ -67299,7 +67299,8 @@ The business logic type for this connector is "sql".
67299
67299
  },
67300
67300
  async query(params, sql, namedParams) {
67301
67301
  const { Pool } = await import("pg");
67302
- const { text, values } = buildPositionalParams(sql, namedParams);
67302
+ const cleanSql = sql.replace(/;\s*$/, "");
67303
+ const { text, values } = buildPositionalParams(cleanSql, namedParams);
67303
67304
  const pool = new Pool({
67304
67305
  connectionString: params[parameters3.connectionUrl.slug],
67305
67306
  ssl: { rejectUnauthorized: false },
@@ -67651,7 +67652,7 @@ var bigqueryOnboarding = new ConnectorOnboarding({
67651
67652
  - \`options\`: \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u4E00\u89A7\u3002\u5404 option \u306E \`label\` \u306F \`\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u540D (id: \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8ID)\` \u306E\u5F62\u5F0F\u3001\`value\` \u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8ID
67652
67653
  3. \u30E6\u30FC\u30B6\u30FC\u304C\u9078\u629E\u3057\u305F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E \`label\` \u304C\u30E1\u30C3\u30BB\u30FC\u30B8\u3068\u3057\u3066\u5C4A\u304F\u306E\u3067\u3001\u6B21\u306E\u30B9\u30C6\u30C3\u30D7\u306B\u9032\u3080
67653
67654
  4. \`${listDatasetsToolName}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u9078\u629E\u3055\u308C\u305F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5185\u306E\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u4E00\u89A7\u3092\u53D6\u5F97\u3059\u308B
67654
- 5. \`askUserQuestion\` \u3092\u547C\u3073\u51FA\u3059\uFF08multiSelect: true\uFF09:
67655
+ 5. \`askUserQuestion\` \u3092\u547C\u3073\u51FA\u3059\uFF08type: "select", multiSelect: true, allowFreeText: true\uFF09:
67655
67656
  - \`question\`: \u4F7F\u7528\u3059\u308B\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u3092\u9078\u629E\u3059\u308B\u3088\u3046\u4FC3\u3059\u3002\u300C\u4E0A\u8A18\u4EE5\u5916\u306E\u30D1\u30D6\u30EA\u30C3\u30AF\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u306F \`bigquery-public-data.{\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u540D}\` \u306E\u5F62\u5F0F\u3067\u81EA\u7531\u5165\u529B\u3067\u304D\u307E\u3059\u300D\u3068\u660E\u8A18\u3059\u308B
67656
67657
  - \`options\`: \u4EE5\u4E0B\u3092\u9806\u756A\u306B\u7D50\u5408\u3059\u308B
67657
67658
  1. \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5185\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8: \u5404 \`{ label: datasetId, description: location }\`
@@ -67683,7 +67684,7 @@ var bigqueryOnboarding = new ConnectorOnboarding({
67683
67684
  - \`options\`: The project list. Each option's \`label\` should be \`Project Name (id: project-id)\`, \`value\` should be the project ID
67684
67685
  3. The \`label\` of the user's selected project will arrive as a message. Proceed to the next step
67685
67686
  4. Call \`${listDatasetsToolName}\` to get the list of datasets in the selected project
67686
- 5. Call \`askUserQuestion\` (multiSelect: true):
67687
+ 5. Call \`askUserQuestion\` (type: "select", multiSelect: true, allowFreeText: true):
67687
67688
  - \`question\`: Ask the user to select datasets. State that other public datasets can be entered freely in the format \`bigquery-public-data.{dataset_name}\`
67688
67689
  - \`options\`: Concatenate in order:
67689
67690
  1. Project datasets: each \`{ label: datasetId, description: location }\`
@@ -68113,7 +68114,7 @@ var bigqueryOnboarding2 = new ConnectorOnboarding({
68113
68114
  - \`options\`: \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u4E00\u89A7\u3002\u5404 option \u306E \`label\` \u306F \`\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u540D (id: \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8ID)\` \u306E\u5F62\u5F0F\u3001\`value\` \u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8ID
68114
68115
  3. \u30E6\u30FC\u30B6\u30FC\u304C\u9078\u629E\u3057\u305F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E \`label\` \u304C\u30E1\u30C3\u30BB\u30FC\u30B8\u3068\u3057\u3066\u5C4A\u304F\u306E\u3067\u3001\u6B21\u306E\u30B9\u30C6\u30C3\u30D7\u306B\u9032\u3080
68115
68116
  4. \`${listDatasetsToolName2}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u9078\u629E\u3055\u308C\u305F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5185\u306E\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u4E00\u89A7\u3092\u53D6\u5F97\u3059\u308B
68116
- 5. \`askUserQuestion\` \u3092\u547C\u3073\u51FA\u3059\uFF08multiSelect: true\uFF09:
68117
+ 5. \`askUserQuestion\` \u3092\u547C\u3073\u51FA\u3059\uFF08type: "select", multiSelect: true, allowFreeText: true\uFF09:
68117
68118
  - \`question\`: \u4F7F\u7528\u3059\u308B\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u3092\u9078\u629E\u3059\u308B\u3088\u3046\u4FC3\u3059\u3002\u300C\u4E0A\u8A18\u4EE5\u5916\u306E\u30D1\u30D6\u30EA\u30C3\u30AF\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u306F \`bigquery-public-data.{\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u540D}\` \u306E\u5F62\u5F0F\u3067\u81EA\u7531\u5165\u529B\u3067\u304D\u307E\u3059\u300D\u3068\u660E\u8A18\u3059\u308B
68118
68119
  - \`options\`: \u4EE5\u4E0B\u3092\u9806\u756A\u306B\u7D50\u5408\u3059\u308B
68119
68120
  1. \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5185\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8: \u5404 \`{ label: datasetId, description: location }\`
@@ -68145,7 +68146,7 @@ var bigqueryOnboarding2 = new ConnectorOnboarding({
68145
68146
  - \`options\`: The project list. Each option's \`label\` should be \`Project Name (id: project-id)\`, \`value\` should be the project ID
68146
68147
  3. The \`label\` of the user's selected project will arrive as a message. Proceed to the next step
68147
68148
  4. Call \`${listDatasetsToolName2}\` to get the list of datasets in the selected project
68148
- 5. Call \`askUserQuestion\` (multiSelect: true):
68149
+ 5. Call \`askUserQuestion\` (type: "select", multiSelect: true, allowFreeText: true):
68149
68150
  - \`question\`: Ask the user to select datasets. State that other public datasets can be entered freely in the format \`bigquery-public-data.{dataset_name}\`
68150
68151
  - \`options\`: Concatenate in order:
68151
68152
  1. Project datasets: each \`{ label: datasetId, description: location }\`
@@ -71231,10 +71232,9 @@ var googleCalendarOnboarding = new ConnectorOnboarding({
71231
71232
  ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067Google Calendar\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002\u63A5\u7D9A\u4F5C\u6210\u6642\u306B\u306F\u30B5\u30FC\u30D3\u30B9\u30A2\u30AB\u30A6\u30F3\u30C8JSON\u306E\u307F\u304C\u8A2D\u5B9A\u6E08\u307F\u3067\u3001\u5BFE\u8C61\u30E6\u30FC\u30B6\u30FC\u306E\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3084\u30AB\u30EC\u30F3\u30C0\u30FCID\u306F\u3053\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u4E2D\u306B\u53D6\u5F97\u3057\u307E\u3059\u3002
71232
71233
 
71233
71234
  1. \`askUserQuestion\` \u3067\u30E6\u30FC\u30B6\u30FC\u306B\u3001\u30B5\u30FC\u30D3\u30B9\u30A2\u30AB\u30A6\u30F3\u30C8\u304CDomain-wide Delegation\u3067\u4EE3\u7406\u30A2\u30AF\u30BB\u30B9\u3059\u308BGoogle Workspace\u30E6\u30FC\u30B6\u30FC\u306E\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3092\u30D2\u30A2\u30EA\u30F3\u30B0\u3059\u308B:
71235
+ - \`type\`: \`"freeText"\`
71234
71236
  - \`question\`: \u300C\u30A2\u30AF\u30BB\u30B9\u3057\u305F\u3044\u30AB\u30EC\u30F3\u30C0\u30FC\u3092\u6301\u3064\u30E6\u30FC\u30B6\u30FC\u306E\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u8907\u6570\u3042\u308B\u5834\u5408\u306F\u30AB\u30F3\u30DE\u533A\u5207\u308A\u3067\u5165\u529B\u53EF\uFF09\u300D
71235
- - \`header\`: \u300C\u30E1\u30FC\u30EB\u5165\u529B\u300D
71236
- - \`options\`: \`[]\`\uFF08\u9078\u629E\u80A2\u306A\u3057\u30FB\u81EA\u7531\u5165\u529B\u306E\u307F\uFF09
71237
- - \`allowFreeText\`: \`true\`
71237
+ - \`placeholder\`: \`"user@example.com, admin@example.com"\`
71238
71238
  2. \u30E6\u30FC\u30B6\u30FC\u304B\u3089\u53D7\u3051\u53D6\u3063\u305F\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\uFF08\u30AB\u30F3\u30DE\u533A\u5207\u308A\u5BFE\u5FDC\uFF09\u3092 \`updateConnectionParameters\` \u3067\u4FDD\u5B58\u3059\u308B:
71239
71239
  - \`parameterSlug\`: \`"impersonate-email"\`
71240
71240
  - \`options\`: \`[{ value: <\u5165\u529B\u3055\u308C\u305F\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u6587\u5B57\u5217>, label: <\u540C\u3058\u5024> }]\`\uFF081\u4EF6\u306E\u307F\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u81EA\u52D5\u9078\u629E\u3055\u308C\u308B\uFF09
@@ -71259,10 +71259,9 @@ var googleCalendarOnboarding = new ConnectorOnboarding({
71259
71259
  en: `Follow these steps to set up the Google Calendar connection. Only the service account JSON is provided at connection creation time \u2014 the target user email and calendar ID are collected during this setup flow.
71260
71260
 
71261
71261
  1. Call \`askUserQuestion\` to ask the user for the Google Workspace user email the service account will impersonate via Domain-wide Delegation:
71262
+ - \`type\`: \`"freeText"\`
71262
71263
  - \`question\`: "Please enter the email address of the user whose calendar you want to access (comma-separated list allowed for multiple users)"
71263
- - \`header\`: "Email input"
71264
- - \`options\`: \`[]\` (no preset choices \u2014 free text only)
71265
- - \`allowFreeText\`: \`true\`
71264
+ - \`placeholder\`: \`"user@example.com, admin@example.com"\`
71266
71265
  2. Save the email(s) the user provided (comma-separated supported) via \`updateConnectionParameters\`:
71267
71266
  - \`parameterSlug\`: \`"impersonate-email"\`
71268
71267
  - \`options\`: \`[{ value: <the email string entered>, label: <same value> }]\` (a single option is auto-selected)
@@ -76005,7 +76004,8 @@ The business logic type for this connector is "sql".
76005
76004
  },
76006
76005
  async query(params, sql, namedParams) {
76007
76006
  const { Pool } = await import("pg");
76008
- const { text, values } = buildPositionalParams(sql, namedParams);
76007
+ const cleanSql = sql.replace(/;\s*$/, "");
76008
+ const { text, values } = buildPositionalParams(cleanSql, namedParams);
76009
76009
  const pool = new Pool({
76010
76010
  connectionString: params[parameters28.connectionUrl.slug],
76011
76011
  ssl: { rejectUnauthorized: false },
@@ -82253,9 +82253,9 @@ var gmailOnboarding = new ConnectorOnboarding({
82253
82253
  ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067Gmail\uFF08\u30B5\u30FC\u30D3\u30B9\u30A2\u30AB\u30A6\u30F3\u30C8\uFF09\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002\u63A5\u7D9A\u4F5C\u6210\u6642\u306B\u306F\u30B5\u30FC\u30D3\u30B9\u30A2\u30AB\u30A6\u30F3\u30C8JSON\u306E\u307F\u304C\u8A2D\u5B9A\u6E08\u307F\u3067\u3001\u59D4\u4EFB\u5BFE\u8C61\u306E\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u306F\u3053\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u4E2D\u306B\u53D6\u5F97\u3057\u307E\u3059\u3002
82254
82254
 
82255
82255
  1. \`askUserQuestion\` \u3067\u3001\u30B5\u30FC\u30D3\u30B9\u30A2\u30AB\u30A6\u30F3\u30C8\u304CDomain-wide Delegation\u3067\u4EE3\u7406\u30A2\u30AF\u30BB\u30B9\u3059\u308BGoogle Workspace\u30E6\u30FC\u30B6\u30FC\u306E\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3092\u30D2\u30A2\u30EA\u30F3\u30B0\u3059\u308B:
82256
+ - \`type\`: \`"freeText"\`
82256
82257
  - \`question\`: \u300CGmail\u3092\u53C2\u7167\u3059\u308BGoogle Workspace\u30E6\u30FC\u30B6\u30FC\u306E\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u300D
82257
- - \`header\`: \u300C\u30E1\u30FC\u30EB\u5165\u529B\u300D
82258
- - \`options\`: \`[{ label: "\u4F8B: user@example.com", description: "\u30B5\u30FC\u30D3\u30B9\u30A2\u30AB\u30A6\u30F3\u30C8\u304C\u4EE3\u7406\u30A2\u30AF\u30BB\u30B9\u3059\u308B\u30E6\u30FC\u30B6\u30FC\u306E\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3092\u5165\u529B" }, { label: "\u5225\u306E\u4F8B: admin@example.com", description: "\u7BA1\u7406\u8005\u30E6\u30FC\u30B6\u30FC\u3084\u5171\u6709\u30E1\u30FC\u30EB\u30DC\u30C3\u30AF\u30B9\u306E\u30A2\u30C9\u30EC\u30B9\u3067\u3082\u53EF" }]\` \uFF08\`allowFreeText: true\` \u306E\u305F\u3081\u81EA\u7531\u5165\u529B\u53EF\uFF09
82258
+ - \`placeholder\`: \`"user@example.com"\`
82259
82259
  2. \u53D7\u3051\u53D6\u3063\u305F\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3092 \`updateConnectionParameters\` \u3067\u4FDD\u5B58\u3059\u308B:
82260
82260
  - \`parameterSlug\`: \`"delegated-user-email"\`
82261
82261
  - \`options\`: \`[{ value: <\u5165\u529B\u3055\u308C\u305F\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9>, label: <\u540C\u3058\u5024> }]\`\uFF081\u4EF6\u306E\u307F\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u81EA\u52D5\u9078\u629E\u3055\u308C\u308B\uFF09
@@ -82280,9 +82280,9 @@ var gmailOnboarding = new ConnectorOnboarding({
82280
82280
  en: `Follow these steps to set up the Gmail (Service Account) connection. Only the service account JSON is provided at connection creation time \u2014 the delegated user email is collected during this setup flow.
82281
82281
 
82282
82282
  1. Call \`askUserQuestion\` to ask the user for the Google Workspace user email the service account will impersonate via Domain-wide Delegation:
82283
+ - \`type\`: \`"freeText"\`
82283
82284
  - \`question\`: "Please enter the email address of the Google Workspace user whose Gmail mailbox you want to access"
82284
- - \`header\`: "Email input"
82285
- - \`options\`: \`[{ label: "e.g., user@example.com", description: "The user whose mailbox the service account will impersonate" }, { label: "e.g., admin@example.com", description: "An admin user or shared mailbox is also fine" }]\` (free text entry is allowed because \`allowFreeText: true\`)
82285
+ - \`placeholder\`: \`"user@example.com"\`
82286
82286
  2. Save the email via \`updateConnectionParameters\`:
82287
82287
  - \`parameterSlug\`: \`"delegated-user-email"\`
82288
82288
  - \`options\`: \`[{ value: <entered email>, label: <same value> }]\` (a single option is auto-selected)
@@ -86461,6 +86461,14 @@ function resolveEnvVarOptional(entry, key) {
86461
86461
  import { getContext } from "hono/context-storage";
86462
86462
  import { getCookie } from "hono/cookie";
86463
86463
  var APP_SESSION_COOKIE_NAME = "__Host-squadbase-session";
86464
+ function normalizeHeaders(input) {
86465
+ const out = {};
86466
+ if (!input) return out;
86467
+ new Headers(input).forEach((value, key) => {
86468
+ out[key] = value;
86469
+ });
86470
+ return out;
86471
+ }
86464
86472
  function createSandboxProxyFetch(connectionId) {
86465
86473
  return async (input, init) => {
86466
86474
  const token = process.env.INTERNAL_SQUADBASE_OAUTH_MACHINE_CREDENTIAL;
@@ -86484,6 +86492,7 @@ function createSandboxProxyFetch(connectionId) {
86484
86492
  body: JSON.stringify({
86485
86493
  url: originalUrl,
86486
86494
  method: originalMethod,
86495
+ headers: normalizeHeaders(init?.headers),
86487
86496
  body: originalBody
86488
86497
  })
86489
86498
  });
@@ -86518,6 +86527,7 @@ function createDeployedAppProxyFetch(connectionId) {
86518
86527
  body: JSON.stringify({
86519
86528
  url: originalUrl,
86520
86529
  method: originalMethod,
86530
+ headers: normalizeHeaders(init?.headers),
86521
86531
  body: originalBody
86522
86532
  })
86523
86533
  });
@@ -555,6 +555,14 @@ function resolveEnvVarOptional(entry, key) {
555
555
  import { getContext } from "hono/context-storage";
556
556
  import { getCookie } from "hono/cookie";
557
557
  var APP_SESSION_COOKIE_NAME = "__Host-squadbase-session";
558
+ function normalizeHeaders(input) {
559
+ const out = {};
560
+ if (!input) return out;
561
+ new Headers(input).forEach((value, key) => {
562
+ out[key] = value;
563
+ });
564
+ return out;
565
+ }
558
566
  function createSandboxProxyFetch(connectionId) {
559
567
  return async (input, init) => {
560
568
  const token = process.env.INTERNAL_SQUADBASE_OAUTH_MACHINE_CREDENTIAL;
@@ -578,6 +586,7 @@ function createSandboxProxyFetch(connectionId) {
578
586
  body: JSON.stringify({
579
587
  url: originalUrl,
580
588
  method: originalMethod,
589
+ headers: normalizeHeaders(init?.headers),
581
590
  body: originalBody
582
591
  })
583
592
  });
@@ -612,6 +621,7 @@ function createDeployedAppProxyFetch(connectionId) {
612
621
  body: JSON.stringify({
613
622
  url: originalUrl,
614
623
  method: originalMethod,
624
+ headers: normalizeHeaders(init?.headers),
615
625
  body: originalBody
616
626
  })
617
627
  });
@@ -585,6 +585,14 @@ function resolveEnvVarOptional(entry, key) {
585
585
  import { getContext } from "hono/context-storage";
586
586
  import { getCookie } from "hono/cookie";
587
587
  var APP_SESSION_COOKIE_NAME = "__Host-squadbase-session";
588
+ function normalizeHeaders(input) {
589
+ const out = {};
590
+ if (!input) return out;
591
+ new Headers(input).forEach((value, key) => {
592
+ out[key] = value;
593
+ });
594
+ return out;
595
+ }
588
596
  function createSandboxProxyFetch(connectionId) {
589
597
  return async (input, init) => {
590
598
  const token = process.env.INTERNAL_SQUADBASE_OAUTH_MACHINE_CREDENTIAL;
@@ -608,6 +616,7 @@ function createSandboxProxyFetch(connectionId) {
608
616
  body: JSON.stringify({
609
617
  url: originalUrl,
610
618
  method: originalMethod,
619
+ headers: normalizeHeaders(init?.headers),
611
620
  body: originalBody
612
621
  })
613
622
  });
@@ -642,6 +651,7 @@ function createDeployedAppProxyFetch(connectionId) {
642
651
  body: JSON.stringify({
643
652
  url: originalUrl,
644
653
  method: originalMethod,
654
+ headers: normalizeHeaders(init?.headers),
645
655
  body: originalBody
646
656
  })
647
657
  });
@@ -576,6 +576,14 @@ function resolveEnvVarOptional(entry, key) {
576
576
  import { getContext } from "hono/context-storage";
577
577
  import { getCookie } from "hono/cookie";
578
578
  var APP_SESSION_COOKIE_NAME = "__Host-squadbase-session";
579
+ function normalizeHeaders(input) {
580
+ const out = {};
581
+ if (!input) return out;
582
+ new Headers(input).forEach((value, key) => {
583
+ out[key] = value;
584
+ });
585
+ return out;
586
+ }
579
587
  function createSandboxProxyFetch(connectionId) {
580
588
  return async (input, init) => {
581
589
  const token = process.env.INTERNAL_SQUADBASE_OAUTH_MACHINE_CREDENTIAL;
@@ -599,6 +607,7 @@ function createSandboxProxyFetch(connectionId) {
599
607
  body: JSON.stringify({
600
608
  url: originalUrl,
601
609
  method: originalMethod,
610
+ headers: normalizeHeaders(init?.headers),
602
611
  body: originalBody
603
612
  })
604
613
  });
@@ -633,6 +642,7 @@ function createDeployedAppProxyFetch(connectionId) {
633
642
  body: JSON.stringify({
634
643
  url: originalUrl,
635
644
  method: originalMethod,
645
+ headers: normalizeHeaders(init?.headers),
636
646
  body: originalBody
637
647
  })
638
648
  });
@@ -260,6 +260,14 @@ function resolveEnvVarOptional(entry, key) {
260
260
  import { getContext } from "hono/context-storage";
261
261
  import { getCookie } from "hono/cookie";
262
262
  var APP_SESSION_COOKIE_NAME = "__Host-squadbase-session";
263
+ function normalizeHeaders(input) {
264
+ const out = {};
265
+ if (!input) return out;
266
+ new Headers(input).forEach((value, key) => {
267
+ out[key] = value;
268
+ });
269
+ return out;
270
+ }
263
271
  function createSandboxProxyFetch(connectionId) {
264
272
  return async (input, init) => {
265
273
  const token = process.env.INTERNAL_SQUADBASE_OAUTH_MACHINE_CREDENTIAL;
@@ -283,6 +291,7 @@ function createSandboxProxyFetch(connectionId) {
283
291
  body: JSON.stringify({
284
292
  url: originalUrl,
285
293
  method: originalMethod,
294
+ headers: normalizeHeaders(init?.headers),
286
295
  body: originalBody
287
296
  })
288
297
  });
@@ -317,6 +326,7 @@ function createDeployedAppProxyFetch(connectionId) {
317
326
  body: JSON.stringify({
318
327
  url: originalUrl,
319
328
  method: originalMethod,
329
+ headers: normalizeHeaders(init?.headers),
320
330
  body: originalBody
321
331
  })
322
332
  });
@@ -668,6 +668,14 @@ function resolveEnvVarOptional(entry, key) {
668
668
  import { getContext } from "hono/context-storage";
669
669
  import { getCookie } from "hono/cookie";
670
670
  var APP_SESSION_COOKIE_NAME = "__Host-squadbase-session";
671
+ function normalizeHeaders(input) {
672
+ const out = {};
673
+ if (!input) return out;
674
+ new Headers(input).forEach((value, key) => {
675
+ out[key] = value;
676
+ });
677
+ return out;
678
+ }
671
679
  function createSandboxProxyFetch(connectionId) {
672
680
  return async (input, init) => {
673
681
  const token = process.env.INTERNAL_SQUADBASE_OAUTH_MACHINE_CREDENTIAL;
@@ -691,6 +699,7 @@ function createSandboxProxyFetch(connectionId) {
691
699
  body: JSON.stringify({
692
700
  url: originalUrl,
693
701
  method: originalMethod,
702
+ headers: normalizeHeaders(init?.headers),
694
703
  body: originalBody
695
704
  })
696
705
  });
@@ -725,6 +734,7 @@ function createDeployedAppProxyFetch(connectionId) {
725
734
  body: JSON.stringify({
726
735
  url: originalUrl,
727
736
  method: originalMethod,
737
+ headers: normalizeHeaders(init?.headers),
728
738
  body: originalBody
729
739
  })
730
740
  });
@@ -909,6 +909,14 @@ function resolveEnvVarOptional(entry, key) {
909
909
  import { getContext } from "hono/context-storage";
910
910
  import { getCookie } from "hono/cookie";
911
911
  var APP_SESSION_COOKIE_NAME = "__Host-squadbase-session";
912
+ function normalizeHeaders(input) {
913
+ const out = {};
914
+ if (!input) return out;
915
+ new Headers(input).forEach((value, key) => {
916
+ out[key] = value;
917
+ });
918
+ return out;
919
+ }
912
920
  function createSandboxProxyFetch(connectionId) {
913
921
  return async (input, init) => {
914
922
  const token = process.env.INTERNAL_SQUADBASE_OAUTH_MACHINE_CREDENTIAL;
@@ -932,6 +940,7 @@ function createSandboxProxyFetch(connectionId) {
932
940
  body: JSON.stringify({
933
941
  url: originalUrl,
934
942
  method: originalMethod,
943
+ headers: normalizeHeaders(init?.headers),
935
944
  body: originalBody
936
945
  })
937
946
  });
@@ -966,6 +975,7 @@ function createDeployedAppProxyFetch(connectionId) {
966
975
  body: JSON.stringify({
967
976
  url: originalUrl,
968
977
  method: originalMethod,
978
+ headers: normalizeHeaders(init?.headers),
969
979
  body: originalBody
970
980
  })
971
981
  });
@@ -516,6 +516,14 @@ function resolveEnvVarOptional(entry, key) {
516
516
  import { getContext } from "hono/context-storage";
517
517
  import { getCookie } from "hono/cookie";
518
518
  var APP_SESSION_COOKIE_NAME = "__Host-squadbase-session";
519
+ function normalizeHeaders(input) {
520
+ const out = {};
521
+ if (!input) return out;
522
+ new Headers(input).forEach((value, key) => {
523
+ out[key] = value;
524
+ });
525
+ return out;
526
+ }
519
527
  function createSandboxProxyFetch(connectionId) {
520
528
  return async (input, init) => {
521
529
  const token = process.env.INTERNAL_SQUADBASE_OAUTH_MACHINE_CREDENTIAL;
@@ -539,6 +547,7 @@ function createSandboxProxyFetch(connectionId) {
539
547
  body: JSON.stringify({
540
548
  url: originalUrl,
541
549
  method: originalMethod,
550
+ headers: normalizeHeaders(init?.headers),
542
551
  body: originalBody
543
552
  })
544
553
  });
@@ -573,6 +582,7 @@ function createDeployedAppProxyFetch(connectionId) {
573
582
  body: JSON.stringify({
574
583
  url: originalUrl,
575
584
  method: originalMethod,
585
+ headers: normalizeHeaders(init?.headers),
576
586
  body: originalBody
577
587
  })
578
588
  });
@@ -640,6 +640,14 @@ function resolveEnvVarOptional(entry, key) {
640
640
  import { getContext } from "hono/context-storage";
641
641
  import { getCookie } from "hono/cookie";
642
642
  var APP_SESSION_COOKIE_NAME = "__Host-squadbase-session";
643
+ function normalizeHeaders(input) {
644
+ const out = {};
645
+ if (!input) return out;
646
+ new Headers(input).forEach((value, key) => {
647
+ out[key] = value;
648
+ });
649
+ return out;
650
+ }
643
651
  function createSandboxProxyFetch(connectionId) {
644
652
  return async (input, init) => {
645
653
  const token = process.env.INTERNAL_SQUADBASE_OAUTH_MACHINE_CREDENTIAL;
@@ -663,6 +671,7 @@ function createSandboxProxyFetch(connectionId) {
663
671
  body: JSON.stringify({
664
672
  url: originalUrl,
665
673
  method: originalMethod,
674
+ headers: normalizeHeaders(init?.headers),
666
675
  body: originalBody
667
676
  })
668
677
  });
@@ -697,6 +706,7 @@ function createDeployedAppProxyFetch(connectionId) {
697
706
  body: JSON.stringify({
698
707
  url: originalUrl,
699
708
  method: originalMethod,
709
+ headers: normalizeHeaders(init?.headers),
700
710
  body: originalBody
701
711
  })
702
712
  });
@@ -821,6 +821,14 @@ function resolveEnvVarOptional(entry, key) {
821
821
  import { getContext } from "hono/context-storage";
822
822
  import { getCookie } from "hono/cookie";
823
823
  var APP_SESSION_COOKIE_NAME = "__Host-squadbase-session";
824
+ function normalizeHeaders(input) {
825
+ const out = {};
826
+ if (!input) return out;
827
+ new Headers(input).forEach((value, key) => {
828
+ out[key] = value;
829
+ });
830
+ return out;
831
+ }
824
832
  function createSandboxProxyFetch(connectionId) {
825
833
  return async (input, init) => {
826
834
  const token = process.env.INTERNAL_SQUADBASE_OAUTH_MACHINE_CREDENTIAL;
@@ -844,6 +852,7 @@ function createSandboxProxyFetch(connectionId) {
844
852
  body: JSON.stringify({
845
853
  url: originalUrl,
846
854
  method: originalMethod,
855
+ headers: normalizeHeaders(init?.headers),
847
856
  body: originalBody
848
857
  })
849
858
  });
@@ -878,6 +887,7 @@ function createDeployedAppProxyFetch(connectionId) {
878
887
  body: JSON.stringify({
879
888
  url: originalUrl,
880
889
  method: originalMethod,
890
+ headers: normalizeHeaders(init?.headers),
881
891
  body: originalBody
882
892
  })
883
893
  });
@@ -753,6 +753,14 @@ function resolveEnvVarOptional(entry, key) {
753
753
  import { getContext } from "hono/context-storage";
754
754
  import { getCookie } from "hono/cookie";
755
755
  var APP_SESSION_COOKIE_NAME = "__Host-squadbase-session";
756
+ function normalizeHeaders(input) {
757
+ const out = {};
758
+ if (!input) return out;
759
+ new Headers(input).forEach((value, key) => {
760
+ out[key] = value;
761
+ });
762
+ return out;
763
+ }
756
764
  function createSandboxProxyFetch(connectionId) {
757
765
  return async (input, init) => {
758
766
  const token = process.env.INTERNAL_SQUADBASE_OAUTH_MACHINE_CREDENTIAL;
@@ -776,6 +784,7 @@ function createSandboxProxyFetch(connectionId) {
776
784
  body: JSON.stringify({
777
785
  url: originalUrl,
778
786
  method: originalMethod,
787
+ headers: normalizeHeaders(init?.headers),
779
788
  body: originalBody
780
789
  })
781
790
  });
@@ -810,6 +819,7 @@ function createDeployedAppProxyFetch(connectionId) {
810
819
  body: JSON.stringify({
811
820
  url: originalUrl,
812
821
  method: originalMethod,
822
+ headers: normalizeHeaders(init?.headers),
813
823
  body: originalBody
814
824
  })
815
825
  });
@@ -252,6 +252,14 @@ function resolveEnvVarOptional(entry, key) {
252
252
  import { getContext } from "hono/context-storage";
253
253
  import { getCookie } from "hono/cookie";
254
254
  var APP_SESSION_COOKIE_NAME = "__Host-squadbase-session";
255
+ function normalizeHeaders(input) {
256
+ const out = {};
257
+ if (!input) return out;
258
+ new Headers(input).forEach((value, key) => {
259
+ out[key] = value;
260
+ });
261
+ return out;
262
+ }
255
263
  function createSandboxProxyFetch(connectionId) {
256
264
  return async (input, init) => {
257
265
  const token = process.env.INTERNAL_SQUADBASE_OAUTH_MACHINE_CREDENTIAL;
@@ -275,6 +283,7 @@ function createSandboxProxyFetch(connectionId) {
275
283
  body: JSON.stringify({
276
284
  url: originalUrl,
277
285
  method: originalMethod,
286
+ headers: normalizeHeaders(init?.headers),
278
287
  body: originalBody
279
288
  })
280
289
  });
@@ -309,6 +318,7 @@ function createDeployedAppProxyFetch(connectionId) {
309
318
  body: JSON.stringify({
310
319
  url: originalUrl,
311
320
  method: originalMethod,
321
+ headers: normalizeHeaders(init?.headers),
312
322
  body: originalBody
313
323
  })
314
324
  });
@@ -657,6 +657,14 @@ function resolveEnvVarOptional(entry, key) {
657
657
  import { getContext } from "hono/context-storage";
658
658
  import { getCookie } from "hono/cookie";
659
659
  var APP_SESSION_COOKIE_NAME = "__Host-squadbase-session";
660
+ function normalizeHeaders(input) {
661
+ const out = {};
662
+ if (!input) return out;
663
+ new Headers(input).forEach((value, key) => {
664
+ out[key] = value;
665
+ });
666
+ return out;
667
+ }
660
668
  function createSandboxProxyFetch(connectionId) {
661
669
  return async (input, init) => {
662
670
  const token = process.env.INTERNAL_SQUADBASE_OAUTH_MACHINE_CREDENTIAL;
@@ -680,6 +688,7 @@ function createSandboxProxyFetch(connectionId) {
680
688
  body: JSON.stringify({
681
689
  url: originalUrl,
682
690
  method: originalMethod,
691
+ headers: normalizeHeaders(init?.headers),
683
692
  body: originalBody
684
693
  })
685
694
  });
@@ -714,6 +723,7 @@ function createDeployedAppProxyFetch(connectionId) {
714
723
  body: JSON.stringify({
715
724
  url: originalUrl,
716
725
  method: originalMethod,
726
+ headers: normalizeHeaders(init?.headers),
717
727
  body: originalBody
718
728
  })
719
729
  });
@@ -517,9 +517,9 @@ var gmailOnboarding = new ConnectorOnboarding({
517
517
  ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067Gmail\uFF08\u30B5\u30FC\u30D3\u30B9\u30A2\u30AB\u30A6\u30F3\u30C8\uFF09\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002\u63A5\u7D9A\u4F5C\u6210\u6642\u306B\u306F\u30B5\u30FC\u30D3\u30B9\u30A2\u30AB\u30A6\u30F3\u30C8JSON\u306E\u307F\u304C\u8A2D\u5B9A\u6E08\u307F\u3067\u3001\u59D4\u4EFB\u5BFE\u8C61\u306E\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u306F\u3053\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u4E2D\u306B\u53D6\u5F97\u3057\u307E\u3059\u3002
518
518
 
519
519
  1. \`askUserQuestion\` \u3067\u3001\u30B5\u30FC\u30D3\u30B9\u30A2\u30AB\u30A6\u30F3\u30C8\u304CDomain-wide Delegation\u3067\u4EE3\u7406\u30A2\u30AF\u30BB\u30B9\u3059\u308BGoogle Workspace\u30E6\u30FC\u30B6\u30FC\u306E\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3092\u30D2\u30A2\u30EA\u30F3\u30B0\u3059\u308B:
520
+ - \`type\`: \`"freeText"\`
520
521
  - \`question\`: \u300CGmail\u3092\u53C2\u7167\u3059\u308BGoogle Workspace\u30E6\u30FC\u30B6\u30FC\u306E\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u300D
521
- - \`header\`: \u300C\u30E1\u30FC\u30EB\u5165\u529B\u300D
522
- - \`options\`: \`[{ label: "\u4F8B: user@example.com", description: "\u30B5\u30FC\u30D3\u30B9\u30A2\u30AB\u30A6\u30F3\u30C8\u304C\u4EE3\u7406\u30A2\u30AF\u30BB\u30B9\u3059\u308B\u30E6\u30FC\u30B6\u30FC\u306E\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3092\u5165\u529B" }, { label: "\u5225\u306E\u4F8B: admin@example.com", description: "\u7BA1\u7406\u8005\u30E6\u30FC\u30B6\u30FC\u3084\u5171\u6709\u30E1\u30FC\u30EB\u30DC\u30C3\u30AF\u30B9\u306E\u30A2\u30C9\u30EC\u30B9\u3067\u3082\u53EF" }]\` \uFF08\`allowFreeText: true\` \u306E\u305F\u3081\u81EA\u7531\u5165\u529B\u53EF\uFF09
522
+ - \`placeholder\`: \`"user@example.com"\`
523
523
  2. \u53D7\u3051\u53D6\u3063\u305F\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3092 \`updateConnectionParameters\` \u3067\u4FDD\u5B58\u3059\u308B:
524
524
  - \`parameterSlug\`: \`"delegated-user-email"\`
525
525
  - \`options\`: \`[{ value: <\u5165\u529B\u3055\u308C\u305F\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9>, label: <\u540C\u3058\u5024> }]\`\uFF081\u4EF6\u306E\u307F\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u81EA\u52D5\u9078\u629E\u3055\u308C\u308B\uFF09
@@ -544,9 +544,9 @@ var gmailOnboarding = new ConnectorOnboarding({
544
544
  en: `Follow these steps to set up the Gmail (Service Account) connection. Only the service account JSON is provided at connection creation time \u2014 the delegated user email is collected during this setup flow.
545
545
 
546
546
  1. Call \`askUserQuestion\` to ask the user for the Google Workspace user email the service account will impersonate via Domain-wide Delegation:
547
+ - \`type\`: \`"freeText"\`
547
548
  - \`question\`: "Please enter the email address of the Google Workspace user whose Gmail mailbox you want to access"
548
- - \`header\`: "Email input"
549
- - \`options\`: \`[{ label: "e.g., user@example.com", description: "The user whose mailbox the service account will impersonate" }, { label: "e.g., admin@example.com", description: "An admin user or shared mailbox is also fine" }]\` (free text entry is allowed because \`allowFreeText: true\`)
549
+ - \`placeholder\`: \`"user@example.com"\`
550
550
  2. Save the email via \`updateConnectionParameters\`:
551
551
  - \`parameterSlug\`: \`"delegated-user-email"\`
552
552
  - \`options\`: \`[{ value: <entered email>, label: <same value> }]\` (a single option is auto-selected)
@@ -822,6 +822,14 @@ function resolveEnvVarOptional(entry, key) {
822
822
  import { getContext } from "hono/context-storage";
823
823
  import { getCookie } from "hono/cookie";
824
824
  var APP_SESSION_COOKIE_NAME = "__Host-squadbase-session";
825
+ function normalizeHeaders(input) {
826
+ const out = {};
827
+ if (!input) return out;
828
+ new Headers(input).forEach((value, key) => {
829
+ out[key] = value;
830
+ });
831
+ return out;
832
+ }
825
833
  function createSandboxProxyFetch(connectionId) {
826
834
  return async (input, init) => {
827
835
  const token = process.env.INTERNAL_SQUADBASE_OAUTH_MACHINE_CREDENTIAL;
@@ -845,6 +853,7 @@ function createSandboxProxyFetch(connectionId) {
845
853
  body: JSON.stringify({
846
854
  url: originalUrl,
847
855
  method: originalMethod,
856
+ headers: normalizeHeaders(init?.headers),
848
857
  body: originalBody
849
858
  })
850
859
  });
@@ -879,6 +888,7 @@ function createDeployedAppProxyFetch(connectionId) {
879
888
  body: JSON.stringify({
880
889
  url: originalUrl,
881
890
  method: originalMethod,
891
+ headers: normalizeHeaders(init?.headers),
882
892
  body: originalBody
883
893
  })
884
894
  });
@@ -832,6 +832,14 @@ function resolveEnvVarOptional(entry, key) {
832
832
  import { getContext } from "hono/context-storage";
833
833
  import { getCookie } from "hono/cookie";
834
834
  var APP_SESSION_COOKIE_NAME = "__Host-squadbase-session";
835
+ function normalizeHeaders(input) {
836
+ const out = {};
837
+ if (!input) return out;
838
+ new Headers(input).forEach((value, key) => {
839
+ out[key] = value;
840
+ });
841
+ return out;
842
+ }
835
843
  function createSandboxProxyFetch(connectionId) {
836
844
  return async (input, init) => {
837
845
  const token = process.env.INTERNAL_SQUADBASE_OAUTH_MACHINE_CREDENTIAL;
@@ -855,6 +863,7 @@ function createSandboxProxyFetch(connectionId) {
855
863
  body: JSON.stringify({
856
864
  url: originalUrl,
857
865
  method: originalMethod,
866
+ headers: normalizeHeaders(init?.headers),
858
867
  body: originalBody
859
868
  })
860
869
  });
@@ -889,6 +898,7 @@ function createDeployedAppProxyFetch(connectionId) {
889
898
  body: JSON.stringify({
890
899
  url: originalUrl,
891
900
  method: originalMethod,
901
+ headers: normalizeHeaders(init?.headers),
892
902
  body: originalBody
893
903
  })
894
904
  });
@@ -912,6 +912,14 @@ function resolveEnvVarOptional(entry, key) {
912
912
  import { getContext } from "hono/context-storage";
913
913
  import { getCookie } from "hono/cookie";
914
914
  var APP_SESSION_COOKIE_NAME = "__Host-squadbase-session";
915
+ function normalizeHeaders(input) {
916
+ const out = {};
917
+ if (!input) return out;
918
+ new Headers(input).forEach((value, key) => {
919
+ out[key] = value;
920
+ });
921
+ return out;
922
+ }
915
923
  function createSandboxProxyFetch(connectionId) {
916
924
  return async (input, init) => {
917
925
  const token = process.env.INTERNAL_SQUADBASE_OAUTH_MACHINE_CREDENTIAL;
@@ -935,6 +943,7 @@ function createSandboxProxyFetch(connectionId) {
935
943
  body: JSON.stringify({
936
944
  url: originalUrl,
937
945
  method: originalMethod,
946
+ headers: normalizeHeaders(init?.headers),
938
947
  body: originalBody
939
948
  })
940
949
  });
@@ -969,6 +978,7 @@ function createDeployedAppProxyFetch(connectionId) {
969
978
  body: JSON.stringify({
970
979
  url: originalUrl,
971
980
  method: originalMethod,
981
+ headers: normalizeHeaders(init?.headers),
972
982
  body: originalBody
973
983
  })
974
984
  });
@@ -639,6 +639,14 @@ function resolveEnvVarOptional(entry, key) {
639
639
  import { getContext } from "hono/context-storage";
640
640
  import { getCookie } from "hono/cookie";
641
641
  var APP_SESSION_COOKIE_NAME = "__Host-squadbase-session";
642
+ function normalizeHeaders(input) {
643
+ const out = {};
644
+ if (!input) return out;
645
+ new Headers(input).forEach((value, key) => {
646
+ out[key] = value;
647
+ });
648
+ return out;
649
+ }
642
650
  function createSandboxProxyFetch(connectionId) {
643
651
  return async (input, init) => {
644
652
  const token = process.env.INTERNAL_SQUADBASE_OAUTH_MACHINE_CREDENTIAL;
@@ -662,6 +670,7 @@ function createSandboxProxyFetch(connectionId) {
662
670
  body: JSON.stringify({
663
671
  url: originalUrl,
664
672
  method: originalMethod,
673
+ headers: normalizeHeaders(init?.headers),
665
674
  body: originalBody
666
675
  })
667
676
  });
@@ -696,6 +705,7 @@ function createDeployedAppProxyFetch(connectionId) {
696
705
  body: JSON.stringify({
697
706
  url: originalUrl,
698
707
  method: originalMethod,
708
+ headers: normalizeHeaders(init?.headers),
699
709
  body: originalBody
700
710
  })
701
711
  });