feat: plugins v1.5

This commit is contained in:
2026-04-29 01:14:30 +02:00
parent 6920f93b41
commit eabbc08896
59 changed files with 2197 additions and 352 deletions

View File

@@ -37,8 +37,11 @@ const DATA_KEY_PATTERN = /^[a-zA-Z0-9][a-zA-Z0-9._:-]{0,127}$/;
const DATA_SCOPE_PATTERN = /^[a-zA-Z][a-zA-Z0-9._:-]{0,63}$/;
export interface PluginRequirementSummary {
installUrl?: string;
manifest?: unknown;
pluginId: string;
reason?: string;
sourceUrl?: string;
status: ServerPluginRequirementStatus;
updatedAt: number;
versionRange?: string;
@@ -174,6 +177,10 @@ function parseJsonValue(valueJson: string): unknown {
}
}
function parseOptionalJsonValue(valueJson: string | null): unknown {
return valueJson ? parseJsonValue(valueJson) : undefined;
}
function serializeJsonValue(value: unknown, code: string): string {
try {
return JSON.stringify(value ?? null);
@@ -184,8 +191,11 @@ function serializeJsonValue(value: unknown, code: string): string {
function toRequirementSummary(entity: ServerPluginRequirementEntity): PluginRequirementSummary {
return {
installUrl: entity.installUrl ?? undefined,
manifest: parseOptionalJsonValue(entity.manifestJson),
pluginId: entity.pluginId,
reason: entity.reason ?? undefined,
sourceUrl: entity.sourceUrl ?? undefined,
status: entity.status,
updatedAt: entity.updatedAt,
versionRange: entity.versionRange ?? undefined
@@ -282,9 +292,12 @@ export async function getPluginRequirementsSnapshot(serverId: string): Promise<P
export async function upsertPluginRequirement(options: {
actorUserId: string;
installUrl?: unknown;
manifest?: unknown;
pluginId: string;
reason?: unknown;
serverId: string;
sourceUrl?: unknown;
status: unknown;
versionRange?: unknown;
}): Promise<PluginRequirementSummary> {
@@ -306,6 +319,9 @@ export async function upsertPluginRequirement(options: {
status: status as ServerPluginRequirementStatus,
versionRange: normalizeOptionalString(options.versionRange, 128),
reason: normalizeOptionalString(options.reason, 512),
installUrl: normalizeOptionalString(options.installUrl, 2_000),
sourceUrl: normalizeOptionalString(options.sourceUrl, 2_000),
manifestJson: options.manifest === undefined ? null : serializeJsonValue(options.manifest, 'INVALID_PLUGIN_MANIFEST_METADATA'),
configuredBy: options.actorUserId,
createdAt: existing?.createdAt ?? now,
updatedAt: now