@jingbof/rets-client
Version:
RETS (Real Estate Transaction Standards) Client in Typescript
409 lines • 21.7 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (g && (g = 0, op[0] && (_ = 0)), _) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var dotenv_1 = __importDefault(require("dotenv"));
var fs_1 = require("fs");
var stream_1 = require("stream");
var querystring_1 = require("querystring");
var types_1 = require("./types");
var _1 = require(".");
// const { RetsClient, RetsVersion, RetsFormat, DdfCulture, RetsRequestMethod } = require('./src')
dotenv_1.default.config();
var dateToString = function (date) {
return "".concat(date.getFullYear(), "-").concat((date.getMonth() + 1).toString().padStart(2, '0'), "-").concat(date
.getDate()
.toString()
.padStart(2, '0'));
};
var config = {
url: process.env.RETS_TEST_URL || '',
username: process.env.RETS_TEST_USERNAME || '',
password: process.env.RETS_TEST_PASSWORD || '',
// debugResponseFilename: ({ method, url }: IRetsRequestConfig) => {
// const now = new Date()
// const hash = createHash('md5')
// // build hash name
// hash.update(url.toString())
// return `tests/${now.toISOString()}-${hash.digest('hex').toString()}.raw`
// },
};
/// /// TREB Specifics //////
var TREBClass;
(function (TREBClass) {
TREBClass["CondoProperty"] = "CondoProperty";
TREBClass["DeletedProperty"] = "DeletedProperty";
TREBClass["ResidentialProperty"] = "ResidentialProperty";
TREBClass["CommercialProperty"] = "CommercialProperty";
})(TREBClass || (TREBClass = {}));
var TREBResources;
(function (TREBResources) {
TREBResources["Property"] = "Property";
})(TREBResources || (TREBResources = {}));
var TREBObjects;
(function (TREBObjects) {
TREBObjects["Photo"] = "Photo";
})(TREBObjects || (TREBObjects = {}));
/// //// Testers /////
var testLogin = function () { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
console.log('>> testLogin');
return [4 /*yield*/, (0, _1.getClient)(config, function () { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
console.log('Logged In!');
return [2 /*return*/];
});
}); })];
case 1:
_a.sent();
return [2 /*return*/];
}
});
}); };
var testSearch = function () { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
console.log('>> testSearch');
return [4 /*yield*/, (0, _1.getClient)(config, function (_a) {
var search = _a.search;
return __awaiter(void 0, void 0, void 0, function () {
var listings;
return __generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, search({
// query: '(Status=A)',
query: '(timestamp_sql=2021-06-01T00:00:00+)',
limit: 4,
searchType: TREBResources.Property,
className: TREBClass.ResidentialProperty,
})];
case 1:
listings = (_b.sent());
console.log('listings', listings.map(function (item) { return item.Ml_num; }));
return [2 /*return*/];
}
});
});
})];
case 1:
_a.sent();
return [2 /*return*/];
}
});
}); };
var testStreamSearch = function () { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
console.log('>> testStreamSearch');
return [4 /*yield*/, (0, _1.getClient)(config, function (_a) {
var search = _a.search;
return __awaiter(void 0, void 0, void 0, function () {
var avgPrice, count, saveToFile, searchStream;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
avgPrice = 0;
count = 0;
saveToFile = new stream_1.PassThrough({
objectMode: true,
});
return [4 /*yield*/, search({
// query: '(Status=A)',
query: '(timestamp_sql=2021-07-15T00:00:00+)',
// query: '(ml_num=E5230190)',
limit: 3,
searchType: TREBResources.Property,
className: TREBClass.ResidentialProperty,
returnType: types_1.ReturnType.Stream,
processText: function (text) { return (0, querystring_1.unescape)(text); },
})];
case 1:
searchStream = (_b.sent())
// .pipe(
// new Transform({
// objectMode: true,
// transform: (data, _, done) => {
// const orig = parseFloat(data.Orig_dol)
// avgPrice = (avgPrice * count + (Number.isNaN(orig) ? 0 : orig)) / (count + 1)
// count += Number.isNaN(orig) ? 0 : 1
// done(null, data)
// },
// }),
// )
.pipe(saveToFile)
.pipe(new stream_1.Writable({
objectMode: true,
write: function (data, _, done) {
count += 1;
if (!data.Ml_num.match(/^[A-Z]\d{7}$/)) {
console.log('Invalid!!!!', count, data.Ml_num);
}
done();
},
}));
saveToFile.pipe(new stream_1.Writable({
objectMode: true,
write: function (data, _, done) {
var saveData = function (save) { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, fs_1.promises.appendFile('test.json', JSON.stringify(save))];
case 1:
_a.sent();
done();
return [2 /*return*/];
}
});
}); };
saveData(data);
},
}));
// wait for the stream to finish
return [4 /*yield*/, new Promise(function (fulfill) { return searchStream.on('close', fulfill); })];
case 2:
// wait for the stream to finish
_b.sent();
console.log('avgPrice', avgPrice, ' out of ', count);
return [2 /*return*/];
}
});
});
})];
case 1:
_a.sent();
return [2 /*return*/];
}
});
}); };
var testObjects = function () { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
console.log('>> testObjects');
return [4 /*yield*/, (0, _1.getClient)(config, function (_a) {
var getObject = _a.getObject;
return __awaiter(void 0, void 0, void 0, function () {
var objects, dir;
return __generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, getObject({
resource: TREBResources.Property,
type: TREBObjects.Photo,
contentId: 'N5280350',
})];
case 1:
objects = _b.sent();
console.log('objects', objects);
dir = 'tests';
fs_1.promises.mkdir(dir, { recursive: true });
console.log("saveToFiles in directory [".concat(dir, "]"));
objects.forEach(function (obj) {
if (obj.contentType === 'image/jpeg') {
fs_1.promises.writeFile("".concat(dir, "/").concat(obj.contentId, "-").concat(obj.objectId, ".jpg"), obj.data);
}
});
return [2 /*return*/];
}
});
});
})];
case 1:
_a.sent();
return [4 /*yield*/, (0, _1.getClient)(config, function (_a) {
var getObject = _a.getObject;
return __awaiter(void 0, void 0, void 0, function () {
var objects, dir;
return __generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, getObject({
resource: TREBResources.Property,
type: TREBObjects.Photo,
contentId: ['N5280350', 'N5286921'],
})];
case 1:
objects = _b.sent();
console.log('objects', objects);
dir = 'tests';
fs_1.promises.mkdir(dir, { recursive: true });
console.log("saveToFiles in directory [".concat(dir, "]"));
objects.forEach(function (obj) {
if (obj.contentType === 'image/jpeg') {
fs_1.promises.writeFile("".concat(dir, "/").concat(obj.contentId, "-").concat(obj.objectId, ".jpg"), obj.data);
}
});
return [2 /*return*/];
}
});
});
})];
case 2:
_a.sent();
return [4 /*yield*/, (0, _1.getClient)(config, function (_a) {
var getObject = _a.getObject;
return __awaiter(void 0, void 0, void 0, function () {
var objects;
return __generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, getObject({
resource: TREBResources.Property,
type: TREBObjects.Photo,
contentId: 'N5280350',
withLocation: true,
})];
case 1:
objects = _b.sent();
console.log('objects', objects);
objects.forEach(function (obj) {
if (obj.contentType === 'text/xml') {
console.log(obj.location);
}
});
return [2 /*return*/];
}
});
});
})];
case 3:
_a.sent();
return [2 /*return*/];
}
});
}); };
var testMetadata = function () { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
console.log('>> testMetada');
return [4 /*yield*/, (0, _1.getClient)(config, function (_a) {
var getMetadata = _a.getMetadata;
return __awaiter(void 0, void 0, void 0, function () {
var resources, classes, objects;
return __generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, getMetadata({
type: types_1.RetsMetadataType.Resource,
})];
case 1:
resources = _b.sent();
console.log('getMetadata.Resource', resources);
return [4 /*yield*/, getMetadata({
type: types_1.RetsMetadataType.Class,
})];
case 2:
classes = _b.sent();
console.log('getMetadata.Class', classes);
return [4 /*yield*/, getMetadata({
type: types_1.RetsMetadataType.Objects,
})];
case 3:
objects = _b.sent();
console.log('getMetadata.Class', objects);
return [2 /*return*/];
}
});
});
})];
case 1:
_a.sent();
return [2 /*return*/];
}
});
}); };
var testDataMap = function () { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
console.log('>> testDataMap');
return [4 /*yield*/, (0, _1.getClient)(config, function (_a) {
var getDataMap = _a.getDataMap;
return __awaiter(void 0, void 0, void 0, function () {
var dataMap;
return __generator(this, function (_b) {
switch (_b.label) {
case 0: return [4 /*yield*/, getDataMap()];
case 1:
dataMap = _b.sent();
console.log('getDataMap', dataMap);
return [2 /*return*/];
}
});
});
})];
case 1:
_a.sent();
return [2 /*return*/];
}
});
}); };
var main = function () { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
console.log('Start!');
// await testLogin()
// await testMetadata()
// await testDataMap()
// await testSearch()
// await testObjects()
return [4 /*yield*/, testStreamSearch()];
case 1:
// await testLogin()
// await testMetadata()
// await testDataMap()
// await testSearch()
// await testObjects()
_a.sent();
console.log('Finish!');
return [2 /*return*/];
}
});
}); };
try {
console.log('Begin!');
main();
}
catch (e) {
console.log('ERROR:: ', e);
}
//# sourceMappingURL=testing.js.map