fix: approximated not verifying domain, change request type for /agents
route
This commit is contained in:
@@ -9,6 +9,7 @@ import { currentOrg } from '$lib/utils/store/org';
|
||||
import type { Cookies } from '@sveltejs/kit';
|
||||
import { env } from '$env/dynamic/public';
|
||||
import { getCioCookieString } from '$lib/utils/functions/cookies';
|
||||
import { AGENT_CONTENT_TYPE } from '@cio/utils/constants';
|
||||
|
||||
export const getRequestBaseUrl = () => {
|
||||
if (typeof window === 'undefined') {
|
||||
@@ -31,6 +32,16 @@ export const getRequestBaseUrl = () => {
|
||||
return `${window.location.origin}/proxy`;
|
||||
};
|
||||
|
||||
function isAgentRequest(input: RequestInfo | URL): boolean {
|
||||
try {
|
||||
const raw = typeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url;
|
||||
const pathname = new URL(raw, 'http://placeholder').pathname;
|
||||
return pathname.includes('/agent/');
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function mergeAbortSignals(...signals: Array<AbortSignal | null | undefined>) {
|
||||
const activeSignals = signals.filter((signal): signal is AbortSignal => Boolean(signal));
|
||||
|
||||
@@ -115,6 +126,10 @@ class ApiClient {
|
||||
headers.delete('Content-Type');
|
||||
}
|
||||
|
||||
if (requestBody && !isFormData && isAgentRequest(input)) {
|
||||
headers.set('Content-Type', AGENT_CONTENT_TYPE);
|
||||
}
|
||||
|
||||
// Create abort controller for timeout
|
||||
const timeoutController = new AbortController();
|
||||
const timeoutId = setTimeout(() => timeoutController.abort(), timeout);
|
||||
|
||||
@@ -1,120 +0,0 @@
|
||||
// Code from https://github.com/vercel/platforms/blob/1ed55b13bcae97b037c69ec40b4c32df21c2412c/lib/domains.ts
|
||||
|
||||
import { env } from '$env/dynamic/private';
|
||||
import type { DomainConfigResponse, DomainResponse, DomainVerificationResponse } from '$lib/utils/types/org';
|
||||
|
||||
export const addDomainToVercel = async (domain: string) => {
|
||||
return await fetch(
|
||||
`https://api.vercel.com/v10/projects/${env.PROJECT_ID_VERCEL}/domains${
|
||||
env.TEAM_ID_VERCEL ? `?teamId=${env.TEAM_ID_VERCEL}` : ''
|
||||
}`,
|
||||
{
|
||||
method: 'POST',
|
||||
headers: {
|
||||
Authorization: `Bearer ${env.AUTH_BEARER_TOKEN}`,
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({
|
||||
name: domain
|
||||
// Optional: Redirect www. to root domain
|
||||
// ...(domain.startsWith("www.") && {
|
||||
// redirect: domain.replace("www.", ""),
|
||||
// }),
|
||||
})
|
||||
}
|
||||
).then((res) => res.json());
|
||||
};
|
||||
|
||||
export const removeDomainFromVercelProject = async (domain: string) => {
|
||||
return await fetch(
|
||||
`https://api.vercel.com/v9/projects/${env.PROJECT_ID_VERCEL}/domains/${domain}${
|
||||
env.TEAM_ID_VERCEL ? `?teamId=${env.TEAM_ID_VERCEL}` : ''
|
||||
}`,
|
||||
{
|
||||
headers: {
|
||||
Authorization: `Bearer ${env.AUTH_BEARER_TOKEN}`
|
||||
},
|
||||
method: 'DELETE'
|
||||
}
|
||||
).then((res) => res.json());
|
||||
};
|
||||
|
||||
export const removeDomainFromVercelTeam = async (domain: string) => {
|
||||
return await fetch(
|
||||
`https://api.vercel.com/v6/domains/${domain}${env.TEAM_ID_VERCEL ? `?teamId=${env.TEAM_ID_VERCEL}` : ''}`,
|
||||
{
|
||||
headers: {
|
||||
Authorization: `Bearer ${env.AUTH_BEARER_TOKEN}`
|
||||
},
|
||||
method: 'DELETE'
|
||||
}
|
||||
).then((res) => res.json());
|
||||
};
|
||||
|
||||
export const getDomainResponse = async (
|
||||
domain: string
|
||||
): Promise<DomainResponse & { error: { code: string; message: string } }> => {
|
||||
return await fetch(
|
||||
`https://api.vercel.com/v9/projects/${env.PROJECT_ID_VERCEL}/domains/${domain}${
|
||||
env.TEAM_ID_VERCEL ? `?teamId=${env.TEAM_ID_VERCEL}` : ''
|
||||
}`,
|
||||
{
|
||||
method: 'GET',
|
||||
headers: {
|
||||
Authorization: `Bearer ${env.AUTH_BEARER_TOKEN}`,
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
}
|
||||
).then((res) => {
|
||||
return res.json();
|
||||
});
|
||||
};
|
||||
|
||||
export const getConfigResponse = async (domain: string): Promise<DomainConfigResponse> => {
|
||||
return await fetch(
|
||||
`https://api.vercel.com/v6/domains/${domain}/config${env.TEAM_ID_VERCEL ? `?teamId=${env.TEAM_ID_VERCEL}` : ''}`,
|
||||
{
|
||||
method: 'GET',
|
||||
headers: {
|
||||
Authorization: `Bearer ${env.AUTH_BEARER_TOKEN}`,
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
}
|
||||
).then((res) => res.json());
|
||||
};
|
||||
|
||||
export const verifyDomain = async (domain: string): Promise<DomainVerificationResponse> => {
|
||||
return await fetch(
|
||||
`https://api.vercel.com/v9/projects/${env.PROJECT_ID_VERCEL}/domains/${domain}/verify${
|
||||
env.TEAM_ID_VERCEL ? `?teamId=${env.TEAM_ID_VERCEL}` : ''
|
||||
}`,
|
||||
{
|
||||
method: 'POST',
|
||||
headers: {
|
||||
Authorization: `Bearer ${env.AUTH_BEARER_TOKEN}`,
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
}
|
||||
).then((res) => res.json());
|
||||
};
|
||||
|
||||
export const getSubdomain = (name: string, apexName: string) => {
|
||||
if (name === apexName) return null;
|
||||
return name.slice(0, name.length - apexName.length - 1);
|
||||
};
|
||||
|
||||
export const getApexDomain = (url: string) => {
|
||||
let domain;
|
||||
try {
|
||||
domain = new URL(url).hostname;
|
||||
} catch (e) {
|
||||
return '';
|
||||
}
|
||||
const parts = domain.split('.');
|
||||
if (parts.length > 2) {
|
||||
// if it's a subdomain (e.g. project.vercel.app), return the last 2 parts
|
||||
return parts.slice(-2).join('.');
|
||||
}
|
||||
// if it's a normal domain (e.g. training.yourdomain.com), we return the domain
|
||||
return domain;
|
||||
};
|
||||
Reference in New Issue
Block a user