import { computed, handler, NAME, pattern, Stream, type TrustedActionWrite, UI, type VNode, Writable, } from "commonfabric"; export const TRUSTED_SONG_ID_RECORDING_SURFACE = "TrustedSongIdRecordingSurface"; const RECORD_SONG_ID_ACTION = "TrustedRecordSongId"; export const recordTrustedSongId = handler< void, { songHint: Writable; identifiedSongId: Writable; } >((_, { songHint, identifiedSongId }) => { const normalized = songHint.get().trim().toLowerCase().replace(/\s+/g, "-"); identifiedSongId.set( normalized ? `Mock song id: ${normalized}` : "Mock song id: unavailable", ); }); export interface TrustedSongIdRecordingSurfaceInput { songHint: Writable; identifiedSongId: Writable; } export interface TrustedSongIdRecordingSurfaceOutput { [NAME]: string; [UI]: VNode; identifiedSongId: TrustedActionWrite< string, typeof recordTrustedSongId, typeof RECORD_SONG_ID_ACTION, typeof TRUSTED_SONG_ID_RECORDING_SURFACE >; recordSongId: Stream; } export const TrustedSongIdRecordingSurface = pattern< TrustedSongIdRecordingSurfaceInput, TrustedSongIdRecordingSurfaceOutput >(({ songHint, identifiedSongId }) => { const recordSongId = recordTrustedSongId({ songHint, identifiedSongId, }); return { [NAME]: computed(() => "Trusted Song ID Recording Surface"), [UI]: ( Trusted song ID recording Record only the song identification result, not raw audio. Mock classifier input {songHint} Record song ID Identified song
{identifiedSongId}
), identifiedSongId, recordSongId, }; });