@@ -3,7 +3,7 @@ import { promises as fsPromises } from 'fs';
3
3
import { BaseProtocol } from './protocol/base-protocol' ;
4
4
import BaseConnection from './connection/base-connection' ;
5
5
import { JsonProtocol } from './protocol/json-protocol' ;
6
- import { ResponseTypes , RequestTypes } from './utils/constants' ;
6
+ import { ResponseTypes , RequestTypes , ErrorTypes } from './utils/constants' ;
7
7
import {
8
8
FunctionCallRequest ,
9
9
FunctionCallResponse ,
@@ -12,6 +12,7 @@ import {
12
12
} from './models/messages' ;
13
13
import UnixSocketConnection from './connection/unix-socket-connection' ;
14
14
import InetSocketConnection from './connection/inet-socket-connection' ;
15
+ import { JunoError } from './models/errors' ;
15
16
16
17
export default class JunoModule {
17
18
@@ -139,54 +140,72 @@ export default class JunoModule {
139
140
}
140
141
141
142
return new Promise ( ( resolve , reject ) => {
142
- this . requests [ request . requestId ] = ( response : any ) => {
143
- if ( response ) {
144
- resolve ( response ) ;
143
+ this . requests [ request . requestId ] = ( err : boolean | Error , response : any ) => {
144
+ if ( err ) {
145
+ reject ( err ) ;
145
146
} else {
146
- reject ( response ) ;
147
+ resolve ( response ) ;
147
148
}
148
149
} ;
149
150
} ) ;
150
151
}
151
152
152
153
private async onDataHandler ( data : Buffer ) {
153
154
const response = this . protocol . decode ( data ) ;
154
- let value ;
155
+ let value : any = true ;
156
+ let err : boolean | Error = false ;
155
157
switch ( response . type ) {
156
158
case ResponseTypes . ModuleRegistered : {
157
- value = true ;
159
+ err = false ;
158
160
break ;
159
161
}
160
162
case ResponseTypes . FunctionResponse : {
163
+ err = false ;
161
164
value = ( response as FunctionCallResponse ) . data ;
162
165
break ;
163
166
}
164
167
case ResponseTypes . FunctionDeclared : {
165
- value = true ;
168
+ err = false ;
166
169
break ;
167
170
}
168
171
case ResponseTypes . HookRegistered : {
169
- value = true ;
172
+ err = false ;
170
173
break ;
171
174
}
172
175
case ResponseTypes . HookTriggered : {
173
- value = await this . executeHookTriggered ( response as TriggerHookRequest ) ;
176
+ try {
177
+ await this . executeHookTriggered ( response as TriggerHookRequest ) ;
178
+ err = false ;
179
+ } catch ( e ) {
180
+ err = e ;
181
+ }
174
182
break ;
175
183
}
176
184
177
185
case RequestTypes . FunctionCall : {
178
- this . executeFunctionCall ( response as FunctionCallRequest ) ;
186
+ try {
187
+ await this . executeFunctionCall ( response as FunctionCallRequest ) ;
188
+ } catch ( e ) {
189
+ err = e ;
190
+ }
179
191
break ;
180
192
}
181
193
182
194
default : {
183
- value = false ;
184
- break ;
195
+ err = TypeError ( "Error message/Invalid message received from juno" ) ;
185
196
}
186
197
}
187
198
199
+ if ( err instanceof JunoError ) {
200
+ this . sendRequest ( {
201
+ requestId : response . requestId ,
202
+ type : ResponseTypes . Error ,
203
+ error : err . errCode ,
204
+ } ) ;
205
+ }
206
+
188
207
if ( this . requests [ response . requestId ] ) {
189
- this . requests [ response . requestId ] ( value ) ;
208
+ this . requests [ response . requestId ] ( err , value ) ;
190
209
delete this . requests [ response . requestId ] ;
191
210
}
192
211
}
@@ -202,10 +221,9 @@ export default class JunoModule {
202
221
type : ResponseTypes . FunctionResponse ,
203
222
data : res || { }
204
223
} ) ;
205
- return true ;
206
224
} else {
207
225
// Function wasn't found in the module.
208
- return false ;
226
+ throw new JunoError ( ErrorTypes . UnkownFunction ) ;
209
227
}
210
228
}
211
229
@@ -222,10 +240,6 @@ export default class JunoModule {
222
240
listener ( request . data || { } ) ;
223
241
}
224
242
}
225
- return true ;
226
- } else {
227
- // This moddule triggered the hook.
228
- return true ;
229
- }
243
+ }
230
244
}
231
245
}
0 commit comments