59 lines
3.0 KiB
JavaScript
59 lines
3.0 KiB
JavaScript
export const ERROR_DEFINITIONS = Object.freeze({
|
|
0: { code: "ok", message_key: "ok", retryable: false, category: "none" },
|
|
[-1]: { code: "sim_invalid_argument", message_key: "sim.invalid_argument", retryable: false, category: "core" },
|
|
[-2]: { code: "sim_not_created", message_key: "sim.not_created", retryable: false, category: "core" },
|
|
[-3]: { code: "sim_buffer_too_small", message_key: "sim.buffer_too_small", retryable: true, category: "core" },
|
|
[-4]: { code: "sim_invalid_state", message_key: "sim.invalid_state", retryable: false, category: "core" },
|
|
[-5]: { code: "sim_unsupported", message_key: "sim.unsupported", retryable: false, category: "capability" },
|
|
[-100]: { code: "protocol_schema", message_key: "protocol.unsupported_schema", retryable: false, category: "protocol" },
|
|
[-101]: { code: "protocol_sequence", message_key: "protocol.sequence_gap", retryable: true, category: "protocol" },
|
|
[-102]: { code: "protocol_state", message_key: "protocol.invalid_state", retryable: false, category: "protocol" },
|
|
[-103]: { code: "protocol_operation_id", message_key: "protocol.operation_id_required", retryable: false, category: "protocol" },
|
|
[-104]: { code: "protocol_kind", message_key: "protocol.invalid_kind", retryable: false, category: "protocol" },
|
|
[-105]: { code: "protocol_argument", message_key: "protocol.invalid_argument", retryable: false, category: "protocol" },
|
|
[-106]: { code: "protocol_tick", message_key: "protocol.tick_regression", retryable: false, category: "protocol" },
|
|
[-200]: { code: "event_sequence", message_key: "event.sequence_gap", retryable: true, category: "event" },
|
|
[-201]: { code: "event_tick", message_key: "event.tick_regression", retryable: false, category: "event" },
|
|
[-202]: { code: "event_argument", message_key: "event.invalid_argument", retryable: false, category: "event" },
|
|
[-203]: { code: "event_full", message_key: "event.capacity_exceeded", retryable: true, category: "event" },
|
|
[-204]: { code: "event_buffer", message_key: "event.buffer_too_small", retryable: true, category: "event" },
|
|
});
|
|
|
|
export function mapCoreError(value, context = {}) {
|
|
const definition = ERROR_DEFINITIONS[value];
|
|
if (!definition) {
|
|
return {
|
|
status: "error",
|
|
code: "core_unknown_error",
|
|
message_key: "core.unknown_error",
|
|
category: "core",
|
|
retryable: false,
|
|
original_code: value,
|
|
operation_id: context.operation_id ?? null,
|
|
simulation_tick: context.simulation_tick ?? 0,
|
|
source: context.source ?? null,
|
|
};
|
|
}
|
|
return {
|
|
status: value === 0 ? "ok" : "error",
|
|
...definition,
|
|
original_code: value,
|
|
operation_id: context.operation_id ?? null,
|
|
simulation_tick: context.simulation_tick ?? 0,
|
|
source: context.source ?? null,
|
|
};
|
|
}
|
|
|
|
export function realExcluded(capability, reason, substitute = null) {
|
|
return {
|
|
status: "REAL-EXCLUDED",
|
|
code: "real_hardware_excluded",
|
|
message_key: "capability.real_hardware_excluded",
|
|
category: "capability",
|
|
capability,
|
|
reason,
|
|
substitute,
|
|
retryable: false,
|
|
};
|
|
}
|