History

Classify missing provider bindings

Julius Marminge committed 4 months ago

Commit d59b5911 parent 4934dc23 files · +28 −6Browse files

Unified · Split

3 files
  1. apps/server/src/provider/Errors.ts +2 −0
  2. apps/server/src/provider/ProviderSessionDirectory.test.ts +12 −0
  3. apps/server/src/provider/ProviderSessionDirectory.ts +14 −6
apps/server/src/provider/Errors.ts+2−0
@@ -171,6 +171,8 @@ export class ProviderSessionNotFoundError extends Schema.TaggedErrorClass<Provid · 170 unmodified lines
171171 }
172172 }
173173
174+export const isProviderSessionNotFoundError = Schema.is(ProviderSessionNotFoundError);
175+
174176 /**
175177 * ProviderSessionDirectoryPersistenceError - Session directory persistence failure.
176178 */
apps/server/src/provider/ProviderSessionDirectory.test.ts+12−0
@@ -17,6 +17,7 @@ import { · 16 unmodified lines
1717 SqlitePersistenceMemory,
1818 } from "../persistence/Layers/Sqlite.ts";
1919 import * as ProviderSessionRuntime from "../persistence/ProviderSessionRuntime.ts";
20+import { isProviderSessionNotFoundError } from "./Errors.ts";
2021 import * as ProviderSessionDirectory from "./ProviderSessionDirectory.ts";
2122
2223 function makeDirectoryLayer<E, R>(persistenceLayer: Layer.Layer<SqlClient.SqlClient, E, R>) {
@@ -76,6 +77,17 @@ it.layer(makeDirectoryLayer(SqlitePersistenceMemory))("ProviderSessionDirectoryL · 53 unmodified lines
7677 assert.deepEqual(threadIds, [nextThreadId]);
7778 }));
7879
80+ it("reports a missing provider binding as a domain not-found error", () =>
81+ Effect.gen(function* () {
82+ const directory = yield* ProviderSessionDirectory.ProviderSessionDirectory;
83+ const threadId = ThreadId.make("thread-missing");
84+
85+ const error = yield* directory.getProvider(threadId).pipe(Effect.flip);
86+
87+ assert(isProviderSessionNotFoundError(error));
88+ assert.equal(error.threadId, threadId);
89+ }));
90+
7991 it("persists runtime fields and merges payload updates", () =>
8092 Effect.gen(function* () {
8193 const directory = yield* ProviderSessionDirectory.ProviderSessionDirectory;
apps/server/src/provider/ProviderSessionDirectory.ts+14−6
@@ -13,7 +13,11 @@ import * as Layer from "effect/Layer"; · 12 unmodified lines
1313 import * as Option from "effect/Option";
1414 import * as Schema from "effect/Schema";
1515
16−import { ProviderSessionDirectoryPersistenceError, ProviderValidationError } from "./Errors.ts";
16+import {
17+ ProviderSessionDirectoryPersistenceError,
18+ ProviderSessionNotFoundError,
19+ ProviderValidationError,
20+} from "./Errors.ts";
1721 import * as ProviderSessionRuntime from "../persistence/ProviderSessionRuntime.ts";
1822
1923 export interface ProviderRuntimeBinding {
@@ -36,7 +40,9 @@ export interface ProviderRuntimeBindingWithMetadata extends ProviderRuntimeBindi · 16 unmodified lines
3640 readonly lastSeenAt: string;
3741 }
3842
39−export type ProviderSessionDirectoryReadError = ProviderSessionDirectoryPersistenceError;
43+export type ProviderSessionDirectoryReadError =
44+ | ProviderSessionDirectoryPersistenceError
45+ | ProviderSessionNotFoundError;
4046
4147 export type ProviderSessionDirectoryWriteError =
4248 | ProviderValidationError
@@ -53,7 +59,10 @@ export class ProviderSessionDirectory extends Context.Service< · 10 unmodified lines
5359 ) => Effect.Effect<ProviderDriverKind, ProviderSessionDirectoryReadError>;
5460 readonly getBinding: (
5561 threadId: ThreadId,
56− ) => Effect.Effect<Option.Option<ProviderRuntimeBinding>, ProviderSessionDirectoryReadError>;
62+ ) => Effect.Effect<
63+ Option.Option<ProviderRuntimeBinding>,
64+ ProviderSessionDirectoryPersistenceError
65+ >;
5766 readonly listThreadIds: () => Effect.Effect<
5867 ReadonlyArray<ThreadId>,
5968 ProviderSessionDirectoryPersistenceError
@@ -222,9 +231,8 @@ export const make = Effect.gen(function* () { · 162 unmodified lines
222231 onSome: (value) => Effect.succeed(value.provider),
223232 onNone: () =>
224233 Effect.fail(
225− new ProviderSessionDirectoryPersistenceError({
226− operation: "ProviderSessionDirectory.getProvider",
227− detail: `No persisted provider binding found for thread '${threadId}'.`,
234+ new ProviderSessionNotFoundError({
235+ threadId,
228236 }),
229237 ),
230238 }),