import type { CredentialBinding, CredentialBindingKey, CredentialHealth, CredentialInstanceId, CredentialInstanceRecord as CoreCredentialInstanceRecord, CredentialJsonRecord, CredentialSessionService, CredentialHealthTester as CoreCredentialHealthTester, CredentialSessionFactory as CoreCredentialSessionFactory, CredentialSessionFactoryArgs, AnyCredentialType, CredentialType as CoreCredentialType, } from "@codemation/core"; export type JsonRecord = CredentialJsonRecord; export type CredentialSecretRef = Readonly< | { kind: "db" } | { kind: "env"; envByField: Readonly>; } | { kind: "code"; value: JsonRecord; } >; export type CredentialInstanceRecord = Readonly< Omit, "secretRef"> & { secretRef: CredentialSecretRef } >; export type CredentialSecretMaterialRecord = Readonly<{ instanceId: CredentialInstanceId; encryptedJson: string; encryptionKeyId: string; schemaVersion: number; updatedAt: string; }>; export type CredentialOAuth2MaterialMetadata = Readonly<{ providerId: string; connectedEmail?: string; connectedAt?: string; scopes: ReadonlyArray; updatedAt: string; }>; export type CredentialOAuth2MaterialRecord = Readonly< { instanceId: CredentialInstanceId; } & CredentialSecretMaterialRecord & CredentialOAuth2MaterialMetadata >; export type CredentialOAuth2StateRecord = Readonly<{ state: string; instanceId: CredentialInstanceId; codeVerifier?: string; providerId?: string; requestedScopes: ReadonlyArray; createdAt: string; expiresAt: string; }>; export type CredentialTestRecord = Readonly<{ testId: string; instanceId: CredentialInstanceId; health: CredentialHealth; testedAt: string; expiresAt?: string; }>; export interface CredentialStore { listInstances(): Promise>; getInstance(instanceId: CredentialInstanceId): Promise; saveInstance( args: Readonly<{ instance: CredentialInstanceRecord; secretMaterial?: CredentialSecretMaterialRecord; }>, ): Promise; deleteInstance(instanceId: CredentialInstanceId): Promise; getSecretMaterial(instanceId: CredentialInstanceId): Promise; createOAuth2State(record: CredentialOAuth2StateRecord): Promise; consumeOAuth2State(state: string): Promise; getOAuth2Material(instanceId: CredentialInstanceId): Promise; saveOAuth2Material( args: Readonly<{ instanceId: CredentialInstanceId; encryptedJson: string; encryptionKeyId: string; schemaVersion: number; metadata: CredentialOAuth2MaterialMetadata; }>, ): Promise; deleteOAuth2Material(instanceId: CredentialInstanceId): Promise; upsertBinding(binding: CredentialBinding): Promise; getBinding(key: CredentialBindingKey): Promise; listBindingsByWorkflowId(workflowId: string): Promise>; saveTestResult(record: CredentialTestRecord): Promise; getLatestTestResult(instanceId: CredentialInstanceId): Promise; getLatestTestResults( instanceIds: ReadonlyArray, ): Promise>; } export type CredentialSessionFactory< TPublicConfig extends JsonRecord = JsonRecord, TMaterial extends JsonRecord = JsonRecord, TSession = unknown, > = CoreCredentialSessionFactory; export type CredentialHealthTester< TPublicConfig extends JsonRecord = JsonRecord, TMaterial extends JsonRecord = JsonRecord, > = CoreCredentialHealthTester; export type CredentialType< TPublicConfig extends JsonRecord = JsonRecord, TMaterial extends JsonRecord = JsonRecord, TSession = unknown, > = CoreCredentialType; export type { AnyCredentialType, CredentialSessionFactoryArgs }; export type MutableCredentialSessionService = CredentialSessionService & Readonly<{ evictInstance(instanceId: CredentialInstanceId): void; evictBinding(bindingKey: CredentialBindingKey): void; }>; export { CredentialTypeRegistryImpl } from "./CredentialTypeRegistryImpl"; export { CredentialBindingService } from "./CredentialBindingService"; export { CredentialInstanceService } from "./CredentialInstanceService"; export { CredentialMaterialResolver } from "./CredentialMaterialResolver"; export { CredentialOAuth2ScopeResolver } from "./CredentialOAuth2ScopeResolver"; export { CredentialRuntimeMaterialService } from "./CredentialRuntimeMaterialService"; export { CredentialFieldEnvOverlayService } from "./CredentialFieldEnvOverlayService"; export { CredentialSecretCipher } from "./CredentialSecretCipher"; export { CredentialSessionServiceImpl } from "./CredentialSessionServiceImpl"; export { CredentialTestService } from "./CredentialTestService";