@runflow-ai/sdk 1.0.4 → 1.0.6

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.
Files changed (101) hide show
  1. package/dist/connectors/connector-creator.d.ts +29 -0
  2. package/dist/connectors/connector-creator.d.ts.map +1 -0
  3. package/dist/connectors/connector-creator.js +123 -0
  4. package/dist/connectors/connector-creator.js.map +1 -0
  5. package/dist/connectors/index.d.ts +3 -0
  6. package/dist/connectors/index.d.ts.map +1 -0
  7. package/dist/connectors/index.js +11 -0
  8. package/dist/connectors/index.js.map +1 -0
  9. package/dist/core/agent.d.ts +42 -0
  10. package/dist/core/agent.d.ts.map +1 -0
  11. package/dist/core/agent.js +533 -0
  12. package/dist/core/agent.js.map +1 -0
  13. package/dist/core/api-client.d.ts +34 -0
  14. package/dist/core/api-client.d.ts.map +1 -0
  15. package/dist/core/api-client.js +339 -0
  16. package/dist/core/api-client.js.map +1 -0
  17. package/dist/core/index.d.ts +5 -0
  18. package/dist/core/index.d.ts.map +1 -0
  19. package/dist/core/index.js +13 -0
  20. package/dist/core/index.js.map +1 -0
  21. package/dist/core/models.d.ts +4 -0
  22. package/dist/core/models.d.ts.map +1 -0
  23. package/dist/core/models.js +20 -0
  24. package/dist/core/models.js.map +1 -0
  25. package/dist/index.d.ts +6 -12
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +49 -107
  28. package/dist/index.js.map +1 -1
  29. package/dist/memory/index.d.ts +1 -0
  30. package/dist/memory/index.d.ts.map +1 -0
  31. package/dist/memory/index.js +4 -0
  32. package/dist/memory/index.js.map +1 -0
  33. package/dist/observability/index.d.ts +3 -0
  34. package/dist/observability/index.d.ts.map +1 -0
  35. package/dist/observability/index.js +10 -0
  36. package/dist/observability/index.js.map +1 -0
  37. package/dist/observability/trace-collector.d.ts +43 -0
  38. package/dist/observability/trace-collector.d.ts.map +1 -0
  39. package/dist/observability/trace-collector.js +233 -0
  40. package/dist/observability/trace-collector.js.map +1 -0
  41. package/dist/streaming/index.d.ts +1 -0
  42. package/dist/streaming/index.d.ts.map +1 -0
  43. package/dist/streaming/index.js +4 -0
  44. package/dist/streaming/index.js.map +1 -0
  45. package/dist/tools/index.d.ts +3 -0
  46. package/dist/tools/index.d.ts.map +1 -0
  47. package/dist/tools/index.js +7 -0
  48. package/dist/tools/index.js.map +1 -0
  49. package/dist/tools/tool-creator.d.ts +3 -0
  50. package/dist/tools/tool-creator.d.ts.map +1 -0
  51. package/dist/tools/tool-creator.js +105 -0
  52. package/dist/tools/tool-creator.js.map +1 -0
  53. package/dist/types/all-types.d.ts +432 -0
  54. package/dist/types/all-types.d.ts.map +1 -0
  55. package/dist/{types.js → types/all-types.js} +1 -2
  56. package/dist/types/all-types.js.map +1 -0
  57. package/dist/types/index.d.ts +2 -0
  58. package/dist/types/index.d.ts.map +1 -0
  59. package/dist/types/index.js +19 -0
  60. package/dist/types/index.js.map +1 -0
  61. package/dist/workflows/index.d.ts +3 -0
  62. package/dist/workflows/index.d.ts.map +1 -0
  63. package/dist/workflows/index.js +13 -0
  64. package/dist/workflows/index.js.map +1 -0
  65. package/dist/workflows/workflow.d.ts +53 -0
  66. package/dist/workflows/workflow.d.ts.map +1 -0
  67. package/dist/workflows/workflow.js +414 -0
  68. package/dist/workflows/workflow.js.map +1 -0
  69. package/package.json +69 -17
  70. package/README.md +0 -892
  71. package/dist/agents/runflow-agent.d.ts +0 -53
  72. package/dist/agents/runflow-agent.d.ts.map +0 -1
  73. package/dist/agents/runflow-agent.js +0 -263
  74. package/dist/agents/runflow-agent.js.map +0 -1
  75. package/dist/agents/server.d.ts +0 -47
  76. package/dist/agents/server.d.ts.map +0 -1
  77. package/dist/agents/server.js +0 -326
  78. package/dist/agents/server.js.map +0 -1
  79. package/dist/agents/swagger.d.ts +0 -678
  80. package/dist/agents/swagger.d.ts.map +0 -1
  81. package/dist/agents/swagger.js +0 -338
  82. package/dist/agents/swagger.js.map +0 -1
  83. package/dist/config.d.ts +0 -17
  84. package/dist/config.d.ts.map +0 -1
  85. package/dist/config.js +0 -131
  86. package/dist/config.js.map +0 -1
  87. package/dist/runflow-sdk.d.ts +0 -57
  88. package/dist/runflow-sdk.d.ts.map +0 -1
  89. package/dist/runflow-sdk.js +0 -622
  90. package/dist/runflow-sdk.js.map +0 -1
  91. package/dist/singleton.d.ts +0 -37
  92. package/dist/singleton.d.ts.map +0 -1
  93. package/dist/singleton.js +0 -86
  94. package/dist/singleton.js.map +0 -1
  95. package/dist/types.d.ts +0 -140
  96. package/dist/types.d.ts.map +0 -1
  97. package/dist/types.js.map +0 -1
  98. package/dist/utils.d.ts +0 -74
  99. package/dist/utils.d.ts.map +0 -1
  100. package/dist/utils.js +0 -312
  101. package/dist/utils.js.map +0 -1
@@ -1,37 +0,0 @@
1
- import { RunflowSDK } from "./runflow-sdk";
2
- import { AgentContext } from "./types";
3
- /**
4
- * Obtém ou cria uma instância singleton do SDK
5
- *
6
- * @param context - Contexto do agente (opcional, usado apenas na primeira chamada)
7
- * @returns Instância do SDK
8
- */
9
- export declare function getSDK(context?: AgentContext): RunflowSDK;
10
- /**
11
- * Reinicia a instância singleton (útil para testes ou mudanças de contexto)
12
- *
13
- * @param context - Novo contexto do agente
14
- * @returns Nova instância do SDK
15
- */
16
- export declare function resetSDK(context?: AgentContext): RunflowSDK;
17
- /**
18
- * Verifica se já existe uma instância do SDK
19
- *
20
- * @returns true se existe uma instância ativa
21
- */
22
- export declare function hasSDKInstance(): boolean;
23
- /**
24
- * Funções de conveniência que usam a instância singleton
25
- * Estas funções permitem usar o SDK sem precisar instanciar
26
- */
27
- export declare function getCredential(name: string): Promise<import("./types").Credential>;
28
- export declare function getPrompt(name: string, variables?: Record<string, any>): Promise<string>;
29
- export declare function getAvailableVectorStores(): Promise<import("./types").VectorStore[]>;
30
- export declare function searchVectorStore(vectorStore: string, query: string, options?: import("./types").SearchOptions): Promise<import("./types").SearchResponse>;
31
- export declare function addDocument(request: import("./types").AddDocumentRequest): Promise<import("./types").AddDocumentResponse>;
32
- export declare function listDocuments(vectorStore: string, options?: import("./types").ListDocumentsOptions): Promise<import("./types").ListDocumentsResponse>;
33
- export declare function deleteDocument(documentId: string): Promise<import("./types").DeleteDocumentResponse>;
34
- export declare function getSession(sessionId: string): import("./runflow-sdk").SessionManager;
35
- export declare function log(message: string, data?: any): void;
36
- export declare function trace(traceData: import("./types").TraceData): Promise<import("./types").TraceResponse>;
37
- //# sourceMappingURL=singleton.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"singleton.d.ts","sourceRoot":"","sources":["../src/singleton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAQvC;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,UAAU,CAKzD;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,UAAU,CAG3D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED;;;GAGG;AAEH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,SAAS,EAAE,UAAU,CAAC,CAEvC;AAED,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED,wBAAsB,wBAAwB,IAAI,OAAO,CACvD,OAAO,SAAS,EAAE,WAAW,EAAE,CAChC,CAEA;AAED,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,OAAO,SAAS,EAAE,aAAa,GACxC,OAAO,CAAC,OAAO,SAAS,EAAE,cAAc,CAAC,CAE3C;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,OAAO,SAAS,EAAE,kBAAkB,GAC5C,OAAO,CAAC,OAAO,SAAS,EAAE,mBAAmB,CAAC,CAEhD;AAED,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,OAAO,SAAS,EAAE,oBAAoB,GAC/C,OAAO,CAAC,OAAO,SAAS,EAAE,qBAAqB,CAAC,CAElD;AAED,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,SAAS,EAAE,sBAAsB,CAAC,CAEnD;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,0CAE3C;AAED,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAErD;AAED,wBAAsB,KAAK,CACzB,SAAS,EAAE,OAAO,SAAS,EAAE,SAAS,GACrC,OAAO,CAAC,OAAO,SAAS,EAAE,aAAa,CAAC,CAE1C"}
package/dist/singleton.js DELETED
@@ -1,86 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getSDK = getSDK;
4
- exports.resetSDK = resetSDK;
5
- exports.hasSDKInstance = hasSDKInstance;
6
- exports.getCredential = getCredential;
7
- exports.getPrompt = getPrompt;
8
- exports.getAvailableVectorStores = getAvailableVectorStores;
9
- exports.searchVectorStore = searchVectorStore;
10
- exports.addDocument = addDocument;
11
- exports.listDocuments = listDocuments;
12
- exports.deleteDocument = deleteDocument;
13
- exports.getSession = getSession;
14
- exports.log = log;
15
- exports.trace = trace;
16
- const runflow_sdk_1 = require("./runflow-sdk");
17
- /**
18
- * Instância singleton do SDK
19
- * Permite reutilizar a mesma instância em toda a aplicação
20
- */
21
- let _sdkInstance = null;
22
- /**
23
- * Obtém ou cria uma instância singleton do SDK
24
- *
25
- * @param context - Contexto do agente (opcional, usado apenas na primeira chamada)
26
- * @returns Instância do SDK
27
- */
28
- function getSDK(context) {
29
- if (!_sdkInstance) {
30
- _sdkInstance = new runflow_sdk_1.RunflowSDK(context);
31
- }
32
- return _sdkInstance;
33
- }
34
- /**
35
- * Reinicia a instância singleton (útil para testes ou mudanças de contexto)
36
- *
37
- * @param context - Novo contexto do agente
38
- * @returns Nova instância do SDK
39
- */
40
- function resetSDK(context) {
41
- _sdkInstance = new runflow_sdk_1.RunflowSDK(context);
42
- return _sdkInstance;
43
- }
44
- /**
45
- * Verifica se já existe uma instância do SDK
46
- *
47
- * @returns true se existe uma instância ativa
48
- */
49
- function hasSDKInstance() {
50
- return _sdkInstance !== null;
51
- }
52
- /**
53
- * Funções de conveniência que usam a instância singleton
54
- * Estas funções permitem usar o SDK sem precisar instanciar
55
- */
56
- async function getCredential(name) {
57
- return getSDK().getCredential(name);
58
- }
59
- async function getPrompt(name, variables) {
60
- return getSDK().getPrompt(name, variables);
61
- }
62
- async function getAvailableVectorStores() {
63
- return getSDK().getAvailableVectorStores();
64
- }
65
- async function searchVectorStore(vectorStore, query, options) {
66
- return getSDK().searchVectorStore(vectorStore, query, options);
67
- }
68
- async function addDocument(request) {
69
- return getSDK().addDocument(request);
70
- }
71
- async function listDocuments(vectorStore, options) {
72
- return getSDK().listDocuments(vectorStore, options);
73
- }
74
- async function deleteDocument(documentId) {
75
- return getSDK().deleteDocument(documentId);
76
- }
77
- function getSession(sessionId) {
78
- return getSDK().session.get(sessionId);
79
- }
80
- function log(message, data) {
81
- return getSDK().log(message, data);
82
- }
83
- async function trace(traceData) {
84
- return getSDK().trace(traceData);
85
- }
86
- //# sourceMappingURL=singleton.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"singleton.js","sourceRoot":"","sources":["../src/singleton.ts"],"names":[],"mappings":";;AAeA,wBAKC;AAQD,4BAGC;AAOD,wCAEC;AAOD,sCAIC;AAED,8BAKC;AAED,4DAIC;AAED,8CAMC;AAED,kCAIC;AAED,sCAKC;AAED,wCAIC;AAED,gCAEC;AAED,kBAEC;AAED,sBAIC;AAzGD,+CAA2C;AAG3C;;;GAGG;AACH,IAAI,YAAY,GAAsB,IAAI,CAAC;AAE3C;;;;;GAKG;AACH,SAAgB,MAAM,CAAC,OAAsB;IAC3C,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,YAAY,GAAG,IAAI,wBAAU,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,QAAQ,CAAC,OAAsB;IAC7C,YAAY,GAAG,IAAI,wBAAU,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;GAIG;AACH,SAAgB,cAAc;IAC5B,OAAO,YAAY,KAAK,IAAI,CAAC;AAC/B,CAAC;AAED;;;GAGG;AAEI,KAAK,UAAU,aAAa,CACjC,IAAY;IAEZ,OAAO,MAAM,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC;AAEM,KAAK,UAAU,SAAS,CAC7B,IAAY,EACZ,SAA+B;IAE/B,OAAO,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAC7C,CAAC;AAEM,KAAK,UAAU,wBAAwB;IAG5C,OAAO,MAAM,EAAE,CAAC,wBAAwB,EAAE,CAAC;AAC7C,CAAC;AAEM,KAAK,UAAU,iBAAiB,CACrC,WAAmB,EACnB,KAAa,EACb,OAAyC;IAEzC,OAAO,MAAM,EAAE,CAAC,iBAAiB,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACjE,CAAC;AAEM,KAAK,UAAU,WAAW,CAC/B,OAA6C;IAE7C,OAAO,MAAM,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;AAEM,KAAK,UAAU,aAAa,CACjC,WAAmB,EACnB,OAAgD;IAEhD,OAAO,MAAM,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AACtD,CAAC;AAEM,KAAK,UAAU,cAAc,CAClC,UAAkB;IAElB,OAAO,MAAM,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;AAC7C,CAAC;AAED,SAAgB,UAAU,CAAC,SAAiB;IAC1C,OAAO,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACzC,CAAC;AAED,SAAgB,GAAG,CAAC,OAAe,EAAE,IAAU;IAC7C,OAAO,MAAM,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC;AAEM,KAAK,UAAU,KAAK,CACzB,SAAsC;IAEtC,OAAO,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACnC,CAAC"}
package/dist/types.d.ts DELETED
@@ -1,140 +0,0 @@
1
- /**
2
- * Configuração do arquivo .runflow
3
- *
4
- * Este arquivo deve estar na raiz do projeto ou em um diretório pai
5
- * e conter as credenciais e configurações necessárias para o SDK.
6
- */
7
- export interface RunflowConfig {
8
- /** ID único do agente */
9
- agentId: string;
10
- /** ID do tenant/organização */
11
- tenantId: string;
12
- /** Chave de API para autenticação */
13
- apiKey: string;
14
- /** URL base da API do Runflow */
15
- apiUrl: string;
16
- }
17
- export interface AgentContext {
18
- tenantId: string;
19
- agentId: string;
20
- requestId: string;
21
- sessionId?: string;
22
- companyId?: string;
23
- }
24
- export interface AgentInput {
25
- message: string;
26
- companyId: string;
27
- userId?: string;
28
- sessionId?: string;
29
- channel?: string;
30
- metadata?: Record<string, any>;
31
- tab?: string;
32
- preChatInfo?: string;
33
- }
34
- export interface AgentOutput {
35
- message: string;
36
- metadata?: {
37
- llmProvider?: string;
38
- model?: string;
39
- toolsUsed?: string[];
40
- steps?: number;
41
- [key: string]: any;
42
- };
43
- }
44
- export interface Credential {
45
- name: string;
46
- type: "API_KEY" | "OAUTH" | "JWT";
47
- apiKey: string;
48
- config: Record<string, any>;
49
- tenant_id: string;
50
- project_id: string;
51
- }
52
- export interface PromptResponse {
53
- content: string;
54
- name: string;
55
- variables: Record<string, any>;
56
- }
57
- export interface VectorStore {
58
- id: string;
59
- name: string;
60
- description: string;
61
- type: "pinecone" | "weaviate" | "qdrant";
62
- status: "active" | "inactive";
63
- }
64
- export interface SearchResult {
65
- content: string;
66
- score: number;
67
- metadata: {
68
- source?: string;
69
- updated?: string;
70
- [key: string]: any;
71
- };
72
- }
73
- export interface SearchResponse {
74
- query: string;
75
- vector_store: string;
76
- results: SearchResult[];
77
- }
78
- export interface SearchOptions {
79
- k?: number;
80
- threshold?: number;
81
- }
82
- export interface Document {
83
- id: string;
84
- content: string;
85
- metadata: Record<string, any>;
86
- createdAt: string;
87
- }
88
- export interface AddDocumentRequest {
89
- vectorStore: string;
90
- content: string;
91
- metadata?: Record<string, any>;
92
- }
93
- export interface AddDocumentResponse {
94
- id: string;
95
- message: string;
96
- }
97
- export interface ListDocumentsResponse {
98
- documents: Document[];
99
- total: number;
100
- }
101
- export interface ListDocumentsOptions {
102
- limit?: number;
103
- offset?: number;
104
- }
105
- export interface DeleteDocumentResponse {
106
- success: boolean;
107
- }
108
- export interface SessionMessage {
109
- role: "human" | "ai";
110
- content: string;
111
- timestamp: string;
112
- metadata?: Record<string, any>;
113
- }
114
- export interface SessionHistoryResponse {
115
- messages: SessionMessage[];
116
- total: number;
117
- }
118
- export interface SessionHistoryOptions {
119
- limit?: number;
120
- offset?: number;
121
- }
122
- export interface TraceData {
123
- input: {
124
- type: string;
125
- content: string;
126
- }[];
127
- output: string;
128
- status: "success" | "error" | "pending";
129
- }
130
- export interface LegacyTraceData {
131
- inputs?: Record<string, any>;
132
- outputs?: Record<string, any>;
133
- status?: "success" | "error" | "pending";
134
- }
135
- export interface TraceResponse {
136
- success: boolean;
137
- traceId: string;
138
- langsmith: boolean;
139
- }
140
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA,wCAAwC"}
package/dist/utils.d.ts DELETED
@@ -1,74 +0,0 @@
1
- import { AgentInput } from './types';
2
- /**
3
- * Valida entrada do agente com regras padronizadas
4
- */
5
- export declare function validateAgentInput(input: any, options?: {
6
- requireCompanyId?: boolean;
7
- maxMessageLength?: number;
8
- allowedChannels?: string[];
9
- }): {
10
- isValid: boolean;
11
- errors: string[];
12
- sanitized?: AgentInput;
13
- };
14
- /**
15
- * Limpa e valida metadados
16
- */
17
- export declare function sanitizeMetadata(metadata: any, options?: {
18
- allowedKeys?: string[];
19
- maxDepth?: number;
20
- maxStringLength?: number;
21
- }): Record<string, any> | undefined;
22
- /**
23
- * Mascara dados sensíveis em logs
24
- */
25
- export declare function maskSensitiveData(data: any, patterns?: string[]): any;
26
- export interface RequestOptions {
27
- timeout?: number;
28
- retries?: number;
29
- retryDelay?: number;
30
- headers?: Record<string, string>;
31
- }
32
- export interface BatchRequestOptions {
33
- concurrent?: number;
34
- timeout?: number;
35
- }
36
- /**
37
- * Cliente HTTP com retry e timeout
38
- */
39
- export declare class HttpClient {
40
- private defaultTimeout;
41
- private defaultRetries;
42
- private defaultRetryDelay;
43
- request(url: string, options?: RequestInit & RequestOptions): Promise<Response>;
44
- get(url: string, options?: RequestOptions): Promise<Response>;
45
- post(url: string, data: any, options?: RequestOptions): Promise<Response>;
46
- put(url: string, data: any, options?: RequestOptions): Promise<Response>;
47
- delete(url: string, options?: RequestOptions): Promise<Response>;
48
- private delay;
49
- }
50
- /**
51
- * Executa múltiplas requests em lote com controle de concorrência
52
- */
53
- export declare function batchRequests<T>(requests: (() => Promise<T>)[], options?: BatchRequestOptions): Promise<T[]>;
54
- /**
55
- * Aplica timeout em uma Promise
56
- */
57
- export declare function withTimeout<T>(promise: Promise<T>, timeoutMs: number): Promise<T>;
58
- /**
59
- * Debounce para funções async
60
- */
61
- export declare function debounce<T extends (...args: any[]) => Promise<any>>(func: T, delay: number): T;
62
- export declare class SimpleCache<T> {
63
- private cache;
64
- set(key: string, value: T, ttlMs?: number): void;
65
- get(key: string): T | null;
66
- has(key: string): boolean;
67
- delete(key: string): void;
68
- clear(): void;
69
- size(): number;
70
- private cleanup;
71
- }
72
- export declare const credentialCache: SimpleCache<any>;
73
- export declare const sessionCache: SimpleCache<any>;
74
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/dist/utils.js DELETED
@@ -1,312 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.sessionCache = exports.credentialCache = exports.SimpleCache = exports.HttpClient = void 0;
4
- exports.validateAgentInput = validateAgentInput;
5
- exports.sanitizeMetadata = sanitizeMetadata;
6
- exports.maskSensitiveData = maskSensitiveData;
7
- exports.batchRequests = batchRequests;
8
- exports.withTimeout = withTimeout;
9
- exports.debounce = debounce;
10
- // =============================================================================
11
- // 🔒 VALIDATION & SECURITY
12
- // =============================================================================
13
- /**
14
- * Valida entrada do agente com regras padronizadas
15
- */
16
- function validateAgentInput(input, options = {}) {
17
- const errors = [];
18
- const { requireCompanyId = true, maxMessageLength = 10000, allowedChannels } = options;
19
- // Verificar se input existe
20
- if (!input || typeof input !== 'object') {
21
- return { isValid: false, errors: ['Input deve ser um objeto válido'] };
22
- }
23
- // Validar message (obrigatório)
24
- if (!input.message || typeof input.message !== 'string') {
25
- errors.push('Campo "message" é obrigatório e deve ser uma string');
26
- }
27
- else if (input.message.trim().length === 0) {
28
- errors.push('Campo "message" não pode estar vazio');
29
- }
30
- else if (input.message.length > maxMessageLength) {
31
- errors.push(`Campo "message" não pode ter mais de ${maxMessageLength} caracteres`);
32
- }
33
- // Validar companyId
34
- if (requireCompanyId && (!input.companyId || typeof input.companyId !== 'string')) {
35
- errors.push('Campo "companyId" é obrigatório');
36
- }
37
- // Validar channel se fornecido
38
- if (input.channel && allowedChannels && !allowedChannels.includes(input.channel)) {
39
- errors.push(`Canal "${input.channel}" não é permitido. Canais válidos: ${allowedChannels.join(', ')}`);
40
- }
41
- // Validar IDs se fornecidos
42
- if (input.userId && typeof input.userId !== 'string') {
43
- errors.push('Campo "userId" deve ser uma string');
44
- }
45
- if (input.sessionId && typeof input.sessionId !== 'string') {
46
- errors.push('Campo "sessionId" deve ser uma string');
47
- }
48
- if (errors.length > 0) {
49
- return { isValid: false, errors };
50
- }
51
- // Criar versão sanitizada
52
- const sanitized = {
53
- message: input.message.trim(),
54
- companyId: input.companyId?.trim(),
55
- userId: input.userId?.trim(),
56
- sessionId: input.sessionId?.trim(),
57
- channel: input.channel?.trim(),
58
- metadata: sanitizeMetadata(input.metadata),
59
- tab: input.tab?.trim(),
60
- preChatInfo: input.preChatInfo?.trim()
61
- };
62
- return { isValid: true, errors: [], sanitized };
63
- }
64
- /**
65
- * Limpa e valida metadados
66
- */
67
- function sanitizeMetadata(metadata, options = {}) {
68
- const { allowedKeys, maxDepth = 3, maxStringLength = 1000 } = options;
69
- if (!metadata || typeof metadata !== 'object') {
70
- return undefined;
71
- }
72
- function sanitizeValue(value, depth) {
73
- if (depth > maxDepth) {
74
- return '[Max depth exceeded]';
75
- }
76
- if (value === null || value === undefined) {
77
- return value;
78
- }
79
- if (typeof value === 'string') {
80
- return value.length > maxStringLength
81
- ? value.substring(0, maxStringLength) + '...'
82
- : value;
83
- }
84
- if (typeof value === 'number' || typeof value === 'boolean') {
85
- return value;
86
- }
87
- if (Array.isArray(value)) {
88
- return value.slice(0, 50).map(item => sanitizeValue(item, depth + 1));
89
- }
90
- if (typeof value === 'object') {
91
- const sanitized = {};
92
- for (const [key, val] of Object.entries(value)) {
93
- if (allowedKeys && !allowedKeys.includes(key)) {
94
- continue;
95
- }
96
- sanitized[key] = sanitizeValue(val, depth + 1);
97
- }
98
- return sanitized;
99
- }
100
- return String(value);
101
- }
102
- return sanitizeValue(metadata, 0);
103
- }
104
- /**
105
- * Mascara dados sensíveis em logs
106
- */
107
- function maskSensitiveData(data, patterns = ['email', 'phone', 'cpf', 'password', 'token']) {
108
- if (!data)
109
- return data;
110
- function maskValue(key, value) {
111
- if (typeof value === 'string') {
112
- const lowerKey = key.toLowerCase();
113
- for (const pattern of patterns) {
114
- if (lowerKey.includes(pattern.toLowerCase())) {
115
- if (pattern === 'email' && value.includes('@')) {
116
- const [user, domain] = value.split('@');
117
- return `${user.substring(0, 2)}***@${domain}`;
118
- }
119
- if (pattern === 'phone' && /\d/.test(value)) {
120
- return value.replace(/\d/g, '*');
121
- }
122
- if (pattern === 'cpf' && /\d{11}/.test(value.replace(/\D/g, ''))) {
123
- return value.replace(/\d/g, '*');
124
- }
125
- if (pattern === 'password' || pattern === 'token') {
126
- return '***';
127
- }
128
- // Padrão geral: mostrar apenas primeiros 2 caracteres
129
- return value.length > 2 ? value.substring(0, 2) + '*'.repeat(value.length - 2) : '***';
130
- }
131
- }
132
- }
133
- return value;
134
- }
135
- if (typeof data === 'string') {
136
- return maskValue('data', data);
137
- }
138
- if (Array.isArray(data)) {
139
- return data.map(item => maskSensitiveData(item, patterns));
140
- }
141
- if (typeof data === 'object') {
142
- const masked = {};
143
- for (const [key, value] of Object.entries(data)) {
144
- if (typeof value === 'object' && value !== null) {
145
- masked[key] = maskSensitiveData(value, patterns);
146
- }
147
- else {
148
- masked[key] = maskValue(key, value);
149
- }
150
- }
151
- return masked;
152
- }
153
- return data;
154
- }
155
- /**
156
- * Cliente HTTP com retry e timeout
157
- */
158
- class HttpClient {
159
- constructor() {
160
- this.defaultTimeout = 10000;
161
- this.defaultRetries = 3;
162
- this.defaultRetryDelay = 1000;
163
- }
164
- async request(url, options = {}) {
165
- const { timeout = this.defaultTimeout, retries = this.defaultRetries, retryDelay = this.defaultRetryDelay, ...fetchOptions } = options;
166
- let lastError = new Error('Unknown error');
167
- for (let attempt = 0; attempt <= retries; attempt++) {
168
- try {
169
- const controller = new AbortController();
170
- const timeoutId = setTimeout(() => controller.abort(), timeout);
171
- const response = await fetch(url, {
172
- ...fetchOptions,
173
- signal: controller.signal
174
- });
175
- clearTimeout(timeoutId);
176
- return response;
177
- }
178
- catch (error) {
179
- lastError = error;
180
- if (attempt < retries) {
181
- await this.delay(retryDelay * Math.pow(2, attempt)); // Exponential backoff
182
- }
183
- }
184
- }
185
- throw new Error(`Request failed after ${retries + 1} attempts: ${lastError.message}`);
186
- }
187
- async get(url, options = {}) {
188
- return this.request(url, { ...options, method: 'GET' });
189
- }
190
- async post(url, data, options = {}) {
191
- return this.request(url, {
192
- ...options,
193
- method: 'POST',
194
- body: JSON.stringify(data),
195
- headers: {
196
- 'Content-Type': 'application/json',
197
- ...options.headers
198
- }
199
- });
200
- }
201
- async put(url, data, options = {}) {
202
- return this.request(url, {
203
- ...options,
204
- method: 'PUT',
205
- body: JSON.stringify(data),
206
- headers: {
207
- 'Content-Type': 'application/json',
208
- ...options.headers
209
- }
210
- });
211
- }
212
- async delete(url, options = {}) {
213
- return this.request(url, { ...options, method: 'DELETE' });
214
- }
215
- delay(ms) {
216
- return new Promise(resolve => setTimeout(resolve, ms));
217
- }
218
- }
219
- exports.HttpClient = HttpClient;
220
- /**
221
- * Executa múltiplas requests em lote com controle de concorrência
222
- */
223
- async function batchRequests(requests, options = {}) {
224
- const { concurrent = 3 } = options;
225
- const results = [];
226
- for (let i = 0; i < requests.length; i += concurrent) {
227
- const batch = requests.slice(i, i + concurrent);
228
- const batchResults = await Promise.all(batch.map(req => req()));
229
- results.push(...batchResults);
230
- }
231
- return results;
232
- }
233
- /**
234
- * Aplica timeout em uma Promise
235
- */
236
- function withTimeout(promise, timeoutMs) {
237
- return Promise.race([
238
- promise,
239
- new Promise((_, reject) => setTimeout(() => reject(new Error(`Operation timed out after ${timeoutMs}ms`)), timeoutMs))
240
- ]);
241
- }
242
- /**
243
- * Debounce para funções async
244
- */
245
- function debounce(func, delay) {
246
- let timeoutId;
247
- let lastCall = null;
248
- return ((...args) => {
249
- return new Promise((resolve, reject) => {
250
- clearTimeout(timeoutId);
251
- timeoutId = setTimeout(async () => {
252
- try {
253
- lastCall = func(...args);
254
- const result = await lastCall;
255
- resolve(result);
256
- }
257
- catch (error) {
258
- reject(error);
259
- }
260
- }, delay);
261
- });
262
- });
263
- }
264
- // =============================================================================
265
- // 🔧 CACHE UTILITIES
266
- // =============================================================================
267
- class SimpleCache {
268
- constructor() {
269
- this.cache = new Map();
270
- }
271
- set(key, value, ttlMs = 300000) {
272
- const expiry = Date.now() + ttlMs;
273
- this.cache.set(key, { value, expiry });
274
- }
275
- get(key) {
276
- const item = this.cache.get(key);
277
- if (!item)
278
- return null;
279
- if (Date.now() > item.expiry) {
280
- this.cache.delete(key);
281
- return null;
282
- }
283
- return item.value;
284
- }
285
- has(key) {
286
- return this.get(key) !== null;
287
- }
288
- delete(key) {
289
- this.cache.delete(key);
290
- }
291
- clear() {
292
- this.cache.clear();
293
- }
294
- size() {
295
- // Limpar itens expirados antes de contar
296
- this.cleanup();
297
- return this.cache.size;
298
- }
299
- cleanup() {
300
- const now = Date.now();
301
- for (const [key, item] of this.cache.entries()) {
302
- if (now > item.expiry) {
303
- this.cache.delete(key);
304
- }
305
- }
306
- }
307
- }
308
- exports.SimpleCache = SimpleCache;
309
- // Instâncias globais de cache
310
- exports.credentialCache = new SimpleCache();
311
- exports.sessionCache = new SimpleCache();
312
- //# sourceMappingURL=utils.js.map