Tsify lib/shorteners (#4504)

* Convert lib/shorteners to ts

* Improved types
This commit is contained in:
Jeremy Rifkin
2022-12-28 10:18:37 -07:00
committed by GitHub
parent 54fd5b8a24
commit 92b17d203d
8 changed files with 96 additions and 18 deletions

View File

@@ -22,11 +22,17 @@
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
export class BaseShortener {
constructor(storageHandler) {
this.storageHandler = storageHandler;
}
import * as express from 'express';
import {StorageBase} from '../storage';
export abstract class BaseShortener {
constructor(protected storageHandler: StorageBase) {}
// eslint-disable-next-line no-unused-vars
handle(req, res) {}
abstract handle(req: express.Request, res: express.Response);
static get key(): string {
throw 'get key() must be overridden';
}
}

View File

@@ -22,14 +22,16 @@
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
import * as express from 'express';
import {BaseShortener} from './base';
export class DefaultShortener extends BaseShortener {
static get key() {
return 'default';
}
handle(req, res) {
override handle(req: express.Request, res: express.Response) {
return this.storageHandler.handler(req, res);
}
static override get key() {
return 'default';
}
}

View File

@@ -25,7 +25,7 @@
import request from 'request';
export class ShortLinkResolver {
resolve(url) {
resolve(url: string) {
return new Promise((resolve, reject) => {
request({method: 'HEAD', uri: url, followRedirect: false}, (err, res) => {
if (err !== null) {

View File

@@ -22,28 +22,29 @@
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
import * as express from 'express';
import request from 'request';
import {BaseShortener} from './base';
export class TinyUrlShortener extends BaseShortener {
static get key() {
return 'tinyurl';
}
handle(req, res) {
override handle(req: express.Request, res: express.Response) {
const url = `${req.protocol}://${req.get('host')}#${req.body.config}`;
const options = {
url: 'https://tinyurl.com/api-create.php?url=' + encodeURIComponent(url),
method: 'GET',
};
const callback = (err, resp, body) => {
const callback = (err, resp: request.Response, body) => {
if (!err && resp.statusCode === 200) {
res.send({url: body});
} else {
res.status(resp.statusCode).send(resp.error);
res.status(resp.statusCode).send('Tinyurl error');
}
};
request.post(options, callback);
}
static override get key() {
return 'tinyurl';
}
}

68
package-lock.json generated
View File

@@ -14,6 +14,7 @@
"@sentry/browser": "^6.16.1",
"@sentry/node": "^6.16.1",
"@types/file-saver": "^2.0.5",
"@types/request": "^2.48.8",
"aws-sdk": "^2.1048.0",
"big-integer": "^1.6.51",
"body-parser": "^1.19.1",
@@ -1709,6 +1710,11 @@
"@popperjs/core": "^2.9.2"
}
},
"node_modules/@types/caseless": {
"version": "0.12.2",
"resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz",
"integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w=="
},
"node_modules/@types/chai": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz",
@@ -1863,6 +1869,30 @@
"integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==",
"dev": true
},
"node_modules/@types/request": {
"version": "2.48.8",
"resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.8.tgz",
"integrity": "sha512-whjk1EDJPcAR2kYHRbFl/lKeeKYTi05A15K9bnLInCVroNDCtXce57xKdI0/rQaA3K+6q0eFyUBPmqfSndUZdQ==",
"dependencies": {
"@types/caseless": "*",
"@types/node": "*",
"@types/tough-cookie": "*",
"form-data": "^2.5.0"
}
},
"node_modules/@types/request/node_modules/form-data": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
"integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
},
"engines": {
"node": ">= 0.12"
}
},
"node_modules/@types/retry": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz",
@@ -1950,6 +1980,11 @@
"@types/node": "*"
}
},
"node_modules/@types/tough-cookie": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz",
"integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw=="
},
"node_modules/@types/underscore": {
"version": "1.11.4",
"resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz",
@@ -16449,6 +16484,11 @@
"@popperjs/core": "^2.9.2"
}
},
"@types/caseless": {
"version": "0.12.2",
"resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz",
"integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w=="
},
"@types/chai": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz",
@@ -16603,6 +16643,29 @@
"integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==",
"dev": true
},
"@types/request": {
"version": "2.48.8",
"resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.8.tgz",
"integrity": "sha512-whjk1EDJPcAR2kYHRbFl/lKeeKYTi05A15K9bnLInCVroNDCtXce57xKdI0/rQaA3K+6q0eFyUBPmqfSndUZdQ==",
"requires": {
"@types/caseless": "*",
"@types/node": "*",
"@types/tough-cookie": "*",
"form-data": "^2.5.0"
},
"dependencies": {
"form-data": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
"integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
"requires": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
}
}
}
},
"@types/retry": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz",
@@ -16690,6 +16753,11 @@
"@types/node": "*"
}
},
"@types/tough-cookie": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz",
"integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw=="
},
"@types/underscore": {
"version": "1.11.4",
"resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz",

View File

@@ -25,6 +25,7 @@
"@sentry/browser": "^6.16.1",
"@sentry/node": "^6.16.1",
"@types/file-saver": "^2.0.5",
"@types/request": "^2.48.8",
"aws-sdk": "^2.1048.0",
"big-integer": "^1.6.51",
"body-parser": "^1.19.1",