feat(scum): add live data asset manifest contracts

This commit is contained in:
npc0-hue
2026-08-11 18:04:08 +08:00
parent dfd8ca76c9
commit 05ddb3babf
6 changed files with 366 additions and 6 deletions
@@ -295,7 +295,14 @@
"properties": {
"schemaVersion": { "const": "1" },
"probe": { "$ref": "#/$defs/scumSchemaProbeDeclaration" },
"capabilityGates": { "type": "array", "items": { "$ref": "#/$defs/scumLiveDataCapabilityGate" }, "uniqueItems": true, "minItems": 1, "maxItems": 32 }
"capabilityGates": { "type": "array", "items": { "$ref": "#/$defs/scumLiveDataCapabilityGate" }, "uniqueItems": true, "minItems": 1, "maxItems": 32 },
"logParsers": { "type": "array", "items": { "$ref": "#/$defs/scumLogParserAsset" }, "uniqueItems": true, "maxItems": 16 },
"sqliteQueries": { "type": "array", "items": { "$ref": "#/$defs/scumSQLiteQueryAsset" }, "uniqueItems": true, "maxItems": 64 },
"syncCadences": { "type": "array", "items": { "$ref": "#/$defs/scumSyncCadence" }, "uniqueItems": true, "maxItems": 16 },
"typedRconTemplates": { "type": "array", "items": { "$ref": "#/$defs/scumTypedRconTemplate" }, "uniqueItems": true, "maxItems": 32 },
"guardedMutations": { "type": "array", "items": { "$ref": "#/$defs/scumGuardedMutation" }, "uniqueItems": true, "maxItems": 16 },
"mapAssets": { "type": "array", "items": { "$ref": "#/$defs/scumMapAsset" }, "uniqueItems": true, "maxItems": 8 },
"giftCatalogs": { "type": "array", "items": { "$ref": "#/$defs/scumGiftCatalog" }, "uniqueItems": true, "maxItems": 16 }
}
},
"scumSchemaProbeDeclaration": {
@@ -330,6 +337,52 @@
"safeReason": { "type": "string", "minLength": 1, "maxLength": 240 }
}
},
"scumAssetDigest": { "type": "string", "pattern": "^sha256:[a-fA-F0-9]{64}$" },
"scumSchemaFingerprint": { "type": "string", "pattern": "^(sha256:)?[a-fA-F0-9]{16,128}$" },
"scumAdapterVersion": { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,79}$" },
"scumVersionedAssetBase": {
"type": "object",
"required": ["key", "adapterVersion", "assetPath", "digest"],
"properties": {
"key": { "$ref": "#/$defs/logicalKey" }, "adapterVersion": { "$ref": "#/$defs/scumAdapterVersion" }, "assetPath": { "$ref": "#/$defs/relativePathRef" }, "digest": { "$ref": "#/$defs/scumAssetDigest" }
}
},
"scumReadCapability": { "enum": ["players.read", "player-details.read", "squads.read", "squad-members.read", "vehicles.read", "flags.read", "positions.read"] },
"scumWriteCapability": { "enum": ["profile-xml.write", "economy-command.write", "gift-command.write"] },
"scumLogParserAsset": {
"allOf": [{ "$ref": "#/$defs/scumVersionedAssetBase" }, { "type": "object", "required": ["parserVersion", "sourceKey", "eventType", "eventSchemaRef", "maxLineBytes", "cursorPolicy", "privacy"], "additionalProperties": false, "properties": {
"key": { "$ref": "#/$defs/logicalKey" }, "adapterVersion": { "$ref": "#/$defs/scumAdapterVersion" }, "assetPath": { "$ref": "#/$defs/relativePathRef" }, "digest": { "$ref": "#/$defs/scumAssetDigest" }, "parserVersion": { "$ref": "#/$defs/scumAdapterVersion" }, "sourceKey": { "$ref": "#/$defs/logicalKey" }, "eventType": { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,159}$" }, "eventSchemaRef": { "$ref": "#/$defs/relativeJsonRef" }, "maxLineBytes": { "type": "integer", "minimum": 1, "maximum": 65536 }, "cursorPolicy": { "const": "source-generation-sequence" }, "privacy": { "type": "object", "required": ["stripNetworkIdentifiers", "logicalEventIdentity"], "additionalProperties": false, "properties": { "stripNetworkIdentifiers": { "const": true }, "logicalEventIdentity": { "const": "native-or-sanitized-fields" } } }
} }]
},
"scumSQLiteQueryAsset": {
"allOf": [{ "$ref": "#/$defs/scumVersionedAssetBase" }, { "type": "object", "required": ["capability", "requiredSchemaFingerprint", "transportKey", "targetKey", "parameterSchemaRef", "resultSchemaRef", "maxRows", "timeoutMs", "maxResultBytes"], "additionalProperties": false, "properties": {
"key": { "$ref": "#/$defs/logicalKey" }, "adapterVersion": { "$ref": "#/$defs/scumAdapterVersion" }, "assetPath": { "$ref": "#/$defs/relativePathRef" }, "digest": { "$ref": "#/$defs/scumAssetDigest" }, "capability": { "$ref": "#/$defs/scumReadCapability" }, "requiredSchemaFingerprint": { "$ref": "#/$defs/scumSchemaFingerprint" }, "transportKey": { "$ref": "#/$defs/logicalKey" }, "targetKey": { "$ref": "#/$defs/logicalKey" }, "parameterSchemaRef": { "$ref": "#/$defs/relativeJsonRef" }, "resultSchemaRef": { "$ref": "#/$defs/relativeJsonRef" }, "maxRows": { "type": "integer", "minimum": 1, "maximum": 500 }, "timeoutMs": { "type": "integer", "minimum": 1, "maximum": 60000 }, "maxResultBytes": { "type": "integer", "minimum": 1, "maximum": 1048576 }
} }]
},
"scumSyncCadence": {
"type": "object", "required": ["capability", "intervalSeconds", "jitterPercent", "timeoutMs", "maxConcurrentPerServer"], "additionalProperties": false,
"properties": { "capability": { "$ref": "#/$defs/scumReadCapability" }, "intervalSeconds": { "type": "integer", "minimum": 5, "maximum": 86400 }, "jitterPercent": { "type": "integer", "minimum": 0, "maximum": 100 }, "timeoutMs": { "type": "integer", "minimum": 1, "maximum": 60000 }, "maxConcurrentPerServer": { "type": "integer", "minimum": 1, "maximum": 16 } }
},
"scumTypedRconTemplate": {
"allOf": [{ "$ref": "#/$defs/scumVersionedAssetBase" }, { "type": "object", "required": ["capability", "transportKey", "targetKey", "permission", "payloadSchemaRef", "resultSchemaRef", "timeoutMs", "maxPayloadBytes"], "additionalProperties": false, "properties": {
"key": { "$ref": "#/$defs/logicalKey" }, "adapterVersion": { "$ref": "#/$defs/scumAdapterVersion" }, "assetPath": { "$ref": "#/$defs/relativePathRef" }, "digest": { "$ref": "#/$defs/scumAssetDigest" }, "capability": { "enum": ["economy-command.write", "gift-command.write"] }, "requiredSchemaFingerprint": { "$ref": "#/$defs/scumSchemaFingerprint" }, "transportKey": { "$ref": "#/$defs/logicalKey" }, "targetKey": { "$ref": "#/$defs/logicalKey" }, "permission": { "const": "server.game-client.command" }, "payloadSchemaRef": { "$ref": "#/$defs/relativeJsonRef" }, "resultSchemaRef": { "$ref": "#/$defs/relativeJsonRef" }, "confirmationSchemaRef": { "$ref": "#/$defs/relativeJsonRef" }, "timeoutMs": { "type": "integer", "minimum": 1, "maximum": 60000 }, "maxPayloadBytes": { "type": "integer", "minimum": 1, "maximum": 65536 }
} }]
},
"scumGuardedMutation": {
"allOf": [{ "$ref": "#/$defs/scumVersionedAssetBase" }, { "type": "object", "required": ["capability", "requiredSchemaFingerprint", "transportKey", "targetKey", "permission", "payloadSchemaRef", "resultSchemaRef", "confirmationSchemaRef", "timeoutMs", "maxPayloadBytes", "maxRowsAffected", "safety"], "additionalProperties": false, "properties": {
"key": { "$ref": "#/$defs/logicalKey" }, "adapterVersion": { "$ref": "#/$defs/scumAdapterVersion" }, "assetPath": { "$ref": "#/$defs/relativePathRef" }, "digest": { "$ref": "#/$defs/scumAssetDigest" }, "capability": { "const": "profile-xml.write" }, "requiredSchemaFingerprint": { "$ref": "#/$defs/scumSchemaFingerprint" }, "transportKey": { "$ref": "#/$defs/logicalKey" }, "targetKey": { "$ref": "#/$defs/logicalKey" }, "permission": { "const": "server.game-client.maintenance" }, "payloadSchemaRef": { "$ref": "#/$defs/relativeJsonRef" }, "resultSchemaRef": { "$ref": "#/$defs/relativeJsonRef" }, "confirmationSchemaRef": { "$ref": "#/$defs/relativeJsonRef" }, "timeoutMs": { "type": "integer", "minimum": 1, "maximum": 60000 }, "maxPayloadBytes": { "type": "integer", "minimum": 1, "maximum": 65536 }, "maxRowsAffected": { "const": 1 }, "safety": { "type": "object", "required": ["requiresExpectedChecksum", "requiresBackupEvidence", "requiresOfflineOrMaintenance", "requiresReadAfterWrite"], "additionalProperties": false, "properties": { "requiresExpectedChecksum": { "const": true }, "requiresBackupEvidence": { "const": true }, "requiresOfflineOrMaintenance": { "const": true }, "requiresReadAfterWrite": { "const": true } } }
} }]
},
"scumMapAsset": {
"allOf": [{ "$ref": "#/$defs/scumVersionedAssetBase" }, { "type": "object", "required": ["requiredSchemaFingerprint", "metadataSchemaRef", "transformAssetPath", "transformDigest", "worldBounds", "image"], "additionalProperties": false, "properties": {
"key": { "$ref": "#/$defs/logicalKey" }, "adapterVersion": { "$ref": "#/$defs/scumAdapterVersion" }, "assetPath": { "$ref": "#/$defs/relativePathRef" }, "digest": { "$ref": "#/$defs/scumAssetDigest" }, "requiredSchemaFingerprint": { "$ref": "#/$defs/scumSchemaFingerprint" }, "metadataSchemaRef": { "$ref": "#/$defs/relativeJsonRef" }, "transformAssetPath": { "$ref": "#/$defs/relativePathRef" }, "transformDigest": { "$ref": "#/$defs/scumAssetDigest" }, "worldBounds": { "type": "object", "required": ["minX", "minY", "maxX", "maxY"], "additionalProperties": false, "properties": { "minX": { "type": "number" }, "minY": { "type": "number" }, "maxX": { "type": "number" }, "maxY": { "type": "number" } } }, "image": { "type": "object", "required": ["width", "height"], "additionalProperties": false, "properties": { "width": { "type": "integer", "minimum": 1, "maximum": 100000 }, "height": { "type": "integer", "minimum": 1, "maximum": 100000 } } }
} }]
},
"scumGiftCatalog": {
"allOf": [{ "$ref": "#/$defs/scumVersionedAssetBase" }, { "type": "object", "required": ["catalogVersion", "itemSchemaRef", "transportTemplateKeys"], "additionalProperties": false, "properties": {
"key": { "$ref": "#/$defs/logicalKey" }, "adapterVersion": { "$ref": "#/$defs/scumAdapterVersion" }, "assetPath": { "$ref": "#/$defs/relativePathRef" }, "digest": { "$ref": "#/$defs/scumAssetDigest" }, "catalogVersion": { "$ref": "#/$defs/scumAdapterVersion" }, "itemSchemaRef": { "$ref": "#/$defs/relativeJsonRef" }, "transportTemplateKeys": { "type": "array", "items": { "$ref": "#/$defs/logicalKey" }, "uniqueItems": true, "minItems": 1, "maxItems": 16 }
} }]
},
"gameClientBridgeCompanion": {
"type": "object",
"required": ["profileKey", "configTemplateKey", "configSchemaRef", "configFormat", "platformBaseUrlSource", "registrationProof", "proofMaterialSource", "proofMaterialEnv", "sessionMode", "tlsPolicy", "heartbeatIntervalSeconds", "commandPollIntervalSeconds", "requestTimeoutSeconds"],