import { EnvironmentAuthInvalidError } from "@t3tools/contracts";import { RelayAuthInvalidError } from "@t3tools/contracts/relay";import { describe, expect, it } from "@effect/vitest"; import { mapManagedRelayError, mapRemoteDpopEnvironmentError } from "./errors.ts";import { DPOP_RETRY_HINT, DPOP_UNKNOWN_HINT } from "../relay/errorPresentation.ts";import { ManagedRelayRequestFailedError } from "../relay/managedRelay.ts"; describe("mapManagedRelayError", () => { it("presents clock skew as one possible cause for a generic DPoP error", () => { const mapped = mapManagedRelayError( new ManagedRelayRequestFailedError({ action: "connect relay environment", cause: new Error("request failed"), relayError: new RelayAuthInvalidError({ code: "auth_invalid", reason: "invalid_dpop", traceId: "trace-1", }), traceId: "trace-1", }), ); expect(mapped).toMatchObject({ _tag: "ConnectionBlockedError", reason: "authentication", detail: `Relay rejected the DPoP proof. ${DPOP_UNKNOWN_HINT}`, traceId: "trace-1", }); }); it("uses a neutral hint when the relay identifies a non-clock DPoP error", () => { const mapped = mapManagedRelayError( new ManagedRelayRequestFailedError({ action: "connect relay environment", cause: new Error("request failed"), relayError: new RelayAuthInvalidError({ code: "auth_invalid", reason: "invalid_dpop", dpopFailureReason: "key_mismatch", traceId: "trace-1", }), }), ); expect(mapped.message).toBe(`Relay rejected the DPoP proof. ${DPOP_RETRY_HINT}`); });}); describe("mapRemoteDpopEnvironmentError", () => { it("does not present a generic environment auth error as confirmed clock skew", () => { const mapped = mapRemoteDpopEnvironmentError( new EnvironmentAuthInvalidError({ code: "auth_invalid", reason: "invalid_credential", traceId: "trace-1", }), ); expect(mapped.message).toBe(`The environment credential is invalid. ${DPOP_UNKNOWN_HINT}`); }); it("uses a neutral hint for a non-clock DPoP error from a new server", () => { const mapped = mapRemoteDpopEnvironmentError( new EnvironmentAuthInvalidError({ code: "auth_invalid", reason: "invalid_credential", dpopFailureReason: "key_mismatch", traceId: "trace-1", }), ); expect(mapped.message).toBe(`The environment credential is invalid. ${DPOP_RETRY_HINT}`); });});
import { EnvironmentAuthInvalidError } from "@t3tools/contracts";
import { RelayAuthInvalidError } from "@t3tools/contracts/relay";
import { describe, expect, it } from "@effect/vitest";
import { mapManagedRelayError, mapRemoteDpopEnvironmentError } from "./errors.ts";
import { DPOP_RETRY_HINT, DPOP_UNKNOWN_HINT } from "../relay/errorPresentation.ts";
import { ManagedRelayRequestFailedError } from "../relay/managedRelay.ts";
describe("mapManagedRelayError", () => {
it("presents clock skew as one possible cause for a generic DPoP error", () => {
const mapped = mapManagedRelayError(
new ManagedRelayRequestFailedError({
action: "connect relay environment",
cause: new Error("request failed"),
relayError: new RelayAuthInvalidError({
code: "auth_invalid",
reason: "invalid_dpop",
traceId: "trace-1",
}),
traceId: "trace-1",
}),
);
expect(mapped).toMatchObject({
_tag: "ConnectionBlockedError",
reason: "authentication",
detail: `Relay rejected the DPoP proof. ${DPOP_UNKNOWN_HINT}`,
traceId: "trace-1",
});
});
it("uses a neutral hint when the relay identifies a non-clock DPoP error", () => {
const mapped = mapManagedRelayError(
new ManagedRelayRequestFailedError({
action: "connect relay environment",
cause: new Error("request failed"),
relayError: new RelayAuthInvalidError({
code: "auth_invalid",
reason: "invalid_dpop",
dpopFailureReason: "key_mismatch",
traceId: "trace-1",
}),
}),
);
expect(mapped.message).toBe(`Relay rejected the DPoP proof. ${DPOP_RETRY_HINT}`);
});
});
describe("mapRemoteDpopEnvironmentError", () => {
it("does not present a generic environment auth error as confirmed clock skew", () => {
const mapped = mapRemoteDpopEnvironmentError(
new EnvironmentAuthInvalidError({
code: "auth_invalid",
reason: "invalid_credential",
traceId: "trace-1",
}),
);
expect(mapped.message).toBe(`The environment credential is invalid. ${DPOP_UNKNOWN_HINT}`);
});
it("uses a neutral hint for a non-clock DPoP error from a new server", () => {
const mapped = mapRemoteDpopEnvironmentError(
new EnvironmentAuthInvalidError({
code: "auth_invalid",
reason: "invalid_credential",
dpopFailureReason: "key_mismatch",
traceId: "trace-1",
}),
);
expect(mapped.message).toBe(`The environment credential is invalid. ${DPOP_RETRY_HINT}`);
});
});