-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathsoapClient.js
134 lines (124 loc) · 4.39 KB
/
soapClient.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
//node modules
var fs = require('fs')
var soap = require('soap'); // patched soap client - george-of-croton/node-soap
var stream = require('stream')
var Readable = require('stream').Readable
require('dotenv').config() // loads environment variables from .env file
function documentOrderForm(response) {
var titles = response['search-land-titles-response-data']['land-titles']['land-title']
return {
"lt:request-header": {
"lt:client-reference": process.env.EQUIFAX_CLIENT_REFERENCE
},
"lt:order-document-request-data": {
"lt:state-territory-land-registry": "VIC",
"lt:order-title-proceed": '',
"lt:order-title-request": {
"lt:title-by-reference": {
"lt:title-reference": titles[titles.length - 1]['title-reference']
}
}
}
}
}
function deliveryOrderForm(id) {
return {
"lt:request-header": {
"lt:client-reference": process.env.EQUIFAX_CLIENT_REFERENCE
},
"lt:deliver-document-request-data": {
"lt:enquiry-id": id,
"lt:content-type": 'application/pdf'
}
}
}
var request = {
args: {
"request-header": {
"lt:client-reference": process.env.EQUIFAX_CLIENT_REFERENCE,
"lt:operator-id": process.env.EQUIFAX_OPERATOR_ID,
"lt:operator-name": process.env.EQUIFAX_OPERATOR_NAME
},
"lt:search-land-titles-request-data": {
"state-territory-land-registry": "VIC",
"price-confirm-proceed": "true",
"land-title-search-by-address-request": {
"address": {
"lt:street-number": '17',
"lt:street-name": 'Anzac',
"lt:street-type": 'AVE',
"lt:suburb": "Coburg North",
"lt:state": "VIC",
"lt:postcode": '3058',
"lt:country-code": "AUS"
}
}
}
},
security: new soap.WSSecurity(process.env.EQUIFAX_API_USERNAME, process.env.EQUIFAX_API_PASSWORD), //adds wsse:security headers to the soap header
url: 'http://localhost:3000/titleSearch.wsdl', //defines the location of the services WSDL document.
options: { // default soap request options
forceSoap12Headers: true,
}
}
searchLandTitles(request)
function searchLandTitles(request) {
soap.createClient(request.url, request.options, function(err, client) {
client.setEndpoint('https://ctaau.vedaxml.com/cta/sys2/soap12/land-titles-v1') //test environment endpoint. Production endpoint defined in WSDL.
client.addSoapHeader({
'wsa:To': 'https://vedaxml.com/sys2/soap12/land-titles-v1',
'wsa:Action': 'http://vedaxml.com/land-titles/searchLandTitlesRequest'
})
client.addHttpHeader('Connection', "Keep-Alive") //prevents large requests from being truncated
client.addHttpHeader('Content-type', 'application/soap+xml;charset=utf-8')
client.setSecurity(request.security)
client.LandTitlesManagementService.LandTitlesManagementSOAP12Port.searchLandTitles(request.args, function(err, result, raw, soapHeader) {
if (err) console.log(err.body);
else {
return orderTitleDocument(result, client);
}
});
})
}
function orderTitleDocument(result, client) {
client.clearSoapHeaders()
client.addSoapHeader({
'wsa:To': 'https://vedaxml.com/sys2/soap12/land-titles-v1',
'wsa:Action': 'http://vedaxml.com/land-titles/orderDocumentRequest'
})
var args = documentOrderForm(result)
client.LandTitlesManagementService.LandTitlesManagementSOAP12Port.orderDocument(args, function(err, result, raw, soapHeader) {
if (err) {
console.log(err.body)
} else {
var enquiryId = result['order-document-response-data']['order-details']['enquiry-id']
deliverDocument(enquiryId, client)
}
})
}
function deliverDocument(id, client) {
client.clearSoapHeaders()
client.addSoapHeader({
'wsa:To': 'https://vedaxml.com/sys2/soap12/land-titles-v1',
'wsa:Action': 'http://vedaxml.com/land-titles/deliverDocumentRequest'
})
var args = deliveryOrderForm(id)
client.LandTitlesManagementService.LandTitlesManagementSOAP12Port.deliverDocument(args, function(err, result, raw, soapHeader) {
if (err) {
console.log(err.body)
} else if (result['deliver-document-response-data']['document-status']['status'] === 'PENDING') {
console.log("request still pending.... calling service again in 30 seconds")
setTimeout(() => {deliverDocument(id, client)}, 30000)
} else {
var buf = new Buffer.from(result['deliver-document-response-data']['binary-data'][0]['$value'], 'base64')
saveStream(buf)
}
})
}
function saveStream(buffer) {
var writable = fs.createWriteStream('./finalprd.pdf', {defaultEncoding: 'base64'})
var s = new Readable();
s.push(buffer)
s.push(null)
s.pipe(writable)
}