1import { ostiary, rpc, workerProxy } from "@common/worker.js";
2
3/**
4 * @import {Track} from "@definitions/types.d.ts"
5 * @import {ActionsWithTunnel, ProxiedActions} from "@common/worker.d.ts"
6 * @import {InputActions} from "@components/input/types.d.ts"
7 * @import {Actions as QueueEngineActions} from "@components/engine/queue/types.d.ts"
8 * @import {Actions} from "./types.d.ts"
9 */
10
11////////////////////////////////////////////
12// ACTIONS
13////////////////////////////////////////////
14
15/**
16 * @type {ActionsWithTunnel<Actions>["poolAvailable"]}
17 */
18export async function poolAvailable({ data, ports }) {
19 const cachedTracks = data.filter((t) => t.kind !== "placeholder");
20
21 /** @type {ProxiedActions<InputActions>} */
22 const input = workerProxy(() => ports.input);
23
24 /** @type {ProxiedActions<QueueEngineActions>} */
25 const queue = workerProxy(() => ports.queue);
26
27 ports.input.start();
28 ports.queue.start();
29
30 // Consult input
31 const groups = await input.groupConsult(cachedTracks);
32
33 /** @type {Track[]} */
34 let availableTracks = [];
35
36 Object.values(groups).forEach((value) => {
37 if (value.available === false) return;
38 availableTracks = availableTracks.concat(value.tracks);
39 }, []);
40
41 // Set pool
42 await queue.pool(availableTracks);
43}
44
45////////////////////////////////////////////
46// ⚡️
47////////////////////////////////////////////
48
49ostiary((context) => {
50 rpc(context, { poolAvailable });
51});