@@ -8,7 +8,7 @@ const fetchTag = 'hsl-transit';
8
8
const client = createClient ( {
9
9
url : ENDPOINT ,
10
10
headers : {
11
- 'digitransit-subscription-key' : process . env . DIGITRANSIT_TOKEN ,
11
+ 'digitransit-subscription-key' : process . env . DIGITRANSIT_TOKEN ?? "" ,
12
12
} ,
13
13
shouldRetry : async ( err : NetworkError , retries : number ) => {
14
14
if ( retries > 3 ) {
@@ -17,7 +17,7 @@ const client = createClient({
17
17
}
18
18
19
19
// try again when service unavailable, could be temporary
20
- if ( [ 502 , 503 , 504 ] . some ( err . response ? .status ) ) {
20
+ if ( err . response ?. status != undefined && [ 502 , 503 , 504 ] . includes ( err . response . status ) ) {
21
21
// wait one second (you can alternatively time the promise resolution to your preference)
22
22
await new Promise ( ( resolve ) => setTimeout ( resolve , 1000 ) ) ;
23
23
return true ;
@@ -37,13 +37,38 @@ const client = createClient({
37
37
} ,
38
38
} ) ;
39
39
40
- export const getTransitData = async ( ) => {
40
+ type TransitData = {
41
+ stops : {
42
+ gtfsId : string
43
+ name : string
44
+ code : string
45
+ stoptimesWithoutPatterns : {
46
+ arrivalDelay : number
47
+ departureDelay : number
48
+ headsign : string
49
+ realtime : boolean
50
+ realtimeArrival : number
51
+ realtimeDeparture : number
52
+ realtimeState : string
53
+ serviceDay : number
54
+ scheduledArrival : number
55
+ scheduledDeparture : number
56
+ trip : {
57
+ tripHeadsign : string
58
+ route : {
59
+ type : number
60
+ }
61
+ routeShortName : string
62
+ }
63
+ } [ ]
64
+ } [ ]
65
+ }
66
+
67
+ export const getTransitData = async ( ) : Promise < TransitData > => {
41
68
'use server' ;
42
- let result ;
43
- console . log ( 'Fetching transit data' ) ;
44
69
return await new Promise ( ( resolve , reject ) => {
45
- let result ;
46
- client . subscribe (
70
+ let result : TransitData | null | undefined ;
71
+ client . subscribe < TransitData > (
47
72
{
48
73
query : `
49
74
{
@@ -75,9 +100,14 @@ export const getTransitData = async () => {
75
100
` ,
76
101
} ,
77
102
{
78
- next : ( data ) => ( result = data ) ,
79
- error : ( err ) => reject ,
80
- complete : ( ) => resolve ( result ) ,
103
+ next : ( data ) => ( result = data . data ) ,
104
+ error : ( ) => reject ,
105
+ complete : ( ) => {
106
+ if ( result )
107
+ resolve ( result )
108
+ else
109
+ reject ( new Error ( "received undefined result from transit API" ) )
110
+ } ,
81
111
}
82
112
) ;
83
113
} ) ;
0 commit comments