feat: normalize provider names
This commit is contained in:
@@ -1,153 +1,150 @@
|
||||
import { z } from "zod";
|
||||
import { type BaseModel } from "pocketbase";
|
||||
|
||||
type AccessUsages = "apply" | "deploy" | "all";
|
||||
|
||||
type AccessProvider = {
|
||||
type: string;
|
||||
name: string;
|
||||
icon: string;
|
||||
usage: AccessUsages;
|
||||
};
|
||||
|
||||
export const accessProvidersMap: Map<AccessProvider["type"], AccessProvider> = new Map(
|
||||
[
|
||||
["aliyun", "common.provider.aliyun", "/imgs/providers/aliyun.svg", "all"],
|
||||
["tencent", "common.provider.tencent", "/imgs/providers/tencent.svg", "all"],
|
||||
["huaweicloud", "common.provider.huaweicloud", "/imgs/providers/huaweicloud.svg", "all"],
|
||||
["baiducloud", "common.provider.baiducloud", "/imgs/providers/baiducloud.svg", "all"],
|
||||
["qiniu", "common.provider.qiniu", "/imgs/providers/qiniu.svg", "deploy"],
|
||||
["dogecloud", "common.provider.dogecloud", "/imgs/providers/dogecloud.svg", "deploy"],
|
||||
["volcengine", "common.provider.volcengine", "/imgs/providers/volcengine.svg", "all"],
|
||||
["byteplus", "common.provider.byteplus", "/imgs/providers/byteplus.svg", "all"],
|
||||
["aws", "common.provider.aws", "/imgs/providers/aws.svg", "apply"],
|
||||
["cloudflare", "common.provider.cloudflare", "/imgs/providers/cloudflare.svg", "apply"],
|
||||
["namesilo", "common.provider.namesilo", "/imgs/providers/namesilo.svg", "apply"],
|
||||
["godaddy", "common.provider.godaddy", "/imgs/providers/godaddy.svg", "apply"],
|
||||
["pdns", "common.provider.pdns", "/imgs/providers/pdns.svg", "apply"],
|
||||
["httpreq", "common.provider.httpreq", "/imgs/providers/httpreq.svg", "apply"],
|
||||
["local", "common.provider.local", "/imgs/providers/local.svg", "deploy"],
|
||||
["ssh", "common.provider.ssh", "/imgs/providers/ssh.svg", "deploy"],
|
||||
["webhook", "common.provider.webhook", "/imgs/providers/webhook.svg", "deploy"],
|
||||
["k8s", "common.provider.kubernetes", "/imgs/providers/k8s.svg", "deploy"],
|
||||
].map(([type, name, icon, usage]) => [type, { type, name, icon, usage: usage as AccessUsages }])
|
||||
);
|
||||
|
||||
export const accessTypeFormSchema = z.union(
|
||||
[
|
||||
z.literal("aliyun"),
|
||||
z.literal("tencent"),
|
||||
z.literal("huaweicloud"),
|
||||
z.literal("baiducloud"),
|
||||
z.literal("qiniu"),
|
||||
z.literal("dogecloud"),
|
||||
z.literal("aws"),
|
||||
z.literal("cloudflare"),
|
||||
z.literal("namesilo"),
|
||||
z.literal("godaddy"),
|
||||
z.literal("pdns"),
|
||||
z.literal("httpreq"),
|
||||
z.literal("local"),
|
||||
z.literal("ssh"),
|
||||
z.literal("webhook"),
|
||||
z.literal("k8s"),
|
||||
z.literal("volcengine"),
|
||||
z.literal("byteplus"),
|
||||
],
|
||||
{ message: "access.authorization.form.type.placeholder" }
|
||||
);
|
||||
/*
|
||||
注意:如果追加新的常量值,请保持以 ASCII 排序。
|
||||
NOTICE: If you add new constant, please keep ASCII order.
|
||||
*/
|
||||
export const ACCESS_PROVIDER_TYPE_ACMEHTTPREQ = "acmehttpreq" as const;
|
||||
export const ACCESS_PROVIDER_TYPE_ALIYUN = "aliyun" as const;
|
||||
export const ACCESS_PROVIDER_TYPE_AWS = "aws" as const;
|
||||
export const ACCESS_PROVIDER_TYPE_BAIDUCLOUD = "baiducloud" as const;
|
||||
export const ACCESS_PROVIDER_TYPE_BYTEPLUS = "byteplus" as const;
|
||||
export const ACCESS_PROVIDER_TYPE_CLOUDFLARE = "cloudflare" as const;
|
||||
export const ACCESS_PROVIDER_TYPE_DOGECLOUD = "dogecloud" as const;
|
||||
export const ACCESS_PROVIDER_TYPE_GODADDY = "godaddy" as const;
|
||||
export const ACCESS_PROVIDER_TYPE_HUAWEICLOUD = "huaweicloud" as const;
|
||||
export const ACCESS_PROVIDER_TYPE_KUBERNETES = "k8s" as const;
|
||||
export const ACCESS_PROVIDER_TYPE_LOCAL = "local" as const;
|
||||
export const ACCESS_PROVIDER_TYPE_NAMESILO = "namesilo" as const;
|
||||
export const ACCESS_PROVIDER_TYPE_POWERDNS = "powerdns" as const;
|
||||
export const ACCESS_PROVIDER_TYPE_QINIU = "qiniu" as const;
|
||||
export const ACCESS_PROVIDER_TYPE_SSH = "ssh" as const;
|
||||
export const ACCESS_PROVIDER_TYPE_TENCENTCLOUD = "tencentcloud" as const;
|
||||
export const ACCESS_PROVIDER_TYPE_VOLCENGINE = "volcengine" as const;
|
||||
export const ACCESS_PROVIDER_TYPE_WEBHOOK = "webhook" as const;
|
||||
export const ACCESS_PROVIDER_TYPES = Object.freeze({
|
||||
ACMEHTTPREQ: ACCESS_PROVIDER_TYPE_ACMEHTTPREQ,
|
||||
ALIYUN: ACCESS_PROVIDER_TYPE_ALIYUN,
|
||||
AWS: ACCESS_PROVIDER_TYPE_AWS,
|
||||
BAIDUCLOUD: ACCESS_PROVIDER_TYPE_BAIDUCLOUD,
|
||||
BYTEPLUS: ACCESS_PROVIDER_TYPE_BYTEPLUS,
|
||||
CLOUDFLARE: ACCESS_PROVIDER_TYPE_CLOUDFLARE,
|
||||
DOGECLOUD: ACCESS_PROVIDER_TYPE_DOGECLOUD,
|
||||
GODADDY: ACCESS_PROVIDER_TYPE_GODADDY,
|
||||
HUAWEICLOUD: ACCESS_PROVIDER_TYPE_HUAWEICLOUD,
|
||||
KUBERNETES: ACCESS_PROVIDER_TYPE_KUBERNETES,
|
||||
LOCAL: ACCESS_PROVIDER_TYPE_LOCAL,
|
||||
NAMESILO: ACCESS_PROVIDER_TYPE_NAMESILO,
|
||||
POWERDNS: ACCESS_PROVIDER_TYPE_POWERDNS,
|
||||
QINIU: ACCESS_PROVIDER_TYPE_QINIU,
|
||||
SSH: ACCESS_PROVIDER_TYPE_SSH,
|
||||
TENCENTCLOUD: ACCESS_PROVIDER_TYPE_TENCENTCLOUD,
|
||||
VOLCENGINE: ACCESS_PROVIDER_TYPE_VOLCENGINE,
|
||||
WEBHOOK: ACCESS_PROVIDER_TYPE_WEBHOOK,
|
||||
} as const);
|
||||
|
||||
export interface AccessModel extends Omit<BaseModel, "created" | "updated"> {
|
||||
name: string;
|
||||
configType: string;
|
||||
usage: AccessUsages;
|
||||
group?: string;
|
||||
config:
|
||||
| AliyunConfig
|
||||
| TencentConfig
|
||||
| HuaweiCloudConfig
|
||||
| QiniuConfig
|
||||
| DogeCloudConfig
|
||||
| AwsConfig
|
||||
| CloudflareConfig
|
||||
| NamesiloConfig
|
||||
| GodaddyConfig
|
||||
| PdnsConfig
|
||||
| HttpreqConfig
|
||||
| LocalConfig
|
||||
| SSHConfig
|
||||
| WebhookConfig
|
||||
| KubernetesConfig
|
||||
| VolcengineConfig
|
||||
| ByteplusConfig;
|
||||
config: /*
|
||||
注意:如果追加新的类型,请保持以 ASCII 排序。
|
||||
NOTICE: If you add new type, please keep ASCII order.
|
||||
*/
|
||||
Record<string, unknown> &
|
||||
(
|
||||
| ACMEHttpReqAccessConfig
|
||||
| AliyunAccessConfig
|
||||
| AWSAccessConfig
|
||||
| BaiduCloudAccessConfig
|
||||
| BytePlusAccessConfig
|
||||
| CloudflareAccessConfig
|
||||
| DogeCloudAccessConfig
|
||||
| GoDaddyAccessConfig
|
||||
| HuaweiCloudAccessConfig
|
||||
| KubernetesAccessConfig
|
||||
| LocalAccessConfig
|
||||
| NamesiloAccessConfig
|
||||
| PowerDNSAccessConfig
|
||||
| QiniuAccessConfig
|
||||
| SSHAccessConfig
|
||||
| TencentCloudAccessConfig
|
||||
| VolcEngineAccessConfig
|
||||
| WebhookAccessConfig
|
||||
);
|
||||
}
|
||||
|
||||
export type AliyunConfig = {
|
||||
export type ACMEHttpReqAccessConfig = {
|
||||
endpoint: string;
|
||||
mode?: string;
|
||||
username?: string;
|
||||
password?: string;
|
||||
};
|
||||
|
||||
export type AliyunAccessConfig = {
|
||||
accessKeyId: string;
|
||||
accessKeySecret: string;
|
||||
};
|
||||
|
||||
export type TencentConfig = {
|
||||
secretId: string;
|
||||
secretKey: string;
|
||||
};
|
||||
|
||||
export type HuaweiCloudConfig = {
|
||||
region: string;
|
||||
accessKeyId: string;
|
||||
secretAccessKey: string;
|
||||
};
|
||||
|
||||
export type BaiduCloudConfig = {
|
||||
accessKeyId: string;
|
||||
secretAccessKey: string;
|
||||
};
|
||||
|
||||
export type QiniuConfig = {
|
||||
accessKey: string;
|
||||
secretKey: string;
|
||||
};
|
||||
|
||||
export type DogeCloudConfig = {
|
||||
accessKey: string;
|
||||
secretKey: string;
|
||||
};
|
||||
|
||||
export type AwsConfig = {
|
||||
region: string;
|
||||
export type AWSAccessConfig = {
|
||||
accessKeyId: string;
|
||||
secretAccessKey: string;
|
||||
region?: string;
|
||||
hostedZoneId?: string;
|
||||
};
|
||||
|
||||
export type CloudflareConfig = {
|
||||
export type BaiduCloudAccessConfig = {
|
||||
accessKeyId: string;
|
||||
secretAccessKey: string;
|
||||
};
|
||||
|
||||
export type BytePlusAccessConfig = {
|
||||
accessKey: string;
|
||||
secretKey: string;
|
||||
};
|
||||
|
||||
export type CloudflareAccessConfig = {
|
||||
dnsApiToken: string;
|
||||
};
|
||||
|
||||
export type NamesiloConfig = {
|
||||
apiKey: string;
|
||||
export type DogeCloudAccessConfig = {
|
||||
accessKey: string;
|
||||
secretKey: string;
|
||||
};
|
||||
|
||||
export type GodaddyConfig = {
|
||||
export type GoDaddyAccessConfig = {
|
||||
apiKey: string;
|
||||
apiSecret: string;
|
||||
};
|
||||
|
||||
export type PdnsConfig = {
|
||||
export type HuaweiCloudAccessConfig = {
|
||||
region: string;
|
||||
accessKeyId: string;
|
||||
secretAccessKey: string;
|
||||
};
|
||||
|
||||
export type KubernetesAccessConfig = {
|
||||
kubeConfig: string;
|
||||
};
|
||||
|
||||
export type LocalAccessConfig = never;
|
||||
|
||||
export type NamesiloAccessConfig = {
|
||||
apiKey: string;
|
||||
};
|
||||
|
||||
export type PowerDNSAccessConfig = {
|
||||
apiUrl: string;
|
||||
apiKey: string;
|
||||
};
|
||||
|
||||
export type HttpreqConfig = {
|
||||
endpoint: string;
|
||||
mode: string;
|
||||
username: string;
|
||||
password: string;
|
||||
export type QiniuAccessConfig = {
|
||||
accessKey: string;
|
||||
secretKey: string;
|
||||
};
|
||||
|
||||
export type LocalConfig = Record<string, string>;
|
||||
|
||||
export type SSHConfig = {
|
||||
export type SSHAccessConfig = {
|
||||
host: string;
|
||||
port: string;
|
||||
username: string;
|
||||
@@ -157,20 +154,78 @@ export type SSHConfig = {
|
||||
keyPassphrase?: string;
|
||||
};
|
||||
|
||||
export type WebhookConfig = {
|
||||
url: string;
|
||||
export type TencentCloudAccessConfig = {
|
||||
secretId: string;
|
||||
secretKey: string;
|
||||
};
|
||||
|
||||
export type KubernetesConfig = {
|
||||
kubeConfig: string;
|
||||
};
|
||||
|
||||
export type VolcengineConfig = {
|
||||
export type VolcEngineAccessConfig = {
|
||||
accessKeyId: string;
|
||||
secretAccessKey: string;
|
||||
};
|
||||
|
||||
export type ByteplusConfig = {
|
||||
accessKey: string;
|
||||
secretKey: string;
|
||||
export type WebhookAccessConfig = {
|
||||
url: string;
|
||||
};
|
||||
|
||||
type AccessTypes = (typeof ACCESS_PROVIDER_TYPES)[keyof typeof ACCESS_PROVIDER_TYPES];
|
||||
|
||||
type AccessUsages = "apply" | "deploy" | "all";
|
||||
|
||||
type AccessProvider = {
|
||||
type: AccessTypes;
|
||||
name: string;
|
||||
icon: string;
|
||||
usage: AccessUsages;
|
||||
};
|
||||
|
||||
export const accessProvidersMap: Map<AccessProvider["type"], AccessProvider> = new Map(
|
||||
/*
|
||||
注意:与定义常量值时不同,此处的顺序决定显示在前端的顺序。
|
||||
NOTICE: The following order determines the order displayed at the frontend.
|
||||
*/
|
||||
[
|
||||
[ACCESS_PROVIDER_TYPE_ALIYUN, "common.provider.aliyun", "/imgs/providers/aliyun.svg", "all"],
|
||||
[ACCESS_PROVIDER_TYPE_TENCENTCLOUD, "common.provider.tencentcloud", "/imgs/providers/tencentcloud.svg", "all"],
|
||||
[ACCESS_PROVIDER_TYPE_HUAWEICLOUD, "common.provider.huaweicloud", "/imgs/providers/huaweicloud.svg", "all"],
|
||||
[ACCESS_PROVIDER_TYPE_BAIDUCLOUD, "common.provider.baiducloud", "/imgs/providers/baiducloud.svg", "all"],
|
||||
[ACCESS_PROVIDER_TYPE_QINIU, "common.provider.qiniu", "/imgs/providers/qiniu.svg", "deploy"],
|
||||
[ACCESS_PROVIDER_TYPE_DOGECLOUD, "common.provider.dogecloud", "/imgs/providers/dogecloud.svg", "deploy"],
|
||||
[ACCESS_PROVIDER_TYPE_VOLCENGINE, "common.provider.volcengine", "/imgs/providers/volcengine.svg", "all"],
|
||||
[ACCESS_PROVIDER_TYPE_BYTEPLUS, "common.provider.byteplus", "/imgs/providers/byteplus.svg", "all"],
|
||||
[ACCESS_PROVIDER_TYPE_AWS, "common.provider.aws", "/imgs/providers/aws.svg", "apply"],
|
||||
[ACCESS_PROVIDER_TYPE_CLOUDFLARE, "common.provider.cloudflare", "/imgs/providers/cloudflare.svg", "apply"],
|
||||
[ACCESS_PROVIDER_TYPE_NAMESILO, "common.provider.namesilo", "/imgs/providers/namesilo.svg", "apply"],
|
||||
[ACCESS_PROVIDER_TYPE_GODADDY, "common.provider.godaddy", "/imgs/providers/godaddy.svg", "apply"],
|
||||
[ACCESS_PROVIDER_TYPE_POWERDNS, "common.provider.powerdns", "/imgs/providers/powerdns.svg", "apply"],
|
||||
[ACCESS_PROVIDER_TYPE_LOCAL, "common.provider.local", "/imgs/providers/local.svg", "deploy"],
|
||||
[ACCESS_PROVIDER_TYPE_SSH, "common.provider.ssh", "/imgs/providers/ssh.svg", "deploy"],
|
||||
[ACCESS_PROVIDER_TYPE_WEBHOOK, "common.provider.webhook", "/imgs/providers/webhook.svg", "deploy"],
|
||||
[ACCESS_PROVIDER_TYPE_KUBERNETES, "common.provider.kubernetes", "/imgs/providers/kubernetes.svg", "deploy"],
|
||||
[ACCESS_PROVIDER_TYPE_ACMEHTTPREQ, "common.provider.acmehttpreq", "/imgs/providers/acmehttpreq.svg", "apply"],
|
||||
].map(([type, name, icon, usage]) => [type as AccessTypes, { type: type as AccessTypes, name, icon, usage: usage as AccessUsages }])
|
||||
);
|
||||
|
||||
export const accessTypeFormSchema = z.union(
|
||||
[
|
||||
z.literal("aliyun"),
|
||||
z.literal("tencentcloud"),
|
||||
z.literal("huaweicloud"),
|
||||
z.literal("baiducloud"),
|
||||
z.literal("qiniu"),
|
||||
z.literal("dogecloud"),
|
||||
z.literal("aws"),
|
||||
z.literal("cloudflare"),
|
||||
z.literal("namesilo"),
|
||||
z.literal("godaddy"),
|
||||
z.literal("powerdns"),
|
||||
z.literal("acmehttpreq"),
|
||||
z.literal("local"),
|
||||
z.literal("ssh"),
|
||||
z.literal("webhook"),
|
||||
z.literal("k8s"),
|
||||
z.literal("volcengine"),
|
||||
z.literal("byteplus"),
|
||||
],
|
||||
{ message: "access.form.type.placeholder" }
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user