























@@ -224,6 +224,14 @@ function assertApprovalDecisionResult(params: {
224224}
225225}
226226227+function assertApprovalResolveResult(result: unknown) {
228+const resolved =
229+typeof result === "object" && result !== null ? (result as { ok?: unknown }) : null;
230+if (resolved?.ok !== true) {
231+throw new Error(`approval resolve result was ${formatApprovalResultValue(result)}`);
232+}
233+}
234+227235function formatApprovalResultValue(value: unknown) {
228236if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
229237return String(value);
@@ -305,6 +313,24 @@ async function waitForApprovalDecision(params: {
305313);
306314}
307315316+async function resolveApprovalDecision(params: {
317+approvalId: string;
318+context: MatrixQaScenarioContext;
319+decision: MatrixQaApprovalDecision;
320+kind: MatrixQaApprovalKind;
321+}) {
322+const gatewayCall = requireMatrixQaGatewayCall(params.context);
323+const method = params.kind === "exec" ? "exec.approval.resolve" : "plugin.approval.resolve";
324+return await gatewayCall(
325+method,
326+{ decision: params.decision, id: params.approvalId },
327+{
328+expectFinal: true,
329+timeoutMs: MATRIX_QA_APPROVAL_DECISION_TIMEOUT_MS + 5_000,
330+},
331+);
332+}
333+308334function readAcceptedApprovalRequest(result: unknown) {
309335const accepted =
310336typeof result === "object" && result !== null
@@ -563,22 +589,13 @@ export async function runApprovalChannelTargetBothScenario(context: MatrixQaScen
563589if (channelApproval.event.approval?.id !== dmApproval.event.approval?.id) {
564590throw new Error("target=both delivered different approval ids to channel and DM");
565591}
566-const reaction = await reactToApproval({
567- context,
568-decision: "allow-once",
569-roomId: context.roomId,
570-targetEventId: channelApproval.event.eventId,
571-});
572-const result = await waitForApprovalDecision({
592+const result = await resolveApprovalDecision({
573593 approvalId,
574594 context,
575-kind: "exec",
576-});
577-assertApprovalDecisionResult({
578- approvalId,
579595decision: "allow-once",
580-result,
596+kind: "exec",
581597});
598+assertApprovalResolveResult(result);
582599const lateDuplicate = await client.waitForOptionalRoomEvent({
583600observedEvents: context.observedEvents,
584601predicate: (event) =>
@@ -599,16 +616,14 @@ export async function runApprovalChannelTargetBothScenario(context: MatrixQaScen
599616buildMatrixApprovalArtifact(channelApproval.event),
600617buildMatrixApprovalArtifact(dmApproval.event),
601618],
602-reactionEmoji: reaction.reaction?.key,
603-reactionEventId: reaction.eventId,
604-reactionTargetEventId: reaction.reaction?.eventId,
619+resolveResult: result,
605620 token,
606621},
607622details: [
608623`channel approval event: ${channelApproval.event.eventId}`,
609624`dm approval event: ${dmApproval.event.eventId}`,
610625`approval id: ${approvalId}`,
611-`decision: allow-once`,
626+`decision: allow-once via gateway resolve`,
612627].join("\n"),
613628} satisfies MatrixQaScenarioExecution;
614629}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。