mirror of
https://github.com/VibedByKaKi/t3-code-android-nightly.git
synced 2026-10-09 03:41:17 +02:00
40 lines
1.5 KiB
TypeScript
40 lines
1.5 KiB
TypeScript
import type { ScheduledTaskWebhookEndpoint } from "@t3tools/contracts";
|
|
import { isLocalLoopbackHost } from "@t3tools/shared/hostClassification";
|
|
|
|
/**
|
|
* Where a sender can call a webhook task, as a client shows it. With T3
|
|
* Connect the server returns a public URL; without it the path is resolved on
|
|
* the address this client reaches the environment at.
|
|
*/
|
|
export interface WebhookAddress {
|
|
/** The URL to give a sender, or the bare path when no address is known. */
|
|
readonly address: string;
|
|
/** Whether `address` is a full URL a sender can call. */
|
|
readonly copyable: boolean;
|
|
/** One line on who can reach `address`; null for a T3 Connect URL. */
|
|
readonly note: string | null;
|
|
}
|
|
|
|
export function webhookAddress(
|
|
endpoint: ScheduledTaskWebhookEndpoint,
|
|
httpBaseUrl: string | null,
|
|
): WebhookAddress {
|
|
if (endpoint.url !== null) {
|
|
return { address: endpoint.url, copyable: true, note: null };
|
|
}
|
|
if (httpBaseUrl === null) {
|
|
return {
|
|
address: endpoint.path,
|
|
copyable: false,
|
|
note: "Link this environment to T3 Connect for a public URL.",
|
|
};
|
|
}
|
|
const url = new URL(endpoint.path, httpBaseUrl);
|
|
return {
|
|
address: url.href,
|
|
copyable: true,
|
|
note: isLocalLoopbackHost(url.hostname)
|
|
? "Only this computer can call this address. Link T3 Connect for a public URL."
|
|
: "Works wherever this environment's address is reachable, for example over Tailscale or your own proxy. Link T3 Connect for a public URL.",
|
|
};
|
|
}
|