Compare commits

...

34 Commits

Author SHA1 Message Date
587600d571 3.0.6 2019-01-07 00:28:16 +01:00
17f293ca4e fix(core): update 2019-01-07 00:28:15 +01:00
0ed946ee63 3.0.5 2019-01-07 00:21:15 +01:00
e720d5905e fix(core): update 2019-01-07 00:21:15 +01:00
6286bfaa8f 3.0.4 2018-05-13 16:43:47 +02:00
9390bbae61 fix(core): fix .checkUntilAvailable error 2018-05-13 16:43:46 +02:00
ebb007bcdb 3.0.3 2018-05-13 16:22:38 +02:00
e6d99d5664 fix(ci): fix @gitzone/npmts package name 2018-05-13 16:22:37 +02:00
7b29efc398 3.0.2 2018-05-13 16:21:15 +02:00
64c381d42f fix(docs): update 2018-05-13 16:21:15 +02:00
d4dbf4f2b3 3.0.1 2018-05-13 16:18:40 +02:00
562dca35a7 fix(ci): add access level and correct global packages 2018-05-13 16:18:40 +02:00
2bbbbc17e8 3.0.0 2018-05-13 15:51:05 +02:00
4ada87a945 BREAKING CHANGE(package): update to new packagename and improve record retrieval 2018-05-13 15:51:04 +02:00
3e45a24750 2.0.10 2017-07-31 16:34:00 +02:00
96b4926f8f update dependencies 2017-07-31 16:33:57 +02:00
b0ceeda2b9 2.0.9 2017-07-18 16:00:59 +02:00
b118419301 remove old README 2017-07-18 16:00:48 +02:00
25699ebfc5 2.0.8 2017-07-18 15:54:06 +02:00
a69f565cf8 add docs 2017-07-18 15:53:54 +02:00
fe423a8e8a 2.0.7 2017-07-18 15:47:06 +02:00
70862850d5 add npmextra.json 2017-07-18 15:47:01 +02:00
31ab725d2f 2.0.6 2017-07-18 15:46:09 +02:00
d98890c14e update ci 2017-07-18 15:45:44 +02:00
5327914895 2.0.5 2017-07-18 15:45:11 +02:00
5bd2b6cb55 update README 2017-07-18 15:45:06 +02:00
1cdce1b862 2.0.4 2017-02-02 21:34:33 +01:00
e18e7a04ee update README 2017-02-02 21:33:43 +01:00
e64fa93dca 2.0.3 2017-01-27 00:39:43 +01:00
1cf09016df fix failing of non existent record 2017-01-27 00:39:24 +01:00
aaa218003e 2.0.2 2017-01-27 00:24:28 +01:00
db9d748f99 merge 2017-01-27 00:23:56 +01:00
2ef01e1111 1.0.7 2017-01-15 17:05:35 +01:00
0f129262e9 fix 2017-01-15 17:04:16 +01:00
16 changed files with 1985 additions and 501 deletions

View File

@ -1,59 +1,150 @@
image: hosttoday/ht-docker-node:npmts # gitzone standard
image: hosttoday/ht-docker-node:npmci
cache:
paths:
- .npmci_cache/
key: "$CI_BUILD_STAGE"
stages: stages:
- security
- test - test
- release - release
- trigger - metadata
- pages
testLEGACY: # ====================
stage: test # security stage
# ====================
mirror:
stage: security
script: script:
- npmci test legacy - npmci git mirror
tags: tags:
- docker - docker
- notpriv
snyk:
stage: security
script:
- npmci npm prepare
- npmci command npm install -g snyk
- npmci command npm install --ignore-scripts
- npmci command snyk test
tags:
- docker
- notpriv
sast:
stage: security
image: registry.gitlab.com/hosttoday/ht-docker-dbase:npmci
variables:
DOCKER_DRIVER: overlay2
allow_failure: true allow_failure: true
services:
- docker:stable-dind
script:
- npmci npm prepare
- npmci npm install
- npmci command npm run build
- export SP_VERSION=$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/')
- docker run
--env SAST_CONFIDENCE_LEVEL="${SAST_CONFIDENCE_LEVEL:-3}"
--volume "$PWD:/code"
--volume /var/run/docker.sock:/var/run/docker.sock
"registry.gitlab.com/gitlab-org/security-products/sast:$SP_VERSION" /app/bin/run /code
artifacts:
reports:
sast: gl-sast-report.json
tags:
- docker
- priv
# ====================
# test stage
# ====================
testLTS: testLTS:
stage: test stage: test
script: script:
- npmci test lts - npmci npm prepare
- npmci node install lts
- npmci npm install
- npmci npm test
coverage: /\d+.?\d+?\%\s*coverage/
tags: tags:
- docker - docker
- notpriv
testSTABLE: testSTABLE:
stage: test stage: test
script: script:
- npmci test stable - npmci npm prepare
- npmci node install stable
- npmci npm install
- npmci npm test
coverage: /\d+.?\d+?\%\s*coverage/
tags: tags:
- docker - docker
- notpriv
release: release:
stage: release stage: release
script: script:
- npmci publish - npmci node install stable
- npmci npm publish
only: only:
- tags - tags
tags: tags:
- docker - docker
- notpriv
# ====================
# metadata stage
# ====================
codequality:
stage: metadata
image: docker:stable
allow_failure: true
services:
- docker:stable-dind
script:
- export SP_VERSION=$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/')
- docker run
--env SOURCE_CODE="$PWD"
--volume "$PWD":/code
--volume /var/run/docker.sock:/var/run/docker.sock
"registry.gitlab.com/gitlab-org/security-products/codequality:$SP_VERSION" /code
artifacts:
paths: [codeclimate.json]
tags:
- docker
- priv
trigger: trigger:
stage: trigger stage: metadata
script: script:
- npmci trigger - npmci trigger
only: only:
- tags - tags
tags: tags:
- docker - docker
- notpriv
pages: pages:
image: hosttoday/ht-docker-node:npmpage image: hosttoday/ht-docker-node:npmci
stage: pages stage: metadata
script: script:
- npmci command npmpage --host gitlab - npmci command npm install -g typedoc typescript
- npmci npm prepare
- npmci npm install
- npmci command typedoc --module "commonjs" --target "ES2016" --out public/ ts/
tags:
- docker
- notpriv
only: only:
- tags - tags
artifacts: artifacts:
expire_in: 1 week expire_in: 1 week
paths: paths:
- public - public
allow_failure: true

View File

@ -1,32 +0,0 @@
# 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 for optimal intellisense
```javascript
import * as dnsly from 'dnsly'
let myDnsly = new dnsly.Dnsly('google') // uses Google DNS Servers e.g 8.8.8.8
myDnsly.getRecord('example.com','AAAA') // returns promise
.then((record: dnsly.I_AAAA) => { // AAAA record for google.com, the I_AAAA will give you proper typings for the record return type
// do something
})
```
[![npm](https://push.rocks/assets/repo-header.svg)](https://push.rocks)

View File

@ -1,5 +0,0 @@
import 'typings-global';
import * as beautylog from 'beautylog';
import * as dns from 'dns';
import * as smartdelay from 'smartdelay';
export { beautylog, dns, smartdelay };

View File

@ -1,9 +0,0 @@
"use strict";
require("typings-global");
const beautylog = require("beautylog");
exports.beautylog = beautylog;
const dns = require("dns");
exports.dns = dns;
const smartdelay = require("smartdelay");
exports.smartdelay = smartdelay;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5zbHkucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2Ruc2x5LnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDBCQUF1QjtBQUN2Qix1Q0FBc0M7QUFLbEMsOEJBQVM7QUFKYiwyQkFBMEI7QUFLdEIsa0JBQUc7QUFKUCx5Q0FBd0M7QUFLcEMsZ0NBQVUifQ==

44
dist/index.d.ts vendored
View File

@ -1,44 +0,0 @@
export declare type TDnsProvider = 'google';
export declare type TDnsRecordType = 'A' | 'AAAA' | 'CNAME' | 'PTR' | 'MX' | 'NAPTR' | 'NS' | 'SOA' | 'SRV' | 'TXT';
export interface IDnsRecord {
chunked?: string[];
name: string;
type: TDnsRecordType;
value: string;
}
/**
* class dnsly offers methods for working with dns from a dns provider like Google DNS
*/
export declare class Dnsly {
dnsServerIp: string;
dnsServerPort: number;
/**
* constructor for class dnsly
*/
constructor(dnsProviderArg?: TDnsProvider);
/**
* gets a record
*/
getRecord(recordNameArg: string, recordTypeArg: TDnsRecordType): Promise<IDnsRecord[]>;
checkUntilAvailable(recordNameArg: string, recordTypeArg: TDnsRecordType, expectedValue: string): Promise<any>;
/**
* get A Dns Record
*/
getRecordA(recordNameArg: string): Promise<IDnsRecord[]>;
/**
* get AAAA Record
*/
getRecordAAAA(recordNameArg: string): Promise<IDnsRecord[]>;
/**
* gets a txt record
*/
getRecordTxt(recordNameArg: string): Promise<IDnsRecord[]>;
/**
* get oridinary record
*/
private getOrdinaryRecord(recordNameArg, recordTypeArg);
/**
* set the DNS provider
*/
private _setDnsProvider(dnsProvider);
}

142
dist/index.js vendored
View File

@ -1,142 +0,0 @@
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
const q = require("smartq");
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 = 'google') {
this._setDnsProvider(dnsProviderArg);
}
/**
* gets a record
*/
getRecord(recordNameArg, recordTypeArg) {
return __awaiter(this, void 0, void 0, function* () {
switch (recordTypeArg) {
case 'TXT':
return yield this.getRecordTxt(recordNameArg);
case 'A':
return yield this.getRecordA(recordNameArg);
case 'AAAA':
return yield this.getRecordAAAA(recordNameArg);
}
});
}
checkUntilAvailable(recordNameArg, recordTypeArg, expectedValue) {
return __awaiter(this, void 0, void 0, function* () {
let cycleArg = 0;
let doCheck = () => __awaiter(this, void 0, void 0, function* () {
if (cycleArg < 30) {
cycleArg++;
try {
let myRecordArray = yield this.getRecord(recordNameArg, recordTypeArg);
let myRecord = myRecordArray[0].value;
if (myRecord === expectedValue) {
return true;
}
else {
yield plugins.smartdelay.delayFor(500);
return yield doCheck();
}
}
catch (err) {
yield plugins.smartdelay.delayFor(500);
return yield doCheck();
}
}
else {
console.log('failed permanently...');
return false;
}
});
return yield doCheck();
});
}
/**
* get A Dns Record
*/
getRecordA(recordNameArg) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.getOrdinaryRecord(recordNameArg, 'A');
});
}
/**
* get AAAA Record
*/
getRecordAAAA(recordNameArg) {
return __awaiter(this, void 0, void 0, function* () {
return yield this.getOrdinaryRecord(recordNameArg, 'AAAA');
});
}
/**
* gets a txt record
*/
getRecordTxt(recordNameArg) {
let done = q.defer();
plugins.dns.resolveTxt(recordNameArg, (err, recordsArg) => {
if (err) {
done.reject(err);
}
let responseArray = [];
for (let record of recordsArg) {
let recordAny = record; // fix wrong typings
responseArray.push({
chunked: recordAny,
name: recordNameArg,
value: recordAny.join(' '),
type: 'TXT'
});
}
done.resolve(responseArray);
});
return done.promise;
}
/**
* get oridinary record
*/
getOrdinaryRecord(recordNameArg, recordTypeArg) {
let done = q.defer();
plugins.dns.resolve(recordNameArg, recordTypeArg, (err, recordsArg) => {
if (err) {
done.reject(err);
}
let responseArray = [];
for (let record of recordsArg) {
responseArray.push({
name: recordNameArg,
value: record,
type: recordTypeArg
});
}
done.resolve(responseArray);
});
return done.promise;
}
/**
* set the DNS provider
*/
_setDnsProvider(dnsProvider) {
if (dnsProvider === 'google') {
this.dnsServerIp = '8.8.8.8';
this.dnsServerPort = 53;
plugins.dns.setServers(['8.8.8.8', '8.8.4.4']);
}
else {
throw new Error('unknown dns provider');
}
}
}
exports.Dnsly = Dnsly;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSw0QkFBMkI7QUFDM0IsMkNBQTBDO0FBcUIxQzs7R0FFRztBQUNIO0lBR0k7O09BRUc7SUFDSCxZQUFZLGlCQUErQixRQUFRO1FBQy9DLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUE7SUFDeEMsQ0FBQztJQUVEOztPQUVHO0lBQ0csU0FBUyxDQUFDLGFBQXFCLEVBQUUsYUFBNkI7O1lBQ2hFLE1BQU0sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLEtBQUssS0FBSztvQkFDTixNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFBO2dCQUNqRCxLQUFLLEdBQUc7b0JBQ0osTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQTtnQkFDL0MsS0FBSyxNQUFNO29CQUNQLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUE7WUFDdEQsQ0FBQztRQUNMLENBQUM7S0FBQTtJQUVLLG1CQUFtQixDQUFDLGFBQXFCLEVBQUUsYUFBNkIsRUFBRSxhQUFxQjs7WUFDakcsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFBO1lBQ2hCLElBQUksT0FBTyxHQUFHO2dCQUNWLEVBQUUsQ0FBQyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNoQixRQUFRLEVBQUUsQ0FBQTtvQkFDVixJQUFJLENBQUM7d0JBQ0QsSUFBSSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQTt3QkFDdEUsSUFBSSxRQUFRLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQTt3QkFDckMsRUFBRSxDQUFDLENB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

10
npmextra.json Normal file
View File

@ -0,0 +1,10 @@
{
"gitzone": {
"compliance": "standard"
},
"npmci": {
"npmGlobalTools": [],
"npmAccessLevel": "public",
"npmRegistryUrl": "registry.npmjs.org"
}
}

1585
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,11 +1,13 @@
{ {
"name": "dnsly", "name": "@pushrocks/smartdns",
"version": "2.0.1", "version": "3.0.6",
"private": false,
"description": "smart dns methods written in TypeScript", "description": "smart dns methods written in TypeScript",
"main": "dist/index.js", "main": "dist/index.js",
"typings": "dist/index.d.ts", "typings": "dist/index.d.ts",
"scripts": { "scripts": {
"test": "(npmts)" "test": "(tstest test/)",
"build": "(tsbuild)"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@ -23,13 +25,15 @@
}, },
"homepage": "https://gitlab.com/pushrocks/dnsly#README", "homepage": "https://gitlab.com/pushrocks/dnsly#README",
"dependencies": { "dependencies": {
"beautylog": "^6.0.0", "@pushrocks/smartdelay": "^2.0.2",
"smartdelay": "^1.0.1", "@pushrocks/smartpromise": "^2.0.5"
"smartq": "^1.0.4",
"typings-global": "^1.0.14"
}, },
"devDependencies": { "devDependencies": {
"smartchai": "^1.0.1", "@gitzone/tsbuild": "^2.1.4",
"typings-test": "^1.0.3" "@gitzone/tstest": "^1.0.18",
"@pushrocks/tapbundle": "^3.0.7",
"@types/node": "^10.12.18",
"tslint": "^5.12.0",
"tslint-config-prettier": "^1.17.0"
} }
} }

43
readme.md Normal file
View File

@ -0,0 +1,43 @@
# @pushrocks/smartdns
smart dns methods written in TypeScript
## Availabililty
[![npm](https://pushrocks.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/@pushrocks/smartdns)
[![git](https://pushrocks.gitlab.io/assets/repo-button-git.svg)](https://GitLab.com/pushrocks/smartdns)
[![git](https://pushrocks.gitlab.io/assets/repo-button-mirror.svg)](https://github.com/pushrocks/smartdns)
[![docs](https://pushrocks.gitlab.io/assets/repo-button-docs.svg)](https://pushrocks.gitlab.io/smartdns/)
## Status for master
[![build status](https://GitLab.com/pushrocks/smartdns/badges/master/build.svg)](https://GitLab.com/pushrocks/smartdns/commits/master)
[![coverage report](https://GitLab.com/pushrocks/smartdns/badges/master/coverage.svg)](https://GitLab.com/pushrocks/smartdns/commits/master)
[![npm downloads per month](https://img.shields.io/npm/dm/@pushrocks/smartdns.svg)](https://www.npmjs.com/package/@pushrocks/smartdns)
[![Dependency Status](https://david-dm.org/pushrocks/smartdns.svg)](https://david-dm.org/pushrocks/smartdns)
[![bitHound Dependencies](https://www.bithound.io/github/pushrocks/smartdns/badges/dependencies.svg)](https://www.bithound.io/github/pushrocks/smartdns/master/dependencies/npm)
[![bitHound Code](https://www.bithound.io/github/pushrocks/smartdns/badges/code.svg)](https://www.bithound.io/github/pushrocks/smartdns)
[![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
Use TypeScript for best in class instellisense.
```typescript
let myDnsly = new dnsly.Dnsly('google'); // uses Google DNS Servers e.g 8.8.8.8
myDnsly
.getRecord('example.com', 'AAAA') // returns promise
.then((record: dnsly.I_AAAA) => {
// AAAA record for google.com, the I_AAAA will give you proper typings for the record return type
// do something
});
```
For further information read the linked docs at the top of this README.
> MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh)
> | By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html)
[![repo-footer](https://pushrocks.gitlab.io/assets/repo-footer.svg)](https://push.rocks)

1
test/test.d.ts vendored
View File

@ -1 +0,0 @@
import 'typings-test';

View File

@ -1,50 +0,0 @@
"use strict";
require("typings-test");
const smartchai_1 = require("smartchai");
const dnsly = require("../dist/index");
let testDnsly;
describe('dnsly', function () {
it('should create an instance of Dnsly', function () {
testDnsly = new dnsly.Dnsly('google');
smartchai_1.expect(testDnsly).to.be.instanceOf(dnsly.Dnsly);
});
it('should get an A DNS Record', function () {
return smartchai_1.expect(testDnsly.getRecordA('dnsly_a.bleu.de')).to.eventually.deep.equal([{
name: 'dnsly_a.bleu.de',
value: '127.0.0.1',
type: 'A'
}]);
});
it('should get an AAAA Record', function () {
return smartchai_1.expect(testDnsly.getRecordAAAA('dnsly_aaaa.bleu.de')).to.eventually.deep.equal([{
name: 'dnsly_aaaa.bleu.de',
value: '::1',
type: 'AAAA'
}]);
});
it('should get a txt record', function () {
return smartchai_1.expect(testDnsly.getRecordTxt('dnsly_txt.bleu.de')).to.eventually.deep.equal([{
chunked: ['sometext_txt'],
name: 'dnsly_txt.bleu.de',
value: 'sometext_txt',
type: 'TXT'
}]);
});
it('should, get a mx record for a domain', function (done) {
testDnsly.getRecord('google.com', 'MX').then(res => {
console.log(res);
done();
}).catch(err => {
console.log(err);
done(err);
});
});
it('should check until DNS is available', function () {
return smartchai_1.expect(testDnsly.checkUntilAvailable('dnsly_txt.bleu.de', 'TXT', 'sometext_txt')).to.eventually.be.true;
});
it('should check until DNS is available an return false if it fails', function () {
this.timeout(30000);
return smartchai_1.expect(testDnsly.checkUntilAvailable('dnsly_txt.bleu.de', 'TXT', 'sometext_txt2')).to.eventually.be.false;
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHdCQUFxQjtBQUNyQix5Q0FBa0M7QUFFbEMsdUNBQXNDO0FBRXRDLElBQUksU0FBc0IsQ0FBQTtBQUUxQixRQUFRLENBQUMsT0FBTyxFQUFFO0lBQ2QsRUFBRSxDQUFDLG9DQUFvQyxFQUFFO1FBQ3JDLFNBQVMsR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDckMsa0JBQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDbkQsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsNEJBQTRCLEVBQUU7UUFDN0IsTUFBTSxDQUFDLGtCQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzdFLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLEtBQUssRUFBRyxXQUFXO2dCQUNuQixJQUFJLEVBQUUsR0FBRzthQUNaLENBQUMsQ0FBQyxDQUFBO0lBQ1AsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsMkJBQTJCLEVBQUU7UUFDNUIsTUFBTSxDQUFDLGtCQUFNLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25GLElBQUksRUFBRSxvQkFBb0I7Z0JBQzFCLEtBQUssRUFBRyxLQUFLO2dCQUNiLElBQUksRUFBRSxNQUFNO2FBQ2YsQ0FBQyxDQUFDLENBQUE7SUFDUCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyx5QkFBeUIsRUFBRTtRQUMxQixNQUFNLENBQUMsa0JBQU0sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDakYsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDO2dCQUN6QixJQUFJLEVBQUUsbUJBQW1CO2dCQUN6QixLQUFLLEVBQUUsY0FBYztnQkFDckIsSUFBSSxFQUFFLEtBQUs7YUFDZCxDQUFDLENBQUMsQ0FBQTtJQUNQLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLFVBQVUsSUFBSTtRQUNyRCxTQUFTLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRztZQUM1QyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ2hCLElBQUksRUFBRSxDQUFBO1FBQ1YsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUc7WUFDUixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNiLENBQUMsQ0FBQyxDQUFBO0lBRU4sQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMscUNBQXFDLEVBQUU7UUFDdEMsTUFBTSxDQUFDLGtCQUFNLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixFQUFDLEtBQUssRUFBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQTtJQUNoSCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyxpRUFBaUUsRUFBRTtRQUNsRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ25CLE1BQU0sQ0FBQyxrQkFBTSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBQyxLQUFLLEVBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUE7SUFDbEgsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDLENBQUMsQ0FBQSJ9

View File

@ -1,58 +1,68 @@
import 'typings-test' import { expect, tap } from '@pushrocks/tapbundle';
import { expect } from 'smartchai'
import * as dnsly from '../dist/index' import * as smartdns from '../ts/index';
let testDnsly: dnsly.Dnsly let testDnsly: smartdns.Smartdns;
describe('dnsly', function () { tap.test('should create an instance of Dnsly', async () => {
it('should create an instance of Dnsly', function () { testDnsly = new smartdns.Smartdns('cloudflare');
testDnsly = new dnsly.Dnsly('google') expect(testDnsly).to.be.instanceOf(smartdns.Smartdns);
expect(testDnsly).to.be.instanceOf(dnsly.Dnsly) });
})
it('should get an A DNS Record', function () { tap.test('should get an A DNS Record', async () => {
return expect(testDnsly.getRecordA('dnsly_a.bleu.de')).to.eventually.deep.equal([{ return expect(testDnsly.getRecordA('dnsly_a.bleu.de')).to.eventually.deep.equal([
name: 'dnsly_a.bleu.de', {
value: '127.0.0.1', name: 'dnsly_a.bleu.de',
type: 'A' value: '127.0.0.1',
}]) type: 'A'
}) }
]);
});
it('should get an AAAA Record', function () { tap.test('should get an AAAA Record', async () => {
return expect(testDnsly.getRecordAAAA('dnsly_aaaa.bleu.de')).to.eventually.deep.equal([{ return expect(testDnsly.getRecordAAAA('dnsly_aaaa.bleu.de')).to.eventually.deep.equal([
name: 'dnsly_aaaa.bleu.de', {
value: '::1', name: 'dnsly_aaaa.bleu.de',
type: 'AAAA' value: '::1',
}]) type: 'AAAA'
}) }
]);
});
it('should get a txt record', function() { tap.test('should get a txt record', async () => {
return expect(testDnsly.getRecordTxt('dnsly_txt.bleu.de')).to.eventually.deep.equal([{ return expect(testDnsly.getRecordTxt('dnsly_txt.bleu.de')).to.eventually.deep.equal([
chunked: ['sometext_txt'], {
name: 'dnsly_txt.bleu.de', chunked: ['sometext_txt'],
value: 'sometext_txt', name: 'dnsly_txt.bleu.de',
type: 'TXT' value: 'sometext_txt',
}]) type: 'TXT'
}) }
]);
});
it('should, get a mx record for a domain', function (done) { tap.test('should, get a mx record for a domain', async () => {
testDnsly.getRecord('google.com', 'MX').then(res => { const res = await testDnsly.getRecord('bleu.de', 'MX');
console.log(res) console.log(res);
done() });
}).catch(err => {
console.log(err)
done(err)
})
}) tap.test('should check until DNS is available', async () => {
return expect(testDnsly.checkUntilAvailable('dnsly_txt.bleu.de', 'TXT', 'sometext_txt')).to
.eventually.be.true;
});
it('should check until DNS is available', function() { tap.test('should check until DNS is available an return false if it fails', async () => {
return expect(testDnsly.checkUntilAvailable('dnsly_txt.bleu.de','TXT','sometext_txt')).to.eventually.be.true return expect(testDnsly.checkUntilAvailable('dnsly_txt.bleu.de', 'TXT', 'sometext_txt2')).to
}) .eventually.be.false;
});
it('should check until DNS is available an return false if it fails', function() { tap.test('should check until DNS is available an return false if it fails', async () => {
this.timeout(30000) return expect(testDnsly.checkUntilAvailable('dnsly_txtNotThere.bleu.de', 'TXT', 'sometext_txt2'))
return expect(testDnsly.checkUntilAvailable('dnsly_txt.bleu.de','TXT','sometext_txt2')).to.eventually.be.false .to.eventually.be.false;
}) });
})
tap.test('should get name server for hostname', async () => {
let result = await testDnsly.getNameServer('bleu.de');
console.log(result);
});
tap.start();

View File

@ -1,10 +1,5 @@
import 'typings-global' import * as dns from 'dns';
import * as beautylog from 'beautylog' import * as smartdelay from '@pushrocks/smartdelay';
import * as dns from 'dns' import * as smartpromise from '@pushrocks/smartpromise';
import * as smartdelay from 'smartdelay'
export { export { dns, smartdelay, smartpromise };
beautylog,
dns,
smartdelay
}

View File

@ -1,148 +1,163 @@
import * as q from 'smartq' import * as plugins from './dnsly.plugins';
import * as plugins from './dnsly.plugins'
export type TDnsProvider = 'google' export type TDnsProvider = 'google' | 'cloudflare';
export type TDnsRecordType = 'A' export type TDnsRecordType =
| 'AAAA' | 'A'
| 'CNAME' | 'AAAA'
| 'PTR' | 'CNAME'
| 'MX' | 'PTR'
| 'NAPTR' | 'MX'
| 'NS' | 'NAPTR'
| 'SOA' | 'NS'
| 'SRV' | 'SOA'
| 'TXT' | 'SRV'
| 'TXT';
export interface IDnsRecord { export interface IDnsRecord {
chunked?: string[] chunked?: string[];
name: string name: string;
type: TDnsRecordType type: TDnsRecordType;
value: string value: string;
} }
/** /**
* class dnsly offers methods for working with dns from a dns provider like Google DNS * class dnsly offers methods for working with dns from a dns provider like Google DNS
*/ */
export class Dnsly { export class Smartdns {
dnsServerIp: string dnsServerIp: string;
dnsServerPort: number dnsServerPort: number;
/** /**
* constructor for class dnsly * constructor for class dnsly
*/ */
constructor(dnsProviderArg: TDnsProvider = 'google') { constructor(dnsProviderArg: TDnsProvider = 'cloudflare') {
this._setDnsProvider(dnsProviderArg) this._setDnsProvider(dnsProviderArg);
} }
/** /**
* gets a record * check a dns record until it has propagated to Google DNS
*/ * should be considerably fast
async getRecord(recordNameArg: string, recordTypeArg: TDnsRecordType): Promise<IDnsRecord[]> { * @param recordNameArg
switch (recordTypeArg) { * @param recordTypeArg
case 'TXT': * @param expectedValue
return await this.getRecordTxt(recordNameArg) */
case 'A': async checkUntilAvailable(
return await this.getRecordA(recordNameArg) recordNameArg: string,
case 'AAAA': recordTypeArg: TDnsRecordType,
return await this.getRecordAAAA(recordNameArg) expectedValue: string
) {
let cycleArg = 0;
let doCheck = async () => {
if (cycleArg < 30) {
cycleArg++;
try {
let myRecordArray = await this.getRecord(recordNameArg, recordTypeArg);
let myRecord = myRecordArray[0].value[0];
if (myRecord === expectedValue) {
return true;
} else {
await plugins.smartdelay.delayFor(2000);
return await doCheck();
}
} catch (err) {
await plugins.smartdelay.delayFor(2000);
return await doCheck();
} }
} } else {
console.log('failed permanently...');
return false;
}
};
return await doCheck();
}
async checkUntilAvailable(recordNameArg: string, recordTypeArg: TDnsRecordType, expectedValue: string) { /**
let cycleArg = 0 * get A Dns Record
let doCheck = async () => { */
if (cycleArg < 30) { async getRecordA(recordNameArg: string): Promise<IDnsRecord[]> {
cycleArg++ return await this.getRecord(recordNameArg, 'A');
try { }
let myRecordArray = await this.getRecord(recordNameArg, recordTypeArg)
let myRecord = myRecordArray[0].value
if (myRecord === expectedValue) {
return true
} else {
await plugins.smartdelay.delayFor(500)
return await doCheck()
}
} catch (err) {
await plugins.smartdelay.delayFor(500)
return await doCheck()
}
} else {
console.log('failed permanently...')
return false
}
}
return await doCheck()
}
/** /**
* get A Dns Record * get AAAA Record
*/ */
async getRecordA(recordNameArg: string): Promise<IDnsRecord[]> { async getRecordAAAA(recordNameArg: string) {
return await this.getOrdinaryRecord(recordNameArg, 'A') return await this.getRecord(recordNameArg, 'AAAA');
} }
/** /**
* get AAAA Record * gets a txt record
*/ */
async getRecordAAAA(recordNameArg: string) { getRecordTxt(recordNameArg: string): Promise<IDnsRecord[]> {
return await this.getOrdinaryRecord(recordNameArg, 'AAAA') let done = plugins.smartpromise.defer<IDnsRecord[]>();
} plugins.dns.resolveTxt(recordNameArg, (err, recordsArg) => {
if (err) {
done.reject(err);
return;
}
let responseArray: IDnsRecord[] = [];
for (let record of recordsArg) {
let recordAny: any = record; // fix wrong typings
responseArray.push({
chunked: recordAny,
name: recordNameArg,
value: recordAny.join(' '),
type: 'TXT'
});
}
done.resolve(responseArray);
});
return done.promise;
}
/** /**
* gets a txt record * get oridinary record
*/ */
getRecordTxt(recordNameArg: string): Promise<IDnsRecord[]> { getRecord(recordNameArg: string, recordTypeArg: TDnsRecordType): Promise<IDnsRecord[]> {
let done = q.defer<IDnsRecord[]>() let done = plugins.smartpromise.defer<IDnsRecord[]>();
plugins.dns.resolveTxt(recordNameArg, (err, recordsArg) => { plugins.dns.resolve(recordNameArg, recordTypeArg, (err, recordsArg) => {
if (err) { if (err) {
done.reject(err) done.reject(err);
} return;
let responseArray: IDnsRecord[] = [] }
for (let record of recordsArg) { let responseArray: IDnsRecord[] = [];
let recordAny: any = record // fix wrong typings for (let recordKey in recordsArg) {
responseArray.push({ responseArray.push({
chunked: recordAny, name: recordNameArg,
name: recordNameArg, value: recordsArg[recordKey],
value: recordAny.join(' '), type: recordTypeArg
type: 'TXT' });
}) }
} done.resolve(responseArray);
done.resolve(responseArray) });
}) return done.promise;
return done.promise }
}
/** getNameServer(domainNameArg: string) {
* get oridinary record const done = plugins.smartpromise.defer();
*/ plugins.dns.resolveNs(domainNameArg, (err, result) => {
private getOrdinaryRecord(recordNameArg: string, recordTypeArg: TDnsRecordType): Promise<IDnsRecord[]> { if (!err) {
let done = q.defer<IDnsRecord[]>() done.resolve(result);
plugins.dns.resolve(recordNameArg, recordTypeArg, (err, recordsArg) => { } else {
if (err) { console.log(err);
done.reject(err) done.reject(err);
} }
let responseArray: IDnsRecord[] = [] });
for (let record of recordsArg) { }
responseArray.push({
name: recordNameArg,
value: record,
type: recordTypeArg
})
}
done.resolve(responseArray)
})
return done.promise
}
/** /**
* set the DNS provider * set the DNS provider
*/ */
private _setDnsProvider(dnsProvider: TDnsProvider) { private _setDnsProvider(dnsProvider: TDnsProvider) {
if (dnsProvider === 'google') { if (dnsProvider === 'google') {
this.dnsServerIp = '8.8.8.8' this.dnsServerIp = '8.8.8.8';
this.dnsServerPort = 53 this.dnsServerPort = 53;
plugins.dns.setServers(['8.8.8.8', '8.8.4.4']) plugins.dns.setServers(['8.8.8.8', '8.8.4.4']);
} else { } else if (dnsProvider === 'cloudflare') {
throw new Error('unknown dns provider') this.dnsServerIp = '1.1.1.1';
} this.dnsServerPort = 53;
plugins.dns.setServers(['1.1.1.1', '1.0.0.1']);
} else {
throw new Error('unknown dns provider');
} }
}
} }

View File

@ -1,3 +1,17 @@
{ {
"extends": "tslint-config-standard" "extends": ["tslint:latest", "tslint-config-prettier"],
"rules": {
"semicolon": [true, "always"],
"no-console": false,
"ordered-imports": false,
"object-literal-sort-keys": false,
"member-ordering": {
"options":{
"order": [
"static-method"
]
}
}
},
"defaultSeverity": "warning"
} }