-
-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
42 changed files
with
1,442 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
import { Request, Response } from 'express'; | ||
declare class Al { | ||
index: (req: Request, res: Response) => Promise<Response<any, Record<string, any>> | undefined>; | ||
scrap: (placa: string, renavam: string) => Promise<{ | ||
placa: string; | ||
renavam: string; | ||
multas: never[]; | ||
message: any; | ||
} | { | ||
multas: any; | ||
placa: string; | ||
renavam: string; | ||
message: string; | ||
}>; | ||
checkErros: (browser: any, page: any, placa: string, renavam: string) => Promise<false | { | ||
placa: string; | ||
renavam: string; | ||
multas: never[]; | ||
message: any; | ||
}>; | ||
} | ||
export declare const al: Al; | ||
export {}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
"use strict"; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.al = void 0; | ||
const utils_1 = __importDefault(require("../utils/utils")); | ||
const validation_1 = __importDefault(require("../validations/validation")); | ||
const puppeteer_1 = __importDefault(require("puppeteer")); | ||
class Al { | ||
constructor() { | ||
this.index = async (req, res) => { | ||
const placa = req.body.placa; | ||
const renavam = req.body.renavam; | ||
const errors = validation_1.default.generic(placa, renavam); | ||
if (errors) { | ||
return res.status(400).json(errors); | ||
} | ||
const multas = await this.scrap(placa, renavam); | ||
res.status(200).json(multas); | ||
}; | ||
this.scrap = async (placa, renavam) => { | ||
const browser = await puppeteer_1.default.launch({ | ||
headless: process.env.NODE_ENV === 'production' ? 'new' : false, | ||
slowMo: process.env.NODE_ENV === 'production' ? 0 : 50, | ||
timeout: 5000, | ||
args: [ | ||
'--no-sandbox', | ||
'--disable-setuid-sandbox', | ||
'--disable-dev-shm-usage', | ||
'--disable-accelerated-2d-canvas', | ||
] | ||
}); | ||
const page = await browser.newPage(); | ||
await page.goto(`${process.env.AL_URL}`); | ||
const placaSelector = '#id_placa'; | ||
const renavamSelector = '#id_renavam'; | ||
const buttonsSelector = 'button[type="submit"]'; | ||
const inputPlaca = await page.$(placaSelector); | ||
const inputRenavam = await page.$(renavamSelector); | ||
await (inputPlaca === null || inputPlaca === void 0 ? void 0 : inputPlaca.type(placa)); | ||
await (inputRenavam === null || inputRenavam === void 0 ? void 0 : inputRenavam.type(renavam)); | ||
const buttons = await page.$$(buttonsSelector); | ||
const buttonSubmit = buttons[0]; | ||
await (buttonSubmit === null || buttonSubmit === void 0 ? void 0 : buttonSubmit.click()); | ||
const erros = await this.checkErros(browser, page, placa, renavam); | ||
if (erros) { | ||
return erros; | ||
} | ||
const multas = []; | ||
const uls = await page.$$('ul.list-group'); | ||
for (let ul of uls) { | ||
const lis = await page.$$('ul.list-group > li'); | ||
const data = {}; | ||
for (let li of lis) { | ||
const liHtml = await page.evaluate(li => li.innerHTML, li); | ||
const htmlContent = liHtml.split('<br>').map((item) => item.trim()); | ||
const indice = utils_1.default.removeAccents(htmlContent[0]) // Remover acentos | ||
.replace(/(<([^>]+)>)/gi, "") // Remover tags HTML | ||
.replace(/\n\t/g, "") // Remover quebras de linha e tabulações | ||
.trim() | ||
.toLowerCase() | ||
.replace(/ /g, '_'); // Substituir espaços por underscores | ||
const value = htmlContent[1]; | ||
data[indice] = value; | ||
} | ||
multas.push(data); | ||
} | ||
await browser.close(); | ||
return { multas: multas, placa: placa, renavam: renavam, message: '' }; | ||
}; | ||
this.checkErros = async (browser, page, placa, renavam) => { | ||
try { | ||
const divErrorSelector = '.error'; | ||
const divErrors = await page.waitForSelector(divErrorSelector, { timeout: 5000 }); | ||
const divErrorsHtml = await page.evaluate((divErrors) => divErrors.innerHTML, divErrors); | ||
const errosClear = divErrorsHtml.replace(/(<([^>]+)>)/gi, "").replace(/\n\t/g, "").trim(); | ||
await browser.close(); | ||
return { | ||
placa: placa, | ||
renavam: renavam, | ||
multas: [], | ||
message: errosClear | ||
}; | ||
} | ||
catch (e) { | ||
return false; | ||
} | ||
}; | ||
} | ||
} | ||
exports.al = new Al(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
import { Request, Response } from 'express'; | ||
declare class Am { | ||
index: (req: Request, res: Response) => Promise<Response<any, Record<string, any>> | undefined>; | ||
scrap: (placa: string, renavam: string) => Promise<{ | ||
placa: string; | ||
renavam: string; | ||
data: any; | ||
error?: undefined; | ||
} | { | ||
placa: string; | ||
renavam: string; | ||
error: any; | ||
data?: undefined; | ||
}>; | ||
} | ||
export declare const am: Am; | ||
export {}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
"use strict"; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.am = void 0; | ||
const utils_1 = __importDefault(require("../utils/utils")); | ||
const validation_1 = __importDefault(require("../validations/validation")); | ||
class Am { | ||
constructor() { | ||
this.index = async (req, res) => { | ||
const placa = req.body.placa; | ||
const renavam = req.body.renavam; | ||
const errors = validation_1.default.generic(placa, renavam); | ||
if (errors) { | ||
return res.status(400).json(errors); | ||
} | ||
const multas = await this.scrap(placa, renavam); | ||
res.status(200).json(multas); | ||
}; | ||
this.scrap = async (placa, renavam) => { | ||
try { | ||
const response = await utils_1.default.request(`${process.env.AM_URL}/?renavam=${renavam}`, 'GET', { | ||
'Accept-Encoding': 'gzip', | ||
'Host': 'www.detran.am.gov.br', | ||
'User-Agent': 'okhttp/3.12.12', | ||
'Accept': 'application/json' | ||
}, {}); | ||
const data = response.data; | ||
return { placa, renavam, data }; | ||
} | ||
catch (error) { | ||
return { placa, renavam, error: error.message }; | ||
} | ||
}; | ||
} | ||
} | ||
exports.am = new Am(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
import { Request, Response } from 'express'; | ||
declare class Br { | ||
index: (req: Request, res: Response) => Promise<Response<any, Record<string, any>> | undefined>; | ||
scrap: (placa: string, renavam: string) => Promise<any>; | ||
} | ||
export declare const br: Br; | ||
export {}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
"use strict"; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.br = void 0; | ||
const utils_1 = __importDefault(require("../utils/utils")); | ||
const validation_1 = __importDefault(require("../validations/validation")); | ||
class Br { | ||
constructor() { | ||
this.index = async (req, res) => { | ||
const placa = req.body.placa; | ||
const renavam = req.body.renavam; | ||
const errors = validation_1.default.generic(placa, renavam); | ||
if (errors) { | ||
return res.status(400).json(errors); | ||
} | ||
const multas = await this.scrap(placa, renavam); | ||
res.status(200).json(multas); | ||
}; | ||
this.scrap = async (placa, renavam) => { | ||
try { | ||
const payload = await utils_1.default.request(`https://api.detran.df.gov.br/app/vinculo-veiculo/area-publica/buscaVeiculo/${placa}/${renavam}?user_key=${process.env.BR_KEY}`, 'GET', { | ||
'Connection': 'Keep-Alive', | ||
'Accept': 'application/json, text/plain, */*', | ||
'Host': 'api.detran.df.gov.br', | ||
'User-Agent': 'okhttp/4.9.2', | ||
'Content-Type': 'application/json', | ||
'X-Application-Context': 'application:prod:8080', | ||
'X-OneAgent-JS-Injection': true, | ||
'X-XSS-Protection': '1; mode=block', | ||
}, null); | ||
const debitos = payload; | ||
return debitos; | ||
} | ||
catch (e) { | ||
return { message: 'Não foi possível fazer login no DETRAN BR', error: e.message }; | ||
} | ||
}; | ||
} | ||
} | ||
exports.br = new Br(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
import { Request, Response } from 'express'; | ||
declare class Go { | ||
index: (req: Request, res: Response) => Promise<Response<any, Record<string, any>> | undefined>; | ||
scrap: (placa: string, renavam: string) => Promise<{ | ||
placa: string; | ||
renavam: string; | ||
debitos: any; | ||
message?: undefined; | ||
error?: undefined; | ||
} | { | ||
message: string; | ||
error: any; | ||
placa?: undefined; | ||
renavam?: undefined; | ||
debitos?: undefined; | ||
} | { | ||
message: string; | ||
}>; | ||
consultaVeiculoPorPlacaRenavam: (placa: string, renavam: string, token: string) => Promise<{ | ||
placa: string; | ||
renavam: string; | ||
debitos: any; | ||
message?: undefined; | ||
error?: undefined; | ||
} | { | ||
message: string; | ||
error: any; | ||
placa?: undefined; | ||
renavam?: undefined; | ||
debitos?: undefined; | ||
}>; | ||
} | ||
export declare const go: Go; | ||
export {}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
"use strict"; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.go = void 0; | ||
const utils_1 = __importDefault(require("../utils/utils")); | ||
const validation_1 = __importDefault(require("../validations/validation")); | ||
class Go { | ||
constructor() { | ||
this.index = async (req, res) => { | ||
const placa = req.body.placa; | ||
const renavam = req.body.renavam; | ||
const errors = validation_1.default.generic(placa, renavam); | ||
if (errors) { | ||
return res.status(400).json(errors); | ||
} | ||
const multas = await this.scrap(placa, renavam); | ||
res.status(200).json(multas); | ||
}; | ||
this.scrap = async (placa, renavam) => { | ||
try { | ||
const bearerToken = await utils_1.default.request(`${process.env.GO_URL}/token`, 'POST', { | ||
'Origin': 'https://www.go.gov.br', | ||
'Referer': 'https://www.go.gov.br/', | ||
'Content-Type': 'application/x-www-form-urlencoded', | ||
}, { | ||
'grant_type': 'client_credentials', | ||
'client_id': 'Uxw0W7lCNcM6fsewGxvDChLcEAEa', | ||
'client_secret': 'JPU7TYzkDzafwmfgG2POSrUsbgEa' | ||
}); | ||
const token = bearerToken.access_token; | ||
const consultarVeiculoPorPlacaRenavam = await this.consultaVeiculoPorPlacaRenavam(placa, renavam, token); | ||
return consultarVeiculoPorPlacaRenavam; | ||
} | ||
catch (e) { | ||
return { message: 'Não foi possível fazer login no DETRAN GO' }; | ||
} | ||
}; | ||
this.consultaVeiculoPorPlacaRenavam = async (placa, renavam, token) => { | ||
const sessionString = '{"sistema":"SSEDI","codgChave":"EKH1A40","codgTipoChave":"03","idServico":13679,"idSessao":"","ip":"179.221.165.221"}'; | ||
const sessionBase64 = Buffer.from(sessionString).toString('base64'); | ||
try { | ||
const payload = await utils_1.default.request(`${process.env.GO_URL}/detran/financeiro/1.0.0/sedi/financeiro/consultarVeiculoPorPlacaRenavam?placa=${placa}&renavam=${renavam}`, 'GET', { | ||
'Origin': 'https://www.go.gov.br', | ||
'Referer': 'https://www.go.gov.br/', | ||
'Content-Type': 'application/json', | ||
"Authorization": `Bearer ${token}`, | ||
"Session": sessionBase64 | ||
}, null); | ||
const debitos = payload; | ||
return { placa, renavam, debitos }; | ||
} | ||
catch (e) { | ||
return { message: `Não foi possível encontrar o veículo ${placa} na base do DETRAN GO`, error: (e === null || e === void 0 ? void 0 : e.message) ? e === null || e === void 0 ? void 0 : e.message : null }; | ||
} | ||
}; | ||
} | ||
} | ||
exports.go = new Go(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
import { Request, Response } from 'express'; | ||
declare class Ma { | ||
index: (req: Request, res: Response) => Promise<Response<any, Record<string, any>> | undefined>; | ||
scrap: (placa: string, renavam: string) => Promise<{ | ||
message: any; | ||
veiculo?: undefined; | ||
placa?: undefined; | ||
renavam?: undefined; | ||
autuacoes?: undefined; | ||
infracoes?: undefined; | ||
} | { | ||
veiculo: { | ||
idVeiculo: any; | ||
idAcesso: any; | ||
documentoProprietario: any; | ||
chassi: any; | ||
}; | ||
placa: string; | ||
renavam: string; | ||
autuacoes: { | ||
numeroAuto: string; | ||
descricao: string; | ||
localComplemento: string; | ||
valor: number; | ||
}[]; | ||
infracoes: { | ||
numeroAuto: string; | ||
descricao: string; | ||
localComplemento: string; | ||
valor: number; | ||
}[]; | ||
message?: undefined; | ||
}>; | ||
} | ||
export declare const ma: Ma; | ||
export {}; |
Oops, something went wrong.