|
1 | | -import { createNextIndicator, createPageable, type PageIndicator } from '@masknet/shared-base' |
| 1 | +import { createIndicator, createNextIndicator, createPageable, type PageIndicator } from '@masknet/shared-base' |
2 | 2 | import { compact } from 'lodash-es' |
3 | 3 | import urlcat from 'urlcat' |
4 | 4 | import { fetchCachedJSON } from '../entry-helpers.js' |
5 | | -import type { Event, EventResponse, ParsedEvent } from './types.js' |
| 5 | +import type { Event, EventDatesResponse, EventProvider, EventResponse, ParsedEvent } from './types.js' |
6 | 6 |
|
7 | | -const BASE_URL = 'https://mask-network-dev.firefly.land/v1/calendar/crypto_event_list' |
| 7 | +const BASE_URL = 'https://mask-network-dev.firefly.land/v1/calendar/' |
8 | 8 |
|
9 | 9 | function fixEventDate(event: Event): ParsedEvent { |
10 | 10 | return { |
@@ -59,35 +59,55 @@ function fixEvent(event: Event): ParsedEvent { |
59 | 59 | } |
60 | 60 | } |
61 | 61 |
|
| 62 | +const SIZE = 50 |
62 | 63 | export class Calendar { |
63 | 64 | static async getNewsList(startDate: number, endDate?: number, indicator?: PageIndicator) { |
64 | 65 | const res = await fetchCachedJSON<EventResponse>( |
65 | | - urlcat(BASE_URL, { |
| 66 | + urlcat(BASE_URL, 'crypto_event_list', { |
66 | 67 | provider_type: 'coincarp', |
| 68 | + size: SIZE, |
67 | 69 | start_date: Math.floor(startDate / 1000), |
68 | 70 | end_date: endDate ? Math.floor(endDate / 1000) : 0, |
69 | 71 | cursor: indicator?.id, |
70 | 72 | }), |
71 | 73 | ) |
72 | | - if (!res.data) return createPageable([], indicator, createNextIndicator(indicator)) |
| 74 | + if (!res.data?.events.length) return createPageable([], createIndicator(indicator)) |
73 | 75 | const events = res.data.events.map(fixEventDate) |
74 | | - return createPageable(events, indicator, createNextIndicator(indicator, res.data.page.next)) |
| 76 | + const next = events.length < SIZE ? undefined : res.data.page.next |
| 77 | + return createPageable( |
| 78 | + events, |
| 79 | + indicator, |
| 80 | + createNextIndicator(indicator, next && next !== '0' ? next : undefined), |
| 81 | + ) |
75 | 82 | } |
76 | 83 | static async getEventList(start_date: number, end_date: number, indicator?: PageIndicator) { |
77 | 84 | const res = await fetchCachedJSON<EventResponse>( |
78 | | - urlcat(BASE_URL, { |
| 85 | + urlcat(BASE_URL, 'crypto_event_list', { |
79 | 86 | provider_type: 'luma', |
80 | | - size: 20, |
| 87 | + size: SIZE, |
81 | 88 | cursor: indicator?.id, |
82 | 89 | start_date: start_date / 1000, |
83 | 90 | end_date: end_date / 1000, |
84 | 91 | }), |
85 | 92 | ) |
86 | | - if (!res?.data?.events.length) { |
87 | | - return createPageable([], indicator, createNextIndicator(indicator)) |
88 | | - } |
| 93 | + if (!res.data?.events.length) return createPageable([], createIndicator(indicator)) |
89 | 94 |
|
90 | 95 | const events = res.data.events.map(fixEvent) |
91 | | - return createPageable(events, indicator, createNextIndicator(indicator, res.data.page.next)) |
| 96 | + const next = events.length < SIZE ? undefined : res.data.page.next |
| 97 | + return createPageable( |
| 98 | + events, |
| 99 | + indicator, |
| 100 | + createNextIndicator(indicator, next && next !== '0' ? next : undefined), |
| 101 | + ) |
| 102 | + } |
| 103 | + static async getAvailableDates(type: EventProvider, start_date: number, end_date: number) { |
| 104 | + const res = await fetchCachedJSON<EventDatesResponse>( |
| 105 | + urlcat(BASE_URL, 'crypto_event_date_list', { |
| 106 | + provider_type: type, |
| 107 | + start_date: start_date / 1000, |
| 108 | + end_date: end_date / 1000, |
| 109 | + }), |
| 110 | + ) |
| 111 | + return (res.data || []).map((x) => x * 1000) |
92 | 112 | } |
93 | 113 | } |
0 commit comments