cisco-axl 1.3.0 → 1.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +10 -0
- package/README.md +1 -1
- package/dist/index.js +94 -4
- package/dist/index.js.map +1 -1
- package/index.js +116 -4
- package/package.json +1 -1
- package/src/index.ts +112 -10
- package/examples/change_phone_model/changePhoneModel.js +0 -164
- package/examples/copy_phone/copyPhone.js +0 -45
- package/examples/copy_sip_trunk/README.md +0 -3
- package/examples/copy_sip_trunk/copySipTrunk.js +0 -56
- package/examples/getTagsForOperation.js +0 -15
- package/examples/sql/README.md +0 -7
- package/examples/sql/cfa.sql +0 -14
- package/examples/sql/mask.sql +0 -7
- package/examples/sql/max_busy.sql +0 -14
- package/examples/sql/sqlQuery.js +0 -39
- package/examples/sql/unassignedDn.sql +0 -25
- package/examples/templates/README.md +0 -11
- package/examples/templates/add_phone_update_line/addPhoneUpdateLine.js +0 -49
- package/examples/templates/add_phone_update_line/lineTemplate.json +0 -12
- package/examples/templates/add_phone_update_line/phoneTemplate.json +0 -151
- package/examples/templates/save_search_as_template/saveSearch.js +0 -52
- package/examples/templates/update_phone_update_line/lineTemplate.json +0 -12
- package/examples/templates/update_phone_update_line/phoneTemplate.json +0 -31
- package/examples/templates/update_phone_update_line/updatePhoneUpdateLine.js +0 -106
- package/examples/typescript/README.md +0 -44
- package/examples/typescript/example.ts +0 -94
- package/test/tests.js +0 -178
- package/test/wsdl.js +0 -41
package/README.md
CHANGED
|
@@ -222,7 +222,7 @@ See the `examples/typescript` directory for more TypeScript examples.
|
|
|
222
222
|
|
|
223
223
|
- Add more promised based examples, particularly a Promise.All() example.
|
|
224
224
|
- Add example for reading in CSV and performing a bulk exercise with variables.
|
|
225
|
-
- Add example for saving SQL output to CSV
|
|
225
|
+
- Add example for saving SQL output to CSV.
|
|
226
226
|
|
|
227
227
|
## Giving Back
|
|
228
228
|
|
package/dist/index.js
CHANGED
|
@@ -161,18 +161,108 @@ class axlService {
|
|
|
161
161
|
Object.keys(tags).forEach((k) => (tags[k] === "" || k.includes(dataContainerIdentifierTails)) && delete tags[k]);
|
|
162
162
|
return new Promise((resolve, reject) => {
|
|
163
163
|
soap.soap.createClient(options.url, wsdlOptions, function (err, client) {
|
|
164
|
-
const customRequestHeader = { connection: "keep-alive" };
|
|
165
164
|
if (err) {
|
|
166
165
|
reject(err);
|
|
167
166
|
return;
|
|
168
167
|
}
|
|
168
|
+
// Get the properly versioned namespace URL
|
|
169
|
+
const namespaceUrl = `http://www.cisco.com/AXL/API/${options.version}`;
|
|
170
|
+
// 1. Set envelope key
|
|
171
|
+
client.wsdl.options = {
|
|
172
|
+
...client.wsdl.options,
|
|
173
|
+
envelopeKey: "soapenv", // Change default 'soap' to 'soapenv'
|
|
174
|
+
};
|
|
175
|
+
// 2. Define namespaces with the correct version
|
|
176
|
+
client.wsdl.definitions.xmlns.ns = namespaceUrl;
|
|
177
|
+
// Remove ns1 if it exists
|
|
178
|
+
if (client.wsdl.definitions.xmlns.ns1) {
|
|
179
|
+
delete client.wsdl.definitions.xmlns.ns1;
|
|
180
|
+
}
|
|
181
|
+
const customRequestHeader = {
|
|
182
|
+
connection: "keep-alive",
|
|
183
|
+
SOAPAction: `"CUCM:DB ver=${options.version} ${operation}"`,
|
|
184
|
+
};
|
|
169
185
|
client.setSecurity(new soap.soap.BasicAuthSecurity(options.username, options.password));
|
|
170
186
|
client.setEndpoint(options.endpoint);
|
|
171
187
|
client.on("soapError", function (err) {
|
|
172
188
|
reject(err.root.Envelope.Body.Fault);
|
|
173
189
|
});
|
|
190
|
+
// Check if the operation function exists
|
|
191
|
+
if (!client.AXLAPIService || !client.AXLAPIService.AXLPort || typeof client.AXLAPIService.AXLPort[operation] !== "function") {
|
|
192
|
+
// For operations that aren't found, try a manual approach
|
|
193
|
+
if (operation.startsWith("apply") || operation.startsWith("reset")) {
|
|
194
|
+
// Determine which parameter to use (name or uuid)
|
|
195
|
+
const operationObj = tags[operation] || tags;
|
|
196
|
+
// Check if uuid or name is provided
|
|
197
|
+
let paramTag, paramValue;
|
|
198
|
+
if (operationObj.uuid) {
|
|
199
|
+
paramTag = "uuid";
|
|
200
|
+
paramValue = operationObj.uuid;
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
paramTag = "name";
|
|
204
|
+
paramValue = operationObj.name;
|
|
205
|
+
}
|
|
206
|
+
const rawXml = `<?xml version="1.0" encoding="UTF-8"?>
|
|
207
|
+
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="${namespaceUrl}">
|
|
208
|
+
<soapenv:Header/>
|
|
209
|
+
<soapenv:Body>
|
|
210
|
+
<ns:${operation}>
|
|
211
|
+
<${paramTag}>${paramValue}</${paramTag}>
|
|
212
|
+
</ns:${operation}>
|
|
213
|
+
</soapenv:Body>
|
|
214
|
+
</soapenv:Envelope>`;
|
|
215
|
+
// Use client.request for direct XML request
|
|
216
|
+
client._request(options.endpoint, rawXml, function (err, body, response) {
|
|
217
|
+
if (err) {
|
|
218
|
+
reject(err);
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
// Parse the response
|
|
222
|
+
try {
|
|
223
|
+
const result = { return: "Success" }; // Default success response
|
|
224
|
+
resolve(result);
|
|
225
|
+
}
|
|
226
|
+
catch (parseError) {
|
|
227
|
+
reject(parseError);
|
|
228
|
+
}
|
|
229
|
+
}, customRequestHeader);
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
reject(new Error(`Operation "${operation}" not found`));
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// Get the operation function - confirmed to exist at this point
|
|
174
238
|
const axlFunc = client.AXLAPIService.AXLPort[operation];
|
|
175
|
-
|
|
239
|
+
// Define namespace context with the correct version
|
|
240
|
+
const nsContext = {
|
|
241
|
+
ns: namespaceUrl,
|
|
242
|
+
};
|
|
243
|
+
// Prepare message for specific operations
|
|
244
|
+
let message = tags;
|
|
245
|
+
// Handle operations that start with "apply" or "reset"
|
|
246
|
+
if (operation.startsWith("apply") || operation.startsWith("reset")) {
|
|
247
|
+
const operationKey = operation;
|
|
248
|
+
// If there's a nested structure, flatten it
|
|
249
|
+
if (tags[operationKey]) {
|
|
250
|
+
// Check if uuid or name is provided in the nested structure
|
|
251
|
+
if (tags[operationKey].uuid) {
|
|
252
|
+
message = { uuid: tags[operationKey].uuid };
|
|
253
|
+
}
|
|
254
|
+
else if (tags[operationKey].name) {
|
|
255
|
+
message = { name: tags[operationKey].name };
|
|
256
|
+
}
|
|
257
|
+
// If neither uuid nor name is provided, try to use any available
|
|
258
|
+
else {
|
|
259
|
+
// Try to use uuid or name from the top level as fallback
|
|
260
|
+
message = tags.uuid ? { uuid: tags.uuid } : { name: tags.name };
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
// Execute the operation
|
|
265
|
+
axlFunc(message, function (err, result) {
|
|
176
266
|
if (err) {
|
|
177
267
|
reject(err);
|
|
178
268
|
return;
|
|
@@ -188,9 +278,9 @@ class axlService {
|
|
|
188
278
|
resolve(output);
|
|
189
279
|
}
|
|
190
280
|
else {
|
|
191
|
-
|
|
281
|
+
resolve(result || { return: "Success" });
|
|
192
282
|
}
|
|
193
|
-
},
|
|
283
|
+
}, nsContext, customRequestHeader);
|
|
194
284
|
});
|
|
195
285
|
});
|
|
196
286
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/index.js
CHANGED
|
@@ -4,6 +4,7 @@ const path = require("path");
|
|
|
4
4
|
const wsdlOptions = {
|
|
5
5
|
attributesKey: "attributes",
|
|
6
6
|
valueKey: "value",
|
|
7
|
+
ns1: "ns",
|
|
7
8
|
};
|
|
8
9
|
|
|
9
10
|
/**
|
|
@@ -38,6 +39,7 @@ class axlService {
|
|
|
38
39
|
for (const [key, value] of Object.entries(description.AXLAPIService.AXLPort)) {
|
|
39
40
|
outputArr.push(value.name);
|
|
40
41
|
}
|
|
42
|
+
|
|
41
43
|
const sortAlphaNum = (a, b) => a.localeCompare(b, "en", { numeric: true });
|
|
42
44
|
const matches = (substring, array) =>
|
|
43
45
|
array.filter((element) => {
|
|
@@ -101,10 +103,33 @@ class axlService {
|
|
|
101
103
|
|
|
102
104
|
return new Promise((resolve, reject) => {
|
|
103
105
|
soap.createClient(options.url, wsdlOptions, function (err, client) {
|
|
104
|
-
var customRequestHeader = { connection: "keep-alive" };
|
|
105
106
|
if (err) {
|
|
106
107
|
reject(err);
|
|
108
|
+
return;
|
|
107
109
|
}
|
|
110
|
+
|
|
111
|
+
// Get the properly versioned namespace URL
|
|
112
|
+
const namespaceUrl = `http://www.cisco.com/AXL/API/${options.version}`;
|
|
113
|
+
|
|
114
|
+
// 1. Set envelope key
|
|
115
|
+
client.wsdl.options = {
|
|
116
|
+
...client.wsdl.options,
|
|
117
|
+
envelopeKey: "soapenv", // Change default 'soap' to 'soapenv'
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
// 2. Define namespaces with the correct version
|
|
121
|
+
client.wsdl.definitions.xmlns.ns = namespaceUrl;
|
|
122
|
+
|
|
123
|
+
// Remove ns1 if it exists
|
|
124
|
+
if (client.wsdl.definitions.xmlns.ns1) {
|
|
125
|
+
delete client.wsdl.definitions.xmlns.ns1;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
var customRequestHeader = {
|
|
129
|
+
connection: "keep-alive",
|
|
130
|
+
SOAPAction: `"CUCM:DB ver=${options.version} ${operation}"`,
|
|
131
|
+
};
|
|
132
|
+
|
|
108
133
|
client.setSecurity(new soap.BasicAuthSecurity(options.username, options.password));
|
|
109
134
|
client.setEndpoint(options.endpoint);
|
|
110
135
|
|
|
@@ -112,13 +137,100 @@ class axlService {
|
|
|
112
137
|
reject(err.root.Envelope.Body.Fault);
|
|
113
138
|
});
|
|
114
139
|
|
|
140
|
+
// Check if the operation function exists
|
|
141
|
+
if (!client.AXLAPIService || !client.AXLAPIService.AXLPort || typeof client.AXLAPIService.AXLPort[operation] !== "function") {
|
|
142
|
+
// For operations that aren't found, try a manual approach
|
|
143
|
+
if (operation.startsWith("apply") || operation.startsWith("reset")) {
|
|
144
|
+
// Determine which parameter to use (name or uuid)
|
|
145
|
+
const operationObj = tags[operation] || tags;
|
|
146
|
+
|
|
147
|
+
// Check if uuid or name is provided
|
|
148
|
+
let paramTag, paramValue;
|
|
149
|
+
|
|
150
|
+
if (operationObj.uuid) {
|
|
151
|
+
paramTag = "uuid";
|
|
152
|
+
paramValue = operationObj.uuid;
|
|
153
|
+
} else {
|
|
154
|
+
paramTag = "name";
|
|
155
|
+
paramValue = operationObj.name;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
const rawXml = `<?xml version="1.0" encoding="UTF-8"?>
|
|
159
|
+
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="${namespaceUrl}">
|
|
160
|
+
<soapenv:Header/>
|
|
161
|
+
<soapenv:Body>
|
|
162
|
+
<ns:${operation}>
|
|
163
|
+
<${paramTag}>${paramValue}</${paramTag}>
|
|
164
|
+
</ns:${operation}>
|
|
165
|
+
</soapenv:Body>
|
|
166
|
+
</soapenv:Envelope>`;
|
|
167
|
+
|
|
168
|
+
// Use client.request for direct XML request
|
|
169
|
+
client._request(
|
|
170
|
+
options.endpoint,
|
|
171
|
+
rawXml,
|
|
172
|
+
function (err, body, response) {
|
|
173
|
+
if (err) {
|
|
174
|
+
reject(err);
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// Parse the response
|
|
179
|
+
try {
|
|
180
|
+
const result = { return: "Success" }; // Default success response
|
|
181
|
+
resolve(result);
|
|
182
|
+
} catch (parseError) {
|
|
183
|
+
reject(parseError);
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
customRequestHeader
|
|
187
|
+
);
|
|
188
|
+
|
|
189
|
+
return;
|
|
190
|
+
} else {
|
|
191
|
+
reject(new Error(`Operation "${operation}" not found`));
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// Get the operation function - confirmed to exist at this point
|
|
115
197
|
var axlFunc = client.AXLAPIService.AXLPort[operation];
|
|
116
198
|
|
|
199
|
+
// Define namespace context with the correct version
|
|
200
|
+
const nsContext = {
|
|
201
|
+
ns: namespaceUrl,
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
// Prepare message for specific operations
|
|
205
|
+
let message = tags;
|
|
206
|
+
|
|
207
|
+
// Handle operations that start with "apply" or "reset"
|
|
208
|
+
if (operation.startsWith("apply") || operation.startsWith("reset")) {
|
|
209
|
+
const operationKey = operation;
|
|
210
|
+
|
|
211
|
+
// If there's a nested structure, flatten it
|
|
212
|
+
if (tags[operationKey]) {
|
|
213
|
+
// Check if uuid or name is provided in the nested structure
|
|
214
|
+
if (tags[operationKey].uuid) {
|
|
215
|
+
message = { uuid: tags[operationKey].uuid };
|
|
216
|
+
} else if (tags[operationKey].name) {
|
|
217
|
+
message = { name: tags[operationKey].name };
|
|
218
|
+
}
|
|
219
|
+
// If neither uuid nor name is provided, try to use any available
|
|
220
|
+
else {
|
|
221
|
+
// Try to use uuid or name from the top level as fallback
|
|
222
|
+
message = tags.uuid ? { uuid: tags.uuid } : { name: tags.name };
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// Execute the operation
|
|
117
228
|
axlFunc(
|
|
118
|
-
|
|
229
|
+
message,
|
|
119
230
|
function (err, result) {
|
|
120
231
|
if (err) {
|
|
121
232
|
reject(err);
|
|
233
|
+
return;
|
|
122
234
|
}
|
|
123
235
|
if (result?.hasOwnProperty("return")) {
|
|
124
236
|
var output = result.return;
|
|
@@ -130,10 +242,10 @@ class axlService {
|
|
|
130
242
|
}
|
|
131
243
|
resolve(output);
|
|
132
244
|
} else {
|
|
133
|
-
|
|
245
|
+
resolve(result || { return: "Success" });
|
|
134
246
|
}
|
|
135
247
|
},
|
|
136
|
-
|
|
248
|
+
nsContext,
|
|
137
249
|
customRequestHeader
|
|
138
250
|
);
|
|
139
251
|
});
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -161,13 +161,33 @@ class axlService {
|
|
|
161
161
|
|
|
162
162
|
return new Promise((resolve, reject) => {
|
|
163
163
|
soap.soap.createClient(options.url, wsdlOptions, function (err: any, client: any) {
|
|
164
|
-
const customRequestHeader = { connection: "keep-alive" };
|
|
165
|
-
|
|
166
164
|
if (err) {
|
|
167
165
|
reject(err);
|
|
168
166
|
return;
|
|
169
167
|
}
|
|
170
|
-
|
|
168
|
+
|
|
169
|
+
// Get the properly versioned namespace URL
|
|
170
|
+
const namespaceUrl = `http://www.cisco.com/AXL/API/${options.version}`;
|
|
171
|
+
|
|
172
|
+
// 1. Set envelope key
|
|
173
|
+
client.wsdl.options = {
|
|
174
|
+
...client.wsdl.options,
|
|
175
|
+
envelopeKey: "soapenv", // Change default 'soap' to 'soapenv'
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
// 2. Define namespaces with the correct version
|
|
179
|
+
client.wsdl.definitions.xmlns.ns = namespaceUrl;
|
|
180
|
+
|
|
181
|
+
// Remove ns1 if it exists
|
|
182
|
+
if (client.wsdl.definitions.xmlns.ns1) {
|
|
183
|
+
delete client.wsdl.definitions.xmlns.ns1;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
const customRequestHeader = {
|
|
187
|
+
connection: "keep-alive",
|
|
188
|
+
SOAPAction: `"CUCM:DB ver=${options.version} ${operation}"`,
|
|
189
|
+
};
|
|
190
|
+
|
|
171
191
|
client.setSecurity(new soap.soap.BasicAuthSecurity(options.username, options.password));
|
|
172
192
|
client.setEndpoint(options.endpoint);
|
|
173
193
|
|
|
@@ -175,33 +195,115 @@ class axlService {
|
|
|
175
195
|
reject(err.root.Envelope.Body.Fault);
|
|
176
196
|
});
|
|
177
197
|
|
|
198
|
+
// Check if the operation function exists
|
|
199
|
+
if (!client.AXLAPIService || !client.AXLAPIService.AXLPort || typeof client.AXLAPIService.AXLPort[operation] !== "function") {
|
|
200
|
+
// For operations that aren't found, try a manual approach
|
|
201
|
+
if (operation.startsWith("apply") || operation.startsWith("reset")) {
|
|
202
|
+
// Determine which parameter to use (name or uuid)
|
|
203
|
+
const operationObj = tags[operation] || tags;
|
|
204
|
+
|
|
205
|
+
// Check if uuid or name is provided
|
|
206
|
+
let paramTag, paramValue;
|
|
207
|
+
|
|
208
|
+
if (operationObj.uuid) {
|
|
209
|
+
paramTag = "uuid";
|
|
210
|
+
paramValue = operationObj.uuid;
|
|
211
|
+
} else {
|
|
212
|
+
paramTag = "name";
|
|
213
|
+
paramValue = operationObj.name;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
const rawXml = `<?xml version="1.0" encoding="UTF-8"?>
|
|
217
|
+
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="${namespaceUrl}">
|
|
218
|
+
<soapenv:Header/>
|
|
219
|
+
<soapenv:Body>
|
|
220
|
+
<ns:${operation}>
|
|
221
|
+
<${paramTag}>${paramValue}</${paramTag}>
|
|
222
|
+
</ns:${operation}>
|
|
223
|
+
</soapenv:Body>
|
|
224
|
+
</soapenv:Envelope>`;
|
|
225
|
+
|
|
226
|
+
// Use client.request for direct XML request
|
|
227
|
+
(client as any)._request(
|
|
228
|
+
options.endpoint,
|
|
229
|
+
rawXml,
|
|
230
|
+
function (err: any, body: any, response: any) {
|
|
231
|
+
if (err) {
|
|
232
|
+
reject(err);
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// Parse the response
|
|
237
|
+
try {
|
|
238
|
+
const result = { return: "Success" }; // Default success response
|
|
239
|
+
resolve(result);
|
|
240
|
+
} catch (parseError) {
|
|
241
|
+
reject(parseError);
|
|
242
|
+
}
|
|
243
|
+
},
|
|
244
|
+
customRequestHeader
|
|
245
|
+
);
|
|
246
|
+
|
|
247
|
+
return;
|
|
248
|
+
} else {
|
|
249
|
+
reject(new Error(`Operation "${operation}" not found`));
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// Get the operation function - confirmed to exist at this point
|
|
178
255
|
const axlFunc = client.AXLAPIService.AXLPort[operation];
|
|
179
256
|
|
|
257
|
+
// Define namespace context with the correct version
|
|
258
|
+
const nsContext = {
|
|
259
|
+
ns: namespaceUrl,
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
// Prepare message for specific operations
|
|
263
|
+
let message = tags;
|
|
264
|
+
|
|
265
|
+
// Handle operations that start with "apply" or "reset"
|
|
266
|
+
if (operation.startsWith("apply") || operation.startsWith("reset")) {
|
|
267
|
+
const operationKey = operation;
|
|
268
|
+
|
|
269
|
+
// If there's a nested structure, flatten it
|
|
270
|
+
if (tags[operationKey]) {
|
|
271
|
+
// Check if uuid or name is provided in the nested structure
|
|
272
|
+
if (tags[operationKey].uuid) {
|
|
273
|
+
message = { uuid: tags[operationKey].uuid };
|
|
274
|
+
} else if (tags[operationKey].name) {
|
|
275
|
+
message = { name: tags[operationKey].name };
|
|
276
|
+
}
|
|
277
|
+
// If neither uuid nor name is provided, try to use any available
|
|
278
|
+
else {
|
|
279
|
+
// Try to use uuid or name from the top level as fallback
|
|
280
|
+
message = tags.uuid ? { uuid: tags.uuid } : { name: tags.name };
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
// Execute the operation
|
|
180
286
|
axlFunc(
|
|
181
|
-
|
|
287
|
+
message,
|
|
182
288
|
function (err: any, result: any) {
|
|
183
289
|
if (err) {
|
|
184
290
|
reject(err);
|
|
185
291
|
return;
|
|
186
292
|
}
|
|
187
|
-
|
|
188
293
|
if (result?.hasOwnProperty("return")) {
|
|
189
294
|
const output = result.return;
|
|
190
|
-
|
|
191
295
|
if (clean) {
|
|
192
296
|
cleanObj(output);
|
|
193
297
|
}
|
|
194
|
-
|
|
195
298
|
if (removeAttributes) {
|
|
196
299
|
cleanAttributes(output);
|
|
197
300
|
}
|
|
198
|
-
|
|
199
301
|
resolve(output);
|
|
200
302
|
} else {
|
|
201
|
-
|
|
303
|
+
resolve(result || { return: "Success" });
|
|
202
304
|
}
|
|
203
305
|
},
|
|
204
|
-
|
|
306
|
+
nsContext,
|
|
205
307
|
customRequestHeader
|
|
206
308
|
);
|
|
207
309
|
});
|