1 | import * as wmill from "https://deno.land/x/windmill@v1.39.0/mod.ts" |
2 |
|
3 | export async function main() { |
4 | const state = await wmill.getInternalState(); |
5 | const previousLatestId = state?.latestId ?? 0; |
6 | |
7 | |
8 | const data = await (await fetch('https://hub.windmill.dev/searchData')).json(); |
9 | const asks = assertAsks(data.asks); |
10 | const newAsks = asks.filter(ask => ask.ask_id > previousLatestId); |
11 |
|
12 | |
13 | const latestId: number = asks.reduce((prevId, ask) => { |
14 | return Math.max(prevId, ask.ask_id); |
15 | }, previousLatestId); |
16 | const newState = { |
17 | ...state, |
18 | latestId, |
19 | }; |
20 | await wmill.setInternalState(newState); |
21 | console.info('old state', state); |
22 | console.info('new state', newState); |
23 | |
24 | |
25 | return newAsks; |
26 | } |
27 |
|
28 | function assertAsks(asks: any): { ask_id: number }[] { |
29 | if (!Array.isArray(asks)) { |
30 | throw Error('"asks" must be an array'); |
31 | } |
32 | if (!asks.every((ask: any) => !!ask && Number.isInteger(ask.ask_id))) { |
33 | throw Error('Not all asks have an integer "ask_id"'); |
34 | } |
35 | return asks; |
36 | } |