Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
319 changes: 316 additions & 3 deletions src/components/map/countryName.ts

Large diffs are not rendered by default.

4 changes: 1 addition & 3 deletions src/components/node-manage/NodeManageTabServers.vue
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,7 @@ const initForm = ref<{
});

const handleManage = (backend: Backend) => {
router.push(
`/dashboard/servers-detail/${encodeURIComponent(backend.url)}:::${encodeURIComponent(backend.token)}`,
);
router.push(`/dashboard/servers-detail/${backend.name}`);
};

const handleSelect = async (backend: Backend) => {
Expand Down
24 changes: 3 additions & 21 deletions src/composables/useBackendStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,26 +12,14 @@ const LS_KEY_CURRENT = "nodeget_current_backend";
const backends = ref<Backend[]>([]);
const currentBackend = ref<Backend | null>(null);

export const normalizeUrl = (url: string): string => {
try {
const parsed = new URL(url);
return `${parsed.protocol}//${parsed.host}`;
} catch {
return url;
}
};

const init = () => {
// Load backends from localStorage
const storedBackends = localStorage.getItem(LS_KEY_BACKENDS);
if (storedBackends) {
try {
const parsed = JSON.parse(storedBackends);
if (Array.isArray(parsed)) {
backends.value = (parsed as Backend[]).map((b) => ({
...b,
url: normalizeUrl(b.url),
}));
backends.value = parsed as Backend[];
}
} catch (e) {
console.error("Failed to parse backends from localStorage", e);
Expand All @@ -44,10 +32,7 @@ const init = () => {
try {
const parsed = JSON.parse(storedCurrent);
if (parsed && typeof parsed === "object") {
currentBackend.value = {
...(parsed as Backend),
url: normalizeUrl((parsed as Backend).url),
};
currentBackend.value = parsed as Backend;
}
} catch (e) {
console.error("Failed to parse current backend from localStorage", e);
Expand Down Expand Up @@ -118,10 +103,7 @@ watch(
);

const addBackend = (backend: Backend) => {
const normalized: Backend = {
...backend,
url: normalizeUrl(backend.url),
};
const normalized: Backend = backend;
backends.value.push(normalized);
if (!currentBackend.value) {
currentBackend.value = normalized;
Expand Down
6 changes: 3 additions & 3 deletions src/composables/useExtensions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ export function useExtensions() {
const bucketBaseUrl = computed(() => {
try {
const url = new URL(httpBaseUrl.value);
return `${url.protocol}//${url.host}`;
return url.origin;
} catch {
return httpBaseUrl.value;
}
Expand Down Expand Up @@ -674,7 +674,7 @@ export function useExtensions() {
if (storage === "static") {
return `${bucketBaseUrl.value}/nodeget/static/${getBucketName(extensionId)}/${path}`;
}
return `${httpBaseUrl.value}/worker-route/static-worker-route/${extensionId}/${path}`;
return `${bucketBaseUrl.value}/worker-route/static-worker-route/${extensionId}/${path}`;
};

const getIframeUrl = async (
Expand All @@ -692,7 +692,7 @@ export function useExtensions() {
const route = workerName
? ((await jsRuntime.getWorker(workerName))?.route ?? extensionId)
: extensionId;
base = `${httpBaseUrl.value}/worker-route/${route}/${workerEntry}`;
base = `${bucketBaseUrl.value}/worker-route/${route}/${workerEntry}`;
} else {
base = getStaticUrl(extensionId, entry, storage);
}
Expand Down
266 changes: 262 additions & 4 deletions src/data/mapRegionCoords.ts

Large diffs are not rendered by default.

259 changes: 255 additions & 4 deletions src/data/regions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,30 +4,281 @@ export interface Region {
}

export const REGIONS: Region[] = [
// 大中华区
{ code: "CN", name: "中国大陆" },
{ code: "HK", name: "香港" },
{ code: "TW", name: "台湾" },
{ code: "MO", name: "澳门" },
{ code: "CN", name: "中国大陆" },
// 东亚
{ code: "JP", name: "日本" },
{ code: "KR", name: "韩国" },
{ code: "KP", name: "朝鲜" },
{ code: "MN", name: "蒙古" },
// 东南亚
{ code: "SG", name: "新加坡" },
{ code: "MY", name: "马来西亚" },
{ code: "TH", name: "泰国" },
{ code: "VN", name: "越南" },
{ code: "PH", name: "菲律宾" },
{ code: "ID", name: "印度尼西亚" },
{ code: "MM", name: "缅甸" },
{ code: "KH", name: "柬埔寨" },
{ code: "LA", name: "老挝" },
{ code: "TL", name: "东帝汶" },
{ code: "BN", name: "文莱" },
// 南亚
{ code: "IN", name: "印度" },
{ code: "PK", name: "巴基斯坦" },
{ code: "BD", name: "孟加拉国" },
{ code: "LK", name: "斯里兰卡" },
{ code: "NP", name: "尼泊尔" },
{ code: "BT", name: "不丹" },
{ code: "MV", name: "马尔代夫" },
{ code: "AF", name: "阿富汗" },
// 中亚
{ code: "KZ", name: "哈萨克斯坦" },
{ code: "UZ", name: "乌兹别克斯坦" },
{ code: "TM", name: "土库曼斯坦" },
{ code: "TJ", name: "塔吉克斯坦" },
{ code: "KG", name: "吉尔吉斯斯坦" },
// 高加索
{ code: "AZ", name: "阿塞拜疆" },
{ code: "AM", name: "亚美尼亚" },
{ code: "GE", name: "格鲁吉亚" },
// 中东
{ code: "TR", name: "土耳其" },
{ code: "AE", name: "阿联酋" },
{ code: "SA", name: "沙特阿拉伯" },
{ code: "IL", name: "以色列" },
{ code: "PS", name: "巴勒斯坦" },
{ code: "IQ", name: "伊拉克" },
{ code: "IR", name: "伊朗" },
{ code: "SY", name: "叙利亚" },
{ code: "JO", name: "约旦" },
{ code: "LB", name: "黎巴嫩" },
{ code: "KW", name: "科威特" },
{ code: "QA", name: "卡塔尔" },
{ code: "BH", name: "巴林" },
{ code: "OM", name: "阿曼" },
{ code: "YE", name: "也门" },
// 北美
{ code: "US", name: "美国" },
{ code: "CA", name: "加拿大" },
{ code: "MX", name: "墨西哥" },
{ code: "GL", name: "格陵兰" },
{ code: "PM", name: "圣皮埃尔和密克隆" },
// 中美洲
{ code: "GT", name: "危地马拉" },
{ code: "BZ", name: "伯利兹" },
{ code: "HN", name: "洪都拉斯" },
{ code: "SV", name: "萨尔瓦多" },
{ code: "NI", name: "尼加拉瓜" },
{ code: "CR", name: "哥斯达黎加" },
{ code: "PA", name: "巴拿马" },
// 加勒比
{ code: "CU", name: "古巴" },
{ code: "JM", name: "牙买加" },
{ code: "HT", name: "海地" },
{ code: "DO", name: "多米尼加共和国" },
{ code: "PR", name: "波多黎各" },
{ code: "TT", name: "特立尼达和多巴哥" },
{ code: "BB", name: "巴巴多斯" },
{ code: "LC", name: "圣卢西亚" },
{ code: "VC", name: "圣文森特和格林纳丁斯" },
{ code: "GD", name: "格林纳达" },
{ code: "AG", name: "安提瓜和巴布达" },
{ code: "DM", name: "多米尼克" },
{ code: "KN", name: "圣基茨和尼维斯" },
{ code: "BS", name: "巴哈马" },
{ code: "TC", name: "特克斯和凯科斯群岛" },
{ code: "KY", name: "开曼群岛" },
{ code: "BM", name: "百慕大" },
{ code: "VG", name: "英属维尔京群岛" },
{ code: "VI", name: "美属维尔京群岛" },
{ code: "AW", name: "阿鲁巴" },
{ code: "CW", name: "库拉索" },
{ code: "SX", name: "荷属圣马丁" },
{ code: "MF", name: "法属圣马丁" },
{ code: "BL", name: "圣巴泰勒米" },
{ code: "BQ", name: "博内尔、圣尤斯特歇斯和萨巴" },
{ code: "GP", name: "瓜德罗普" },
{ code: "MQ", name: "马提尼克" },
{ code: "MS", name: "蒙特塞拉特" },
{ code: "AI", name: "安圭拉" },
// 南美
{ code: "BR", name: "巴西" },
{ code: "AR", name: "阿根廷" },
{ code: "CL", name: "智利" },
{ code: "CO", name: "哥伦比亚" },
{ code: "PE", name: "秘鲁" },
{ code: "VE", name: "委内瑞拉" },
{ code: "EC", name: "厄瓜多尔" },
{ code: "BO", name: "玻利维亚" },
{ code: "PY", name: "巴拉圭" },
{ code: "UY", name: "乌拉圭" },
{ code: "GY", name: "圭亚那" },
{ code: "SR", name: "苏里南" },
{ code: "GF", name: "法属圭亚那" },
{ code: "FK", name: "福克兰群岛" },
// 西欧
{ code: "GB", name: "英国" },
{ code: "DE", name: "德国" },
{ code: "IE", name: "爱尔兰" },
{ code: "FR", name: "法国" },
{ code: "DE", name: "德国" },
{ code: "NL", name: "荷兰" },
{ code: "BE", name: "比利时" },
{ code: "LU", name: "卢森堡" },
{ code: "CH", name: "瑞士" },
{ code: "AT", name: "奥地利" },
{ code: "ES", name: "西班牙" },
{ code: "PT", name: "葡萄牙" },
{ code: "IT", name: "意大利" },
{ code: "MC", name: "摩纳哥" },
{ code: "AD", name: "安道尔" },
{ code: "SM", name: "圣马力诺" },
{ code: "VA", name: "梵蒂冈" },
{ code: "LI", name: "列支敦士登" },
{ code: "GI", name: "直布罗陀" },
// 北欧
{ code: "SE", name: "瑞典" },
{ code: "NO", name: "挪威" },
{ code: "FI", name: "芬兰" },
{ code: "DK", name: "丹麦" },
{ code: "IS", name: "冰岛" },
{ code: "FO", name: "法罗群岛" },
{ code: "AX", name: "奥兰群岛" },
{ code: "SJ", name: "斯瓦尔巴和扬马延" },
// 南欧
{ code: "GR", name: "希腊" },
{ code: "CY", name: "塞浦路斯" },
{ code: "MT", name: "马耳他" },
// 英属皇家属地
{ code: "GG", name: "根西岛" },
{ code: "JE", name: "泽西岛" },
{ code: "IM", name: "马恩岛" },
// 东欧
{ code: "RU", name: "俄罗斯" },
{ code: "TR", name: "土耳其" },
{ code: "AU", name: "澳大利亚" },
{ code: "UA", name: "乌克兰" },
{ code: "BY", name: "白俄罗斯" },
{ code: "PL", name: "波兰" },
{ code: "CZ", name: "捷克" },
{ code: "SK", name: "斯洛伐克" },
{ code: "HU", name: "匈牙利" },
{ code: "RO", name: "罗马尼亚" },
{ code: "BG", name: "保加利亚" },
{ code: "MD", name: "摩尔多瓦" },
{ code: "LT", name: "立陶宛" },
{ code: "LV", name: "拉脱维亚" },
{ code: "EE", name: "爱沙尼亚" },
// 巴尔干
{ code: "RS", name: "塞尔维亚" },
{ code: "XK", name: "科索沃" },
{ code: "HR", name: "克罗地亚" },
{ code: "SI", name: "斯洛文尼亚" },
{ code: "BA", name: "波黑" },
{ code: "ME", name: "黑山" },
{ code: "AL", name: "阿尔巴尼亚" },
{ code: "MK", name: "北马其顿" },
// 北非
{ code: "EG", name: "埃及" },
{ code: "LY", name: "利比亚" },
{ code: "TN", name: "突尼斯" },
{ code: "DZ", name: "阿尔及利亚" },
{ code: "MA", name: "摩洛哥" },
{ code: "EH", name: "西撒哈拉" },
{ code: "SD", name: "苏丹" },
// 东非
{ code: "ET", name: "埃塞俄比亚" },
{ code: "ER", name: "厄立特里亚" },
{ code: "DJ", name: "吉布提" },
{ code: "SO", name: "索马里" },
{ code: "KE", name: "肯尼亚" },
{ code: "TZ", name: "坦桑尼亚" },
{ code: "UG", name: "乌干达" },
{ code: "RW", name: "卢旺达" },
{ code: "BI", name: "布隆迪" },
{ code: "SS", name: "南苏丹" },
// 西非
{ code: "NG", name: "尼日利亚" },
{ code: "GH", name: "加纳" },
{ code: "SN", name: "塞内加尔" },
{ code: "CI", name: "科特迪瓦" },
{ code: "CM", name: "喀麦隆" },
{ code: "ML", name: "马里" },
{ code: "BF", name: "布基纳法索" },
{ code: "NE", name: "尼日尔" },
{ code: "TD", name: "乍得" },
{ code: "MR", name: "毛里塔尼亚" },
{ code: "GM", name: "冈比亚" },
{ code: "GW", name: "几内亚比绍" },
{ code: "GN", name: "几内亚" },
{ code: "SL", name: "塞拉利昂" },
{ code: "LR", name: "利比里亚" },
{ code: "TG", name: "多哥" },
{ code: "BJ", name: "贝宁" },
{ code: "CV", name: "佛得角" },
{ code: "ST", name: "圣多美和普林西比" },
// 中非
{ code: "CF", name: "中非共和国" },
{ code: "CG", name: "刚果共和国" },
{ code: "CD", name: "刚果民主共和国" },
{ code: "GA", name: "加蓬" },
{ code: "GQ", name: "赤道几内亚" },
{ code: "AO", name: "安哥拉" },
// 南非洲
{ code: "ZA", name: "南非" },
{ code: "NA", name: "纳米比亚" },
{ code: "BW", name: "博茨瓦纳" },
{ code: "ZW", name: "津巴布韦" },
{ code: "ZM", name: "赞比亚" },
{ code: "MW", name: "马拉维" },
{ code: "MZ", name: "莫桑比克" },
{ code: "SZ", name: "斯威士兰" },
{ code: "LS", name: "莱索托" },
// 印度洋岛屿 & 东非岛屿
{ code: "MG", name: "马达加斯加" },
{ code: "MU", name: "毛里求斯" },
{ code: "SC", name: "塞舌尔" },
{ code: "KM", name: "科摩罗" },
{ code: "RE", name: "留尼汪" },
{ code: "YT", name: "马约特" },
{ code: "SH", name: "圣赫勒拿" },
{ code: "IO", name: "英属印度洋领地" },
// 大洋洲
{ code: "AU", name: "澳大利亚" },
{ code: "NZ", name: "新西兰" },
{ code: "PG", name: "巴布亚新几内亚" },
{ code: "FJ", name: "斐济" },
{ code: "SB", name: "所罗门群岛" },
{ code: "VU", name: "瓦努阿图" },
{ code: "NC", name: "新喀里多尼亚" },
{ code: "WS", name: "萨摩亚" },
{ code: "TO", name: "汤加" },
{ code: "KI", name: "基里巴斯" },
{ code: "FM", name: "密克罗尼西亚" },
{ code: "MH", name: "马绍尔群岛" },
{ code: "PW", name: "帕劳" },
{ code: "NR", name: "瑙鲁" },
{ code: "TV", name: "图瓦卢" },
{ code: "CK", name: "库克群岛" },
{ code: "NU", name: "纽埃" },
{ code: "WF", name: "瓦利斯和富图纳" },
{ code: "PF", name: "法属波利尼西亚" },
{ code: "GU", name: "关岛" },
{ code: "MP", name: "北马里亚纳群岛" },
{ code: "AS", name: "美属萨摩亚" },
{ code: "NF", name: "诺福克岛" },
{ code: "CC", name: "科科斯群岛" },
{ code: "CX", name: "圣诞岛" },
{ code: "TK", name: "托克劳" },
{ code: "PN", name: "皮特凯恩群岛" },
// 大西洋岛屿
{ code: "FK", name: "福克兰群岛" },
{ code: "GS", name: "南乔治亚和南桑威奇群岛" },
{ code: "BV", name: "布韦岛" },
{ code: "HM", name: "赫德岛和麦克唐纳群岛" },
{ code: "TF", name: "法属南部领地" },
{ code: "UM", name: "美国本土外小岛屿" },
// 极地
{ code: "AQ", name: "南极洲" },
];
Loading
Loading