1
1
import { Payload } from './generated-types'
2
2
import { Settings } from '../generated-types'
3
- import { RequestClient , PayloadValidationError } from '@segment/actions-core'
3
+ import { RequestClient , PayloadValidationError , MultiStatusResponse , JSONLikeObject } from '@segment/actions-core'
4
4
import { JSON , JSONItem , ResponseJSON } from './types'
5
5
6
6
export function validate ( payloads : Payload [ ] ) : Payload [ ] {
@@ -13,8 +13,10 @@ export function validate(payloads: Payload[]): Payload[]{
13
13
return payloads
14
14
}
15
15
16
- export async function send ( request : RequestClient , payloads : Payload [ ] , settings : Settings ) {
16
+ export async function send ( request : RequestClient , payloads : Payload [ ] , settings : Settings , isBatch : boolean ) {
17
+
17
18
validate ( payloads )
19
+
18
20
const json : JSON = payloads . map ( payload => buildJSON ( payload , settings . organizationId ) )
19
21
20
22
const response = await request < ResponseJSON > ( `${ settings . integrationURL } /subscriber` , {
@@ -25,6 +27,29 @@ export async function send(request: RequestClient, payloads: Payload[], settings
25
27
'Authorization' : `Bearer ${ settings . apiKey } `
26
28
}
27
29
} )
30
+
31
+ if ( isBatch ) {
32
+ const multiStatusResponse = new MultiStatusResponse ( )
33
+ response . data . forEach ( ( res , index ) => {
34
+ if ( res . code >= 200 && res . code < 300 ) {
35
+ multiStatusResponse . setSuccessResponseAtIndex ( index , {
36
+ status : res . code ,
37
+ sent : json [ index ] as unknown as JSONLikeObject ,
38
+ body : res as unknown as JSONLikeObject
39
+ } ) ;
40
+ } else {
41
+ multiStatusResponse . setErrorResponseAtIndex ( index , {
42
+ status : res . code ,
43
+ sent : json [ index ] as unknown as JSONLikeObject ,
44
+ body : res as unknown as JSONLikeObject ,
45
+ errormessage : res . description
46
+ } )
47
+ }
48
+ } )
49
+ return multiStatusResponse
50
+ }
51
+
52
+ return response
28
53
}
29
54
30
55
function buildJSON ( payload : Payload , organizationId : string ) : JSONItem {
0 commit comments