Compare commits
24 Commits
Author | SHA1 | Date | |
---|---|---|---|
6286bfaa8f | |||
9390bbae61 | |||
ebb007bcdb | |||
e6d99d5664 | |||
7b29efc398 | |||
64c381d42f | |||
d4dbf4f2b3 | |||
562dca35a7 | |||
2bbbbc17e8 | |||
4ada87a945 | |||
3e45a24750 | |||
96b4926f8f | |||
b0ceeda2b9 | |||
b118419301 | |||
25699ebfc5 | |||
a69f565cf8 | |||
fe423a8e8a | |||
70862850d5 | |||
31ab725d2f | |||
d98890c14e | |||
5327914895 | |||
5bd2b6cb55 | |||
1cdce1b862 | |||
e18e7a04ee |
109
.gitlab-ci.yml
109
.gitlab-ci.yml
@ -1,56 +1,127 @@
|
|||||||
image: hosttoday/ht-docker-node:npmts
|
# gitzone standard
|
||||||
|
image: hosttoday/ht-docker-node:npmci
|
||||||
|
|
||||||
|
cache:
|
||||||
|
paths:
|
||||||
|
- .yarn/
|
||||||
|
key: "$CI_BUILD_STAGE"
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
|
- security
|
||||||
- test
|
- test
|
||||||
- release
|
- release
|
||||||
- trigger
|
- metadata
|
||||||
- pages
|
|
||||||
|
|
||||||
|
# ====================
|
||||||
|
# security stage
|
||||||
|
# ====================
|
||||||
|
mirror:
|
||||||
|
stage: security
|
||||||
|
script:
|
||||||
|
- npmci git mirror
|
||||||
|
tags:
|
||||||
|
- docker
|
||||||
|
- notpriv
|
||||||
|
|
||||||
|
snyk:
|
||||||
|
stage: security
|
||||||
|
script:
|
||||||
|
- npmci command yarn global add snyk
|
||||||
|
- npmci command yarn install --ignore-scripts
|
||||||
|
- npmci command snyk test
|
||||||
|
tags:
|
||||||
|
- docker
|
||||||
|
- notpriv
|
||||||
|
|
||||||
|
# ====================
|
||||||
|
# test stage
|
||||||
|
# ====================
|
||||||
testLEGACY:
|
testLEGACY:
|
||||||
stage: test
|
stage: test
|
||||||
script:
|
script:
|
||||||
- npmci test legacy
|
- npmci node install legacy
|
||||||
|
- npmci npm install
|
||||||
|
- npmci npm test
|
||||||
|
coverage: /\d+.?\d+?\%\s*coverage/
|
||||||
tags:
|
tags:
|
||||||
- docker
|
- docker
|
||||||
|
- notpriv
|
||||||
allow_failure: true
|
allow_failure: true
|
||||||
|
|
||||||
testLTS:
|
testLTS:
|
||||||
stage: test
|
stage: test
|
||||||
script:
|
script:
|
||||||
- npmci test lts
|
- 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 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 yarn global add npmpage
|
||||||
|
- npmci command npmpage
|
||||||
|
tags:
|
||||||
|
- docker
|
||||||
|
- notpriv
|
||||||
only:
|
only:
|
||||||
- tags
|
- tags
|
||||||
artifacts:
|
artifacts:
|
||||||
|
32
README.md
32
README.md
@ -1,32 +0,0 @@
|
|||||||
# dnsly
|
|
||||||
smart dns methods written in TypeScript
|
|
||||||
|
|
||||||
## Availabililty
|
|
||||||
[](https://www.npmjs.com/package/dnsly)
|
|
||||||
[](https://gitlab.com/pushrocks/dnsly)
|
|
||||||
[](https://github.com/pushrocks/dnsly)
|
|
||||||
[](https://pushrocks.gitlab.io/dnsly/)
|
|
||||||
|
|
||||||
## Status for master
|
|
||||||
[](https://gitlab.com/pushrocks/dnsly/commits/master)
|
|
||||||
[](https://gitlab.com/pushrocks/dnsly/commits/master)
|
|
||||||
[](https://david-dm.org/pushrocks/dnsly)
|
|
||||||
[](https://www.bithound.io/github/pushrocks/dnsly/master/dependencies/npm)
|
|
||||||
[](https://www.bithound.io/github/pushrocks/dnsly)
|
|
||||||
[](https://nodejs.org/dist/latest-v6.x/docs/api/)
|
|
||||||
[](https://nodejs.org/dist/latest-v6.x/docs/api/)
|
|
||||||
[](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
|
|
||||||
})
|
|
||||||
```
|
|
||||||
|
|
||||||
[](https://push.rocks)
|
|
5
dist/dnsly.plugins.d.ts
vendored
5
dist/dnsly.plugins.d.ts
vendored
@ -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 };
|
|
9
dist/dnsly.plugins.js
vendored
9
dist/dnsly.plugins.js
vendored
@ -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
44
dist/index.d.ts
vendored
@ -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);
|
|
||||||
}
|
|
144
dist/index.js
vendored
144
dist/index.js
vendored
@ -1,144 +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);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
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);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
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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
|
|
12
npmextra.json
Normal file
12
npmextra.json
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"gitzone": {
|
||||||
|
"compliance": "standard"
|
||||||
|
},
|
||||||
|
"npmci": {
|
||||||
|
"npmGlobalTools": [
|
||||||
|
"@gitzone/npmts",
|
||||||
|
"ts-node"
|
||||||
|
],
|
||||||
|
"npmAccessLevel": "public"
|
||||||
|
}
|
||||||
|
}
|
18
package.json
18
package.json
@ -1,11 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "dnsly",
|
"name": "@pushrocks/smartdns",
|
||||||
"version": "2.0.3",
|
"version": "3.0.4",
|
||||||
"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": "(ts-node -O '{\"lib\": [ \"es2015\" ]}' test/test.ts)",
|
||||||
|
"build": "(npmts)"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -23,13 +24,12 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://gitlab.com/pushrocks/dnsly#README",
|
"homepage": "https://gitlab.com/pushrocks/dnsly#README",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"beautylog": "^6.0.0",
|
"beautylog": "^6.1.10",
|
||||||
"smartdelay": "^1.0.1",
|
"smartdelay": "^1.0.4",
|
||||||
"smartq": "^1.0.4",
|
"smartq": "^1.1.8"
|
||||||
"typings-global": "^1.0.14"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"smartchai": "^1.0.1",
|
"@types/node": "^10.0.8",
|
||||||
"typings-test": "^1.0.3"
|
"tapbundle": "^2.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
43
readme.md
Normal file
43
readme.md
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
# @pushrocks/smartdns
|
||||||
|
|
||||||
|
smart dns methods written in TypeScript
|
||||||
|
|
||||||
|
## Availabililty
|
||||||
|
|
||||||
|
[](https://www.npmjs.com/package/@pushrocks/smartdns)
|
||||||
|
[](https://GitLab.com/pushrocks/smartdns)
|
||||||
|
[](https://github.com/pushrocks/smartdns)
|
||||||
|
[](https://pushrocks.gitlab.io/smartdns/)
|
||||||
|
|
||||||
|
## Status for master
|
||||||
|
|
||||||
|
[](https://GitLab.com/pushrocks/smartdns/commits/master)
|
||||||
|
[](https://GitLab.com/pushrocks/smartdns/commits/master)
|
||||||
|
[](https://www.npmjs.com/package/@pushrocks/smartdns)
|
||||||
|
[](https://david-dm.org/pushrocks/smartdns)
|
||||||
|
[](https://www.bithound.io/github/pushrocks/smartdns/master/dependencies/npm)
|
||||||
|
[](https://www.bithound.io/github/pushrocks/smartdns)
|
||||||
|
[](https://nodejs.org/dist/latest-v6.x/docs/api/)
|
||||||
|
[](https://nodejs.org/dist/latest-v6.x/docs/api/)
|
||||||
|
[](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 | **©** [Lossless GmbH](https://lossless.gmbh)
|
||||||
|
> | By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html)
|
||||||
|
|
||||||
|
[](https://push.rocks)
|
1
test/test.d.ts
vendored
1
test/test.d.ts
vendored
@ -1 +0,0 @@
|
|||||||
import 'typings-test';
|
|
54
test/test.js
54
test/test.js
@ -1,54 +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;
|
|
||||||
});
|
|
||||||
it('should check until DNS is available an return false if it fails', function () {
|
|
||||||
this.timeout(30000);
|
|
||||||
return smartchai_1.expect(testDnsly.checkUntilAvailable('dnsly_txtNotThere.bleu.de', 'TXT', 'sometext_txt2')).to.eventually.be.false;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHdCQUFxQjtBQUNyQix5Q0FBa0M7QUFFbEMsdUNBQXNDO0FBRXRDLElBQUksU0FBc0IsQ0FBQTtBQUUxQixRQUFRLENBQUMsT0FBTyxFQUFFO0lBQ2QsRUFBRSxDQUFDLG9DQUFvQyxFQUFFO1FBQ3JDLFNBQVMsR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDckMsa0JBQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDbkQsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsNEJBQTRCLEVBQUU7UUFDN0IsTUFBTSxDQUFDLGtCQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzdFLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLEtBQUssRUFBRyxXQUFXO2dCQUNuQixJQUFJLEVBQUUsR0FBRzthQUNaLENBQUMsQ0FBQyxDQUFBO0lBQ1AsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsMkJBQTJCLEVBQUU7UUFDNUIsTUFBTSxDQUFDLGtCQUFNLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25GLElBQUksRUFBRSxvQkFBb0I7Z0JBQzFCLEtBQUssRUFBRyxLQUFLO2dCQUNiLElBQUksRUFBRSxNQUFNO2FBQ2YsQ0FBQyxDQUFDLENBQUE7SUFDUCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyx5QkFBeUIsRUFBRTtRQUMxQixNQUFNLENBQUMsa0JBQU0sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDakYsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDO2dCQUN6QixJQUFJLEVBQUUsbUJBQW1CO2dCQUN6QixLQUFLLEVBQUUsY0FBYztnQkFDckIsSUFBSSxFQUFFLEtBQUs7YUFDZCxDQUFDLENBQUMsQ0FBQTtJQUNQLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLFVBQVUsSUFBSTtRQUNyRCxTQUFTLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRztZQUM1QyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ2hCLElBQUksRUFBRSxDQUFBO1FBQ1YsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUc7WUFDUixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNiLENBQUMsQ0FBQyxDQUFBO0lBRU4sQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMscUNBQXFDLEVBQUU7UUFDdEMsTUFBTSxDQUFDLGtCQUFNLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixFQUFDLEtBQUssRUFBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQTtJQUNoSCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyxpRUFBaUUsRUFBRTtRQUNsRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ25CLE1BQU0sQ0FBQyxrQkFBTSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBQyxLQUFLLEVBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUE7SUFDbEgsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsaUVBQWlFLEVBQUU7UUFDbEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNuQixNQUFNLENBQUMsa0JBQU0sQ0FDVCxTQUFTLENBQUMsbUJBQW1CLENBQUMsMkJBQTJCLEVBQUMsS0FBSyxFQUFDLGVBQWUsQ0FBQyxDQUNuRixDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQTtJQUM1QixDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUMsQ0FBQyxDQUFBIn0=
|
|
111
test/test.ts
111
test/test.ts
@ -1,65 +1,68 @@
|
|||||||
import 'typings-test'
|
import { expect, tap } from '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('google');
|
||||||
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 => {
|
let 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;
|
||||||
})
|
});
|
||||||
|
|
||||||
it('should check until DNS is available an return false if it fails', function() {
|
tap.test('should get name server for hostname', async () => {
|
||||||
this.timeout(30000)
|
let result = await testDnsly.getNameServer('bleu.de');
|
||||||
return expect(
|
console.log(result);
|
||||||
testDnsly.checkUntilAvailable('dnsly_txtNotThere.bleu.de','TXT','sometext_txt2')
|
});
|
||||||
).to.eventually.be.false
|
|
||||||
})
|
tap.start();
|
||||||
})
|
|
||||||
|
@ -1,10 +1,5 @@
|
|||||||
import 'typings-global'
|
import * as beautylog from 'beautylog';
|
||||||
import * as beautylog from 'beautylog'
|
import * as dns from 'dns';
|
||||||
import * as dns from 'dns'
|
import * as smartdelay from 'smartdelay';
|
||||||
import * as smartdelay from 'smartdelay'
|
|
||||||
|
|
||||||
export {
|
export { beautylog, dns, smartdelay };
|
||||||
beautylog,
|
|
||||||
dns,
|
|
||||||
smartdelay
|
|
||||||
}
|
|
||||||
|
274
ts/index.ts
274
ts/index.ts
@ -1,150 +1,160 @@
|
|||||||
import * as q from 'smartq'
|
import * as smartq from 'smartq';
|
||||||
import * as plugins from './dnsly.plugins'
|
import * as plugins from './dnsly.plugins';
|
||||||
|
|
||||||
export type TDnsProvider = 'google'
|
export type TDnsProvider = 'google';
|
||||||
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 = 'google') {
|
||||||
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(500);
|
||||||
|
return await doCheck();
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
await plugins.smartdelay.delayFor(500);
|
||||||
|
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 = smartq.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 = smartq.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
|
return;
|
||||||
}
|
}
|
||||||
let responseArray: IDnsRecord[] = []
|
let responseArray: IDnsRecord[] = [];
|
||||||
for (let record of recordsArg) {
|
for (let recordKey in recordsArg) {
|
||||||
let recordAny: any = record // fix wrong typings
|
responseArray.push({
|
||||||
responseArray.push({
|
name: recordNameArg,
|
||||||
chunked: recordAny,
|
value: recordsArg[recordKey],
|
||||||
name: recordNameArg,
|
type: recordTypeArg
|
||||||
value: recordAny.join(' '),
|
});
|
||||||
type: 'TXT'
|
}
|
||||||
})
|
done.resolve(responseArray);
|
||||||
}
|
});
|
||||||
done.resolve(responseArray)
|
return done.promise;
|
||||||
})
|
}
|
||||||
return done.promise
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
getNameServer(domainNameArg: string) {
|
||||||
* get oridinary record
|
const done = smartq.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);
|
||||||
return
|
}
|
||||||
}
|
});
|
||||||
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 {
|
||||||
throw new Error('unknown dns provider')
|
throw new Error('unknown dns provider');
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
360
yarn.lock
Normal file
360
yarn.lock
Normal file
@ -0,0 +1,360 @@
|
|||||||
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||||
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
|
"@types/chai-as-promised@^7.1.0":
|
||||||
|
version "7.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.0.tgz#010b04cde78eacfb6e72bfddb3e58fe23c2e78b9"
|
||||||
|
dependencies:
|
||||||
|
"@types/chai" "*"
|
||||||
|
|
||||||
|
"@types/chai-string@^1.4.0":
|
||||||
|
version "1.4.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/chai-string/-/chai-string-1.4.1.tgz#3a9d22716c27f2759bf272a4dbbdb593f18399e3"
|
||||||
|
dependencies:
|
||||||
|
"@types/chai" "*"
|
||||||
|
|
||||||
|
"@types/chai@*", "@types/chai@^4.1.2":
|
||||||
|
version "4.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.1.3.tgz#b8a74352977a23b604c01aa784f5b793443fb7dc"
|
||||||
|
|
||||||
|
"@types/lodash@^4.14.55":
|
||||||
|
version "4.14.108"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.108.tgz#02656af3add2e5b3174f830862c47421c00ef817"
|
||||||
|
|
||||||
|
"@types/node@^10.0.8":
|
||||||
|
version "10.0.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.0.8.tgz#37b4d91d4e958e4c2ba0be2b86e7ed4ff19b0858"
|
||||||
|
|
||||||
|
ansi-256-colors@^1.1.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/ansi-256-colors/-/ansi-256-colors-1.1.0.tgz#910de50efcc7c09e3d82f2f87abd6b700c18818a"
|
||||||
|
|
||||||
|
ansi-styles@^3.2.1:
|
||||||
|
version "3.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
|
||||||
|
dependencies:
|
||||||
|
color-convert "^1.9.0"
|
||||||
|
|
||||||
|
assertion-error@^1.0.1:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"
|
||||||
|
|
||||||
|
beautycolor@^1.0.7:
|
||||||
|
version "1.0.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/beautycolor/-/beautycolor-1.0.11.tgz#71c5568d5a7ed5c144d3a54f753ad1b08862aea5"
|
||||||
|
dependencies:
|
||||||
|
ansi-256-colors "^1.1.0"
|
||||||
|
typings-global "^1.0.14"
|
||||||
|
|
||||||
|
beautylog@^6.1.10:
|
||||||
|
version "6.1.10"
|
||||||
|
resolved "https://registry.yarnpkg.com/beautylog/-/beautylog-6.1.10.tgz#9c27e566937684cb689f9372d98cfa5415d50b72"
|
||||||
|
dependencies:
|
||||||
|
"@types/lodash" "^4.14.55"
|
||||||
|
beautycolor "^1.0.7"
|
||||||
|
figlet "^1.2.0"
|
||||||
|
lodash "^4.17.4"
|
||||||
|
ora "^1.1.0"
|
||||||
|
smartenv "^2.0.0"
|
||||||
|
smartq "^1.1.1"
|
||||||
|
typings-global "^1.0.14"
|
||||||
|
|
||||||
|
bindings@^1.2.1:
|
||||||
|
version "1.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7"
|
||||||
|
|
||||||
|
chai-as-promised@^7.1.1:
|
||||||
|
version "7.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0"
|
||||||
|
dependencies:
|
||||||
|
check-error "^1.0.2"
|
||||||
|
|
||||||
|
chai-string@^1.4.0:
|
||||||
|
version "1.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/chai-string/-/chai-string-1.4.0.tgz#359140c051d36a4e4b1a5fc6b910152f438a8d49"
|
||||||
|
|
||||||
|
chai@^4.1.2:
|
||||||
|
version "4.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/chai/-/chai-4.1.2.tgz#0f64584ba642f0f2ace2806279f4f06ca23ad73c"
|
||||||
|
dependencies:
|
||||||
|
assertion-error "^1.0.1"
|
||||||
|
check-error "^1.0.1"
|
||||||
|
deep-eql "^3.0.0"
|
||||||
|
get-func-name "^2.0.0"
|
||||||
|
pathval "^1.0.0"
|
||||||
|
type-detect "^4.0.0"
|
||||||
|
|
||||||
|
chalk@^2.0.1, chalk@^2.1.0:
|
||||||
|
version "2.4.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e"
|
||||||
|
dependencies:
|
||||||
|
ansi-styles "^3.2.1"
|
||||||
|
escape-string-regexp "^1.0.5"
|
||||||
|
supports-color "^5.3.0"
|
||||||
|
|
||||||
|
check-error@^1.0.1, check-error@^1.0.2:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82"
|
||||||
|
|
||||||
|
cli-cursor@^2.1.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
|
||||||
|
dependencies:
|
||||||
|
restore-cursor "^2.0.0"
|
||||||
|
|
||||||
|
cli-spinners@^1.0.1:
|
||||||
|
version "1.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a"
|
||||||
|
|
||||||
|
color-convert@^1.9.0:
|
||||||
|
version "1.9.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed"
|
||||||
|
dependencies:
|
||||||
|
color-name "^1.1.1"
|
||||||
|
|
||||||
|
color-name@^1.1.1:
|
||||||
|
version "1.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
|
||||||
|
|
||||||
|
deep-eql@^3.0.0:
|
||||||
|
version "3.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df"
|
||||||
|
dependencies:
|
||||||
|
type-detect "^4.0.0"
|
||||||
|
|
||||||
|
define-properties@^1.1.2:
|
||||||
|
version "1.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
|
||||||
|
dependencies:
|
||||||
|
foreach "^2.0.5"
|
||||||
|
object-keys "^1.0.8"
|
||||||
|
|
||||||
|
early@^2.1.1:
|
||||||
|
version "2.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/early/-/early-2.1.1.tgz#841e23254ea5dc54d8afaeee82f5ab65c00ee23c"
|
||||||
|
dependencies:
|
||||||
|
beautycolor "^1.0.7"
|
||||||
|
smartq "^1.1.1"
|
||||||
|
typings-global "^1.0.16"
|
||||||
|
|
||||||
|
es-abstract@^1.5.1:
|
||||||
|
version "1.11.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.11.0.tgz#cce87d518f0496893b1a30cd8461835535480681"
|
||||||
|
dependencies:
|
||||||
|
es-to-primitive "^1.1.1"
|
||||||
|
function-bind "^1.1.1"
|
||||||
|
has "^1.0.1"
|
||||||
|
is-callable "^1.1.3"
|
||||||
|
is-regex "^1.0.4"
|
||||||
|
|
||||||
|
es-to-primitive@^1.1.1:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d"
|
||||||
|
dependencies:
|
||||||
|
is-callable "^1.1.1"
|
||||||
|
is-date-object "^1.0.1"
|
||||||
|
is-symbol "^1.0.1"
|
||||||
|
|
||||||
|
es6-error@^4.0.2:
|
||||||
|
version "4.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d"
|
||||||
|
|
||||||
|
escape-string-regexp@^1.0.5:
|
||||||
|
version "1.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||||
|
|
||||||
|
figlet@^1.2.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.2.0.tgz#6c46537378fab649146b5a6143dda019b430b410"
|
||||||
|
|
||||||
|
foreach@^2.0.5:
|
||||||
|
version "2.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
|
||||||
|
|
||||||
|
function-bind@^1.0.2, function-bind@^1.1.1:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
|
||||||
|
|
||||||
|
get-func-name@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41"
|
||||||
|
|
||||||
|
has-flag@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
|
||||||
|
|
||||||
|
has@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
|
||||||
|
dependencies:
|
||||||
|
function-bind "^1.0.2"
|
||||||
|
|
||||||
|
is-callable@^1.1.1, is-callable@^1.1.3:
|
||||||
|
version "1.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2"
|
||||||
|
|
||||||
|
is-date-object@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
|
||||||
|
|
||||||
|
is-regex@^1.0.4:
|
||||||
|
version "1.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
|
||||||
|
dependencies:
|
||||||
|
has "^1.0.1"
|
||||||
|
|
||||||
|
is-symbol@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
|
||||||
|
|
||||||
|
leakage@^0.3.0:
|
||||||
|
version "0.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/leakage/-/leakage-0.3.0.tgz#15d698abdc76bbc6439601f4f3020e77e2d50c39"
|
||||||
|
dependencies:
|
||||||
|
es6-error "^4.0.2"
|
||||||
|
left-pad "^1.1.3"
|
||||||
|
memwatch-next "^0.3.0"
|
||||||
|
minimist "^1.2.0"
|
||||||
|
pretty-bytes "^4.0.2"
|
||||||
|
|
||||||
|
left-pad@^1.1.3:
|
||||||
|
version "1.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e"
|
||||||
|
|
||||||
|
lodash@^4.17.4:
|
||||||
|
version "4.17.10"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7"
|
||||||
|
|
||||||
|
log-symbols@^2.1.0:
|
||||||
|
version "2.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
|
||||||
|
dependencies:
|
||||||
|
chalk "^2.0.1"
|
||||||
|
|
||||||
|
memwatch-next@^0.3.0:
|
||||||
|
version "0.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/memwatch-next/-/memwatch-next-0.3.0.tgz#2111050f9a906e0aa2d72a4ec0f0089c78726f8f"
|
||||||
|
dependencies:
|
||||||
|
bindings "^1.2.1"
|
||||||
|
nan "^2.3.2"
|
||||||
|
|
||||||
|
mimic-fn@^1.0.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
|
||||||
|
|
||||||
|
minimist@^1.2.0:
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
|
||||||
|
|
||||||
|
nan@^2.3.2:
|
||||||
|
version "2.10.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f"
|
||||||
|
|
||||||
|
object-keys@^1.0.8:
|
||||||
|
version "1.0.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
|
||||||
|
|
||||||
|
object.getownpropertydescriptors@^2.0.3:
|
||||||
|
version "2.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16"
|
||||||
|
dependencies:
|
||||||
|
define-properties "^1.1.2"
|
||||||
|
es-abstract "^1.5.1"
|
||||||
|
|
||||||
|
onetime@^2.0.0:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
|
||||||
|
dependencies:
|
||||||
|
mimic-fn "^1.0.0"
|
||||||
|
|
||||||
|
ora@^1.1.0:
|
||||||
|
version "1.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/ora/-/ora-1.4.0.tgz#884458215b3a5d4097592285f93321bb7a79e2e5"
|
||||||
|
dependencies:
|
||||||
|
chalk "^2.1.0"
|
||||||
|
cli-cursor "^2.1.0"
|
||||||
|
cli-spinners "^1.0.1"
|
||||||
|
log-symbols "^2.1.0"
|
||||||
|
|
||||||
|
pathval@^1.0.0:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0"
|
||||||
|
|
||||||
|
pretty-bytes@^4.0.2:
|
||||||
|
version "4.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9"
|
||||||
|
|
||||||
|
restore-cursor@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
|
||||||
|
dependencies:
|
||||||
|
onetime "^2.0.0"
|
||||||
|
signal-exit "^3.0.2"
|
||||||
|
|
||||||
|
signal-exit@^3.0.2:
|
||||||
|
version "3.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
|
||||||
|
|
||||||
|
smartchai@^2.0.0:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/smartchai/-/smartchai-2.0.1.tgz#d20f17221f0e3c6c3473600b78ddfba0ab0ea762"
|
||||||
|
dependencies:
|
||||||
|
"@types/chai" "^4.1.2"
|
||||||
|
"@types/chai-as-promised" "^7.1.0"
|
||||||
|
"@types/chai-string" "^1.4.0"
|
||||||
|
chai "^4.1.2"
|
||||||
|
chai-as-promised "^7.1.1"
|
||||||
|
chai-string "^1.4.0"
|
||||||
|
|
||||||
|
smartdelay@^1.0.3, smartdelay@^1.0.4:
|
||||||
|
version "1.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/smartdelay/-/smartdelay-1.0.4.tgz#791c1a4ee6770494064c10b1d2d2b8e6f3105b82"
|
||||||
|
dependencies:
|
||||||
|
smartq "^1.1.1"
|
||||||
|
typings-global "^1.0.16"
|
||||||
|
|
||||||
|
smartenv@^2.0.0:
|
||||||
|
version "2.0.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/smartenv/-/smartenv-2.0.6.tgz#b38c679b0c151b9af548f68c3a072c29d1417e8d"
|
||||||
|
dependencies:
|
||||||
|
lodash "^4.17.4"
|
||||||
|
smartq "^1.1.1"
|
||||||
|
typings-global "^1.0.14"
|
||||||
|
|
||||||
|
smartq@^1.1.1, smartq@^1.1.8:
|
||||||
|
version "1.1.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/smartq/-/smartq-1.1.8.tgz#7e2f3b9739eb5d6c9f45f2a86e339ec81e49e8d2"
|
||||||
|
dependencies:
|
||||||
|
util.promisify "^1.0.0"
|
||||||
|
|
||||||
|
supports-color@^5.3.0:
|
||||||
|
version "5.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54"
|
||||||
|
dependencies:
|
||||||
|
has-flag "^3.0.0"
|
||||||
|
|
||||||
|
tapbundle@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/tapbundle/-/tapbundle-2.0.0.tgz#79fce68ff185c786fabaf6eb589a4afc7d2714b7"
|
||||||
|
dependencies:
|
||||||
|
early "^2.1.1"
|
||||||
|
leakage "^0.3.0"
|
||||||
|
smartchai "^2.0.0"
|
||||||
|
smartdelay "^1.0.3"
|
||||||
|
smartq "^1.1.1"
|
||||||
|
|
||||||
|
type-detect@^4.0.0:
|
||||||
|
version "4.0.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
|
||||||
|
|
||||||
|
typings-global@^1.0.14, typings-global@^1.0.16:
|
||||||
|
version "1.0.28"
|
||||||
|
resolved "https://registry.yarnpkg.com/typings-global/-/typings-global-1.0.28.tgz#e28cc965476564cbc00e438739e0aa0735d323d4"
|
||||||
|
|
||||||
|
util.promisify@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030"
|
||||||
|
dependencies:
|
||||||
|
define-properties "^1.1.2"
|
||||||
|
object.getownpropertydescriptors "^2.0.3"
|
Reference in New Issue
Block a user