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.TaggedErrorClass<ProviderSetupError>()(
"ProviderSetupError",
{
instanceId: ProviderInstanceId,
operation: Schema.String,
detail: Schema.String,
cause: Schema.optional(Schema.Defect()),
},
) {
override get message(): string {
return this.detail;
}
}