import * as Schema from "effect/Schema";import * as SchemaIssue from "effect/SchemaIssue"; function summarizeSchemaIssue(issue: SchemaIssue.Issue): string { switch (issue._tag) { case "Filter": case "Encoding": case "Pointer": return `${issue._tag}(${summarizeSchemaIssue(issue.issue)})`; case "Composite": case "AnyOf": return `${issue._tag}(${issue.issues.map(summarizeSchemaIssue).join(",")})`; default: return issue._tag; }} // ===============================// Core Persistence Errors// =============================== export const PersistenceErrorCorrelation = Schema.Union([ Schema.Struct({ sessionId: Schema.String }), Schema.Struct({ currentSessionId: Schema.String }), Schema.Struct({ pairingLinkId: Schema.String }), Schema.Struct({ threadId: Schema.String }),]);export type PersistenceErrorCorrelation = typeof PersistenceErrorCorrelation.Type; export class PersistenceSqlError extends Schema.TaggedErrorClass<PersistenceSqlError>()( "PersistenceSqlError", { operation: Schema.String, detail: Schema.optional(Schema.String), correlation: Schema.optional(PersistenceErrorCorrelation), cause: Schema.optional(Schema.Defect()), },) { override get message(): string { return this.detail === undefined ? `SQL error in ${this.operation}` : `SQL error in ${this.operation}: ${this.detail}`; }} export class PersistenceDecodeError extends Schema.TaggedErrorClass<PersistenceDecodeError>()( "PersistenceDecodeError", { operation: Schema.String, issue: Schema.String, correlation: Schema.optional(PersistenceErrorCorrelation), cause: Schema.optional(Schema.Defect()), },) { static fromSchemaError( operation: string, cause: Schema.SchemaError, correlation?: PersistenceErrorCorrelation, ): PersistenceDecodeError { return new PersistenceDecodeError({ operation, issue: summarizeSchemaIssue(cause.issue), ...(correlation === undefined ? {} : { correlation }), cause, }); } override get message(): string { return `Decode error in ${this.operation}: ${this.issue}`; }}const isPersistenceSqlError = Schema.is(PersistenceSqlError);const isPersistenceDecodeError = Schema.is(PersistenceDecodeError); // Kept for orchestration/projection call sites, which are being revamped separately.export function toPersistenceSqlError(operation: string) { return (cause: unknown): PersistenceSqlError => new PersistenceSqlError({ operation, detail: `Failed to execute ${operation}`, cause, });} // Kept for orchestration/projection call sites, which are being revamped separately.export function toPersistenceDecodeError(operation: string) { return (cause: Schema.SchemaError): PersistenceDecodeError => PersistenceDecodeError.fromSchemaError(operation, cause);} export const isPersistenceError = (u: unknown) => isPersistenceSqlError(u) || isPersistenceDecodeError(u); // ===============================// Provider Session Repository Errors// =============================== export class ProviderSessionRepositoryValidationError extends Schema.TaggedErrorClass<ProviderSessionRepositoryValidationError>()( "ProviderSessionRepositoryValidationError", { operation: Schema.String, issue: Schema.String, cause: Schema.optional(Schema.Defect()), },) { override get message(): string { return `Provider session repository validation failed in ${this.operation}: ${this.issue}`; }} export class ProviderSessionRepositoryPersistenceError extends Schema.TaggedErrorClass<ProviderSessionRepositoryPersistenceError>()( "ProviderSessionRepositoryPersistenceError", { operation: Schema.String, detail: Schema.String, cause: Schema.optional(Schema.Defect()), },) { override get message(): string { return `Provider session repository persistence error in ${this.operation}: ${this.detail}`; }} export type OrchestrationEventStoreError = PersistenceSqlError | PersistenceDecodeError; export type ProviderSessionRepositoryError = | ProviderSessionRepositoryValidationError | ProviderSessionRepositoryPersistenceError; export type OrchestrationCommandReceiptRepositoryError = | PersistenceSqlError | PersistenceDecodeError; export type ProviderSessionRuntimeRepositoryError = PersistenceSqlError | PersistenceDecodeError;export type AuthPairingLinkRepositoryError = PersistenceSqlError | PersistenceDecodeError;export type AuthSessionRepositoryError = PersistenceSqlError | PersistenceDecodeError; export type ProjectionRepositoryError = PersistenceSqlError | PersistenceDecodeError;
import * as Schema from "effect/Schema";
import * as SchemaIssue from "effect/SchemaIssue";
function summarizeSchemaIssue(issue: SchemaIssue.Issue): string {
switch (issue._tag) {
case "Filter":
case "Encoding":
case "Pointer":
return `${issue._tag}(${summarizeSchemaIssue(issue.issue)})`;
case "Composite":
case "AnyOf":
return `${issue._tag}(${issue.issues.map(summarizeSchemaIssue).join(",")})`;
default:
return issue._tag;
}
}
// ===============================
// Core Persistence Errors
// ===============================
export const PersistenceErrorCorrelation = Schema.Union([
Schema.Struct({ sessionId: Schema.String }),
Schema.Struct({ currentSessionId: Schema.String }),
Schema.Struct({ pairingLinkId: Schema.String }),
Schema.Struct({ threadId: Schema.String }),
]);
export type PersistenceErrorCorrelation = typeof PersistenceErrorCorrelation.Type;
export class PersistenceSqlError extends Schema.TaggedErrorClass<PersistenceSqlError>()(
"PersistenceSqlError",
{
operation: Schema.String,
detail: Schema.optional(Schema.String),
correlation: Schema.optional(PersistenceErrorCorrelation),
cause: Schema.optional(Schema.Defect()),
},
) {
override get message(): string {
return this.detail === undefined
? `SQL error in ${this.operation}`
: `SQL error in ${this.operation}: ${this.detail}`;
}
}
export class PersistenceDecodeError extends Schema.TaggedErrorClass<PersistenceDecodeError>()(
"PersistenceDecodeError",
{
operation: Schema.String,
issue: Schema.String,
correlation: Schema.optional(PersistenceErrorCorrelation),
cause: Schema.optional(Schema.Defect()),
},
) {
static fromSchemaError(
operation: string,
cause: Schema.SchemaError,
correlation?: PersistenceErrorCorrelation,
): PersistenceDecodeError {
return new PersistenceDecodeError({
operation,
issue: summarizeSchemaIssue(cause.issue),
...(correlation === undefined ? {} : { correlation }),
cause,
});
}
override get message(): string {
return `Decode error in ${this.operation}: ${this.issue}`;
}
}
const isPersistenceSqlError = Schema.is(PersistenceSqlError);
const isPersistenceDecodeError = Schema.is(PersistenceDecodeError);
// Kept for orchestration/projection call sites, which are being revamped separately.
export function toPersistenceSqlError(operation: string) {
return (cause: unknown): PersistenceSqlError =>
new PersistenceSqlError({
operation,
detail: `Failed to execute ${operation}`,
cause,
});
}
// Kept for orchestration/projection call sites, which are being revamped separately.
export function toPersistenceDecodeError(operation: string) {
return (cause: Schema.SchemaError): PersistenceDecodeError =>
PersistenceDecodeError.fromSchemaError(operation, cause);
}
export const isPersistenceError = (u: unknown) =>
isPersistenceSqlError(u) || isPersistenceDecodeError(u);
// ===============================
// Provider Session Repository Errors
// ===============================
export class ProviderSessionRepositoryValidationError extends Schema.TaggedErrorClass<ProviderSessionRepositoryValidationError>()(
"ProviderSessionRepositoryValidationError",
{
operation: Schema.String,
issue: Schema.String,
cause: Schema.optional(Schema.Defect()),
},
) {
override get message(): string {
return `Provider session repository validation failed in ${this.operation}: ${this.issue}`;
}
}
export class ProviderSessionRepositoryPersistenceError extends Schema.TaggedErrorClass<ProviderSessionRepositoryPersistenceError>()(
"ProviderSessionRepositoryPersistenceError",
{
operation: Schema.String,
detail: Schema.String,
cause: Schema.optional(Schema.Defect()),
},
) {
override get message(): string {
return `Provider session repository persistence error in ${this.operation}: ${this.detail}`;
}
}
export type OrchestrationEventStoreError = PersistenceSqlError | PersistenceDecodeError;
export type ProviderSessionRepositoryError =
| ProviderSessionRepositoryValidationError
| ProviderSessionRepositoryPersistenceError;
export type OrchestrationCommandReceiptRepositoryError =
| PersistenceSqlError
| PersistenceDecodeError;
export type ProviderSessionRuntimeRepositoryError = PersistenceSqlError | PersistenceDecodeError;
export type AuthPairingLinkRepositoryError = PersistenceSqlError | PersistenceDecodeError;
export type AuthSessionRepositoryError = PersistenceSqlError | PersistenceDecodeError;
export type ProjectionRepositoryError = PersistenceSqlError | PersistenceDecodeError;