1
1
let http = require ( 'http' )
2
- let { getPorts , isNode18 , useAWS } = require ( '../lib' )
2
+ let { getAwsClient , getPorts , useAWS } = require ( '../lib' )
3
3
let ledger = { events : { } , queues : { } }
4
- let sns , snsClient , sqs , sqsClient , port
4
+ let client , port
5
5
6
6
/**
7
7
* Invoke
@@ -10,7 +10,6 @@ let sns, snsClient, sqs, sqsClient, port
10
10
*/
11
11
module . exports = function publishFactory ( arc , type ) {
12
12
let factory = type === 'events' ? eventFactory : queueFactory
13
- let publishAWS = factory ( arc )
14
13
return function publish ( params , callback ) {
15
14
if ( ! params . name ) {
16
15
throw ReferenceError ( 'missing params.name' )
@@ -44,9 +43,24 @@ module.exports = function publishFactory (arc, type) {
44
43
}
45
44
} )
46
45
}
47
- else {
46
+ else if ( client ) {
47
+ let publishAWS = factory ( arc )
48
48
publishAWS ( params , callback )
49
49
}
50
+ else {
51
+ let { AWS_REGION } = process . env
52
+ getAwsClient ( {
53
+ region : AWS_REGION || 'us-west-2' ,
54
+ plugins : [ '@aws-lite/sns' , '@aws-lite/sqs' ] ,
55
+ } , ( err , _client ) => {
56
+ if ( err ) callback ( err )
57
+ else {
58
+ client = _client
59
+ let publishAWS = factory ( arc )
60
+ publishAWS ( params , callback )
61
+ }
62
+ } )
63
+ }
50
64
51
65
return promise
52
66
}
@@ -75,25 +89,14 @@ function _publishSandbox (type, params, callback) {
75
89
76
90
function eventFactory ( arc ) {
77
91
return function live ( { name, payload } , callback ) {
78
- if ( ! snsClient ) {
79
- if ( isNode18 ) {
80
- let { SNS } = require ( '@aws-sdk/client-sns' )
81
- sns = new SNS
82
- }
83
- else {
84
- let SNS = require ( 'aws-sdk/clients/sns' )
85
- sns = new SNS
86
- }
87
- }
88
- snsClient = ( params , callback ) => {
89
- return sns . publish ( params , callback )
90
- }
91
92
92
93
function publish ( arn , payload , callback ) {
93
- snsClient ( {
94
+ client . sns . Publish ( {
94
95
TopicArn : arn ,
95
96
Message : JSON . stringify ( payload )
96
- } , callback )
97
+ } )
98
+ . then ( result => callback ( null , result ) )
99
+ . catch ( callback )
97
100
}
98
101
99
102
function cacheLedgerAndPublish ( serviceMap ) {
@@ -115,42 +118,31 @@ function eventFactory (arc) {
115
118
116
119
function queueFactory ( arc ) {
117
120
return function live ( { name, payload, delaySeconds, groupID } , callback ) {
118
- if ( ! sqsClient ) {
119
- if ( isNode18 ) {
120
- let { SQS } = require ( '@aws-sdk/client-sqs' )
121
- sqs = new SQS
122
- }
123
- else {
124
- let SQS = require ( 'aws-sdk/clients/sqs' )
125
- sqs = new SQS
126
- }
127
- }
128
- sqsClient = ( params , callback ) => {
129
- return sqs . sendMessage ( params , callback )
130
- }
131
121
132
- function publish ( arn , payload , callback ) {
122
+ function publish ( url , payload , callback ) {
133
123
let params = {
134
- QueueUrl : arn ,
124
+ QueueUrl : url ,
135
125
DelaySeconds : delaySeconds || 0 ,
136
126
MessageBody : JSON . stringify ( payload )
137
127
}
138
- if ( arn . endsWith ( '.fifo' ) ) {
128
+ if ( url . endsWith ( '.fifo' ) ) {
139
129
params . MessageGroupId = groupID || name
140
130
}
141
- sqsClient ( params , callback )
131
+ client . sqs . SendMessage ( params )
132
+ . then ( result => callback ( null , result ) )
133
+ . catch ( callback )
142
134
}
143
135
144
136
function cacheLedgerAndPublish ( serviceMap ) {
145
137
ledger . queues = serviceMap . queues
146
- arn = ledger . queues [ name ]
147
- if ( ! arn ) callback ( ReferenceError ( `${ name } queue not found` ) )
148
- else publish ( arn , payload , callback )
138
+ url = ledger . queues [ name ]
139
+ if ( ! url ) callback ( ReferenceError ( `${ name } queue not found` ) )
140
+ else publish ( url , payload , callback )
149
141
}
150
142
151
- let arn = ledger . queues [ name ]
152
- if ( arn ) {
153
- publish ( arn , payload , callback )
143
+ let url = ledger . queues [ name ]
144
+ if ( url ) {
145
+ publish ( url , payload , callback )
154
146
}
155
147
else {
156
148
arc . services ( ) . then ( cacheLedgerAndPublish ) . catch ( callback )
0 commit comments