import * as Schema from "effect/Schema"; import { IsoDateTime, TrimmedNonEmptyString } from "./baseSchemas.ts"; import { ProviderDriverKind, ProviderInstanceId } from "./providerInstance.ts"; export const ProviderSetupInput = Schema.Struct({ instanceId: ProviderInstanceId, }); export type ProviderSetupInput = typeof ProviderSetupInput.Type; const SetupOperationId = TrimmedNonEmptyString.check(Schema.isMaxLength(128)); export const ProviderAuthState = Schema.Struct({ instanceId: ProviderInstanceId, phase: Schema.Literals([ "idle", "starting", "waiting", "verifying", "succeeded", "failed", "cancelled", ]), flowId: Schema.NullOr(SetupOperationId), authorizationUrl: Schema.NullOr(Schema.String), expiresAt: Schema.NullOr(IsoDateTime), message: Schema.NullOr(Schema.String), }); export type ProviderAuthState = typeof ProviderAuthState.Type; export const ProviderAuthCompleteInput = Schema.Struct({ instanceId: ProviderInstanceId, flowId: SetupOperationId, callbackUrl: TrimmedNonEmptyString.check(Schema.isMaxLength(16_384)), }); export type ProviderAuthCompleteInput = typeof ProviderAuthCompleteInput.Type; export const ProviderAuthCancelInput = Schema.Struct({ instanceId: ProviderInstanceId, flowId: SetupOperationId, }); export type ProviderAuthCancelInput = typeof ProviderAuthCancelInput.Type; const ByteCount = Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)); export const ProviderInstallState = Schema.Struct({ driver: ProviderDriverKind, operationId: Schema.NullOr(SetupOperationId), phase: Schema.Literals([ "idle", "downloading", "extracting", "verifying", "succeeded", "failed", "cancelled", ]), downloadedBytes: ByteCount, totalBytes: Schema.NullOr(ByteCount), version: Schema.NullOr(TrimmedNonEmptyString), installedVersion: Schema.NullOr(TrimmedNonEmptyString), canRemove: Schema.Boolean, message: Schema.NullOr(Schema.String), }); export type ProviderInstallState = typeof ProviderInstallState.Type; export const ProviderInstallCancelInput = Schema.Struct({ instanceId: ProviderInstanceId, operationId: SetupOperationId, }); export type ProviderInstallCancelInput = typeof ProviderInstallCancelInput.Type; /** Safe setup failure text. Never include OAuth codes, URLs, or native token data. */ export class ProviderSetupError extends Schema.TaggedError()( "ProviderSetupError", { instanceId: ProviderInstanceId, operation: Schema.String, detail: Schema.String, cause: Schema.optional(Schema.Defect()), }, ) { override get message(): string { return this.detail; } }