@marktoflow/core 2.0.0-alpha.3
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/dist/bundle.d.ts +43 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/bundle.js +202 -0
- package/dist/bundle.js.map +1 -0
- package/dist/config.d.ts +33 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +27 -0
- package/dist/config.js.map +1 -0
- package/dist/costs.d.ts +182 -0
- package/dist/costs.d.ts.map +1 -0
- package/dist/costs.js +464 -0
- package/dist/costs.js.map +1 -0
- package/dist/credentials.d.ts +162 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +646 -0
- package/dist/credentials.js.map +1 -0
- package/dist/engine.d.ts +137 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +514 -0
- package/dist/engine.js.map +1 -0
- package/dist/env.d.ts +59 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +256 -0
- package/dist/env.js.map +1 -0
- package/dist/failover.d.ts +43 -0
- package/dist/failover.d.ts.map +1 -0
- package/dist/failover.js +53 -0
- package/dist/failover.js.map +1 -0
- package/dist/filewatcher.d.ts +32 -0
- package/dist/filewatcher.d.ts.map +1 -0
- package/dist/filewatcher.js +92 -0
- package/dist/filewatcher.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/logging.d.ts +62 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +211 -0
- package/dist/logging.js.map +1 -0
- package/dist/mcp-loader.d.ts +29 -0
- package/dist/mcp-loader.d.ts.map +1 -0
- package/dist/mcp-loader.js +60 -0
- package/dist/mcp-loader.js.map +1 -0
- package/dist/metrics.d.ts +19 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +65 -0
- package/dist/metrics.js.map +1 -0
- package/dist/models.d.ts +419 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +111 -0
- package/dist/models.js.map +1 -0
- package/dist/parser.d.ts +40 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +287 -0
- package/dist/parser.js.map +1 -0
- package/dist/plugins.d.ts +105 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +182 -0
- package/dist/plugins.js.map +1 -0
- package/dist/queue.d.ts +114 -0
- package/dist/queue.d.ts.map +1 -0
- package/dist/queue.js +385 -0
- package/dist/queue.js.map +1 -0
- package/dist/rollback.d.ts +117 -0
- package/dist/rollback.d.ts.map +1 -0
- package/dist/rollback.js +374 -0
- package/dist/rollback.js.map +1 -0
- package/dist/routing.d.ts +144 -0
- package/dist/routing.d.ts.map +1 -0
- package/dist/routing.js +457 -0
- package/dist/routing.js.map +1 -0
- package/dist/scheduler.d.ts +91 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +259 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/script-tool.d.ts +22 -0
- package/dist/script-tool.d.ts.map +1 -0
- package/dist/script-tool.js +90 -0
- package/dist/script-tool.js.map +1 -0
- package/dist/sdk-registry.d.ts +81 -0
- package/dist/sdk-registry.d.ts.map +1 -0
- package/dist/sdk-registry.js +264 -0
- package/dist/sdk-registry.js.map +1 -0
- package/dist/security.d.ts +155 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +362 -0
- package/dist/security.js.map +1 -0
- package/dist/state.d.ts +67 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +276 -0
- package/dist/state.js.map +1 -0
- package/dist/templates.d.ts +70 -0
- package/dist/templates.d.ts.map +1 -0
- package/dist/templates.js +244 -0
- package/dist/templates.js.map +1 -0
- package/dist/tool-base.d.ts +54 -0
- package/dist/tool-base.d.ts.map +1 -0
- package/dist/tool-base.js +43 -0
- package/dist/tool-base.js.map +1 -0
- package/dist/tool-registry.d.ts +24 -0
- package/dist/tool-registry.d.ts.map +1 -0
- package/dist/tool-registry.js +164 -0
- package/dist/tool-registry.js.map +1 -0
- package/dist/tools/custom-tool.d.ts +16 -0
- package/dist/tools/custom-tool.d.ts.map +1 -0
- package/dist/tools/custom-tool.js +85 -0
- package/dist/tools/custom-tool.js.map +1 -0
- package/dist/tools/mcp-tool.d.ts +16 -0
- package/dist/tools/mcp-tool.d.ts.map +1 -0
- package/dist/tools/mcp-tool.js +98 -0
- package/dist/tools/mcp-tool.js.map +1 -0
- package/dist/tools/openapi-tool.d.ts +17 -0
- package/dist/tools/openapi-tool.d.ts.map +1 -0
- package/dist/tools/openapi-tool.js +165 -0
- package/dist/tools/openapi-tool.js.map +1 -0
- package/dist/trigger-manager.d.ts +26 -0
- package/dist/trigger-manager.d.ts.map +1 -0
- package/dist/trigger-manager.js +107 -0
- package/dist/trigger-manager.js.map +1 -0
- package/dist/webhook.d.ts +95 -0
- package/dist/webhook.d.ts.map +1 -0
- package/dist/webhook.js +261 -0
- package/dist/webhook.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK Registry for marktoflow v2.0
|
|
3
|
+
*
|
|
4
|
+
* Dynamically loads and manages SDK instances for workflow execution.
|
|
5
|
+
* Supports lazy loading and caching of SDK instances.
|
|
6
|
+
*/
|
|
7
|
+
import { McpLoader } from './mcp-loader.js';
|
|
8
|
+
// ============================================================================
|
|
9
|
+
// Default SDK Loader (dynamic import)
|
|
10
|
+
// ============================================================================
|
|
11
|
+
export const defaultSDKLoader = {
|
|
12
|
+
async load(packageName) {
|
|
13
|
+
try {
|
|
14
|
+
// Dynamic import of npm package
|
|
15
|
+
return await import(packageName);
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
throw new Error(`Failed to load SDK '${packageName}'. ` +
|
|
19
|
+
`Make sure it's installed: npm install ${packageName}\n` +
|
|
20
|
+
`Original error: ${error}`);
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
// ============================================================================
|
|
25
|
+
// SDK Initializers for common services
|
|
26
|
+
// ============================================================================
|
|
27
|
+
export const defaultInitializers = {
|
|
28
|
+
'@slack/web-api': {
|
|
29
|
+
async initialize(module, config) {
|
|
30
|
+
const { WebClient } = module;
|
|
31
|
+
const token = config.auth?.['token'];
|
|
32
|
+
if (!token) {
|
|
33
|
+
throw new Error('Slack SDK requires auth.token');
|
|
34
|
+
}
|
|
35
|
+
return new WebClient(token);
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
'@octokit/rest': {
|
|
39
|
+
async initialize(module, config) {
|
|
40
|
+
const { Octokit } = module;
|
|
41
|
+
const token = config.auth?.['token'];
|
|
42
|
+
return new Octokit({ auth: token });
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
'@anthropic-ai/sdk': {
|
|
46
|
+
async initialize(module, config) {
|
|
47
|
+
const Anthropic = module.default;
|
|
48
|
+
const apiKey = config.auth?.['api_key'];
|
|
49
|
+
if (!apiKey) {
|
|
50
|
+
throw new Error('Anthropic SDK requires auth.api_key');
|
|
51
|
+
}
|
|
52
|
+
return new Anthropic({ apiKey });
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
'openai': {
|
|
56
|
+
async initialize(module, config) {
|
|
57
|
+
const OpenAI = module.default;
|
|
58
|
+
const apiKey = config.auth?.['api_key'];
|
|
59
|
+
if (!apiKey) {
|
|
60
|
+
throw new Error('OpenAI SDK requires auth.api_key');
|
|
61
|
+
}
|
|
62
|
+
return new OpenAI({ apiKey });
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
'jira.js': {
|
|
66
|
+
async initialize(module, config) {
|
|
67
|
+
const { Version3Client } = module;
|
|
68
|
+
const host = config.auth?.['host'];
|
|
69
|
+
const email = config.auth?.['email'];
|
|
70
|
+
const apiToken = config.auth?.['api_token'];
|
|
71
|
+
if (!host || !email || !apiToken) {
|
|
72
|
+
throw new Error('Jira SDK requires auth.host, auth.email, and auth.api_token');
|
|
73
|
+
}
|
|
74
|
+
return new Version3Client({
|
|
75
|
+
host,
|
|
76
|
+
authentication: {
|
|
77
|
+
basic: { email, apiToken },
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
// ============================================================================
|
|
84
|
+
// SDK Registry Implementation
|
|
85
|
+
// ============================================================================
|
|
86
|
+
export class SDKRegistry {
|
|
87
|
+
sdks = new Map();
|
|
88
|
+
loader;
|
|
89
|
+
initializers;
|
|
90
|
+
mcpLoader;
|
|
91
|
+
constructor(loader = defaultSDKLoader, initializers = defaultInitializers, mcpLoader) {
|
|
92
|
+
this.loader = loader;
|
|
93
|
+
this.initializers = new Map(Object.entries(initializers));
|
|
94
|
+
this.mcpLoader = mcpLoader || new McpLoader();
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Register tool configurations from a workflow.
|
|
98
|
+
*/
|
|
99
|
+
registerTools(tools) {
|
|
100
|
+
for (const [name, config] of Object.entries(tools)) {
|
|
101
|
+
if (!this.sdks.has(name)) {
|
|
102
|
+
// Store config for lazy loading
|
|
103
|
+
this.sdks.set(name, {
|
|
104
|
+
name,
|
|
105
|
+
sdk: null,
|
|
106
|
+
config,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Check if an SDK is registered.
|
|
113
|
+
*/
|
|
114
|
+
has(name) {
|
|
115
|
+
return this.sdks.has(name);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Load and initialize an SDK.
|
|
119
|
+
*/
|
|
120
|
+
async load(name) {
|
|
121
|
+
const instance = this.sdks.get(name);
|
|
122
|
+
if (!instance) {
|
|
123
|
+
throw new Error(`SDK '${name}' is not registered. Add it to workflow tools.`);
|
|
124
|
+
}
|
|
125
|
+
// Return cached SDK if already loaded
|
|
126
|
+
if (instance.sdk) {
|
|
127
|
+
return instance.sdk;
|
|
128
|
+
}
|
|
129
|
+
// Load the SDK module
|
|
130
|
+
let module;
|
|
131
|
+
try {
|
|
132
|
+
module = await this.loader.load(instance.config.sdk);
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
// If we have an initializer, ignore load error and pass null (e.g. for 'script' tool)
|
|
136
|
+
if (this.initializers.has(instance.config.sdk)) {
|
|
137
|
+
module = null;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
throw error;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Initialize with config
|
|
144
|
+
const initializer = this.initializers.get(instance.config.sdk);
|
|
145
|
+
if (initializer) {
|
|
146
|
+
instance.sdk = await initializer.initialize(module, instance.config);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
// Check for MCP
|
|
150
|
+
if (this.isMcpModule(module)) {
|
|
151
|
+
try {
|
|
152
|
+
const client = await this.mcpLoader.connectModule(module, instance.config);
|
|
153
|
+
instance.sdk = this.createMcpProxy(client);
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
throw new Error(`Failed to connect to MCP module '${instance.config.sdk}': ${error}`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
// No custom initializer - use generic initialization
|
|
161
|
+
instance.sdk = await this.genericInitialize(module, instance.config);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return instance.sdk;
|
|
165
|
+
}
|
|
166
|
+
isMcpModule(module) {
|
|
167
|
+
return typeof module.createMcpServer === 'function';
|
|
168
|
+
}
|
|
169
|
+
createMcpProxy(client) {
|
|
170
|
+
return new Proxy(client, {
|
|
171
|
+
get: (target, prop) => {
|
|
172
|
+
if (typeof prop === 'string') {
|
|
173
|
+
// Avoid treating the proxy as a Thenable
|
|
174
|
+
if (prop === 'then') {
|
|
175
|
+
return undefined;
|
|
176
|
+
}
|
|
177
|
+
// If property is 'close', return the close method
|
|
178
|
+
if (prop === 'close') {
|
|
179
|
+
return target.close.bind(target);
|
|
180
|
+
}
|
|
181
|
+
// Otherwise, treat as tool name
|
|
182
|
+
return async (args) => {
|
|
183
|
+
const result = await client.callTool({
|
|
184
|
+
name: prop,
|
|
185
|
+
arguments: args
|
|
186
|
+
});
|
|
187
|
+
// If tool call fails, it throws? No, Client.callTool throws on error.
|
|
188
|
+
// Result content handling?
|
|
189
|
+
// For now return result.
|
|
190
|
+
return result;
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
return Reflect.get(target, prop);
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Generic SDK initialization for unknown packages.
|
|
199
|
+
*/
|
|
200
|
+
async genericInitialize(module, config) {
|
|
201
|
+
// Try common patterns
|
|
202
|
+
const mod = module;
|
|
203
|
+
// Pattern 1: Default export is a class
|
|
204
|
+
if (typeof mod.default === 'function') {
|
|
205
|
+
const Constructor = mod.default;
|
|
206
|
+
return new Constructor(config.options || config.auth);
|
|
207
|
+
}
|
|
208
|
+
// Pattern 2: Named export 'Client'
|
|
209
|
+
if (typeof mod.Client === 'function') {
|
|
210
|
+
const Client = mod.Client;
|
|
211
|
+
return new Client(config.options || config.auth);
|
|
212
|
+
}
|
|
213
|
+
// Pattern 3: Return module as-is (for utility modules)
|
|
214
|
+
return module;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Register a custom initializer for an SDK.
|
|
218
|
+
*/
|
|
219
|
+
registerInitializer(sdkName, initializer) {
|
|
220
|
+
this.initializers.set(sdkName, initializer);
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Get all registered SDK names.
|
|
224
|
+
*/
|
|
225
|
+
getRegisteredNames() {
|
|
226
|
+
return Array.from(this.sdks.keys());
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Clear all cached SDK instances.
|
|
230
|
+
*/
|
|
231
|
+
clear() {
|
|
232
|
+
this.sdks.clear();
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Create a step executor that invokes SDK methods.
|
|
237
|
+
*/
|
|
238
|
+
export function createSDKStepExecutor() {
|
|
239
|
+
return async (step, _context, sdkRegistry) => {
|
|
240
|
+
const parts = step.action.split('.');
|
|
241
|
+
if (parts.length < 2) {
|
|
242
|
+
throw new Error(`Invalid action format: ${step.action}. Expected: sdk.method or sdk.namespace.method`);
|
|
243
|
+
}
|
|
244
|
+
const sdkName = parts[0];
|
|
245
|
+
const methodPath = parts.slice(1);
|
|
246
|
+
// Load SDK
|
|
247
|
+
const sdk = await sdkRegistry.load(sdkName);
|
|
248
|
+
// Navigate to method
|
|
249
|
+
let current = sdk;
|
|
250
|
+
for (const part of methodPath) {
|
|
251
|
+
if (current === null || current === undefined) {
|
|
252
|
+
throw new Error(`Cannot find ${part} in ${step.action}`);
|
|
253
|
+
}
|
|
254
|
+
current = current[part];
|
|
255
|
+
}
|
|
256
|
+
if (typeof current !== 'function') {
|
|
257
|
+
throw new Error(`${step.action} is not a function`);
|
|
258
|
+
}
|
|
259
|
+
// Call the method
|
|
260
|
+
const method = current;
|
|
261
|
+
return method.call(sdk, step.inputs);
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=sdk-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk-registry.js","sourceRoot":"","sources":["../src/sdk-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security module for marktoflow.
|
|
3
|
+
*
|
|
4
|
+
* Provides RBAC (Role-Based Access Control), approval workflows, and audit logging.
|
|
5
|
+
*/
|
|
6
|
+
export declare enum Permission {
|
|
7
|
+
WORKFLOW_READ = "workflow:read",
|
|
8
|
+
WORKFLOW_EXECUTE = "workflow:execute",
|
|
9
|
+
WORKFLOW_CREATE = "workflow:create",
|
|
10
|
+
WORKFLOW_EDIT = "workflow:edit",
|
|
11
|
+
WORKFLOW_DELETE = "workflow:delete",
|
|
12
|
+
TOOL_USE = "tool:use",
|
|
13
|
+
TOOL_CONFIGURE = "tool:configure",
|
|
14
|
+
USER_MANAGE = "user:manage",
|
|
15
|
+
ROLE_MANAGE = "role:manage",
|
|
16
|
+
CONFIG_MANAGE = "config:manage",
|
|
17
|
+
AUDIT_READ = "audit:read",
|
|
18
|
+
APPROVAL_REQUEST = "approval:request",
|
|
19
|
+
APPROVAL_APPROVE = "approval:approve",
|
|
20
|
+
APPROVAL_REJECT = "approval:reject"
|
|
21
|
+
}
|
|
22
|
+
export interface Role {
|
|
23
|
+
name: string;
|
|
24
|
+
permissions: Set<Permission>;
|
|
25
|
+
description?: string;
|
|
26
|
+
inheritsFrom?: string[];
|
|
27
|
+
}
|
|
28
|
+
export interface User {
|
|
29
|
+
id: string;
|
|
30
|
+
username: string;
|
|
31
|
+
email?: string;
|
|
32
|
+
roles: string[];
|
|
33
|
+
isActive: boolean;
|
|
34
|
+
metadata?: Record<string, unknown>;
|
|
35
|
+
createdAt: Date;
|
|
36
|
+
updatedAt: Date;
|
|
37
|
+
}
|
|
38
|
+
export declare const PREDEFINED_ROLES: Record<string, Role>;
|
|
39
|
+
export declare class RBACManager {
|
|
40
|
+
private roles;
|
|
41
|
+
private users;
|
|
42
|
+
constructor(customRoles?: Role[]);
|
|
43
|
+
addRole(role: Role): void;
|
|
44
|
+
getRole(name: string): Role | undefined;
|
|
45
|
+
addUser(user: User): void;
|
|
46
|
+
getUser(userId: string): User | undefined;
|
|
47
|
+
getUserPermissions(userId: string): Set<Permission>;
|
|
48
|
+
checkPermission(userId: string, permission: Permission): boolean;
|
|
49
|
+
}
|
|
50
|
+
export declare enum ApprovalStatus {
|
|
51
|
+
PENDING = "pending",
|
|
52
|
+
APPROVED = "approved",
|
|
53
|
+
REJECTED = "rejected",
|
|
54
|
+
EXPIRED = "expired",
|
|
55
|
+
CANCELLED = "cancelled"
|
|
56
|
+
}
|
|
57
|
+
export interface ApprovalRequest {
|
|
58
|
+
id: string;
|
|
59
|
+
workflowId: string;
|
|
60
|
+
requesterId: string;
|
|
61
|
+
title: string;
|
|
62
|
+
description?: string | undefined;
|
|
63
|
+
status: ApprovalStatus;
|
|
64
|
+
requiredApprovers: string[];
|
|
65
|
+
minApprovals: number;
|
|
66
|
+
approvals: Array<{
|
|
67
|
+
approverId: string;
|
|
68
|
+
comment?: string | undefined;
|
|
69
|
+
timestamp: Date;
|
|
70
|
+
}>;
|
|
71
|
+
rejections: Array<{
|
|
72
|
+
rejectorId: string;
|
|
73
|
+
reason?: string | undefined;
|
|
74
|
+
timestamp: Date;
|
|
75
|
+
}>;
|
|
76
|
+
metadata: Record<string, unknown>;
|
|
77
|
+
createdAt: Date;
|
|
78
|
+
expiresAt?: Date | undefined;
|
|
79
|
+
resolvedAt?: Date | undefined;
|
|
80
|
+
}
|
|
81
|
+
export interface ApprovalHandler {
|
|
82
|
+
onApprovalRequested(request: ApprovalRequest): Promise<void>;
|
|
83
|
+
onApprovalApproved(request: ApprovalRequest, approverId: string): Promise<void>;
|
|
84
|
+
onApprovalRejected(request: ApprovalRequest, rejectorId: string): Promise<void>;
|
|
85
|
+
}
|
|
86
|
+
export declare class ApprovalManager {
|
|
87
|
+
private requests;
|
|
88
|
+
private handlers;
|
|
89
|
+
private rbac?;
|
|
90
|
+
constructor(rbac?: RBACManager | undefined);
|
|
91
|
+
addHandler(handler: ApprovalHandler): void;
|
|
92
|
+
createRequest(params: {
|
|
93
|
+
requesterId: string;
|
|
94
|
+
workflowId: string;
|
|
95
|
+
title: string;
|
|
96
|
+
description?: string;
|
|
97
|
+
requiredApprovers?: string[];
|
|
98
|
+
minApprovals?: number;
|
|
99
|
+
expiresInHours?: number;
|
|
100
|
+
metadata?: Record<string, unknown>;
|
|
101
|
+
}): Promise<ApprovalRequest>;
|
|
102
|
+
getRequest(requestId: string): ApprovalRequest | undefined;
|
|
103
|
+
approve(requestId: string, approverId: string, comment?: string): Promise<ApprovalRequest>;
|
|
104
|
+
reject(requestId: string, rejectorId: string, reason?: string): Promise<ApprovalRequest>;
|
|
105
|
+
}
|
|
106
|
+
export declare enum AuditEventType {
|
|
107
|
+
LOGIN = "auth.login",
|
|
108
|
+
WORKFLOW_EXECUTED = "workflow.executed",
|
|
109
|
+
WORKFLOW_COMPLETED = "workflow.completed",
|
|
110
|
+
WORKFLOW_FAILED = "workflow.failed",
|
|
111
|
+
PERMISSION_DENIED = "security.permission_denied"
|
|
112
|
+
}
|
|
113
|
+
export interface AuditEvent {
|
|
114
|
+
id: string;
|
|
115
|
+
eventType: AuditEventType | string;
|
|
116
|
+
userId?: string;
|
|
117
|
+
resourceType?: string;
|
|
118
|
+
resourceId?: string;
|
|
119
|
+
action?: string;
|
|
120
|
+
details: Record<string, unknown>;
|
|
121
|
+
ipAddress?: string;
|
|
122
|
+
userAgent?: string;
|
|
123
|
+
timestamp: Date;
|
|
124
|
+
success: boolean;
|
|
125
|
+
errorMessage?: string;
|
|
126
|
+
}
|
|
127
|
+
export interface AuditStore {
|
|
128
|
+
save(event: AuditEvent): Promise<void>;
|
|
129
|
+
query(filters: {
|
|
130
|
+
eventType?: string;
|
|
131
|
+
userId?: string;
|
|
132
|
+
startTime?: Date;
|
|
133
|
+
endTime?: Date;
|
|
134
|
+
limit?: number;
|
|
135
|
+
offset?: number;
|
|
136
|
+
}): Promise<AuditEvent[]>;
|
|
137
|
+
}
|
|
138
|
+
export declare class InMemoryAuditStore implements AuditStore {
|
|
139
|
+
private events;
|
|
140
|
+
save(event: AuditEvent): Promise<void>;
|
|
141
|
+
query(filters: any): Promise<AuditEvent[]>;
|
|
142
|
+
}
|
|
143
|
+
export declare class SQLiteAuditStore implements AuditStore {
|
|
144
|
+
private db;
|
|
145
|
+
constructor(dbPath?: string);
|
|
146
|
+
private init;
|
|
147
|
+
save(event: AuditEvent): Promise<void>;
|
|
148
|
+
query(filters: any): Promise<AuditEvent[]>;
|
|
149
|
+
}
|
|
150
|
+
export declare class AuditLogger {
|
|
151
|
+
private store;
|
|
152
|
+
constructor(store?: AuditStore);
|
|
153
|
+
log(event: Omit<AuditEvent, 'id' | 'timestamp'>): Promise<string>;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=security.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"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"}
|