| import { randomUUID } from "node:crypto"; |
|
|
| export class InMemoryMediaStore { |
| constructor({ ttlSeconds = 3600 } = {}) { |
| this.ttlSeconds = ttlSeconds; |
| this.items = new Map(); |
| } |
|
|
| save({ buffer, mimeType, extension }) { |
| this.cleanup(); |
|
|
| const id = randomUUID(); |
| const expiresAt = Date.now() + (this.ttlSeconds * 1000); |
|
|
| this.items.set(id, { |
| buffer, |
| mimeType, |
| extension, |
| expiresAt |
| }); |
|
|
| return { id, expiresAt }; |
| } |
|
|
| get(id) { |
| this.cleanup(); |
|
|
| const item = this.items.get(id); |
| if (!item) { |
| return null; |
| } |
|
|
| return item; |
| } |
|
|
| cleanup() { |
| const now = Date.now(); |
|
|
| for (const [id, item] of this.items.entries()) { |
| if (item.expiresAt <= now) { |
| this.items.delete(id); |
| } |
| } |
| } |
| } |
|
|