From cb7c442e19b8509c2575dba2a0c665ef3e8e715a Mon Sep 17 00:00:00 2001 From: PhilKunz Date: Tue, 15 Nov 2016 21:39:21 +0100 Subject: [PATCH] initial --- .gitignore | 4 ++ .gitlab-ci.yml | 59 ++++++++++++++++++++++++++ README.md | 25 +++++++++++ coverage/coverage-final.json | 3 ++ coverage/lcov.info | 80 ++++++++++++++++++++++++++++++++++++ dist/dnsly.plugins.d.ts | 4 ++ dist/dnsly.plugins.js | 7 ++++ dist/index.d.ts | 28 +++++++++++++ dist/index.js | 53 ++++++++++++++++++++++++ package.json | 37 +++++++++++++++++ test/test.d.ts | 1 + test/test.js | 49 ++++++++++++++++++++++ test/test.ts | 28 +++++++++++++ ts/dnsly.plugins.ts | 8 ++++ ts/index.ts | 72 ++++++++++++++++++++++++++++++++ tslint.json | 3 ++ 16 files changed, 461 insertions(+) create mode 100644 .gitignore create mode 100644 .gitlab-ci.yml create mode 100644 README.md create mode 100644 coverage/coverage-final.json create mode 100644 coverage/lcov.info create mode 100644 dist/dnsly.plugins.d.ts create mode 100644 dist/dnsly.plugins.js create mode 100644 dist/index.d.ts create mode 100644 dist/index.js create mode 100644 package.json create mode 100644 test/test.d.ts create mode 100644 test/test.js create mode 100644 test/test.ts create mode 100644 ts/dnsly.plugins.ts create mode 100644 ts/index.ts create mode 100644 tslint.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..38656df --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +node_modules/ +pages/ +public/ + diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..f2d2ff7 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,59 @@ +image: hosttoday/ht-docker-node:npmts + +stages: +- test +- release +- trigger +- pages + +testLEGACY: + stage: test + script: + - npmci test legacy + tags: + - docker + allow_failure: true + +testLTS: + stage: test + script: + - npmci test lts + tags: + - docker + +testSTABLE: + stage: test + script: + - npmci test stable + tags: + - docker + +release: + stage: release + script: + - npmci publish + only: + - tags + tags: + - docker + +trigger: + stage: trigger + script: + - npmci trigger + only: + - tags + tags: + - docker + +pages: + image: hosttoday/ht-docker-node:npmpage + stage: pages + script: + - npmci command npmpage --host gitlab + only: + - tags + artifacts: + expire_in: 1 week + paths: + - public diff --git a/README.md b/README.md new file mode 100644 index 0000000..8f579b7 --- /dev/null +++ b/README.md @@ -0,0 +1,25 @@ +# dnsly +smart dns methods written in TypeScript + +## Availabililty +[![npm](https://push.rocks/assets/repo-button-npm.svg)](https://www.npmjs.com/package/dnsly) +[![git](https://push.rocks/assets/repo-button-git.svg)](https://gitlab.com/pushrocks/dnsly) +[![git](https://push.rocks/assets/repo-button-mirror.svg)](https://github.com/pushrocks/dnsly) +[![docs](https://push.rocks/assets/repo-button-docs.svg)](https://pushrocks.gitlab.io/dnsly/) + +## Status for master +[![build status](https://gitlab.com/pushrocks/dnsly/badges/master/build.svg)](https://gitlab.com/pushrocks/dnsly/commits/master) +[![coverage report](https://gitlab.com/pushrocks/dnsly/badges/master/coverage.svg)](https://gitlab.com/pushrocks/dnsly/commits/master) +[![Dependency Status](https://david-dm.org/pushrocks/dnsly.svg)](https://david-dm.org/pushrocks/dnsly) +[![bitHound Dependencies](https://www.bithound.io/github/pushrocks/dnsly/badges/dependencies.svg)](https://www.bithound.io/github/pushrocks/dnsly/master/dependencies/npm) +[![bitHound Code](https://www.bithound.io/github/pushrocks/dnsly/badges/code.svg)](https://www.bithound.io/github/pushrocks/dnsly) +[![TypeScript](https://img.shields.io/badge/TypeScript-2.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/) +[![node](https://img.shields.io/badge/node->=%206.x.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/) +[![JavaScript Style Guide](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com/) + +## Usage +we recommend the use of TypeScript +```javascript + +``` +[![npm](https://push.rocks/assets/repo-header.svg)](https://push.rocks) diff --git a/coverage/coverage-final.json b/coverage/coverage-final.json new file mode 100644 index 0000000..2889dc5 --- /dev/null +++ b/coverage/coverage-final.json @@ -0,0 +1,3 @@ +{ +"/Users/philkunz/gitlab/pushrocks/dnsly/dist/index.js":{"path":"/Users/philkunz/gitlab/pushrocks/dnsly/dist/index.js","s":{"1":1,"2":1,"3":1,"4":3,"5":3,"6":3,"7":3,"8":3,"9":3,"10":1,"11":1,"12":1,"13":1,"14":0,"15":1,"16":1,"17":2,"18":0,"19":1,"20":1,"21":1,"22":1,"23":2,"24":2,"25":2,"26":1,"27":3,"28":3,"29":3,"30":0,"31":3,"32":3,"33":2,"34":2,"35":2,"36":2,"37":0,"38":1,"39":1},"b":{"1":[3,3],"2":[3,0],"3":[1,0],"4":[0,1],"5":[0,2],"6":[0,3],"7":[2,0]},"f":{"1":1,"2":1,"3":1,"4":2,"5":1,"6":2,"7":3,"8":3,"9":2,"10":2},"fnMap":{"1":{"name":"(anonymous_1)","line":3,"loc":{"start":{"line":3,"column":19},"end":{"line":3,"column":31}}},"2":{"name":"defineProperties","line":3,"loc":{"start":{"line":3,"column":33},"end":{"line":3,"column":74}}},"3":{"name":"(anonymous_3)","line":3,"loc":{"start":{"line":3,"column":357},"end":{"line":3,"column":405}}},"4":{"name":"_classCallCheck","line":5,"loc":{"start":{"line":5,"column":0},"end":{"line":5,"column":48}}},"5":{"name":"(anonymous_5)","line":13,"loc":{"start":{"line":13,"column":12},"end":{"line":13,"column":24}}},"6":{"name":"Dnsly","line":17,"loc":{"start":{"line":17,"column":4},"end":{"line":17,"column":35}}},"7":{"name":"getRecord","line":30,"loc":{"start":{"line":30,"column":15},"end":{"line":30,"column":64}}},"8":{"name":"(anonymous_8)","line":37,"loc":{"start":{"line":37,"column":53},"end":{"line":37,"column":73}}},"9":{"name":"close","line":51,"loc":{"start":{"line":51,"column":15},"end":{"line":51,"column":32}}},"10":{"name":"_setDnsProvider","line":60,"loc":{"start":{"line":60,"column":15},"end":{"line":60,"column":53}}}},"statementMap":{"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":564}},"2":{"start":{"line":3,"column":33},"end":{"line":3,"column":349}},"3":{"start":{"line":3,"column":76},"end":{"line":3,"column":347}},"4":{"start":{"line":3,"column":117},"end":{"line":3,"column":143}},"5":{"start":{"line":3,"column":144},"end":{"line":3,"column":199}},"6":{"start":{"line":3,"column":200},"end":{"line":3,"column":231}},"7":{"start":{"line":3,"column":232},"end":{"line":3,"column":286}},"8":{"start":{"line":3,"column":259},"end":{"line":3,"column":286}},"9":{"start":{"line":3,"column":287},"end":{"line":3,"column":345}},"10":{"start":{"line":3,"column":350},"end":{"line":3,"column":559}},"11":{"start":{"line":3,"column":407},"end":{"line":3,"column":475}},"12":{"start":{"line":3,"column":423},"end":{"line":3,"column":475}},"13":{"start":{"line":3,"column":476},"end":{"line":3,"column":536}},"14":{"start":{"line":3,"column":493},"end":{"line":3,"column":536}},"15":{"start":{"line":3,"column":537},"end":{"line":3,"column":556}},"16":{"start":{"line":5,"column":0},"end":{"line":5,"column":153}},"17":{"start":{"line":5,"column":50},"end":{"line":5,"column":151}},"18":{"start":{"line":5,"column":92},"end":{"line":5,"column":149}},"19":{"start":{"line":7,"column":0},"end":{"line":7,"column":21}},"20":{"start":{"line":8,"column":0},"end":{"line":8,"column":41}},"21":{"start":{"line":13,"column":0},"end":{"line":71,"column":4}},"22":{"start":{"line":17,"column":4},"end":{"line":22,"column":5}},"23":{"start":{"line":18,"column":8},"end":{"line":18,"column":37}},"24":{"start":{"line":20,"column":8},"end":{"line":20,"column":45}},"25":{"start":{"line":21,"column":8},"end":{"line":21,"column":53}},"26":{"start":{"line":28,"column":4},"end":{"line":68,"column":8}},"27":{"start":{"line":31,"column":12},"end":{"line":31,"column":33}},"28":{"start":{"line":32,"column":12},"end":{"line":42,"column":15}},"29":{"start":{"line":38,"column":16},"end":{"line":40,"column":17}},"30":{"start":{"line":39,"column":20},"end":{"line":39,"column":37}},"31":{"start":{"line":41,"column":16},"end":{"line":41,"column":34}},"32":{"start":{"line":43,"column":12},"end":{"line":43,"column":32}},"33":{"start":{"line":52,"column":12},"end":{"line":52,"column":45}},"34":{"start":{"line":61,"column":12},"end":{"line":66,"column":13}},"35":{"start":{"line":62,"column":16},"end":{"line":62,"column":45}},"36":{"start":{"line":63,"column":16},"end":{"line":63,"column":40}},"37":{"start":{"line":65,"column":16},"end":{"line":65,"column":56}},"38":{"start":{"line":70,"column":4},"end":{"line":70,"column":17}},"39":{"start":{"line":73,"column":0},"end":{"line":73,"column":22}}},"branchMap":{"1":{"line":3,"type":"binary-expr","locations":[{"start":{"line":3,"column":168},"end":{"line":3,"column":189}},{"start":{"line":3,"column":193},"end":{"line":3,"column":198}}]},"2":{"line":3,"type":"if","locations":[{"start":{"line":3,"column":232},"end":{"line":3,"column":232}},{"start":{"line":3,"column":232},"end":{"line":3,"column":232}}]},"3":{"line":3,"type":"if","locations":[{"start":{"line":3,"column":407},"end":{"line":3,"column":407}},{"start":{"line":3,"column":407},"end":{"line":3,"column":407}}]},"4":{"line":3,"type":"if","locations":[{"start":{"line":3,"column":476},"end":{"line":3,"column":476}},{"start":{"line":3,"column":476},"end":{"line":3,"column":476}}]},"5":{"line":5,"type":"if","locations":[{"start":{"line":5,"column":50},"end":{"line":5,"column":50}},{"start":{"line":5,"column":50},"end":{"line":5,"column":50}}]},"6":{"line":38,"type":"if","locations":[{"start":{"line":38,"column":16},"end":{"line":38,"column":16}},{"start":{"line":38,"column":16},"end":{"line":38,"column":16}}]},"7":{"line":61,"type":"if","locations":[{"start":{"line":61,"column":12},"end":{"line":61,"column":12}},{"start":{"line":61,"column":12},"end":{"line":61,"column":12}}]}},"l":{"3":3,"5":2,"7":1,"8":1,"13":1,"17":1,"18":2,"20":2,"21":2,"28":1,"31":3,"32":3,"38":3,"39":0,"41":3,"43":3,"52":2,"61":2,"62":2,"63":2,"65":0,"70":1,"73":1}}, +"/Users/philkunz/gitlab/pushrocks/dnsly/dist/dnsly.plugins.js":{"path":"/Users/philkunz/gitlab/pushrocks/dnsly/dist/dnsly.plugins.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1},"b":{},"f":{},"fnMap":{},"statementMap":{"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":26}},"2":{"start":{"line":4,"column":0},"end":{"line":4,"column":37}},"3":{"start":{"line":5,"column":0},"end":{"line":5,"column":30}},"4":{"start":{"line":6,"column":0},"end":{"line":6,"column":38}},"5":{"start":{"line":7,"column":0},"end":{"line":7,"column":30}}},"branchMap":{},"l":{"3":1,"4":1,"5":1,"6":1,"7":1}}} diff --git a/coverage/lcov.info b/coverage/lcov.info new file mode 100644 index 0000000..e81b1d4 --- /dev/null +++ b/coverage/lcov.info @@ -0,0 +1,80 @@ +TN: +SF:/Users/philkunz/gitlab/pushrocks/dnsly/dist/index.js +FN:3,(anonymous_1) +FN:3,defineProperties +FN:3,(anonymous_3) +FN:5,_classCallCheck +FN:13,(anonymous_5) +FN:17,Dnsly +FN:30,getRecord +FN:37,(anonymous_8) +FN:51,close +FN:60,_setDnsProvider +FNF:10 +FNH:10 +FNDA:1,(anonymous_1) +FNDA:1,defineProperties +FNDA:1,(anonymous_3) +FNDA:2,_classCallCheck +FNDA:1,(anonymous_5) +FNDA:2,Dnsly +FNDA:3,getRecord +FNDA:3,(anonymous_8) +FNDA:2,close +FNDA:2,_setDnsProvider +DA:3,3 +DA:5,2 +DA:7,1 +DA:8,1 +DA:13,1 +DA:17,1 +DA:18,2 +DA:20,2 +DA:21,2 +DA:28,1 +DA:31,3 +DA:32,3 +DA:38,3 +DA:39,0 +DA:41,3 +DA:43,3 +DA:52,2 +DA:61,2 +DA:62,2 +DA:63,2 +DA:65,0 +DA:70,1 +DA:73,1 +LF:23 +LH:21 +BRDA:3,1,0,3 +BRDA:3,1,1,3 +BRDA:3,2,0,3 +BRDA:3,2,1,0 +BRDA:3,3,0,1 +BRDA:3,3,1,0 +BRDA:3,4,0,0 +BRDA:3,4,1,1 +BRDA:5,5,0,0 +BRDA:5,5,1,2 +BRDA:38,6,0,0 +BRDA:38,6,1,3 +BRDA:61,7,0,2 +BRDA:61,7,1,0 +BRF:14 +BRH:8 +end_of_record +TN: +SF:/Users/philkunz/gitlab/pushrocks/dnsly/dist/dnsly.plugins.js +FNF:0 +FNH:0 +DA:3,1 +DA:4,1 +DA:5,1 +DA:6,1 +DA:7,1 +LF:5 +LH:5 +BRF:0 +BRH:0 +end_of_record diff --git a/dist/dnsly.plugins.d.ts b/dist/dnsly.plugins.d.ts new file mode 100644 index 0000000..cc99945 --- /dev/null +++ b/dist/dnsly.plugins.d.ts @@ -0,0 +1,4 @@ +import 'typings-global'; +import * as beautylog from 'beautylog'; +declare let dnsSocket: any; +export { beautylog, dnsSocket }; diff --git a/dist/dnsly.plugins.js b/dist/dnsly.plugins.js new file mode 100644 index 0000000..ec50c8b --- /dev/null +++ b/dist/dnsly.plugins.js @@ -0,0 +1,7 @@ +"use strict"; +require("typings-global"); +const beautylog = require("beautylog"); +exports.beautylog = beautylog; +let dnsSocket = require('dns-socket'); +exports.dnsSocket = dnsSocket; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5zbHkucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2Ruc2x5LnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDBCQUF1QjtBQUN2Qix1Q0FBc0M7QUFJbEMsOEJBQVM7QUFIYixJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUE7QUFJakMsOEJBQVMifQ== \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts new file mode 100644 index 0000000..6e63b9d --- /dev/null +++ b/dist/index.d.ts @@ -0,0 +1,28 @@ +/// +import * as q from 'q'; +export declare type TDnsProvider = 'google'; +export declare type TDnsRecordType = 'A' | 'AAAA' | 'CNAME' | 'PTR' | 'MX' | 'NAPTR' | 'NS' | 'SOA' | 'SRV' | 'TXT'; +/** + * class dnsly offers methods for working with dns from a dns provider like Google DNS + */ +export declare class Dnsly { + dnsServerIp: string; + dnsServerPort: number; + dnsSocketInstance: any; + /** + * constructor for class dnsly + */ + constructor(dnsProviderArg: TDnsProvider); + /** + * gets a record + */ + getRecord(recordNameArg: string, recordTypeArg: TDnsRecordType): q.Promise<{}>; + /** + * close the dnsly instance + */ + close(): void; + /** + * set the DNS provider + */ + private _setDnsProvider(dnsProvider); +} diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 0000000..4a07f8d --- /dev/null +++ b/dist/index.js @@ -0,0 +1,53 @@ +"use strict"; +const q = require("q"); +const plugins = require("./dnsly.plugins"); +/** + * class dnsly offers methods for working with dns from a dns provider like Google DNS + */ +class Dnsly { + /** + * constructor for class dnsly + */ + constructor(dnsProviderArg) { + this._setDnsProvider(dnsProviderArg); + this.dnsSocketInstance = plugins.dnsSocket(); + } + /** + * gets a record + */ + getRecord(recordNameArg, recordTypeArg) { + let done = q.defer(); + this.dnsSocketInstance.query({ + questions: [{ + type: recordTypeArg, + name: recordNameArg + }] + }, this.dnsServerPort, this.dnsServerIp, (err, res) => { + if (err) { + done.reject(err); + } + done.resolve(res); + }); + return done.promise; + } + /** + * close the dnsly instance + */ + close() { + this.dnsSocketInstance.destroy(); + } + /** + * set the DNS provider + */ + _setDnsProvider(dnsProvider) { + if (dnsProvider === 'google') { + this.dnsServerIp = '8.8.8.8'; + this.dnsServerPort = 53; + } + else { + throw new Error('unknown dns provider'); + } + } +} +exports.Dnsly = Dnsly; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsdUJBQXNCO0FBQ3RCLDJDQUEwQztBQWMxQzs7R0FFRztBQUNIO0lBSUk7O09BRUc7SUFDSCxZQUFZLGNBQTRCO1FBQ3BDLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDcEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUNoRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTLENBQUMsYUFBcUIsRUFBRSxhQUE2QjtRQUMxRCxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDcEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FDeEI7WUFDSSxTQUFTLEVBQUUsQ0FBQztvQkFDUixJQUFJLEVBQUUsYUFBYTtvQkFDbkIsSUFBSSxFQUFFLGFBQWE7aUJBQ3RCLENBQUM7U0FDTCxFQUNELElBQUksQ0FBQyxhQUFhLEVBQ2xCLElBQUksQ0FBQyxXQUFXLEVBQ2hCLENBQUMsR0FBRyxFQUFFLEdBQUc7WUFDTCxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDcEIsQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDckIsQ0FBQyxDQUFDLENBQUE7UUFDTixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQTtJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFBO0lBQ3BDLENBQUM7SUFFRDs7T0FFRztJQUNLLGVBQWUsQ0FBQyxXQUF5QjtRQUM3QyxFQUFFLENBQUMsQ0FBQyxXQUFXLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQTtZQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQTtRQUMzQixDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDSixNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUE7UUFDM0MsQ0FBQztJQUNMLENBQUM7Q0FDSjtBQXJERCxzQkFxREMifQ== \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..bcf7767 --- /dev/null +++ b/package.json @@ -0,0 +1,37 @@ +{ + "name": "dnsly", + "version": "1.0.0", + "description": "smart dns methods written in TypeScript", + "main": "dist/index.js", + "typings": "../dist/index.d.ts", + "scripts": { + "test": "(npmts)" + }, + "repository": { + "type": "git", + "url": "git+ssh://git@gitlab.com/pushrocks/dnsly.git" + }, + "keywords": [ + "dns", + "google dns", + "dns record" + ], + "author": "Lossless GmbH", + "license": "MIT", + "bugs": { + "url": "https://gitlab.com/pushrocks/dnsly/issues" + }, + "homepage": "https://gitlab.com/pushrocks/dnsly#README", + "dependencies": { + "@types/q": "0.0.32", + "beautylog": "^6.0.0", + "dns-socket": "^1.4.2", + "q": "^1.4.1", + "typings-global": "^1.0.14" + }, + "devDependencies": { + "@types/should": "^8.1.30", + "should": "^11.1.1", + "typings-test": "^1.0.3" + } +} diff --git a/test/test.d.ts b/test/test.d.ts new file mode 100644 index 0000000..2fd432a --- /dev/null +++ b/test/test.d.ts @@ -0,0 +1 @@ +import 'typings-test'; diff --git a/test/test.js b/test/test.js new file mode 100644 index 0000000..249e831 --- /dev/null +++ b/test/test.js @@ -0,0 +1,49 @@ +"use strict"; +require("typings-test"); +const should = require("should"); +const dnsly = require("../dist/index"); +let testDnsly; +describe('dnsly', function () { + it('should create an instance of Dnsly', function () { + testDnsly = new dnsly.Dnsly('google'); + should(testDnsly).be.instanceOf(dnsly.Dnsly); + }); + it('should, get a dns record for a domain when called quickly', function (done) { + testDnsly.getRecord('google.com', 'A').then(res => { + console.log(res); + done(); + }).catch(err => { + console.log(err); + done(err); + }); + }); + it('should, get a dns record for a domain when called with timeout', function (done) { + setTimeout(() => { + testDnsly.getRecord('google.com', 'A').then(res => { + console.log(res); + done(); + }).catch(err => { + console.log(err); + done(err); + }); + }, 1000); + }); + it('should get a dns record for a domain when called with second instance and timeout', function (done) { + this.timeout(10000); + let testDnsly2 = new dnsly.Dnsly('google'); + setTimeout(() => { + testDnsly2.getRecord('google.com', 'MX').then(res => { + console.log(res); + done(); + testDnsly2.close(); + }).catch(err => { + console.log(err); + done(err); + }); + }, 5000); + }); + it('should close the instance', function () { + testDnsly.close(); + }); +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHdCQUFxQjtBQUNyQixpQ0FBZ0M7QUFFaEMsdUNBQXNDO0FBRXRDLElBQUksU0FBc0IsQ0FBQTtBQUUxQixRQUFRLENBQUMsT0FBTyxFQUFFO0lBQ2QsRUFBRSxDQUFDLG9DQUFvQyxFQUFFO1FBQ3JDLFNBQVMsR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDckMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2hELENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDJEQUEyRCxFQUFFLFVBQVUsSUFBSTtRQUMxRSxTQUFTLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRztZQUMzQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ2hCLElBQUksRUFBRSxDQUFBO1FBQ1YsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUc7WUFDUixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNiLENBQUMsQ0FBQyxDQUFBO0lBRU4sQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsZ0VBQWdFLEVBQUUsVUFBVSxJQUFJO1FBQy9FLFVBQVUsQ0FBQztZQUNQLFNBQVMsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHO2dCQUMzQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUNoQixJQUFJLEVBQUUsQ0FBQTtZQUNWLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO2dCQUNSLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNiLENBQUMsQ0FBQyxDQUFBO1FBQ04sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBRVosQ0FBQyxDQUFDLENBQUE7SUFDRixFQUFFLENBQUMsbUZBQW1GLEVBQUUsVUFBVSxJQUFJO1FBQ2xHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDbkIsSUFBSSxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQzFDLFVBQVUsQ0FBQztZQUNQLFVBQVUsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHO2dCQUM3QyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUNoQixJQUFJLEVBQUUsQ0FBQTtnQkFDTixVQUFVLENBQUMsS0FBSyxFQUFFLENBQUE7WUFDdEIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUc7Z0JBQ1IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtnQkFDaEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ2IsQ0FBQyxDQUFDLENBQUE7UUFDTixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFFWixDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQywyQkFBMkIsRUFBRTtRQUM1QixTQUFTLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDckIsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUMsQ0FBQSJ9 \ No newline at end of file diff --git a/test/test.ts b/test/test.ts new file mode 100644 index 0000000..4be2549 --- /dev/null +++ b/test/test.ts @@ -0,0 +1,28 @@ +import 'typings-test' +import * as should from 'should' + +import * as dnsly from '../dist/index' + +let testDnsly: dnsly.Dnsly + +describe('dnsly', function () { + it('should create an instance of Dnsly', function () { + testDnsly = new dnsly.Dnsly('google') + should(testDnsly).be.instanceOf(dnsly.Dnsly) + }) + + it('should, get a dns record for a domain', function (done) { + testDnsly.getRecord('google.com', 'A').then(res => { + console.log(res) + done() + }).catch(err => { + console.log(err) + done(err) + }) + + }) + + it('should close the instance', function () { + testDnsly.close() + }) +}) diff --git a/ts/dnsly.plugins.ts b/ts/dnsly.plugins.ts new file mode 100644 index 0000000..9f25d10 --- /dev/null +++ b/ts/dnsly.plugins.ts @@ -0,0 +1,8 @@ +import 'typings-global' +import * as beautylog from 'beautylog' +let dnsSocket = require('dns-socket') + +export { + beautylog, + dnsSocket +} diff --git a/ts/index.ts b/ts/index.ts new file mode 100644 index 0000000..309c158 --- /dev/null +++ b/ts/index.ts @@ -0,0 +1,72 @@ +import * as q from 'q' +import * as plugins from './dnsly.plugins' + +export type TDnsProvider = 'google' +export type TDnsRecordType = 'A' + | 'AAAA' + | 'CNAME' + | 'PTR' + | 'MX' + | 'NAPTR' + | 'NS' + | 'SOA' + | 'SRV' + | 'TXT' + +/** + * class dnsly offers methods for working with dns from a dns provider like Google DNS + */ +export class Dnsly { + dnsServerIp: string + dnsServerPort: number + dnsSocketInstance + /** + * constructor for class dnsly + */ + constructor(dnsProviderArg: TDnsProvider) { + this._setDnsProvider(dnsProviderArg) + this.dnsSocketInstance = plugins.dnsSocket() + } + + /** + * gets a record + */ + getRecord(recordNameArg: string, recordTypeArg: TDnsRecordType) { + let done = q.defer() + this.dnsSocketInstance.query( + { + questions: [{ + type: recordTypeArg, + name: recordNameArg + }] + }, + this.dnsServerPort, + this.dnsServerIp, + (err, res) => { + if (err) { + done.reject(err) + } + done.resolve(res) + }) + return done.promise + } + + /** + * close the dnsly instance + */ + close() { + this.dnsSocketInstance.destroy() + } + + /** + * set the DNS provider + */ + private _setDnsProvider(dnsProvider: TDnsProvider) { + if (dnsProvider === 'google') { + this.dnsServerIp = '8.8.8.8' + this.dnsServerPort = 53 + } else { + throw new Error('unknown dns provider') + } + } +} \ No newline at end of file diff --git a/tslint.json b/tslint.json new file mode 100644 index 0000000..45052ad --- /dev/null +++ b/tslint.json @@ -0,0 +1,3 @@ +{ + "extends": "tslint-config-standard" +}