import { CredentialProvider } from '@deepseek-ai/dsh-credentials' import type { CredentialInfo, CredentialKey, CredentialRecord, CredentialRecordEntry, CredentialRecordInfo, CredentialRef, ResolvedCredential, } from '@deepseek-ai/dsh-credentials' /** * In-memory credentials provider for the authorization suite. Only the record * half is exercised — the seam's whole interest in this service is whether a * flow left a record behind — so the reference half answers "nothing stored". */ // TODO: near-duplicate of the record half of // packages/credentials/credentials/tests/memory.ts; fold both into a shared // test-support double when a third suite needs one. export class MemoryCredentials extends CredentialProvider { private readonly records = new Map() override resolve(_ref: CredentialRef): Promise { return Promise.resolve(undefined) } override describe(_ref: CredentialRef): Promise { return Promise.resolve({ configured: false, writable: true }) } override set(_ref: CredentialRef, _value: string): Promise { return Promise.resolve() } override unset(_ref: CredentialRef): Promise { return Promise.resolve() } override readRecord(key: CredentialKey): Promise { return Promise.resolve(this.records.get(key)) } override describeRecord(key: CredentialKey): Promise { const stored = this.records.get(key) return Promise.resolve(stored === undefined ? { configured: false, writable: true } : { configured: true, kind: stored.kind, writable: true }) } override listRecords(): Promise { return Promise.resolve([...this.records].map(([key, record]) => ({ key, kind: record.kind }))) } override async modifyRecord( key: CredentialKey, mutate: (current: CredentialRecord | undefined) => Promise, ): Promise { const current = this.records.get(key) const next = await mutate(current) if (next === undefined) return current this.records.set(key, next) this.ctx.emit('credentials/record-updated', key) return next } override deleteRecord(key: CredentialKey): Promise { if (this.records.delete(key)) this.ctx.emit('credentials/record-updated', key) return Promise.resolve() } }