Merge pull request #543 from fudiwei/main

new providers & bugfix
This commit is contained in:
Yoan.liu
2025-03-25 09:23:54 +08:00
committed by GitHub
114 changed files with 2251 additions and 824 deletions

View File

@@ -23,6 +23,7 @@ import AccessFormCdnflyConfig from "./AccessFormCdnflyConfig";
import AccessFormCloudflareConfig from "./AccessFormCloudflareConfig";
import AccessFormClouDNSConfig from "./AccessFormClouDNSConfig";
import AccessFormCMCCCloudConfig from "./AccessFormCMCCCloudConfig";
import AccessFormDeSECConfig from "./AccessFormDeSECConfig";
import AccessFormDNSLAConfig from "./AccessFormDNSLAConfig";
import AccessFormDogeCloudConfig from "./AccessFormDogeCloudConfig";
import AccessFormDynv6Config from "./AccessFormDynv6Config";
@@ -38,6 +39,7 @@ import AccessFormNamecheapConfig from "./AccessFormNamecheapConfig";
import AccessFormNameDotComConfig from "./AccessFormNameDotComConfig";
import AccessFormNameSiloConfig from "./AccessFormNameSiloConfig";
import AccessFormNS1Config from "./AccessFormNS1Config";
import AccessFormPorkbunConfig from "./AccessFormPorkbunConfig";
import AccessFormPowerDNSConfig from "./AccessFormPowerDNSConfig";
import AccessFormQiniuConfig from "./AccessFormQiniuConfig";
import AccessFormRainYunConfig from "./AccessFormRainYunConfig";
@@ -46,6 +48,7 @@ import AccessFormSSHConfig from "./AccessFormSSHConfig";
import AccessFormTencentCloudConfig from "./AccessFormTencentCloudConfig";
import AccessFormUCloudConfig from "./AccessFormUCloudConfig";
import AccessFormUpyunConfig from "./AccessFormUpyunConfig";
import AccessFormVercelConfig from "./AccessFormVercelConfig";
import AccessFormVolcEngineConfig from "./AccessFormVolcEngineConfig";
import AccessFormWebhookConfig from "./AccessFormWebhookConfig";
import AccessFormWestcnConfig from "./AccessFormWestcnConfig";
@@ -130,6 +133,8 @@ const AccessForm = forwardRef<AccessFormInstance, AccessFormProps>(({ className,
return <AccessFormClouDNSConfig {...nestedFormProps} />;
case ACCESS_PROVIDERS.CMCCCLOUD:
return <AccessFormCMCCCloudConfig {...nestedFormProps} />;
case ACCESS_PROVIDERS.DESEC:
return <AccessFormDeSECConfig {...nestedFormProps} />;
case ACCESS_PROVIDERS.DNSLA:
return <AccessFormDNSLAConfig {...nestedFormProps} />;
case ACCESS_PROVIDERS.DOGECLOUD:
@@ -160,6 +165,8 @@ const AccessForm = forwardRef<AccessFormInstance, AccessFormProps>(({ className,
return <AccessFormNameSiloConfig {...nestedFormProps} />;
case ACCESS_PROVIDERS.NS1:
return <AccessFormNS1Config {...nestedFormProps} />;
case ACCESS_PROVIDERS.PORKBUN:
return <AccessFormPorkbunConfig {...nestedFormProps} />;
case ACCESS_PROVIDERS.POWERDNS:
return <AccessFormPowerDNSConfig {...nestedFormProps} />;
case ACCESS_PROVIDERS.QINIU:
@@ -176,6 +183,8 @@ const AccessForm = forwardRef<AccessFormInstance, AccessFormProps>(({ className,
return <AccessFormUCloudConfig {...nestedFormProps} />;
case ACCESS_PROVIDERS.UPYUN:
return <AccessFormUpyunConfig {...nestedFormProps} />;
case ACCESS_PROVIDERS.VERCEL:
return <AccessFormVercelConfig {...nestedFormProps} />;
case ACCESS_PROVIDERS.VOLCENGINE:
return <AccessFormVolcEngineConfig {...nestedFormProps} />;
case ACCESS_PROVIDERS.WEBHOOK:

View File

@@ -0,0 +1,61 @@
import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { type AccessConfigForDeSEC } from "@/domain/access";
type AccessFormDeSECConfigFieldValues = Nullish<AccessConfigForDeSEC>;
export type AccessFormDeSECConfigProps = {
form: FormInstance;
formName: string;
disabled?: boolean;
initialValues?: AccessFormDeSECConfigFieldValues;
onValuesChange?: (values: AccessFormDeSECConfigFieldValues) => void;
};
const initFormModel = (): AccessFormDeSECConfigFieldValues => {
return {
token: "",
};
};
const AccessFormDeSECConfig = ({ form: formInst, formName, disabled, initialValues, onValuesChange }: AccessFormDeSECConfigProps) => {
const { t } = useTranslation();
const formSchema = z.object({
token: z
.string()
.min(1, t("access.form.desec_token.placeholder"))
.max(256, t("common.errmsg.string_max", { max: 256 }))
.trim(),
});
const formRule = createSchemaFieldRule(formSchema);
const handleFormChange = (_: unknown, values: z.infer<typeof formSchema>) => {
onValuesChange?.(values);
};
return (
<Form
form={formInst}
disabled={disabled}
initialValues={initialValues ?? initFormModel()}
layout="vertical"
name={formName}
onValuesChange={handleFormChange}
>
<Form.Item
name="token"
label={t("access.form.desec_token.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("access.form.desec_token.tooltip") }}></span>}
>
<Input.Password autoComplete="new-password" placeholder={t("access.form.desec_token.placeholder")} />
</Form.Item>
</Form>
);
};
export default AccessFormDeSECConfig;

View File

@@ -0,0 +1,76 @@
import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { type AccessConfigForPorkbun } from "@/domain/access";
type AccessFormPorkbunConfigFieldValues = Nullish<AccessConfigForPorkbun>;
export type AccessFormPorkbunConfigProps = {
form: FormInstance;
formName: string;
disabled?: boolean;
initialValues?: AccessFormPorkbunConfigFieldValues;
onValuesChange?: (values: AccessFormPorkbunConfigFieldValues) => void;
};
const initFormModel = (): AccessFormPorkbunConfigFieldValues => {
return {
apiKey: "",
secretApiKey: "",
};
};
const AccessFormPorkbunConfig = ({ form: formInst, formName, disabled, initialValues, onValuesChange }: AccessFormPorkbunConfigProps) => {
const { t } = useTranslation();
const formSchema = z.object({
apiKey: z
.string()
.min(1, t("access.form.porkbun_api_key.placeholder"))
.max(256, t("common.errmsg.string_max", { max: 256 }))
.trim(),
secretApiKey: z
.string()
.min(1, t("access.form.porkbun_secret_api_key.placeholder"))
.max(256, t("common.errmsg.string_max", { max: 256 }))
.trim(),
});
const formRule = createSchemaFieldRule(formSchema);
const handleFormChange = (_: unknown, values: z.infer<typeof formSchema>) => {
onValuesChange?.(values);
};
return (
<Form
form={formInst}
disabled={disabled}
initialValues={initialValues ?? initFormModel()}
layout="vertical"
name={formName}
onValuesChange={handleFormChange}
>
<Form.Item
name="apiKey"
label={t("access.form.porkbun_api_key.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("access.form.porkbun_api_key.tooltip") }}></span>}
>
<Input autoComplete="new-password" placeholder={t("access.form.porkbun_api_key.placeholder")} />
</Form.Item>
<Form.Item
name="secretApiKey"
label={t("access.form.porkbun_secret_api_key.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("access.form.porkbun_secret_api_key.tooltip") }}></span>}
>
<Input.Password autoComplete="new-password" placeholder={t("access.form.porkbun_secret_api_key.placeholder")} />
</Form.Item>
</Form>
);
};
export default AccessFormPorkbunConfig;

View File

@@ -28,9 +28,9 @@ const AccessFormUCloudConfig = ({ form: formInst, formName, disabled, initialVal
const formSchema = z.object({
privateKey: z
.string()
.trim()
.min(1, t("access.form.ucloud_private_key.placeholder"))
.max(64, t("common.errmsg.string_max", { max: 64 })),
.max(64, t("common.errmsg.string_max", { max: 64 }))
.trim(),
publicKey: z
.string()
.min(1, t("access.form.ucloud_public_key.placeholder"))

View File

@@ -0,0 +1,75 @@
import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { type AccessConfigForVercel } from "@/domain/access";
type AccessFormVercelConfigFieldValues = Nullish<AccessConfigForVercel>;
export type AccessFormVercelConfigProps = {
form: FormInstance;
formName: string;
disabled?: boolean;
initialValues?: AccessFormVercelConfigFieldValues;
onValuesChange?: (values: AccessFormVercelConfigFieldValues) => void;
};
const initFormModel = (): AccessFormVercelConfigFieldValues => {
return {
apiAccessToken: "",
};
};
const AccessFormVercelConfig = ({ form: formInst, formName, disabled, initialValues, onValuesChange }: AccessFormVercelConfigProps) => {
const { t } = useTranslation();
const formSchema = z.object({
apiAccessToken: z
.string()
.min(1, t("access.form.vercel_api_access_token.placeholder"))
.max(256, t("common.errmsg.string_max", { max: 256 }))
.trim(),
teamId: z
.string()
.max(256, t("common.errmsg.string_max", { max: 256 }))
.trim()
.nullish(),
});
const formRule = createSchemaFieldRule(formSchema);
const handleFormChange = (_: unknown, values: z.infer<typeof formSchema>) => {
onValuesChange?.(values);
};
return (
<Form
form={formInst}
disabled={disabled}
initialValues={initialValues ?? initFormModel()}
layout="vertical"
name={formName}
onValuesChange={handleFormChange}
>
<Form.Item
name="apiAccessToken"
label={t("access.form.vercel_api_access_token.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("access.form.vercel_api_access_token.tooltip") }}></span>}
>
<Input.Password autoComplete="new-password" placeholder={t("access.form.vercel_api_access_token.placeholder")} />
</Form.Item>
<Form.Item
name="teamId"
label={t("access.form.vercel_team_id.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("access.form.vercel_team_id.tooltip") }}></span>}
>
<Input placeholder={t("access.form.vercel_team_id.placeholder")} />
</Form.Item>
</Form>
);
};
export default AccessFormVercelConfig;

View File

@@ -28,9 +28,9 @@ const AccessFormVolcEngineConfig = ({ form: formInst, formName, disabled, initia
const formSchema = z.object({
accessKeyId: z
.string()
.trim()
.min(1, t("access.form.volcengine_access_key_id.placeholder"))
.max(64, t("common.errmsg.string_max", { max: 64 })),
.max(64, t("common.errmsg.string_max", { max: 64 }))
.trim(),
secretAccessKey: z
.string()
.min(1, t("access.form.volcengine_secret_access_key.placeholder"))

View File

@@ -28,9 +28,9 @@ const AccessFormWestcnConfig = ({ form: formInst, formName, disabled, initialVal
const formSchema = z.object({
username: z
.string()
.trim()
.min(1, t("access.form.westcn_username.placeholder"))
.max(64, t("common.errmsg.string_max", { max: 64 })),
.max(64, t("common.errmsg.string_max", { max: 64 }))
.trim(),
apiPassword: z
.string()
.min(1, t("access.form.westcn_api_password.placeholder"))

View File

@@ -70,6 +70,7 @@ import DeployNodeConfigFormUCloudUCDNConfig from "./DeployNodeConfigFormUCloudUC
import DeployNodeConfigFormUCloudUS3Config from "./DeployNodeConfigFormUCloudUS3Config.tsx";
import DeployNodeConfigFormUpyunCDNConfig from "./DeployNodeConfigFormUpyunCDNConfig.tsx";
import DeployNodeConfigFormUpyunFileConfig from "./DeployNodeConfigFormUpyunFileConfig.tsx";
import DeployNodeConfigFormVolcEngineALBConfig from "./DeployNodeConfigFormVolcEngineALBConfig.tsx";
import DeployNodeConfigFormVolcEngineCDNConfig from "./DeployNodeConfigFormVolcEngineCDNConfig.tsx";
import DeployNodeConfigFormVolcEngineCLBConfig from "./DeployNodeConfigFormVolcEngineCLBConfig.tsx";
import DeployNodeConfigFormVolcEngineDCDNConfig from "./DeployNodeConfigFormVolcEngineDCDNConfig.tsx";
@@ -258,6 +259,8 @@ const DeployNodeConfigForm = forwardRef<DeployNodeConfigFormInstance, DeployNode
return <DeployNodeConfigFormUpyunCDNConfig {...nestedFormProps} />;
case DEPLOY_PROVIDERS.UPYUN_FILE:
return <DeployNodeConfigFormUpyunFileConfig {...nestedFormProps} />;
case DEPLOY_PROVIDERS.VOLCENGINE_ALB:
return <DeployNodeConfigFormVolcEngineALBConfig {...nestedFormProps} />;
case DEPLOY_PROVIDERS.VOLCENGINE_CDN:
return <DeployNodeConfigFormVolcEngineCDNConfig {...nestedFormProps} />;
case DEPLOY_PROVIDERS.VOLCENGINE_CLB:

View File

@@ -38,7 +38,7 @@ const DeployNodeConfigFormAliyunFCConfig = ({ form: formInst, formName, disabled
.trim(),
domain: z
.string({ message: t("workflow_node.deploy.form.aliyun_fc_domain.placeholder") })
.refine((v) => validDomainName(v), t("common.errmsg.domain_invalid")),
.refine((v) => validDomainName(v, { allowWildcard: true }), t("common.errmsg.domain_invalid")),
});
const formRule = createSchemaFieldRule(formSchema);

View File

@@ -0,0 +1,150 @@
import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input, Select } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import Show from "@/components/Show";
import { validDomainName } from "@/utils/validators";
type DeployNodeConfigFormVolcEngineALBConfigFieldValues = Nullish<{
resourceType: string;
region: string;
loadbalancerId?: string;
listenerId?: string;
domain?: string;
}>;
export type DeployNodeConfigFormVolcEngineALBConfigProps = {
form: FormInstance;
formName: string;
disabled?: boolean;
initialValues?: DeployNodeConfigFormVolcEngineALBConfigFieldValues;
onValuesChange?: (values: DeployNodeConfigFormVolcEngineALBConfigFieldValues) => void;
};
const RESOURCE_TYPE_LOADBALANCER = "loadbalancer" as const;
const RESOURCE_TYPE_LISTENER = "listener" as const;
const initFormModel = (): DeployNodeConfigFormVolcEngineALBConfigFieldValues => {
return {
resourceType: RESOURCE_TYPE_LISTENER,
};
};
const DeployNodeConfigFormVolcEngineALBConfig = ({
form: formInst,
formName,
disabled,
initialValues,
onValuesChange,
}: DeployNodeConfigFormVolcEngineALBConfigProps) => {
const { t } = useTranslation();
const formSchema = z.object({
resourceType: z.union([z.literal(RESOURCE_TYPE_LOADBALANCER), z.literal(RESOURCE_TYPE_LISTENER)], {
message: t("workflow_node.deploy.form.volcengine_alb_resource_type.placeholder"),
}),
region: z
.string({ message: t("workflow_node.deploy.form.volcengine_alb_region.placeholder") })
.nonempty(t("workflow_node.deploy.form.volcengine_alb_region.placeholder"))
.trim(),
loadbalancerId: z
.string()
.max(64, t("common.errmsg.string_max", { max: 64 }))
.trim()
.nullish()
.refine(
(v) => ![RESOURCE_TYPE_LOADBALANCER].includes(fieldResourceType) || !!v?.trim(),
t("workflow_node.deploy.form.volcengine_alb_loadbalancer_id.placeholder")
),
listenerId: z
.string()
.max(64, t("common.errmsg.string_max", { max: 64 }))
.trim()
.nullish()
.refine(
(v) => ![RESOURCE_TYPE_LISTENER].includes(fieldResourceType) || !!v?.trim(),
t("workflow_node.deploy.form.volcengine_alb_listener_id.placeholder")
),
domain: z
.string()
.nullish()
.refine((v) => {
if (![RESOURCE_TYPE_LOADBALANCER, RESOURCE_TYPE_LISTENER].includes(fieldResourceType)) return true;
return !v || validDomainName(v!, { allowWildcard: true });
}, t("common.errmsg.domain_invalid")),
});
const formRule = createSchemaFieldRule(formSchema);
const fieldResourceType = Form.useWatch("resourceType", formInst);
const handleFormChange = (_: unknown, values: z.infer<typeof formSchema>) => {
onValuesChange?.(values);
};
return (
<Form
form={formInst}
disabled={disabled}
initialValues={initialValues ?? initFormModel()}
layout="vertical"
name={formName}
onValuesChange={handleFormChange}
>
<Form.Item name="resourceType" label={t("workflow_node.deploy.form.volcengine_alb_resource_type.label")} rules={[formRule]}>
<Select placeholder={t("workflow_node.deploy.form.volcengine_alb_resource_type.placeholder")}>
<Select.Option key={RESOURCE_TYPE_LOADBALANCER} value={RESOURCE_TYPE_LOADBALANCER}>
{t("workflow_node.deploy.form.volcengine_alb_resource_type.option.loadbalancer.label")}
</Select.Option>
<Select.Option key={RESOURCE_TYPE_LISTENER} value={RESOURCE_TYPE_LISTENER}>
{t("workflow_node.deploy.form.volcengine_alb_resource_type.option.listener.label")}
</Select.Option>
</Select>
</Form.Item>
<Form.Item
name="region"
label={t("workflow_node.deploy.form.volcengine_alb_region.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.volcengine_alb_region.tooltip") }}></span>}
>
<Input placeholder={t("workflow_node.deploy.form.volcengine_alb_region.placeholder")} />
</Form.Item>
<Show when={fieldResourceType === RESOURCE_TYPE_LOADBALANCER}>
<Form.Item
name="listenerId"
label={t("workflow_node.deploy.form.volcengine_alb_loadbalancer_id.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.volcengine_alb_loadbalancer_id.tooltip") }}></span>}
>
<Input placeholder={t("workflow_node.deploy.form.volcengine_alb_loadbalancer_id.placeholder")} />
</Form.Item>
</Show>
<Show when={fieldResourceType === RESOURCE_TYPE_LISTENER}>
<Form.Item
name="listenerId"
label={t("workflow_node.deploy.form.volcengine_alb_listener_id.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.volcengine_alb_listener_id.tooltip") }}></span>}
>
<Input placeholder={t("workflow_node.deploy.form.volcengine_alb_listener_id.placeholder")} />
</Form.Item>
</Show>
<Show when={fieldResourceType === RESOURCE_TYPE_LOADBALANCER || fieldResourceType === RESOURCE_TYPE_LISTENER}>
<Form.Item
name="domain"
label={t("workflow_node.deploy.form.volcengine_alb_snidomain.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.volcengine_alb_snidomain.tooltip") }}></span>}
>
<Input placeholder={t("workflow_node.deploy.form.volcengine_alb_snidomain.placeholder")} />
</Form.Item>
</Show>
</Form>
);
};
export default DeployNodeConfigFormVolcEngineALBConfig;

View File

@@ -10,7 +10,6 @@ type DeployNodeConfigFormVolcEngineCLBConfigFieldValues = Nullish<{
region: string;
loadbalancerId?: string;
listenerId?: string;
domain?: string;
}>;
export type DeployNodeConfigFormVolcEngineCLBConfigProps = {
@@ -21,6 +20,7 @@ export type DeployNodeConfigFormVolcEngineCLBConfigProps = {
onValuesChange?: (values: DeployNodeConfigFormVolcEngineCLBConfigFieldValues) => void;
};
const RESOURCE_TYPE_LOADBALANCER = "loadbalancer" as const;
const RESOURCE_TYPE_LISTENER = "listener" as const;
const initFormModel = (): DeployNodeConfigFormVolcEngineCLBConfigFieldValues => {
@@ -39,11 +39,22 @@ const DeployNodeConfigFormVolcEngineCLBConfig = ({
const { t } = useTranslation();
const formSchema = z.object({
resourceType: z.literal(RESOURCE_TYPE_LISTENER, { message: t("workflow_node.deploy.form.volcengine_clb_resource_type.placeholder") }),
resourceType: z.union([z.literal(RESOURCE_TYPE_LOADBALANCER), z.literal(RESOURCE_TYPE_LISTENER)], {
message: t("workflow_node.deploy.form.volcengine_clb_resource_type.placeholder"),
}),
region: z
.string({ message: t("workflow_node.deploy.form.volcengine_clb_region.placeholder") })
.nonempty(t("workflow_node.deploy.form.volcengine_clb_region.placeholder"))
.trim(),
loadbalancerId: z
.string()
.max(64, t("common.errmsg.string_max", { max: 64 }))
.trim()
.nullish()
.refine(
(v) => ![RESOURCE_TYPE_LOADBALANCER].includes(fieldResourceType) || !!v?.trim(),
t("workflow_node.deploy.form.volcengine_clb_loadbalancer_id.placeholder")
),
listenerId: z
.string()
.max(64, t("common.errmsg.string_max", { max: 64 }))
@@ -73,6 +84,9 @@ const DeployNodeConfigFormVolcEngineCLBConfig = ({
>
<Form.Item name="resourceType" label={t("workflow_node.deploy.form.volcengine_clb_resource_type.label")} rules={[formRule]}>
<Select placeholder={t("workflow_node.deploy.form.volcengine_clb_resource_type.placeholder")}>
<Select.Option key={RESOURCE_TYPE_LOADBALANCER} value={RESOURCE_TYPE_LOADBALANCER}>
{t("workflow_node.deploy.form.volcengine_clb_resource_type.option.loadbalancer.label")}
</Select.Option>
<Select.Option key={RESOURCE_TYPE_LISTENER} value={RESOURCE_TYPE_LISTENER}>
{t("workflow_node.deploy.form.volcengine_clb_resource_type.option.listener.label")}
</Select.Option>
@@ -88,6 +102,17 @@ const DeployNodeConfigFormVolcEngineCLBConfig = ({
<Input placeholder={t("workflow_node.deploy.form.volcengine_clb_region.placeholder")} />
</Form.Item>
<Show when={fieldResourceType === RESOURCE_TYPE_LOADBALANCER}>
<Form.Item
name="listenerId"
label={t("workflow_node.deploy.form.volcengine_clb_loadbalancer_id.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("workflow_node.deploy.form.volcengine_clb_loadbalancer_id.tooltip") }}></span>}
>
<Input placeholder={t("workflow_node.deploy.form.volcengine_clb_loadbalancer_id.placeholder")} />
</Form.Item>
</Show>
<Show when={fieldResourceType === RESOURCE_TYPE_LISTENER}>
<Form.Item
name="listenerId"

View File

@@ -20,6 +20,7 @@ export interface AccessModel extends BaseModel {
| AccessConfigForCloudflare
| AccessConfigForClouDNS
| AccessConfigForCMCCCloud
| AccessConfigForDeSEC
| AccessConfigForDNSLA
| AccessConfigForDogeCloud
| AccessConfigForDynv6
@@ -34,6 +35,7 @@ export interface AccessModel extends BaseModel {
| AccessConfigForNamecheap
| AccessConfigForNameDotCom
| AccessConfigForNameSilo
| AccessConfigForPorkbun
| AccessConfigForPowerDNS
| AccessConfigForQiniu
| AccessConfigForRainYun
@@ -42,6 +44,7 @@ export interface AccessModel extends BaseModel {
| AccessConfigForTencentCloud
| AccessConfigForUCloud
| AccessConfigForUpyun
| AccessConfigForVercel
| AccessConfigForVolcEngine
| AccessConfigForWebhook
| AccessConfigForWestcn
@@ -123,6 +126,10 @@ export type AccessConfigForCMCCCloud = {
accessKeySecret: string;
};
export type AccessConfigForDeSEC = {
token: string;
};
export type AccessConfigForDNSLA = {
apiId: string;
apiSecret: string;
@@ -190,6 +197,11 @@ export type AccessConfigForNS1 = {
apiKey: string;
};
export type AccessConfigForPorkbun = {
apiKey: string;
secretApiKey: string;
};
export type AccessConfigForPowerDNS = {
apiUrl: string;
apiKey: string;
@@ -235,6 +247,11 @@ export type AccessConfigForUpyun = {
password: string;
};
export type AccessConfigForVercel = {
apiAccessToken: string;
teamId?: string;
};
export type AccessConfigForVolcEngine = {
accessKeyId: string;
secretAccessKey: string;

View File

@@ -18,6 +18,7 @@ export const ACCESS_PROVIDERS = Object.freeze({
CLOUDFLARE: "cloudflare",
CLOUDNS: "cloudns",
CMCCCLOUD: "cmcccloud",
DESEC: "desec",
DNSLA: "dnsla",
DOGECLOUD: "dogecloud",
DYNV6: "dynv6",
@@ -33,6 +34,7 @@ export const ACCESS_PROVIDERS = Object.freeze({
NAMEDOTCOM: "namedotcom",
NAMESILO: "namesilo",
NS1: "ns1",
PORKBUN: "porkbun",
POWERDNS: "powerdns",
QINIU: "qiniu",
RAINYUN: "rainyun",
@@ -41,6 +43,7 @@ export const ACCESS_PROVIDERS = Object.freeze({
TENCENTCLOUD: "tencentcloud",
UCLOUD: "ucloud",
UPYUN: "upyun",
VERCEL: "vercel",
VOLCENGINE: "volcengine",
WEBHOOK: "webhook",
WESTCN: "westcn",
@@ -97,6 +100,7 @@ export const accessProvidersMap: Map<AccessProvider["type"] | string, AccessProv
[ACCESS_PROVIDERS.CLOUDFLARE, "provider.cloudflare", "/imgs/providers/cloudflare.svg", [ACCESS_USAGES.APPLY]],
[ACCESS_PROVIDERS.CLOUDNS, "provider.cloudns", "/imgs/providers/cloudns.png", [ACCESS_USAGES.APPLY]],
[ACCESS_PROVIDERS.DESEC, "provider.desec", "/imgs/providers/desec.svg", [ACCESS_USAGES.APPLY]],
[ACCESS_PROVIDERS.DNSLA, "provider.dnsla", "/imgs/providers/dnsla.svg", [ACCESS_USAGES.APPLY]],
[ACCESS_PROVIDERS.DYNV6, "provider.dynv6", "/imgs/providers/dynv6.svg", [ACCESS_USAGES.APPLY]],
[ACCESS_PROVIDERS.GNAME, "provider.gname", "/imgs/providers/gname.png", [ACCESS_USAGES.APPLY]],
@@ -105,6 +109,8 @@ export const accessProvidersMap: Map<AccessProvider["type"] | string, AccessProv
[ACCESS_PROVIDERS.NAMEDOTCOM, "provider.namedotcom", "/imgs/providers/namedotcom.svg", [ACCESS_USAGES.APPLY]],
[ACCESS_PROVIDERS.NAMESILO, "provider.namesilo", "/imgs/providers/namesilo.svg", [ACCESS_USAGES.APPLY]],
[ACCESS_PROVIDERS.NS1, "provider.ns1", "/imgs/providers/ns1.svg", [ACCESS_USAGES.APPLY]],
[ACCESS_PROVIDERS.PORKBUN, "provider.porkbun", "/imgs/providers/porkbun.svg", [ACCESS_USAGES.APPLY]],
[ACCESS_PROVIDERS.VERCEL, "provider.vercel", "/imgs/providers/vercel.svg", [ACCESS_USAGES.APPLY]],
[ACCESS_PROVIDERS.CMCCCLOUD, "provider.cmcccloud", "/imgs/providers/cmcccloud.svg", [ACCESS_USAGES.APPLY]],
[ACCESS_PROVIDERS.RAINYUN, "provider.rainyun", "/imgs/providers/rainyun.svg", [ACCESS_USAGES.APPLY]],
[ACCESS_PROVIDERS.WESTCN, "provider.westcn", "/imgs/providers/westcn.svg", [ACCESS_USAGES.APPLY]],
@@ -140,6 +146,7 @@ export const APPLY_DNS_PROVIDERS = Object.freeze({
CLOUDFLARE: `${ACCESS_PROVIDERS.CLOUDFLARE}`,
CLOUDNS: `${ACCESS_PROVIDERS.CLOUDNS}`,
CMCCCLOUD: `${ACCESS_PROVIDERS.CMCCCLOUD}`,
DESEC: `${ACCESS_PROVIDERS.DESEC}`,
DNSLA: `${ACCESS_PROVIDERS.DNSLA}`,
DYNV6: `${ACCESS_PROVIDERS.DYNV6}`,
GCORE: `${ACCESS_PROVIDERS.GCORE}`,
@@ -153,10 +160,12 @@ export const APPLY_DNS_PROVIDERS = Object.freeze({
NAMEDOTCOM: `${ACCESS_PROVIDERS.NAMEDOTCOM}`,
NAMESILO: `${ACCESS_PROVIDERS.NAMESILO}`,
NS1: `${ACCESS_PROVIDERS.NS1}`,
PORKBUN: `${ACCESS_PROVIDERS.PORKBUN}`,
POWERDNS: `${ACCESS_PROVIDERS.POWERDNS}`,
RAINYUN: `${ACCESS_PROVIDERS.RAINYUN}`,
TENCENTCLOUD: `${ACCESS_PROVIDERS.TENCENTCLOUD}`, // 兼容旧值,等同于 `TENCENTCLOUD_DNS`
TENCENTCLOUD_DNS: `${ACCESS_PROVIDERS.TENCENTCLOUD}-dns`,
VERCEL: `${ACCESS_PROVIDERS.VERCEL}`,
VOLCENGINE: `${ACCESS_PROVIDERS.VOLCENGINE}`, // 兼容旧值,等同于 `VOLCENGINE_DNS`
VOLCENGINE_DNS: `${ACCESS_PROVIDERS.VOLCENGINE}-dns`,
WESTCN: `${ACCESS_PROVIDERS.WESTCN}`,
@@ -187,6 +196,7 @@ export const applyDNSProvidersMap: Map<ApplyDNSProvider["type"] | string, ApplyD
[APPLY_DNS_PROVIDERS.AZURE_DNS, "provider.azure.dns"],
[APPLY_DNS_PROVIDERS.CLOUDFLARE, "provider.cloudflare"],
[APPLY_DNS_PROVIDERS.CLOUDNS, "provider.cloudns"],
[APPLY_DNS_PROVIDERS.DESEC, "provider.desec"],
[APPLY_DNS_PROVIDERS.DNSLA, "provider.dnsla"],
[APPLY_DNS_PROVIDERS.DYNV6, "provider.dynv6"],
[APPLY_DNS_PROVIDERS.GCORE, "provider.gcore"],
@@ -196,6 +206,8 @@ export const applyDNSProvidersMap: Map<ApplyDNSProvider["type"] | string, ApplyD
[APPLY_DNS_PROVIDERS.NAMEDOTCOM, "provider.namedotcom"],
[APPLY_DNS_PROVIDERS.NAMESILO, "provider.namesilo"],
[APPLY_DNS_PROVIDERS.NS1, "provider.ns1"],
[APPLY_DNS_PROVIDERS.PORKBUN, "provider.porkbun"],
[APPLY_DNS_PROVIDERS.VERCEL, "provider.vercel"],
[APPLY_DNS_PROVIDERS.CMCCCLOUD, "provider.cmcc"],
[APPLY_DNS_PROVIDERS.RAINYUN, "provider.rainyun"],
[APPLY_DNS_PROVIDERS.WESTCN, "provider.westcn"],
@@ -276,6 +288,7 @@ export const DEPLOY_PROVIDERS = Object.freeze({
UCLOUD_US3: `${ACCESS_PROVIDERS.UCLOUD}-us3`,
UPYUN_CDN: `${ACCESS_PROVIDERS.UPYUN}-cdn`,
UPYUN_FILE: `${ACCESS_PROVIDERS.UPYUN}-file`,
VOLCENGINE_ALB: `${ACCESS_PROVIDERS.VOLCENGINE}-alb`,
VOLCENGINE_CDN: `${ACCESS_PROVIDERS.VOLCENGINE}-cdn`,
VOLCENGINE_CLB: `${ACCESS_PROVIDERS.VOLCENGINE}-clb`,
VOLCENGINE_DCDN: `${ACCESS_PROVIDERS.VOLCENGINE}-dcdn`,
@@ -351,6 +364,7 @@ export const deployProvidersMap: Map<DeployProvider["type"] | string, DeployProv
[DEPLOY_PROVIDERS.VOLCENGINE_CDN, "provider.volcengine.cdn", DEPLOY_CATEGORIES.CDN],
[DEPLOY_PROVIDERS.VOLCENGINE_DCDN, "provider.volcengine.dcdn", DEPLOY_CATEGORIES.CDN],
[DEPLOY_PROVIDERS.VOLCENGINE_CLB, "provider.volcengine.clb", DEPLOY_CATEGORIES.LOADBALANCE],
[DEPLOY_PROVIDERS.VOLCENGINE_ALB, "provider.volcengine.alb", DEPLOY_CATEGORIES.LOADBALANCE],
[DEPLOY_PROVIDERS.VOLCENGINE_IMAGEX, "provider.volcengine.imagex", DEPLOY_CATEGORIES.STORAGE],
[DEPLOY_PROVIDERS.VOLCENGINE_LIVE, "provider.volcengine.live", DEPLOY_CATEGORIES.AV],
[DEPLOY_PROVIDERS.JDCLOUD_ALB, "provider.jdcloud.alb", DEPLOY_CATEGORIES.LOADBALANCE],

View File

@@ -126,6 +126,9 @@
"access.form.cmcccloud_access_key_secret.label": "CMCC ECloud AccessKeySecret",
"access.form.cmcccloud_access_key_secret.placeholder": "Please enter CMCC ECloud AccessKeySecret",
"access.form.cmcccloud_access_key_secret.tooltip": "For more information, see <a href=\"https://ecloud.10086.cn/op-help-center/doc/article/49739\" target=\"_blank\">https://ecloud.10086.cn/op-help-center/doc/article/49739</a>",
"access.form.desec_token.label": "deSEC token",
"access.form.desec_token.placeholder": "Please enter deSEC token",
"access.form.desec_token.tooltip": "For more information, see <a href=\"https://desec.readthedocs.io/en/latest/auth/tokens.html#manage-tokens\" target=\"_blank\">https://desec.readthedocs.io/en/latest/auth/tokens.html</a>",
"access.form.dnsla_api_id.label": "DNS.LA API ID",
"access.form.dnsla_api_id.placeholder": "Please enter DNS.LA API ID",
"access.form.dnsla_api_id.tooltip": "For more information, see <a href=\"https://www.dns.la/docs/ApiDoc\" target=\"_blank\">https://www.dns.la/docs/ApiDoc</a>",
@@ -196,6 +199,12 @@
"access.form.ns1_api_key.label": "NS1 API key",
"access.form.ns1_api_key.placeholder": "Please enter NS1 API key",
"access.form.ns1_api_key.tooltip": "For more information, see <a href=\"https://www.ibm.com/docs/en/ns1-connect?topic=introduction-using-api\" target=\"_blank\">https://www.ibm.com/docs/en/ns1-connect?topic=introduction-using-api</a>",
"access.form.porkbun_api_key.label": "Porkbun API key",
"access.form.porkbun_api_key.placeholder": "Please enter Porkbun API key",
"access.form.porkbun_api_key.tooltip": "For more information, see <a href=\"https://porkbun.com/api/json/v3/documentation#Authentication\" target=\"_blank\">https://porkbun.com/api/json/v3/documentation</a>",
"access.form.porkbun_secret_api_key.label": "Porkbun secret API key",
"access.form.porkbun_secret_api_key.placeholder": "Please enter Porkbun secret API key",
"access.form.porkbun_secret_api_key.tooltip": "For more information, see <a href=\"https://porkbun.com/api/json/v3/documentation#Authentication\" target=\"_blank\">https://porkbun.com/api/json/v3/documentation</a>",
"access.form.powerdns_api_url.label": "PowerDNS API URL",
"access.form.powerdns_api_url.placeholder": "Please enter PowerDNS API URL",
"access.form.powerdns_api_url.tooltip": "For more information, see <a href=\"https://doc.powerdns.com/authoritative/http-api/index.html#endpoints-and-objects-in-the-api\" target=\"_blank\">https://doc.powerdns.com/authoritative/http-api/index.html#endpoints-and-objects-in-the-api</a>",
@@ -252,6 +261,12 @@
"access.form.ucloud_project_id.label": "UCloud project ID (Optional)",
"access.form.ucloud_project_id.placeholder": "Please enter UCloud project ID",
"access.form.ucloud_project_id.tooltip": "For more information, see <a href=\"https://console.ucloud-global.com/uaccount/iam/project_manage\" target=\"_blank\">https://console.ucloud-global.com/uaccount/iam/project_manage</a>",
"access.form.vercel_api_access_token.label": "Vercel API access token",
"access.form.vercel_api_access_token.placeholder": "Please enter Vercel API access token",
"access.form.vercel_api_access_token.tooltip": "For more information, see <a href=\"https://vercel.com/guides/how-do-i-use-a-vercel-api-access-token\" target=\"_blank\">https://vercel.com/guides/how-do-i-use-a-vercel-api-access-token</a>",
"access.form.vercel_team_id.label": "Vercel team ID (Optional)",
"access.form.vercel_team_id.placeholder": "Please enter Vercel team ID",
"access.form.vercel_team_id.tooltip": "For more information, see <a href=\"https://vercel.com/docs/accounts#find-your-team-id\" target=\"_blank\">https://vercel.com/docs/accounts#find-your-team-id</a>",
"access.form.volcengine_access_key_id.label": "VolcEngine AccessKeyId",
"access.form.volcengine_access_key_id.placeholder": "Please enter VolcEngine AccessKeyId",
"access.form.volcengine_access_key_id.tooltip": "For more information, see <a href=\"https://www.volcengine.com/docs/6291/216571\" target=\"_blank\">https://www.volcengine.com/docs/6291/216571</a>",

View File

@@ -44,6 +44,7 @@
"provider.cmcccloud": "China Mobile Cloud (ECloud)",
"provider.ctcccloud": "China Telecom Cloud (State Cloud)",
"provider.cucccloud": "China Unicom Cloud",
"provider.desec": "deSEC",
"provider.dnsla": "DNS.LA",
"provider.dogecloud": "Doge Cloud",
"provider.dogecloud.cdn": "Doge Cloud - CDN (Content Delivery Network)",
@@ -75,6 +76,7 @@
"provider.namedotcom": "Name.com",
"provider.namesilo": "NameSilo",
"provider.ns1": "NS1 (IBM NS1 Connect)",
"provider.porkbun": "Porkbun",
"provider.powerdns": "PowerDNS",
"provider.qiniu": "Qiniu",
"provider.qiniu.cdn": "Qiniu - CDN (Content Delivery Network)",
@@ -102,7 +104,9 @@
"provider.upyun": "UPYUN",
"provider.upyun.cdn": "UPYUN - CDN (Content Delivery Network)",
"provider.upyun.file": "UPYUN - File Storage",
"provider.vercel": "Vercel",
"provider.volcengine": "Volcengine",
"provider.volcengine.alb": "Volcengine - ALB (Application Load Balancer)",
"provider.volcengine.cdn": "Volcengine - CDN (Content Delivery Network)",
"provider.volcengine.clb": "Volcengine - CLB (Cloud Load Balancer)",
"provider.volcengine.dcdn": "Volcengine - DCDN (Dynamic Content Delivery Network)",

View File

@@ -528,15 +528,35 @@
"workflow_node.deploy.form.upyun_file_domain.label": "UPYUN bucket domain",
"workflow_node.deploy.form.upyun_file_domain.placeholder": "Please enter UPYUN bucket domain name",
"workflow_node.deploy.form.upyun_file_domain.tooltip": "For more information, see <a href=\"https://console.upyun.com/services/file/\" target=\"_blank\">https://console.upyun.com/services/file/</a>",
"workflow_node.deploy.form.volcengine_alb_resource_type.label": "Resource type",
"workflow_node.deploy.form.volcengine_alb_resource_type.placeholder": "Please select resource type",
"workflow_node.deploy.form.volcengine_alb_resource_type.option.loadbalancer.label": "ALB load balancer",
"workflow_node.deploy.form.volcengine_alb_resource_type.option.listener.label": "ALB listener",
"workflow_node.deploy.form.volcengine_alb_region.label": "VolcEngine ALB region",
"workflow_node.deploy.form.volcengine_alb_region.placeholder": "Please enter VolcEngine ALB region (e.g. cn-beijing)",
"workflow_node.deploy.form.volcengine_alb_region.tooltip": "For more information, see <a href=\"https://www.volcengine.com/docs/6767/127501\" target=\"_blank\">https://www.volcengine.com/docs/6767/127501</a>",
"workflow_node.deploy.form.volcengine_alb_loadbalancer_id.label": "VolcEngine ALB load balancer ID",
"workflow_node.deploy.form.volcengine_alb_loadbalancer_id.placeholder": "Please enter VolcEngine ALB load balancer ID",
"workflow_node.deploy.form.volcengine_alb_loadbalancer_id.tooltip": "For more information, see <a href=\"https://console.volcengine.com/alb\" target=\"_blank\">https://console.volcengine.com/alb</a>",
"workflow_node.deploy.form.volcengine_alb_listener_id.label": "VolcEngine ALB listener ID",
"workflow_node.deploy.form.volcengine_alb_listener_id.placeholder": "Please enter VolcEngine ALB listener ID",
"workflow_node.deploy.form.volcengine_alb_listener_id.tooltip": "For more information, see <a href=\"https://console.volcengine.com/alb\" target=\"_blank\">https://console.volcengine.com/alb</a>",
"workflow_node.deploy.form.volcengine_clb_snidomain.label": "VolcEngine CLB SNI domain (Optional)",
"workflow_node.deploy.form.volcengine_clb_snidomain.placeholder": "Please enter VolcEngine CLB SNI domain name",
"workflow_node.deploy.form.volcengine_clb_snidomain.tooltip": "For more information, see <a href=\"https://console.volcengine.com/alb\" target=\"_blank\">https://console.volcengine.com/alb</a>",
"workflow_node.deploy.form.volcengine_cdn_domain.label": "VolcEngine CDN domain",
"workflow_node.deploy.form.volcengine_cdn_domain.placeholder": "Please enter VolcEngine CDN domain name",
"workflow_node.deploy.form.volcengine_cdn_domain.tooltip": "For more information, see <a href=\"https://console.volcengine.com/cdn/homepage\" target=\"_blank\">https://console.volcengine.com/cdn/homepage</a>",
"workflow_node.deploy.form.volcengine_clb_resource_type.label": "Resource type",
"workflow_node.deploy.form.volcengine_clb_resource_type.placeholder": "Please select resource type",
"workflow_node.deploy.form.volcengine_clb_resource_type.option.loadbalancer.label": "CLB load balancer",
"workflow_node.deploy.form.volcengine_clb_resource_type.option.listener.label": "CLB listener",
"workflow_node.deploy.form.volcengine_clb_region.label": "VolcEngine CLB region",
"workflow_node.deploy.form.volcengine_clb_region.placeholder": "Please enter VolcEngine CLB region (e.g. cn-beijing)",
"workflow_node.deploy.form.volcengine_clb_region.tooltip": "For more information, see <a href=\"https://www.volcengine.com/docs/6406/74892\" target=\"_blank\">https://www.volcengine.com/docs/6406/74892</a>",
"workflow_node.deploy.form.volcengine_clb_loadbalancer_id.label": "VolcEngine CLB load balancer ID",
"workflow_node.deploy.form.volcengine_clb_loadbalancer_id.placeholder": "Please enter VolcEngine CLB load balancer ID",
"workflow_node.deploy.form.volcengine_clb_loadbalancer_id.tooltip": "For more information, see <a href=\"https://console.volcengine.com/clb/LoadBalancer\" target=\"_blank\">https://console.volcengine.com/clb/LoadBalancer</a>",
"workflow_node.deploy.form.volcengine_clb_listener_id.label": "VolcEngine CLB listener ID",
"workflow_node.deploy.form.volcengine_clb_listener_id.placeholder": "Please enter VolcEngine CLB listener ID",
"workflow_node.deploy.form.volcengine_clb_listener_id.tooltip": "For more information, see <a href=\"https://console.volcengine.com/clb/LoadBalancer\" target=\"_blank\">https://console.volcengine.com/clb/LoadBalancer</a>",

View File

@@ -120,6 +120,9 @@
"access.form.cmcccloud_access_key_secret.label": "移动云 AccessKeySecret",
"access.form.cmcccloud_access_key_secret.placeholder": "请输入移动云 AccessKeySecret",
"access.form.cmcccloud_access_key_secret.tooltip": "这是什么?请参阅 <a href=\"https://ecloud.10086.cn/op-help-center/doc/article/49739\" target=\"_blank\">https://ecloud.10086.cn/op-help-center/doc/article/49739</a>",
"access.form.desec_token.label": "deSEC Token",
"access.form.desec_token.placeholder": "请输入 deSEC Token",
"access.form.desec_token.tooltip": "这是什么?请参阅 <a href=\"https://desec.readthedocs.io/en/latest/auth/tokens.html#manage-tokens\" target=\"_blank\">https://desec.readthedocs.io/en/latest/auth/tokens.html</a>",
"access.form.dnsla_api_id.label": "DNS.LA API ID",
"access.form.dnsla_api_id.placeholder": "请输入 DNS.LA API ID",
"access.form.dnsla_api_id.tooltip": "这是什么?请参阅 <a href=\"https://www.dns.la/docs/ApiDoc\" target=\"_blank\">https://www.dns.la/docs/ApiDoc</a>",
@@ -190,6 +193,12 @@
"access.form.ns1_api_key.label": "NS1 API Key",
"access.form.ns1_api_key.placeholder": "请输入 NS1 API Key",
"access.form.ns1_api_key.tooltip": "这是什么?请参阅 <a href=\"https://www.ibm.com/docs/zh/ns1-connect?topic=introduction-using-api\" target=\"_blank\">https://www.ibm.com/docs/zh/ns1-connect?topic=introduction-using-api</a>",
"access.form.porkbun_api_key.label": "Porkbun API Key",
"access.form.porkbun_api_key.placeholder": "请输入 Porkbun API Key",
"access.form.porkbun_api_key.tooltip": "这是什么?请参阅 <a href=\"https://porkbun.com/api/json/v3/documentation#Authentication\" target=\"_blank\">https://porkbun.com/api/json/v3/documentation</a>",
"access.form.porkbun_secret_api_key.label": "Porkbun Secret API Key",
"access.form.porkbun_secret_api_key.placeholder": "请输入 Porkbun Secret API Key",
"access.form.porkbun_secret_api_key.tooltip": "这是什么?请参阅 <a href=\"https://porkbun.com/api/json/v3/documentation#Authentication\" target=\"_blank\">https://porkbun.com/api/json/v3/documentation</a>",
"access.form.powerdns_api_url.label": "PowerDNS API URL",
"access.form.powerdns_api_url.placeholder": "请输入 PowerDNS API URL",
"access.form.powerdns_api_url.tooltip": "这是什么?请参阅 <a href=\"https://doc.powerdns.com/authoritative/http-api/index.html#endpoints-and-objects-in-the-api\" target=\"_blank\">https://doc.powerdns.com/authoritative/http-api/index.html#endpoints-and-objects-in-the-api</a>",
@@ -252,6 +261,12 @@
"access.form.upyun_password.label": "又拍云子账号密码",
"access.form.upyun_password.placeholder": "请输入又拍云子账号密码",
"access.form.upyun_password.tooltip": "这是什么?请参阅 <a href=\"https://console.upyun.com/account/subaccount/\" target=\"_blank\">https://console.upyun.com/account/subaccount/</a><br><br>请关闭该账号的二次登录验证。",
"access.form.vercel_api_access_token.label": "Vercel API Access Token",
"access.form.vercel_api_access_token.placeholder": "请输入 Vercel API Access Token",
"access.form.vercel_api_access_token.tooltip": "这是什么?请参阅 <a href=\"https://vercel.com/guides/how-do-i-use-a-vercel-api-access-token\" target=\"_blank\">https://vercel.com/guides/how-do-i-use-a-vercel-api-access-token</a>",
"access.form.vercel_team_id.label": "Vercel 团队 ID可选",
"access.form.vercel_team_id.placeholder": "请输入 Vercel 团队 ID",
"access.form.vercel_team_id.tooltip": "这是什么?请参阅 <a href=\"https://vercel.com/docs/accounts#find-your-team-id\" target=\"_blank\">https://vercel.com/docs/accounts#find-your-team-id</a>",
"access.form.volcengine_access_key_id.label": "火山引擎 AccessKeyId",
"access.form.volcengine_access_key_id.placeholder": "请输入火山引擎 AccessKeyId",
"access.form.volcengine_access_key_id.tooltip": "这是什么?请参阅 <a href=\"https://www.volcengine.com/docs/6291/216571\" target=\"_blank\">https://www.volcengine.com/docs/6291/216571</a>",

View File

@@ -44,6 +44,7 @@
"provider.cmcccloud": "移动云",
"provider.ctcccloud": "联通云",
"provider.cucccloud": "天翼云",
"provider.desec": "deSEC",
"provider.dnsla": "DNS.LA",
"provider.dogecloud": "多吉云",
"provider.dogecloud.cdn": "多吉云 - 内容分发网络 CDN",
@@ -75,6 +76,7 @@
"provider.namedotcom": "Name.com",
"provider.namesilo": "NameSilo",
"provider.ns1": "NS1IBM NS1 Connect",
"provider.porkbun": "Porkbun",
"provider.powerdns": "PowerDNS",
"provider.qiniu": "七牛云",
"provider.qiniu.cdn": "七牛云 - 内容分发网络 CDN",
@@ -102,7 +104,9 @@
"provider.upyun": "又拍云",
"provider.upyun.cdn": "又拍云 - 云分发 CDN",
"provider.upyun.file": "又拍云 - 云存储",
"provider.vercel": "Vercel",
"provider.volcengine": "火山引擎",
"provider.volcengine.alb": "火山引擎 - 应用型负载均衡 ALB",
"provider.volcengine.cdn": "火山引擎 - 内容分发网络 CDN",
"provider.volcengine.clb": "火山引擎 - 负载均衡 CLB",
"provider.volcengine.dcdn": "火山引擎 - 全站加速 DCDN",

View File

@@ -163,7 +163,7 @@
"workflow_node.deploy.form.aliyun_fc_service_version.label": "阿里云 FC 服务版本",
"workflow_node.deploy.form.aliyun_fc_service_version.placeholder": "请选择阿里云 FC 服务版本",
"workflow_node.deploy.form.aliyun_fc_domain.label": "阿里云 FC 自定义域名",
"workflow_node.deploy.form.aliyun_fc_domain.placeholder": "请输入阿里云 FC 自定义域名",
"workflow_node.deploy.form.aliyun_fc_domain.placeholder": "请输入阿里云 FC 自定义域名(支持泛域名)",
"workflow_node.deploy.form.aliyun_fc_domain.tooltip": "这是什么?请参阅 see <a href=\"https://fcnext.console.aliyun.com/\" target=\"_blank\">https://fcnext.console.aliyun.com/</a>",
"workflow_node.deploy.form.aliyun_live_region.label": "阿里云视频直播服务地域",
"workflow_node.deploy.form.aliyun_live_region.placeholder": "请输入阿里云视频直播服务地域例如cn-hangzhou",
@@ -528,15 +528,35 @@
"workflow_node.deploy.form.upyun_file_domain.label": "又拍云云存储加速域名",
"workflow_node.deploy.form.upyun_file_domain.placeholder": "请输入又拍云云存储加速域名",
"workflow_node.deploy.form.upyun_file_domain.tooltip": "这是什么?请参阅 <a href=\"https://console.upyun.com/services/file/\" target=\"_blank\">https://console.upyun.com/services/file/</a>",
"workflow_node.deploy.form.volcengine_alb_resource_type.label": "证书替换方式",
"workflow_node.deploy.form.volcengine_alb_resource_type.placeholder": "请选择证书替换方式",
"workflow_node.deploy.form.volcengine_alb_resource_type.option.loadbalancer.label": "替换指定负载均衡器下的全部 HTTPS 监听的证书",
"workflow_node.deploy.form.volcengine_alb_resource_type.option.listener.label": "替换指定监听器的证书",
"workflow_node.deploy.form.volcengine_alb_region.label": "火山引擎 ALB 服务地域",
"workflow_node.deploy.form.volcengine_alb_region.placeholder": "请输入火山引擎 ALB 服务地域例如cn-beijing",
"workflow_node.deploy.form.volcengine_alb_region.tooltip": "这是什么?请参阅 <a href=\"https://www.volcengine.com/docs/6767/127501\" target=\"_blank\">https://www.volcengine.com/docs/6767/127501</a>",
"workflow_node.deploy.form.volcengine_alb_loadbalancer_id.label": "火山引擎 ALB 负载均衡器 ID",
"workflow_node.deploy.form.volcengine_alb_loadbalancer_id.placeholder": "请输入火山引擎 ALB 负载均衡器 ID",
"workflow_node.deploy.form.volcengine_alb_loadbalancer_id.tooltip": "这是什么?请参阅 <a href=\"https://console.volcengine.com/alb\" target=\"_blank\">https://console.volcengine.com/alb</a>",
"workflow_node.deploy.form.volcengine_alb_listener_id.label": "火山引擎 ALB 监听器 ID",
"workflow_node.deploy.form.volcengine_alb_listener_id.placeholder": "请输入火山引擎 ALB 监听器 ID",
"workflow_node.deploy.form.volcengine_alb_listener_id.tooltip": "这是什么?请参阅 <a href=\"https://console.volcengine.com/alb\" target=\"_blank\">https://console.volcengine.com/alb</a>",
"workflow_node.deploy.form.volcengine_clb_snidomain.label": "火山引擎 ALB 扩展域名(可选)",
"workflow_node.deploy.form.volcengine_clb_snidomain.placeholder": "请输入火山引擎 ALB 扩展域名(支持泛域名)",
"workflow_node.deploy.form.volcengine_clb_snidomain.tooltip": "这是什么?请参阅 <a href=\"https://console.volcengine.com/alb\" target=\"_blank\">https://console.volcengine.com/alb</a><br><br>不填写时,将替换监听器的默认证书。",
"workflow_node.deploy.form.volcengine_cdn_domain.label": "火山引擎 CDN 加速域名",
"workflow_node.deploy.form.volcengine_cdn_domain.placeholder": "请输入火山引擎 CDN 加速域名(支持泛域名)",
"workflow_node.deploy.form.volcengine_cdn_domain.tooltip": "这是什么?请参阅 <a href=\"https://console.volcengine.com/cdn/homepage\" target=\"_blank\">https://console.volcengine.com/cdn/homepage</a>",
"workflow_node.deploy.form.volcengine_clb_resource_type.label": "证书替换方式",
"workflow_node.deploy.form.volcengine_clb_resource_type.placeholder": "请选择证书替换方式",
"workflow_node.deploy.form.volcengine_clb_resource_type.option.loadbalancer.label": "替换指定负载均衡器下的全部 HTTPS 监听的证书",
"workflow_node.deploy.form.volcengine_clb_resource_type.option.listener.label": "替换指定监听器的证书",
"workflow_node.deploy.form.volcengine_clb_region.label": "火山引擎 CLB 服务地域",
"workflow_node.deploy.form.volcengine_clb_region.placeholder": "请输入火山引擎 CLB 服务地域例如cn-beijing",
"workflow_node.deploy.form.volcengine_clb_region.tooltip": "这是什么?请参阅 <a href=\"https://www.volcengine.com/docs/6406/74892\" target=\"_blank\">https://www.volcengine.com/docs/6406/74892</a>",
"workflow_node.deploy.form.volcengine_clb_loadbalancer_id.label": "火山引擎 CLB 负载均衡器 ID",
"workflow_node.deploy.form.volcengine_clb_loadbalancer_id.placeholder": "请输入火山引擎 CLB 负载均衡器 ID",
"workflow_node.deploy.form.volcengine_clb_loadbalancer_id.tooltip": "这是什么?请参阅 <a href=\"https://console.volcengine.com/clb/LoadBalancer\" target=\"_blank\">https://console.volcengine.com/clb/LoadBalancer</a>",
"workflow_node.deploy.form.volcengine_clb_listener_id.label": "火山引擎 CLB 监听器 ID",
"workflow_node.deploy.form.volcengine_clb_listener_id.placeholder": "请输入火山引擎 CLB 监听器 ID",
"workflow_node.deploy.form.volcengine_clb_listener_id.tooltip": "这是什么?请参阅 <a href=\"https://console.volcengine.com/clb/LoadBalancer\" target=\"_blank\">https://console.volcengine.com/clb/LoadBalancer</a>",