From 602188b633324b14c70856fd75d38536957d638c Mon Sep 17 00:00:00 2001 From: DouglasFlorido Date: Sat, 15 May 2021 20:02:38 -0300 Subject: [PATCH 1/2] Collection e Collection Relation Criados e testados --- Semana21/Projeto/Backend/.env | 10 + Semana21/Projeto/Backend/.gitignore | 1 + Semana21/Projeto/Backend/.rest | 51 + Semana21/Projeto/Backend/README.md | 93 + .../build/Business/collectionBusiness.js | 50 + .../build/Business/collectionBusiness.js.map | 1 + .../Backend/build/Business/imageBusiness.js | 52 + .../build/Business/imageBusiness.js.map | 1 + .../Backend/build/Business/userBusiness.js | 52 + .../build/Business/userBusiness.js.map | 1 + .../Backend/build/Constants/TableNames.js | 6 + .../Backend/build/Constants/TableNames.js.map | 1 + .../build/Controller/collectionController.js | 56 + .../Controller/collectionController.js.map | 1 + .../build/Controller/imageController.js | 57 + .../build/Controller/imageController.js.map | 1 + .../build/Controller/userController.js | 56 + .../build/Controller/userController.js.map | 1 + .../Backend/build/Data/BaseDatabase.js | 52 + .../Backend/build/Data/BaseDatabase.js.map | 1 + .../Backend/build/Data/CollectionDatabase.js | 45 + .../build/Data/CollectionDatabase.js.map | 1 + .../Backend/build/Data/imageDatabase.js | 59 + .../Backend/build/Data/imageDatabase.js.map | 1 + .../Backend/build/Data/userDatabase.js | 48 + .../Backend/build/Data/userDatabase.js.map | 1 + .../Backend/build/Entities/Collection.js | 3 + .../Backend/build/Entities/Collection.js.map | 1 + .../Projeto/Backend/build/Entities/Image.js | 3 + .../Backend/build/Entities/Image.js.map | 1 + .../Projeto/Backend/build/Entities/User.js | 3 + .../Backend/build/Entities/User.js.map | 1 + .../Projeto/Backend/build/Error/BaseError.js | 11 + .../Backend/build/Error/BaseError.js.map | 1 + .../Backend/build/Error/InvalidInputError.js | 11 + .../build/Error/InvalidInputError.js.map | 1 + .../Projeto/Backend/build/Error/LoginAgain.js | 11 + .../Backend/build/Error/LoginAgain.js.map | 1 + .../Backend/build/Routes/collectionRouter.js | 13 + .../build/Routes/collectionRouter.js.map | 1 + .../Backend/build/Routes/imageRouter.js | 14 + .../Backend/build/Routes/imageRouter.js.map | 1 + .../Backend/build/Routes/userRouter.js | 13 + .../Backend/build/Routes/userRouter.js.map | 1 + .../Backend/build/Services/HashManager.js | 46 + .../Backend/build/Services/HashManager.js.map | 1 + .../Backend/build/Services/IdGenerator.js | 11 + .../Backend/build/Services/IdGenerator.js.map | 1 + .../Projeto/Backend/build/Services/Server.js | 33 + .../Backend/build/Services/Server.js.map | 1 + .../Backend/build/Services/TokenManager.js | 36 + .../build/Services/TokenManager.js.map | 1 + .../Backend/build/Services/connection.js | 19 + .../Backend/build/Services/connection.js.map | 1 + Semana21/Projeto/Backend/build/index.js | 22 + Semana21/Projeto/Backend/build/index.js.map | 1 + Semana21/Projeto/Backend/build/migration.js | 37 + .../Projeto/Backend/build/migration.js.map | 1 + Semana21/Projeto/Backend/package-lock.json | 2649 +++++++++++++++++ Semana21/Projeto/Backend/package.json | 37 + .../src/Business/collectionBusiness.ts | 49 + .../Backend/src/Business/imageBusiness.ts | 66 + .../Backend/src/Business/userBusiness.ts | 54 + .../Backend/src/Constants/TableNames.ts | 3 + .../src/Controller/collectionController.ts | 59 + .../Backend/src/Controller/imageController.ts | 71 + .../Backend/src/Controller/userController.ts | 63 + .../Projeto/Backend/src/Data/BaseDatabase.ts | 40 + .../Backend/src/Data/CollectionDatabase.ts | 28 + .../Projeto/Backend/src/Data/imageDatabase.ts | 48 + .../Projeto/Backend/src/Data/userDatabase.ts | 41 + .../Backend/src/Entities/Collection.ts | 17 + .../Projeto/Backend/src/Entities/Image.ts | 23 + Semana21/Projeto/Backend/src/Entities/User.ts | 15 + .../Projeto/Backend/src/Error/BaseError.ts | 6 + .../Backend/src/Error/InvalidInputError.ts | 7 + .../Projeto/Backend/src/Error/LoginAgain.ts | 7 + .../Backend/src/Routes/collectionRouter.ts | 12 + .../Projeto/Backend/src/Routes/imageRouter.ts | 10 + .../Projeto/Backend/src/Routes/userRouter.ts | 9 + .../Backend/src/Services/HashManager.ts | 17 + .../Backend/src/Services/IdGenerator.ts | 5 + .../Backend/src/Services/TokenManager.ts | 29 + .../Backend/src/Services/connection.ts | 19 + Semana21/Projeto/Backend/src/index.ts | 22 + Semana21/Projeto/Backend/src/migration.ts | 35 + Semana21/Projeto/Backend/tsconfig.json | 69 + 87 files changed, 4511 insertions(+) create mode 100644 Semana21/Projeto/Backend/.env create mode 100644 Semana21/Projeto/Backend/.gitignore create mode 100644 Semana21/Projeto/Backend/.rest create mode 100644 Semana21/Projeto/Backend/README.md create mode 100644 Semana21/Projeto/Backend/build/Business/collectionBusiness.js create mode 100644 Semana21/Projeto/Backend/build/Business/collectionBusiness.js.map create mode 100644 Semana21/Projeto/Backend/build/Business/imageBusiness.js create mode 100644 Semana21/Projeto/Backend/build/Business/imageBusiness.js.map create mode 100644 Semana21/Projeto/Backend/build/Business/userBusiness.js create mode 100644 Semana21/Projeto/Backend/build/Business/userBusiness.js.map create mode 100644 Semana21/Projeto/Backend/build/Constants/TableNames.js create mode 100644 Semana21/Projeto/Backend/build/Constants/TableNames.js.map create mode 100644 Semana21/Projeto/Backend/build/Controller/collectionController.js create mode 100644 Semana21/Projeto/Backend/build/Controller/collectionController.js.map create mode 100644 Semana21/Projeto/Backend/build/Controller/imageController.js create mode 100644 Semana21/Projeto/Backend/build/Controller/imageController.js.map create mode 100644 Semana21/Projeto/Backend/build/Controller/userController.js create mode 100644 Semana21/Projeto/Backend/build/Controller/userController.js.map create mode 100644 Semana21/Projeto/Backend/build/Data/BaseDatabase.js create mode 100644 Semana21/Projeto/Backend/build/Data/BaseDatabase.js.map create mode 100644 Semana21/Projeto/Backend/build/Data/CollectionDatabase.js create mode 100644 Semana21/Projeto/Backend/build/Data/CollectionDatabase.js.map create mode 100644 Semana21/Projeto/Backend/build/Data/imageDatabase.js create mode 100644 Semana21/Projeto/Backend/build/Data/imageDatabase.js.map create mode 100644 Semana21/Projeto/Backend/build/Data/userDatabase.js create mode 100644 Semana21/Projeto/Backend/build/Data/userDatabase.js.map create mode 100644 Semana21/Projeto/Backend/build/Entities/Collection.js create mode 100644 Semana21/Projeto/Backend/build/Entities/Collection.js.map create mode 100644 Semana21/Projeto/Backend/build/Entities/Image.js create mode 100644 Semana21/Projeto/Backend/build/Entities/Image.js.map create mode 100644 Semana21/Projeto/Backend/build/Entities/User.js create mode 100644 Semana21/Projeto/Backend/build/Entities/User.js.map create mode 100644 Semana21/Projeto/Backend/build/Error/BaseError.js create mode 100644 Semana21/Projeto/Backend/build/Error/BaseError.js.map create mode 100644 Semana21/Projeto/Backend/build/Error/InvalidInputError.js create mode 100644 Semana21/Projeto/Backend/build/Error/InvalidInputError.js.map create mode 100644 Semana21/Projeto/Backend/build/Error/LoginAgain.js create mode 100644 Semana21/Projeto/Backend/build/Error/LoginAgain.js.map create mode 100644 Semana21/Projeto/Backend/build/Routes/collectionRouter.js create mode 100644 Semana21/Projeto/Backend/build/Routes/collectionRouter.js.map create mode 100644 Semana21/Projeto/Backend/build/Routes/imageRouter.js create mode 100644 Semana21/Projeto/Backend/build/Routes/imageRouter.js.map create mode 100644 Semana21/Projeto/Backend/build/Routes/userRouter.js create mode 100644 Semana21/Projeto/Backend/build/Routes/userRouter.js.map create mode 100644 Semana21/Projeto/Backend/build/Services/HashManager.js create mode 100644 Semana21/Projeto/Backend/build/Services/HashManager.js.map create mode 100644 Semana21/Projeto/Backend/build/Services/IdGenerator.js create mode 100644 Semana21/Projeto/Backend/build/Services/IdGenerator.js.map create mode 100644 Semana21/Projeto/Backend/build/Services/Server.js create mode 100644 Semana21/Projeto/Backend/build/Services/Server.js.map create mode 100644 Semana21/Projeto/Backend/build/Services/TokenManager.js create mode 100644 Semana21/Projeto/Backend/build/Services/TokenManager.js.map create mode 100644 Semana21/Projeto/Backend/build/Services/connection.js create mode 100644 Semana21/Projeto/Backend/build/Services/connection.js.map create mode 100644 Semana21/Projeto/Backend/build/index.js create mode 100644 Semana21/Projeto/Backend/build/index.js.map create mode 100644 Semana21/Projeto/Backend/build/migration.js create mode 100644 Semana21/Projeto/Backend/build/migration.js.map create mode 100644 Semana21/Projeto/Backend/package-lock.json create mode 100644 Semana21/Projeto/Backend/package.json create mode 100644 Semana21/Projeto/Backend/src/Business/collectionBusiness.ts create mode 100644 Semana21/Projeto/Backend/src/Business/imageBusiness.ts create mode 100644 Semana21/Projeto/Backend/src/Business/userBusiness.ts create mode 100644 Semana21/Projeto/Backend/src/Constants/TableNames.ts create mode 100644 Semana21/Projeto/Backend/src/Controller/collectionController.ts create mode 100644 Semana21/Projeto/Backend/src/Controller/imageController.ts create mode 100644 Semana21/Projeto/Backend/src/Controller/userController.ts create mode 100644 Semana21/Projeto/Backend/src/Data/BaseDatabase.ts create mode 100644 Semana21/Projeto/Backend/src/Data/CollectionDatabase.ts create mode 100644 Semana21/Projeto/Backend/src/Data/imageDatabase.ts create mode 100644 Semana21/Projeto/Backend/src/Data/userDatabase.ts create mode 100644 Semana21/Projeto/Backend/src/Entities/Collection.ts create mode 100644 Semana21/Projeto/Backend/src/Entities/Image.ts create mode 100644 Semana21/Projeto/Backend/src/Entities/User.ts create mode 100644 Semana21/Projeto/Backend/src/Error/BaseError.ts create mode 100644 Semana21/Projeto/Backend/src/Error/InvalidInputError.ts create mode 100644 Semana21/Projeto/Backend/src/Error/LoginAgain.ts create mode 100644 Semana21/Projeto/Backend/src/Routes/collectionRouter.ts create mode 100644 Semana21/Projeto/Backend/src/Routes/imageRouter.ts create mode 100644 Semana21/Projeto/Backend/src/Routes/userRouter.ts create mode 100644 Semana21/Projeto/Backend/src/Services/HashManager.ts create mode 100644 Semana21/Projeto/Backend/src/Services/IdGenerator.ts create mode 100644 Semana21/Projeto/Backend/src/Services/TokenManager.ts create mode 100644 Semana21/Projeto/Backend/src/Services/connection.ts create mode 100644 Semana21/Projeto/Backend/src/index.ts create mode 100644 Semana21/Projeto/Backend/src/migration.ts create mode 100644 Semana21/Projeto/Backend/tsconfig.json diff --git a/Semana21/Projeto/Backend/.env b/Semana21/Projeto/Backend/.env new file mode 100644 index 0000000000..31c05bf1dc --- /dev/null +++ b/Semana21/Projeto/Backend/.env @@ -0,0 +1,10 @@ +DB_HOST = 35.226.146.116 +DB_USER = douglas-florido +DB_PASSWORD = @YPzf2eidAljnf7ykH$b +DB_SCHEMA = epps-douglas-florido + +JWT_KEY = 123456 + +JWT_EXPIRES_IN = 12min + +BCRYPT_COST = 12 diff --git a/Semana21/Projeto/Backend/.gitignore b/Semana21/Projeto/Backend/.gitignore new file mode 100644 index 0000000000..b512c09d47 --- /dev/null +++ b/Semana21/Projeto/Backend/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/Semana21/Projeto/Backend/.rest b/Semana21/Projeto/Backend/.rest new file mode 100644 index 0000000000..6c3a2fd2c9 --- /dev/null +++ b/Semana21/Projeto/Backend/.rest @@ -0,0 +1,51 @@ +### Signup +# @name signup +POST http://localhost:3003/user/signup +Content-Type: application/json + +{ + "login":"Marcelo@Vacinado.com", + "password":"123456" +} + +### Login +# @name Login +POST http://localhost:3003/user/login +Content-Type: application/json + +{ + "login":"Marcelo@Vacinado.com", + "password":"123456" +} + +### insert Image +POST http://localhost:3003/image/insert/{{Login.response.body.token}} +Content-Type: application/json + +{ + "subtitle": "Aleatória", + "URL": "stringzao" +} + +@id=3b40fd34-c820-4d77-b6aa-10d48b4e62c9 + +### getImageById +GET http://localhost:3003/image/{{Login.response.body.token}}/{{id}} + +### insert Collection +PUT http://localhost:3003/collection/insert/{{Login.response.body.token}} +Content-Type: application/json + +{ + "title": "Leonardo Da20", + "subtitle": "Melhores obras do da20" +} + +### insert Collection Relation +PUT http://localhost:3003/collection/insert/relation/{{Login.response.body.token}} +Content-Type: application/json + +{ + "id_collection": "36039db1-2674-476f-8525-2219f5cb5fe4", + "id_image": "3b40fd34-c820-4d77-b6aa-10d48b4e62c9" +} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/README.md b/Semana21/Projeto/Backend/README.md new file mode 100644 index 0000000000..b8ac9b0e02 --- /dev/null +++ b/Semana21/Projeto/Backend/README.md @@ -0,0 +1,93 @@ +# LABOOK + +## Primeiros Passos + +* Clonar este repositório +* Executar `npm install` para adicionar as dependências +* Criar um arquivo .env na raiz do projeto e preencher as chaves a seguir com os valores apropriados: + ``` + DB_HOST = + DB_USER = + DB_PASSWORD = + DB_SCHEMA = + + JWT_KEY = + + BCRYPT_COST = + ``` +* Executar `npm run migrations` para adicionar as tabelas ao banco de dados (em caso de sucesso, o servidor já estará pronto para receber requisições ) + +## Endpoints + +1. Cadastro + * Exemplo de requisição: + ```bash + curl -i -X POST http://localhost:3003/users/signup -H "Content-Type: application/json" -d '{"name":"Alice","email":"alice@gmail.com","password":"pass123"}' + ``` + * Exemplo de resposta (sucesso): + ```bash + HTTP/1.1 201 Created + X-Powered-By: Express + Access-Control-Allow-Origin: * + Content-Type: application/json; charset=utf-8 + Content-Length: 220 + ETag: W/"dc-ec7r4rkKsMBe/V0SGyUkO6Vyto0" + Date: Tue, 17 Nov 2020 14:33:15 GMT + Connection: keep-alive + + {"message":"Success!", "token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg5OGJjNDVlLTExZjEtNGEyMy04OTZhLTdmMmUyOWNmZTAxMiIsImlhdCI6MTYwNTYyMzU5NSwiZXhwIjoxNjA1NzA5OTk1fQ.pWxV2vtLnp0hKm0CXXnLpnDu6PEPkZM27A71oTTCYfE"}% + ``` +1. Login + * Exemplo de requisição: + ```bash + curl -i -X POST http://localhost:3003/users/login -H "Content-Type: application/json" -d '{"email":"alice@gmail.com","password":"pass123"}' + ``` + * Exemplo de resposta (sucesso): + ```bash + HTTP/1.1 200 OK + X-Powered-By: Express + Access-Control-Allow-Origin: * + Content-Type: application/json; charset=utf-8 + Content-Length: 220 + ETag: W/"dc-IBDYVXSmDzdFsqHXhPCAutzNwn8" + Date: Tue, 17 Nov 2020 14:39:23 GMT + Connection: keep-alive + + {"message":"Success!","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijg5OGJjNDVlLTExZjEtNGEyMy04OTZhLTdmMmUyOWNmZTAxMiIsImlhdCI6MTYwNTYyMzk2MywiZXhwIjoxNjA1NzEwMzYzfQ.9JvXRQpazI5k6GAnc1lFcVcTbZ_ElASnwyybU_tRU48"}% + ``` +1. Criar Post + * Exemplo de requisição: + ```bash + curl -i -X POST http://localhost:3003/posts/create -H "Content-Type: application/json" -H "authorization:$token" -d '{"photo":"https://i.picsum.photos/id/238/200/200.jpg?hmac=O4Jc6lqHVfaKVzLf8bWssNTbWzQoaRUC0TDXod9xDdM","description":"My city is beautiful =D","type":"normal"}' + ``` + * Exemplo de resposta (sucesso): + ```bash + HTTP/1.1 201 Created + X-Powered-By: Express + Access-Control-Allow-Origin: * + Content-Type: application/json; charset=utf-8 + Content-Length: 22 + ETag: W/"16-ChcZhlw1slqtGuDwxLsUclql5gE" + Date: Tue, 17 Nov 2020 14:47:15 GMT + Connection: keep-alive + + {"message":"Success!"}% + ``` +1. Buscar Post por id + * Exemplo de requisição: + ```bash + curl -i http://localhost:3003/posts/$id -H "Content-Type: application/json" -H "authorization:$token" + ``` + * Exemplo de resposta (sucesso): + ```bash + HTTP/1.1 200 OK + X-Powered-By: Express + Access-Control-Allow-Origin: * + Content-Type: application/json; charset=utf-8 + Content-Length: 322 + ETag: W/"142-IYRwCODXZBltXE3MydHuIDB8M3w" + Date: Tue, 17 Nov 2020 14:52:19 GMT + Connection: keep-alive + + {"message":"Success!","post":{"id":"e4eb1531-d814-4742-b614-be2a36602548","photo":"https://i.picsum.photos/id/238/200/200.jpg?hmac=O4Jc6lqHVfaKVzLf8bWssNTbWzQoaRUC0TDXod9xDdM","description":"My city is beautiful =D","type":"normal","createdAt":"2020-11-17T17:47:15.000Z","authorId":"898bc45e-11f1-4a23-896a-7f2e29cfe012"}}% + ``` \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Business/collectionBusiness.js b/Semana21/Projeto/Backend/build/Business/collectionBusiness.js new file mode 100644 index 0000000000..b844988faa --- /dev/null +++ b/Semana21/Projeto/Backend/build/Business/collectionBusiness.js @@ -0,0 +1,50 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CollectionBusiness = void 0; +const InvalidInputError_1 = require("../Error/InvalidInputError"); +const LoginAgain_1 = require("../Error/LoginAgain"); +class CollectionBusiness { + constructor(collectionDatabase, idGenerator, authenticator) { + this.collectionDatabase = collectionDatabase; + this.idGenerator = idGenerator; + this.authenticator = authenticator; + } + insertCollection(collection) { + return __awaiter(this, void 0, void 0, function* () { + if (!collection.title || + !collection.subtitle) { + throw new InvalidInputError_1.InvalidInputError("Invalid input to insert Collection"); + } + if (!collection.token) { + throw new LoginAgain_1.LoginAgain("Token Invalid"); + } + const id = yield this.idGenerator.generateId(); + const tokenInfo = yield this.authenticator.getTokenData(collection.token); + yield this.collectionDatabase.insertCollection({ + id, + title: collection.title, + subtitle: collection.subtitle, + author: tokenInfo.id + }); + }); + } + insertCollectionRelation(collectionRelation) { + return __awaiter(this, void 0, void 0, function* () { + if (!collectionRelation.id_collection || !collectionRelation.id_image) { + throw new InvalidInputError_1.InvalidInputError("Invalid input to insert Collection Relation"); + } + yield this.collectionDatabase.insertCollectionRelation(collectionRelation); + }); + } +} +exports.CollectionBusiness = CollectionBusiness; +//# sourceMappingURL=collectionBusiness.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Business/collectionBusiness.js.map b/Semana21/Projeto/Backend/build/Business/collectionBusiness.js.map new file mode 100644 index 0000000000..2f34971fc7 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Business/collectionBusiness.js.map @@ -0,0 +1 @@ +{"version":3,"file":"collectionBusiness.js","sourceRoot":"","sources":["../../src/Business/collectionBusiness.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,kEAA+D;AAC/D,oDAAiD;AAIjD,MAAa,kBAAkB;IAC3B,YACY,kBAAsC,EACtC,WAAwB,EACxB,aAA2B;QAF3B,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,gBAAW,GAAX,WAAW,CAAa;QACxB,kBAAa,GAAb,aAAa,CAAc;IACnC,CAAC;IAEC,gBAAgB,CAAC,UAA2B;;YAC9C,IACI,CAAC,UAAU,CAAC,KAAK;gBACjB,CAAC,UAAU,CAAC,QAAQ,EACtB;gBACE,MAAM,IAAI,qCAAiB,CAAC,oCAAoC,CAAC,CAAA;aACpE;YAED,IAAG,CAAC,UAAU,CAAC,KAAK,EAAC;gBACjB,MAAM,IAAI,uBAAU,CAAC,eAAe,CAAC,CAAA;aACxC;YAED,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAA;YAE9C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;YAGzE,MAAM,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC;gBAC3C,EAAE;gBACF,KAAK,EAAE,UAAU,CAAC,KAAK;gBACvB,QAAQ,EAAE,UAAU,CAAC,QAAQ;gBAC7B,MAAM,EAAE,SAAS,CAAC,EAAE;aACvB,CAAC,CAAA;QACN,CAAC;KAAA;IAEK,wBAAwB,CAAC,kBAA2C;;YACtE,IAAG,CAAC,kBAAkB,CAAC,aAAa,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAC;gBACjE,MAAM,IAAI,qCAAiB,CAAC,6CAA6C,CAAC,CAAA;aAC7E;YAED,MAAM,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,kBAAkB,CAAC,CAAA;QAC9E,CAAC;KAAA;CAGJ;AAzCD,gDAyCC"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Business/imageBusiness.js b/Semana21/Projeto/Backend/build/Business/imageBusiness.js new file mode 100644 index 0000000000..3b0e714e6a --- /dev/null +++ b/Semana21/Projeto/Backend/build/Business/imageBusiness.js @@ -0,0 +1,52 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ImageBusiness = void 0; +const InvalidInputError_1 = require("../Error/InvalidInputError"); +class ImageBusiness { + constructor(imageDatabase, idGenerator, hashManager, authenticator) { + this.imageDatabase = imageDatabase; + this.idGenerator = idGenerator; + this.hashManager = hashManager; + this.authenticator = authenticator; + } + insertImage(image) { + return __awaiter(this, void 0, void 0, function* () { + if (!image.subtitle || !image.URL) { + throw new InvalidInputError_1.InvalidInputError("Invalid input to insert Image"); + } + if (!image.token) { + throw new InvalidInputError_1.InvalidInputError("Please Login Again"); + } + const id = yield this.idGenerator.generateId(); + const tokenInfo = yield this.authenticator.getTokenData(image.token); + yield this.imageDatabase.insertImage({ id, subtitle: image.subtitle, URL: image.URL, fk_user: tokenInfo.id }); + }); + } + getImageById(image) { + return __awaiter(this, void 0, void 0, function* () { + if (!image.token) { + throw new InvalidInputError_1.InvalidInputError("Please Login Again"); + } + const tokenInfo = yield this.authenticator.getTokenData(image.token); + if (image.id === "" || !image.id) { + const result = yield this.imageDatabase.getImagesOfUser(tokenInfo.id); + return result; + } + else { + const result = yield this.imageDatabase.getImageById(image.id); + return result; + } + }); + } +} +exports.ImageBusiness = ImageBusiness; +//# sourceMappingURL=imageBusiness.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Business/imageBusiness.js.map b/Semana21/Projeto/Backend/build/Business/imageBusiness.js.map new file mode 100644 index 0000000000..0437d90aed --- /dev/null +++ b/Semana21/Projeto/Backend/build/Business/imageBusiness.js.map @@ -0,0 +1 @@ +{"version":3,"file":"imageBusiness.js","sourceRoot":"","sources":["../../src/Business/imageBusiness.ts"],"names":[],"mappings":";;;;;;;;;;;;AAIA,kEAA+D;AAK/D,MAAa,aAAa;IACtB,YACY,aAA4B,EAC5B,WAAwB,EACxB,WAAwB,EACxB,aAA2B;QAH3B,kBAAa,GAAb,aAAa,CAAe;QAC5B,gBAAW,GAAX,WAAW,CAAa;QACxB,gBAAW,GAAX,WAAW,CAAa;QACxB,kBAAa,GAAb,aAAa,CAAc;IACnC,CAAC;IAEC,WAAW,CAAC,KAAsB;;YACpC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;gBAC/B,MAAM,IAAI,qCAAiB,CAAC,+BAA+B,CAAC,CAAA;aAC/D;YAED,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;gBACd,MAAM,IAAI,qCAAiB,CAAC,oBAAoB,CAAC,CAAA;aACpD;YAED,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAA;YAE9C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAIpE,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAA;QAIjH,CAAC;KAAA;IACK,YAAY,CAAC,KAAmB;;YAClC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;gBACd,MAAM,IAAI,qCAAiB,CAAC,oBAAoB,CAAC,CAAA;aACpD;YAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAGpE,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE;gBAC9B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;gBAErE,OAAO,MAAM,CAAA;aAChB;iBACI;gBACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;gBAE9D,OAAO,MAAM,CAAA;aAChB;QAGL,CAAC;KAAA;CAQJ;AAxDD,sCAwDC"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Business/userBusiness.js b/Semana21/Projeto/Backend/build/Business/userBusiness.js new file mode 100644 index 0000000000..74fcc192e1 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Business/userBusiness.js @@ -0,0 +1,52 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UserBusiness = void 0; +const InvalidInputError_1 = require("../Error/InvalidInputError"); +class UserBusiness { + constructor(userDatabase, idGenerator, hashManager, authenticator) { + this.userDatabase = userDatabase; + this.idGenerator = idGenerator; + this.hashManager = hashManager; + this.authenticator = authenticator; + } + createUser(user) { + return __awaiter(this, void 0, void 0, function* () { + if (!user.login || !user.password) { + throw new InvalidInputError_1.InvalidInputError("Invalid input to signUp"); + } + const id = this.idGenerator.generateId(); + const hashPassword = yield this.hashManager.hash(user.password); + const inputData = { id, login: user.login, password: hashPassword }; + yield this.userDatabase.createUser(inputData); + const accessToken = this.authenticator.generateToken({ id, login: user.login }); + return accessToken; + }); + } + loginUser(user) { + return __awaiter(this, void 0, void 0, function* () { + if (!user.login || !user.password) { + throw new InvalidInputError_1.InvalidInputError("Please certify all fields are complete"); + } + const userInfo = yield this.userDatabase.login(user); + const verification = yield this.hashManager.compare(user.password, userInfo.password); + if (!verification) { + throw new Error("Login or Password Incorrect"); + } + else { + const accessToken = this.authenticator.generateToken({ id: userInfo.id, login: userInfo.login }); + return accessToken; + } + }); + } +} +exports.UserBusiness = UserBusiness; +//# sourceMappingURL=userBusiness.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Business/userBusiness.js.map b/Semana21/Projeto/Backend/build/Business/userBusiness.js.map new file mode 100644 index 0000000000..04f4c161e2 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Business/userBusiness.js.map @@ -0,0 +1 @@ +{"version":3,"file":"userBusiness.js","sourceRoot":"","sources":["../../src/Business/userBusiness.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,kEAA+D;AAK/D,MAAa,YAAY;IACrB,YACY,YAA0B,EAC1B,WAAwB,EACxB,WAAwB,EACxB,aAA2B;QAH3B,iBAAY,GAAZ,YAAY,CAAc;QAC1B,gBAAW,GAAX,WAAW,CAAa;QACxB,gBAAW,GAAX,WAAW,CAAa;QACxB,kBAAa,GAAb,aAAa,CAAc;IACrC,CAAC;IAEG,UAAU,CAAC,IAAe;;YAC5B,IAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAC;gBAC7B,MAAM,IAAI,qCAAiB,CAAC,yBAAyB,CAAC,CAAA;aACzD;YAED,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAA;YAExC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAE/D,MAAM,SAAS,GAAiB,EAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAC,CAAA;YAE/E,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;YAE7C,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAC,CAAC,CAAA;YAE7E,OAAO,WAAW,CAAA;QACtB,CAAC;KAAA;IAEK,SAAS,CAAC,IAAe;;YAC3B,IAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAC;gBAC7B,MAAM,IAAI,qCAAiB,CAAC,wCAAwC,CAAC,CAAA;aACxE;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAEpD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;YAErF,IAAG,CAAC,YAAY,EAAC;gBACb,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;aACjD;iBAEG;gBACA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAC,CAAC,CAAA;gBAC9F,OAAO,WAAW,CAAA;aACrB;QAEL,CAAC;KAAA;CAEJ;AA9CD,oCA8CC"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Constants/TableNames.js b/Semana21/Projeto/Backend/build/Constants/TableNames.js new file mode 100644 index 0000000000..af117b2ca2 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Constants/TableNames.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ImageTable = exports.UserTable = void 0; +exports.UserTable = "Users_fullstack"; +exports.ImageTable = "Images_fullstack"; +//# sourceMappingURL=TableNames.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Constants/TableNames.js.map b/Semana21/Projeto/Backend/build/Constants/TableNames.js.map new file mode 100644 index 0000000000..48d1d480f7 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Constants/TableNames.js.map @@ -0,0 +1 @@ +{"version":3,"file":"TableNames.js","sourceRoot":"","sources":["../../src/Constants/TableNames.ts"],"names":[],"mappings":";;;AAAa,QAAA,SAAS,GAAG,iBAAiB,CAAA;AAE7B,QAAA,UAAU,GAAG,kBAAkB,CAAA"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Controller/collectionController.js b/Semana21/Projeto/Backend/build/Controller/collectionController.js new file mode 100644 index 0000000000..d874116c6f --- /dev/null +++ b/Semana21/Projeto/Backend/build/Controller/collectionController.js @@ -0,0 +1,56 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CollectionController = void 0; +const collectionBusiness_1 = require("../Business/collectionBusiness"); +const BaseDatabase_1 = require("../Data/BaseDatabase"); +const CollectionDatabase_1 = require("../Data/CollectionDatabase"); +const IdGenerator_1 = require("../Services/IdGenerator"); +const TokenManager_1 = require("../Services/TokenManager"); +class CollectionController { + insertCollection(req, res) { + return __awaiter(this, void 0, void 0, function* () { + try { + const input = { + title: req.body.title, + subtitle: req.body.subtitle, + token: req.params.token + }; + const collectionBusiness = new collectionBusiness_1.CollectionBusiness(new CollectionDatabase_1.CollectionDatabase, new IdGenerator_1.IdGenerator, new TokenManager_1.TokenManager); + yield collectionBusiness.insertCollection(input); + res.status(201).send("Inserted Successfully"); + } + catch (error) { + res.status(400).send({ error: error.message }); + } + yield BaseDatabase_1.BaseDatabase.destroyConnection(); + }); + } + insertCollectionRelation(req, res) { + return __awaiter(this, void 0, void 0, function* () { + try { + const input = { + id_collection: req.body.id_collection, + id_image: req.body.id_image + }; + const collectionBusiness = new collectionBusiness_1.CollectionBusiness(new CollectionDatabase_1.CollectionDatabase, new IdGenerator_1.IdGenerator, new TokenManager_1.TokenManager); + yield collectionBusiness.insertCollectionRelation(input); + res.status(201).send("Inserted Relation Successfully"); + } + catch (error) { + res.status(400).send({ error: error.message }); + } + yield BaseDatabase_1.BaseDatabase.destroyConnection(); + }); + } +} +exports.CollectionController = CollectionController; +//# sourceMappingURL=collectionController.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Controller/collectionController.js.map b/Semana21/Projeto/Backend/build/Controller/collectionController.js.map new file mode 100644 index 0000000000..62a1d734aa --- /dev/null +++ b/Semana21/Projeto/Backend/build/Controller/collectionController.js.map @@ -0,0 +1 @@ +{"version":3,"file":"collectionController.js","sourceRoot":"","sources":["../../src/Controller/collectionController.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,uEAAoE;AACpE,uDAAoD;AACpD,mEAAgE;AAEhE,yDAAsD;AACtD,2DAAwD;AAGxD,MAAa,oBAAoB;IAEvB,gBAAgB,CAAC,GAAY,EAAE,GAAa;;YAC9C,IAAI;gBACA,MAAM,KAAK,GAAoB;oBAC3B,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK;oBACrB,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ;oBAC3B,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK;iBAC1B,CAAA;gBAED,MAAM,kBAAkB,GAAG,IAAI,uCAAkB,CAC7C,IAAI,uCAAkB,EACtB,IAAI,yBAAW,EACf,IAAI,2BAAY,CACnB,CAAA;gBAED,MAAM,kBAAkB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAA;gBAEhD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;aAChD;YAAC,OAAO,KAAK,EAAE;gBACZ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;aAClD;YAED,MAAM,2BAAY,CAAC,iBAAiB,EAAE,CAAC;QAC3C,CAAC;KAAA;IAEK,wBAAwB,CAAC,GAAY,EAAE,GAAa;;YACtD,IAAI;gBACA,MAAM,KAAK,GAA4B;oBACnC,aAAa,EAAE,GAAG,CAAC,IAAI,CAAC,aAAa;oBACrC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ;iBAC9B,CAAA;gBAED,MAAM,kBAAkB,GAAG,IAAI,uCAAkB,CAC7C,IAAI,uCAAkB,EACtB,IAAI,yBAAW,EACf,IAAI,2BAAY,CACnB,CAAA;gBAED,MAAM,kBAAkB,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAA;gBAExD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAA;aACzD;YAAC,OAAO,KAAK,EAAE;gBACZ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;aAClD;YACD,MAAM,2BAAY,CAAC,iBAAiB,EAAE,CAAC;QAC3C,CAAC;KAAA;CAEJ;AAhDD,oDAgDC"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Controller/imageController.js b/Semana21/Projeto/Backend/build/Controller/imageController.js new file mode 100644 index 0000000000..bfedb3e938 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Controller/imageController.js @@ -0,0 +1,57 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ImageController = void 0; +const BaseDatabase_1 = require("../Data/BaseDatabase"); +const imageBusiness_1 = require("../Business/imageBusiness"); +const imageDatabase_1 = require("../Data/imageDatabase"); +const IdGenerator_1 = require("../Services/IdGenerator"); +const HashManager_1 = require("../Services/HashManager"); +const TokenManager_1 = require("../Services/TokenManager"); +class ImageController { + insert(req, res) { + return __awaiter(this, void 0, void 0, function* () { + try { + const input = { + subtitle: req.body.subtitle, + URL: req.body.URL, + }; + const token = req.params.token; + const imageBusiness = new imageBusiness_1.ImageBusiness(new imageDatabase_1.ImageDatabase, new IdGenerator_1.IdGenerator, new HashManager_1.HashManager, new TokenManager_1.TokenManager); + yield imageBusiness.insertImage({ token: token, subtitle: input.subtitle, URL: input.URL }); + res.status(201).send("Inserted Successfully"); + yield BaseDatabase_1.BaseDatabase.destroyConnection(); + } + catch (error) { + res.status(400).send({ error: error.message }); + } + }); + } + getImageById(req, res) { + return __awaiter(this, void 0, void 0, function* () { + try { + const input = { + token: req.params.token, + id: req.params.id + }; + const imageBusiness = new imageBusiness_1.ImageBusiness(new imageDatabase_1.ImageDatabase, new IdGenerator_1.IdGenerator, new HashManager_1.HashManager, new TokenManager_1.TokenManager); + const result = yield imageBusiness.getImageById(input); + res.status(200).send(result); + yield BaseDatabase_1.BaseDatabase.destroyConnection(); + } + catch (error) { + res.status(400).send({ error: error.message }); + } + }); + } +} +exports.ImageController = ImageController; +//# sourceMappingURL=imageController.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Controller/imageController.js.map b/Semana21/Projeto/Backend/build/Controller/imageController.js.map new file mode 100644 index 0000000000..75e5142a42 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Controller/imageController.js.map @@ -0,0 +1 @@ +{"version":3,"file":"imageController.js","sourceRoot":"","sources":["../../src/Controller/imageController.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,uDAAoD;AAGpD,6DAA0D;AAC1D,yDAAsD;AACtD,yDAAsD;AACtD,yDAAsD;AACtD,2DAAwD;AAExD,MAAa,eAAe;IAElB,MAAM,CAAC,GAAY,EAAE,GAAa;;YACpC,IAAI;gBACA,MAAM,KAAK,GAAe;oBACtB,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ;oBAC3B,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG;iBACpB,CAAA;gBAED,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAA;gBAE9B,MAAM,aAAa,GAAG,IAAI,6BAAa,CACnC,IAAI,6BAAa,EACjB,IAAI,yBAAW,EACf,IAAI,yBAAW,EACf,IAAI,2BAAY,CACnB,CAAC;gBAKF,MAAM,aAAa,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;gBAE3F,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;gBAE7C,MAAM,2BAAY,CAAC,iBAAiB,EAAE,CAAC;aAC1C;YAAC,OAAO,KAAK,EAAE;gBACZ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;aAClD;QAEL,CAAC;KAAA;IAEK,YAAY,CAAC,GAAY,EAAE,GAAa;;YAC1C,IAAI;gBAEA,MAAM,KAAK,GAAiB;oBACxB,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK;oBACvB,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE;iBACpB,CAAA;gBAED,MAAM,aAAa,GAAG,IAAI,6BAAa,CACnC,IAAI,6BAAa,EACjB,IAAI,yBAAW,EACf,IAAI,yBAAW,EACf,IAAI,2BAAY,CACnB,CAAC;gBAEF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;gBAEtD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBAE5B,MAAM,2BAAY,CAAC,iBAAiB,EAAE,CAAC;aAC1C;YAAC,OAAO,KAAK,EAAE;gBACZ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;aAClD;QAEL,CAAC;KAAA;CAKJ;AA7DD,0CA6DC"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Controller/userController.js b/Semana21/Projeto/Backend/build/Controller/userController.js new file mode 100644 index 0000000000..883b90353a --- /dev/null +++ b/Semana21/Projeto/Backend/build/Controller/userController.js @@ -0,0 +1,56 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UserController = void 0; +const userBusiness_1 = require("../Business/userBusiness"); +const BaseDatabase_1 = require("../Data/BaseDatabase"); +const userDatabase_1 = require("../Data/userDatabase"); +const HashManager_1 = require("../Services/HashManager"); +const IdGenerator_1 = require("../Services/IdGenerator"); +const TokenManager_1 = require("../Services/TokenManager"); +class UserController { + signup(req, res) { + return __awaiter(this, void 0, void 0, function* () { + try { + const input = { + login: req.body.login, + password: req.body.password, + }; + const userBusiness = new userBusiness_1.UserBusiness(new userDatabase_1.UserDatabase, new IdGenerator_1.IdGenerator, new HashManager_1.HashManager, new TokenManager_1.TokenManager); + const token = yield userBusiness.createUser(input); + res.status(200).send({ token }); + } + catch (error) { + res.status(400).send({ error: error.message }); + } + yield BaseDatabase_1.BaseDatabase.destroyConnection(); + }); + } + login(req, res) { + return __awaiter(this, void 0, void 0, function* () { + try { + const input = { + login: req.body.login, + password: req.body.password + }; + const userBusiness = new userBusiness_1.UserBusiness(new userDatabase_1.UserDatabase, new IdGenerator_1.IdGenerator, new HashManager_1.HashManager, new TokenManager_1.TokenManager); + const token = yield userBusiness.loginUser(input); + res.status(200).send({ token }); + } + catch (error) { + res.status(400).send({ error: error.message }); + } + yield BaseDatabase_1.BaseDatabase.destroyConnection(); + }); + } +} +exports.UserController = UserController; +//# sourceMappingURL=userController.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Controller/userController.js.map b/Semana21/Projeto/Backend/build/Controller/userController.js.map new file mode 100644 index 0000000000..5136ce7976 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Controller/userController.js.map @@ -0,0 +1 @@ +{"version":3,"file":"userController.js","sourceRoot":"","sources":["../../src/Controller/userController.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,2DAAwD;AACxD,uDAAoD;AACpD,uDAAoD;AAEpD,yDAAsD;AACtD,yDAAsD;AACtD,2DAAwD;AAGxD,MAAa,cAAc;IACjB,MAAM,CAAC,GAAY,EAAE,GAAa;;YACpC,IAAI;gBACA,MAAM,KAAK,GAAc;oBACrB,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK;oBACrB,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ;iBAC9B,CAAA;gBAED,MAAM,YAAY,GAAG,IAAI,2BAAY,CACjC,IAAI,2BAAY,EAChB,IAAI,yBAAW,EACf,IAAI,yBAAW,EACf,IAAI,2BAAY,CACnB,CAAC;gBAEF,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;gBAElD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,CAAA;aAEhC;YAAC,OAAO,KAAK,EAAE;gBACZ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;aAClD;YACD,MAAM,2BAAY,CAAC,iBAAiB,EAAE,CAAC;QAC3C,CAAC;KAAA;IAEK,KAAK,CAAC,GAAY,EAAE,GAAa;;YACnC,IAAI;gBACA,MAAM,KAAK,GAAc;oBACrB,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK;oBACrB,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ;iBAC9B,CAAA;gBAED,MAAM,YAAY,GAAG,IAAI,2BAAY,CACjC,IAAI,2BAAY,EAChB,IAAI,yBAAW,EACf,IAAI,yBAAW,EACf,IAAI,2BAAY,CACnB,CAAC;gBAEF,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;gBAEjD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAC,KAAK,EAAC,CAAC,CAAA;aAEhC;YAAC,OAAO,KAAK,EAAE;gBACZ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;aAClD;YAED,MAAM,2BAAY,CAAC,iBAAiB,EAAE,CAAC;QAC3C,CAAC;KAAA;CAIJ;AApDD,wCAoDC"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Data/BaseDatabase.js b/Semana21/Projeto/Backend/build/Data/BaseDatabase.js new file mode 100644 index 0000000000..c45e4e88f6 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Data/BaseDatabase.js @@ -0,0 +1,52 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BaseDatabase = void 0; +const knex_1 = __importDefault(require("knex")); +class BaseDatabase { + constructor() { + this.tableNames = { + users: "Users_fullstack", + images: "Images_fullstack", + collections: "Collection_fullstack", + collectionRelations: "Relation_Collection_Image" + }; + } + getConnection() { + if (!BaseDatabase.connection) { + BaseDatabase.connection = knex_1.default({ + client: "mysql", + connection: { + host: process.env.DB_HOST, + port: 3306, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_SCHEMA, + }, + }); + } + return BaseDatabase.connection; + } + static destroyConnection() { + return __awaiter(this, void 0, void 0, function* () { + if (BaseDatabase.connection) { + yield BaseDatabase.connection.destroy(); + BaseDatabase.connection = null; + } + }); + } +} +exports.BaseDatabase = BaseDatabase; +BaseDatabase.connection = null; +//# sourceMappingURL=BaseDatabase.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Data/BaseDatabase.js.map b/Semana21/Projeto/Backend/build/Data/BaseDatabase.js.map new file mode 100644 index 0000000000..3d9ace46c1 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Data/BaseDatabase.js.map @@ -0,0 +1 @@ +{"version":3,"file":"BaseDatabase.js","sourceRoot":"","sources":["../../src/Data/BaseDatabase.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,gDAAwB;AAIxB,MAAsB,YAAY;IAAlC;QAIc,eAAU,GAAG;YACnB,KAAK,EAAE,iBAAiB;YACxB,MAAM,EAAE,kBAAkB;YAC1B,WAAW,EAAE,sBAAsB;YACnC,mBAAmB,EAAE,2BAA2B;SAEnD,CAAA;IAyBL,CAAC;IAvBa,aAAa;QACnB,IAAG,CAAC,YAAY,CAAC,UAAU,EAAC;YACxB,YAAY,CAAC,UAAU,GAAG,cAAI,CAAC;gBAC3B,MAAM,EAAE,OAAO;gBACf,UAAU,EAAE;oBACV,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO;oBACzB,IAAI,EAAE,IAAI;oBACV,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO;oBACzB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW;oBACjC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS;iBAChC;aACF,CAAC,CAAC;SACR;QAED,OAAO,YAAY,CAAC,UAAU,CAAC;IACnC,CAAC;IAEM,MAAM,CAAO,iBAAiB;;YACjC,IAAG,YAAY,CAAC,UAAU,EAAC;gBACvB,MAAM,YAAY,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACxC,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC;aAClC;QACL,CAAC;KAAA;;AAlCL,oCAmCC;AAjCkB,uBAAU,GAAgB,IAAI,CAAC"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Data/CollectionDatabase.js b/Semana21/Projeto/Backend/build/Data/CollectionDatabase.js new file mode 100644 index 0000000000..31d74916d0 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Data/CollectionDatabase.js @@ -0,0 +1,45 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CollectionDatabase = void 0; +const BaseDatabase_1 = require("./BaseDatabase"); +class CollectionDatabase extends BaseDatabase_1.BaseDatabase { + insertCollection(collection) { + return __awaiter(this, void 0, void 0, function* () { + try { + yield this.getConnection().raw(` + INSERT INTO ${this.tableNames.collections} (id, title, subtitle, author) + VALUES ("${collection.id}", "${collection.title}", "${collection.subtitle}", "${collection.author}"); + `); + console.log("Insertion Completed!"); + } + catch (error) { + throw new Error(error.sqlMessage || error.message); + } + }); + } + insertCollectionRelation(collectionRelation) { + return __awaiter(this, void 0, void 0, function* () { + try { + yield this.getConnection().raw(` + INSERT INTO ${this.tableNames.collectionRelations} (id_collection, id_image) + VALUES ("${collectionRelation.id_collection}", "${collectionRelation.id_image}"); + `); + console.log("Insertion Completed!"); + } + catch (error) { + throw new Error(error.sqlMessage || error.message); + } + }); + } +} +exports.CollectionDatabase = CollectionDatabase; +//# sourceMappingURL=CollectionDatabase.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Data/CollectionDatabase.js.map b/Semana21/Projeto/Backend/build/Data/CollectionDatabase.js.map new file mode 100644 index 0000000000..e7ba4c6e0d --- /dev/null +++ b/Semana21/Projeto/Backend/build/Data/CollectionDatabase.js.map @@ -0,0 +1 @@ +{"version":3,"file":"CollectionDatabase.js","sourceRoot":"","sources":["../../src/Data/CollectionDatabase.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,iDAA8C;AAE9C,MAAa,kBAAmB,SAAQ,2BAAY;IACnC,gBAAgB,CAAC,UAAmC;;YAC7D,IAAI;gBACA,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC;0BACjB,IAAI,CAAC,UAAU,CAAC,WAAW;uBAC9B,UAAU,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,OAAO,UAAU,CAAC,QAAQ,OAAO,UAAU,CAAC,MAAM;aAChG,CAAC,CAAA;gBACF,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;aACtC;YAAC,OAAO,KAAK,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;aACrD;QACL,CAAC;KAAA;IAEY,wBAAwB,CAAC,kBAA2C;;YAC7E,IAAI;gBACA,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC;0BACjB,IAAI,CAAC,UAAU,CAAC,mBAAmB;uBACtC,kBAAkB,CAAC,aAAa,OAAO,kBAAkB,CAAC,QAAQ;aAC5E,CAAC,CAAA;gBACF,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;aACtC;YAAC,OAAO,KAAK,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;aACrD;QACL,CAAC;KAAA;CACJ;AAxBD,gDAwBC"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Data/imageDatabase.js b/Semana21/Projeto/Backend/build/Data/imageDatabase.js new file mode 100644 index 0000000000..e4f7bed57f --- /dev/null +++ b/Semana21/Projeto/Backend/build/Data/imageDatabase.js @@ -0,0 +1,59 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ImageDatabase = void 0; +const BaseDatabase_1 = require("./BaseDatabase"); +class ImageDatabase extends BaseDatabase_1.BaseDatabase { + insertImage(image) { + return __awaiter(this, void 0, void 0, function* () { + try { + yield this.getConnection().raw(` + INSERT INTO ${this.tableNames.images} (id, subtitle, URL, fk_user) + VALUES ("${image.id}", "${image.subtitle}", "${image.URL}", "${image.fk_user}"); + `); + console.log("Insertion Completed!"); + } + catch (error) { + throw new Error(error.sqlMessage || error.message); + } + }); + } + getImagesOfUser(id) { + return __awaiter(this, void 0, void 0, function* () { + try { + const result = yield this.getConnection().raw(` + SELECT * FROM ${this.tableNames.images} + WHERE ( fk_user = "${id}"); + `); + return result[0]; + } + catch (error) { + throw new Error(error.sqlMessage || error.message); + } + }); + } + getImageById(id) { + return __awaiter(this, void 0, void 0, function* () { + try { + const result = yield this.getConnection().raw(` + SELECT * FROM ${this.tableNames.images} + WHERE ( id = "${id}"); + `); + return result[0]; + } + catch (error) { + throw new Error(error.sqlMessage || error.message); + } + }); + } +} +exports.ImageDatabase = ImageDatabase; +//# sourceMappingURL=imageDatabase.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Data/imageDatabase.js.map b/Semana21/Projeto/Backend/build/Data/imageDatabase.js.map new file mode 100644 index 0000000000..5b76ec2dfc --- /dev/null +++ b/Semana21/Projeto/Backend/build/Data/imageDatabase.js.map @@ -0,0 +1 @@ +{"version":3,"file":"imageDatabase.js","sourceRoot":"","sources":["../../src/Data/imageDatabase.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,iDAA8C;AAI9C,MAAa,aAAc,SAAQ,2BAAY;IAE9B,WAAW,CAAC,KAAoB;;YACzC,IAAI;gBACA,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC;8BACb,IAAI,CAAC,UAAU,CAAC,MAAM;2BACzB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC,QAAQ,OAAO,KAAK,CAAC,GAAG,OAAO,KAAK,CAAC,OAAO;iBAC3E,CAAC,CAAA;gBACN,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;aACtC;YAAC,OAAO,KAAK,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;aACrD;QACL,CAAC;KAAA;IAEY,eAAe,CAAC,EAAU;;YACnC,IAAI;gBACA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC;4BAC9B,IAAI,CAAC,UAAU,CAAC,MAAM;iCACjB,EAAE;aACtB,CAAC,CAAA;gBAEF,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;aACnB;YAAC,OAAO,KAAK,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;aACrD;QACL,CAAC;KAAA;IAEY,YAAY,CAAC,EAAU;;YAChC,IAAI;gBACA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC;4BAC9B,IAAI,CAAC,UAAU,CAAC,MAAM;4BACtB,EAAE;aACjB,CAAC,CAAA;gBAEF,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;aACnB;YAAC,OAAO,KAAK,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;aACrD;QACL,CAAC;KAAA;CAIJ;AA1CD,sCA0CC"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Data/userDatabase.js b/Semana21/Projeto/Backend/build/Data/userDatabase.js new file mode 100644 index 0000000000..558f16b0f4 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Data/userDatabase.js @@ -0,0 +1,48 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UserDatabase = void 0; +const BaseDatabase_1 = require("./BaseDatabase"); +class UserDatabase extends BaseDatabase_1.BaseDatabase { + createUser(user) { + return __awaiter(this, void 0, void 0, function* () { + try { + yield this.getConnection().raw(` + INSERT INTO ${this.tableNames.users} (id, login, password) + VALUES ("${user.id}", "${user.login}", "${user.password}"); + `); + console.log("Insertion Completed!"); + } + catch (error) { + throw new Error(error.sqlMessage || error.message); + } + }); + } + login(user) { + return __awaiter(this, void 0, void 0, function* () { + try { + const result = yield this.getConnection().raw(` + SELECT id, password FROM ${this.tableNames.users} + WHERE (login LIKE "${user.login}") + `); + if (!result[0][0]) { + throw new Error("Login or Password Incorrect"); + } + return ({ id: result[0][0].id, password: result[0][0].password }); + } + catch (error) { + throw new Error(error.sqlMessage || error.message); + } + }); + } +} +exports.UserDatabase = UserDatabase; +//# sourceMappingURL=userDatabase.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Data/userDatabase.js.map b/Semana21/Projeto/Backend/build/Data/userDatabase.js.map new file mode 100644 index 0000000000..fa57b91602 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Data/userDatabase.js.map @@ -0,0 +1 @@ +{"version":3,"file":"userDatabase.js","sourceRoot":"","sources":["../../src/Data/userDatabase.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,iDAA8C;AAG9C,MAAa,YAAa,SAAQ,2BAAY;IAE7B,UAAU,CAAC,IAAkB;;YACtC,IAAI;gBACA,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC;8BACb,IAAI,CAAC,UAAU,CAAC,KAAK;2BACxB,IAAI,CAAC,EAAE,OAAO,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,QAAQ;iBACtD,CAAC,CAAA;gBACN,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;aACtC;YAAC,OAAO,KAAK,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;aACrD;QACL,CAAC;KAAA;IAEY,KAAK,CAAC,IAAe;;YAE9B,IAAG;gBAEC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC;wCAClB,IAAI,CAAC,UAAU,CAAC,KAAK;iCAC5B,IAAI,CAAC,KAAK;aAC9B,CAAC,CAAA;gBAEF,IAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC;oBACb,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;iBACjD;gBACD,OAAO,CAAC,EAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAC,CAAC,CAAA;aAElE;YAAC,OAAM,KAAK,EAAC;gBACV,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;aACrD;QAGL,CAAC;KAAA;CAGJ;AApCD,oCAoCC"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Entities/Collection.js b/Semana21/Projeto/Backend/build/Entities/Collection.js new file mode 100644 index 0000000000..be5e859852 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Entities/Collection.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=Collection.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Entities/Collection.js.map b/Semana21/Projeto/Backend/build/Entities/Collection.js.map new file mode 100644 index 0000000000..f101b26bad --- /dev/null +++ b/Semana21/Projeto/Backend/build/Entities/Collection.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Collection.js","sourceRoot":"","sources":["../../src/Entities/Collection.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Entities/Image.js b/Semana21/Projeto/Backend/build/Entities/Image.js new file mode 100644 index 0000000000..ff1830a1cd --- /dev/null +++ b/Semana21/Projeto/Backend/build/Entities/Image.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=Image.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Entities/Image.js.map b/Semana21/Projeto/Backend/build/Entities/Image.js.map new file mode 100644 index 0000000000..8c33990e0b --- /dev/null +++ b/Semana21/Projeto/Backend/build/Entities/Image.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Image.js","sourceRoot":"","sources":["../../src/Entities/Image.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Entities/User.js b/Semana21/Projeto/Backend/build/Entities/User.js new file mode 100644 index 0000000000..9da5871e01 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Entities/User.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=User.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Entities/User.js.map b/Semana21/Projeto/Backend/build/Entities/User.js.map new file mode 100644 index 0000000000..2f703c8a8c --- /dev/null +++ b/Semana21/Projeto/Backend/build/Entities/User.js.map @@ -0,0 +1 @@ +{"version":3,"file":"User.js","sourceRoot":"","sources":["../../src/Entities/User.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Error/BaseError.js b/Semana21/Projeto/Backend/build/Error/BaseError.js new file mode 100644 index 0000000000..6ba42a610c --- /dev/null +++ b/Semana21/Projeto/Backend/build/Error/BaseError.js @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BaseError = void 0; +class BaseError extends Error { + constructor(message, code) { + super(message); + this.code = code; + } +} +exports.BaseError = BaseError; +//# sourceMappingURL=BaseError.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Error/BaseError.js.map b/Semana21/Projeto/Backend/build/Error/BaseError.js.map new file mode 100644 index 0000000000..104a038637 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Error/BaseError.js.map @@ -0,0 +1 @@ +{"version":3,"file":"BaseError.js","sourceRoot":"","sources":["../../src/Error/BaseError.ts"],"names":[],"mappings":";;;AAAA,MAAsB,SAAU,SAAQ,KAAK;IACzC,YAAY,OAAe,EAAS,IAAY;QAC9C,KAAK,CAAC,OAAO,CAAC,CAAC;QADmB,SAAI,GAAJ,IAAI,CAAQ;IAEhD,CAAC;CACF;AAJH,8BAIG"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Error/InvalidInputError.js b/Semana21/Projeto/Backend/build/Error/InvalidInputError.js new file mode 100644 index 0000000000..7fe5f6b0b6 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Error/InvalidInputError.js @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.InvalidInputError = void 0; +const BaseError_1 = require("./BaseError"); +class InvalidInputError extends BaseError_1.BaseError { + constructor(message) { + super(message, 417); + } +} +exports.InvalidInputError = InvalidInputError; +//# sourceMappingURL=InvalidInputError.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Error/InvalidInputError.js.map b/Semana21/Projeto/Backend/build/Error/InvalidInputError.js.map new file mode 100644 index 0000000000..e7112f88d0 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Error/InvalidInputError.js.map @@ -0,0 +1 @@ +{"version":3,"file":"InvalidInputError.js","sourceRoot":"","sources":["../../src/Error/InvalidInputError.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AAExC,MAAa,iBAAkB,SAAQ,qBAAS;IAC5C,YAAY,OAAe;QACvB,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IACvB,CAAC;CACJ;AAJD,8CAIC"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Error/LoginAgain.js b/Semana21/Projeto/Backend/build/Error/LoginAgain.js new file mode 100644 index 0000000000..2de6fdf059 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Error/LoginAgain.js @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LoginAgain = void 0; +const BaseError_1 = require("./BaseError"); +class LoginAgain extends BaseError_1.BaseError { + constructor(message) { + super(message, 401); + } +} +exports.LoginAgain = LoginAgain; +//# sourceMappingURL=LoginAgain.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Error/LoginAgain.js.map b/Semana21/Projeto/Backend/build/Error/LoginAgain.js.map new file mode 100644 index 0000000000..5785035531 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Error/LoginAgain.js.map @@ -0,0 +1 @@ +{"version":3,"file":"LoginAgain.js","sourceRoot":"","sources":["../../src/Error/LoginAgain.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AAExC,MAAa,UAAW,SAAQ,qBAAS;IACrC,YAAY,OAAe;QACvB,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IACvB,CAAC;CACJ;AAJD,gCAIC"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Routes/collectionRouter.js b/Semana21/Projeto/Backend/build/Routes/collectionRouter.js new file mode 100644 index 0000000000..2f8d63f0a4 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Routes/collectionRouter.js @@ -0,0 +1,13 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.collectionRouter = void 0; +const express_1 = __importDefault(require("express")); +const collectionController_1 = require("../Controller/collectionController"); +exports.collectionRouter = express_1.default.Router(); +const collectionController = new collectionController_1.CollectionController(); +exports.collectionRouter.put("/insert/:token", collectionController.insertCollection); +exports.collectionRouter.put("/insert/relation/:token", collectionController.insertCollectionRelation); +//# sourceMappingURL=collectionRouter.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Routes/collectionRouter.js.map b/Semana21/Projeto/Backend/build/Routes/collectionRouter.js.map new file mode 100644 index 0000000000..7f37943d9e --- /dev/null +++ b/Semana21/Projeto/Backend/build/Routes/collectionRouter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"collectionRouter.js","sourceRoot":"","sources":["../../src/Routes/collectionRouter.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA8B;AAC9B,6EAA0E;AAK7D,QAAA,gBAAgB,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAC;AAEjD,MAAM,oBAAoB,GAAG,IAAI,2CAAoB,EAAE,CAAC;AAExD,wBAAgB,CAAC,GAAG,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,gBAAgB,CAAC,CAAA;AAC7E,wBAAgB,CAAC,GAAG,CAAC,yBAAyB,EAAE,oBAAoB,CAAC,wBAAwB,CAAC,CAAA"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Routes/imageRouter.js b/Semana21/Projeto/Backend/build/Routes/imageRouter.js new file mode 100644 index 0000000000..f63c5a6c7b --- /dev/null +++ b/Semana21/Projeto/Backend/build/Routes/imageRouter.js @@ -0,0 +1,14 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.imageRouter = void 0; +const express_1 = __importDefault(require("express")); +const imageController_1 = require("../Controller/imageController"); +exports.imageRouter = express_1.default.Router(); +const imageController = new imageController_1.ImageController(); +exports.imageRouter.post("/insert/:token", imageController.insert); +exports.imageRouter.get("/:token/:id", imageController.getImageById); +exports.imageRouter.get("/:token/", imageController.getImageById); +//# sourceMappingURL=imageRouter.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Routes/imageRouter.js.map b/Semana21/Projeto/Backend/build/Routes/imageRouter.js.map new file mode 100644 index 0000000000..85a188ebbe --- /dev/null +++ b/Semana21/Projeto/Backend/build/Routes/imageRouter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"imageRouter.js","sourceRoot":"","sources":["../../src/Routes/imageRouter.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA8B;AAC9B,mEAAgE;AAEnD,QAAA,WAAW,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAC;AAE5C,MAAM,eAAe,GAAG,IAAI,iCAAe,EAAE,CAAC;AAE9C,mBAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,eAAe,CAAC,MAAM,CAAC,CAAA;AAC1D,mBAAW,CAAC,GAAG,CAAC,aAAa,EAAE,eAAe,CAAC,YAAY,CAAC,CAAA;AAC5D,mBAAW,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,CAAC,YAAY,CAAC,CAAA"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Routes/userRouter.js b/Semana21/Projeto/Backend/build/Routes/userRouter.js new file mode 100644 index 0000000000..9d3d07eb16 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Routes/userRouter.js @@ -0,0 +1,13 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.userRouter = void 0; +const express_1 = __importDefault(require("express")); +const userController_1 = require("../Controller/userController"); +exports.userRouter = express_1.default.Router(); +const userController = new userController_1.UserController(); +exports.userRouter.post("/signup", userController.signup); +exports.userRouter.post("/login", userController.login); +//# sourceMappingURL=userRouter.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Routes/userRouter.js.map b/Semana21/Projeto/Backend/build/Routes/userRouter.js.map new file mode 100644 index 0000000000..01a60f9ee1 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Routes/userRouter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"userRouter.js","sourceRoot":"","sources":["../../src/Routes/userRouter.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA8B;AAC9B,iEAA8D;AAEjD,QAAA,UAAU,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAC;AAE3C,MAAM,cAAc,GAAG,IAAI,+BAAc,EAAE,CAAC;AAE5C,kBAAU,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;AACjD,kBAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,KAAK,CAAC,CAAA"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Services/HashManager.js b/Semana21/Projeto/Backend/build/Services/HashManager.js new file mode 100644 index 0000000000..0370aafd24 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Services/HashManager.js @@ -0,0 +1,46 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.HashManager = void 0; +const bcrypt = __importStar(require("bcryptjs")); +class HashManager { + constructor() { + this.hash = (plainText) => __awaiter(this, void 0, void 0, function* () { + const rounds = Number(process.env.BCRYPT_COST); + const salt = yield bcrypt.genSalt(rounds); + return bcrypt.hash(plainText, salt); + }); + this.compare = (plainText, cypherText) => __awaiter(this, void 0, void 0, function* () { + return bcrypt.compare(plainText, cypherText); + }); + } +} +exports.HashManager = HashManager; +//# sourceMappingURL=HashManager.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Services/HashManager.js.map b/Semana21/Projeto/Backend/build/Services/HashManager.js.map new file mode 100644 index 0000000000..9ab45c2330 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Services/HashManager.js.map @@ -0,0 +1 @@ +{"version":3,"file":"HashManager.js","sourceRoot":"","sources":["../../src/Services/HashManager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iDAAkC;AAElC,MAAa,WAAW;IAAxB;QACI,SAAI,GAAG,CACH,SAAiB,EACD,EAAE;YAClB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC/C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1C,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;QACtC,CAAC,CAAA,CAAA;QAEF,YAAO,GAAG,CACN,SAAiB,EAAE,UAAkB,EACpB,EAAE;YACnB,OAAO,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;QAC/C,CAAC,CAAA,CAAA;IACN,CAAC;CAAA;AAdD,kCAcC"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Services/IdGenerator.js b/Semana21/Projeto/Backend/build/Services/IdGenerator.js new file mode 100644 index 0000000000..352f8dd787 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Services/IdGenerator.js @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IdGenerator = void 0; +const uuid_1 = require("uuid"); +class IdGenerator { + constructor() { + this.generateId = () => uuid_1.v4(); + } +} +exports.IdGenerator = IdGenerator; +//# sourceMappingURL=IdGenerator.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Services/IdGenerator.js.map b/Semana21/Projeto/Backend/build/Services/IdGenerator.js.map new file mode 100644 index 0000000000..690513a20d --- /dev/null +++ b/Semana21/Projeto/Backend/build/Services/IdGenerator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"IdGenerator.js","sourceRoot":"","sources":["../../src/Services/IdGenerator.ts"],"names":[],"mappings":";;;AAAA,+BAA0B;AAE1B,MAAa,WAAW;IAAxB;QACI,eAAU,GAAG,GAAW,EAAE,CAAC,SAAE,EAAE,CAAA;IACnC,CAAC;CAAA;AAFD,kCAEC"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Services/Server.js b/Semana21/Projeto/Backend/build/Services/Server.js new file mode 100644 index 0000000000..a2c74a74a3 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Services/Server.js @@ -0,0 +1,33 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.server = void 0; +const express_1 = __importDefault(require("express")); +const cors_1 = __importDefault(require("cors")); +const knex_1 = __importDefault(require("knex")); +const dotenv_1 = __importDefault(require("dotenv")); +const server = () => { + dotenv_1.default.config(); + const connection = knex_1.default({ + client: "mysql", + connection: { + host: process.env.DB_HOST, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_SCHEMA, + port: 3306, + multipleStatements: true + } + }); + const app = express_1.default(); + app.use(express_1.default.json()); + app.use(cors_1.default()); + app.listen(3003, () => { + console.log("Server running on port 3003"); + }); +}; +exports.server = server; +exports.default = exports.server; +//# sourceMappingURL=Server.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Services/Server.js.map b/Semana21/Projeto/Backend/build/Services/Server.js.map new file mode 100644 index 0000000000..9579abc7c8 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Services/Server.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Server.js","sourceRoot":"","sources":["../../src/Services/Server.ts"],"names":[],"mappings":";;;;;;AAAA,sDAAyC;AACzC,gDAAuB;AACvB,gDAAuB;AACvB,oDAA2B;AAIpB,MAAM,MAAM,GAAG,GAAG,EAAE;IAC3B,gBAAM,CAAC,MAAM,EAAE,CAAA;IAEf,MAAM,UAAU,GAAS,cAAI,CAAC;QAC3B,MAAM,EAAE,OAAO;QACf,UAAU,EAAE;YACT,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO;YACzB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO;YACzB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW;YACjC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS;YAC/B,IAAI,EAAE,IAAI;YACV,kBAAkB,EAAE,IAAI;SAC1B;KACH,CAAC,CAAA;IAEF,MAAM,GAAG,GAAY,iBAAO,EAAE,CAAA;IAC9B,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IACvB,GAAG,CAAC,GAAG,CAAC,cAAI,EAAE,CAAC,CAAA;IAEf,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QAClB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;AACH,CAAC,CAAA;AAtBY,QAAA,MAAM,UAsBlB;AAGD,kBAAe,cAAM,CAAA"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Services/TokenManager.js b/Semana21/Projeto/Backend/build/Services/TokenManager.js new file mode 100644 index 0000000000..c75ba6982b --- /dev/null +++ b/Semana21/Projeto/Backend/build/Services/TokenManager.js @@ -0,0 +1,36 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TokenManager = void 0; +const jwt = __importStar(require("jsonwebtoken")); +class TokenManager { + generateToken(payload) { + return jwt.sign(payload, process.env.JWT_KEY, { + expiresIn: process.env.JWT_EXPIRES_IN + }); + } + getTokenData(token) { + const result = jwt.verify(token, process.env.JWT_KEY); + return { id: result.id, login: result.login }; + } +} +exports.TokenManager = TokenManager; +//# sourceMappingURL=TokenManager.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Services/TokenManager.js.map b/Semana21/Projeto/Backend/build/Services/TokenManager.js.map new file mode 100644 index 0000000000..1955078441 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Services/TokenManager.js.map @@ -0,0 +1 @@ +{"version":3,"file":"TokenManager.js","sourceRoot":"","sources":["../../src/Services/TokenManager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AACA,kDAAoC;AAEpC,MAAa,YAAY;IAEpB,aAAa,CACV,OAA2B;QAE3B,OAAO,GAAG,CAAC,IAAI,CACZ,OAAO,EACP,OAAO,CAAC,GAAG,CAAC,OAAiB,EAC7B;YACG,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;SACvC,CACH,CAAA;IACJ,CAAC;IAEF,YAAY,CACR,KAAa;QAEb,MAAM,MAAM,GAAQ,GAAG,CAAC,MAAM,CAC3B,KAAK,EACL,OAAO,CAAC,GAAG,CAAC,OAAiB,CAC/B,CAAA;QAED,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAA;IAChD,CAAC;CAEL;AAzBD,oCAyBC"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Services/connection.js b/Semana21/Projeto/Backend/build/Services/connection.js new file mode 100644 index 0000000000..b83e962cc9 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Services/connection.js @@ -0,0 +1,19 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.connection = void 0; +const knex_1 = __importDefault(require("knex")); +exports.connection = knex_1.default({ + client: "mysql", + connection: { + host: process.env.DB_HOST, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_SCHEMA, + port: 3306, + multipleStatements: true + } +}); +//# sourceMappingURL=connection.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Services/connection.js.map b/Semana21/Projeto/Backend/build/Services/connection.js.map new file mode 100644 index 0000000000..76d90363e9 --- /dev/null +++ b/Semana21/Projeto/Backend/build/Services/connection.js.map @@ -0,0 +1 @@ +{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/Services/connection.ts"],"names":[],"mappings":";;;;;;AAEA,gDAAuB;AAKV,QAAA,UAAU,GAAS,cAAI,CAAC;IACjC,MAAM,EAAE,OAAO;IACf,UAAU,EAAE;QACT,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO;QACzB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO;QACzB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW;QACjC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS;QAC/B,IAAI,EAAE,IAAI;QACV,kBAAkB,EAAE,IAAI;KAC1B;CACH,CAAC,CAAA"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/index.js b/Semana21/Projeto/Backend/build/index.js new file mode 100644 index 0000000000..51b657d30c --- /dev/null +++ b/Semana21/Projeto/Backend/build/index.js @@ -0,0 +1,22 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const express_1 = __importDefault(require("express")); +const cors_1 = __importDefault(require("cors")); +const dotenv_1 = __importDefault(require("dotenv")); +const userRouter_1 = require("./Routes/userRouter"); +const imageRouter_1 = require("./Routes/imageRouter"); +const collectionRouter_1 = require("./Routes/collectionRouter"); +dotenv_1.default.config(); +const app = express_1.default(); +app.use(express_1.default.json()); +app.use(cors_1.default()); +app.listen(3003, () => { + console.log("Server running on port 3003"); +}); +app.use("/user", userRouter_1.userRouter); +app.use("/image", imageRouter_1.imageRouter); +app.use("/collection", collectionRouter_1.collectionRouter); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/index.js.map b/Semana21/Projeto/Backend/build/index.js.map new file mode 100644 index 0000000000..a5d13ec06e --- /dev/null +++ b/Semana21/Projeto/Backend/build/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,sDAA6D;AAC7D,gDAAuB;AAEvB,oDAA2B;AAE3B,oDAAgD;AAChD,sDAAkD;AAClD,gEAA4D;AAE5D,gBAAM,CAAC,MAAM,EAAE,CAAA;AACf,MAAM,GAAG,GAAY,iBAAO,EAAE,CAAA;AAC9B,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,IAAI,EAAE,CAAC,CAAA;AACvB,GAAG,CAAC,GAAG,CAAC,cAAI,EAAE,CAAC,CAAA;AAEf,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;IAClB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAA;AAC9C,CAAC,CAAC,CAAA;AAGF,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,uBAAU,CAAC,CAAC;AAC7B,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,yBAAW,CAAC,CAAC;AAC/B,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,mCAAgB,CAAC,CAAC"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/migration.js b/Semana21/Projeto/Backend/build/migration.js new file mode 100644 index 0000000000..23f51952b1 --- /dev/null +++ b/Semana21/Projeto/Backend/build/migration.js @@ -0,0 +1,37 @@ +"use strict"; +(` +SELECT * FROM Users_fullstack; +CREATE TABLE IF NOT EXISTS Users_fullstack ( + id VARCHAR(255) PRIMARY KEY, + login VARCHAR(255) NOT NULL, + password VARCHAR(255) NOT NULL +); + +SELECT * FROM Images_fullstack; +CREATE TABLE IF NOT EXISTS Images_fullstack ( + id VARCHAR(255) PRIMARY KEY, + subtitle VARCHAR(255) NOT NULL, + URL VARCHAR(255) NOT NULL, + fk_user VARCHAR(255) NOT NULL, + FOREIGN KEY (fk_user) REFERENCES Users_fullstack(id) +); + +SELECT * FROM Collection_fullstack; +CREATE TABLE IF NOT EXISTS Collection_fullstack ( +id VARCHAR(255) PRIMARY KEY NOT NULL, +title TEXT NOT NULL, +subtitle TEXT, +author VARCHAR(255) NOT NULL, +foreign key (author) REFERENCES Users_fullstack(id) +); + +SELECT * FROM Relation_Collection_Image; +CREATE TABLE IF NOT EXISTS Relation_Collection_Image( +id_collection VARCHAR(255) NOT NULL, +id_image VARCHAR(255) NOT NULL, +FOREIGN KEY (id_collection) REFERENCES Collection_fullstack(id), +FOREIGN KEY (id_image) REFERENCES Images_fullstack(id) +); + +`); +//# sourceMappingURL=migration.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/migration.js.map b/Semana21/Projeto/Backend/build/migration.js.map new file mode 100644 index 0000000000..9499556f2b --- /dev/null +++ b/Semana21/Projeto/Backend/build/migration.js.map @@ -0,0 +1 @@ +{"version":3,"file":"migration.js","sourceRoot":"","sources":["../src/migration.ts"],"names":[],"mappings":";AAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCA,CAAC,CAAA"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/package-lock.json b/Semana21/Projeto/Backend/package-lock.json new file mode 100644 index 0000000000..6bcea11cb4 --- /dev/null +++ b/Semana21/Projeto/Backend/package-lock.json @@ -0,0 +1,2649 @@ +{ + "name": "base", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/bcryptjs": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/bcryptjs/-/bcryptjs-2.4.2.tgz", + "integrity": "sha512-LiMQ6EOPob/4yUL66SZzu6Yh77cbzJFYll+ZfaPiPPFswtIlA/Fs1MzdKYA7JApHU49zQTbJGX3PDmCpIdDBRQ==", + "dev": true + }, + "@types/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.34", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz", + "integrity": "sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/cors": { + "version": "2.8.10", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz", + "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==", + "dev": true + }, + "@types/express": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.11.tgz", + "integrity": "sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.19.tgz", + "integrity": "sha512-DJOSHzX7pCiSElWaGR8kCprwibCB/3yW6vcT8VG3P0SJjnv19gnWG/AZMfM60Xj/YJIp/YCaDHyvzsFVeniARA==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-rNAPdomlIUX0i0cg2+I+Q1wOUr531zHBQ+cV/28PJ39bSPKjahatZZ2LMuhiguETkCgLVzfruw/ZvNMNkKoSzw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/knex": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@types/knex/-/knex-0.16.1.tgz", + "integrity": "sha512-54gWD1HWwdVx5iLHaJ1qxH3I6KyBsj5fFqzRpXFn7REWiEB2jwspeVCombNsocSrqPd7IRPqKrsIME7/cD+TFQ==", + "dev": true, + "requires": { + "knex": "*" + } + }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "@types/node": { + "version": "14.14.37", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.37.tgz", + "integrity": "sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw==", + "dev": true + }, + "@types/qs": { + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", + "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", + "dev": true + }, + "@types/serve-static": { + "version": "1.13.9", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz", + "integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I=", + "dev": true + }, + "@types/strip-json-comments": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", + "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", + "dev": true + }, + "@types/uuid": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz", + "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=" + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" + }, + "bignumber.js": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", + "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + } + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" + }, + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "dateformat": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1", + "meow": "^3.3.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=" + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" + }, + "dynamic-dedupe": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz", + "integrity": "sha1-BuRMIj9eTpTXjvnbI6ZRXOL5YqE=", + "dev": true, + "requires": { + "xtend": "^4.0.0" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "requires": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + } + }, + "flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==" + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "requires": { + "for-in": "^1.0.1" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "getopts": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/getopts/-/getopts-2.2.5.tgz", + "integrity": "sha512-9jb7AW5p3in+IiJWhQiZmmwkpLaR/ccTWdWQCtZM66HJcHHLegowh4q4tSD7gouUyeNvFWRavfK9GXosQHDpFA==" + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "requires": { + "is-unc-path": "^1.0.0" + } + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "requires": { + "unc-path-regex": "^0.1.2" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "knex": { + "version": "0.21.19", + "resolved": "https://registry.npmjs.org/knex/-/knex-0.21.19.tgz", + "integrity": "sha512-6etvrq9XI1Ck6mEc/XiXFGVpD1Lmj6v9XWojqZgEbOvyMbW7XRvgZ99yIhN/kaBH+43FEy3xv/AcbRaH+1pJtw==", + "requires": { + "colorette": "1.2.1", + "commander": "^6.2.0", + "debug": "4.3.1", + "esm": "^3.2.25", + "getopts": "2.2.5", + "interpret": "^2.2.0", + "liftoff": "3.1.0", + "lodash": "^4.17.20", + "pg-connection-string": "2.4.0", + "tarn": "^3.0.1", + "tildify": "2.0.0", + "v8flags": "^3.2.0" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "liftoff": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", + "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "requires": { + "extend": "^3.0.0", + "findup-sync": "^3.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "requires": { + "kind-of": "^6.0.2" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "^1.0.0" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==" + }, + "mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "requires": { + "mime-db": "1.47.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mysql": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz", + "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==", + "requires": { + "bignumber.js": "9.0.0", + "readable-stream": "2.3.7", + "safe-buffer": "5.1.2", + "sqlstring": "2.3.1" + } + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "requires": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "^3.0.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "requires": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "requires": { + "path-root-regex": "^0.1.0" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pg-connection-string": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.4.0.tgz", + "integrity": "sha512-3iBXuv7XKvxeMrIgym7njT+HlZkwZqqGX4Bu9cci8xHZNT+Um1gWKqCsAzcC0d95rcKMU5WBg6YRUcHyV0HZKQ==" + }, + "picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "requires": { + "resolve": "^1.1.6" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sqlstring": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", + "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "tarn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.1.tgz", + "integrity": "sha512-6usSlV9KyHsspvwu2duKH+FMUhqJnAh6J5J/4MITl8s94iSUQTLkJggdiewKv4RyARQccnigV48Z+khiuVZDJw==" + }, + "tildify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz", + "integrity": "sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==" + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + } + }, + "ts-node-dev": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-1.1.6.tgz", + "integrity": "sha512-RTUi7mHMNQospArGz07KiraQcdgUVNXKsgO2HAi7FoiyPMdTDqdniB6K1dqyaIxT7c9v/VpSbfBZPS6uVpaFLQ==", + "dev": true, + "requires": { + "chokidar": "^3.5.1", + "dateformat": "~1.0.4-1.2.3", + "dynamic-dedupe": "^0.3.0", + "minimist": "^1.2.5", + "mkdirp": "^1.0.4", + "resolve": "^1.0.0", + "rimraf": "^2.6.1", + "source-map-support": "^0.5.12", + "tree-kill": "^1.2.2", + "ts-node": "^9.0.0", + "tsconfig": "^7.0.0" + } + }, + "tsconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", + "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", + "dev": true, + "requires": { + "@types/strip-bom": "^3.0.0", + "@types/strip-json-comments": "0.0.30", + "strip-bom": "^3.0.0", + "strip-json-comments": "^2.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typescript": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", + "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", + "dev": true + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, + "v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + } + } +} diff --git a/Semana21/Projeto/Backend/package.json b/Semana21/Projeto/Backend/package.json new file mode 100644 index 0000000000..60ffc5ba9a --- /dev/null +++ b/Semana21/Projeto/Backend/package.json @@ -0,0 +1,37 @@ +{ + "name": "base", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "migrations": "tsc && node ./build/migrations.js", + "start": "npm run build && node --inspect ./build/index.js", + "dev": "clear && ts-node-dev ./src/index.ts", + "build": "clear && echo \"Transpiling files...\" && tsc && echo \"Done!\" ", + "test": "jest" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "bcryptjs": "^2.4.3", + "cors": "^2.8.5", + "dotenv": "^8.2.0", + "express": "^4.17.1", + "jsonwebtoken": "^8.5.1", + "knex": "^0.21.19", + "mysql": "^2.18.1", + "uuid": "^8.3.0" + }, + "devDependencies": { + "@types/cors": "^2.8.7", + "@types/bcryptjs": "^2.4.2", + "@types/express": "^4.17.8", + "@types/jsonwebtoken": "^8.5.0", + "@types/knex": "^0.16.1", + "@types/node": "^14.11.2", + "@types/uuid": "^8.3.0", + "ts-node-dev": "^1.0.0-pre.63", + "typescript": "^4.0.3" + } +} diff --git a/Semana21/Projeto/Backend/src/Business/collectionBusiness.ts b/Semana21/Projeto/Backend/src/Business/collectionBusiness.ts new file mode 100644 index 0000000000..92a281d638 --- /dev/null +++ b/Semana21/Projeto/Backend/src/Business/collectionBusiness.ts @@ -0,0 +1,49 @@ +import { CollectionDatabase } from "../Data/CollectionDatabase"; +import { CollectionInput, CollectionRelationInput } from "../Entities/Collection"; +import { InvalidInputError } from "../Error/InvalidInputError"; +import { LoginAgain } from "../Error/LoginAgain"; +import { IdGenerator } from "../Services/IdGenerator"; +import { TokenManager } from "../Services/TokenManager"; + +export class CollectionBusiness { + constructor( + private collectionDatabase: CollectionDatabase, + private idGenerator: IdGenerator, + private authenticator: TokenManager + ) { } + + async insertCollection(collection: CollectionInput): Promise { + if ( + !collection.title || + !collection.subtitle + ) { + throw new InvalidInputError("Invalid input to insert Collection") + } + + if(!collection.token){ + throw new LoginAgain("Token Invalid") + } + + const id = await this.idGenerator.generateId() + + const tokenInfo = await this.authenticator.getTokenData(collection.token) + + + await this.collectionDatabase.insertCollection({ + id, + title: collection.title, + subtitle: collection.subtitle, + author: tokenInfo.id + }) + } + + async insertCollectionRelation(collectionRelation: CollectionRelationInput): Promise { + if(!collectionRelation.id_collection || !collectionRelation.id_image){ + throw new InvalidInputError("Invalid input to insert Collection Relation") + } + + await this.collectionDatabase.insertCollectionRelation(collectionRelation) + } + + +} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/src/Business/imageBusiness.ts b/Semana21/Projeto/Backend/src/Business/imageBusiness.ts new file mode 100644 index 0000000000..d3fc4b94db --- /dev/null +++ b/Semana21/Projeto/Backend/src/Business/imageBusiness.ts @@ -0,0 +1,66 @@ +import { ImageDatabase } from "../Data/imageDatabase"; +import { UserDatabase } from "../Data/userDatabase"; +import { ImageToBusiness, ImageTokenId } from "../Entities/Image"; +import { AuthenticationData, UserComplete, UserInput } from "../Entities/User"; +import { InvalidInputError } from "../Error/InvalidInputError"; +import { HashManager } from "../Services/HashManager"; +import { IdGenerator } from "../Services/IdGenerator"; +import { TokenManager } from "../Services/TokenManager"; + +export class ImageBusiness { + constructor( + private imageDatabase: ImageDatabase, + private idGenerator: IdGenerator, + private hashManager: HashManager, + private authenticator: TokenManager + ) { } + + async insertImage(image: ImageToBusiness) { + if (!image.subtitle || !image.URL) { + throw new InvalidInputError("Invalid input to insert Image") + } + + if (!image.token) { + throw new InvalidInputError("Please Login Again") + } + + const id = await this.idGenerator.generateId() + + const tokenInfo = await this.authenticator.getTokenData(image.token) + + + + await this.imageDatabase.insertImage({ id, subtitle: image.subtitle, URL: image.URL, fk_user: tokenInfo.id }) + + + + } + async getImageById(image: ImageTokenId) { + if (!image.token) { + throw new InvalidInputError("Please Login Again") + } + + const tokenInfo = await this.authenticator.getTokenData(image.token) + + + if (image.id === "" || !image.id) { + const result = await this.imageDatabase.getImagesOfUser(tokenInfo.id) + + return result + } + else { + const result = await this.imageDatabase.getImageById(image.id) + + return result + } + + + } + + + + + + + +} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/src/Business/userBusiness.ts b/Semana21/Projeto/Backend/src/Business/userBusiness.ts new file mode 100644 index 0000000000..e393819165 --- /dev/null +++ b/Semana21/Projeto/Backend/src/Business/userBusiness.ts @@ -0,0 +1,54 @@ +import { UserDatabase } from "../Data/userDatabase"; +import { AuthenticationData, UserComplete, UserInput } from "../Entities/User"; +import { InvalidInputError } from "../Error/InvalidInputError"; +import { HashManager } from "../Services/HashManager"; +import { IdGenerator } from "../Services/IdGenerator"; +import { TokenManager } from "../Services/TokenManager"; + +export class UserBusiness { + constructor( + private userDatabase: UserDatabase, + private idGenerator: IdGenerator, + private hashManager: HashManager, + private authenticator: TokenManager + ){} + + async createUser(user: UserInput) { + if(!user.login || !user.password){ + throw new InvalidInputError("Invalid input to signUp") + } + + const id = this.idGenerator.generateId() + + const hashPassword = await this.hashManager.hash(user.password) + + const inputData: UserComplete = {id, login: user.login, password: hashPassword} + + await this.userDatabase.createUser(inputData) + + const accessToken = this.authenticator.generateToken({id, login: user.login}) + + return accessToken + } + + async loginUser(user: UserInput){ + if(!user.login || !user.password){ + throw new InvalidInputError("Please certify all fields are complete") + } + + const userInfo = await this.userDatabase.login(user) + + const verification = await this.hashManager.compare(user.password, userInfo.password) + + if(!verification){ + throw new Error("Login or Password Incorrect") + } + + else{ + const accessToken = this.authenticator.generateToken({id: userInfo.id, login: userInfo.login}) + return accessToken + } + + } + +} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/src/Constants/TableNames.ts b/Semana21/Projeto/Backend/src/Constants/TableNames.ts new file mode 100644 index 0000000000..ace53b8cc3 --- /dev/null +++ b/Semana21/Projeto/Backend/src/Constants/TableNames.ts @@ -0,0 +1,3 @@ +export const UserTable = "Users_fullstack" + +export const ImageTable = "Images_fullstack" \ No newline at end of file diff --git a/Semana21/Projeto/Backend/src/Controller/collectionController.ts b/Semana21/Projeto/Backend/src/Controller/collectionController.ts new file mode 100644 index 0000000000..2a788890d5 --- /dev/null +++ b/Semana21/Projeto/Backend/src/Controller/collectionController.ts @@ -0,0 +1,59 @@ +import { Request, Response } from 'express' +import { triggerAsyncId } from 'node:async_hooks'; +import { CollectionBusiness } from '../Business/collectionBusiness'; +import { BaseDatabase } from '../Data/BaseDatabase'; +import { CollectionDatabase } from '../Data/CollectionDatabase'; +import { CollectionInput, CollectionRelationInput } from '../Entities/Collection'; +import { IdGenerator } from '../Services/IdGenerator'; +import { TokenManager } from '../Services/TokenManager'; + + +export class CollectionController { + + async insertCollection(req: Request, res: Response) { + try { + const input: CollectionInput = { + title: req.body.title, + subtitle: req.body.subtitle, + token: req.params.token + } + + const collectionBusiness = new CollectionBusiness( + new CollectionDatabase, + new IdGenerator, + new TokenManager + ) + + await collectionBusiness.insertCollection(input) + + res.status(201).send("Inserted Successfully") + } catch (error) { + res.status(400).send({ error: error.message }); + } + + await BaseDatabase.destroyConnection(); + } + + async insertCollectionRelation(req: Request, res: Response) { + try { + const input: CollectionRelationInput = { + id_collection: req.body.id_collection, + id_image: req.body.id_image + } + + const collectionBusiness = new CollectionBusiness( + new CollectionDatabase, + new IdGenerator, + new TokenManager + ) + + await collectionBusiness.insertCollectionRelation(input) + + res.status(201).send("Inserted Relation Successfully") + } catch (error) { + res.status(400).send({ error: error.message }); + } + await BaseDatabase.destroyConnection(); + } + +} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/src/Controller/imageController.ts b/Semana21/Projeto/Backend/src/Controller/imageController.ts new file mode 100644 index 0000000000..b6f32b3f57 --- /dev/null +++ b/Semana21/Projeto/Backend/src/Controller/imageController.ts @@ -0,0 +1,71 @@ +import { BaseDatabase } from "../Data/BaseDatabase"; +import { Request, Response } from 'express' +import { ImageInput, ImageTokenId } from "../Entities/Image"; +import { ImageBusiness } from "../Business/imageBusiness"; +import { ImageDatabase } from "../Data/imageDatabase"; +import { IdGenerator } from "../Services/IdGenerator"; +import { HashManager } from "../Services/HashManager"; +import { TokenManager } from "../Services/TokenManager"; + +export class ImageController { + + async insert(req: Request, res: Response) { + try { + const input: ImageInput = { + subtitle: req.body.subtitle, + URL: req.body.URL, + } + + const token = req.params.token + + const imageBusiness = new ImageBusiness( + new ImageDatabase, + new IdGenerator, + new HashManager, + new TokenManager + ); + + // console.log("subtitle", input.subtitle) + // console.log("URL", input.URL) + + await imageBusiness.insertImage({ token: token, subtitle: input.subtitle, URL: input.URL }) + + res.status(201).send("Inserted Successfully") + + await BaseDatabase.destroyConnection(); + } catch (error) { + res.status(400).send({ error: error.message }); + } + + } + + async getImageById(req: Request, res: Response) { + try { + + const input: ImageTokenId = { + token: req.params.token, + id: req.params.id + } + + const imageBusiness = new ImageBusiness( + new ImageDatabase, + new IdGenerator, + new HashManager, + new TokenManager + ); + + const result = await imageBusiness.getImageById(input) + + res.status(200).send(result) + + await BaseDatabase.destroyConnection(); + } catch (error) { + res.status(400).send({ error: error.message }); + } + + } + + + + +} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/src/Controller/userController.ts b/Semana21/Projeto/Backend/src/Controller/userController.ts new file mode 100644 index 0000000000..0d10bbbc2f --- /dev/null +++ b/Semana21/Projeto/Backend/src/Controller/userController.ts @@ -0,0 +1,63 @@ +import { Request, Response } from "express"; +import { UserBusiness } from "../Business/userBusiness"; +import { BaseDatabase } from "../Data/BaseDatabase"; +import { UserDatabase } from "../Data/userDatabase"; +import { UserInput } from "../Entities/User"; +import { HashManager } from "../Services/HashManager"; +import { IdGenerator } from "../Services/IdGenerator"; +import { TokenManager } from "../Services/TokenManager"; + + +export class UserController { + async signup(req: Request, res: Response) { + try { + const input: UserInput = { + login: req.body.login, + password: req.body.password, + } + + const userBusiness = new UserBusiness( + new UserDatabase, + new IdGenerator, + new HashManager, + new TokenManager + ); + + const token = await userBusiness.createUser(input) + + res.status(200).send({token}) + + } catch (error) { + res.status(400).send({ error: error.message }); + } + await BaseDatabase.destroyConnection(); + } + + async login(req: Request, res: Response) { + try { + const input: UserInput = { + login: req.body.login, + password: req.body.password + } + + const userBusiness = new UserBusiness( + new UserDatabase, + new IdGenerator, + new HashManager, + new TokenManager + ); + + const token = await userBusiness.loginUser(input) + + res.status(200).send({token}) + + } catch (error) { + res.status(400).send({ error: error.message }); + } + + await BaseDatabase.destroyConnection(); + } + + + +} diff --git a/Semana21/Projeto/Backend/src/Data/BaseDatabase.ts b/Semana21/Projeto/Backend/src/Data/BaseDatabase.ts new file mode 100644 index 0000000000..ab339d7e8d --- /dev/null +++ b/Semana21/Projeto/Backend/src/Data/BaseDatabase.ts @@ -0,0 +1,40 @@ +import knex from "knex"; +import Knex from "knex"; + + +export abstract class BaseDatabase { + + private static connection: Knex | null = null; + + protected tableNames = { + users: "Users_fullstack", + images: "Images_fullstack", + collections: "Collection_fullstack", + collectionRelations: "Relation_Collection_Image" + + } + + protected getConnection(): Knex{ + if(!BaseDatabase.connection){ + BaseDatabase.connection = knex({ + client: "mysql", + connection: { + host: process.env.DB_HOST, + port: 3306, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_SCHEMA, + }, + }); + } + + return BaseDatabase.connection; + } + + public static async destroyConnection(): Promise{ + if(BaseDatabase.connection){ + await BaseDatabase.connection.destroy(); + BaseDatabase.connection = null; + } + } +} diff --git a/Semana21/Projeto/Backend/src/Data/CollectionDatabase.ts b/Semana21/Projeto/Backend/src/Data/CollectionDatabase.ts new file mode 100644 index 0000000000..d9f7bb5cf5 --- /dev/null +++ b/Semana21/Projeto/Backend/src/Data/CollectionDatabase.ts @@ -0,0 +1,28 @@ +import { CollectionInputComplete, CollectionRelationInput } from "../Entities/Collection"; +import { BaseDatabase } from "./BaseDatabase"; + +export class CollectionDatabase extends BaseDatabase { + public async insertCollection(collection: CollectionInputComplete): Promise { + try { + await this.getConnection().raw(` + INSERT INTO ${this.tableNames.collections} (id, title, subtitle, author) + VALUES ("${collection.id}", "${collection.title}", "${collection.subtitle}", "${collection.author}"); + `) + console.log("Insertion Completed!") + } catch (error) { + throw new Error(error.sqlMessage || error.message) + } + } + + public async insertCollectionRelation(collectionRelation: CollectionRelationInput): Promise{ + try { + await this.getConnection().raw(` + INSERT INTO ${this.tableNames.collectionRelations} (id_collection, id_image) + VALUES ("${collectionRelation.id_collection}", "${collectionRelation.id_image}"); + `) + console.log("Insertion Completed!") + } catch (error) { + throw new Error(error.sqlMessage || error.message) + } + } +} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/src/Data/imageDatabase.ts b/Semana21/Projeto/Backend/src/Data/imageDatabase.ts new file mode 100644 index 0000000000..267185da66 --- /dev/null +++ b/Semana21/Projeto/Backend/src/Data/imageDatabase.ts @@ -0,0 +1,48 @@ +import { UserComplete, UserInput } from "../Entities/User"; +import { BaseDatabase } from "./BaseDatabase"; +import { ImageTable, UserTable } from "../Constants/TableNames" +import { ImageComplete } from "../Entities/Image"; + +export class ImageDatabase extends BaseDatabase { + + public async insertImage(image: ImageComplete): Promise { + try { + await this.getConnection().raw(` + INSERT INTO ${this.tableNames.images} (id, subtitle, URL, fk_user) + VALUES ("${image.id}", "${image.subtitle}", "${image.URL}", "${image.fk_user}"); + `) + console.log("Insertion Completed!") + } catch (error) { + throw new Error(error.sqlMessage || error.message) + } + } + + public async getImagesOfUser(id: string): Promise { + try { + const result = await this.getConnection().raw(` + SELECT * FROM ${this.tableNames.images} + WHERE ( fk_user = "${id}"); + `) + + return result[0] + } catch (error) { + throw new Error(error.sqlMessage || error.message) + } + } + + public async getImageById(id: string): Promise{ + try { + const result = await this.getConnection().raw(` + SELECT * FROM ${this.tableNames.images} + WHERE ( id = "${id}"); + `) + + return result[0] + } catch (error) { + throw new Error(error.sqlMessage || error.message) + } + } + + + +} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/src/Data/userDatabase.ts b/Semana21/Projeto/Backend/src/Data/userDatabase.ts new file mode 100644 index 0000000000..f69c67f296 --- /dev/null +++ b/Semana21/Projeto/Backend/src/Data/userDatabase.ts @@ -0,0 +1,41 @@ +import { UserComplete, UserInput } from "../Entities/User"; +import { BaseDatabase } from "./BaseDatabase"; +import {UserTable, ImageTable } from "../Constants/TableNames" + +export class UserDatabase extends BaseDatabase { + + public async createUser(user: UserComplete): Promise { + try { + await this.getConnection().raw(` + INSERT INTO ${this.tableNames.users} (id, login, password) + VALUES ("${user.id}", "${user.login}", "${user.password}"); + `) + console.log("Insertion Completed!") + } catch (error) { + throw new Error(error.sqlMessage || error.message) + } + } + + public async login(user: UserInput): Promise{ + + try{ + + const result = await this.getConnection().raw(` + SELECT id, password FROM ${this.tableNames.users} + WHERE (login LIKE "${user.login}") + `) + // console.log(result) + if(!result[0][0]){ + throw new Error("Login or Password Incorrect") + } + return ({id: result[0][0].id, password: result[0][0].password}) + + } catch(error){ + throw new Error(error.sqlMessage || error.message) + } + + + } + + +} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/src/Entities/Collection.ts b/Semana21/Projeto/Backend/src/Entities/Collection.ts new file mode 100644 index 0000000000..cc7ca77305 --- /dev/null +++ b/Semana21/Projeto/Backend/src/Entities/Collection.ts @@ -0,0 +1,17 @@ +export type CollectionInput = { + title: string, + subtitle: string, + token: string +} + +export type CollectionInputComplete = { + id: string, + title: string, + subtitle: string, + author: string, +} + +export type CollectionRelationInput = { + id_collection: string, + id_image: string +} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/src/Entities/Image.ts b/Semana21/Projeto/Backend/src/Entities/Image.ts new file mode 100644 index 0000000000..7eaaf43855 --- /dev/null +++ b/Semana21/Projeto/Backend/src/Entities/Image.ts @@ -0,0 +1,23 @@ +export type ImageInput = { + subtitle: string, + URL: string +} + +export type ImageToBusiness = { + token: string, + subtitle:string, + URL: string + +} + +export type ImageComplete = { + id: string, + subtitle:string, + URL: string, + fk_user: string +} + +export type ImageTokenId = { + token: string, + id: string +} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/src/Entities/User.ts b/Semana21/Projeto/Backend/src/Entities/User.ts new file mode 100644 index 0000000000..1342a5b8df --- /dev/null +++ b/Semana21/Projeto/Backend/src/Entities/User.ts @@ -0,0 +1,15 @@ +export type AuthenticationData = { + id: string, + login: string +} + +export type UserInput = { + login: string, + password: string +} + +export type UserComplete = { + id: string, + login: string, + password: string +} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/src/Error/BaseError.ts b/Semana21/Projeto/Backend/src/Error/BaseError.ts new file mode 100644 index 0000000000..d22100122a --- /dev/null +++ b/Semana21/Projeto/Backend/src/Error/BaseError.ts @@ -0,0 +1,6 @@ +export abstract class BaseError extends Error { + constructor(message: string, public code: number) { + super(message); + } + } + \ No newline at end of file diff --git a/Semana21/Projeto/Backend/src/Error/InvalidInputError.ts b/Semana21/Projeto/Backend/src/Error/InvalidInputError.ts new file mode 100644 index 0000000000..7e190674af --- /dev/null +++ b/Semana21/Projeto/Backend/src/Error/InvalidInputError.ts @@ -0,0 +1,7 @@ +import { BaseError } from "./BaseError"; + +export class InvalidInputError extends BaseError { + constructor(message: string) { + super(message, 417) + } +} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/src/Error/LoginAgain.ts b/Semana21/Projeto/Backend/src/Error/LoginAgain.ts new file mode 100644 index 0000000000..f8baaf107a --- /dev/null +++ b/Semana21/Projeto/Backend/src/Error/LoginAgain.ts @@ -0,0 +1,7 @@ +import { BaseError } from "./BaseError"; + +export class LoginAgain extends BaseError { + constructor(message: string) { + super(message, 401) + } +} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/src/Routes/collectionRouter.ts b/Semana21/Projeto/Backend/src/Routes/collectionRouter.ts new file mode 100644 index 0000000000..95e139da06 --- /dev/null +++ b/Semana21/Projeto/Backend/src/Routes/collectionRouter.ts @@ -0,0 +1,12 @@ +import express from "express"; +import { CollectionController } from "../Controller/collectionController"; + + + + +export const collectionRouter = express.Router(); + +const collectionController = new CollectionController(); + +collectionRouter.put("/insert/:token", collectionController.insertCollection) +collectionRouter.put("/insert/relation/:token", collectionController.insertCollectionRelation) \ No newline at end of file diff --git a/Semana21/Projeto/Backend/src/Routes/imageRouter.ts b/Semana21/Projeto/Backend/src/Routes/imageRouter.ts new file mode 100644 index 0000000000..1d329bc90f --- /dev/null +++ b/Semana21/Projeto/Backend/src/Routes/imageRouter.ts @@ -0,0 +1,10 @@ +import express from "express"; +import { ImageController } from "../Controller/imageController"; + +export const imageRouter = express.Router(); + +const imageController = new ImageController(); + +imageRouter.post("/insert/:token", imageController.insert) +imageRouter.get("/:token/:id", imageController.getImageById) +imageRouter.get("/:token/", imageController.getImageById) diff --git a/Semana21/Projeto/Backend/src/Routes/userRouter.ts b/Semana21/Projeto/Backend/src/Routes/userRouter.ts new file mode 100644 index 0000000000..44f86bbb2f --- /dev/null +++ b/Semana21/Projeto/Backend/src/Routes/userRouter.ts @@ -0,0 +1,9 @@ +import express from "express"; +import { UserController } from "../Controller/userController"; + +export const userRouter = express.Router(); + +const userController = new UserController(); + +userRouter.post("/signup", userController.signup) +userRouter.post("/login", userController.login) \ No newline at end of file diff --git a/Semana21/Projeto/Backend/src/Services/HashManager.ts b/Semana21/Projeto/Backend/src/Services/HashManager.ts new file mode 100644 index 0000000000..de49326d6d --- /dev/null +++ b/Semana21/Projeto/Backend/src/Services/HashManager.ts @@ -0,0 +1,17 @@ +import * as bcrypt from "bcryptjs" + +export class HashManager { + hash = async ( + plainText: string + ): Promise => { + const rounds = Number(process.env.BCRYPT_COST); + const salt = await bcrypt.genSalt(rounds); + return bcrypt.hash(plainText, salt) + } + + compare = async ( + plainText: string, cypherText: string + ): Promise => { + return bcrypt.compare(plainText, cypherText) + } +} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/src/Services/IdGenerator.ts b/Semana21/Projeto/Backend/src/Services/IdGenerator.ts new file mode 100644 index 0000000000..261132eaeb --- /dev/null +++ b/Semana21/Projeto/Backend/src/Services/IdGenerator.ts @@ -0,0 +1,5 @@ +import { v4 } from "uuid"; + +export class IdGenerator { + generateId = (): string => v4() +} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/src/Services/TokenManager.ts b/Semana21/Projeto/Backend/src/Services/TokenManager.ts new file mode 100644 index 0000000000..7c20fd1a4a --- /dev/null +++ b/Semana21/Projeto/Backend/src/Services/TokenManager.ts @@ -0,0 +1,29 @@ +import { AuthenticationData } from "../Entities/User" +import * as jwt from "jsonwebtoken"; + +export class TokenManager { + + generateToken( + payload: AuthenticationData + ): string { + return jwt.sign( + payload, + process.env.JWT_KEY as string, + { + expiresIn: process.env.JWT_EXPIRES_IN + } + ) + } + + getTokenData( + token: string + ): AuthenticationData { + const result: any = jwt.verify( + token, + process.env.JWT_KEY as string + ) + + return { id: result.id, login: result.login } + } + +} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/src/Services/connection.ts b/Semana21/Projeto/Backend/src/Services/connection.ts new file mode 100644 index 0000000000..318e9ec47d --- /dev/null +++ b/Semana21/Projeto/Backend/src/Services/connection.ts @@ -0,0 +1,19 @@ +import express, { Express} from "express" +import cors from "cors" +import knex from "knex" +import dotenv from "dotenv" +import Knex from "knex" + + +export const connection: Knex = knex({ + client: "mysql", + connection: { + host: process.env.DB_HOST, + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + database: process.env.DB_SCHEMA, + port: 3306, + multipleStatements: true + } + }) + diff --git a/Semana21/Projeto/Backend/src/index.ts b/Semana21/Projeto/Backend/src/index.ts new file mode 100644 index 0000000000..7092c53441 --- /dev/null +++ b/Semana21/Projeto/Backend/src/index.ts @@ -0,0 +1,22 @@ +import express, { Express, Request, Response } from "express" +import cors from "cors" +import knex from "knex" +import dotenv from "dotenv" +import Knex from "knex" +import { userRouter } from "./Routes/userRouter" +import { imageRouter } from "./Routes/imageRouter" +import { collectionRouter } from "./Routes/collectionRouter" + +dotenv.config() +const app: Express = express() +app.use(express.json()) +app.use(cors()) + +app.listen(3003, () => { + console.log("Server running on port 3003") +}) + + +app.use("/user", userRouter); +app.use("/image", imageRouter); +app.use("/collection", collectionRouter); \ No newline at end of file diff --git a/Semana21/Projeto/Backend/src/migration.ts b/Semana21/Projeto/Backend/src/migration.ts new file mode 100644 index 0000000000..2eb9caa108 --- /dev/null +++ b/Semana21/Projeto/Backend/src/migration.ts @@ -0,0 +1,35 @@ +(` +SELECT * FROM Users_fullstack; +CREATE TABLE IF NOT EXISTS Users_fullstack ( + id VARCHAR(255) PRIMARY KEY, + login VARCHAR(255) NOT NULL, + password VARCHAR(255) NOT NULL +); + +SELECT * FROM Images_fullstack; +CREATE TABLE IF NOT EXISTS Images_fullstack ( + id VARCHAR(255) PRIMARY KEY, + subtitle VARCHAR(255) NOT NULL, + URL VARCHAR(255) NOT NULL, + fk_user VARCHAR(255) NOT NULL, + FOREIGN KEY (fk_user) REFERENCES Users_fullstack(id) +); + +SELECT * FROM Collection_fullstack; +CREATE TABLE IF NOT EXISTS Collection_fullstack ( +id VARCHAR(255) PRIMARY KEY NOT NULL, +title TEXT NOT NULL, +subtitle TEXT, +author VARCHAR(255) NOT NULL, +foreign key (author) REFERENCES Users_fullstack(id) +); + +SELECT * FROM Relation_Collection_Image; +CREATE TABLE IF NOT EXISTS Relation_Collection_Image( +id_collection VARCHAR(255) NOT NULL, +id_image VARCHAR(255) NOT NULL, +FOREIGN KEY (id_collection) REFERENCES Collection_fullstack(id), +FOREIGN KEY (id_image) REFERENCES Images_fullstack(id) +); + +`) \ No newline at end of file diff --git a/Semana21/Projeto/Backend/tsconfig.json b/Semana21/Projeto/Backend/tsconfig.json new file mode 100644 index 0000000000..51fa0c012e --- /dev/null +++ b/Semana21/Projeto/Backend/tsconfig.json @@ -0,0 +1,69 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Basic Options */ + // "incremental": true, /* Enable incremental compilation */ + "target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ + "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ + // "lib": [], /* Specify library files to be included in the compilation. */ + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + // "declaration": true, /* Generates corresponding '.d.ts' file. */ + // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + "outDir": "./build", /* Redirect output structure to the directory. */ + "rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true, /* Enable all strict type-checking options. */ + "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + + /* Module Resolution Options */ + // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + + /* Advanced Options */ + "skipLibCheck": true, /* Skip type checking of declaration files. */ + "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ + } +} From 58a5f8c45de8c4bbfc601aa9984cffed46cd385a Mon Sep 17 00:00:00 2001 From: DouglasFlorido Date: Mon, 17 May 2021 18:46:26 -0300 Subject: [PATCH 2/2] get all images done and tested --- Semana21/Projeto/Backend/.rest | 6 +++- .../Backend/build/Business/imageBusiness.js | 9 ++++++ .../build/Business/imageBusiness.js.map | 2 +- .../build/Controller/imageController.js | 15 ++++++++- .../build/Controller/imageController.js.map | 2 +- .../Backend/build/Data/imageDatabase.js | 14 ++++++++ .../Backend/build/Data/imageDatabase.js.map | 2 +- .../Backend/build/Routes/imageRouter.js | 5 +-- .../Backend/build/Routes/imageRouter.js.map | 2 +- Semana21/Projeto/Backend/build/index.js.map | 2 +- .../Backend/src/Business/imageBusiness.ts | 26 ++++++++++----- .../Backend/src/Controller/imageController.ts | 32 ++++++++++++++++--- .../Projeto/Backend/src/Data/imageDatabase.ts | 13 ++++++++ .../Projeto/Backend/src/Entities/Image.ts | 4 +++ .../Projeto/Backend/src/Routes/imageRouter.ts | 7 ++-- Semana21/Projeto/Backend/src/index.ts | 1 - 16 files changed, 118 insertions(+), 24 deletions(-) diff --git a/Semana21/Projeto/Backend/.rest b/Semana21/Projeto/Backend/.rest index 6c3a2fd2c9..893a15d05d 100644 --- a/Semana21/Projeto/Backend/.rest +++ b/Semana21/Projeto/Backend/.rest @@ -48,4 +48,8 @@ Content-Type: application/json { "id_collection": "36039db1-2674-476f-8525-2219f5cb5fe4", "id_image": "3b40fd34-c820-4d77-b6aa-10d48b4e62c9" -} \ No newline at end of file +} + +### Get All Images +GET http://localhost:3003/image/all/{{Login.response.body.token}} +Content-Type: application/json \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Business/imageBusiness.js b/Semana21/Projeto/Backend/build/Business/imageBusiness.js index 3b0e714e6a..fdbbbc3719 100644 --- a/Semana21/Projeto/Backend/build/Business/imageBusiness.js +++ b/Semana21/Projeto/Backend/build/Business/imageBusiness.js @@ -47,6 +47,15 @@ class ImageBusiness { } }); } + getAllImages(token) { + return __awaiter(this, void 0, void 0, function* () { + if (!token) { + throw new InvalidInputError_1.InvalidInputError("Please Login Again"); + } + const result = yield this.imageDatabase.getAllImages(); + return result; + }); + } } exports.ImageBusiness = ImageBusiness; //# sourceMappingURL=imageBusiness.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Business/imageBusiness.js.map b/Semana21/Projeto/Backend/build/Business/imageBusiness.js.map index 0437d90aed..353fea36ce 100644 --- a/Semana21/Projeto/Backend/build/Business/imageBusiness.js.map +++ b/Semana21/Projeto/Backend/build/Business/imageBusiness.js.map @@ -1 +1 @@ -{"version":3,"file":"imageBusiness.js","sourceRoot":"","sources":["../../src/Business/imageBusiness.ts"],"names":[],"mappings":";;;;;;;;;;;;AAIA,kEAA+D;AAK/D,MAAa,aAAa;IACtB,YACY,aAA4B,EAC5B,WAAwB,EACxB,WAAwB,EACxB,aAA2B;QAH3B,kBAAa,GAAb,aAAa,CAAe;QAC5B,gBAAW,GAAX,WAAW,CAAa;QACxB,gBAAW,GAAX,WAAW,CAAa;QACxB,kBAAa,GAAb,aAAa,CAAc;IACnC,CAAC;IAEC,WAAW,CAAC,KAAsB;;YACpC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;gBAC/B,MAAM,IAAI,qCAAiB,CAAC,+BAA+B,CAAC,CAAA;aAC/D;YAED,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;gBACd,MAAM,IAAI,qCAAiB,CAAC,oBAAoB,CAAC,CAAA;aACpD;YAED,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAA;YAE9C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAIpE,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAA;QAIjH,CAAC;KAAA;IACK,YAAY,CAAC,KAAmB;;YAClC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;gBACd,MAAM,IAAI,qCAAiB,CAAC,oBAAoB,CAAC,CAAA;aACpD;YAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAGpE,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE;gBAC9B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;gBAErE,OAAO,MAAM,CAAA;aAChB;iBACI;gBACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;gBAE9D,OAAO,MAAM,CAAA;aAChB;QAGL,CAAC;KAAA;CAQJ;AAxDD,sCAwDC"} \ No newline at end of file +{"version":3,"file":"imageBusiness.js","sourceRoot":"","sources":["../../src/Business/imageBusiness.ts"],"names":[],"mappings":";;;;;;;;;;;;AAIA,kEAA+D;AAK/D,MAAa,aAAa;IACtB,YACY,aAA4B,EAC5B,WAAwB,EACxB,WAAwB,EACxB,aAA2B;QAH3B,kBAAa,GAAb,aAAa,CAAe;QAC5B,gBAAW,GAAX,WAAW,CAAa;QACxB,gBAAW,GAAX,WAAW,CAAa;QACxB,kBAAa,GAAb,aAAa,CAAc;IACnC,CAAC;IAEC,WAAW,CAAC,KAAsB;;YACpC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;gBAC/B,MAAM,IAAI,qCAAiB,CAAC,+BAA+B,CAAC,CAAA;aAC/D;YAED,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;gBACd,MAAM,IAAI,qCAAiB,CAAC,oBAAoB,CAAC,CAAA;aACpD;YAED,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAA;YAE9C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAIpE,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAA;QAIjH,CAAC;KAAA;IACK,YAAY,CAAC,KAAmB;;YAClC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;gBACd,MAAM,IAAI,qCAAiB,CAAC,oBAAoB,CAAC,CAAA;aACpD;YAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAGpE,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE;gBAC9B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;gBAErE,OAAO,MAAM,CAAA;aAChB;iBACI;gBACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;gBAE9D,OAAO,MAAM,CAAA;aAChB;QAEL,CAAC;KAAA;IAEK,YAAY,CAAC,KAAa;;YAC5B,IAAI,CAAC,KAAK,EAAE;gBACR,MAAM,IAAI,qCAAiB,CAAC,oBAAoB,CAAC,CAAA;aACpD;YAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAA;YAEtD,OAAO,MAAM,CAAA;QAEjB,CAAC;KAAA;CAQJ;AAlED,sCAkEC"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Controller/imageController.js b/Semana21/Projeto/Backend/build/Controller/imageController.js index bfedb3e938..ceaddb30f0 100644 --- a/Semana21/Projeto/Backend/build/Controller/imageController.js +++ b/Semana21/Projeto/Backend/build/Controller/imageController.js @@ -35,7 +35,7 @@ class ImageController { } }); } - getImageById(req, res) { + getImageByUserOrImageId(req, res) { return __awaiter(this, void 0, void 0, function* () { try { const input = { @@ -52,6 +52,19 @@ class ImageController { } }); } + getAllImages(req, res) { + return __awaiter(this, void 0, void 0, function* () { + try { + const token = req.params.token; + const imageBusiness = new imageBusiness_1.ImageBusiness(new imageDatabase_1.ImageDatabase, new IdGenerator_1.IdGenerator, new HashManager_1.HashManager, new TokenManager_1.TokenManager); + const result = yield imageBusiness.getAllImages(token); + res.status(200).send(result); + } + catch (error) { + res.status(400).send({ error: error.message }); + } + }); + } } exports.ImageController = ImageController; //# sourceMappingURL=imageController.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Controller/imageController.js.map b/Semana21/Projeto/Backend/build/Controller/imageController.js.map index 75e5142a42..50562376e9 100644 --- a/Semana21/Projeto/Backend/build/Controller/imageController.js.map +++ b/Semana21/Projeto/Backend/build/Controller/imageController.js.map @@ -1 +1 @@ -{"version":3,"file":"imageController.js","sourceRoot":"","sources":["../../src/Controller/imageController.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,uDAAoD;AAGpD,6DAA0D;AAC1D,yDAAsD;AACtD,yDAAsD;AACtD,yDAAsD;AACtD,2DAAwD;AAExD,MAAa,eAAe;IAElB,MAAM,CAAC,GAAY,EAAE,GAAa;;YACpC,IAAI;gBACA,MAAM,KAAK,GAAe;oBACtB,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ;oBAC3B,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG;iBACpB,CAAA;gBAED,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAA;gBAE9B,MAAM,aAAa,GAAG,IAAI,6BAAa,CACnC,IAAI,6BAAa,EACjB,IAAI,yBAAW,EACf,IAAI,yBAAW,EACf,IAAI,2BAAY,CACnB,CAAC;gBAKF,MAAM,aAAa,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;gBAE3F,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;gBAE7C,MAAM,2BAAY,CAAC,iBAAiB,EAAE,CAAC;aAC1C;YAAC,OAAO,KAAK,EAAE;gBACZ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;aAClD;QAEL,CAAC;KAAA;IAEK,YAAY,CAAC,GAAY,EAAE,GAAa;;YAC1C,IAAI;gBAEA,MAAM,KAAK,GAAiB;oBACxB,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK;oBACvB,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE;iBACpB,CAAA;gBAED,MAAM,aAAa,GAAG,IAAI,6BAAa,CACnC,IAAI,6BAAa,EACjB,IAAI,yBAAW,EACf,IAAI,yBAAW,EACf,IAAI,2BAAY,CACnB,CAAC;gBAEF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;gBAEtD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBAE5B,MAAM,2BAAY,CAAC,iBAAiB,EAAE,CAAC;aAC1C;YAAC,OAAO,KAAK,EAAE;gBACZ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;aAClD;QAEL,CAAC;KAAA;CAKJ;AA7DD,0CA6DC"} \ No newline at end of file +{"version":3,"file":"imageController.js","sourceRoot":"","sources":["../../src/Controller/imageController.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,uDAAoD;AAGpD,6DAA0D;AAC1D,yDAAsD;AACtD,yDAAsD;AACtD,yDAAsD;AACtD,2DAAwD;AAExD,MAAa,eAAe;IAElB,MAAM,CAAC,GAAY,EAAE,GAAa;;YACpC,IAAI;gBACA,MAAM,KAAK,GAAe;oBACtB,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ;oBAC3B,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG;iBACpB,CAAA;gBAED,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAA;gBAE9B,MAAM,aAAa,GAAG,IAAI,6BAAa,CACnC,IAAI,6BAAa,EACjB,IAAI,yBAAW,EACf,IAAI,yBAAW,EACf,IAAI,2BAAY,CACnB,CAAC;gBAKF,MAAM,aAAa,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAA;gBAE3F,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;gBAE7C,MAAM,2BAAY,CAAC,iBAAiB,EAAE,CAAC;aAC1C;YAAC,OAAO,KAAK,EAAE;gBACZ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;aAClD;QAEL,CAAC;KAAA;IAEK,uBAAuB,CAAC,GAAY,EAAE,GAAa;;YACrD,IAAI;gBAEA,MAAM,KAAK,GAAiB;oBACxB,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK;oBACvB,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE;iBACpB,CAAA;gBAED,MAAM,aAAa,GAAG,IAAI,6BAAa,CACnC,IAAI,6BAAa,EACjB,IAAI,yBAAW,EACf,IAAI,yBAAW,EACf,IAAI,2BAAY,CACnB,CAAC;gBAEF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;gBAEtD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBAE5B,MAAM,2BAAY,CAAC,iBAAiB,EAAE,CAAC;aAC1C;YAAC,OAAO,KAAK,EAAE;gBACZ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;aAClD;QAEL,CAAC;KAAA;IAEK,YAAY,CAAC,GAAY,EAAE,GAAa;;YAE1C,IAAI;gBAEA,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAA;gBAE9B,MAAM,aAAa,GAAG,IAAI,6BAAa,CACnC,IAAI,6BAAa,EACjB,IAAI,yBAAW,EACf,IAAI,yBAAW,EACf,IAAI,2BAAY,CACnB,CAAC;gBAEF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;gBAEtD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;aAE/B;YAAC,OAAO,KAAK,EAAE;gBACZ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;aAClD;QAGL,CAAC;KAAA;CAKJ;AArFD,0CAqFC"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Data/imageDatabase.js b/Semana21/Projeto/Backend/build/Data/imageDatabase.js index e4f7bed57f..e317db1ccf 100644 --- a/Semana21/Projeto/Backend/build/Data/imageDatabase.js +++ b/Semana21/Projeto/Backend/build/Data/imageDatabase.js @@ -54,6 +54,20 @@ class ImageDatabase extends BaseDatabase_1.BaseDatabase { } }); } + getAllImages() { + return __awaiter(this, void 0, void 0, function* () { + try { + const result = yield this.getConnection().raw(` + Select * FROM ${this.tableNames.images}; + `); + console.log(result[0]); + return result[0]; + } + catch (error) { + throw new Error(error.sqlMessage || error.message); + } + }); + } } exports.ImageDatabase = ImageDatabase; //# sourceMappingURL=imageDatabase.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Data/imageDatabase.js.map b/Semana21/Projeto/Backend/build/Data/imageDatabase.js.map index 5b76ec2dfc..3c65afac0e 100644 --- a/Semana21/Projeto/Backend/build/Data/imageDatabase.js.map +++ b/Semana21/Projeto/Backend/build/Data/imageDatabase.js.map @@ -1 +1 @@ -{"version":3,"file":"imageDatabase.js","sourceRoot":"","sources":["../../src/Data/imageDatabase.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,iDAA8C;AAI9C,MAAa,aAAc,SAAQ,2BAAY;IAE9B,WAAW,CAAC,KAAoB;;YACzC,IAAI;gBACA,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC;8BACb,IAAI,CAAC,UAAU,CAAC,MAAM;2BACzB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC,QAAQ,OAAO,KAAK,CAAC,GAAG,OAAO,KAAK,CAAC,OAAO;iBAC3E,CAAC,CAAA;gBACN,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;aACtC;YAAC,OAAO,KAAK,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;aACrD;QACL,CAAC;KAAA;IAEY,eAAe,CAAC,EAAU;;YACnC,IAAI;gBACA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC;4BAC9B,IAAI,CAAC,UAAU,CAAC,MAAM;iCACjB,EAAE;aACtB,CAAC,CAAA;gBAEF,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;aACnB;YAAC,OAAO,KAAK,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;aACrD;QACL,CAAC;KAAA;IAEY,YAAY,CAAC,EAAU;;YAChC,IAAI;gBACA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC;4BAC9B,IAAI,CAAC,UAAU,CAAC,MAAM;4BACtB,EAAE;aACjB,CAAC,CAAA;gBAEF,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;aACnB;YAAC,OAAO,KAAK,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;aACrD;QACL,CAAC;KAAA;CAIJ;AA1CD,sCA0CC"} \ No newline at end of file +{"version":3,"file":"imageDatabase.js","sourceRoot":"","sources":["../../src/Data/imageDatabase.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,iDAA8C;AAI9C,MAAa,aAAc,SAAQ,2BAAY;IAE9B,WAAW,CAAC,KAAoB;;YACzC,IAAI;gBACA,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC;8BACb,IAAI,CAAC,UAAU,CAAC,MAAM;2BACzB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC,QAAQ,OAAO,KAAK,CAAC,GAAG,OAAO,KAAK,CAAC,OAAO;iBAC3E,CAAC,CAAA;gBACN,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;aACtC;YAAC,OAAO,KAAK,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;aACrD;QACL,CAAC;KAAA;IAEY,eAAe,CAAC,EAAU;;YACnC,IAAI;gBACA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC;4BAC9B,IAAI,CAAC,UAAU,CAAC,MAAM;iCACjB,EAAE;aACtB,CAAC,CAAA;gBAEF,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;aACnB;YAAC,OAAO,KAAK,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;aACrD;QACL,CAAC;KAAA;IAEY,YAAY,CAAC,EAAU;;YAChC,IAAI;gBACA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC;4BAC9B,IAAI,CAAC,UAAU,CAAC,MAAM;4BACtB,EAAE;aACjB,CAAC,CAAA;gBAEF,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;aACnB;YAAC,OAAO,KAAK,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;aACrD;QACL,CAAC;KAAA;IAEY,YAAY;;YACrB,IAAI;gBACA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC;4BAC9B,IAAI,CAAC,UAAU,CAAC,MAAM;aACrC,CAAC,CAAA;gBACF,OAAO,CAAC,GAAG,CAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;gBACvB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;aACnB;YAAC,OAAO,KAAK,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;aACrD;QAEL,CAAC;KAAA;CAIJ;AAvDD,sCAuDC"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Routes/imageRouter.js b/Semana21/Projeto/Backend/build/Routes/imageRouter.js index f63c5a6c7b..752e470132 100644 --- a/Semana21/Projeto/Backend/build/Routes/imageRouter.js +++ b/Semana21/Projeto/Backend/build/Routes/imageRouter.js @@ -9,6 +9,7 @@ const imageController_1 = require("../Controller/imageController"); exports.imageRouter = express_1.default.Router(); const imageController = new imageController_1.ImageController(); exports.imageRouter.post("/insert/:token", imageController.insert); -exports.imageRouter.get("/:token/:id", imageController.getImageById); -exports.imageRouter.get("/:token/", imageController.getImageById); +exports.imageRouter.get("/all/:token", imageController.getAllImages); +exports.imageRouter.get("/:token/:id", imageController.getImageByUserOrImageId); +exports.imageRouter.get("/:token/", imageController.getImageByUserOrImageId); //# sourceMappingURL=imageRouter.js.map \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/Routes/imageRouter.js.map b/Semana21/Projeto/Backend/build/Routes/imageRouter.js.map index 85a188ebbe..226a50b025 100644 --- a/Semana21/Projeto/Backend/build/Routes/imageRouter.js.map +++ b/Semana21/Projeto/Backend/build/Routes/imageRouter.js.map @@ -1 +1 @@ -{"version":3,"file":"imageRouter.js","sourceRoot":"","sources":["../../src/Routes/imageRouter.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA8B;AAC9B,mEAAgE;AAEnD,QAAA,WAAW,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAC;AAE5C,MAAM,eAAe,GAAG,IAAI,iCAAe,EAAE,CAAC;AAE9C,mBAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,eAAe,CAAC,MAAM,CAAC,CAAA;AAC1D,mBAAW,CAAC,GAAG,CAAC,aAAa,EAAE,eAAe,CAAC,YAAY,CAAC,CAAA;AAC5D,mBAAW,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,CAAC,YAAY,CAAC,CAAA"} \ No newline at end of file +{"version":3,"file":"imageRouter.js","sourceRoot":"","sources":["../../src/Routes/imageRouter.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA8B;AAC9B,mEAAgE;AAEnD,QAAA,WAAW,GAAG,iBAAO,CAAC,MAAM,EAAE,CAAC;AAE5C,MAAM,eAAe,GAAG,IAAI,iCAAe,EAAE,CAAC;AAE9C,mBAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,eAAe,CAAC,MAAM,CAAC,CAAA;AAC1D,mBAAW,CAAC,GAAG,CAAC,aAAa,EAAE,eAAe,CAAC,YAAY,CAAC,CAAA;AAC5D,mBAAW,CAAC,GAAG,CAAC,aAAa,EAAE,eAAe,CAAC,uBAAuB,CAAC,CAAA;AACvE,mBAAW,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,CAAC,uBAAuB,CAAC,CAAA"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/build/index.js.map b/Semana21/Projeto/Backend/build/index.js.map index a5d13ec06e..0a59b6a9eb 100644 --- a/Semana21/Projeto/Backend/build/index.js.map +++ b/Semana21/Projeto/Backend/build/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,sDAA6D;AAC7D,gDAAuB;AAEvB,oDAA2B;AAE3B,oDAAgD;AAChD,sDAAkD;AAClD,gEAA4D;AAE5D,gBAAM,CAAC,MAAM,EAAE,CAAA;AACf,MAAM,GAAG,GAAY,iBAAO,EAAE,CAAA;AAC9B,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,IAAI,EAAE,CAAC,CAAA;AACvB,GAAG,CAAC,GAAG,CAAC,cAAI,EAAE,CAAC,CAAA;AAEf,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;IAClB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAA;AAC9C,CAAC,CAAC,CAAA;AAGF,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,uBAAU,CAAC,CAAC;AAC7B,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,yBAAW,CAAC,CAAC;AAC/B,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,mCAAgB,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,sDAA6D;AAC7D,gDAAuB;AAEvB,oDAA2B;AAE3B,oDAAgD;AAChD,sDAAkD;AAClD,gEAA4D;AAE5D,gBAAM,CAAC,MAAM,EAAE,CAAA;AACf,MAAM,GAAG,GAAY,iBAAO,EAAE,CAAA;AAC9B,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,IAAI,EAAE,CAAC,CAAA;AACvB,GAAG,CAAC,GAAG,CAAC,cAAI,EAAE,CAAC,CAAA;AAEf,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;IAClB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAA;AAC9C,CAAC,CAAC,CAAA;AAEF,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,uBAAU,CAAC,CAAC;AAC7B,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,yBAAW,CAAC,CAAC;AAC/B,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,mCAAgB,CAAC,CAAC"} \ No newline at end of file diff --git a/Semana21/Projeto/Backend/src/Business/imageBusiness.ts b/Semana21/Projeto/Backend/src/Business/imageBusiness.ts index d3fc4b94db..927930d610 100644 --- a/Semana21/Projeto/Backend/src/Business/imageBusiness.ts +++ b/Semana21/Projeto/Backend/src/Business/imageBusiness.ts @@ -1,6 +1,6 @@ import { ImageDatabase } from "../Data/imageDatabase"; import { UserDatabase } from "../Data/userDatabase"; -import { ImageToBusiness, ImageTokenId } from "../Entities/Image"; +import { basicToken, ImageToBusiness, ImageTokenId } from "../Entities/Image"; import { AuthenticationData, UserComplete, UserInput } from "../Entities/User"; import { InvalidInputError } from "../Error/InvalidInputError"; import { HashManager } from "../Services/HashManager"; @@ -35,29 +35,39 @@ export class ImageBusiness { } - async getImageById(image: ImageTokenId) { + async getImageById(image: ImageTokenId) { if (!image.token) { throw new InvalidInputError("Please Login Again") } const tokenInfo = await this.authenticator.getTokenData(image.token) - + if (image.id === "" || !image.id) { const result = await this.imageDatabase.getImagesOfUser(tokenInfo.id) - + return result } else { const result = await this.imageDatabase.getImageById(image.id) - - return result + + return result + } + + } + + async getAllImages(token: string) { + if (!token) { + throw new InvalidInputError("Please Login Again") } - + const result = await this.imageDatabase.getAllImages() + + return result + } - + diff --git a/Semana21/Projeto/Backend/src/Controller/imageController.ts b/Semana21/Projeto/Backend/src/Controller/imageController.ts index b6f32b3f57..ab1216acf3 100644 --- a/Semana21/Projeto/Backend/src/Controller/imageController.ts +++ b/Semana21/Projeto/Backend/src/Controller/imageController.ts @@ -1,6 +1,6 @@ import { BaseDatabase } from "../Data/BaseDatabase"; import { Request, Response } from 'express' -import { ImageInput, ImageTokenId } from "../Entities/Image"; +import { basicToken, ImageInput, ImageTokenId } from "../Entities/Image"; import { ImageBusiness } from "../Business/imageBusiness"; import { ImageDatabase } from "../Data/imageDatabase"; import { IdGenerator } from "../Services/IdGenerator"; @@ -39,7 +39,7 @@ export class ImageController { } - async getImageById(req: Request, res: Response) { + async getImageByUserOrImageId(req: Request, res: Response) { try { const input: ImageTokenId = { @@ -57,12 +57,36 @@ export class ImageController { const result = await imageBusiness.getImageById(input) res.status(200).send(result) - + await BaseDatabase.destroyConnection(); } catch (error) { res.status(400).send({ error: error.message }); } - + + } + + async getAllImages(req: Request, res: Response) { + + try { + + const token = req.params.token + + const imageBusiness = new ImageBusiness( + new ImageDatabase, + new IdGenerator, + new HashManager, + new TokenManager + ); + + const result = await imageBusiness.getAllImages(token) + + res.status(200).send(result) + + } catch (error) { + res.status(400).send({ error: error.message }); + } + + } diff --git a/Semana21/Projeto/Backend/src/Data/imageDatabase.ts b/Semana21/Projeto/Backend/src/Data/imageDatabase.ts index 267185da66..db36fea073 100644 --- a/Semana21/Projeto/Backend/src/Data/imageDatabase.ts +++ b/Semana21/Projeto/Backend/src/Data/imageDatabase.ts @@ -42,6 +42,19 @@ export class ImageDatabase extends BaseDatabase { throw new Error(error.sqlMessage || error.message) } } + + public async getAllImages(): Promise { + try { + const result = await this.getConnection().raw(` + Select * FROM ${this.tableNames.images}; + `) + console.log( result[0]) + return result[0] + } catch (error) { + throw new Error(error.sqlMessage || error.message) + } + + } diff --git a/Semana21/Projeto/Backend/src/Entities/Image.ts b/Semana21/Projeto/Backend/src/Entities/Image.ts index 7eaaf43855..80adcdb071 100644 --- a/Semana21/Projeto/Backend/src/Entities/Image.ts +++ b/Semana21/Projeto/Backend/src/Entities/Image.ts @@ -20,4 +20,8 @@ export type ImageComplete = { export type ImageTokenId = { token: string, id: string +} + +export type basicToken = { + token: string } \ No newline at end of file diff --git a/Semana21/Projeto/Backend/src/Routes/imageRouter.ts b/Semana21/Projeto/Backend/src/Routes/imageRouter.ts index 1d329bc90f..037cee6baf 100644 --- a/Semana21/Projeto/Backend/src/Routes/imageRouter.ts +++ b/Semana21/Projeto/Backend/src/Routes/imageRouter.ts @@ -6,5 +6,8 @@ export const imageRouter = express.Router(); const imageController = new ImageController(); imageRouter.post("/insert/:token", imageController.insert) -imageRouter.get("/:token/:id", imageController.getImageById) -imageRouter.get("/:token/", imageController.getImageById) +imageRouter.get("/all/:token", imageController.getAllImages) +imageRouter.get("/:token/:id", imageController.getImageByUserOrImageId) +imageRouter.get("/:token/", imageController.getImageByUserOrImageId) + + diff --git a/Semana21/Projeto/Backend/src/index.ts b/Semana21/Projeto/Backend/src/index.ts index 7092c53441..416bb88541 100644 --- a/Semana21/Projeto/Backend/src/index.ts +++ b/Semana21/Projeto/Backend/src/index.ts @@ -16,7 +16,6 @@ app.listen(3003, () => { console.log("Server running on port 3003") }) - app.use("/user", userRouter); app.use("/image", imageRouter); app.use("/collection", collectionRouter); \ No newline at end of file