@genne/genne-cli 0.0.0-stage → 0.1.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -2
- package/package.json +28 -4
- package/skills/genne-cli/SKILL.md +67 -0
- package/src/api.js +1 -0
- package/src/cli.js +7 -0
- package/src/commands/access.js +1 -0
- package/src/commands/companies.js +1 -0
- package/src/commands/content.js +2 -0
- package/src/commands/crm.js +4 -0
- package/src/commands/desktop-integrations.js +1 -0
- package/src/commands/driver-routes.js +1 -0
- package/src/commands/driver.js +1 -0
- package/src/commands/feedback.js +3 -0
- package/src/commands/financial.js +1 -0
- package/src/commands/gr.js +1 -0
- package/src/commands/identity.js +1 -0
- package/src/commands/logistics.js +1 -0
- package/src/commands/notifications.js +2 -0
- package/src/commands/operational-input.js +1 -0
- package/src/commands/operations-config.js +1 -0
- package/src/commands/orders.js +1 -0
- package/src/commands/routes.js +1 -0
- package/src/commands/support.js +2 -0
- package/src/commands/tower.js +1 -0
- package/src/commands/users.js +1 -0
- package/src/core-fetch.js +1 -0
- package/src/device-login.js +1 -0
- package/src/global.js +5 -0
- package/src/help.js +1 -0
- package/src/local-file.js +1 -0
- package/src/mcp-administration.js +1 -0
- package/src/mcp-desktop-operations.js +1 -0
- package/src/mcp-logistics.js +1 -0
- package/src/mcp-operational.js +1 -0
- package/src/mcp-routes-tower.js +1 -0
- package/src/mcp-support-feedback.js +1 -0
- package/src/mcp.js +2 -0
- package/src/operations.js +1 -0
- package/src/private-file.js +1 -0
- package/src/remote-auth-store.js +31 -0
- package/src/remote-auth.js +1 -0
- package/src/remote-core.js +1 -0
- package/src/remote-http.js +1 -0
- package/src/remote-mcp.js +1 -0
- package/src/remote-server.js +2 -0
- package/src/request-scope.js +1 -0
- package/src/session.js +1 -0
package/README.md
CHANGED
|
@@ -1,3 +1,28 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Genne CLI
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Cliente Node.js 22+ para operações Genne autorizadas pelo Core. O papel ativo,
|
|
4
|
+
a conta selecionada e as permissões do usuário limitam cada operação.
|
|
5
|
+
|
|
6
|
+
O registry desta distribuição é informado em `package.json.publishConfig.registry`.
|
|
7
|
+
Para a distribuição privada, configure `@genneco:registry=https://npm.pkg.github.com`
|
|
8
|
+
e autentique o npm com acesso de leitura ao pacote, fora de arquivos compartilhados.
|
|
9
|
+
A distribuição no npm público usa `https://registry.npmjs.org` e não exige acesso
|
|
10
|
+
ao repositório privado. O updater gerenciado usa o mesmo registry da distribuição.
|
|
11
|
+
|
|
12
|
+
```sh
|
|
13
|
+
npm install --global @genne/genne-cli@latest
|
|
14
|
+
genne login
|
|
15
|
+
genne whoami
|
|
16
|
+
genne help
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Use `genne help CAMINHO` para sintaxe, papéis, entrada e confirmação. O MCP
|
|
20
|
+
local usa `genne-mcp` e oferece somente leituras. O MCP remoto exige OAuth;
|
|
21
|
+
escritas remotas mantêm intenção e aprovação separada no Genne.
|
|
22
|
+
|
|
23
|
+
Este pacote contém módulos JavaScript minificados gerados pelo build, sem
|
|
24
|
+
source maps ou fontes originais. Os caminhos `src/` são preservados para
|
|
25
|
+
compatibilidade com consumidores existentes. Minificação não impede a
|
|
26
|
+
inspeção ou análise do código distribuído.
|
|
27
|
+
|
|
28
|
+
Suporte: https://genne.ai/en/support
|
package/package.json
CHANGED
|
@@ -1,6 +1,30 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@genne/genne-cli",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.34",
|
|
4
|
+
"description": "CLI de produto Genne",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"genne": "./src/cli.js",
|
|
8
|
+
"genne-mcp": "./src/mcp.js",
|
|
9
|
+
"genne-mcp-remote": "./src/remote-server.js"
|
|
10
|
+
},
|
|
11
|
+
"engines": {
|
|
12
|
+
"node": ">=22"
|
|
13
|
+
},
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@modelcontextprotocol/server": "^2.3.1",
|
|
16
|
+
"zod": "^4.6.5"
|
|
17
|
+
},
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "https://github.com/genneco/genne-cli.git"
|
|
21
|
+
},
|
|
22
|
+
"publishConfig": {
|
|
23
|
+
"registry": "https://registry.npmjs.org",
|
|
24
|
+
"access": "public"
|
|
25
|
+
},
|
|
26
|
+
"files": [
|
|
27
|
+
"src",
|
|
28
|
+
"skills/genne-cli/SKILL.md"
|
|
29
|
+
]
|
|
30
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: genne-cli
|
|
3
|
+
description: Consultar e operar o Genne pelo MCP remoto com OAuth ou pela CLI opcional, confirmando a identidade, o papel e a conta ativos antes de agir.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Genne
|
|
7
|
+
|
|
8
|
+
## Escolha da conexão
|
|
9
|
+
|
|
10
|
+
- Com terminal acessível e CLI instalada, confira `genne env show` e `genne whoami`. Prefira a CLI somente se a sessão corresponder à identidade, ao papel e à conta pretendidos.
|
|
11
|
+
- Sem terminal, CLI instalada ou sessão CLI válida, use o MCP remoto da integração Genne com OAuth. Isso inclui o celular. Confira `genne_whoami` e descubra as ferramentas em `tools/list`; não exija instalação da CLI para usar o plugin.
|
|
12
|
+
|
|
13
|
+
As sessões CLI e MCP são independentes. Se os dados das duas sessões divergirem,
|
|
14
|
+
peça ao usuário para escolher a sessão antes de operar. Não combine contas ou
|
|
15
|
+
permissões nem troque de transporte para contornar uma recusa ou uma aprovação
|
|
16
|
+
pendente. Para conectar o MCP, siga o OAuth da integração.
|
|
17
|
+
|
|
18
|
+
## CLI opcional
|
|
19
|
+
|
|
20
|
+
Requer Node.js 22 ou superior. Quando o usuário pedir instalação:
|
|
21
|
+
|
|
22
|
+
```sh
|
|
23
|
+
npm install --global @genne/genne-cli@latest
|
|
24
|
+
genne login
|
|
25
|
+
genne env show
|
|
26
|
+
genne whoami
|
|
27
|
+
genne help
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
`genne login` abre a autorização no navegador. Confirme a identidade, o papel
|
|
31
|
+
ativo e a conta selecionada depois de autenticar. A origem padrão é
|
|
32
|
+
`https://genne.ai`; `genne env show` mostra o destino efetivo.
|
|
33
|
+
Não peça acesso ao repositório ou credenciais no chat.
|
|
34
|
+
|
|
35
|
+
## Descoberta e execução
|
|
36
|
+
|
|
37
|
+
Na CLI, use `genne help CAMINHO` ou `genne CAMINHO --help` para consultar
|
|
38
|
+
sintaxe, parâmetros, papel elegível, entrada JSON e confirmação. O help funciona
|
|
39
|
+
sem sessão. Envie o JSON por stdin conforme indicado; nunca passe senhas,
|
|
40
|
+
códigos ou tokens nos argumentos nem imprima credenciais nas respostas.
|
|
41
|
+
|
|
42
|
+
No MCP, consulte `tools/list` para os schemas e descrições atuais.
|
|
43
|
+
`genne_help` mostra o catálogo CLI, que não garante uma ferramenta MCP equivalente.
|
|
44
|
+
Se uma operação não estiver disponível, informe a limitação. Não improvise
|
|
45
|
+
chamadas HTTP nem use outro papel ou conta para contorná-la.
|
|
46
|
+
O MCP local por stdio oferece somente leituras.
|
|
47
|
+
|
|
48
|
+
Antes de escrever, revise o alvo, a conta, os dados propostos e os efeitos
|
|
49
|
+
indicados pelo help ou pela ferramenta, incluindo substituições e exclusões.
|
|
50
|
+
Respeite a confirmação interativa da CLI. Nas escritas MCP remotas:
|
|
51
|
+
|
|
52
|
+
1. Envie os campos e uma `idempotency_key` estável conforme o schema.
|
|
53
|
+
2. Mostre o link retornado e aguarde a aprovação humana no Genne para a mesma identidade, papel e conta. Uma intenção pendente não significa alteração concluída.
|
|
54
|
+
3. Após aprovação e pedido para continuar, repita os mesmos dados e chave com o `intent_id` retornado. Confira o resultado e consulte o estado quando houver uma leitura disponível.
|
|
55
|
+
|
|
56
|
+
Nunca invente aprovação nem execute uma intenção rejeitada ou obsoleta.
|
|
57
|
+
Em 412, releia o estado e solicite outra intenção com nova chave; em 403,
|
|
58
|
+
reporte a recusa sem trocar de sessão. Não repita uma escrita automaticamente
|
|
59
|
+
após timeout ou resposta perdida; consulte seu resultado antes de decidir.
|
|
60
|
+
|
|
61
|
+
Respostas `202`, `queued` ou `processing` exigem acompanhamento pelo comando
|
|
62
|
+
ou ferramenta de consulta indicado; não representam conclusão. Use somente
|
|
63
|
+
IDs, estados e cursores realmente retornados. Preserve os filtros ao usar
|
|
64
|
+
`meta.next_cursor` e não invente dados, paginação ou acesso.
|
|
65
|
+
|
|
66
|
+
Exiba somente os dados necessários ao pedido. Autenticação, abertura do
|
|
67
|
+
plugin e sucesso de uma operação são verificações distintas.
|
package/src/api.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var A=Object.defineProperty;var d=(e,o)=>A(e,"name",{value:o,configurable:!0});import{accessToken as b,clearSession as P,selectedOrigin as O}from"./session.js";import{currentRequestSignal as j}from"./request-scope.js";const w={401:"Sess\xE3o inv\xE1lida ou expirada",403:"Acesso negado",404:"Recurso n\xE3o encontrado",409:"Conflito no contexto da conta",422:"Dados inv\xE1lidos"},E={invalid_cpf:"CPF inv\xE1lido",invalid_input:"Dados do convite inv\xE1lidos",rate_limited:"Limite de convites atingido; tente novamente mais tarde",idempotency_conflict:"A chave de idempot\xEAncia j\xE1 foi usada com outra entrada",invitation_conflict:"O convite j\xE1 foi encerrado ou recebeu outra resposta",driver_already_linked:"Motorista j\xE1 vinculado \xE0 transportadora",invitation_recipient_unavailable:"Destinat\xE1rio indispon\xEDvel para convite",driver_carrier_link_blocked:"V\xEDnculo bloqueado pela transportadora",invitation_already_pending:"J\xE1 existe convite pendente",invitation_cooldown:"Aguarde o intervalo para enviar novo convite",carrier_unavailable:"Transportadora indispon\xEDvel"},F=new Set(["unsupported_file_type","invalid_file","empty_file","invalid_headers","invalid_pdf","pdf_encrypted","pdf_page_limit_exceeded","file_too_large","pdf_text_extraction_unavailable","pdf_text_extraction_failed","pdf_no_text","pdf_table_not_found","pdf_table_invalid","pdf_layout_invalid","pdf_layout_inference_unavailable","pdf_layout_inference_failed","pdf_visual_extraction_unavailable","pdf_visual_extraction_failed"]),I={unsupported_file_type:{stage:"reading",message:"N\xE3o conseguimos processar esse formato de arquivo. Envie uma planilha XLSX, XLS ou CSV, ou um PDF com as entregas."},empty_file:{stage:"reading",message:"N\xE3o conseguimos processar o arquivo porque a planilha est\xE1 vazia. Confira se selecionou o arquivo de entregas correto."},invalid_headers:{stage:"interpretation",message:"N\xE3o conseguimos processar a planilha porque n\xE3o identificamos quais colunas cont\xEAm os pedidos, endere\xE7os e volumes. Fale com o suporte para ajudar na importa\xE7\xE3o."},invalid_pdf:{stage:"reading",message:"N\xE3o conseguimos abrir o PDF recebido. Tente enviar o arquivo novamente. Se continuar, fale com o suporte."},pdf_encrypted:{stage:"reading",message:"N\xE3o conseguimos ler o PDF porque ele est\xE1 protegido por senha. Pe\xE7a a quem enviou o arquivo uma c\xF3pia sem senha."},pdf_page_limit_exceeded:{stage:"reading",message:"N\xE3o conseguimos processar o PDF porque ele excede o limite de p\xE1ginas por importa\xE7\xE3o. Pe\xE7a ajuda ao suporte para importar esse arquivo."},file_too_large:{stage:"reading",message:"N\xE3o conseguimos processar o arquivo porque ele excede o limite por importa\xE7\xE3o. Pe\xE7a ajuda ao suporte para importar esse arquivo."},pdf_text_extraction_unavailable:{stage:"reading",message:"N\xE3o conseguimos ler o conte\xFAdo do PDF neste momento. Tente novamente em alguns minutos."},pdf_text_extraction_failed:{stage:"reading",message:"N\xE3o conseguimos processar o PDF porque n\xE3o foi poss\xEDvel ler os dados das entregas. Fale com o suporte para ajudar na importa\xE7\xE3o."},invalid_csv:{stage:"reading",message:"N\xE3o conseguimos ler o arquivo CSV porque alguns campos de texto n\xE3o terminam como esperado. Tente enviar o arquivo novamente. Se continuar, fale com o suporte."},invalid_encoding:{stage:"reading",message:"N\xE3o conseguimos processar o arquivo porque n\xE3o reconhecemos alguns caracteres do texto. Fale com o suporte para ajudar na importa\xE7\xE3o."},unreadable_file:{stage:"reading",message:"N\xE3o conseguimos abrir o arquivo recebido. Tente enviar o arquivo novamente. Se continuar, fale com o suporte."},unreadable_content:{stage:"interpretation",message:"N\xE3o conseguimos processar o arquivo porque o conte\xFAdo n\xE3o ficou leg\xEDvel na leitura. Tente enviar o arquivo novamente. Se continuar, fale com o suporte."},no_delivery_table:{stage:"interpretation",message:"N\xE3o conseguimos processar o arquivo porque n\xE3o encontramos uma lista de entregas no conte\xFAdo lido. Confira se selecionou o arquivo certo. Se estiver correto, fale com o suporte."},missing_addresses:{stage:"interpretation",message:"N\xE3o conseguimos processar o arquivo porque n\xE3o identificamos os endere\xE7os das entregas. Fale com o suporte para ajudar na importa\xE7\xE3o."},missing_order_identifiers:{stage:"interpretation",message:"N\xE3o conseguimos processar o arquivo porque n\xE3o identificamos os c\xF3digos dos pedidos ou de rastreio. Fale com o suporte para ajudar na importa\xE7\xE3o."},ambiguous_columns:{stage:"interpretation",message:"N\xE3o conseguimos processar o arquivo porque mais de uma coluna pode conter os mesmos dados de entrega e n\xE3o foi poss\xEDvel distinguir qual usar. Fale com o suporte para ajudar na importa\xE7\xE3o."},analysis_timeout:{stage:"interpretation",message:"N\xE3o conseguimos concluir a leitura do arquivo porque a an\xE1lise demorou mais que o esperado. Tente novamente em instantes."},analysis_rate_limited:{stage:"interpretation",message:"N\xE3o conseguimos analisar o arquivo agora porque o servi\xE7o de leitura est\xE1 ocupado. Tente novamente em instantes."},analysis_unavailable:{stage:"interpretation",message:"N\xE3o conseguimos analisar o arquivo agora porque o servi\xE7o de leitura est\xE1 indispon\xEDvel. Tente novamente em instantes."},invalid_ai_response:{stage:"interpretation",message:"Tentamos analisar o arquivo, mas n\xE3o conseguimos interpretar as entregas com seguran\xE7a. Tente novamente. Se continuar, fale com o suporte."}};function C(e,o){if(!e||typeof e!="object"||Array.isArray(e))return null;const{error:i,reason:s,stage:n}=e;if(typeof i!="string"||typeof s!="string"||typeof n!="string"||typeof e.message!="string"||!F.has(i))return null;const u=I[s];if(!u||u.stage!==n)return null;const p=new q(i,u.message,o);return p.data={reason:s,stage:n},p}d(C,"routeImportError");class q extends Error{static{d(this,"CliError")}constructor(o,i,s){super(i),this.code=o,this.status=s}}function r(e,o,i){throw new q(e,o,i)}d(r,"fail");function L(e){return/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e??"")||r("USAGE","ID deve ser um UUID"),e}d(L,"uuid");function R(e){e||r("CONFIG","Defina GENNE_API_URL");let o;try{o=new URL(e)}catch{r("CONFIG","GENNE_API_URL deve ser uma origem HTTP ou HTTPS")}return(!["http:","https:"].includes(o.protocol)||o.username||o.password||o.pathname!=="/"||o.search||o.hash)&&r("CONFIG","GENNE_API_URL deve ser uma origem HTTP ou HTTPS"),o.protocol!=="https:"&&!["localhost","127.0.0.1","[::1]"].includes(o.hostname)&&r("CONFIG","A API exige HTTPS fora da m\xE1quina local"),o.origin}d(R,"apiOrigin");function k(e,{allowAnonymous:o=!1}={}){const i=R(O(e));return async(s,n,u,{idempotencyKey:p,deletionIntent:N,clientPlatform:y,ifMatch:S,withStatus:h,invitationErrorProjection:T}={})=>{(!n.startsWith("/")||n.startsWith("//"))&&r("USAGE","Caminho de API inv\xE1lido");const g=s==="PUT"&&n==="/auth/me/driver-access",f=g||s==="PUT"&&/^\/admin\/users\/[0-9a-f-]+\/driver-access$/i.test(n),x=g?"N\xE3o foi poss\xEDvel confirmar a habilita\xE7\xE3o; fa\xE7a genne login e consulte genne user me antes de repetir.":"N\xE3o foi poss\xEDvel confirmar a habilita\xE7\xE3o; confira os pap\xE9is do usu\xE1rio alvo antes de repetir. O titular pode precisar de novo login.",v=o?null:await b(e,i),_=u instanceof FormData;let a;try{a=await fetch(`${i}/api/v1${n}`,{method:s,redirect:"error",headers:{accept:"application/json",...v?{authorization:`Bearer ${v}`}:{},...p?{"idempotency-key":p}:{},...S?{"if-match":S}:{},...N?{"x-deletion-intent":N}:{},...y?{"x-client-platform":y}:{},...u===void 0||_?{}:{"content-type":"application/json"}},...u===void 0?{}:{body:_?u:JSON.stringify(u)},signal:AbortSignal.any([AbortSignal.timeout(_?6e4:15e3),j()].filter(Boolean))})}catch{f&&r("NETWORK",x),r("NETWORK","N\xE3o foi poss\xEDvel conectar \xE0 API")}if(!a.ok){if(f&&[409,422].includes(a.status)){let t;try{t=await a.json()}catch{}g&&a.status===422&&t?.error==="invalid_current_password"&&r("invalid_current_password","Senha atual incorreta",422),a.status===409&&t?.error==="unsupported_role_transition"&&r("unsupported_role_transition","Este usu\xE1rio n\xE3o pode habilitar motorista por esta opera\xE7\xE3o",409)}if(a.status===422&&s==="POST"&&n==="/routes/imports/preview"){let t;try{t=await a.json()}catch{}const m=C(t,a.status);if(m)throw m}const l=a.status===429&&s==="POST"&&n==="/carrier/driver-invitations";if(T&&([409,422].includes(a.status)||l)){let t;try{t=await a.json()}catch{}if(t&&typeof t.error=="string"&&Object.hasOwn(E,t.error)&&(t.error==="rate_limited"?l:!l)){const m=new q(t.error,E[t.error],a.status);throw a.status===409&&t.error==="invitation_conflict"&&t.data&&typeof t.data=="object"&&!Array.isArray(t.data)&&(m.data=T(t.data)),m}}r(`HTTP_${a.status}`,w[a.status]??"A API recusou a requisi\xE7\xE3o",a.status)}if(a.status===204)return!o&&!e.GENNE_ACCESS_TOKEN&&s==="POST"&&["/auth/logout","/auth/logout-all"].includes(n)&&await P(e,i),h?{http_status:a.status}:{};let c;try{const l=await a.text();if(!l)return{};c=JSON.parse(l)}catch{f&&r("RESPONSE",x),r("RESPONSE","Resposta inv\xE1lida da API")}return(!c||typeof c!="object"||Array.isArray(c))&&r("RESPONSE","Resposta inv\xE1lida da API"),g&&c.data?.status==="enabled"&&c.data.changed===!0&&c.data.reauthentication_required===!0&&!e.GENNE_ACCESS_TOKEN?.trim()&&await P(e,i,v),h?{...c,http_status:a.status}:c}}d(k,"createApi");export{q as CliError,R as apiOrigin,k as createApi,r as fail,L as uuid};
|
package/src/cli.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
var p=Object.defineProperty;var l=(e,t)=>p(e,"name",{value:t,configurable:!0});import{closeSync as g,openSync as h,readSync as y,writeSync as v}from"node:fs";import{CliError as N,fail as n}from"./api.js";import{deviceLogin as O,deviceLogout as b}from"./device-login.js";import{runOperation as w}from"./operations.js";import{environmentCommand as S}from"./session.js";import{globalCommand as C}from"./global.js";let a;async function I(){if(a!==void 0)return a;process.stdin.isTTY&&n("INPUT","Forne\xE7a JSON em stdin");let e="";for await(const t of process.stdin)e+=t,e.length>1e6&&n("INPUT","Entrada muito grande");try{a=JSON.parse(e)}catch{n("INPUT","JSON inv\xE1lido em stdin")}return(!a||typeof a!="object"||Array.isArray(a))&&n("INPUT","JSON em stdin deve ser um objeto"),a}l(I,"input");async function k(e,t){let i;try{i=h("/dev/tty","r")}catch{n("CONFIRM","Confirma\xE7\xE3o interativa necess\xE1ria")}try{v(2,`${e}
|
|
3
|
+
Digite ${t} para confirmar: `);const r=[],o=Buffer.alloc(1024);let f=0,d="";for(;;){const u=y(i,o,0,o.length,null);u===0&&n("CONFIRM","Opera\xE7\xE3o cancelada");const s=o.subarray(0,u),c=s.indexOf(10),m=c===-1?s:s.subarray(0,c);if(f+=m.length,f>1e6&&n("CONFIRM","Confirma\xE7\xE3o muito longa"),r.push(Buffer.from(m)),c!==-1)break}return d=Buffer.concat(r).toString("utf8"),d.trim()!==t&&n("CONFIRM","Opera\xE7\xE3o cancelada"),!0}finally{g(i)}}l(k,"confirm");try{let e=process.argv.slice(2);const t=e[0]==="--non-interactive";if(t){e=e.slice(1);const r=e.length===5&&e[0]==="admin"&&e[1]==="blog"&&e[2]==="posts"&&e[3]==="create"&&e[4].startsWith("key="),o=e.length===5&&e[0]==="admin"&&e[1]==="feedbacks"&&["comment","status"].includes(e[2])&&e[4].startsWith("key=");!r&&!o&&n("USAGE","--non-interactive \xE9 aceito somente para Growth e Donna")}const i=e[0]==="global"&&e.at(-1)!=="--help"?(()=>{try{return C(e.slice(1))}catch(r){n("GLOBAL",r.message)}})():e[0]==="env"&&e.at(-1)!=="--help"?await S(process.env,e.slice(1)):e.length===1&&e[0]==="login"?await O(process.env,({verification_uri:r,user_code:o})=>{process.stderr.write(`Abra ${r}
|
|
4
|
+
Digite o c\xF3digo ${o} e aprove o acesso.
|
|
5
|
+
`)}):e.length===1&&e[0]==="logout"?await b(process.env):await w(e,{input:I,confirm:t?async()=>!0:k});process.stdout.write(`${JSON.stringify(i)}
|
|
6
|
+
`)}catch(e){const t=e instanceof N;process.stderr.write(`${JSON.stringify({error:{code:t?e.code:"UNKNOWN",message:t?e.message:"Falha interna do CLI",...t&&e.status?{status:e.status}:{},...t&&e.data?{data:e.data}:{}}})}
|
|
7
|
+
`),process.exitCode=1}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var M=Object.defineProperty;var b=(e,t)=>M(e,"name",{value:t,configurable:!0});import{CliError as I}from"../api.js";const G=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function A(e,t="O corpo deve ser um objeto JSON"){if(!e||typeof e!="object"||Array.isArray(e))throw new I("USAGE",t);return e}b(A,"assertObject");function O(e,t){const m=A(e),u=Object.keys(m).filter(E=>!t.includes(E));if(u.length)throw new I("USAGE",`Campo n\xE3o suportado: ${u[0]}`);return m}b(O,"only");async function h(e,t,m){const u=A(await e()),E=Object.prototype.hasOwnProperty.call(u,t);if(E&&Object.keys(u).length!==1)throw new I("USAGE",`O corpo deve conter apenas ${t}`);const f=E?u[t]:u,d=O(f,m);if(Object.keys(d).length===0)throw new I("USAGE","O corpo n\xE3o pode ser vazio");return{[t]:d}}b(h,"bodyFor");async function l(e,t,m){if(typeof e.confirm!="function")throw new I("CONFIRM","Confirma\xE7\xE3o interativa necess\xE1ria");await e.confirm(t,m)}b(l,"confirmMutation");function w(e,t,m){try{return m(e)}catch{throw new I("USAGE",`${t} deve ser um UUID`)}}b(w,"requireUuid");function $(e,t){return!e||typeof e!="object"||Array.isArray(e)?e:Object.fromEntries(t.filter(m=>m in e).map(m=>[m,e[m]]))}b($,"memberFields");function T(e){const t=$(e,["id","membership_id","business_account_id","workspace_role","membership_role","status"]);return e?.user&&(t.user=$(e.user,["id","name","email","role","status"])),e?.business_account&&(t.business_account=$(e.business_account,["id","legal_name","trading_name","status"])),e?.invitation_delivery&&(t.invitation_delivery=$(e.invitation_delivery,["status","attempt_count","sent_at","error_code"])),t}b(T,"projectMember");function _(e){return Array.isArray(e?.data)?{...e,data:e.data.map(T)}:e?.data&&typeof e.data=="object"?{...e,data:T(e.data)}:e}b(_,"projectMembers");async function j(e,t){if(e[0]!=="access")return null;const[,m,u,E]=e,f=t.uuid??(n=>{if(!G.test(n))throw new Error("invalid uuid");return n}),d=t.input??(async()=>({})),o=t.api,y=t.fail??((n,r)=>{throw Object.assign(new Error(r),{code:n})}),U=b(()=>t.requireRole("admin"),"admin"),P=b(()=>{t.user?.role!=="shipper"&&t.user?.role!=="carrier"&&y("HTTP_403","Acesso negado",403)},"customer");if(m==="catalog"&&e.length===2)return U(),o("GET","/admin/permissions/catalog");if(m==="accounts"&&u==="list"){U();const n=new URLSearchParams;for(const s of e.slice(3)){const c=s.indexOf("="),a=s.slice(0,c);if(c<1||!["account_type","search","limit","cursor"].includes(a))return y("USAGE",`Filtro n\xE3o suportado: ${s}`,422);n.set(a,s.slice(c+1))}const r=await o("GET",`/admin/permissions/business-accounts${n.size?`?${n}`:""}`);return Array.isArray(r?.data)?{...r,data:r.data.map(s=>$(s,["id","business_account_id","account_type","name","status"]))}:r}if(m==="members"&&u==="list"){U();const n=new URLSearchParams;for(const r of e.slice(3)){const s=r.indexOf("="),c=r.slice(0,s);if(s<1||!["limit","cursor","search","status","membership_role","carrier_account_id","shipper_account_id"].includes(c))return y("USAGE",`Filtro n\xE3o suportado: ${r}`,422);n.set(c,r.slice(s+1))}return _(await o("GET",`/admin/business-account-members${n.size?`?${n}`:""}`))}if(m==="internal"){if(U(),u==="list"&&e.length===3){const n=await o("GET","/admin/permissions/internal-users");return Array.isArray(n?.data)?{...n,data:n.data.map(r=>$(r,["id","name","email","role","roles","admin_access_level","is_internal","status"]))}:n}if((u==="show"||u==="set")&&E){const n=w(E,"USER_ID",f),r=`/admin/permissions/internal-users/${n}/access`;if(u==="show"&&e.length===4)return o("GET",r);if(u==="set"&&e.length===4){const s=await h(d,"access",["admin_access_level","permission_keys"]);return await l(t,`Alterar ACL do usu\xE1rio ${n}?`,n),o("PUT",r,s)}}}if(m==="my-account"){P();const n=u,r=e[3],s=e[4],c=`/${t.user.role}/business-account`;if(n==="catalog"&&e.length===3)return o("GET",`${c}/permissions/catalog`);if(n==="members"&&e.length===3)return _(await o("GET",`${c}/members`));if(n==="members"&&r==="create"&&e.length===4){const a=await h(d,"member",["email","membership_role"]);return(typeof a.member.email!="string"||!a.member.email.trim())&&y("INPUT","Informe o email do membro",422),await l(t,`Convidar ${a.member.email} para a conta ativa?`,"my-account"),_(await o("POST",`${c}/members`,a))}if(n==="members"&&r&&e.length===5&&s==="update"){const a=w(r,"MEMBERSHIP_ID",f),i=await h(d,"member",["status","membership_role","metadata"]);return await l(t,`Alterar membro ${a}?`,a),_(await o("PUT",`${c}/members/${a}`,i))}if(n==="members"&&r&&e.length===5&&s==="resend-invitation"){const a=w(r,"MEMBERSHIP_ID",f);return await l(t,`Reenviar convite do membro ${a}?`,a),_(await o("POST",`${c}/members/${a}/invitation/resend`))}if(n==="entitlements"){const a=`${c}/module-entitlements`;if(e.length===3)return o("GET",a);if(e.length===4&&r==="set"){const i=await h(d,"access",["module_keys"]);return await l(t,"Alterar entitlements da conta ativa?","my-account"),o("PUT",a,i)}}if(n==="member-access"&&r){const a=w(r,"MEMBERSHIP_ID",f),i=`${c}/member-access/${a}`;if(e.length===4)return o("GET",i);if(e.length===5&&s==="set"){const p=await h(d,"access",["permission_keys"]);return await l(t,`Alterar ACL do membro ${a}?`,a),o("PUT",i,p)}}return y("USAGE","Use: genne access my-account members [create|MEMBERSHIP_ID update|MEMBERSHIP_ID resend-invitation]",2)}if(m==="account"){if(t.user?.role!=="admin")return y("USAGE","Use `access my-account` for the active shipper or carrier account",2);const n=w(u,"BUSINESS_ACCOUNT_ID",f),r=e[3],s=e[4],c=e[5];U();const a=`/admin/permissions/business-accounts/${n}`;if(r==="members"&&e.length===4)return _(await o("GET",`${a}/members`));if(r==="members"&&s==="create"&&e.length===5){const i=await h(d,"member",["email","membership_role","workspace_role"]);return(typeof i.member.email!="string"||!i.member.email.trim())&&y("INPUT","Informe o email do membro",422),await l(t,`Criar membro na conta ${n}?`,n),_(await o("POST",`/admin/business-accounts/${n}/members`,i))}if(r==="members"&&s&&e.length===6&&c==="update"){const i=w(s,"MEMBERSHIP_ID",f),p=await h(d,"member",["status","membership_role","workspace_role","metadata"]);return await l(t,`Alterar membro ${i}?`,i),_(await o("PUT",`/admin/business-accounts/${n}/members/${i}`,p))}if(r==="members"&&s&&e.length===6&&c==="resend-invitation"){const i=w(s,"MEMBERSHIP_ID",f);return await l(t,`Reenviar convite do membro ${i}?`,i),_(await o("POST",`/admin/business-accounts/${n}/members/${i}/invitation/resend`))}if(r==="entitlements"){const i=`${a}/module-entitlements`;if(e.length===4)return o("GET",i);if(e.length===5&&s==="set"){const p=await h(d,"access",["module_keys"]);return await l(t,`Alterar entitlements da conta ${n}?`,n),o("PUT",i,p)}}if(r==="member-access"&&s){const i=w(s,"MEMBERSHIP_ID",f),p=`${a}/member-access/${i}`;if(e.length===5)return o("GET",p);if(e.length===6&&c==="set"){const S=await h(d,"access",["permission_keys"]);return await l(t,`Alterar ACL do membro ${i}?`,i),o("PUT",p,S)}}if(r==="member-bases"&&s){const i=w(s,"MEMBERSHIP_ID",f),p=`${a}/member-access/${i}/bases`;if(e.length===5)return o("GET",p);if(e.length===6&&c==="set"){const S=await h(d,"access",["base_ids"]);return await l(t,`Alterar bases do membro ${i}?`,i),o("PUT",p,S)}}}return y("USAGE","Use: genne access catalog | internal list|show USER_ID|set USER_ID | account BUSINESS_ACCOUNT_ID members|entitlements|member-access MEMBERSHIP_ID",2)}b(j,"accessCommand");export{j as accessCommand};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var P=Object.defineProperty;var c=(i,e)=>P(i,"name",{value:e,configurable:!0});const b=["legal_name","trading_name","document","issuing_country_code","legal_identifier","status","account_type","account_types","contact_points","addresses"],S=b.filter(i=>!["status","account_type","account_types"].includes(i)),y=["code","name","origin_address","origin_lat","origin_lng","postal_code","place_id","street","street_number","neighborhood","city","state","state_code","country","geocode_provider","timezone","triage_rules"],w=[...y,"market_id","country_code","currency_code"],N=[...y,"balancing_policy","metadata"],A=["code","name","origin_address","origin_lat","origin_lng","timezone","triage_rules","metadata"],$=["carrier_account_id","target_share_percent","quality_weight","priority_order","allocation_enabled"],v=["limit","cursor","search","min_lng","min_lat","max_lng","max_lat","include_geometry"];function d(i,e,n){return(!i||typeof i!="object"||Array.isArray(i)||!Object.keys(i).length||Object.keys(i).some(a=>!e.includes(a)))&&n.fail("INPUT","Objeto JSON vazio ou com campo n\xE3o suportado",422),i}c(d,"object");function j(i,e){const n=d(i,["cnpj","user_id"],e);return(typeof n.cnpj!="string"||!n.cnpj.trim())&&e.fail("INPUT","Informe cnpj em stdin",422),n.user_id===void 0?{cnpj:n.cnpj}:((typeof n.user_id!="string"||!n.user_id.trim())&&e.fail("INPUT","user_id deve ser UUID em stdin",422),{cnpj:n.cnpj,user_id:e.uuid(n.user_id.trim())})}c(j,"companyConsultBody");function z(i,e){const n=d(i,["user_id","cnpj","send_email"],e);(typeof n.user_id!="string"||!n.user_id.trim())&&e.fail("INPUT","Informe user_id como UUID em stdin",422);const a=e.uuid(n.user_id.trim());return(typeof n.cnpj!="string"||!n.cnpj.trim())&&e.fail("INPUT","Informe cnpj em stdin",422),n.send_email!==void 0&&typeof n.send_email!="boolean"&&e.fail("INPUT","send_email deve ser booleano",422),{user_id:a,cnpj:n.cnpj,send_email:n.send_email??!1}}c(z,"existingUserOnboarding");function g(i,e,n,a){return Array.isArray(i)||n.fail("INPUT",`${a} deve ser uma lista`,422),i.map(r=>d(r,e,n))}c(g,"arrayObject");function h(i,e,n){return(!Array.isArray(i)||i.some(a=>{try{return e.uuid(a),!1}catch{return!0}}))&&e.fail("INPUT",`${n} deve conter somente UUIDs`,422),i}c(h,"uuidList");function O(i,e){const n=d(i,["windows"],e),a=g(n.windows,["weekday","cutoff_time","auto_publish"],e,"windows");for(const r of a)(!Number.isInteger(r.weekday)||r.weekday<0||r.weekday>6||typeof r.cutoff_time!="string"||!/^\d{2}:\d{2}(:\d{2})?$/.test(r.cutoff_time)||r.auto_publish!==void 0&&typeof r.auto_publish!="boolean")&&e.fail("INPUT","Cada janela exige weekday 0..6, cutoff_time HH:MM[:SS] e auto_publish booleano opcional",422);return{windows:a}}c(O,"cutoffBody");function C(i,e){const n=d(i,["reference_zone_public_ids"],e);return h(n.reference_zone_public_ids,e,"reference_zone_public_ids"),n}c(C,"serviceAreaBody");function D(i,e){const n=d(i,["reference_zone_public_ids","name"],e);return h(n.reference_zone_public_ids,e,"reference_zone_public_ids"),(typeof n.name!="string"||!n.name.trim())&&e.fail("INPUT","Informe o nome do agrupamento",422),n}c(D,"regionGroupBody");function I(i,e){const n=d(i,$,e);return typeof n.carrier_account_id!="string"&&e.fail("INPUT","Informe carrier_account_id",422),e.uuid(n.carrier_account_id),(typeof n.target_share_percent!="number"||!Number.isFinite(n.target_share_percent)||n.target_share_percent<=0||n.target_share_percent>100)&&e.fail("INPUT","target_share_percent deve estar entre 0 e 100",422),n.quality_weight!==void 0&&(typeof n.quality_weight!="number"||!Number.isFinite(n.quality_weight))&&e.fail("INPUT","quality_weight inv\xE1lido",422),n.priority_order!==void 0&&(!Number.isInteger(n.priority_order)||n.priority_order<0)&&e.fail("INPUT","priority_order inv\xE1lido",422),n.allocation_enabled!==void 0&&typeof n.allocation_enabled!="boolean"&&e.fail("INPUT","allocation_enabled deve ser booleano",422),n}c(I,"carrierShare");function T(i,e){const n=new URLSearchParams;for(const a of i){const r=a.indexOf("="),t=a.slice(0,r),s=a.slice(r+1);(r<1||!v.includes(t)||!s||n.has(t))&&e.fail("USAGE",`Filtro n\xE3o suportado: ${a}`,422),t==="limit"&&(!/^\d+$/.test(s)||Number(s)<1||Number(s)>100)&&e.fail("INPUT","limit inv\xE1lido",422),t==="include_geometry"&&!["true","false"].includes(s)&&e.fail("INPUT","include_geometry inv\xE1lido",422),n.set(t,s)}return n.size?`?${n}`:""}c(T,"referenceZoneQuery");function U(i,e,n=["account_type","search","limit","cursor"]){const a=new URLSearchParams;for(const r of i){const t=r.indexOf("="),s=r.slice(0,t),u=r.slice(t+1);(t<1||!n.includes(s)||!u||a.has(s))&&e.fail("USAGE",`Filtro n\xE3o suportado: ${r}`,422),s==="account_type"&&!["shipper","carrier"].includes(u)&&e.fail("INPUT","account_type inv\xE1lido",422),s==="limit"&&(!/^\d+$/.test(u)||Number(u)<1||Number(u)>100)&&e.fail("INPUT","limit inv\xE1lido",422),a.set(s,u)}return a.size?`?${a}`:""}c(U,"filters");async function G(i,e){const[,,n,a]=i;if(n==="onboarding-users"&&a==="list"&&i.length>=4)return e.api("GET",`/admin/business-accounts/onboarding-users${U(i.slice(4),e,["search","limit","cursor"])}`);if(n==="list")return e.api("GET",`/admin/business-accounts${U(i.slice(3),e)}`);if(n==="show"&&i.length===4)return e.api("GET",`/admin/business-accounts/${e.uuid(a)}`);if(n==="consult"&&i.length===3)return e.api("POST","/admin/business-accounts/company/consult",j(await e.input(),e));if(n==="onboard-existing-user"&&i.length===3){const r=z(await e.input(),e);return await e.confirm(`Cadastrar usu\xE1rio existente ${r.user_id} na empresa CNPJ ${r.cnpj}? E-mail opcional: ${r.send_email?"ativado (send_email=true)":"desativado (send_email=false)"}.`,r.user_id),e.api("POST","/admin/business-accounts/onboard-existing-user",r)}if(n==="create"&&i.length===3){const r=d(await e.input(),b,e);return(typeof r.legal_name!="string"||!r.legal_name.trim()||!(r.document||r.issuing_country_code&&r.legal_identifier))&&e.fail("INPUT","Informe legal_name e identifica\xE7\xE3o legal",422),await e.confirm(`Criar empresa ${r.legal_name}?`,r.legal_name),e.api("POST","/admin/business-accounts",{business_account:r})}if(a==="update"&&i.length===4){const r=e.uuid(n),t=d(await e.input(),b,e);return await e.confirm(`Alterar empresa ${r}? Campos: ${Object.keys(t).join(", ")}`,r),e.api("PUT",`/admin/business-accounts/${r}`,{business_account:t})}e.fail("USAGE","Use: genne admin companies list|show ID|consult|onboarding-users list|onboard-existing-user|create|ID update",2)}c(G,"company");async function k(i,e){const[,n,a,,r,t,s]=i,u=e.uuid(a),f=n==="carriers",m=`/admin/${n}/${u}/bases`,p=`/admin/${f?"carrier-bases":"bases"}`;if(r==="list"&&i.length===5)return e.api("GET",m);if(r==="create"&&i.length===5){const o=d(await e.input(),f?w:[...w,"balancing_policy","metadata"],e);return(!o.market_id||!/^[A-Z]{2}$/.test(o.country_code??"")||!/^[A-Z]{3}$/.test(o.currency_code??"")||[o.timezone,o.code,o.name].some(_=>typeof _!="string"||!_.trim()))&&e.fail("INPUT","Informe market_id, country_code, currency_code, timezone, code e name",422),e.uuid(o.market_id),await e.confirm(`Criar base ${o.name} em ${u}?`,u),e.api("POST",m,o)}if(r&&t&&i.length>=6){const o=e.uuid(r),_=s==="list"&&i.length===7&&(t==="zone-overrides"||!f&&t==="carrier-shares");if(_||["update","deactivate","reactivate","cutoff-windows","service-area","region-groups"].includes(t)){const l=await e.api("GET",m);(!Array.isArray(l?.data)||!l.data.some(E=>E.id===o))&&e.fail("INPUT","Base n\xE3o pertence \xE0 empresa informada",422)}if(_)return e.api("GET",`${p}/${o}/${t}`);if(t==="update"&&i.length===6){const l=d(await e.input(),f?y:N,e);return await e.confirm(`Alterar base ${o}? Campos: ${Object.keys(l).join(", ")}`,o),e.api("PUT",`${p}/${o}`,l)}if(["deactivate","reactivate"].includes(t)&&i.length===6)return await e.confirm(`${t==="deactivate"?"Desativar":"Reativar"} base ${o}?`,o),e.api("POST",`${p}/${o}/${t}`);if(t==="cutoff-windows"&&["set","update"].includes(s)&&i.length===7){const l=O(await e.input(),e);return await e.confirm(`Substituir hor\xE1rios de corte da base ${o}?`,o),e.api("PUT",`${p}/${o}/cutoff-windows`,l)}if(t==="service-area"&&s==="set"&&i.length===7){const l=C(await e.input(),e);return await e.confirm(`Substituir a cobertura da base ${o}?`,o),e.api("POST",`${p}/${o}/service-area`,l)}if(t==="service-area"&&s==="clear"&&i.length===7)return await e.confirm(`Remover a cobertura da base ${o}?`,o),e.api("DELETE",`${p}/${o}/service-area`);if(t==="region-groups"&&s==="create"&&i.length===7){const l=D(await e.input(),e);return await e.confirm(`Criar agrupamento de regi\xF5es na base ${o}?`,o),e.api("POST",`${p}/${o}/region-groups`,l)}}e.fail("USAGE","Use: genne admin shippers|carriers ACCOUNT_ID bases list|create|BASE_ID update|deactivate|reactivate|cutoff-windows set|service-area set|clear|region-groups create|zone-overrides list (ambos)|carrier-shares list (shipper)",2)}c(k,"bases");async function R(i,e){if(i[0]!=="shipper"||i[1]!=="bases")return null;e.requireRole("shipper");const n=i[2],a="/shipper/bases";if(n==="list"&&i.length===3)return e.api("GET",a);if(n==="create"&&i.length===3){const u=d(await e.input(),A,e);return[u.code,u.name].some(f=>typeof f!="string"||!f.trim())&&e.fail("INPUT","Informe code e name",422),await e.confirm(`Criar base ${u.name} na conta ativa?`,"shipper-bases"),e.api("POST",a,u)}const r=n?e.uuid(n):null,t=i[3];(!r||i.length<5)&&e.fail("USAGE","Use: genne shipper bases list|create|BASE_ID carrier-shares list|create|replace|reference-zone-features list|merge",2);const s=`${a}/${r}`;if(t==="carrier-shares"&&i[4]==="list"&&i.length===5)return e.api("GET",`${s}/carrier-shares`);if(t==="carrier-shares"&&i[4]==="create"&&i.length===5){const u=I(await e.input(),e);return await e.confirm(`Adicionar share de carrier \xE0 base ${r}?`,r),e.api("POST",`${s}/carrier-shares`,u)}if(t==="carrier-shares"&&i[4]==="replace"&&i.length===5){const u=d(await e.input(),["carriers"],e),f=g(u.carriers,$,e,"carriers").map(m=>I(m,e));return await e.confirm(`Substituir os shares de carriers da base ${r}?`,r),e.api("PUT",`${s}/carrier-shares`,{carriers:f})}if(t==="reference-zone-features"&&i[4]==="list"&&i.length>=5)return e.api("GET",`${s}/reference-zone-features${T(i.slice(5),e)}`);if(t==="reference-zone-features"&&i[4]==="merge"&&i.length===5){const u=d(await e.input(),["reference_zone_public_ids","code","name"],e);return h(u.reference_zone_public_ids,e,"reference_zone_public_ids"),await e.confirm(`Mesclar zonas de refer\xEAncia na base ${r}?`,r),e.api("POST",`${s}/reference-zone-features/merge`,u)}e.fail("USAGE","Use: genne shipper bases list|create|BASE_ID carrier-shares list|create|replace|reference-zone-features list|merge",2)}c(R,"selfBases");async function L(i,e){if(i[0]==="carrier"&&i[1]==="bases"&&i[3]==="reference-zone-features"&&i[4]==="list"&&i.length>=5){e.requireRole("carrier");const a=e.uuid(i[2]);return e.api("GET",`/carrier/carrier-bases/${a}/reference-zone-features${T(i.slice(5),e)}`)}const n=await R(i,e);if(n!==null)return n;if(i[0]==="company"&&i[1]==="my-account"){["shipper","carrier"].includes(e.user?.role)||e.fail("HTTP_403","Acesso negado",403);const a=`/${e.user.role}/business-account`;if(i[2]==="show"&&i.length===3)return e.api("GET",a);if(i[2]==="update"&&i.length===3){const r=d(await e.input(),S,e);return await e.confirm(`Alterar empresa ativa? Campos: ${Object.keys(r).join(", ")}`,"my-account"),e.api("PUT",a,{business_account:r})}e.fail("USAGE","Use: genne company my-account show|update",2)}return i[0]!=="admin"||!["companies","shippers","carriers"].includes(i[1])?null:(e.requireRole("admin"),i[1]==="companies"?G(i,e):i[3]==="bases"&&i.length>=5?k(i,e):null)}c(L,"companiesCommand");export{L as companiesCommand};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var E=Object.defineProperty;var l=(i,e)=>E(i,"name",{value:e,configurable:!0});import{readFile as k,stat as $}from"node:fs/promises";import{basename as _,extname as S}from"node:path";const I=new Set(["pt-BR","en","es"]),g=/^[a-z0-9]+(?:-[a-z0-9]+)*$/,C=new Set(["id","public_id","translation_group_id","published_at","inserted_at","updated_at","available_locales"]),w=new Set(["locale","slug","title","description","author","category","tags","cover_image_url","content_markdown","content_html","published"]),N=new Set(["locale","question","answer","category","tags","paths","route_keys","featured_on_home","position","published"]);function m(i,e){return i===void 0?!1:(typeof i!="boolean"&&e.fail("INPUT","published deve ser booleano",422),i)}l(m,"published");function T(i,e){return(i.length!==1||!i[0].startsWith("key=")||i[0].length<20||i[0].length>259)&&e.fail("USAGE","Informe key=CHAVE est\xE1vel de 16 a 255 caracteres",2),i[0].slice(4)}l(T,"createKey");function P(i,e){const o=i?.startsWith("version=")?i.slice(8):"";return(!/^[1-9][0-9]*$/.test(o)||!Number.isSafeInteger(Number(o)))&&e.fail("USAGE","Informe version=N retornada pelo Admin",2),Number(o)}l(P,"expectedVersion");function U(i,e,o){const n=p(i,e);h(n,e),c(n,o,e),Object.keys(n).length===0&&e.fail("INPUT","Informe ao menos um campo para alterar",422);const t={};for(const[a,s]of Object.entries(n))a==="published"?t[a]=m(s,e):a==="locale"?t[a]=b(s,e):["tags","paths","route_keys"].includes(a)?t[a]=d(s,a,e):a==="featured_on_home"?(typeof s!="boolean"&&e.fail("INPUT","featured_on_home deve ser booleano",422),t[a]=s):a==="position"?((!Number.isInteger(s)||s<0)&&e.fail("INPUT","position deve ser inteiro n\xE3o negativo",422),t[a]=s):(t[a]=u(s,a,e),a==="slug"&&!g.test(t[a])&&e.fail("INPUT","slug inv\xE1lido",422),a==="question"&&t[a].length<5&&e.fail("INPUT","question deve ter ao menos 5 caracteres",422),a==="answer"&&t[a].length<5&&e.fail("INPUT","answer deve ter ao menos 5 caracteres",422));return t}l(U,"partialInput");function v(i,e,o){const n=p(i,e);(!Number.isSafeInteger(n.version)||n.version<1)&&e.fail("INPUT","version deve ser inteiro positivo retornado pelo Admin",422);const{version:t,...a}=n;return{version:t,payload:o(a,e)}}l(v,"versionedInput");function A(i,e,o){const n=new URLSearchParams;for(const t of i){const a=t.indexOf("="),s=t.slice(0,a),r=t.slice(a+1);(a<1||!e.includes(s)||!r||n.has(s))&&o.fail("USAGE",`Filtro n\xE3o suportado: ${t}`,422),s==="locale"&&!I.has(r)&&o.fail("INPUT","Locale inv\xE1lido",422),s==="translation_group_id"&&o.uuid(r),s==="featured"&&!["true","false"].includes(r)&&o.fail("INPUT","Featured deve ser true ou false",422),n.set(s,r)}return n.size?`?${n}`:""}l(A,"query");function p(i,e){return(!i||typeof i!="object"||Array.isArray(i))&&e.fail("INPUT","A entrada deve ser um objeto JSON",422),i}l(p,"parseObject");function h(i,e){const o=Object.keys(i).find(n=>C.has(n));o&&e.fail("INPUT",`Campo n\xE3o permitido: ${o}`,422)}l(h,"rejectForbidden");function c(i,e,o){const n=Object.keys(i).find(t=>!e.has(t));n&&o.fail("INPUT",`Campo n\xE3o permitido: ${n}`,422)}l(c,"rejectUnknown");function u(i,e,o){return(typeof i!="string"||!i.trim())&&o.fail("INPUT",`${e} \xE9 obrigat\xF3rio`,422),i.trim()}l(u,"requireText");function d(i,e,o){return(!Array.isArray(i)||i.some(n=>typeof n!="string"||!n.trim()))&&o.fail("INPUT",`${e} deve ser uma lista de textos`,422),i.map(n=>n.trim())}l(d,"requireStringList");function b(i,e){if(i!==void 0)return(typeof i!="string"||!I.has(i))&&e.fail("INPUT","Locale inv\xE1lido",422),i}l(b,"optionalLocale");function O(i,e){const o=p(i,e);h(o,e),c(o,w,e);const n={slug:u(o.slug,"slug",e),title:u(o.title,"title",e),description:u(o.description,"description",e),author:u(o.author,"author",e),category:u(o.category,"category",e),tags:o.tags===void 0?[]:d(o.tags,"tags",e),content_markdown:u(o.content_markdown,"content_markdown",e),content_html:u(o.content_html,"content_html",e),published:m(o.published,e)},t=b(o.locale,e);return t&&(n.locale=t),g.test(n.slug)||e.fail("INPUT","slug inv\xE1lido",422),o.cover_image_url!==void 0&&((typeof o.cover_image_url!="string"||!o.cover_image_url.trim())&&e.fail("INPUT","cover_image_url deve ser texto n\xE3o vazio",422),n.cover_image_url=o.cover_image_url.trim()),n}l(O,"blogCreateInput");function F(i,e){const o=p(i,e);h(o,e),c(o,N,e);const n=u(o.question,"question",e),t=u(o.answer,"answer",e);n.length<5&&e.fail("INPUT","question deve ter ao menos 5 caracteres",422),t.length<5&&e.fail("INPUT","answer deve ter ao menos 5 caracteres",422),o.featured_on_home!==void 0&&typeof o.featured_on_home!="boolean"&&e.fail("INPUT","featured_on_home deve ser booleano",422),o.position!==void 0&&(!Number.isInteger(o.position)||o.position<0)&&e.fail("INPUT","position deve ser inteiro maior ou igual a zero",422);const a=o.paths===void 0?[]:d(o.paths,"paths",e),s=o.route_keys===void 0?[]:d(o.route_keys,"route_keys",e);a.length===0&&s.length===0&&e.fail("INPUT","Informe ao menos um path ou route_key",422);const r={question:n,answer:t,category:u(o.category,"category",e),tags:o.tags===void 0?[]:d(o.tags,"tags",e),paths:a,published:m(o.published,e)},y=b(o.locale,e);return y&&(r.locale=y),s.length&&(r.route_keys=s),o.featured_on_home!==void 0&&(r.featured_on_home=o.featured_on_home),o.position!==void 0&&(r.position=o.position),r}l(F,"faqCreateInput");async function f(i,e,o,n){await i.confirm(`${e}
|
|
2
|
+
${JSON.stringify(o,null,2)}`,n)}l(f,"confirmCreate");function q(i,e){return(!i?.data?.id||typeof i.data.published!="boolean")&&e.fail("RESPONSE","Resposta inv\xE1lida da API"),i}l(q,"assertCreated");async function G(i,e){if(i[0]!=="admin"||!["blog","faqs"].includes(i[1]))return null;if(e.requireRole("admin"),i[1]==="blog"&&i[2]==="posts"&&i[3]==="list")return e.api("GET",`/admin/blog/posts${A(i.slice(4),["locale","translation_group_id"],e)}`);if(i[1]==="blog"&&i[2]==="posts"&&i[3]==="create"){const o=O(await e.input(),e),n=T(i.slice(4),e);return await f(e,"Criar post?",o,o.slug),q(await e.api("POST","/admin/blog/posts",o,{idempotencyKey:n}))}if(i[1]==="blog"&&i[2]==="posts"&&i[3]&&i[4]==="update"&&i.length===5){const o=e.uuid(i[3]),{version:n,payload:t}=v(await e.input(),e,(a,s)=>U(a,s,w));return await f(e,"Atualizar post?",t,o),e.api("PUT",`/admin/blog/posts/${o}`,t,{ifMatch:`"${n}"`})}if(i[1]==="blog"&&i[2]==="posts"&&i[3]&&["publish","unpublish"].includes(i[4])&&i.length===6){const o=e.uuid(i[3]),n=P(i[5],e),t={published:i[4]==="publish"};return await f(e,"Alterar publica\xE7\xE3o do post?",t,o),e.api("PUT",`/admin/blog/posts/${o}`,t,{ifMatch:`"${n}"`})}if(i[1]==="blog"&&i[2]==="posts"&&i[3]&&i[4]==="delete"&&i.length===5){const o=e.uuid(i[3]);return await e.confirm("Excluir post?",o),e.api("DELETE",`/admin/blog/posts/${o}`)}if(i[1]==="blog"&&i[2]==="images"&&i[3]==="upload"&&i.length===5){const o=i[4],n={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp",".gif":"image/gif"}[S(o).toLowerCase()];n||e.fail("INPUT","Imagem deve ser PNG, JPEG, WebP ou GIF",422);let t,a;try{t=await $(o),t.isFile()&&t.size<=8*1024*1024&&(a=await k(o))}catch{e.fail("INPUT","N\xE3o foi poss\xEDvel ler a imagem",422)}(!t.isFile()||t.size>8*1024*1024)&&e.fail("INPUT","Imagem inv\xE1lida ou maior que 8 MiB",422);const s=new FormData;return s.append("image",new Blob([a],{type:n}),_(o)),await e.confirm("Enviar imagem para o blog?",_(o)),e.api("POST","/admin/blog/uploads/images",s)}if(i[1]==="faqs"&&i[2]==="list")return e.api("GET",`/admin/faqs${A(i.slice(3),["path","route_key","locale","category","featured","q"],e)}`);if(i[1]==="faqs"&&i[2]==="create"){const o=F(await e.input(),e),n=T(i.slice(3),e);return await f(e,"Criar FAQ?",o,o.question),q(await e.api("POST","/admin/faqs",o,{idempotencyKey:n}))}if(i[1]==="faqs"&&i[2]&&i[3]==="update"&&i.length===4){const o=e.uuid(i[2]),{version:n,payload:t}=v(await e.input(),e,(a,s)=>U(a,s,N));return await f(e,"Atualizar FAQ?",t,o),e.api("PUT",`/admin/faqs/${o}`,t,{ifMatch:`"${n}"`})}if(i[1]==="faqs"&&i[2]&&["publish","unpublish"].includes(i[3])&&i.length===5){const o=e.uuid(i[2]),n=P(i[4],e),t={published:i[3]==="publish"};return await f(e,"Alterar publica\xE7\xE3o da FAQ?",t,o),e.api("PUT",`/admin/faqs/${o}`,t,{ifMatch:`"${n}"`})}if(i[1]==="faqs"&&i[2]&&i[3]==="delete"&&i.length===4){const o=e.uuid(i[2]);return await e.confirm("Excluir FAQ?",o),e.api("DELETE",`/admin/faqs/${o}`)}e.fail("USAGE","Use: genne admin blog posts list|create key=CHAVE|ID update|ID publish|unpublish version=N|ID delete | blog images upload PATH | faqs list|create key=CHAVE|ID update|ID publish|unpublish version=N|ID delete",2)}l(G,"contentCommand");export{G as contentCommand};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var A=Object.defineProperty;var d=(a,i)=>A(a,"name",{value:i,configurable:!0});const c=new Set(["novo","em_contato","qualificado","perdido","convertido"]);function w(a,i,e){const t=new URLSearchParams;for(const n of a){const l=n.indexOf("="),r=n.slice(0,l),s=n.slice(l+1);(l<1||!i.includes(r)||!s||t.has(r))&&e.fail("USAGE",`Filtro n\xE3o suportado: ${n}`,422),r==="status"&&!c.has(s)&&e.fail("INPUT","Status inv\xE1lido",422),r==="limit"&&(!/^\d+$/.test(s)||Number(s)<1||Number(s)>100)&&e.fail("INPUT","Limit deve estar entre 1 e 100",422),t.set(r,s)}return t.size?`?${t}`:""}d(w,"query");function f(a){if(!a||typeof a!="object")return a;const{assigned_admin_id:i,...e}=a;return e}d(f,"projectLead");function _(a){if(!a||typeof a!="object")return a;const{admin_id:i,metadata:e,...t}=a;return t}d(_,"projectEvent");function o(a){if(!a?.data||typeof a.data!="object")return a;const i=a.data;return i.lead?{...a,data:{lead:f(i.lead),events:Array.isArray(i.events)?i.events.map(_):i.events}}:i.id?{...a,data:f(i)}:a}d(o,"projectLeadDetail");function S(a){return a?.data?Array.isArray(a.data)?{...a,data:a.data.map(f)}:o(a):a}d(S,"projectLeadList");async function m(a,i){const e=await i.api("GET",`/admin/crm/leads/${a}`);return(e?.data?.lead?.id!==a||!Array.isArray(e?.data?.events))&&i.fail("RESPONSE","Resposta inv\xE1lida da API"),e}d(m,"loadLead");async function y(a){const i=await a.api("GET","/admin/crm/assignees");return(!Array.isArray(i?.data)||i.data.some(e=>!e||typeof e.id!="string"||typeof e.name!="string"||typeof e.email!="string"))&&a.fail("RESPONSE","Resposta inv\xE1lida da API"),i.data.map(({id:e,name:t,email:n})=>({id:e,name:t,email:n}))}d(y,"loadAssignees");async function g(a,i){if(a[0]!=="admin"||a[1]!=="crm")return null;if(i.requireRole("admin"),a[2]==="assignees"&&a.length===3)return{data:await y(i)};if(a[2]!=="leads")return null;if(a[3]==="list"){const t=await i.api("GET",`/admin/crm/leads${w(a.slice(4),["status","search","limit","cursor"],i)}`);return S(t)}if(a[3]==="show"&&a.length===5){const t=i.uuid(a[4]);return o(await i.api("GET",`/admin/crm/leads/${t}`))}const e=i.uuid(a[3]);if(a[4]==="status"&&a.length===5){const t=await i.input();(!t||typeof t!="object"||Array.isArray(t)||Object.keys(t).length!==1||typeof t.new_status!="string"||!c.has(t.new_status))&&i.fail("INPUT","Informe somente new_status com um status v\xE1lido em JSON pelo stdin",422);const n=await m(e,i);return await i.confirm(`Alterar status do lead ${e}?
|
|
2
|
+
${JSON.stringify({lead:o(n).data,new_status:t.new_status},null,2)}`,e),await i.api("PATCH",`/admin/crm/leads/${e}/status`,t),o(await i.api("GET",`/admin/crm/leads/${e}`))}if(a[4]==="note"&&a.length===5){const t=await i.input();(!t||typeof t!="object"||Array.isArray(t)||Object.keys(t).length!==1||typeof t.note!="string"||!t.note.trim()||t.note.length>2e3)&&i.fail("INPUT","Informe somente note com 1 a 2000 caracteres em JSON pelo stdin",422);const n=await m(e,i);return await i.confirm(`Adicionar nota ao lead ${e}?
|
|
3
|
+
${JSON.stringify({lead:o(n).data,note:t.note},null,2)}`,e),await i.api("POST",`/admin/crm/leads/${e}/notes`,t),o(await i.api("GET",`/admin/crm/leads/${e}`))}if(a[4]==="assign"&&a.length===5){const t=await i.input();(!t||typeof t!="object"||Array.isArray(t)||Object.keys(t).length!==1||typeof t.admin_id!="string")&&i.fail("INPUT","Informe somente admin_id como UUID em JSON pelo stdin",422);const n=i.uuid(t.admin_id),[l,r]=await Promise.all([m(e,i),y(i)]),s=r.find(p=>p?.id===n);s||i.fail("INPUT","admin_id n\xE3o est\xE1 entre os respons\xE1veis eleg\xEDveis",422),await i.confirm(`Atribuir lead ${e}?
|
|
4
|
+
${JSON.stringify({lead:o(l).data,assignee:s},null,2)}`,e);const u=await i.api("PATCH",`/admin/crm/leads/${e}/assign`,{admin_id:n});return(u?.data?.id!==e||u?.data?.assigned_admin_id!==n)&&i.fail("RESPONSE","Resposta inv\xE1lida da API"),u}i.fail("USAGE","Use: genne admin crm assignees | leads list|show LEAD_ID|LEAD_ID status|note|assign",2)}d(g,"crmCommand");export{g as crmCommand};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var v=Object.defineProperty;var o=(e,i)=>v(e,"name",{value:i,configurable:!0});import{jsonBody as l,requireRole as w}from"./operational-input.js";const u=/^[A-Za-z0-9._:-]+$/,I=["flow_id","connection_id","base_id","trigger","trigger_key","schedule","timezone","enabled","policies"],A=["enabled","schedule","timezone","policies","flow_version_id","expected_current_version_id"],T=["execution_id","device_id","records","next_cursor","checkpoint","idempotency_key"],y=["external_id","external_base_code","order_id","external_shipper_label","provider_status","provider_status_label","provider_failure_reason","provider_failure_reason_label","order_requested_at","destination_address","postal_code","destination_complement","packages_count","nfe_key","recipient_doc","recipient_name","recipient_phone","recipient_email","metadata"],c=["run_id","base_id","flow_version","page_url","instruction","fields","snapshot"];function a(e,i){e.fail("INPUT",i,422)}o(a,"fail");function d(e,i,n){if(e!==void 0)return e===null&&a(n,`${i} n\xE3o pode ser nulo`),n.uuid(e),e}o(d,"uuid");function t(e,i,n,{nullable:r=!1,max:s}={}){return e===void 0||r&&e===null||((typeof e!="string"||!r&&!e.trim())&&a(n,`${i} inv\xE1lido`),s!==void 0&&e.length>s&&a(n,`${i} excede o limite do contrato`)),e}o(t,"optionalString");function _(e,i,n,{nullable:r=!1}={}){return e===void 0||r&&e===null||(!e||typeof e!="object"||Array.isArray(e))&&a(n,`${i} deve ser um objeto`),e}o(_,"optionalObject");function m(e,i,n){return e!==void 0&&typeof e!="boolean"&&a(n,`${i} deve ser booleano`),e}o(m,"optionalBoolean");function f(e,i,n,{nullable:r=!1}={}){return e===void 0||r&&e===null?e:d(e,i,n)}o(f,"optionalUuid");function g(e,i){return(typeof e!="string"||e.length<16||e.length>128||!u.test(e))&&a(i,"idempotency_key deve ter de 16 a 128 caracteres"),e}o(g,"idempotencyKey");function E(e,i){return(typeof e!="string"||e.length<8||e.length>128||!u.test(e))&&a(i,"device_id deve ter de 8 a 128 caracteres alfanum\xE9ricos"),e}o(E,"deviceId");function h(e,i){return e===void 0||(!Array.isArray(e)||e.length<1||e.length>5||e.some(n=>!n||typeof n!="object"||Array.isArray(n)))&&a(i,"policies deve conter de 1 a 5 objetos"),e}o(h,"policies");function S(e,i){d(e.flow_id,"flow_id",i),f(e.connection_id,"connection_id",i),f(e.base_id,"base_id",i,{nullable:!0}),t(e.trigger,"trigger",i),t(e.trigger_key,"trigger_key",i,{nullable:!0,max:100}),_(e.schedule,"schedule",i),t(e.timezone,"timezone",i),m(e.enabled,"enabled",i),h(e.policies,i)}o(S,"validateFlowInstallationCreate");function D(e,i){Object.keys(e).length===0&&a(i,"Informe ao menos um campo para atualizar"),m(e.enabled,"enabled",i),_(e.schedule,"schedule",i),t(e.timezone,"timezone",i),h(e.policies,i),f(e.flow_version_id,"flow_version_id",i),f(e.expected_current_version_id,"expected_current_version_id",i)}o(D,"validateFlowInstallationUpdate");function $(e,i){_(e,"input",i);for(const[n,r]of Object.entries(e))(!/^[^\n\r]{1,255}$/.test(n)||typeof r!="string"||r.length>500)&&a(i,"input deve conter apenas valores string de at\xE9 500 caracteres");return e}o($,"validateRunInput");function O(e,i){(!e||typeof e!="object"||Array.isArray(e)||Object.keys(e).some(n=>!y.includes(n)))&&a(i,"records cont\xE9m um item inv\xE1lido"),(e.external_id===void 0||e.order_requested_at===void 0||e.destination_address===void 0||e.packages_count===void 0)&&a(i,"cada record deve conter external_id, order_requested_at, destination_address e packages_count"),t(e.external_id,"external_id",i,{max:255}),t(e.external_base_code,"external_base_code",i,{max:255}),t(e.order_id,"order_id",i,{max:255}),t(e.external_shipper_label,"external_shipper_label",i,{max:255}),e.provider_status!==void 0&&!(typeof e.provider_status=="string"&&e.provider_status.length>0&&e.provider_status.length<=255||Number.isInteger(e.provider_status))&&a(i,"provider_status inv\xE1lido"),t(e.provider_status_label,"provider_status_label",i,{max:255}),e.provider_failure_reason!==void 0&&!(typeof e.provider_failure_reason=="string"&&e.provider_failure_reason.length>0&&e.provider_failure_reason.length<=255||Number.isInteger(e.provider_failure_reason))&&a(i,"provider_failure_reason inv\xE1lido"),t(e.provider_failure_reason_label,"provider_failure_reason_label",i,{max:255}),t(e.order_requested_at,"order_requested_at",i,{max:100}),t(e.destination_address,"destination_address",i,{max:2e3}),t(e.postal_code,"postal_code",i,{max:30}),t(e.destination_complement,"destination_complement",i,{max:255}),(!Number.isInteger(e.packages_count)||e.packages_count<1||e.packages_count>1e5)&&a(i,"packages_count deve ser um inteiro positivo"),t(e.nfe_key,"nfe_key",i,{max:255}),t(e.recipient_doc,"recipient_doc",i,{max:255}),t(e.recipient_name,"recipient_name",i,{max:255}),t(e.recipient_phone,"recipient_phone",i,{max:255}),t(e.recipient_email,"recipient_email",i,{max:255}),_(e.metadata,"metadata",i)}o(O,"validateImportRecord");function R(e,i){d(e.execution_id,"execution_id",i),E(e.device_id,i),(!Array.isArray(e.records)||e.records.length>100)&&a(i,"records deve conter de 0 a 100 itens");for(const n of e.records)O(n,i);return t(e.next_cursor,"next_cursor",i),_(e.checkpoint,"checkpoint",i),e}o(R,"validateOrderImport");function U(e,i){d(e.run_id,"run_id",i),d(e.base_id,"base_id",i),e.flow_version!==1&&a(i,"flow_version deve ser 1"),t(e.page_url,"page_url",i,{max:2e3});try{const n=new URL(e.page_url);["http:","https:"].includes(n.protocol)||a(i,"page_url deve usar HTTP ou HTTPS")}catch{a(i,"page_url inv\xE1lida")}t(e.instruction,"instruction",i,{max:500}),(!Array.isArray(e.fields)||e.fields.length<1||e.fields.length>20||new Set(e.fields).size!==e.fields.length||e.fields.some(n=>typeof n!="string"||!/^[A-Za-z][A-Za-z0-9_]{0,63}$/.test(n)))&&a(i,"fields deve conter de 1 a 20 nomes \xFAnicos v\xE1lidos"),t(e.snapshot,"snapshot",i,{max:8e3})}o(U,"validateExtraction");function N(e){return e[0]==="providers"?e[1]==="list"||e[2]==="activate":e[0]==="grants"&&e[2]==="flow-installations"?["list","create"].includes(e[3]):e[0]==="flow-installations"?["update","run"].includes(e[2]):e[0]==="grants"&&e[2]==="order-import-batches"?e[3]==="create":e[0]==="grants"&&e[2]==="extractions"?e[3]==="preview":!1}o(N,"isNewDesktopCommand");async function z(e,i){if(e[0]!=="carrier"||e[1]!=="desktop")return null;const n=e.slice(2);if(!N(n))return null;if(w(i,["carrier"]),n[0]==="providers"&&n[1]==="list")return n.length!==2&&i.fail("USAGE","Use: carrier desktop providers list",2),i.api("GET","/carrier/desktop/providers");if(n[0]==="providers"&&n[2]==="activate"){n.length!==3&&i.fail("USAGE","Use: carrier desktop providers PROVIDER_ID activate",2);const r=d(n[1],"provider_id",i);return await i.confirm(`Ativar o provider Desktop ${r}?`,r),i.api("PUT",`/carrier/desktop/providers/${r}/activation`,{})}if(n[0]==="grants"&&n[2]==="flow-installations"){(!["list","create"].includes(n[3])||n.length!==4)&&i.fail("USAGE","Use: carrier desktop grants GRANT_ID flow-installations list|create",2);const r=d(n[1],"grant_id",i);if(n[3]==="list")return i.api("GET",`/carrier/desktop/provider-grants/${r}/flow-installations`);const s=l(await i.input(),I,["flow_id"],i);return S(s,i),await i.confirm(`Criar instala\xE7\xE3o Desktop no grant ${r}?`,r),i.api("POST",`/carrier/desktop/provider-grants/${r}/flow-installations`,s,{withStatus:!0})}if(n[0]==="flow-installations"){n.length!==3&&i.fail("USAGE","Use: carrier desktop flow-installations INSTALLATION_ID update|run",2);const r=d(n[1],"installation_id",i);if(n[2]==="update"){const p=l(await i.input(),A,[],i);return D(p,i),await i.confirm(`Atualizar a instala\xE7\xE3o Desktop ${r}?`,r),i.api("PATCH",`/carrier/desktop/flow-installations/${r}`,p)}const s=l(await i.input(),["idempotency_key","input"],["idempotency_key","input"],i);return g(s.idempotency_key,i),$(s.input,i),await i.confirm(`Executar a instala\xE7\xE3o Desktop ${r}?`,r),i.api("POST",`/carrier/desktop/flow-installations/${r}/runs`,s,{withStatus:!0})}if(n[0]==="grants"&&n[2]==="order-import-batches"){(n.length!==4||n[3]!=="create")&&i.fail("USAGE","Use: carrier desktop grants GRANT_ID order-import-batches create",2);const r=d(n[1],"grant_id",i),s=l(await i.input(),T,["execution_id","device_id","records","idempotency_key"],i);R(s,i);const p=g(s.idempotency_key,i),{idempotency_key:b,...k}=s;return await i.confirm(`Importar ${s.records.length} pedido(s) no grant Desktop ${r}?`,r),i.api("POST",`/carrier/desktop/provider-grants/${r}/order-import-batches`,k,{idempotencyKey:p,withStatus:!0})}if(n[0]==="grants"&&n[2]==="extractions"){(n.length!==4||n[3]!=="preview")&&i.fail("USAGE","Use: carrier desktop grants GRANT_ID extractions preview",2);const r=d(n[1],"grant_id",i),s=l(await i.input(),c,c,i);return U(s,i),await i.confirm(`Executar pr\xE9via de extra\xE7\xE3o Desktop no grant ${r}?`,r),i.api("POST",`/carrier/desktop/provider-grants/${r}/extractions`,s)}}o(z,"desktopIntegrationsCommand");export{z as desktopIntegrationsCommand};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var U=Object.defineProperty;var p=(n,e)=>U(n,"name",{value:e,configurable:!0});import{appendLocalFile as S}from"../local-file.js";import{jsonBody as c,query as O,requireRole as k}from"./operational-input.js";const I=["id","sequence","type","name","address","lat","lng","is_fixed","stop_kind","reference_kind","reference_base_id","order_constraint","service_duration_seconds","packages_count","notes"],A=["name","return_to_start","driver_payment_profile_public_id","waypoints"],E=["locations","waypoints","optimize","optimize_start","optimize_end","return_to_start","current_location","vehicle_type"],z=["waypoint_id","lat","lng","address","type","is_fixed","stop_kind","reference_kind","reference_base_id","order_constraint"],F={".csv":"text/csv",".xls":"application/vnd.ms-excel",".xlsx":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",".pdf":"application/pdf"},R=50*1024*1024;function T(n,e){(!Array.isArray(n)||n.length<2||n.length>500)&&e.fail("INPUT","A rota exige de 2 a 500 waypoints",422);const i=n.filter(o=>!Number.isFinite(o.lat)||!Number.isFinite(o.lng)||Math.abs(o.lat)>90||Math.abs(o.lng)>180);return{valid:i.length===0,missing:i.map(o=>({id:o.id??null,address:o.address??null}))}}p(T,"coordinates");function v(n,e){const i=c(n,I,["type"],e);return i.id&&e.uuid(i.id),i}p(v,"waypointInput");function M(n,e){if(typeof n=="string")return n.trim()||e.fail("INPUT","Cada localiza\xE7\xE3o deve ter um endere\xE7o",422),n;const i=c(n,z,[],e),o=typeof i.address=="string"&&i.address.trim().length>0,t=Number.isFinite(i.lat)&&Number.isFinite(i.lng)&&Math.abs(i.lat)<=90&&Math.abs(i.lng)<=180;return!o&&!t&&e.fail("INPUT","Cada localiza\xE7\xE3o exige address ou lat/lng v\xE1lidos",422),i.lat!==void 0&&(!Number.isFinite(i.lat)||Math.abs(i.lat)>90)&&e.fail("INPUT","lat inv\xE1lido",422),i.lng!==void 0&&(!Number.isFinite(i.lng)||Math.abs(i.lng)>180)&&e.fail("INPUT","lng inv\xE1lido",422),i.type!==void 0&&!["start","end","stop"].includes(i.type)&&e.fail("INPUT","type inv\xE1lido",422),i.is_fixed!==void 0&&typeof i.is_fixed!="boolean"&&e.fail("INPUT","is_fixed deve ser booleano",422),i.stop_kind!==void 0&&i.stop_kind!==null&&!["delivery","pickup","pause"].includes(i.stop_kind)&&e.fail("INPUT","stop_kind inv\xE1lido",422),i.reference_kind!==void 0&&i.reference_kind!==null&&!["base","current_location","custom"].includes(i.reference_kind)&&e.fail("INPUT","reference_kind inv\xE1lido",422),i.reference_base_id!==void 0&&i.reference_base_id!==null&&e.uuid(i.reference_base_id),i.order_constraint!==void 0&&i.order_constraint!==null&&!["auto","first","last"].includes(i.order_constraint)&&e.fail("INPUT","order_constraint inv\xE1lido",422),i}p(M,"planningLocationInput");function j(n,e){const i=c(n,E,[],e),o=["locations","waypoints"].filter(l=>i[l]!==void 0);o.length!==1&&e.fail("INPUT","Informe locations ou waypoints, mas n\xE3o os dois",422);const t=i[o[0]];(!Array.isArray(t)||t.length<2||t.length>500)&&e.fail("INPUT","O planejamento exige de 2 a 500 localiza\xE7\xF5es",422),i[o[0]]=t.map(l=>M(l,e));for(const l of["optimize","optimize_start","optimize_end","return_to_start"])i[l]!==void 0&&typeof i[l]!="boolean"&&e.fail("INPUT",`${l} deve ser booleano`,422);if(i.optimize===void 0&&(i.optimize=!1),i.current_location!==void 0){const l=c(i.current_location,["lat","lng"],["lat","lng"],e);(!Number.isFinite(l.lat)||Math.abs(l.lat)>90||!Number.isFinite(l.lng)||Math.abs(l.lng)>180)&&e.fail("INPUT","current_location inv\xE1lida",422)}return i.vehicle_type!==void 0&&!["car","motorcycle","bicycle"].includes(i.vehicle_type)&&e.fail("INPUT","vehicle_type inv\xE1lido",422),i}p(j,"planInput");function C(n,e){const i={};for(const o of n){const t=o.indexOf("="),l=t>0?o.slice(0,t):"",f=t>0?o.slice(t+1):"";if((!f||!["column_mapping","persist_order_id_choice"].includes(l)||i[l]!==void 0)&&e.fail("USAGE",`Op\xE7\xE3o de importa\xE7\xE3o n\xE3o suportada: ${o}`,2),l==="persist_order_id_choice"){["true","false"].includes(f)||e.fail("INPUT","persist_order_id_choice deve ser true ou false",422),i[l]=f==="true";continue}let r;try{r=JSON.parse(f)}catch{e.fail("INPUT","column_mapping deve ser JSON",422)}(!r||typeof r!="object"||Array.isArray(r))&&e.fail("INPUT","column_mapping deve ser um objeto",422),i[l]=r}return i}p(C,"importOptions");async function G(n,e,i){const o=new FormData;await S(o,"file",n,F,R,i);for(const[t,l]of Object.entries(C(e,i)))if(t==="column_mapping")for(const[f,r]of Object.entries(l))(!f||typeof r!="string"||!r.trim())&&i.fail("INPUT","column_mapping deve mapear nomes para colunas n\xE3o vazias",422),o.append(`column_mapping[${f}]`,r);else o.append(t,String(l));return i.api("POST","/routes/imports/preview",o)}p(G,"importPreview");async function y(n,e){const i=await e.api("GET",`/routes/${n}`);return(!i.data||!Array.isArray(i.data.waypoints))&&e.fail("RESPONSE","Rota sem waypoints v\xE1lidos"),i.data}p(y,"ownedRoute");function L(n){return n.waypoints.map(e=>({waypoint_id:e.id,lat:e.lat,lng:e.lng,address:e.address,type:e.type,stop_kind:e.stop_kind,reference_kind:e.reference_kind,reference_base_id:e.reference_base_id,order_constraint:e.order_constraint,service_duration_seconds:e.service_duration_seconds}))}p(L,"locations");function N(n,e){const i=c(n,["status","failure_reason_code","failure_observation","failure_authorization_code"],["status"],e);return["pending","delivered","failed"].includes(i.status)||e.fail("INPUT","status inv\xE1lido",422),i.status==="failed"&&(!i.failure_reason_code||!i.failure_observation)&&e.fail("INPUT","Falha exige failure_reason_code e failure_observation",422),i.status!=="failed"&&Object.keys(i).some(o=>o.startsWith("failure_"))&&e.fail("INPUT","Dados de falha s\xF3 s\xE3o aceitos para failed",422),i}p(N,"statusInput");async function W(n,e){if(n[0]!=="driver"||!["routes","places","optimization","calculation"].includes(n[1]))return null;k(e,["driver"]);const[,i,o,t,l,f]=n;if(i==="places"){if(o==="search"&&n.length===4&&t)return e.api("GET",`/places/search?q=${encodeURIComponent(t)}`);if(o==="details"&&n.length===4&&t)return e.api("GET",`/places/details/${encodeURIComponent(t)}`)}if(["optimization","calculation"].includes(i)&&t==="show"&&n.length===4)return e.api("GET",`/${i==="optimization"?"optimize":"calculate"}/${e.uuid(o)}`);if(i!=="routes"&&e.fail("USAGE","Use genne help driver",2),o==="plan"&&t==="create"&&n.length===4){const s=j(await e.input(),e);return await e.confirm("Planejar rota?","plan"),e.api("POST","/plan",s,{withStatus:!0})}if(o==="plan"&&l==="show"&&n.length===5)return e.api("GET",`/plan/${e.uuid(t)}`);if(o==="imports"&&t==="preview"&&n.length>=5){const[s,...u]=n.slice(4);return G(s,u,e)}if(o==="list")return e.api("GET",`/routes${O(n.slice(3),["limit","cursor","status","is_favorite","date_from","date_to","search"],e)}`);if(o==="draft"&&t==="create"&&n.length===4){const s=c(await e.input(),A,["name","waypoints"],e);return(!Array.isArray(s.waypoints)||s.waypoints.length<1)&&e.fail("INPUT","Informe waypoints",422),s.waypoints=s.waypoints.map(u=>v(u,e)),await e.confirm(`Criar draft ${s.name}?`,s.name),e.api("POST","/routes",{route:s},{withStatus:!0})}const r=e.uuid(o),_=`/routes/${r}`;if(t==="show"&&n.length===4)return e.api("GET",_);if(t==="coordinates"&&l==="validate"&&n.length===5){const s=await y(r,e);return{data:T(s.waypoints,e)}}if(t==="waypoints"&&l==="set"&&n.length===5){const s=c(await e.input(),["waypoints"],["waypoints"],e);(!Array.isArray(s.waypoints)||s.waypoints.length<1)&&e.fail("INPUT","Informe waypoints",422);const u=s.waypoints.map(a=>v(a,e));return await y(r,e),await e.confirm(`Salvar waypoints da rota ${r}?`,r),e.api("PUT",_,{route:{waypoints:u}})}if(["optimize","calculate"].includes(t)&&n.length===4){const s=await y(r,e),u=T(s.waypoints,e);return u.valid||e.fail("INPUT",`Coordenadas pendentes: ${JSON.stringify(u.missing)}`,422),await e.confirm(`${t} rota ${r}?`,r),e.api("POST",`/${t}`,{locations:L(s),route_id:r,return_to_start:s.return_to_start===!0},{withStatus:!0})}if(["optimize","calculate"].includes(t)&&l==="apply"&&n.length===6){const s=e.uuid(f),u=c(await e.input(),["expected_waypoint_ids","expected_updated_at"],["expected_waypoint_ids","expected_updated_at"],e),a=await y(r,e);a.is_operational&&e.fail("INPUT","A aplica\xE7\xE3o deste c\xE1lculo exige uma rota manual",422);const d=a.waypoints.map(m=>m.id);(u.expected_updated_at!==a.updated_at||!Array.isArray(u.expected_waypoint_ids)||JSON.stringify(u.expected_waypoint_ids)!==JSON.stringify(d))&&e.fail("INPUT","Rota mudou; confira os waypoints e solicite novo c\xE1lculo",409);const b=await e.api("GET",`/${t}/${s}`),h=b.status==="completed"?b.data:null,w=t==="optimize"?h?.route?.features?.[0]?.properties?.waypoint_order:d.map((m,g)=>g);h?.route||e.fail("INPUT","O job ainda n\xE3o concluiu com geometria aplic\xE1vel",409),(!Array.isArray(w)||w.length!==d.length||new Set(w).size!==w.length||w.some(m=>!Number.isInteger(m)||m<0||m>=d.length))&&e.fail("INPUT","O job ainda n\xE3o concluiu ou n\xE3o retornou ordem aplic\xE1vel",409);const P=w.map((m,g)=>({...v(Object.fromEntries(Object.entries(a.waypoints[m]).filter(([$])=>I.includes($))),e),sequence:g}));return await e.confirm(`Aplicar otimiza\xE7\xE3o ${s} \xE0 rota ${r}?`,r),e.api("PUT",_,{expected_route_snapshot:a,route:{waypoints:P,route:h.route,stats:{...a.stats,total_distance:h.distance,total_time:h.duration,route_signature:h.route_signature,waypoint_etas:h.waypoint_etas}}})}if(t==="start"&&n.length===4)return await y(r,e),await e.confirm(`Iniciar rota ${r}?`,r),e.api("POST",`${_}/start`);if(t==="finish"&&n.length===4)return await y(r,e),await e.confirm(`Concluir rota ${r}?`,r),e.api("POST",`${_}/execution/finish`);if(t==="reactivate"&&n.length===4)return await y(r,e),await e.confirm(`Reativar rota ${r} para hoje?`,r),e.api("POST",`${_}/reactivate`);if(t==="clone"&&n.length===4)return await y(r,e),await e.confirm(`Clonar rota ${r} em um novo draft?`,r),e.api("POST",`${_}/clone`);if(t==="waypoints"&&n.length>=6){const s=e.uuid(l),u=`${_}/execution/waypoints/${s}`;if(f==="failure-policy"&&n.length===6)return e.api("GET",`${u}/failure-policy`);if(["notes","packages"].includes(f)&&n.length===6){const a=f==="notes"?"notes":"packages_count",d=c(await e.input(),[a],[],e);return(a==="notes"?typeof d.notes!="string":!Number.isSafeInteger(d.packages_count)||d.packages_count<0)&&e.fail("INPUT",`${a} inv\xE1lido`,422),await e.confirm(`Atualizar ${f==="notes"?"observa\xE7\xE3o":"quantidade de pacotes"} da parada ${s}?`,s),e.api("POST",`${u}/${f}`,d)}if(f==="navigation"&&n[6]==="start"&&n.length===7){const a=c(await e.input(),["navigation_provider","nav_sdk_version","boot_duration_ms","waypoint_index","packages_count"],[],e);for(const d of["navigation_provider","nav_sdk_version"])a[d]!==void 0&&(typeof a[d]!="string"||!a[d].trim())&&e.fail("INPUT",`${d} inv\xE1lido`,422);for(const d of["boot_duration_ms","waypoint_index","packages_count"])a[d]!==void 0&&(!Number.isSafeInteger(a[d])||a[d]<0)&&e.fail("INPUT",`${d} inv\xE1lido`,422);return await e.confirm(`Registrar in\xEDcio de navega\xE7\xE3o no waypoint ${s}?`,s),e.api("POST",`${u}/navigation/start`,a,{withStatus:!0})}if(f==="check-in"&&n.length===6){const a=c(await e.input(),["lat","lng","accuracy_meters"],["lat","lng"],e);return(!Number.isFinite(a.lat)||Math.abs(a.lat)>90||!Number.isFinite(a.lng)||Math.abs(a.lng)>180||a.accuracy_meters!==void 0&&(!Number.isFinite(a.accuracy_meters)||a.accuracy_meters<0))&&e.fail("INPUT","Informe coordenadas e precis\xE3o num\xE9ricas v\xE1lidas",422),await e.confirm(`Registrar check-in no waypoint ${s}?`,s),e.api("POST",`${u}/check-in`,a)}if(f==="status"&&n.length===6){const a=N(await e.input(),e);return await e.confirm(`Registrar ${a.status} no waypoint ${s}?`,s),e.api("POST",`${u}/status`,a)}if(f==="items"&&["status","enrich"].includes(n[7])&&n.length===8){const a=n[6];if((!a||a==="."||a===".."||a.includes("/"))&&e.fail("USAGE","ITEM_ID inv\xE1lido",2),n[7]==="enrich")return await e.confirm(`Consultar dados do item ${a}?`,a),e.api("POST",`${u}/items/${encodeURIComponent(a)}/enrich`);const d=N(await e.input(),e);return await e.confirm(`Registrar ${d.status} no item ${a}?`,a),e.api("POST",`${u}/items/${encodeURIComponent(a)}/status`,d)}}e.fail("USAGE","Use genne help driver routes",2)}p(W,"driverRoutesCommand");export{W as driverRoutesCommand};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var f=Object.defineProperty;var a=(e,t)=>f(e,"name",{value:t,configurable:!0});import{appendLocalFile as m}from"../local-file.js";const u=new Set(["personal_document_type","personal_document_number","issuing_country_code","cpf","cnpj","mei_cnpj","personal_document_value","cnh_number","naturalness","cnh_state","cnh_security_code","whatsapp_phone","emergency_whatsapp","emergency_contact_relationship","has_antt","antt_status","ownership_pending","has_vehicle","vehicle_owner_is_driver","vehicle_profile","vehicle_plate_state","vehicle_plate_city","vehicle_fleet_number","vehicle_axle_count","vehicle_bodywork","transportadora_client","client","operation_base","magazine_base","operation_state","operation_city","operation_region","operation_notes","has_mei","no_mei","mei_absence_reason","referral_whatsapp","residential_street","residential_number","residential_complement","residential_neighborhood","residential_city","residential_state","residential_postal_code","training_watched"]),h=new Set(["cnh","crlv","antt","ownership_document","selfie","address_proof"]),y={".pdf":"application/pdf",".jpg":"image/jpeg",".jpeg":"image/jpeg",".png":"image/png"},b=12*1024*1024,j=new Set(["cnh","cnpj_mei","vehicle","residential_address","operation_preferences","antt"]),d=["id","status","complete","ready_for_gr","has_vehicle","vehicle_owner_is_driver","has_mei","operation_preferences","training_watched"],w=[...d,"whatsapp_phone","emergency_whatsapp","emergency_contact_relationship","has_antt","antt_status","ownership_pending","vehicle_profile","vehicle_plate_state","vehicle_plate_city","vehicle_fleet_number","vehicle_axle_count","vehicle_bodywork","transportadora_client","operation_base","no_mei","mei_absence_reason","referral_whatsapp","residential_address","completed_at"],v=new Set(["market_code","rail","requirements_version","expected_projection_version","institution_identifier","branch_identifier","routing_number","account_number","account_type","holder_type","holder_name","holder_document_type","holder_document_value","holder_phone","idempotency_key"]),A=["market_code","rail","requirements_version","expected_projection_version","account_number","account_type","holder_name","idempotency_key"],T=["id","purpose","market_code","country_code","currency_code","rail","institution_identifier","account_type","account_last4","holder_type","holder_name","status","projection_version"];function _(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&t.fail("INPUT","A entrada deve ser um objeto JSON",422),e}a(_,"objectInput");async function I(e,t){if(!("documents"in e))return e;const r=_(e.documents,t);Object.keys(r).length===0&&t.fail("INPUT","Informe ao menos um documento",422);const n=new FormData;for(const[i,o]of Object.entries(e))i!=="documents"&&((o===null||!["string","number","boolean"].includes(typeof o))&&t.fail("INPUT",`Valor inv\xE1lido para ${i}`,422),n.append(i,String(o)));for(const[i,o]of Object.entries(r))h.has(i)||t.fail("INPUT",`Documento inv\xE1lido: ${i}`,422),await m(n,i,o,y,b,t);return n}a(I,"profileBody");function E(e){return!e||typeof e!="object"||Array.isArray(e)?e:Object.fromEntries(d.filter(t=>t in e).map(t=>[t,e[t]]))}a(E,"projectDriverProfile");function U(e){if(!e||typeof e!="object"||Array.isArray(e))return e;const t=Object.fromEntries(w.filter(r=>r in e).map(r=>[r,e[r]]));if(Array.isArray(e.validation_blocks)){const r=["block_key","status","user_message","technical_code","expected_action","validated_at"];t.validation_blocks=e.validation_blocks.map(n=>Object.fromEntries(r.filter(i=>i in n).map(i=>[i,n[i]])))}if(Array.isArray(e.documents)){const r=["document_type","status","processing_status","uploaded_at"];t.documents=e.documents.map(n=>Object.fromEntries(r.filter(i=>i in n).map(i=>[i,n[i]])))}return t}a(U,"projectDriverProfileDetails");function l(e){return!e||typeof e!="object"||Array.isArray(e)?e:Object.fromEntries(T.filter(t=>t in e).map(t=>[t,e[t]]))}a(l,"projectPayout");async function g(e,t){if(!Array.isArray(e)||e[0]!=="driver"||!["profile","payout"].includes(e[1]))return null;if(t.requireRole("driver"),e[1]==="payout"){if(e.length===4&&["requirements","accounts"].includes(e[2])){["BR","US"].includes(e[3])||t.fail("USAGE","Mercado deve ser BR ou US",422);const n=e[2]==="requirements"?"payout-requirements":"payout-accounts",i=await t.api("GET",`/driver/${n}?market_code=${e[3]}`);return e[2]==="accounts"&&Array.isArray(i?.data)?{...i,data:i.data.map(l)}:i}if(e.length===3&&e[2]==="primary"){const n=_(await t.input(),t),i=Object.keys(n).find(c=>!v.has(c));i&&t.fail("INPUT",`Campo n\xE3o permitido: ${i}`,422),A.some(c=>n[c]===void 0||n[c]===null||n[c]==="")&&t.fail("INPUT","Informe os campos obrigat\xF3rios e a chave de idempot\xEAncia",422),(!["BR","US"].includes(n.market_code)||!["bank_transfer","ach"].includes(n.rail)||!Number.isInteger(n.expected_projection_version)||n.expected_projection_version<0||typeof n.requirements_version!="string"||typeof n.account_number!="string"||typeof n.account_type!="string"||typeof n.holder_name!="string"||typeof n.idempotency_key!="string"||!/^[A-Za-z0-9._:-]{16,255}$/.test(n.idempotency_key))&&t.fail("INPUT","Mercado, rail, vers\xE3o ou chave de idempot\xEAncia inv\xE1lidos",422);const{idempotency_key:o,...p}=n;await t.confirm(`Substituir a conta de repasse prim\xE1ria em ${p.market_code}?`,p.market_code);const s=await t.api("PUT","/driver/payout-accounts/primary",p,{idempotencyKey:o});return s?.data?{...s,data:l(s.data)}:s}return null}if(e[1]!=="profile")return null;if(e.length===3&&e[2]==="show"){const n=await t.api("GET","/driver/profile");return n?.data?{...n,data:U(n.data)}:n}let r;if(e.length===3&&["draft","complete"].includes(e[2])){const n=_(await t.input(),t),i=Object.keys(n).find(o=>!u.has(o)&&o!=="documents");i&&t.fail("INPUT",`Campo n\xE3o permitido: ${i}`,422),n.training_watched!==void 0&&typeof n.training_watched!="boolean"&&t.fail("INPUT","training_watched deve ser booleano",422),r=await t.api("POST",`/driver/profile/${e[2]}`,await I(n,t))}else if(e.length===4&&e[2]==="revalidate")j.has(e[3])||t.fail("USAGE","Bloco de cadastro inv\xE1lido",422),r=await t.api("POST",`/driver/profile/blocks/${e[3]}/revalidate`);else if(e.length===4&&e[2]==="mei"&&["consult","confirm"].includes(e[3])){const n=_(await t.input(),t);(Object.keys(n).length!==1||typeof n.cnpj!="string"||!/^\d{14}$/.test(n.cnpj))&&t.fail("INPUT","Informe cnpj com 14 d\xEDgitos em stdin",422),r=await t.api("POST",`/driver/profile/mei-cnpj/${e[3]}`,n)}else return null;return!r||typeof r!="object"?r:r.data&&typeof r.data=="object"&&!Array.isArray(r.data)?{...r,data:E(r.data)}:r}a(g,"driverCommand");export{g as driverCommand,E as projectDriverProfile};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
var y=Object.defineProperty;var m=(n,i)=>y(n,"name",{value:i,configurable:!0});const _=new Set(["pending","in_progress","prioritized","resolved","canceled","duplicate"]),k=new Set(["votes","recent","oldest"]);function p(n,i,a){const t=new URLSearchParams;for(const e of n){const d=e.indexOf("="),o=e.slice(0,d),r=e.slice(d+1);(d<1||!i.includes(o)||!r||t.has(o))&&a.fail("USAGE",`Filtro n\xE3o suportado: ${e}`,422),o==="status"&&!_.has(r)&&a.fail("INPUT","Status inv\xE1lido",422),o==="order"&&!k.has(r)&&a.fail("INPUT","Ordena\xE7\xE3o inv\xE1lida",422),o==="terminal_intents"&&r!=="pending"&&a.fail("INPUT","Filtro de intent terminal inv\xE1lido",422),o==="user_id"&&a.uuid(r),o==="limit"&&(!/^\d+$/.test(r)||Number(r)<1||Number(r)>100)&&a.fail("INPUT","Limit deve estar entre 1 e 100",422),t.set(o,r)}return t.size?`?${t}`:""}m(p,"query");function E(n,i,a){const t=n?.data;return(!t||typeof t!="object"||Array.isArray(t)||t.id!==i||typeof t.status!="string"||!t.status.trim()||t.title!==void 0&&t.title!==null&&typeof t.title!="string")&&a.fail("RESPONSE","Pr\xE9via de feedback inv\xE1lida"),{id:i,...typeof t.title=="string"&&t.title.trim()?{title:t.title.trim()}:{},status:t.status}}m(E,"feedbackPreview");async function A(n,i){if(n[0]!=="admin"||n[1]!=="feedbacks")return null;if(i.requireRole("admin"),n[2]==="list")return i.api("GET",`/admin/feedbacks${p(n.slice(3),["status","user_id","order","limit","cursor","terminal_intents"],i)}`);if(n[2]==="show"&&n.length===4){const a=i.uuid(n[3]);return i.api("GET",`/admin/feedbacks/${a}`)}if(n[2]==="delete"){n.length!==4&&i.fail("USAGE","Use: genne admin feedbacks delete FEEDBACK_ID",2);const a=i.uuid(n[3]),t=E(await i.api("GET",`/admin/feedbacks/${a}`),a,i);return await i.confirm(`Excluir permanentemente o feedback ${t.id}${t.title?` "${t.title}"`:""}? Estado atual: ${t.status}`,a),i.api("DELETE",`/admin/feedbacks/${a}`,void 0,{withStatus:!0})}if(n[2]==="comments"&&n.length>=4){const a=i.uuid(n[3]),t=n[5];if(["delete","restore"].includes(t)){n.length!==6&&i.fail("USAGE","Use: genne admin feedbacks comments FEEDBACK_ID COMMENT_ID delete|restore",2);const e=i.uuid(n[4]),d=E(await i.api("GET",`/admin/feedbacks/${a}`),a,i);await i.confirm(`${t==="delete"?"Ocultar":"Restaurar"} coment\xE1rio ${e} do feedback ${d.id}? Estado do feedback: ${d.status}`,e);const o=t==="delete"?"DELETE":"PATCH";return i.api(o,`/admin/feedbacks/${a}/comments/${e}${t==="restore"?"/restore":""}`,void 0,{withStatus:!0})}return i.api("GET",`/admin/feedbacks/${a}/comments${p(n.slice(4),["limit","cursor"],i)}`)}if(n[2]==="comment"&&n.length>=4){const a=i.uuid(n[3]),t=n.slice(4);(t.length!==1||!t[0].startsWith("key=")||t[0].length<20||t[0].length>259)&&i.fail("USAGE","Informe key=CHAVE est\xE1vel de 16 a 255 caracteres",2);const e=await i.input();(!e||typeof e!="object"||Array.isArray(e)||Object.keys(e).some(r=>!["content","image_url"].includes(r))||typeof e.content!="string"||!e.content.trim()||e.image_url!==void 0&&(typeof e.image_url!="string"||!e.image_url.trim()))&&i.fail("INPUT","Informe content e, opcionalmente, image_url",422);const d={content:e.content.trim(),...e.image_url?{image_url:e.image_url.trim()}:{}},o=t[0].slice(4);return await i.api("GET",`/admin/feedbacks/${a}`),await i.confirm(`Comentar no feedback?
|
|
2
|
+
${JSON.stringify(d,null,2)}`,a),i.api("POST",`/admin/feedbacks/${a}/comments`,d,{idempotencyKey:o})}if(n[2]==="status"){const a=i.uuid(n[3]),t=n[4];(n.length!==5||!t?.startsWith("key=")||!/^[A-Za-z0-9._:-]{16,255}$/.test(t.slice(4)))&&i.fail("USAGE","Informe key=CHAVE est\xE1vel de 16 a 255 caracteres",2);const e=await i.input(),d=["linear_association","terminal_intent","terminal_observation"].filter(s=>e?.[s]!==void 0);if((!e||typeof e!="object"||Array.isArray(e)||Object.keys(e).some(s=>!["new_status","closing_comment_id","reason","linear_association","terminal_intent","terminal_observation"].includes(s))||!_.has(e.new_status)||e.closing_comment_id!==void 0&&typeof e.closing_comment_id!="string"||e.reason!==void 0&&(typeof e.reason!="string"||!e.reason.trim()||Buffer.byteLength(e.reason)>2e3)||e.linear_association!==void 0&&(!e.linear_association||typeof e.linear_association!="object"||Array.isArray(e.linear_association))||d.length>1||e.terminal_intent!==void 0&&(e.terminal_intent!==!0||!["resolved","canceled"].includes(e.new_status))||e.terminal_observation!==void 0&&(!e.terminal_observation||typeof e.terminal_observation!="object"||Array.isArray(e.terminal_observation)))&&i.fail("INPUT","Payload de status inv\xE1lido",422),e.linear_association!==void 0){const s=e.linear_association,c=Object.keys(s),l=s.linear_issue_id,f=s.no_issue_reason;(c.some(b=>!["linear_issue_id","no_issue_reason"].includes(b))||!(typeof l=="string"&&l.trim()&&Buffer.byteLength(l)<=120&&f===void 0||l===void 0&&f==="human_handled"))&&i.fail("INPUT","Associa\xE7\xE3o Linear inv\xE1lida",422)}if(e.terminal_observation!==void 0){const s=e.terminal_observation,c=Object.keys(s),l=["receipt_id","linear_issue_id","linear_state","linear_observed_at","closing_comment_id"];(c.length!==l.length||c.some(f=>!l.includes(f))||!["Done","Canceled","not_applicable"].includes(s.linear_state)||!(s.linear_issue_id===null||typeof s.linear_issue_id=="string"&&s.linear_issue_id.trim())||typeof s.linear_observed_at!="string"||!Number.isFinite(Date.parse(s.linear_observed_at))||!["resolved","canceled"].includes(e.new_status))&&i.fail("INPUT","Observa\xE7\xE3o terminal inv\xE1lida",422),i.uuid(s.receipt_id),i.uuid(s.closing_comment_id)}const o={new_status:e.new_status,...e.closing_comment_id===void 0?{}:{closing_comment_id:i.uuid(e.closing_comment_id)},...e.reason===void 0?{}:{reason:e.reason},...e.linear_association===void 0?{}:{linear_association:e.linear_association},...e.terminal_intent===void 0?{}:{terminal_intent:!0},...e.terminal_observation===void 0?{}:{terminal_observation:e.terminal_observation}},r=await i.api("GET",`/admin/feedbacks/${a}`);r?.data?.id!==a&&i.fail("RESPONSE","Resposta inv\xE1lida da API"),await i.confirm(`Solicitar status do feedback ${a}?
|
|
3
|
+
${JSON.stringify({atual:r.data.status,pedido:o},null,2)}`,a);const u=await i.api("PATCH",`/admin/feedbacks/${a}/status`,o,{idempotencyKey:t.slice(4),withStatus:!0});return["resolved","canceled"].includes(o.new_status)&&!(u?.http_status===202&&u?.status_receipt?.state==="pending"||u?.http_status===200&&u?.status_receipt?.state==="completed")&&i.fail("RESPONSE","Status HTTP e receipt terminal incompat\xEDveis"),u}if(n[2]==="receipt"&&n.length===5){const a=i.uuid(n[3]),t=i.uuid(n[4]),e=await i.api("GET",`/admin/feedbacks/${a}?status_receipt_id=${t}`);return(e?.status_receipt?.id!==t||!["pending","completed"].includes(e.status_receipt.state))&&i.fail("RESPONSE","Receipt terminal ausente ou inv\xE1lido"),e}i.fail("USAGE","Use: genne admin feedbacks list|show FEEDBACK_ID|delete FEEDBACK_ID|comments FEEDBACK_ID [limit=N] [cursor=X]|comments FEEDBACK_ID COMMENT_ID delete|restore|comment FEEDBACK_ID key=CHAVE|status FEEDBACK_ID key=CHAVE < status.json|receipt FEEDBACK_ID RECEIPT_ID",2)}m(A,"feedbackCommand");export{A as feedbackCommand};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var s=Object.defineProperty;var a=(n,r)=>s(n,"name",{value:r,configurable:!0});import{jsonBody as d,requireRole as f}from"./operational-input.js";const t=["client_id","owner_user_id","origin_id","shipper_account_id","base_id","reference_shipper_id","reference_carrier_id"],_=["origin_name","origin_address","name","period_type","reference_payer_label","currency"],l=["start_day","end_day","invoice_day","payment_day"],u=["active","is_default"],p=[...t,..._,...l,...u,"profile_mode","configuration"];function c(n,r){const e=d(n,p,["profile_mode","configuration"],r);["shipper_owned","carrier_managed","driver_self_managed"].includes(e.profile_mode)||r.fail("INPUT","profile_mode inv\xE1lido",422),(typeof e.configuration!="object"||Array.isArray(e.configuration))&&r.fail("INPUT","configuration deve ser um objeto",422);for(const i of t)e[i]!==void 0&&e[i]!==null&&(typeof e[i]!="string"&&r.fail("INPUT",`${i} deve ser UUID ou null`,422),r.uuid(e[i]));for(const i of _)e[i]!==void 0&&e[i]!==null&&typeof e[i]!="string"&&r.fail("INPUT",`${i} deve ser texto ou null`,422);for(const i of l)e[i]!==void 0&&e[i]!==null&&!Number.isInteger(e[i])&&r.fail("INPUT",`${i} deve ser inteiro ou null`,422);for(const i of u)e[i]!==void 0&&typeof e[i]!="boolean"&&r.fail("INPUT",`${i} deve ser booleano`,422);return e}a(c,"paymentProfile");async function y(n,r){if(n[0]!=="admin"||n[1]!=="financial")return null;if(n.length===4&&n[2]==="payment-profiles"&&n[3]==="create"){f(r,["admin"]);const e=c(await r.input(),r),i=e.base_id??e.origin_id??e.owner_user_id??e.client_id??"payment-profiles";return await r.confirm(`Criar e publicar perfil ${e.profile_mode} no contexto ${i}, carrier ${e.reference_carrier_id??"n\xE3o informado"}? Pode desativar o perfil ativo do mesmo contexto.`,i),r.api("POST","/admin/financial/payment-profiles",e)}if(n.length===5&&n[2]==="carrier-margins"&&n[4]==="upsert"){f(r,["admin"]);const e=r.uuid(n[3]),i=d(await r.input(),["carrier_id","origin_id","margin_percent"],["carrier_id","margin_percent"],r);(typeof i.carrier_id!="string"||i.origin_id!==void 0&&typeof i.origin_id!="string")&&r.fail("INPUT","carrier_id e origin_id devem ser UUIDs",422),r.uuid(i.carrier_id),i.origin_id!==void 0&&r.uuid(i.origin_id).toLowerCase()!==e.toLowerCase()&&r.fail("INPUT","origin_id deve corresponder ao UUID do path",422);const o=i.margin_percent;return!(typeof o=="number"&&Number.isFinite(o))&&!(typeof o=="string"&&/^[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?$/.test(o))&&r.fail("INPUT","margin_percent deve ser n\xFAmero ou string decimal",422),await r.confirm(`Substituir a margem ativa do carrier ${i.carrier_id} na origem financeira ${e}?`,e),r.api("PUT",`/admin/financial/carrier-margins/${e}`,{...i,origin_id:e})}return null}a(y,"financialCommand");export{y as financialCommand};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var P=Object.defineProperty;var l=(r,i)=>P(r,"name",{value:i,configurable:!0});import{jsonBody as _,query as v,requireRole as U}from"./operational-input.js";const h=["carrier_account_id","provider_key","status","phase","operation_key","search","limit","cursor"],$=["limit","cursor","provider_account_id","search","document","status","training_pending"],R=["m3risk","angellira"],T=["crawler","api","ftp","browser","api_jwt"],I=["active","paused","disabled"],G=["carrier_account_id","carrier_account_public_id","provider_key","provider_label","mode","status","config","credentials"],S=["provider_label","mode","status","config","credentials"],A=["provider_label","mode","status","config"],N=["operation_key","provider_client_id","provider_client_label","metadata","active"],g=["sex","marital_status"],O=["cnh","crlv","address_proof","antt","ownership_document"];function m(r,i,e,n){r!==void 0&&!i.includes(r)&&n.fail("INPUT",`${e} inv\xE1lido`,422)}l(m,"validateEnum");function y(r,i,e){r[i]!==void 0&&(!r[i]||typeof r[i]!="object"||Array.isArray(r[i]))&&e.fail("INPUT",`${i} deve ser um objeto`,422)}l(y,"validateNested");function D(r,i){y(r,"credentials",i),r.credentials&&Object.entries(r.credentials).some(([,e])=>typeof e!="string")&&i.fail("INPUT","credentials deve conter somente valores de texto",422)}l(D,"validateCredentials");function b(r,i,e,n){const o=_(r,e?G:S,e?["provider_key","provider_label","mode"]:[],n);if(!e&&!Object.keys(o).length&&n.fail("INPUT","Informe ao menos um campo",422),m(o.provider_key,R,"provider_key",n),m(o.mode,T,"mode",n),m(o.status,I,"status",n),y(o,"config",n),D(o,n),!e||i==="carrier")return(o.carrier_account_id||o.carrier_account_public_id)&&n.fail("INPUT","A conta carrier vem da sess\xE3o",422),o;const t=o.carrier_account_public_id??o.carrier_account_id;t||n.fail("INPUT","Informe carrier_account_public_id",422),n.uuid(t),o.carrier_account_id&&o.carrier_account_public_id&&o.carrier_account_id!==o.carrier_account_public_id&&n.fail("INPUT","carrier_account_id e carrier_account_public_id devem coincidir",422);const{carrier_account_id:s,carrier_account_public_id:p,...c}=o;return{...c,carrier_account_public_id:t}}l(b,"providerAccountInput");function q(r,i,e){const n=_(r,N,["operation_key","provider_client_id"],e);return(typeof n.operation_key!="string"||!n.operation_key.trim())&&e.fail("INPUT","operation_key inv\xE1lida",422),(typeof n.provider_client_id!="string"||!n.provider_client_id.trim())&&e.fail("INPUT","provider_client_id inv\xE1lido",422),n.provider_client_label!==void 0&&typeof n.provider_client_label!="string"&&e.fail("INPUT","provider_client_label inv\xE1lido",422),n.metadata!==void 0&&(!n.metadata||typeof n.metadata!="object"||Array.isArray(n.metadata))&&e.fail("INPUT","metadata deve ser um objeto",422),n.active!==void 0&&typeof n.active!="boolean"&&e.fail("INPUT","active deve ser booleano",422),i==="carrier"&&e.uuid(n.operation_key),n}l(q,"mappingInput");function C(r,i){for(const e of r){const[n,u]=e.split("=",2);n==="active"&&!["true","false"].includes(u)&&i.fail("INPUT","active inv\xE1lido",422)}return v(r,["active"],i)}l(C,"mappingQuery");function j(r,i){const e=_(r,g,[],i);return Object.keys(e).length||i.fail("INPUT","Informe sex ou marital_status",422),e.sex!==void 0&&!["male","female","other"].includes(e.sex)&&i.fail("INPUT","sex inv\xE1lido",422),e.marital_status!==void 0&&!["single","married","divorced","widowed","other"].includes(e.marital_status)&&i.fail("INPUT","marital_status inv\xE1lido",422),e}l(j,"declarationInput");function V(r,i){const e=_(r,["recovery_revision","operations"],["recovery_revision","operations"],i);return(typeof e.recovery_revision!="string"||!e.recovery_revision.trim()||!Array.isArray(e.operations)||!e.operations.length||e.operations.some(n=>typeof n!="string"||!n.trim()))&&i.fail("INPUT","Informe recovery_revision e operations n\xE3o vazios",422),e}l(V,"recoveryInput");function F(r,i){const e=_(r,["document_id","registration_request_id","requirements_revision"],[],i);for(const n of["document_id","registration_request_id"])e[n]!==void 0&&i.uuid(e[n]);return e.requirements_revision!==void 0&&(typeof e.requirements_revision!="string"||!e.requirements_revision.trim())&&i.fail("INPUT","requirements_revision inv\xE1lida",422),e}l(F,"reprocessInput");async function E(r,i,e,n){return await n.confirm(`${e==="blacklist"?"Bloquear":"Desbloquear"} o v\xEDnculo GR ${i}?`,i),n.api("POST",`${r}/${e}`)}l(E,"linkAction");async function k(r,i,e,n){const u=_(await n.input(),["approved"],["approved"],n);typeof u.approved!="boolean"&&n.fail("INPUT","approved deve ser booleano",422);const d=e?`transportadora ${e}`:"transportadora da sess\xE3o";return await n.confirm(`${u.approved?"Aprovar":"Revogar aprova\xE7\xE3o manual de"} GR do v\xEDnculo ${i} na ${d}?`,i),n.api("PUT",`${r}/manual-approval`,u)}l(k,"manualApprovalAction");async function L(r,i,e){const n=_(await e.input(),["training_watched"],["training_watched"],e);return typeof n.training_watched!="boolean"&&e.fail("INPUT","training_watched deve ser booleano",422),await e.confirm(`Atualizar treinamento GR do perfil ${i}?`,i),e.api("PATCH",`${r}/driver-profiles/${i}/training`,n)}l(L,"trainingAction");async function w(r,i,e){O.includes(i)||e.fail("INPUT","document_type inv\xE1lido",422);const n=F(await e.input(),e);return await e.confirm(`Reprocessar documento ${i} do motorista?`,i),e.api("POST",`${r}/documents/${i}/reprocess`,n,{withStatus:!0})}l(w,"reprocessAction");async function z(r,i,e){const n=`/${r}/gr`,[,,u,d,o]=i;if(u==="provider-definitions"){if(d==="list"&&i.length===4)return e.api("GET",`${n}/provider-definitions`);if(r==="admin"&&d&&o==="update"&&i.length===5){const t=e.uuid(d),s=_(await e.input(),A,[],e);return Object.keys(s).length||e.fail("INPUT","Informe ao menos um campo",422),m(s.mode,T,"mode",e),m(s.status,I,"status",e),y(s,"config",e),await e.confirm(`Alterar defini\xE7\xE3o do provider ${t}?`,t),e.api("PUT",`${n}/provider-definitions/${t}`,{provider_definition:s})}e.fail("USAGE","Use: genne admin|carrier gr provider-definitions list; admin pode usar PROVIDER_ID update",2)}if(u==="providers"){if(d==="list"&&i.length>=4){const s=r==="admin"?["carrier_account_id","provider_key","status","limit","cursor"]:["provider_key","status","limit","cursor","search"];return e.api("GET",`${n}/provider-accounts${v(i.slice(4),s,e)}`)}if(d==="create"&&i.length===4){const s=b(await e.input(),r,!0,e);return await e.confirm(`Criar conta GR ${s.provider_key}${s.carrier_account_public_id?` para ${s.carrier_account_public_id}`:""}?`,s.provider_key),e.api("POST",`${n}/provider-accounts`,{provider_account:s})}const t=d&&o!=="list"?e.uuid(d):null;if(t&&o==="update"&&i.length===5){const s=b(await e.input(),r,!1,e);return await e.confirm(`Alterar conta GR ${t}?`,t),e.api("PUT",`${n}/provider-accounts/${t}`,{provider_account:s})}if(t&&o==="test"&&i.length===5)return await e.confirm(`Testar a conta GR ${t}?`,t),e.api("POST",`${n}/provider-accounts/${t}/test`,void 0,{withStatus:!0});if(t&&o==="operations"&&i.length===5)return e.api("GET",`${n}/provider-accounts/${t}/operations`);if(t&&o==="mappings"&&i.length>=6){const s=i[5];if(s==="list"&&i.length>=6)return e.api("GET",`${n}/provider-accounts/${t}/mappings${C(i.slice(6),e)}`);if(s==="upsert"&&i.length===6){const p=q(await e.input(),r,e);return await e.confirm(`Atualizar mapeamento ${p.operation_key} na conta GR ${t}?`,t),e.api("POST",`${n}/provider-accounts/${t}/mappings`,{operation_mapping:p})}}e.fail("USAGE","Use: genne admin|carrier gr providers list|create|PROVIDER_ID update|test|operations|mappings list|upsert",2)}}l(z,"providerCommand");async function B(r,i){const[e,n,u,d,o]=r;if(n!=="gr"||(["driver","shipper"].includes(e)&&i.fail("HTTP_403","Gest\xE3o de GR exige sess\xE3o Admin ou carrier",403),!["admin","carrier"].includes(e)))return null;U(i,[e]);const t=`/${e}/gr`;if(u==="provider-definitions"||u==="providers")return z(e,r,i);if(e==="admin"&&u==="carriers"&&r.length>=5){const a=i.uuid(d);if(o==="dashboard"&&r.length===5)return i.api("GET",`${t}/carriers/${a}/dashboard-summary`);if(o==="blacklist"&&r[5]==="list")return i.api("GET",`${t}/carriers/${a}/blacklisted-drivers${v(r.slice(6),["limit","cursor","search"],i)}`);if(o==="links"&&r.length===7&&["blacklist","unblock"].includes(r[6])){const f=i.uuid(r[5]);return E(`${t}/carriers/${a}/driver-links/${f}`,f,r[6],i)}if(o==="links"&&r.length===7&&r[6]==="manual-approval"){const f=i.uuid(r[5]);return k(`${t}/carriers/${a}/driver-links/${f}`,f,a,i)}if(o==="drivers"&&r.length===7&&r[6]==="export")return i.api("GET",`${t}/carriers/${a}/drivers/${i.uuid(r[5])}/export`);if(o==="drivers"&&r.length===9&&r[6]==="documents"&&r[8]==="reprocess")return w(`${t}/carriers/${a}/drivers/${i.uuid(r[5])}`,r[7],i);if(o==="drivers")return i.api("GET",`${t}/carriers/${a}/drivers${v(r.slice(5),$,i)}`)}if(e==="admin"&&u==="drivers")return i.api("GET",`${t}/drivers${v(r.slice(3),["carrier_account_id",...$],i)}`);if(e==="carrier"&&u==="dashboard"&&r.length===3)return i.api("GET",`${t}/dashboard-summary`);if(e==="carrier"&&u==="blacklist"&&d==="list")return i.api("GET",`${t}/blacklisted-drivers${v(r.slice(4),["limit","cursor","search"],i)}`);if(e==="carrier"&&u==="links"&&o&&r.length===5&&["blacklist","unblock"].includes(o)){const a=i.uuid(d);return E(`${t}/driver-links/${a}`,a,o,i)}if(e==="carrier"&&u==="links"&&o==="manual-approval"&&r.length===5){const a=i.uuid(d);return k(`${t}/driver-links/${a}`,a,null,i)}if(u==="driver-profiles"&&d){const a=i.uuid(d);if(e==="admin"&&o==="show"&&r.length===5)return i.api("GET",`${t}/driver-profiles/${a}`);if(o==="training"&&r.length===5)return L(t,a,i)}if(e==="carrier"&&u==="drivers"&&r.length>=3)return r.length===5&&r[4]==="export"?i.api("GET",`${t}/drivers/${i.uuid(d)}/export`):r.length===7&&r[4]==="documents"&&r[6]==="reprocess"?w(`${t}/drivers/${i.uuid(d)}`,r[5],i):i.api("GET",`${t}/drivers${v(r.slice(3),$,i)}`);u!=="requests"&&i.fail("USAGE","Use genne help admin|carrier gr para os comandos dispon\xEDveis",2);const s=`${t}/registration-requests`;if(d==="list"){const a=v(r.slice(4),e==="admin"?h:h.slice(1),i);return i.api("GET",`${s}${a?`${a}&`:"?"}pagination=cursor`)}if(d==="create"&&r.length===4){const a=_(await i.input(),["driver_profile_id","provider_account_id","operation_key","priority"],["driver_profile_id","provider_account_id","operation_key"],i);return i.uuid(a.driver_profile_id),i.uuid(a.provider_account_id),(typeof a.operation_key!="string"||!a.operation_key.trim())&&i.fail("INPUT","operation_key inv\xE1lida",422),await i.confirm(`Enfileirar GR do perfil ${a.driver_profile_id} no provider ${a.provider_account_id}, opera\xE7\xE3o ${a.operation_key}?`,a.driver_profile_id),i.api("POST",s,a,{withStatus:!0})}const p=i.uuid(d),c=`${s}/${p}`;if(o==="show"&&r.length===5)return i.api("GET",c);if(["attempts","evidence","orchestration-events"].includes(o)){const a=v(r.slice(5),["limit","cursor"],i),f=o==="attempts"?`${a?"&":"?"}pagination=cursor`:"";return i.api("GET",`${c}/${o}${a}${f}`)}if(["retry","verify","cancel"].includes(o)&&r.length===5){const a=await i.api("GET",c);return await i.confirm(`${o} GR ${p}? Estado atual: ${a.data?.status??"desconhecido"}`,p),i.api("POST",`${c}/${o}`,void 0,{withStatus:!0})}if(o==="confirm-recovery"&&r.length===5){const a=V(await i.input(),i),f=await i.api("GET",c);return await i.confirm(`Confirmar recupera\xE7\xE3o GR ${p}? Estado atual: ${f.data?.status??"desconhecido"}. Revis\xE3o: ${a.recovery_revision}. Opera\xE7\xF5es: ${a.operations.join(", ")}`,p),i.api("POST",`${c}/confirm-recovery`,{recovery:a},{withStatus:!0})}if(o==="operation"&&r.length===5){const a=_(await i.input(),["operation_key"],["operation_key"],i);i.uuid(a.operation_key);const f=await i.api("GET",c);return await i.confirm(`Selecionar opera\xE7\xE3o ${a.operation_key} para GR ${p}? Estado atual: ${f.data?.status??"desconhecido"}`,p),i.api("PUT",`${c}/operation`,{operation:a},{withStatus:!0})}if(o==="personal-declarations"&&r.length===5){const a=j(await i.input(),i);return await i.confirm(`Atualizar declara\xE7\xF5es pessoais da solicita\xE7\xE3o GR ${p}?`,p),i.api("PUT",`${c}/personal-declarations`,{declarations:a},{withStatus:!0})}i.fail("USAGE","Use: genne admin|carrier gr requests list|create|REQUEST_ID show|attempts|evidence|orchestration-events|retry|verify|cancel|confirm-recovery|operation|personal-declarations",2)}l(B,"grCommand");export{B as grCommand};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var y=Object.defineProperty;var s=(i,e)=>y(i,"name",{value:e,configurable:!0});import{appendLocalFile as I}from"../local-file.js";const T=new Set(["name","phone","vehicle_type","navigation_app_preference"]),S=new Set(["token","name","phone","password","cpf","registration_market_code"]),b=new Set(["scope_type","scope_id","market_id"]),P={".jpg":"image/jpeg",".jpeg":"image/jpeg",".png":"image/png",".webp":"image/webp",".heic":"image/heic",".heif":"image/heif"},U=new Set(["name","email","password","phone","is_internal","registration_market_code"]),E=new Set(["name","email","phone","is_internal"]),N=new Set(["id","public_id","name","email","phone","vehicle_type","navigation_app_preference","display_timezone","role","roles","admin_access_level","is_internal","status","primary_phone","profile_photo_url","registration_market_code","inserted_at"]);function p(i){return!i||typeof i!="object"||Array.isArray(i)?i:Object.fromEntries(Object.entries(i).filter(([e])=>N.has(e)))}s(p,"projectUser");function u(i){return!i||typeof i!="object"?i:Array.isArray(i.data)?{...i,data:i.data.map(p)}:i.data&&typeof i.data=="object"?{...i,data:p(i.data)}:i}s(u,"projectUserEnvelope");function w(i,e,a=!1){const n=i?.data;return(n?.status!=="enabled"||typeof n.changed!="boolean"||n.reauthentication_required!==n.changed)&&e.fail("RESPONSE",a?"Resposta inv\xE1lida da API; fa\xE7a genne login e consulte genne user me antes de repetir":"Resposta inv\xE1lida da API; confira os pap\xE9is do usu\xE1rio alvo antes de repetir"),{data:{status:n.status,changed:n.changed,reauthentication_required:n.reauthentication_required},...a&&n.reauthentication_required?{message:"Perfil de motorista habilitado; fa\xE7a genne login novamente."}:{}}}s(w,"projectDriverAccess");const A=new Set(["id","name","email","status","reviewed_at","inserted_at"]);function c(i){return!i||typeof i!="object"||Array.isArray(i)?i:Object.fromEntries(Object.entries(i).filter(([e])=>A.has(e)))}s(c,"projectDeletion");function m(i){return!i||typeof i!="object"?i:Array.isArray(i.data)?{...i,data:i.data.map(c)}:i.data&&typeof i.data=="object"?{...i,data:c(i.data)}:i}s(m,"projectDeletionEnvelope");function _(i,e){return(!i||typeof i!="object"||Array.isArray(i))&&e.fail("INPUT","A entrada deve ser um objeto JSON",422),i}s(_,"objectInput");function r(i,e,a){const n=_(i,a),t=Object.keys(n).filter(d=>!e.has(d));return t.length&&a.fail("INPUT",`Campo n\xE3o permitido: ${t[0]}`,422),Object.keys(n).length||a.fail("INPUT","Informe ao menos um campo",422),n}s(r,"pick");function h(i,e){try{return e.uuid(i)}catch{e.fail("USAGE","O identificador deve ser um UUID",422)}}s(h,"id");function l(i,e){i.requireRole(e)}s(l,"role");async function o(i){return _(await i.input(),i)}s(o,"input");function O(i,e){const a=r(i,S,e);return(typeof a.token!="string"||!a.token.trim())&&e.fail("INPUT","Informe token",422),a.name!==void 0&&(typeof a.name!="string"||!a.name.trim())&&e.fail("INPUT","name inv\xE1lido",422),a.password!==void 0&&(typeof a.password!="string"||a.password.length<6)&&e.fail("INPUT","A senha deve ter pelo menos 6 caracteres",422),a.phone!==void 0&&(typeof a.phone!="string"||!/^\+[1-9][0-9]{7,14}$/.test(a.phone))&&e.fail("INPUT","phone deve usar formato E.164",422),a.registration_market_code!==void 0&&!["BR","US"].includes(a.registration_market_code)&&e.fail("INPUT","registration_market_code deve ser BR ou US",422),a.cpf!==void 0&&typeof a.cpf!="string"&&e.fail("INPUT","cpf inv\xE1lido",422),a}s(O,"invitationBody");function k(i,e){const a=r(i,b,e);if(["shipper_base","carrier_base","independent"].includes(a.scope_type)||e.fail("INPUT","scope_type inv\xE1lido",422),a.scope_type!=="independent"){a.scope_id===void 0&&e.fail("INPUT","scope_id \xE9 obrigat\xF3rio para uma base",422),a.market_id!==void 0&&e.fail("INPUT","market_id n\xE3o \xE9 aceito para uma base",422);try{e.uuid(a.scope_id)}catch{e.fail("INPUT","scope_id deve ser um UUID",422)}}else{a.scope_id!==void 0&&e.fail("INPUT","scope_id n\xE3o \xE9 aceito para independent",422),a.market_id===void 0&&e.fail("INPUT","market_id \xE9 obrigat\xF3rio para independent",422);try{e.uuid(a.market_id)}catch{e.fail("INPUT","market_id deve ser um UUID",422)}}return a}s(k,"marketContextBody");async function $(i,e){if(!Array.isArray(i)||!i.length)return null;if(i[0]==="password"&&i[1]==="forgot"&&i.length===2){const a=r(await o(e),new Set(["email"]),e);return e.api("POST","/auth/forgot-password",a)}if(i[0]==="password"&&i[1]==="reset"&&i.length===2){const a=r(await o(e),new Set(["email","code","password"]),e);return e.api("POST","/auth/reset-password",a)}if(i[0]==="auth"&&i[1]==="membership-invitations"&&i[2]==="accept"&&i.length===3)return e.api("POST","/auth/membership-invitations/accept",O(await o(e),e));if(i[0]==="driver"&&i[1]==="market-context"){if(l(e,"driver"),i.length===3&&i[2]==="set")return e.api("PUT","/driver/market-context",k(await o(e),e));e.fail("USAGE","Use: genne driver market-context set",2)}if(i[0]==="session"&&i.length===2){if(i[1]==="logout")return await e.api("POST","/auth/logout"),{data:{revoked:"current"}};if(i[1]==="logout-all")return await e.confirm("Encerrar todas as suas sess\xF5es do Genne?","logout-all"),await e.api("POST","/auth/logout-all"),{data:{revoked:"all"}}}if(i[0]==="user"&&i[1]==="me"){if(i.length===2)return{data:p(e.user)};if(i[2]==="driver-access"&&i[3]==="enable"&&i.length===4){l(e,"carrier");const a=r(await o(e),new Set(["current_password"]),e);(typeof a.current_password!="string"||!a.current_password.trim())&&e.fail("INPUT","Informe current_password",422),await e.confirm("Habilitar seu perfil de motorista e encerrar suas sess\xF5es?",String(e.user.id));const n=await e.api("PUT","/auth/me/driver-access",a);return w(n,e,!0)}if(i.length===3&&i[2]==="update"){const a=await e.api("PATCH","/auth/me",await o(e).then(n=>r(n,T,e)));return{...a,...a?.data?{data:p(a.data)}:{}}}if(i.length===3&&i[2]==="photo"){const a=r(await o(e),new Set(["path"]),e),n=new FormData;return await I(n,"profile_photo",a.path,P,6*1024*1024,e),u(await e.api("POST","/auth/me/profile-photo",n))}if(i.length===3&&i[2]==="deletion-request"){const a=r(await o(e),new Set(["accepted_terms"]),e);return a.accepted_terms!==!0&&e.fail("INPUT","\xC9 necess\xE1rio aceitar os termos",422),await e.confirm("Solicitar a exclus\xE3o dos seus dados?",String(e.user.id)),m(await e.api("POST","/auth/me/deletion-request",a))}if(i[2]==="email-change"&&i[3]==="request"&&i.length===4){const a=r(await o(e),new Set(["current_password","new_email"]),e);return e.api("POST","/auth/me/email-change",a)}if(i[2]==="email-change"&&i[3]==="confirm"&&i.length===4){const a=r(await o(e),new Set(["code"]),e);return await e.confirm("Confirmar a troca de email e encerrar todas as sess\xF5es?",String(e.user.id)),e.api("POST","/auth/me/email-change/confirm",a)}return null}if(i[0]==="password"&&i[1]==="change"&&i.length===2){const a=r(await o(e),new Set(["current_password","new_password"]),e);return e.api("POST","/auth/me/password",a)}if(i[0]==="admin"&&i[1]==="users"){if(l(e,"admin"),i[2]==="create"&&i.length===3){const n=r(await o(e),U,e);for(const t of["name","email","password","phone"])(typeof n[t]!="string"||!n[t].trim())&&e.fail("INPUT",`Campo obrigat\xF3rio: ${t}`,422);return["BR","US"].includes(n.registration_market_code)||e.fail("INPUT","Informe registration_market_code como BR ou US",422),/^\+[1-9]\d{7,14}$/.test(n.phone)||e.fail("INPUT","Telefone deve usar formato E.164",422),n.is_internal!==void 0&&typeof n.is_internal!="boolean"&&e.fail("INPUT","is_internal deve ser booleano",422),await e.confirm(`Criar usu\xE1rio staff ${n.email}?`,String(n.email)),u(await e.api("POST","/admin/users",{user:n}))}const a=h(i[2],e);if(i[3]==="driver-access"&&i[4]==="enable"&&i.length===5){const n=r(await o(e),new Set(["reason"]),e);return(typeof n.reason!="string"||!n.reason.trim())&&e.fail("INPUT","Informe reason",422),await e.confirm(`Habilitar perfil de motorista do usu\xE1rio ${a} e encerrar as sess\xF5es dele?`,a),w(await e.api("PUT",`/admin/users/${a}/driver-access`,n),e)}if(i[3]==="update"&&i.length===4){const n=r(await o(e),E,e);return await e.confirm(`Atualizar o usu\xE1rio ${a}?`,a),u(await e.api("PATCH",`/admin/users/${a}`,{user:n}))}if((i[3]==="block"||i[3]==="unblock")&&i.length===4)return await e.confirm(`${i[3]==="block"?"Bloquear":"Desbloquear"} o usu\xE1rio ${a}?`,a),u(await e.api("POST",`/admin/users/${a}/${i[3]}`));if(i[3]==="roles"&&i.length===4){const n=r(await o(e),new Set(["roles","reason"]),e);return await e.confirm(`Alterar os pap\xE9is do usu\xE1rio ${a}?`,a),u(await e.api("PUT",`/admin/users/${a}/roles`,n))}if(i[3]==="password"&&i.length===4){const n=r(await o(e),new Set(["password","reason"]),e);return await e.confirm(`Redefinir a senha do usu\xE1rio ${a}?`,a),u(await e.api("POST",`/admin/users/${a}/password`,n))}if(i[3]==="delete"&&i.length===4){const n=await o(e),t=r(n,new Set(["email"]),e);(typeof t.email!="string"||!t.email.trim())&&e.fail("INPUT","Informe o email para confirmar a exclus\xE3o",422);const d=await e.api("GET",`/admin/privacy/delete-user/preview?user_id=${encodeURIComponent(a)}`),f=d?.data?.user?.email;return(typeof f!="string"||f.toLowerCase()!==t.email.trim().toLowerCase())&&e.fail("CONFLICT","O email n\xE3o corresponde ao usu\xE1rio consultado",409),d?.data?.can_delete_without_force!==!0&&e.fail("CONFLICT","O usu\xE1rio possui registros dependentes e n\xE3o pode ser exclu\xEDdo com seguran\xE7a",409),typeof d?.data?.deletion_intent!="string"&&e.fail("RESPONSE","A pr\xE9via n\xE3o autorizou a exclus\xE3o",409),await e.confirm(t.email?`Excluir permanentemente o usu\xE1rio ${a} (${t.email})?`:`Excluir permanentemente o usu\xE1rio ${a}?`,a),e.api("DELETE",`/admin/users/${a}`,void 0,{deletionIntent:d.data.deletion_intent})}return null}if(i[0]==="admin"&&i[1]==="privacy"&&i[2]==="requests"){if(l(e,"admin"),i.length===3)return m(await e.api("GET","/admin/privacy/deletion-requests"));if(i.length===5&&i[3]==="status"){const a=String(i[4]??"").trim();(!a||a.length>100||!/^[0-9a-f-]+$/i.test(a))&&e.fail("USAGE","REQUEST_ID inv\xE1lido",422);const n=r(await o(e),new Set(["new_status"]),e);["solicitado","excluido","nao_ha_dados"].includes(n.new_status)||e.fail("INPUT","Status de exclus\xE3o inv\xE1lido",422);const t=n.new_status==="excluido"?"Esta marca\xE7\xE3o n\xE3o executa nem comprova a exclus\xE3o dos dados.":"";return await e.confirm(`Atualizar o status do pedido ${a} para ${n.new_status}? ${t}`.trim(),a),m(await e.api("PATCH",`/admin/privacy/deletion-requests/${encodeURIComponent(a)}/status`,n))}return null}if(i[0]==="admin"&&i[1]==="privacy"&&i[2]==="preview"&&i.length===3){l(e,"admin");const a=await o(e),t=r(a,new Set(["user_id","email"]),e);(t.user_id&&t.email||!t.user_id&&!t.email)&&e.fail("INPUT","Informe user_id ou email, mas n\xE3o os dois",422);const d=t.user_id?`?user_id=${encodeURIComponent(h(t.user_id,e))}`:`?email=${encodeURIComponent(t.email)}`,f=await e.api("GET",`/admin/privacy/delete-user/preview${d}`);return delete f.data?.deletion_intent,f}return null}s($,"identityCommand");export{$ as identityCommand};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var U=Object.defineProperty;var p=(i,e)=>U(i,"name",{value:e,configurable:!0});import{jsonBody as l,requireRole as m}from"./operational-input.js";import{desktopIntegrationsCommand as S}from"./desktop-integrations.js";const E=["shipper_id","base_id","source_type","external_id","primary_barcode","aliases","postal_code","destination_address","destination_lat","destination_lng","destination_complement","geocode","recipient_name","recipient_doc","recipient_phone","packages_count","raw_payload","metadata"],T=["shipper_id","base_id","code","name","postal_code_start","postal_code_end","priority_order","status","metadata"],N=["shipper_id","base_id","query","cursor","status_sync"],A=["shipper_id","base_id","connection_id","device_id","order_id","status","cursor"],I=["sack_receipt","package_receipt","route_creation","dispatch","transfer","return"],O=["sack_receipt","package_receipt"],$=/^[A-Za-z0-9._:-]+$/;function v(i,e){if(i[0]==="carrier")return m(e,["carrier"]),{root:"/carrier",rest:i.slice(1),suffix:"",target:"my-account"};if(i[0]==="admin"&&i[1]==="operations"){m(e,["admin"]);const r=e.uuid(i[2]);return{root:"/admin",rest:i.slice(3),suffix:`?carrier_account_id=${r}`,target:r}}return null}p(v,"scope");function y(i,e){return`${i}${e}`}p(y,"path");function b(i,e){return(typeof i!="string"||i.length<8||i.length>128||!$.test(i))&&e.fail("INPUT","device_id deve ter 8 a 128 caracteres alfanum\xE9ricos",422),i}p(b,"deviceId");function g(i,e){return(typeof i!="string"||i.length<16||i.length>128||!$.test(i))&&e.fail("INPUT","idempotency_key deve ter 16 a 128 caracteres alfanum\xE9ricos",422),i}p(g,"idempotencyKey");function R(i,e){return(!Array.isArray(i)||i.length<1||i.length>100||new Set(i).size!==i.length)&&e.fail("INPUT","order_ids deve conter de 1 a 100 IDs p\xFAblicos \xFAnicos",422),i.forEach(r=>e.uuid(r)),i}p(R,"orderIds");function h(i,e,r){const o=new URLSearchParams;for(const d of i){const s=d.indexOf("="),c=d.slice(0,s),t=d.slice(s+1);(s<1||!e.includes(c)||!t||o.has(c))&&r.fail("USAGE",`Filtro n\xE3o suportado: ${d}`,422),["shipper_id","base_id","connection_id","order_id"].includes(c)&&r.uuid(t),c==="device_id"&&b(t,r),c==="status_sync"&&t!=="true"&&r.fail("INPUT","status_sync deve ser true",422),o.set(c,t)}return o.size?`?${o}`:""}p(h,"desktopQuery");function k(i,e,r){const o=new URLSearchParams(i.slice(1));return o.has(e)||r.fail("INPUT",`${e} obrigat\xF3rio`,422),o.get(e)}p(k,"requireQueryParam");function D(i,e){(!Array.isArray(i)||i.length<1||i.length>1e3)&&e.fail("INPUT","external_orders deve conter de 1 a 1000 itens",422);const r=new Set;for(const o of i){(!o||typeof o!="object"||Array.isArray(o)||Object.keys(o).some(s=>!["external_id","external_base_code"].includes(s))||typeof o.external_id!="string"||!o.external_id.trim()||typeof o.external_base_code!="string"||!o.external_base_code.trim())&&e.fail("INPUT","external_orders deve usar apenas external_id e external_base_code",422);const d=`${o.external_id}\0${o.external_base_code}`;r.has(d)&&e.fail("INPUT","external_orders n\xE3o pode repetir itens",422),r.add(d)}return i}p(D,"knownExternalOrders");function G(i,e,r){return(!Array.isArray(i)||i.length<1||i.length>100||new Set(i).size!==i.length)&&r.fail("INPUT",`${e} deve conter de 1 a 100 IDs p\xFAblicos \xFAnicos`,422),i.forEach(o=>r.uuid(o)),i}p(G,"publicIds");function j(i,e){const r=new URLSearchParams,o=["base_id","shipper_id","operation_kind","device_id","monitor","cursor","limit"];for(const d of i){const s=d.indexOf("="),c=d.slice(0,s),t=d.slice(s+1);(s<1||!o.includes(c)||!t||r.has(c))&&e.fail("USAGE",`Filtro n\xE3o suportado: ${d}`,422),["base_id","shipper_id"].includes(c)&&e.uuid(t),c==="device_id"&&b(t,e),c==="operation_kind"&&!I.includes(t)&&e.fail("INPUT","operation_kind inv\xE1lido",422),c==="monitor"&&!["true","false"].includes(t)&&e.fail("INPUT","monitor deve ser true ou false",422),c==="limit"&&(!/^\d+$/.test(t)||Number(t)<1||Number(t)>100)&&e.fail("INPUT","limit inv\xE1lido",422),r.set(c,t)}return r.get("monitor")!=="true"&&!r.has("device_id")&&e.fail("INPUT","device_id obrigat\xF3rio; use monitor=true para a vis\xE3o da transportadora",422),r.size?`?${r}`:""}p(j,"operationQuery");function C(i,e){(!Array.isArray(i)||i.length<1||i.length>100)&&e.fail("INPUT","scans deve conter de 1 a 100 itens",422);for(const r of i)if((!r||typeof r!="object"||Array.isArray(r)||Object.keys(r).some(o=>!["scan_id","barcode","occurred_at","association"].includes(o))||r.scan_id===void 0||r.barcode===void 0||r.occurred_at===void 0)&&e.fail("INPUT","cada scan deve conter scan_id, barcode e occurred_at",422),e.uuid(r.scan_id),(typeof r.barcode!="string"||!r.barcode.trim()||typeof r.occurred_at!="string"||!r.occurred_at.trim())&&e.fail("INPUT","scan com barcode ou occurred_at inv\xE1lido",422),r.association!==void 0&&r.association!==null){const o=r.association;(!o||typeof o!="object"||Array.isArray(o)||Object.keys(o).some(d=>!["kind","scan_id","barcode"].includes(d))||Object.keys(o).length!==3||o.kind!=="sack")&&e.fail("INPUT","association deve ser uma associa\xE7\xE3o de saca v\xE1lida",422),e.uuid(o.scan_id),(typeof o.barcode!="string"||!o.barcode.trim())&&e.fail("INPUT","barcode da association inv\xE1lido",422)}return i}p(C,"operationScans");async function K(i,e){if(i[0]==="grants"&&i[1]==="list"&&i.length===2)return e.api("GET","/carrier/desktop/provider-grants");if(i[0]==="orders"&&i[1]==="list")return e.api("GET",`/carrier/desktop/orders${h(i.slice(2),N,e)}`);if(i[0]==="orders"&&i[2]==="show"&&i.length===3)return e.api("GET",`/carrier/desktop/orders/${e.uuid(i[1])}`);if(i[0]==="orders"&&["refresh","resync"].includes(i[1])&&i.length===2){const r=l(await e.input(),["order_ids","idempotency_key"],["order_ids","idempotency_key"],e);R(r.order_ids,e);const o=g(r.idempotency_key,e),{idempotency_key:d,...s}=r;return await e.confirm(`Executar ${i[1]} Desktop para ${r.order_ids.length} pedido(s)?`,o),e.api("POST",`/carrier/desktop/orders/${i[1]}`,s,{idempotencyKey:o,withStatus:!0})}if(i[0]==="sync-runs"&&i[1]==="list")return e.api("GET",`/carrier/desktop/order-sync-runs${h(i.slice(2),A,e)}`);if(i[0]==="sync-runs"&&i.length===3&&i[2]==="show")return e.api("GET",`/carrier/desktop/flow-executions/${e.uuid(i[1])}`);if(i[0]==="sync-runs"&&i.length===3&&i[2]==="cancel"){const r=e.uuid(i[1]);return await e.confirm(`Cancelar a sincroniza\xE7\xE3o Desktop ${r}?`,r),e.api("POST",`/carrier/desktop/order-sync-runs/${r}/cancel`)}if(i[0]==="executions"&&i.length===3&&i[2]==="show")return e.api("GET",`/carrier/desktop/flow-executions/${e.uuid(i[1])}`);if(i[0]==="executions"&&i[2]==="candidates"&&i[3]==="list"){const r=e.uuid(i[1]),o=h(i.slice(4),["device_id","cursor"],e);return k(o,"device_id",e),e.api("GET",`/carrier/desktop/flow-executions/${r}/order-sync-candidates${o}`)}if(i[0]==="executions"&&i[2]==="known-ids"&&i.length===3){const r=e.uuid(i[1]),o=l(await e.input(),["device_id","external_orders"],["device_id","external_orders"],e);return b(o.device_id,e),D(o.external_orders,e),e.api("POST",`/carrier/desktop/flow-executions/${r}/order-sync-known-ids`,o)}if(i[0]==="executions"&&i[2]==="receipt"&&i.length>=3){const r=e.uuid(i[1]),o=h(i.slice(3),["device_id","batch_key"],e);return k(o,"device_id",e),g(k(o,"batch_key",e),e),e.api("GET",`/carrier/desktop/flow-executions/${r}/order-import-receipts${o}`)}if(i[0]==="operation-routes"&&i[1]==="list"&&i.length===2)return e.api("GET","/carrier/desktop/operation-routes");if(i[0]==="operation-routes"&&i[1]==="publish"&&i.length===2){const r=l(await e.input(),["base_id","shipper_id","operation_kind","target","bindings","handler_key"],["base_id","shipper_id","operation_kind","target"],e);return e.uuid(r.base_id),e.uuid(r.shipper_id),I.includes(r.operation_kind)||e.fail("INPUT","operation_kind inv\xE1lido",422),["core","flow"].includes(r.target)||e.fail("INPUT","target deve ser core ou flow",422),r.target==="flow"&&(!Array.isArray(r.bindings)||r.bindings.length<1||r.bindings.length>10)&&e.fail("INPUT","bindings deve conter de 1 a 10 instala\xE7\xF5es para target=flow",422),await e.confirm(`Publicar nova revis\xE3o da opera\xE7\xE3o ${r.operation_kind} na base ${r.base_id}?`,r.base_id),e.api("PUT","/carrier/desktop/operation-routes",r,{withStatus:!0})}if(i[0]==="operation-contexts"&&i[1]==="open"&&i.length===2){const r=l(await e.input(),["base_id","shipper_id","operation_kind","mode","device_id"],["base_id","shipper_id","operation_kind","mode","device_id"],e);return e.uuid(r.base_id),e.uuid(r.shipper_id),O.includes(r.operation_kind)||e.fail("INPUT","operation_kind deve ser sack_receipt ou package_receipt",422),["fast","standard"].includes(r.mode)||e.fail("INPUT","mode deve ser fast ou standard",422),b(r.device_id,e),e.api("POST","/carrier/desktop/operation-contexts",r)}if(i[0]==="operation-contexts"&&i[2]==="close"&&i.length===3){const r=e.uuid(i[1]);return await e.confirm(`Encerrar o contexto de recebimento ${r}?`,r),e.api("DELETE",`/carrier/desktop/operation-contexts/${r}`)}if(i[0]==="operation-scans"&&i[1]==="batch"&&i.length===2){const r=l(await e.input(),["context_token","scans"],["context_token","scans"],e);return(typeof r.context_token!="string"||!r.context_token.trim())&&e.fail("INPUT","context_token obrigat\xF3rio",422),C(r.scans,e),await e.confirm(`Aceitar ${r.scans.length} leitura(s) no contexto Desktop?`,String(r.scans.length)),e.api("POST","/carrier/desktop/operation-scans/batch",r)}if(i[0]==="operation-runs"&&i[1]==="list"){const r=j(i.slice(2),e);return e.api("GET",`/carrier/desktop/operation-runs${r}`)}if(i[0]==="operation-runs"&&i[2]==="retry"&&i.length===3){const r=e.uuid(i[1]);return await e.confirm(`Reprocessar o fluxo de recebimento ${r}?`,r),e.api("POST",`/carrier/desktop/operation-flow-runs/${r}/retry`,void 0,{withStatus:!0})}if(i[0]==="operation-runs"&&i[1]==="retry-batch"&&i.length===2){const r=l(await e.input(),["flow_run_ids"],["flow_run_ids"],e);return G(r.flow_run_ids,"flow_run_ids",e),await e.confirm(`Reprocessar ${r.flow_run_ids.length} fluxo(s) de recebimento?`,String(r.flow_run_ids.length)),e.api("POST","/carrier/desktop/operation-flow-runs/retry-batch",r,{withStatus:!0})}if(i[0]==="flow-actions"&&i[2]==="run"&&i.length===3){const r=i[1];(typeof r!="string"||!r.trim()||r.length>128)&&e.fail("INPUT","ACTION_KEY inv\xE1lida",422);const o=l(await e.input(),["shipper_id","base_id","input","idempotency_key"],["shipper_id","base_id","input","idempotency_key"],e);e.uuid(o.shipper_id),e.uuid(o.base_id);const d=g(o.idempotency_key,e);(!o.input||typeof o.input!="object"||Array.isArray(o.input))&&e.fail("INPUT","input deve ser um objeto",422);const{idempotency_key:s,...c}=o;return await e.confirm(`Executar a a\xE7\xE3o Desktop ${r}?`,r),e.api("POST",`/carrier/desktop/flow-actions/${encodeURIComponent(r)}/runs`,c,{idempotencyKey:d,withStatus:!0})}e.fail("USAGE","Use: desktop orders|sync-runs|executions; operation-routes list|publish; operation-contexts open|SESSION_ID close; operation-scans batch; operation-runs list|FLOW_RUN_ID retry|retry-batch; flow-actions ACTION_KEY run",2)}p(K,"desktop");async function Q(i,e){if(i[0]==="carrier"&&i[1]==="desktop"){m(e,["carrier"]);const n=await S(i,e);return n!==null?n:K(i.slice(2),e)}const r=v(i,e);if(!r)return null;const{root:o,rest:d,suffix:s,target:c}=r,[t,_,f,P]=d;if(!["orders","receiving","dispatch"].includes(t))return null;if(t==="orders"&&_==="lookup"&&d.length===3)return(typeof f!="string"||!f.trim())&&e.fail("INPUT","barcode obrigat\xF3rio",422),e.api("GET",`${o}/orders/lookup${s?`${s}&`:"?"}barcode=${encodeURIComponent(f)}`);if(t==="orders"&&_==="upsert"&&d.length===2){const n=l(await e.input(),E,["source_type","external_id","postal_code","destination_address"],e);for(const a of["shipper_id","base_id"])n[a]&&e.uuid(n[a]);return(!["upload","proceda"].includes(n.source_type)||[n.external_id,n.postal_code,n.destination_address].some(a=>typeof a!="string"||!a.trim()))&&e.fail("INPUT","Informe source_type, external_id, postal_code e destination_address v\xE1lidos",422),await e.confirm(`Criar ou atualizar pedido ${n.external_id}${n.base_id?` na base ${n.base_id}`:""}?`,n.external_id),e.api("POST",y(`${o}/orders`,s),n)}if(t==="receiving"&&_==="scan"&&d.length===2){const n=l(await e.input(),["barcode","shipper_id","base_id","metadata"],["barcode"],e);(typeof n.barcode!="string"||!n.barcode.trim())&&e.fail("INPUT","barcode obrigat\xF3rio",422);for(const u of["shipper_id","base_id"])n[u]&&e.uuid(n[u]);const a=await e.api("GET",`${o}/orders/lookup${s?`${s}&`:"?"}barcode=${encodeURIComponent(n.barcode)}`);return await e.confirm(`Receber ${n.barcode}? Pedido: ${a.data?.order?.id??"n\xE3o identificado"}`,n.barcode),e.api("POST",y(`${o}/orders/receipts`,s),n)}if(t==="receiving"&&_==="rules"){const n=y(`${o}/receiving/rules`,s);if(f==="list"&&d.length===3)return e.api("GET",n);if(f==="create"&&d.length===3){const a=l(await e.input(),T,["code","name","postal_code_start","postal_code_end"],e);for(const u of["shipper_id","base_id"])a[u]!=null&&e.uuid(a[u]);return await e.confirm(`Criar regra de recebimento ${a.code}?`,a.code),e.api("POST",n,a,{withStatus:!0})}if(P==="update"&&d.length===4){const a=e.uuid(f),u=l(await e.input(),T,[],e);Object.keys(u).length||e.fail("INPUT","Informe ao menos um campo",422);for(const w of["shipper_id","base_id"])u[w]!=null&&e.uuid(u[w]);return await e.confirm(`Alterar regra de recebimento ${a}? Campos: ${Object.keys(u).join(", ")}`,a),e.api("PUT",y(`${o}/receiving/rules/${a}`,s),u)}}if(t==="dispatch"&&_==="create"&&d.length===2){const n=l(await e.input(),["driver_user_id","barcodes","route_name","metadata"],["driver_user_id","barcodes"],e);return e.uuid(n.driver_user_id),(!Array.isArray(n.barcodes)||!n.barcodes.length||n.barcodes.some(a=>typeof a!="string"||!a.trim())||new Set(n.barcodes).size!==n.barcodes.length)&&e.fail("INPUT","barcodes inv\xE1lidos",422),await e.confirm(`Expedir ${n.barcodes.length} pedido(s) ao motorista ${n.driver_user_id}?`,n.driver_user_id),e.api("POST",y(`${o}/dispatch-routes`,s),n,{withStatus:!0})}if(t==="dispatch"&&f==="add-orders"&&d.length===3){const n=e.uuid(_),a=l(await e.input(),["barcodes","reason"],["barcodes"],e);return(!Array.isArray(a.barcodes)||!a.barcodes.length||a.barcodes.some(u=>typeof u!="string"||!u.trim())||new Set(a.barcodes).size!==a.barcodes.length||a.reason!==void 0&&(typeof a.reason!="string"||!a.reason.trim()))&&e.fail("INPUT","Informe barcodes \xFAnicos e reason opcional",422),await e.confirm(`Adicionar ${a.barcodes.length} pedido(s) \xE0 rota ${n} em ${c}?`,n),e.api("POST",y(`${o}/dispatch-routes/${n}/orders`,s),a,{withStatus:!0})}e.fail("USAGE","Use: orders lookup|upsert; receiving scan|rules list|create|ID update; dispatch create|ROUTE_ID add-orders",2)}p(Q,"logisticsCommand");export{Q as logisticsCommand};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var l=Object.defineProperty;var r=(i,t)=>l(i,"name",{value:t,configurable:!0});const c=new Set(["user_id","title","body","action_url","action_label"]);function u(i){if(typeof i!="string")return!1;const t=i.trim();if(!t)return!1;if(t.startsWith("/")&&!t.startsWith("//"))return!0;try{const n=new URL(t);return["http:","https:"].includes(n.protocol)&&!!n.hostname}catch{return!1}}r(u,"validActionUrl");function _(i,t){(!i||typeof i!="object"||Array.isArray(i))&&t.fail("INPUT","A entrada deve ser um objeto JSON",422);const n=Object.keys(i).find(a=>!c.has(a));n&&t.fail("INPUT",`Campo n\xE3o permitido: ${n}`,422),(typeof i.user_id!="string"||!i.user_id.trim())&&t.fail("INPUT","Informe user_id como UUID em JSON pelo stdin",422);const o=t.uuid(i.user_id.trim());(typeof i.title!="string"||!i.title.trim())&&t.fail("INPUT","Informe title n\xE3o vazio em JSON pelo stdin",422),(typeof i.body!="string"||!i.body.trim())&&t.fail("INPUT","Informe body n\xE3o vazio em JSON pelo stdin",422);const e={user_id:o,title:i.title.trim(),body:i.body.trim()};return i.action_url!==void 0&&((typeof i.action_url!="string"||!u(i.action_url))&&t.fail("INPUT","action_url deve ser http(s) ou caminho do app",422),e.action_url=i.action_url.trim()),i.action_label!==void 0&&((typeof i.action_label!="string"||!i.action_label.trim())&&t.fail("INPUT","action_label deve ser texto n\xE3o vazio",422),e.action_url||t.fail("INPUT","action_url \xE9 obrigat\xF3rio quando action_label \xE9 informado",422),e.action_label=i.action_label.trim()),e}r(_,"sendInput");function f(i){return!i||typeof i!="object"?i:Object.fromEntries(["id","title","body","action_url","action_label","target_type","sent_at","delivery_status","recipients_count","processed_recipients_count","failed_recipients_count","read_count","push_opened_count","in_app_opened_count","recipients_with_tokens","completed_at"].filter(n=>n in i).map(n=>[n,i[n]]))}r(f,"projectDispatch");function d(i){return Array.isArray(i?.data)?{...i,data:i.data.map(f)}:i?.data&&typeof i.data=="object"?{...i,data:f(i.data)}:i}r(d,"projectDispatchEnvelope");function p(i,t){const n=new URLSearchParams;for(const o of i){const e=o.indexOf("="),a=o.slice(0,e),s=o.slice(e+1);(e<1||!["limit","cursor"].includes(a)||!s||n.has(a))&&t.fail("USAGE",`Filtro n\xE3o suportado: ${o}`,422),a==="limit"&&(!/^\d+$/.test(s)||Number(s)<1||Number(s)>100)&&t.fail("INPUT","Limit deve estar entre 1 e 100",422),n.set(a,s)}return n.size?`?${n}`:""}r(p,"query");async function y(i,t){if(i[0]!=="admin"||i[1]!=="notifications")return null;if(t.requireRole("admin"),i[2]==="list")return d(await t.api("GET",`/admin/notifications${p(i.slice(3),t)}`));if(i[2]==="show"&&i.length===4)return d(await t.api("GET",`/admin/notifications/${t.uuid(i[3])}`));if(i[2]==="send"&&i.length===3){const n=_(await t.input(),t);await t.confirm(`Enfileirar notifica\xE7\xE3o para o usu\xE1rio ${n.user_id}?
|
|
2
|
+
${JSON.stringify(n,null,2)}`,n.user_id);const o=d(await t.api("POST","/admin/notifications/send",{...n,target_type:"individual"}));return(!o?.data?.id||o.data.delivery_status!=="queued")&&t.fail("RESPONSE","Resposta inv\xE1lida da API"),o}t.fail("USAGE","Use: genne admin notifications list|show MESSAGE_GROUP_ID|send",2)}r(y,"notificationsCommand");export{y as notificationsCommand};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var d=Object.defineProperty;var c=(i,e)=>d(i,"name",{value:e,configurable:!0});function u(i,e){e.includes(i.user?.role)||i.fail("HTTP_403","Acesso negado",403)}c(u,"requireRole");function l(i,e,t,s){return(!i||typeof i!="object"||Array.isArray(i)||Object.keys(i).some(o=>!e.includes(o))||t.some(o=>i[o]===void 0||i[o]===null||i[o]===""))&&s.fail("INPUT","JSON ausente ou com campos inv\xE1lidos",422),i}c(l,"jsonBody");function m(i,e,t){const s=new URLSearchParams;for(const o of i){const f=o.indexOf("="),n=o.slice(0,f),r=o.slice(f+1);(f<1||!e.includes(n)||!r||s.has(n))&&t.fail("USAGE",`Filtro n\xE3o suportado: ${o}`,422),n==="limit"&&(!/^\d+$/.test(r)||Number(r)<1||Number(r)>100)&&t.fail("INPUT","limit inv\xE1lido",422),(n.endsWith("_id")||n==="batch_id")&&t.uuid(r),s.set(n,r)}return s.size?`?${s}`:""}c(m,"query");export{l as jsonBody,m as query,u as requireRole};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var d=Object.defineProperty;var a=(t,n)=>d(t,"name",{value:n,configurable:!0});import{jsonBody as u,requireRole as i}from"./operational-input.js";const s=["integration_type","order_entry_mode","status_query_mode","receiving_enabled","dispatch_enabled","routing_enabled","quotation_enabled","status","metadata"],c=new Set(["upload","proceda"]),f=new Set(["upload","proceda"]),l=new Set(["disabled"]),p=new Set(["active","inactive"]),_=["receiving_enabled","dispatch_enabled","routing_enabled","quotation_enabled"];function m(t,n){const e=u(t,s,[],n);Object.keys(e).length===0&&n.fail("INPUT","Informe ao menos um campo",422),e.integration_type!==void 0&&!c.has(e.integration_type)&&n.fail("INPUT","integration_type inv\xE1lido",422),e.order_entry_mode!==void 0&&!f.has(e.order_entry_mode)&&n.fail("INPUT","order_entry_mode inv\xE1lido",422),e.status_query_mode!==void 0&&!l.has(e.status_query_mode)&&n.fail("INPUT","status_query_mode inv\xE1lido",422),e.status!==void 0&&!p.has(e.status)&&n.fail("INPUT","status inv\xE1lido",422);for(const o of _)e[o]!==void 0&&typeof e[o]!="boolean"&&n.fail("INPUT",`${o} deve ser booleano`,422);return e.metadata!==void 0&&(!e.metadata||typeof e.metadata!="object"||Array.isArray(e.metadata))&&n.fail("INPUT","metadata deve ser um objeto",422),e}a(m,"validateUpdate");function y(t,n){if(t[0]==="carrier"&&t[1]==="operations"&&t[2]==="config"&&["show","update"].includes(t[3])&&t.length===4)return i(n,["carrier"]),{action:t[3],scope:"carrier",target:"my-account",path:"/carrier/operations/config"};if(t[0]==="admin"&&t[1]==="operations"&&t[3]==="config"&&["show","update"].includes(t[4])&&t.length===5){i(n,["admin"]);const e=n.uuid(t[2]);return{action:t[4],scope:"admin",target:e,path:`/admin/operations/config?carrier_account_id=${encodeURIComponent(e)}`}}return null}a(y,"selectedCommand");async function h(t,n){const e=y(t,n);if(!e)return null;if(e.action==="show")return n.api("GET",e.path);const o=m(await n.input(),n),r=e.scope==="carrier"?"conta ativa":`carrier ${e.target}`;return await n.confirm(`Alterar configura\xE7\xE3o operacional da ${r}? Campos: ${Object.keys(o).join(", ")}`,e.target),n.api("PUT",e.path,o)}a(h,"operationsConfigCommand");export{h as operationsConfigCommand};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var h=Object.defineProperty;var u=(n,e)=>h(n,"name",{value:e,configurable:!0});import{appendLocalFile as g}from"../local-file.js";import{jsonBody as p,query as y,requireRole as l}from"./operational-input.js";const $={".csv":"text/csv",".xls":"application/vnd.ms-excel",".xlsx":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",".pdf":"application/pdf"},b=["destination_address","destination_street","destination_number","destination_neighborhood","destination_city","destination_state","destination_postal_code","destination_complement","recipient_name","recipient_phone","nfe_key"],w=["legal_name","trading_name","document","issuing_country_code","legal_identifier"],T=["market_id","code","name","origin_address","origin_lat","origin_lng","postal_code","place_id","street","street_number","neighborhood","city","state","state_code","country","country_code","currency_code","geocode_provider","timezone","triage_rules","balancing_policy","metadata"];function m(n,e,i){return new URLSearchParams(y(n,e,i).slice(1))}u(m,"options");async function _(n,e,i){const o=new FormData;await g(o,"file",n,$,28e7,i);for(const[a,d]of Object.entries(e))o.append(a,typeof d=="object"?JSON.stringify(d):String(d));return o}u(_,"importFile");async function c(n,e,i,o){const a=i?{carrier_account_id:i}:{};if(n[0]==="list"&&n.length===1)return o.api("GET",`${e}${i?`?carrier_account_id=${i}`:""}`);if(n[0]==="create"&&n.length===1){const r=p(await o.input(),w,["legal_name"],o);return!r.document&&!(r.issuing_country_code&&r.legal_identifier)&&o.fail("INPUT","Informe document ou issuing_country_code e legal_identifier",422),await o.confirm(`Criar ou reutilizar o embarcador ${r.legal_name}?`,r.legal_name),o.api("POST",e,{...r,...a},{withStatus:!0})}const d=o.uuid(n[0]),t=`${e}/${d}/bases`;if(n[1]==="bases"&&n[2]==="list"&&n.length===3)return o.api("GET",`${t}${i?`?carrier_account_id=${i}`:""}`);if(n[1]==="bases"&&n[2]==="create"&&n.length===3){const r=p(await o.input(),T,["code","name"],o);return r.market_id&&o.uuid(r.market_id),await o.confirm(`Criar ou reutilizar a base ${r.name} do embarcador ${d}?`,d),o.api("POST",t,{...r,...a},{withStatus:!0})}o.fail("USAGE","Use genne help carrier shippers",2)}u(c,"managedShippers");async function S(n,e,i){const o=`/${n}/shipper-order-imports`;if(e[0]==="preview"&&e.length>=2){const t=m(e.slice(2),["shipper_id","base_id"],i),r=await _(e[1],Object.fromEntries(t),i);return i.api("POST",`${o}/preview`,r)}if(e[0]==="create"&&e.length===2){const t=n==="shipper"?["base_id"]:["shipper_id","base_id"],r=p(await i.input(),["shipper_id","base_id","column_mapping","import_context"],t,i);for(const s of["shipper_id","base_id"])r[s]&&i.uuid(r[s]);for(const s of["column_mapping","import_context"])r[s]!==void 0&&(!r[s]||typeof r[s]!="object"||Array.isArray(r[s]))&&i.fail("INPUT",`${s} deve ser um objeto`,422);const f=await _(e[1],r,i);return await i.confirm(`Iniciar importa\xE7\xE3o de ${f.get("file").name} para a base ${r.base_id}?`,r.base_id),i.api("POST",o,f,{withStatus:!0})}const a=i.uuid(e[0]),d=`${o}/${a}`;if(e[1]==="show"){const t=m(e.slice(2),["include_orders"],i);return t.has("include_orders")&&!["true","false"].includes(t.get("include_orders"))&&i.fail("INPUT","include_orders deve ser true ou false",422),i.api("GET",`${d}${t.size?`?${t}`:""}`)}if(e[1]==="source-preview"&&e.length===2)return i.api("GET",`${d}/source-preview`);if(e[1]==="orders"&&e[2]==="list"){const t=m(e.slice(3),["limit","cursor","search","geocode_status","only_errors"],i);return t.has("only_errors")&&!["true","false"].includes(t.get("only_errors"))&&i.fail("INPUT","only_errors deve ser true ou false",422),i.api("GET",`${d}/orders${t.size?`?${t}`:""}`)}if(e[1]==="orders"&&e[3]==="update"&&e.length===4){const t=i.uuid(e[2]),r=p(await i.input(),b,[],i);return Object.keys(r).length||i.fail("INPUT","Informe ao menos um campo do pedido",422),await i.confirm(`Corrigir o pedido ${t} da importa\xE7\xE3o ${a}?`,t),i.api("PATCH",`${d}/orders/${t}`,{order:r})}if(e[1]==="remap"&&e.length===2){const t=p(await i.input(),["column_mapping","import_context"],[],i);return(!Object.keys(t).length||Object.values(t).some(r=>!r||typeof r!="object"||Array.isArray(r)))&&i.fail("INPUT","Informe column_mapping ou import_context como objeto",422),await i.confirm(`Reenfileirar a importa\xE7\xE3o ${a} com novo mapeamento?`,a),i.api("POST",`${d}/remap`,t,{withStatus:!0})}if(e[1]==="requeue-geocode"&&e.length===2)return await i.confirm(`Reenfileirar geocode da importa\xE7\xE3o ${a}?`,a),i.api("POST",`${d}/requeue-geocode`,void 0,{withStatus:!0});i.fail("USAGE",`Use genne help ${n} orders imports`,2)}u(S,"imports");async function P(n,e){if(n[0]!=="batches"&&e.fail("USAGE","Use genne help admin triage",2),n[1]==="list"&&n.length>=2){const a=m(n.slice(2),["limit","cursor","search"],e);return e.api("GET",`/admin/triage/batches${a.size?`?${a}`:""}`)}const i=e.uuid(n[1]),o=`/admin/triage/batches/${i}`;if(n[2]==="show"&&n.length===3)return e.api("GET",o);if(n[2]==="run"&&n.length===3)return await e.confirm(`Executar triagem do lote ${i}?`,i),e.api("POST",`${o}/run`,void 0,{withStatus:!0});if(n[2]==="orders"&&n[4]==="update"&&n.length===5){const a=e.uuid(n[3]),d=p(await e.input(),["destination_address","destination_lat","destination_lng"],["destination_address"],e);return await e.confirm(`Corrigir o pedido ${a} do lote ${i}?`,a),e.api("PATCH",`${o}/orders/${a}`,d)}e.fail("USAGE","Use genne help admin triage",2)}u(P,"triage");async function v(n,e){const i=n[0];if(i==="carrier"&&n[1]==="shippers")return l(e,["carrier"]),c(n.slice(2),"/carrier/shippers",null,e);if(i==="admin"&&n[1]==="operations"&&n[3]==="shippers")return l(e,["admin"]),c(n.slice(4),"/admin/carrier-shippers",e.uuid(n[2]),e);if(i==="admin"&&n[1]==="triage")return l(e,["admin"]),P(n.slice(2),e);if(["admin","carrier"].includes(i)&&(i==="admin"?n[1]==="operations"&&n[3]==="status-outbox":n[1]==="status-outbox")){l(e,[i]);const o=i==="admin"?e.uuid(n[2]):null,a=m(n.slice(i==="admin"?4:2),["sink_type","shipper_id","adapter_type"],e);return o&&a.set("carrier_account_id",o),a.has("sink_type")&&!["webhook","ocoren","adapter"].includes(a.get("sink_type"))&&e.fail("INPUT","sink_type inv\xE1lido",422),e.api("GET",`/${i}/status-outbox${a.size?`?${a}`:""}`)}if(!["admin","carrier","shipper"].includes(i)||n[1]!=="orders")return null;if(n[2]==="imports")return l(e,[i]),S(i,n.slice(3),e);if(n[3]==="retry-geocode"&&n.length===4){l(e,[i]);const o=e.uuid(n[2]),a=p(await e.input(),["raw_address"],["raw_address"],e);return(typeof a.raw_address!="string"||a.raw_address.trim().length<3)&&e.fail("INPUT","raw_address deve ter ao menos tr\xEAs caracteres",422),await e.confirm(`Reexecutar geocode do pedido ${o}?`,o),e.api("POST",`/${i}/deliveries/orders/${o}/retry_geocode`,a)}return null}u(v,"ordersCommand");export{v as ordersCommand};
|