feat(openclaw): add task-plane task-plane.js
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
import crypto from "node:crypto";
|
||||
|
||||
import { buildProvisionRequest, validateProvisionResponse, validateTaskPlaneRequest } from "../dispatch-contract.js";
|
||||
import { callBrokerProvision } from "../session-broker-client.js";
|
||||
import { dispatchError } from "../dispatch-errors.js";
|
||||
import { canonicalize } from "../provenance.js";
|
||||
|
||||
export async function dispatchTaskPlaneTransport({ permit, request, params, config, attempts }) {
|
||||
const validated = validateTaskPlaneRequest({ request, permit, config });
|
||||
if (!validated.ok) throw dispatchError(validated.code);
|
||||
if (typeof config.protectedDispatchBrokerEndpoint !== "string" ||
|
||||
typeof config.protectedDispatchBrokerCredentialPath !== "string") {
|
||||
throw dispatchError("broker_config_invalid");
|
||||
}
|
||||
const provisionRequest = buildProvisionRequest(validated, request.idempotency_key);
|
||||
let response;
|
||||
try {
|
||||
response = await callBrokerProvision({
|
||||
endpoint: config.protectedDispatchBrokerEndpoint,
|
||||
credentialPath: config.protectedDispatchBrokerCredentialPath,
|
||||
payload: provisionRequest,
|
||||
timeoutMs: config.protectedDispatchBrokerTimeoutMs,
|
||||
});
|
||||
} catch (error) {
|
||||
throw dispatchError(error instanceof Error && error.code ? error.code : "broker_unreachable");
|
||||
}
|
||||
const checked = validateProvisionResponse(response, validated.plan);
|
||||
if (!checked.ok) throw dispatchError(checked.code);
|
||||
const result = {
|
||||
accepted: true,
|
||||
task_id: request.task_id,
|
||||
provider: request.provider,
|
||||
provider_source: "server_config",
|
||||
provider_hint_overridden: params.provider !== request.provider,
|
||||
provenance_id: permit.record.payload.provenance_id,
|
||||
simulation: false,
|
||||
transport: "task-plane",
|
||||
real_user_impersonated: false,
|
||||
attempts,
|
||||
...checked.value,
|
||||
};
|
||||
result.receipt_sha256 = crypto.createHash("sha256").update(canonicalize(result)).digest("hex");
|
||||
return result;
|
||||
}
|
||||
Reference in New Issue
Block a user