import type { Context } from '@deepseek-ai/cordis' import { Credentials } from '../src/index.ts' import type { CredentialInfo, CredentialRef, ResolvedCredential } from '../src/index.ts' /** * In-memory credentials provider for interface and consumer tests: one * always-writable `memory` source seeded from plugin config. */ export class MemoryCredentials extends Credentials { private readonly store = new Map() constructor(ctx: Context, seed: Record = {}) { super(ctx) for (const [key, value] of Object.entries(seed)) this.store.set(key, value) } override resolve(ref: CredentialRef): Promise { const value = this.store.get(ref) return Promise.resolve(value === undefined || value.length === 0 ? undefined : { value, source: 'memory' }) } override describe(ref: CredentialRef): Promise { const value = this.store.get(ref) const configured = value !== undefined && value.length > 0 return Promise.resolve({ configured, ...configured ? { source: 'memory' } : {}, writable: true, }) } override set(ref: CredentialRef, value: string): Promise { if (value.length === 0) { return Promise.reject(new Error('memory credentials: an empty value cannot be stored; use unset')) } this.store.set(ref, value) this.ctx.emit('credentials/updated', ref) return Promise.resolve() } override unset(ref: CredentialRef): Promise { if (this.store.delete(ref)) { this.ctx.emit('credentials/updated', ref) } return Promise.resolve() } }