( webBaseUrl: string | undefined, orgSlug: string | undefined, input: typeof ConnectionCreateHandoffInput.Type, )
| 456 | }; |
| 457 | |
| 458 | const connectionCreateHandoffUrl = ( |
| 459 | webBaseUrl: string | undefined, |
| 460 | orgSlug: string | undefined, |
| 461 | input: typeof ConnectionCreateHandoffInput.Type, |
| 462 | ): string => { |
| 463 | const search = new URLSearchParams({ addAccount: "1" }); |
| 464 | if (input.owner !== undefined) search.set("owner", input.owner); |
| 465 | if (input.template !== undefined) search.set("template", input.template); |
| 466 | if (input.label !== undefined) search.set("label", input.label); |
| 467 | // Org-scoped hosts (cloud, self-host, cloudflare) serve the console under an |
| 468 | // optional `/<org-slug>` segment. Pin the URL to the executor's bound org so |
| 469 | // it opens that org directly instead of relying on the browser's last-active |
| 470 | // org (which `OrgSlugGate` would otherwise canonicalize a bare URL to). When |
| 471 | // no slug is known (CLI, local, non-request callers) we emit the bare path. |
| 472 | const orgPrefix = orgSlug !== undefined && orgSlug.length > 0 ? `/${orgSlug}` : ""; |
| 473 | const path = `${orgPrefix}/integrations/${encodeURIComponent(input.integration)}?${search.toString()}`; |
| 474 | if (webBaseUrl === undefined || webBaseUrl.length === 0) return path; |
| 475 | return new URL(path, webBaseUrl.endsWith("/") ? webBaseUrl : `${webBaseUrl}/`).toString(); |
| 476 | }; |
| 477 | |
| 478 | const oauthClientCreateHandoffUrl = ( |
| 479 | webBaseUrl: string | undefined, |
no test coverage detected