1515 **/
1616
1717module . exports = function ( RED ) {
18+ const SERVICE_IDENTIFIER = 'language-translator' ,
19+ LanguageTranslatorV3 = require ( 'ibm-watson/language-translator/v3' ) ,
20+ { IamAuthenticator } = require ( 'ibm-watson/auth' ) ,
21+ LANGS = {
22+ 'es' : 'Spanish' ,
23+ 'ar' : 'Arabic' ,
24+ 'arz' : 'Spoken Arabic' ,
25+ 'en' : 'English' ,
26+ 'fr' : 'French' ,
27+ 'it' : 'Italian' ,
28+ 'zh' : 'Chinese' ,
29+ 'ko' : 'Korean' ,
30+ 'pt' : 'Portuguese' ,
31+ 'de' : 'German' ,
32+ 'ja' : 'Japanese' ,
33+ 'nl' : 'Dutch' ,
34+ 'pl' : 'Polish' ,
35+ 'ru' : 'Russian' ,
36+ 'tr' : 'Turkish' ,
37+ 'zh-TW' : 'Taiwanese' ,
38+ 'zht' : 'Traditional Chinese' ,
39+ 'bg' : 'Bulgarian' ,
40+ 'ca' : 'Catalan' ,
41+ 'cs' : 'Czech' ,
42+ 'da' : 'Danish' ,
43+ 'el' : 'Greek' ,
44+ 'et' : 'Estonian' ,
45+ 'fi' : 'Finnish' ,
46+ 'ga' : 'Galican' ,
47+ 'he' : 'Hebrew' ,
48+ 'hi' : 'Hindi' ,
49+ 'hr' : 'Croatian' ,
50+ 'hu' : 'Hungarian' ,
51+ 'id' : 'Indonesian' ,
52+ 'lt' : 'Lithuanian' ,
53+ 'ms' : 'Malay' ,
54+ 'nb' : 'Norwegian Bokmål' ,
55+ 'ro' : 'Romanian' ,
56+ 'sk' : 'Slovak' ,
57+ 'sl' : 'Slovenian' ,
58+ 'sv' : 'Swedish' ,
59+ 'th' : 'Thai'
60+ } ;
61+
1862 var pkg = require ( '../../package.json' ) ,
19- LanguageTranslatorV3 = require ( 'watson-developer-cloud/language-translator/v3' ) ,
2063 cfenv = require ( 'cfenv' ) ,
2164 username = null , password = null , sUsername = null , sPassword = null ,
2265 apikey = null , sApikey = null ,
23- service = cfenv . getAppEnv ( ) . getServiceCreds ( / l a n g u a g e t r a n s l a t o r / i) ,
66+ payloadutils = require ( '../../utilities/payload-utils' ) ,
67+ serviceutils = require ( '../../utilities/service-utils' ) ,
68+ responseutils = require ( '../../utilities/response-utils' ) ,
69+ //service = cfenv.getAppEnv().getServiceCreds(/language translator/i),
70+ service = serviceutils . getServiceCreds ( SERVICE_IDENTIFIER ) ,
2471 endpoint = '' ,
2572 sEndpoint = 'https://gateway.watsonplatform.net/language-translator/api' ;
2673
@@ -68,9 +115,10 @@ module.exports = function (RED) {
68115 // The node has received an input as part of a flow, need to determine
69116 // what the request is for, and based on that if the required fields
70117 // have been provided.
71- this . on ( 'input' , function ( msg ) {
118+ this . on ( 'input' , function ( msg , send , done ) {
72119
73- var message = '' ,
120+ let message = '' ,
121+ authSettings = { } ,
74122 serviceSettings = {
75123 version : '2018-05-01' ,
76124 headers : {
@@ -85,12 +133,14 @@ module.exports = function (RED) {
85133 }
86134
87135 if ( apikey ) {
88- serviceSettings . iam_apikey = apikey ;
136+ authSettings . apikey = apikey ;
89137 } else {
90- serviceSettings . username = username ;
91- serviceSettings . password = password ;
138+ authSettings . username = username ;
139+ authSettings . password = password ;
92140 }
93141
142+ serviceSettings . authenticator = new IamAuthenticator ( authSettings ) ;
143+
94144 endpoint = sEndpoint ;
95145 if ( ( ! config [ 'default-endpoint' ] ) && config [ 'service-endpoint' ] ) {
96146 endpoint = config [ 'service-endpoint' ] ;
@@ -118,42 +168,26 @@ module.exports = function (RED) {
118168 }
119169
120170 function makeLanguageBeautifier ( string ) {
121- var langs = {
122- 'es' : 'Spanish' ,
123- 'ar' : 'Arabic' ,
124- 'arz' : 'Spoken Arabic' ,
125- 'en' : 'English' ,
126- 'fr' : 'French' ,
127- 'it' : 'Italian' ,
128- 'zh' : 'Chinese' ,
129- 'ko' : 'Korean' ,
130- 'pt' : 'Portuguese' ,
131- 'de' : 'German' ,
132- 'ja' : 'Japanese' ,
133- 'nl' : 'Dutch' ,
134- 'pl' : 'Polish' ,
135- 'ru' : 'Russian' ,
136- 'tr' : 'Turkish' ,
137- 'zh-TW' : 'Taiwanese' ,
138- 'zht' : 'Traditional Chinese'
139- } ;
140- return langs [ string ] ;
171+ if ( LANGS [ string ] ) {
172+ return LANGS [ string ] ;
173+ }
174+ return string ;
141175 }
142176 // ---- END OF UTILITY FUNCTIONS ----
143177
144178 if ( lt ) {
145- lt . listModels ( { } , function ( err , models ) {
146- if ( err ) {
147- node . error ( err , msg ) ;
148- } else {
149- msg . payload = models ;
179+ node . status ( { fill : 'blue' , shape : 'dot' , text : 'fetching models' } ) ;
180+ lt . listModels ( { } )
181+ . then ( ( response ) => {
182+ node . status ( { fill : 'blue' , shape : 'dot' , text : 'parsing response' } ) ;
183+ responseutils . parseResponseFor ( msg , response , ' models' ) ;
150184
185+ msg . payload = msg . models ;
151186 // the overall array would be used to populate the dropdown list
152187 var dropdown_array = [ ] ;
153188 var domain_src_target_model = [ ] ;
154189 var domain_src_target = '' ;
155190 var sTmp3 = '' ;
156- msg . options_dropdown = { } ;
157191 msg . dropdown_object = { } ;
158192
159193 // Populating 'DOMAIN's into an array which would be returned by the msg object
@@ -176,13 +210,13 @@ module.exports = function (RED) {
176210 msg . options_target_lang = { } ;
177211 msg . target_lang_object = { } ;
178212
179- for ( var i = 0 ; i < msg . payload . models . length ; i ++ ) {
180- ldom [ i ] = msg . payload . models [ i ] . domain ;
213+ for ( var i = 0 ; i < msg . models . length ; i ++ ) {
214+ ldom [ i ] = msg . models [ i ] . domain ;
181215 ldom [ i ] = capitalize ( ldom [ i ] ) ;
182- model_id_array [ i ] = msg . payload . models [ i ] . model_id ;
183- src_lang_array [ i ] = msg . payload . models [ i ] . source ;
216+ model_id_array [ i ] = msg . models [ i ] . model_id ;
217+ src_lang_array [ i ] = msg . models [ i ] . source ;
184218 src_lang_array [ i ] = makeLanguageBeautifier ( src_lang_array [ i ] ) ;
185- target_lang_array [ i ] = msg . payload . models [ i ] . target ;
219+ target_lang_array [ i ] = msg . models [ i ] . target ;
186220 target_lang_array [ i ] = makeLanguageBeautifier ( target_lang_array [ i ] ) ;
187221
188222 sTmp3 = makeLanguageBeautifier ( target_lang_array [ i ] ) ;
@@ -226,9 +260,14 @@ module.exports = function (RED) {
226260 msg . target_lang_object = Object . keys ( msg . options_target_lang ) ;
227261 msg . dropdown_object = dropdown_array ;
228262
229- node . send ( msg ) ;
230- }
231- } ) ;
263+ node . status ( { } ) ;
264+ send ( msg ) ;
265+ done ( ) ;
266+ } )
267+ . catch ( ( err ) => {
268+ let errMsg = payloadutils . reportError ( node , msg , err ) ;
269+ done ( errMsg ) ;
270+ } ) ;
232271 } else {
233272 node . error ( 'Error instantiating the language service' , msg ) ;
234273 }
0 commit comments