Merge branch 'main' of github.com:usual2970/certimate
This commit is contained in:
@@ -6,6 +6,7 @@ export interface AccessModel extends BaseModel {
|
||||
NOTICE: If you add new type, please keep ASCII order.
|
||||
*/ Record<string, unknown> &
|
||||
(
|
||||
| AccessConfigFor1Panel
|
||||
| AccessConfigForACMEHttpReq
|
||||
| AccessConfigForAliyun
|
||||
| AccessConfigForAWS
|
||||
@@ -46,6 +47,12 @@ export interface AccessModel extends BaseModel {
|
||||
}
|
||||
|
||||
// #region AccessConfig
|
||||
export type AccessConfigFor1Panel = {
|
||||
apiUrl: string;
|
||||
apiKey: string;
|
||||
allowInsecureConnections?: boolean;
|
||||
};
|
||||
|
||||
export type AccessConfigForACMEHttpReq = {
|
||||
endpoint: string;
|
||||
mode?: string;
|
||||
@@ -82,6 +89,7 @@ export type AccessConfigForBaishan = {
|
||||
export type AccessConfigForBaotaPanel = {
|
||||
apiUrl: string;
|
||||
apiKey: string;
|
||||
allowInsecureConnections?: boolean;
|
||||
};
|
||||
|
||||
export type AccessConfigForBytePlus = {
|
||||
@@ -193,6 +201,7 @@ export type AccessConfigForRainYun = {
|
||||
export type AccessConfigForSafeLine = {
|
||||
apiUrl: string;
|
||||
apiToken: string;
|
||||
allowInsecureConnections?: boolean;
|
||||
};
|
||||
|
||||
export type AccessConfigForSSH = {
|
||||
@@ -222,6 +231,7 @@ export type AccessConfigForVolcEngine = {
|
||||
|
||||
export type AccessConfigForWebhook = {
|
||||
url: string;
|
||||
allowInsecureConnections?: boolean;
|
||||
};
|
||||
|
||||
export type AccessConfigForWestcn = {
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
NOTICE: If you add new constant, please keep ASCII order.
|
||||
*/
|
||||
export const ACCESS_PROVIDERS = Object.freeze({
|
||||
["1PANEL"]: "1panel",
|
||||
ACMEHTTPREQ: "acmehttpreq",
|
||||
ALIYUN: "aliyun",
|
||||
AWS: "aws",
|
||||
@@ -84,6 +85,7 @@ export const accessProvidersMap: Map<AccessProvider["type"] | string, AccessProv
|
||||
[ACCESS_PROVIDERS.BYTEPLUS, "provider.byteplus", "/imgs/providers/byteplus.svg", [ACCESS_USAGES.DEPLOY]],
|
||||
[ACCESS_PROVIDERS.UCLOUD, "provider.ucloud", "/imgs/providers/ucloud.svg", [ACCESS_USAGES.DEPLOY]],
|
||||
[ACCESS_PROVIDERS.SAFELINE, "provider.safeline", "/imgs/providers/safeline.svg", [ACCESS_USAGES.DEPLOY]],
|
||||
[ACCESS_PROVIDERS["1PANEL"], "provider.1panel", "/imgs/providers/1panel.svg", [ACCESS_USAGES.DEPLOY]],
|
||||
[ACCESS_PROVIDERS.BAOTAPANEL, "provider.baotapanel", "/imgs/providers/baotapanel.svg", [ACCESS_USAGES.DEPLOY]],
|
||||
[ACCESS_PROVIDERS.CACHEFLY, "provider.cachefly", "/imgs/providers/cachefly.png", [ACCESS_USAGES.DEPLOY]],
|
||||
[ACCESS_PROVIDERS.CDNFLY, "provider.cdnfly", "/imgs/providers/cdnfly.png", [ACCESS_USAGES.DEPLOY]],
|
||||
@@ -211,12 +213,15 @@ export const applyDNSProvidersMap: Map<ApplyDNSProvider["type"] | string, ApplyD
|
||||
NOTICE: If you add new constant, please keep ASCII order.
|
||||
*/
|
||||
export const DEPLOY_PROVIDERS = Object.freeze({
|
||||
["1PANEL_CONSOLE"]: `${ACCESS_PROVIDERS["1PANEL"]}-console`,
|
||||
["1PANEL_SITE"]: `${ACCESS_PROVIDERS["1PANEL"]}-site`,
|
||||
ALIYUN_ALB: `${ACCESS_PROVIDERS.ALIYUN}-alb`,
|
||||
ALIYUN_CAS_DEPLOY: `${ACCESS_PROVIDERS.ALIYUN}-casdeploy`,
|
||||
ALIYUN_CDN: `${ACCESS_PROVIDERS.ALIYUN}-cdn`,
|
||||
ALIYUN_CLB: `${ACCESS_PROVIDERS.ALIYUN}-clb`,
|
||||
ALIYUN_DCDN: `${ACCESS_PROVIDERS.ALIYUN}-dcdn`,
|
||||
ALIYUN_ESA: `${ACCESS_PROVIDERS.ALIYUN}-esa`,
|
||||
ALIYUN_FC: `${ACCESS_PROVIDERS.ALIYUN}-fc`,
|
||||
ALIYUN_LIVE: `${ACCESS_PROVIDERS.ALIYUN}-live`,
|
||||
ALIYUN_NLB: `${ACCESS_PROVIDERS.ALIYUN}-nlb`,
|
||||
ALIYUN_OSS: `${ACCESS_PROVIDERS.ALIYUN}-oss`,
|
||||
@@ -252,6 +257,7 @@ export const DEPLOY_PROVIDERS = Object.freeze({
|
||||
TENCENTCLOUD_CSS: `${ACCESS_PROVIDERS.TENCENTCLOUD}-css`,
|
||||
TENCENTCLOUD_ECDN: `${ACCESS_PROVIDERS.TENCENTCLOUD}-ecdn`,
|
||||
TENCENTCLOUD_EO: `${ACCESS_PROVIDERS.TENCENTCLOUD}-eo`,
|
||||
TENCENTCLOUD_SCF: `${ACCESS_PROVIDERS.TENCENTCLOUD}-scf`,
|
||||
TENCENTCLOUD_SSL_DEPLOY: `${ACCESS_PROVIDERS.TENCENTCLOUD}-ssldeploy`,
|
||||
TENCENTCLOUD_VOD: `${ACCESS_PROVIDERS.TENCENTCLOUD}-vod`,
|
||||
TENCENTCLOUD_WAF: `${ACCESS_PROVIDERS.TENCENTCLOUD}-waf`,
|
||||
@@ -275,6 +281,7 @@ export const DEPLOY_CATEGORIES = Object.freeze({
|
||||
LOADBALANCE: "loadbalance",
|
||||
FIREWALL: "firewall",
|
||||
AV: "av",
|
||||
SERVERLESS: "serverless",
|
||||
WEBSITE: "website",
|
||||
OTHER: "other",
|
||||
} as const);
|
||||
@@ -309,6 +316,7 @@ export const deployProvidersMap: Map<DeployProvider["type"] | string, DeployProv
|
||||
[DEPLOY_PROVIDERS.ALIYUN_WAF, "provider.aliyun.waf", DEPLOY_CATEGORIES.FIREWALL],
|
||||
[DEPLOY_PROVIDERS.ALIYUN_LIVE, "provider.aliyun.live", DEPLOY_CATEGORIES.AV],
|
||||
[DEPLOY_PROVIDERS.ALIYUN_VOD, "provider.aliyun.vod", DEPLOY_CATEGORIES.AV],
|
||||
[DEPLOY_PROVIDERS.ALIYUN_FC, "provider.aliyun.fc", DEPLOY_CATEGORIES.SERVERLESS],
|
||||
[DEPLOY_PROVIDERS.ALIYUN_CAS_DEPLOY, "provider.aliyun.cas_deploy", DEPLOY_CATEGORIES.OTHER],
|
||||
[DEPLOY_PROVIDERS.TENCENTCLOUD_COS, "provider.tencentcloud.cos", DEPLOY_CATEGORIES.STORAGE],
|
||||
[DEPLOY_PROVIDERS.TENCENTCLOUD_CDN, "provider.tencentcloud.cdn", DEPLOY_CATEGORIES.CDN],
|
||||
@@ -318,6 +326,7 @@ export const deployProvidersMap: Map<DeployProvider["type"] | string, DeployProv
|
||||
[DEPLOY_PROVIDERS.TENCENTCLOUD_WAF, "provider.tencentcloud.waf", DEPLOY_CATEGORIES.FIREWALL],
|
||||
[DEPLOY_PROVIDERS.TENCENTCLOUD_CSS, "provider.tencentcloud.css", DEPLOY_CATEGORIES.AV],
|
||||
[DEPLOY_PROVIDERS.TENCENTCLOUD_VOD, "provider.tencentcloud.vod", DEPLOY_CATEGORIES.AV],
|
||||
[DEPLOY_PROVIDERS.TENCENTCLOUD_SCF, "provider.tencentcloud.scf", DEPLOY_CATEGORIES.SERVERLESS],
|
||||
[DEPLOY_PROVIDERS.TENCENTCLOUD_SSL_DEPLOY, "provider.tencentcloud.ssl_deploy", DEPLOY_CATEGORIES.OTHER],
|
||||
[DEPLOY_PROVIDERS.HUAWEICLOUD_CDN, "provider.huaweicloud.cdn", DEPLOY_CATEGORIES.CDN],
|
||||
[DEPLOY_PROVIDERS.HUAWEICLOUD_ELB, "provider.huaweicloud.elb", DEPLOY_CATEGORIES.LOADBALANCE],
|
||||
@@ -345,6 +354,8 @@ export const deployProvidersMap: Map<DeployProvider["type"] | string, DeployProv
|
||||
[DEPLOY_PROVIDERS.CDNFLY, "provider.cdnfly", DEPLOY_CATEGORIES.CDN],
|
||||
[DEPLOY_PROVIDERS.EDGIO_APPLICATIONS, "provider.edgio.applications", DEPLOY_CATEGORIES.WEBSITE],
|
||||
[DEPLOY_PROVIDERS.GCORE_CDN, "provider.gcore.cdn", DEPLOY_CATEGORIES.CDN],
|
||||
[DEPLOY_PROVIDERS["1PANEL_SITE"], "provider.1panel.site", DEPLOY_CATEGORIES.WEBSITE],
|
||||
[DEPLOY_PROVIDERS["1PANEL_CONSOLE"], "provider.1panel.console", DEPLOY_CATEGORIES.OTHER],
|
||||
[DEPLOY_PROVIDERS.BAOTAPANEL_SITE, "provider.baotapanel.site", DEPLOY_CATEGORIES.WEBSITE],
|
||||
[DEPLOY_PROVIDERS.BAOTAPANEL_CONSOLE, "provider.baotapanel.console", DEPLOY_CATEGORIES.OTHER],
|
||||
[DEPLOY_PROVIDERS.SAFELINE, "provider.safeline", DEPLOY_CATEGORIES.FIREWALL],
|
||||
|
||||
@@ -173,8 +173,13 @@ export type WorkflowNodeIOValueSelector = {
|
||||
id: string;
|
||||
name: string;
|
||||
};
|
||||
|
||||
// #endregion
|
||||
|
||||
const isBranchLike = (node: WorkflowNode) => {
|
||||
return node.type === WorkflowNodeType.Branch || node.type === WorkflowNodeType.ExecuteResultBranch;
|
||||
};
|
||||
|
||||
type InitWorkflowOptions = {
|
||||
template?: "standard";
|
||||
};
|
||||
@@ -191,6 +196,9 @@ export const initWorkflow = (options: InitWorkflowOptions = {}): WorkflowModel =
|
||||
current.next = newNode(WorkflowNodeType.Deploy, {});
|
||||
|
||||
current = current.next;
|
||||
current.next = newNode(WorkflowNodeType.ExecuteResultBranch, {});
|
||||
|
||||
current = current.next!.branches![1];
|
||||
current.next = newNode(WorkflowNodeType.Notify, {});
|
||||
}
|
||||
|
||||
@@ -265,14 +273,27 @@ export const updateNode = (node: WorkflowNode, targetNode: WorkflowNode) => {
|
||||
let current = draft;
|
||||
while (current) {
|
||||
if (current.id === targetNode.id) {
|
||||
Object.assign(current, targetNode);
|
||||
// Object.assign(current, targetNode);
|
||||
// TODO: 暂时这么处理,避免 #485 #489,后续再优化
|
||||
current.type = targetNode.type;
|
||||
current.name = targetNode.name;
|
||||
current.config = targetNode.config;
|
||||
current.inputs = targetNode.inputs;
|
||||
current.outputs = targetNode.outputs;
|
||||
current.next = targetNode.next;
|
||||
current.branches = targetNode.branches;
|
||||
current.validated = targetNode.validated;
|
||||
break;
|
||||
}
|
||||
if (current.type === WorkflowNodeType.Branch || current.type === WorkflowNodeType.ExecuteResultBranch) {
|
||||
current.branches = current.branches!.map((branch) => updateNode(branch, targetNode));
|
||||
|
||||
if (isBranchLike(current)) {
|
||||
current.branches ??= [];
|
||||
current.branches = current.branches.map((branch) => updateNode(branch, targetNode));
|
||||
}
|
||||
|
||||
current = current.next as WorkflowNode;
|
||||
}
|
||||
|
||||
return draft;
|
||||
});
|
||||
};
|
||||
@@ -281,20 +302,24 @@ export const addNode = (node: WorkflowNode, previousNodeId: string, targetNode:
|
||||
return produce(node, (draft) => {
|
||||
let current = draft;
|
||||
while (current) {
|
||||
if (current.id === previousNodeId && targetNode.type !== WorkflowNodeType.Branch && targetNode.type !== WorkflowNodeType.ExecuteResultBranch) {
|
||||
if (current.id === previousNodeId && !isBranchLike(targetNode)) {
|
||||
targetNode.next = current.next;
|
||||
current.next = targetNode;
|
||||
break;
|
||||
} else if (current.id === previousNodeId && (targetNode.type === WorkflowNodeType.Branch || targetNode.type === WorkflowNodeType.ExecuteResultBranch)) {
|
||||
} else if (current.id === previousNodeId && isBranchLike(targetNode)) {
|
||||
targetNode.branches![0].next = current.next;
|
||||
current.next = targetNode;
|
||||
break;
|
||||
}
|
||||
if (current.type === WorkflowNodeType.Branch || current.type === WorkflowNodeType.ExecuteResultBranch) {
|
||||
current.branches = current.branches!.map((branch) => addNode(branch, previousNodeId, targetNode));
|
||||
|
||||
if (isBranchLike(current)) {
|
||||
current.branches ??= [];
|
||||
current.branches = current.branches.map((branch) => addNode(branch, previousNodeId, targetNode));
|
||||
}
|
||||
|
||||
current = current.next as WorkflowNode;
|
||||
}
|
||||
|
||||
return draft;
|
||||
});
|
||||
};
|
||||
@@ -307,18 +332,24 @@ export const addBranch = (node: WorkflowNode, branchNodeId: string) => {
|
||||
if (current.type !== WorkflowNodeType.Branch) {
|
||||
return draft;
|
||||
}
|
||||
current.branches!.push(
|
||||
|
||||
current.branches ??= [];
|
||||
current.branches.push(
|
||||
newNode(WorkflowNodeType.Condition, {
|
||||
branchIndex: current.branches!.length,
|
||||
branchIndex: current.branches.length,
|
||||
})
|
||||
);
|
||||
break;
|
||||
}
|
||||
if (current.type === WorkflowNodeType.Branch || current.type === WorkflowNodeType.ExecuteResultBranch) {
|
||||
current.branches = current.branches!.map((branch) => addBranch(branch, branchNodeId));
|
||||
|
||||
if (isBranchLike(current)) {
|
||||
current.branches ??= [];
|
||||
current.branches = current.branches.map((branch) => addBranch(branch, branchNodeId));
|
||||
}
|
||||
|
||||
current = current.next as WorkflowNode;
|
||||
}
|
||||
|
||||
return draft;
|
||||
});
|
||||
};
|
||||
@@ -331,11 +362,15 @@ export const removeNode = (node: WorkflowNode, targetNodeId: string) => {
|
||||
current.next = current.next.next;
|
||||
break;
|
||||
}
|
||||
if (current.type === WorkflowNodeType.Branch || current.type === WorkflowNodeType.ExecuteResultBranch) {
|
||||
current.branches = current.branches!.map((branch) => removeNode(branch, targetNodeId));
|
||||
|
||||
if (isBranchLike(current)) {
|
||||
current.branches ??= [];
|
||||
current.branches = current.branches.map((branch) => removeNode(branch, targetNodeId));
|
||||
}
|
||||
|
||||
current = current.next as WorkflowNode;
|
||||
}
|
||||
|
||||
return draft;
|
||||
});
|
||||
};
|
||||
@@ -351,14 +386,16 @@ export const removeBranch = (node: WorkflowNode, branchNodeId: string, branchInd
|
||||
};
|
||||
while (current && last) {
|
||||
if (current.id === branchNodeId) {
|
||||
if (current.type !== WorkflowNodeType.Branch && current.type !== WorkflowNodeType.ExecuteResultBranch) {
|
||||
if (!isBranchLike(current)) {
|
||||
return draft;
|
||||
}
|
||||
current.branches!.splice(branchIndex, 1);
|
||||
|
||||
current.branches ??= [];
|
||||
current.branches.splice(branchIndex, 1);
|
||||
|
||||
// 如果仅剩一个分支,删除分支节点,将分支节点的下一个节点挂载到当前节点
|
||||
if (current.branches!.length === 1) {
|
||||
const branch = current.branches![0];
|
||||
if (current.branches.length === 1) {
|
||||
const branch = current.branches[0];
|
||||
if (branch.next) {
|
||||
last.next = branch.next;
|
||||
let lastNode: WorkflowNode | undefined = branch.next;
|
||||
@@ -373,19 +410,23 @@ export const removeBranch = (node: WorkflowNode, branchNodeId: string, branchInd
|
||||
|
||||
break;
|
||||
}
|
||||
if (current.type === WorkflowNodeType.Branch || current.type === WorkflowNodeType.ExecuteResultBranch) {
|
||||
current.branches = current.branches!.map((branch) => removeBranch(branch, branchNodeId, branchIndex));
|
||||
|
||||
if (isBranchLike(current)) {
|
||||
current.branches ??= [];
|
||||
current.branches = current.branches.map((branch) => removeBranch(branch, branchNodeId, branchIndex));
|
||||
}
|
||||
|
||||
current = current.next as WorkflowNode;
|
||||
last = last.next;
|
||||
}
|
||||
|
||||
return draft;
|
||||
});
|
||||
};
|
||||
|
||||
export const getWorkflowOutputBeforeId = (root: WorkflowNode, nodeId: string, type: string): WorkflowNode[] => {
|
||||
// 1 个分支的节点,不应该能获取到相邻分支上节点的输出
|
||||
const output: WorkflowNode[] = [];
|
||||
export const getOutputBeforeNodeId = (root: WorkflowNode, nodeId: string, type: string): WorkflowNode[] => {
|
||||
// 某个分支的节点,不应该能获取到相邻分支上节点的输出
|
||||
const outputs: WorkflowNode[] = [];
|
||||
|
||||
const traverse = (current: WorkflowNode, output: WorkflowNode[]) => {
|
||||
if (!current) {
|
||||
@@ -395,7 +436,7 @@ export const getWorkflowOutputBeforeId = (root: WorkflowNode, nodeId: string, ty
|
||||
return true;
|
||||
}
|
||||
|
||||
// 如果当前节点是execute_failure,清除execute_result_branch节点前一个节点的输出
|
||||
// 如果当前节点是 ExecuteFailure,清除 ExecuteResultBranch 节点前一个节点的输出
|
||||
if (current.type === WorkflowNodeType.ExecuteFailure) {
|
||||
output.splice(output.length - 1);
|
||||
}
|
||||
@@ -407,7 +448,7 @@ export const getWorkflowOutputBeforeId = (root: WorkflowNode, nodeId: string, ty
|
||||
});
|
||||
}
|
||||
|
||||
if (current.type === WorkflowNodeType.Branch || current.type === WorkflowNodeType.ExecuteResultBranch) {
|
||||
if (isBranchLike(current)) {
|
||||
const currentLength = output.length;
|
||||
for (const branch of current.branches!) {
|
||||
if (traverse(branch, output)) {
|
||||
@@ -423,14 +464,14 @@ export const getWorkflowOutputBeforeId = (root: WorkflowNode, nodeId: string, ty
|
||||
return traverse(current.next as WorkflowNode, output);
|
||||
};
|
||||
|
||||
traverse(root, output);
|
||||
return output;
|
||||
traverse(root, outputs);
|
||||
return outputs;
|
||||
};
|
||||
|
||||
export const isAllNodesValidated = (node: WorkflowNode): boolean => {
|
||||
let current = node as typeof node | undefined;
|
||||
while (current) {
|
||||
if (current.type === WorkflowNodeType.Branch || current.type === WorkflowNodeType.ExecuteResultBranch) {
|
||||
if (isBranchLike(current)) {
|
||||
for (const branch of current.branches!) {
|
||||
if (!isAllNodesValidated(branch)) {
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user