isolamento de pacote
This commit is contained in:
commit
f34b66cbe4
96 changed files with 2285 additions and 0 deletions
32
src/autenticacao/_codigoContaSite.ts
Normal file
32
src/autenticacao/_codigoContaSite.ts
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
import { respostaComuns, type tipoResposta } from "p-respostas"
|
||||
|
||||
type tipoPostCodigoContaSite = { site: string }
|
||||
|
||||
import node_fetch from "cross-fetch"
|
||||
|
||||
export const codigoContaSite = async ({
|
||||
url_api_autenticacao,
|
||||
post,
|
||||
}: {
|
||||
url_api_autenticacao: string
|
||||
post: tipoPostCodigoContaSite
|
||||
}): Promise<tipoResposta<string>> => {
|
||||
const url = `${url_api_autenticacao}/api/codigo_prefeitura_site`
|
||||
|
||||
try {
|
||||
const resp = await node_fetch(url, {
|
||||
method: "POST",
|
||||
body: JSON.stringify(post),
|
||||
headers: { "Content-Type": "application/json" },
|
||||
})
|
||||
.then((r) => r.json())
|
||||
.catch((e) =>
|
||||
respostaComuns.erro("Erro ao enviar registros", [e.message]),
|
||||
)
|
||||
.then((r) => r as tipoResposta<string>)
|
||||
|
||||
return resp
|
||||
} catch (e) {
|
||||
return respostaComuns.erro(`erro ao buscar código do site: ${e}`)
|
||||
}
|
||||
}
|
||||
44
src/autenticacao/_usuarios_quipo.ts
Normal file
44
src/autenticacao/_usuarios_quipo.ts
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
import node_fetch from "cross-fetch"
|
||||
import { respostaComuns, type tipoResposta } from "p-respostas"
|
||||
import type { tipo_usuarios__listar_retorno } from "../lista-usuarios"
|
||||
|
||||
export type tipoUsuarioExterno = {
|
||||
_nome: string
|
||||
_email: string
|
||||
_telefone: string
|
||||
vinculo: string
|
||||
inquilino: string
|
||||
chave_produto: string
|
||||
codigo: string
|
||||
_cpf: string
|
||||
}
|
||||
|
||||
export const usuarios_quipo = async ({
|
||||
token_produto,
|
||||
url_api_autenticacao,
|
||||
inquilino,
|
||||
}: {
|
||||
url_api_autenticacao: string
|
||||
token_produto: string
|
||||
inquilino: string
|
||||
}): Promise<tipoResposta<tipo_usuarios__listar_retorno[]>> => {
|
||||
const url = `${url_api_autenticacao}/api/usuarios__listar`
|
||||
|
||||
if (!token_produto) return respostaComuns.erro("token_produto não informado")
|
||||
|
||||
const headers = {
|
||||
token: token_produto,
|
||||
"Content-Type": "application/json",
|
||||
}
|
||||
|
||||
return node_fetch(url, {
|
||||
method: "POST",
|
||||
body: JSON.stringify({ inquilino }),
|
||||
headers,
|
||||
})
|
||||
.then((r) => r.json())
|
||||
.catch((e) =>
|
||||
respostaComuns.erro(`Erro ao buscar usuários quipo governo ${e.message}`),
|
||||
)
|
||||
.then((r) => r as tipoResposta<tipo_usuarios__listar_retorno[]>)
|
||||
}
|
||||
40
src/autenticacao/_usuarios_quipo_vincular.ts
Normal file
40
src/autenticacao/_usuarios_quipo_vincular.ts
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
import node_fetch from "cross-fetch"
|
||||
import { respostaComuns, type tipoResposta } from "p-respostas"
|
||||
|
||||
export const usuarios_quipo_vincular = async ({
|
||||
token_produto,
|
||||
url_api_autenticacao,
|
||||
inquilino_codigo,
|
||||
vinculo,
|
||||
usuario_codigo,
|
||||
email,
|
||||
}: {
|
||||
url_api_autenticacao: string
|
||||
token_produto: string
|
||||
inquilino_codigo: string
|
||||
vinculo: string
|
||||
usuario_codigo?: string
|
||||
email: string
|
||||
}): Promise<tipoResposta<string>> => {
|
||||
const url = `${url_api_autenticacao}/api/vinculos__criar`
|
||||
|
||||
if (!token_produto) return respostaComuns.erro("token_produto não informado")
|
||||
const headers = {
|
||||
token: token_produto,
|
||||
"Content-Type": "application/json",
|
||||
}
|
||||
|
||||
const parametros = {
|
||||
vinculos: { inquilino_codigo, usuario_codigo, vinculo },
|
||||
email: email,
|
||||
}
|
||||
return await node_fetch(url, {
|
||||
headers,
|
||||
body: JSON.stringify(parametros),
|
||||
method: "POST",
|
||||
})
|
||||
.then(async (r) => await r.json())
|
||||
.catch((e) =>
|
||||
respostaComuns.erro(`Erro ao criar vinculo de usuario ${e.message}`),
|
||||
)
|
||||
}
|
||||
34
src/autenticacao/_validarToken.ts
Normal file
34
src/autenticacao/_validarToken.ts
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
import type { tipoResposta } from "p-respostas"
|
||||
|
||||
type tipoPostValidarTokem = { token: string }
|
||||
|
||||
import node_fetch from "cross-fetch"
|
||||
|
||||
/** faz a validação do token */
|
||||
export const validarToken = async ({
|
||||
url_api_autenticacao,
|
||||
post,
|
||||
}: {
|
||||
url_api_autenticacao: string
|
||||
post: tipoPostValidarTokem
|
||||
}): Promise<"valido" | "erro"> => {
|
||||
const url = `${url_api_autenticacao}/api/validar_token`
|
||||
|
||||
try {
|
||||
const resposta = await node_fetch(url, {
|
||||
method: "POST",
|
||||
body: JSON.stringify(post),
|
||||
headers: { "Content-Type": "application/json" },
|
||||
})
|
||||
.then((r) => r.json())
|
||||
.then((r) => r as tipoResposta<any>)
|
||||
.then((resposta) =>
|
||||
resposta.eCerto ? ("valido" as const) : ("erro" as const),
|
||||
)
|
||||
.catch(() => "erro" as const)
|
||||
|
||||
return resposta
|
||||
} catch (_e) {
|
||||
return "erro"
|
||||
}
|
||||
}
|
||||
14
src/autenticacao/index.ts
Normal file
14
src/autenticacao/index.ts
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
import { codigoContaSite } from "./_codigoContaSite"
|
||||
import { type tipoUsuarioExterno, usuarios_quipo } from "./_usuarios_quipo"
|
||||
import { usuarios_quipo_vincular } from "./_usuarios_quipo_vincular"
|
||||
import { validarToken } from "./_validarToken"
|
||||
|
||||
export type { tipoUsuarioExterno }
|
||||
|
||||
/** todas as rotas de comunicação com autenticador partem dessa variável */
|
||||
export const pAutenticacao = {
|
||||
validarToken,
|
||||
codigoContaSite,
|
||||
usuarios_quipo,
|
||||
usuarios_quipo_vincular,
|
||||
}
|
||||
6
src/index.ts
Normal file
6
src/index.ts
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
export * from "./autenticacao"
|
||||
export * from "./lista-prefeituras"
|
||||
export * from "./lista-usuarios"
|
||||
export * from "./lista-vinculos"
|
||||
export * from "./produtos"
|
||||
export * from "./tokens"
|
||||
40
src/lista-prefeituras.ts
Normal file
40
src/lista-prefeituras.ts
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
import cFetch from "cross-fetch"
|
||||
import { respostaComuns, type tipoResposta } from "p-respostas"
|
||||
import type { chaves_produto } from "./produtos/tipagem"
|
||||
|
||||
export type tipoRetornoListarPrefeitrua = {
|
||||
nome: string
|
||||
inquilino: string
|
||||
base_url: string
|
||||
produto: keyof typeof chaves_produto
|
||||
}
|
||||
|
||||
export const tx_listar_prefeituras = "listar_prefeituras" as const
|
||||
|
||||
export const listarPrefeituras = async ({
|
||||
url_api_autenticacao,
|
||||
}: {
|
||||
url_api_autenticacao: string
|
||||
}): Promise<tipoResposta<tipoRetornoListarPrefeitrua[]>> => {
|
||||
const url = `${url_api_autenticacao}/api/${tx_listar_prefeituras}`
|
||||
|
||||
return cFetch(url)
|
||||
.then(async (a) => {
|
||||
const texto = await a.text()
|
||||
|
||||
try {
|
||||
const res: tipoResposta<tipoRetornoListarPrefeitrua[]> =
|
||||
JSON.parse(texto)
|
||||
|
||||
return res
|
||||
} catch (error: any) {
|
||||
return respostaComuns.erro(`Erro ao listar cidades: ${error.message}`, [
|
||||
texto,
|
||||
error,
|
||||
])
|
||||
}
|
||||
})
|
||||
.catch((error) =>
|
||||
respostaComuns.erro(`Erro ao listar cidades: ${error.message}`, [error]),
|
||||
)
|
||||
}
|
||||
54
src/lista-usuarios.ts
Normal file
54
src/lista-usuarios.ts
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
import cFetch from "cross-fetch"
|
||||
import { respostaComuns, type tipoResposta } from "p-respostas"
|
||||
|
||||
export const tx_usuarios__listar = "usuarios__listar" as const
|
||||
|
||||
export type tipo_usuarios__listar_retorno = {
|
||||
inquilino: string
|
||||
vinculo: string
|
||||
codigo: string
|
||||
cpf: string
|
||||
data_hora_atualizacao: string
|
||||
email: string
|
||||
id_betha_sistema: string
|
||||
nome: string
|
||||
telefone: string
|
||||
}
|
||||
|
||||
export type tipo_usuarios__listar_parametros = {
|
||||
inquilino?: string
|
||||
}
|
||||
|
||||
export const listarUsuarios = async (
|
||||
{
|
||||
token,
|
||||
url_api_autenticacao,
|
||||
}: { url_api_autenticacao: string; token: string },
|
||||
parametros: tipo_usuarios__listar_parametros,
|
||||
): Promise<tipoResposta<tipo_usuarios__listar_retorno[]>> => {
|
||||
const url = `${url_api_autenticacao}/api/${tx_usuarios__listar}`
|
||||
|
||||
return cFetch(url, {
|
||||
headers: { token, "Content-Type": "application/json" },
|
||||
body: JSON.stringify(parametros),
|
||||
method: "post",
|
||||
})
|
||||
.then(async (a) => {
|
||||
const texto = await a.text()
|
||||
|
||||
try {
|
||||
const res: tipoResposta<tipo_usuarios__listar_retorno[]> =
|
||||
JSON.parse(texto)
|
||||
|
||||
return res
|
||||
} catch (error: any) {
|
||||
return respostaComuns.erro(
|
||||
`Erro ao listar usuários: ${error.message}`,
|
||||
[texto, error],
|
||||
)
|
||||
}
|
||||
})
|
||||
.catch((error) =>
|
||||
respostaComuns.erro(`Erro ao listar usuários: ${error.message}`, [error]),
|
||||
)
|
||||
}
|
||||
48
src/lista-vinculos.ts
Normal file
48
src/lista-vinculos.ts
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
import cFetch from "cross-fetch"
|
||||
import { respostaComuns, type tipoResposta } from "p-respostas"
|
||||
|
||||
export const tx_vinculos__listar = "vinculos__listar" as const
|
||||
export type tipo_retorno_vinculo_listas = {
|
||||
codigo: string
|
||||
usuario_codigo: string
|
||||
inquilino: string
|
||||
vinculo: string
|
||||
chave_produto: string
|
||||
_usuario_nome: string
|
||||
_inquilino_nome: string
|
||||
_inquilino_base_url: string
|
||||
}
|
||||
|
||||
export const listarVinculos = async ({
|
||||
token,
|
||||
url_api_autenticacao,
|
||||
}: {
|
||||
url_api_autenticacao: string
|
||||
token: string
|
||||
}): Promise<tipoResposta<tipo_retorno_vinculo_listas[]>> => {
|
||||
const url = `${url_api_autenticacao}/api/${tx_vinculos__listar}`
|
||||
|
||||
return cFetch(url, {
|
||||
headers: { token, "Content-Type": "application/json" },
|
||||
body: "{}",
|
||||
method: "post",
|
||||
})
|
||||
.then(async (a) => {
|
||||
const texto = await a.text()
|
||||
|
||||
try {
|
||||
const res: tipoResposta<tipo_retorno_vinculo_listas[]> =
|
||||
JSON.parse(texto)
|
||||
|
||||
return res
|
||||
} catch (error: any) {
|
||||
return respostaComuns.erro(`Erro ao listar cidades: ${error.message}`, [
|
||||
texto,
|
||||
error,
|
||||
])
|
||||
}
|
||||
})
|
||||
.catch((error) =>
|
||||
respostaComuns.erro(`Erro ao listar cidades: ${error.message}`, [error]),
|
||||
)
|
||||
}
|
||||
15
src/produtos/_betha-meio-ambiente.ts
Normal file
15
src/produtos/_betha-meio-ambiente.ts
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
import { type opcoesVinculosGov, ProdutoQuipo } from "./tipagem"
|
||||
|
||||
export const produto_betha_meio_ambiente = new ProdutoQuipo({
|
||||
chave_produto: "betha-meio-ambiente",
|
||||
titulo: "Betha Meio Ambiente",
|
||||
descricao:
|
||||
"Betha Meio Ambiente: Software de gestão de processos ambientais para órgãos públicos da Betha Sistemas.",
|
||||
|
||||
url_produto: ({ inquilino, base_url, vinculo }) =>
|
||||
`${base_url}/${inquilino}${
|
||||
vinculo == ("anonimo" satisfies keyof typeof opcoesVinculosGov)
|
||||
? ""
|
||||
: `/${vinculo}#/admin`
|
||||
}`,
|
||||
})
|
||||
13
src/produtos/_e-licencie-gov.ts
Normal file
13
src/produtos/_e-licencie-gov.ts
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
import { produto_betha_meio_ambiente } from "./_betha-meio-ambiente"
|
||||
import { type opcoesVinculosGov, ProdutoQuipo } from "./tipagem"
|
||||
export const produto_e_licencie_gov = new ProdutoQuipo({
|
||||
...produto_betha_meio_ambiente,
|
||||
titulo: "e-Licencie Gov",
|
||||
chave_produto: "e-licencie-gov",
|
||||
url_produto: ({ inquilino, base_url, vinculo }) =>
|
||||
`${base_url}/${inquilino}${
|
||||
vinculo == ("anonimo" satisfies keyof typeof opcoesVinculosGov)
|
||||
? ""
|
||||
: `/${vinculo}#/admin`
|
||||
}`,
|
||||
})
|
||||
8
src/produtos/_e-licencie.ts
Normal file
8
src/produtos/_e-licencie.ts
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
import { Produto } from "./tipagem"
|
||||
|
||||
export const produto_e_licencie = new Produto({
|
||||
chave_produto: "e-licencie",
|
||||
titulo: "e-Licencie",
|
||||
descricao: "e-Licencie: Software de gestão de processos e dados ambientais.",
|
||||
url_produto: ({ base_url }) => base_url,
|
||||
})
|
||||
9
src/produtos/_suporte.ts
Normal file
9
src/produtos/_suporte.ts
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
import { Produto } from "./tipagem"
|
||||
|
||||
export const produto_suporte = new Produto({
|
||||
chave_produto: "suporte",
|
||||
titulo: "Suporte",
|
||||
descricao: "Gestão de contas e usuários dos produtos da e-licencie",
|
||||
|
||||
url_produto: ({ base_url }) => base_url,
|
||||
})
|
||||
31
src/produtos/doc.ts
Normal file
31
src/produtos/doc.ts
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
/**
|
||||
|
||||
Produtos existentes:
|
||||
|
||||
Atenticacao:
|
||||
Acesso a gestão de produtos
|
||||
Apenas uma conta com o código autenticao
|
||||
/autenticacao
|
||||
|
||||
Betha Meio Ambiente:
|
||||
Acesso a gestão da aplicação Quipo
|
||||
Acesso pode ser sociedade ou governo
|
||||
/quipo
|
||||
Possue limite de acesso a módulos:
|
||||
Licenciamento
|
||||
Fiscalização
|
||||
|
||||
|
||||
|
||||
e-licencie GOV:
|
||||
Acesso a gestão da aplicação Quipo
|
||||
Acesso pode ser sociedade ou governo
|
||||
/quipo
|
||||
|
||||
|
||||
e-licencie:
|
||||
Acesso a Aplicação e-licencie
|
||||
Adminstrador e Não adminstrasdor
|
||||
|
||||
|
||||
*/
|
||||
35
src/produtos/index.ts
Normal file
35
src/produtos/index.ts
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
import { produto_betha_meio_ambiente } from "./_betha-meio-ambiente"
|
||||
import { produto_e_licencie } from "./_e-licencie"
|
||||
|
||||
import { produto_e_licencie_gov } from "./_e-licencie-gov"
|
||||
import { produto_suporte } from "./_suporte"
|
||||
import {
|
||||
chaves_produto,
|
||||
opcoesVinculos,
|
||||
opcoesVinculosGov,
|
||||
Produto,
|
||||
provedoresGov,
|
||||
versao_usuarios,
|
||||
} from "./tipagem"
|
||||
|
||||
export const listaProdutos: {
|
||||
[k in keyof typeof chaves_produto]: Produto<k>
|
||||
} = {
|
||||
"betha-meio-ambiente": produto_betha_meio_ambiente,
|
||||
"e-licencie": produto_e_licencie,
|
||||
"e-licencie-gov": produto_e_licencie_gov,
|
||||
suporte: produto_suporte,
|
||||
}
|
||||
|
||||
export {
|
||||
Produto,
|
||||
chaves_produto,
|
||||
opcoesVinculosGov,
|
||||
opcoesVinculos,
|
||||
provedoresGov,
|
||||
produto_betha_meio_ambiente,
|
||||
produto_e_licencie,
|
||||
produto_e_licencie_gov,
|
||||
produto_suporte,
|
||||
versao_usuarios,
|
||||
}
|
||||
102
src/produtos/tipagem.ts
Normal file
102
src/produtos/tipagem.ts
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
/** Lista dos produtos da e-licencie */
|
||||
export enum chaves_produto {
|
||||
suporte = "suporte",
|
||||
"betha-meio-ambiente" = "betha-meio-ambiente",
|
||||
"e-licencie-gov" = "e-licencie-gov",
|
||||
"e-licencie" = "e-licencie",
|
||||
}
|
||||
|
||||
export const opcoesVinculosGov = {
|
||||
governo: "Governo",
|
||||
sociedade: "Sociedade",
|
||||
anonimo: "Anônimo",
|
||||
} as const
|
||||
|
||||
export const opcoesVinculosSuporte = {
|
||||
"suporte-1": "Suporte Primário",
|
||||
} as const
|
||||
|
||||
export const opcoesVinculos = {
|
||||
[chaves_produto.suporte]: opcoesVinculosSuporte,
|
||||
[chaves_produto["betha-meio-ambiente"]]: opcoesVinculosGov,
|
||||
[chaves_produto["e-licencie-gov"]]: opcoesVinculosGov,
|
||||
[chaves_produto["e-licencie"]]: {},
|
||||
} as const
|
||||
|
||||
export const tiposAcesso = opcoesVinculosGov
|
||||
|
||||
export const provedoresGov = {
|
||||
/** Sistema de login da Beta */
|
||||
"betha-sistemas": "Betha Sistemas",
|
||||
/** sistema de login do altenticado */
|
||||
"e-licencie": "e-licencie",
|
||||
} as const
|
||||
|
||||
type extruturaTokenBase = {
|
||||
inquilino_codigo: string
|
||||
usuario_codigo: string
|
||||
usuario_nome: string
|
||||
codigo_acesso_produto: string
|
||||
codigo_autenticacao: string
|
||||
}
|
||||
|
||||
type extrutruaraTokenQuipo = extruturaTokenBase & {
|
||||
inquilino_nome: string
|
||||
tipo_de_acesso: keyof typeof opcoesVinculosGov
|
||||
provedor: keyof typeof provedoresGov
|
||||
}
|
||||
|
||||
export class Produto<C extends keyof typeof chaves_produto> {
|
||||
/** Chave do produto*/
|
||||
chave_produto: C
|
||||
/** Titulo do produto */
|
||||
titulo: string
|
||||
/** Descrição do módulo */
|
||||
descricao: string
|
||||
/** URL base do módulo */
|
||||
url_produto: (_: {
|
||||
inquilino: string
|
||||
base_url: string
|
||||
vinculo: string
|
||||
}) => string
|
||||
|
||||
constructor(_: {
|
||||
/** Chave do produto*/ chave_produto: C
|
||||
/** Titulo do produto */
|
||||
titulo: string
|
||||
/** Descrição do módulo */
|
||||
descricao: string
|
||||
/** URL base do módulo */
|
||||
url_produto: (_: {
|
||||
inquilino: string
|
||||
base_url: string
|
||||
vinculo: string
|
||||
}) => string
|
||||
}) {
|
||||
this.chave_produto = _.chave_produto
|
||||
this.titulo = _.titulo
|
||||
this.descricao = _.descricao
|
||||
this.url_produto = _.url_produto
|
||||
}
|
||||
|
||||
extruturaToken(
|
||||
_: extruturaTokenBase,
|
||||
): extruturaTokenBase & { chave_produto: C } {
|
||||
return { ..._, chave_produto: this.chave_produto }
|
||||
}
|
||||
}
|
||||
|
||||
export class ProdutoQuipo<
|
||||
C extends keyof typeof chaves_produto,
|
||||
> extends Produto<C> {
|
||||
extruturaToken(
|
||||
_: extrutruaraTokenQuipo,
|
||||
): extrutruaraTokenQuipo & { chave_produto: C } {
|
||||
return { ..._, chave_produto: this.chave_produto }
|
||||
}
|
||||
}
|
||||
|
||||
export enum versao_usuarios {
|
||||
versao_usuarios_autenticacao = "versao_usuarios_autenticacao",
|
||||
versao_usuarios_quipo = "versao_usuarios_quipo",
|
||||
}
|
||||
11
src/tokens/index.ts
Normal file
11
src/tokens/index.ts
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
import type { provedoresGov } from "../produtos"
|
||||
|
||||
export type tipoUsuarioTokenAutneticacao = {
|
||||
usuario_codigo: string
|
||||
usuario_nome: string
|
||||
usuario_email: string
|
||||
usuario_cpf: string
|
||||
autenticacao_codigo: string
|
||||
eSuporte: boolean
|
||||
autenticacao_provedor: keyof typeof provedoresGov
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue