feat: harden plugin api for separate repos, signed updates and generic external login

This commit is contained in:
LukeGus committed 2026-09-29 18:11:59 -05:00
1 parent fb9c168b6b
commit 80944301dd
310 files changed
+6577 -4927

No files matched your search

+52 -12
View File
@@ -82,12 +82,12 @@
"termix": {
"type": "string",
"minLength": 1,
"description": "Display string only. Never enforced."
"description": "Semver range of Termix releases the plugin runs on, e.g. \">=2.9.0\"."
},
"api": {
"type": "string",
"pattern": "^[0-9]+$",
"description": "Plugin SDK major version. The real compatibility gate."
"minLength": 1,
"description": "Semver range of the plugin API it needs, e.g. \"1\" or \"^1.2\"."
}
}
},
@@ -115,6 +115,8 @@
"notify:send",
"audit:read",
"desktop:window",
"users:impersonate",
"db:core-refs",
"hosts:read",
"db:own",
"kv:own",
@@ -290,7 +292,9 @@
"id": {
"type": "string",
"pattern": "^[a-z][a-z0-9-]{0,31}$",
"not": { "enum": ["ssh"] }
"not": {
"enum": ["ssh"]
}
},
"credentialFields": {
"type": "array",
@@ -311,7 +315,9 @@
]
}
},
"secret": { "type": "boolean" }
"secret": {
"type": "boolean"
}
}
}
},
@@ -323,7 +329,9 @@
"hostLoginFallback": {
"type": "array",
"uniqueItems": true,
"items": { "enum": ["username", "password"] }
"items": {
"enum": ["username", "password"]
}
}
}
}
@@ -352,17 +360,28 @@
"type": "object",
"propertyNames": {
"pattern": "^[a-zA-Z][a-zA-Z0-9]{0,31}$",
"not": { "const": "type" }
"not": {
"const": "type"
}
},
"additionalProperties": {
"type": "object",
"additionalProperties": false,
"required": ["type"],
"properties": {
"type": { "enum": ["string", "boolean"] },
"required": { "type": "boolean" },
"pattern": { "type": "string" },
"maxLength": { "type": "integer", "minimum": 1 },
"type": {
"enum": ["string", "boolean"]
},
"required": {
"type": "boolean"
},
"pattern": {
"type": "string"
},
"maxLength": {
"type": "integer",
"minimum": 1
},
"syncEntity": {
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9]*$"
@@ -894,6 +913,15 @@
"ownerOnly": {
"type": "boolean",
"description": "Only the host's owner may change it."
},
"secretKeys": {
"type": "array",
"minItems": 1,
"items": {
"type": "string",
"minLength": 1
},
"description": "JSON fields only: keys inside the stored object that hold secrets."
}
}
}
@@ -962,7 +990,9 @@
"type": "string",
"pattern": "^(/[A-Za-z0-9_.-]+)+$"
},
"status": { "enum": [307, 308] }
"status": {
"enum": [307, 308]
}
}
}
}
@@ -1041,6 +1071,16 @@
}
}
}
},
"uses": {
"type": "array",
"minItems": 1,
"uniqueItems": true,
"description": "Other plugins' action, slot and extension point ids this plugin calls, fills or extends.",
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)+$"
}
}
}
},