cast-code 1.0.0
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/LICENSE +21 -0
- package/README.md +217 -0
- package/dist/app.module.js +45 -0
- package/dist/app.module.js.map +1 -0
- package/dist/common/common.module.js +49 -0
- package/dist/common/common.module.js.map +1 -0
- package/dist/common/constants/index.js +105 -0
- package/dist/common/constants/index.js.map +1 -0
- package/dist/common/index.js +24 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/services/config.service.js +119 -0
- package/dist/common/services/config.service.js.map +1 -0
- package/dist/common/services/llm.service.js +56 -0
- package/dist/common/services/llm.service.js.map +1 -0
- package/dist/common/services/markdown-parser.service.js +101 -0
- package/dist/common/services/markdown-parser.service.js.map +1 -0
- package/dist/common/services/markdown-renderer.service.js +220 -0
- package/dist/common/services/markdown-renderer.service.js.map +1 -0
- package/dist/common/services/multi-llm.service.js +115 -0
- package/dist/common/services/multi-llm.service.js.map +1 -0
- package/dist/common/types/index.js +20 -0
- package/dist/common/types/index.js.map +1 -0
- package/dist/common/types/markdown.types.js +6 -0
- package/dist/common/types/markdown.types.js.map +1 -0
- package/dist/main.js +84 -0
- package/dist/main.js.map +1 -0
- package/dist/modules/agents/agents.module.js +43 -0
- package/dist/modules/agents/agents.module.js.map +1 -0
- package/dist/modules/agents/definitions/architect.md +35 -0
- package/dist/modules/agents/definitions/backend.md +43 -0
- package/dist/modules/agents/definitions/coder.md +34 -0
- package/dist/modules/agents/definitions/devops.md +42 -0
- package/dist/modules/agents/definitions/frontend.md +46 -0
- package/dist/modules/agents/definitions/reviewer.md +35 -0
- package/dist/modules/agents/definitions/tester.md +41 -0
- package/dist/modules/agents/index.js +23 -0
- package/dist/modules/agents/index.js.map +1 -0
- package/dist/modules/agents/services/agent-loader.service.js +150 -0
- package/dist/modules/agents/services/agent-loader.service.js.map +1 -0
- package/dist/modules/agents/services/agent-registry.service.js +108 -0
- package/dist/modules/agents/services/agent-registry.service.js.map +1 -0
- package/dist/modules/agents/types/agent.types.js +6 -0
- package/dist/modules/agents/types/agent.types.js.map +1 -0
- package/dist/modules/agents/types/index.js +20 -0
- package/dist/modules/agents/types/index.js.map +1 -0
- package/dist/modules/config/config.module.js +38 -0
- package/dist/modules/config/config.module.js.map +1 -0
- package/dist/modules/config/index.js +24 -0
- package/dist/modules/config/index.js.map +1 -0
- package/dist/modules/config/services/config-commands.service.js +405 -0
- package/dist/modules/config/services/config-commands.service.js.map +1 -0
- package/dist/modules/config/services/config-manager.service.js +175 -0
- package/dist/modules/config/services/config-manager.service.js.map +1 -0
- package/dist/modules/config/services/init-config.service.js +238 -0
- package/dist/modules/config/services/init-config.service.js.map +1 -0
- package/dist/modules/config/types/config.types.js +163 -0
- package/dist/modules/config/types/config.types.js.map +1 -0
- package/dist/modules/config/types/index.js +20 -0
- package/dist/modules/config/types/index.js.map +1 -0
- package/dist/modules/core/core.module.js +60 -0
- package/dist/modules/core/core.module.js.map +1 -0
- package/dist/modules/core/index.js +22 -0
- package/dist/modules/core/index.js.map +1 -0
- package/dist/modules/core/services/deep-agent.service.js +575 -0
- package/dist/modules/core/services/deep-agent.service.js.map +1 -0
- package/dist/modules/core/services/plan-mode.service.js +225 -0
- package/dist/modules/core/services/plan-mode.service.js.map +1 -0
- package/dist/modules/git/git.module.js +48 -0
- package/dist/modules/git/git.module.js.map +1 -0
- package/dist/modules/git/index.js +23 -0
- package/dist/modules/git/index.js.map +1 -0
- package/dist/modules/git/services/code-review.service.js +330 -0
- package/dist/modules/git/services/code-review.service.js.map +1 -0
- package/dist/modules/git/services/commit-generator.service.js +403 -0
- package/dist/modules/git/services/commit-generator.service.js.map +1 -0
- package/dist/modules/git/services/index.js +21 -0
- package/dist/modules/git/services/index.js.map +1 -0
- package/dist/modules/git/services/monorepo-detector.service.js +338 -0
- package/dist/modules/git/services/monorepo-detector.service.js.map +1 -0
- package/dist/modules/git/services/pr-generator.service.js +429 -0
- package/dist/modules/git/services/pr-generator.service.js.map +1 -0
- package/dist/modules/git/services/release-notes.service.js +426 -0
- package/dist/modules/git/services/release-notes.service.js.map +1 -0
- package/dist/modules/git/types/git.types.js +6 -0
- package/dist/modules/git/types/git.types.js.map +1 -0
- package/dist/modules/git/types/index.js +20 -0
- package/dist/modules/git/types/index.js.map +1 -0
- package/dist/modules/mcp/catalog/mcp-templates.js +606 -0
- package/dist/modules/mcp/catalog/mcp-templates.js.map +1 -0
- package/dist/modules/mcp/index.js +23 -0
- package/dist/modules/mcp/index.js.map +1 -0
- package/dist/modules/mcp/mcp.module.js +35 -0
- package/dist/modules/mcp/mcp.module.js.map +1 -0
- package/dist/modules/mcp/services/mcp-client.service.js +289 -0
- package/dist/modules/mcp/services/mcp-client.service.js.map +1 -0
- package/dist/modules/mcp/services/mcp-registry.service.js +197 -0
- package/dist/modules/mcp/services/mcp-registry.service.js.map +1 -0
- package/dist/modules/mcp/types/index.js +20 -0
- package/dist/modules/mcp/types/index.js.map +1 -0
- package/dist/modules/mcp/types/mcp.types.js +6 -0
- package/dist/modules/mcp/types/mcp.types.js.map +1 -0
- package/dist/modules/memory/index.js +23 -0
- package/dist/modules/memory/index.js.map +1 -0
- package/dist/modules/memory/memory.module.js +35 -0
- package/dist/modules/memory/memory.module.js.map +1 -0
- package/dist/modules/memory/services/memory-tools.service.js +78 -0
- package/dist/modules/memory/services/memory-tools.service.js.map +1 -0
- package/dist/modules/memory/services/memory.service.js +169 -0
- package/dist/modules/memory/services/memory.service.js.map +1 -0
- package/dist/modules/memory/types/index.js +20 -0
- package/dist/modules/memory/types/index.js.map +1 -0
- package/dist/modules/memory/types/memory.types.js +6 -0
- package/dist/modules/memory/types/memory.types.js.map +1 -0
- package/dist/modules/mentions/index.js +22 -0
- package/dist/modules/mentions/index.js.map +1 -0
- package/dist/modules/mentions/mentions.module.js +32 -0
- package/dist/modules/mentions/mentions.module.js.map +1 -0
- package/dist/modules/mentions/services/mentions.service.js +336 -0
- package/dist/modules/mentions/services/mentions.service.js.map +1 -0
- package/dist/modules/mentions/types/index.js +20 -0
- package/dist/modules/mentions/types/index.js.map +1 -0
- package/dist/modules/mentions/types/mention.types.js +19 -0
- package/dist/modules/mentions/types/mention.types.js.map +1 -0
- package/dist/modules/permissions/index.js +23 -0
- package/dist/modules/permissions/index.js.map +1 -0
- package/dist/modules/permissions/permissions.module.js +35 -0
- package/dist/modules/permissions/permissions.module.js.map +1 -0
- package/dist/modules/permissions/services/permission.service.js +269 -0
- package/dist/modules/permissions/services/permission.service.js.map +1 -0
- package/dist/modules/permissions/services/prompt.service.js +116 -0
- package/dist/modules/permissions/services/prompt.service.js.map +1 -0
- package/dist/modules/permissions/types/permission.types.js +32 -0
- package/dist/modules/permissions/types/permission.types.js.map +1 -0
- package/dist/modules/project/index.js +24 -0
- package/dist/modules/project/index.js.map +1 -0
- package/dist/modules/project/project.module.js +38 -0
- package/dist/modules/project/project.module.js.map +1 -0
- package/dist/modules/project/services/project-analyzer.service.js +1063 -0
- package/dist/modules/project/services/project-analyzer.service.js.map +1 -0
- package/dist/modules/project/services/project-context.service.js +62 -0
- package/dist/modules/project/services/project-context.service.js.map +1 -0
- package/dist/modules/project/services/project-loader.service.js +147 -0
- package/dist/modules/project/services/project-loader.service.js.map +1 -0
- package/dist/modules/project/types/index.js +20 -0
- package/dist/modules/project/types/index.js.map +1 -0
- package/dist/modules/project/types/project.types.js +6 -0
- package/dist/modules/project/types/project.types.js.map +1 -0
- package/dist/modules/repl/index.js +21 -0
- package/dist/modules/repl/index.js.map +1 -0
- package/dist/modules/repl/repl.module.js +66 -0
- package/dist/modules/repl/repl.module.js.map +1 -0
- package/dist/modules/repl/services/commands/agent-commands.service.js +196 -0
- package/dist/modules/repl/services/commands/agent-commands.service.js.map +1 -0
- package/dist/modules/repl/services/commands/git-commands.service.js +500 -0
- package/dist/modules/repl/services/commands/git-commands.service.js.map +1 -0
- package/dist/modules/repl/services/commands/mcp-commands.service.js +579 -0
- package/dist/modules/repl/services/commands/mcp-commands.service.js.map +1 -0
- package/dist/modules/repl/services/commands/project-commands.service.js +226 -0
- package/dist/modules/repl/services/commands/project-commands.service.js.map +1 -0
- package/dist/modules/repl/services/commands/repl-commands.service.js +254 -0
- package/dist/modules/repl/services/commands/repl-commands.service.js.map +1 -0
- package/dist/modules/repl/services/repl.service.js +647 -0
- package/dist/modules/repl/services/repl.service.js.map +1 -0
- package/dist/modules/repl/services/smart-input.js +544 -0
- package/dist/modules/repl/services/smart-input.js.map +1 -0
- package/dist/modules/repl/services/welcome-screen.service.js +117 -0
- package/dist/modules/repl/services/welcome-screen.service.js.map +1 -0
- package/dist/modules/repl/utils/prompts-with-esc.js +187 -0
- package/dist/modules/repl/utils/prompts-with-esc.js.map +1 -0
- package/dist/modules/repl/utils/theme.js +185 -0
- package/dist/modules/repl/utils/theme.js.map +1 -0
- package/dist/modules/skills/definitions/general/file-operations.md +60 -0
- package/dist/modules/skills/definitions/general/git-operations.md +59 -0
- package/dist/modules/skills/definitions/general/planning.md +86 -0
- package/dist/modules/skills/definitions/general/search.md +59 -0
- package/dist/modules/skills/definitions/specialized/api-design.md +85 -0
- package/dist/modules/skills/definitions/specialized/database-operations.md +78 -0
- package/dist/modules/skills/definitions/specialized/frontend-bootstrap.md +71 -0
- package/dist/modules/skills/definitions/specialized/react-patterns.md +77 -0
- package/dist/modules/skills/definitions/specialized/testing-strategies.md +79 -0
- package/dist/modules/skills/index.js +23 -0
- package/dist/modules/skills/index.js.map +1 -0
- package/dist/modules/skills/services/skill-loader.service.js +130 -0
- package/dist/modules/skills/services/skill-loader.service.js.map +1 -0
- package/dist/modules/skills/services/skill-registry.service.js +96 -0
- package/dist/modules/skills/services/skill-registry.service.js.map +1 -0
- package/dist/modules/skills/skills.module.js +38 -0
- package/dist/modules/skills/skills.module.js.map +1 -0
- package/dist/modules/skills/types/index.js +20 -0
- package/dist/modules/skills/types/index.js.map +1 -0
- package/dist/modules/skills/types/skill.types.js +6 -0
- package/dist/modules/skills/types/skill.types.js.map +1 -0
- package/dist/modules/tasks/index.js +24 -0
- package/dist/modules/tasks/index.js.map +1 -0
- package/dist/modules/tasks/services/plan-executor.service.js +199 -0
- package/dist/modules/tasks/services/plan-executor.service.js.map +1 -0
- package/dist/modules/tasks/services/plan-mode.service.js +118 -0
- package/dist/modules/tasks/services/plan-mode.service.js.map +1 -0
- package/dist/modules/tasks/services/plan-persistence.service.js +148 -0
- package/dist/modules/tasks/services/plan-persistence.service.js.map +1 -0
- package/dist/modules/tasks/services/task-management.service.js +255 -0
- package/dist/modules/tasks/services/task-management.service.js.map +1 -0
- package/dist/modules/tasks/services/task-tools.service.js +270 -0
- package/dist/modules/tasks/services/task-tools.service.js.map +1 -0
- package/dist/modules/tasks/tasks.module.js +49 -0
- package/dist/modules/tasks/tasks.module.js.map +1 -0
- package/dist/modules/tasks/types/task.types.js +21 -0
- package/dist/modules/tasks/types/task.types.js.map +1 -0
- package/dist/modules/tools/index.js +24 -0
- package/dist/modules/tools/index.js.map +1 -0
- package/dist/modules/tools/services/filesystem-tools.service.js +450 -0
- package/dist/modules/tools/services/filesystem-tools.service.js.map +1 -0
- package/dist/modules/tools/services/search-tools.service.js +63 -0
- package/dist/modules/tools/services/search-tools.service.js.map +1 -0
- package/dist/modules/tools/services/shell-tools.service.js +194 -0
- package/dist/modules/tools/services/shell-tools.service.js.map +1 -0
- package/dist/modules/tools/services/tools-registry.service.js +83 -0
- package/dist/modules/tools/services/tools-registry.service.js.map +1 -0
- package/dist/modules/tools/tools.module.js +46 -0
- package/dist/modules/tools/tools.module.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "PermissionService", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return PermissionService;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _common = require("@nestjs/common");
|
|
12
|
+
const _promises = /*#__PURE__*/ _interop_require_wildcard(require("node:fs/promises"));
|
|
13
|
+
const _path = /*#__PURE__*/ _interop_require_wildcard(require("path"));
|
|
14
|
+
const _os = /*#__PURE__*/ _interop_require_wildcard(require("os"));
|
|
15
|
+
const _permissiontypes = require("../types/permission.types");
|
|
16
|
+
const _promptservice = require("./prompt.service");
|
|
17
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
18
|
+
if (typeof WeakMap !== "function") return null;
|
|
19
|
+
var cacheBabelInterop = new WeakMap();
|
|
20
|
+
var cacheNodeInterop = new WeakMap();
|
|
21
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
22
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
23
|
+
})(nodeInterop);
|
|
24
|
+
}
|
|
25
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
26
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
27
|
+
return obj;
|
|
28
|
+
}
|
|
29
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
30
|
+
return {
|
|
31
|
+
default: obj
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
35
|
+
if (cache && cache.has(obj)) {
|
|
36
|
+
return cache.get(obj);
|
|
37
|
+
}
|
|
38
|
+
var newObj = {
|
|
39
|
+
__proto__: null
|
|
40
|
+
};
|
|
41
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
42
|
+
for(var key in obj){
|
|
43
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
44
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
45
|
+
if (desc && (desc.get || desc.set)) {
|
|
46
|
+
Object.defineProperty(newObj, key, desc);
|
|
47
|
+
} else {
|
|
48
|
+
newObj[key] = obj[key];
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
newObj.default = obj;
|
|
53
|
+
if (cache) {
|
|
54
|
+
cache.set(obj, newObj);
|
|
55
|
+
}
|
|
56
|
+
return newObj;
|
|
57
|
+
}
|
|
58
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
59
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
60
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
61
|
+
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
62
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
63
|
+
}
|
|
64
|
+
function _ts_metadata(k, v) {
|
|
65
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
66
|
+
}
|
|
67
|
+
let PermissionService = class PermissionService {
|
|
68
|
+
async initialize() {
|
|
69
|
+
try {
|
|
70
|
+
const configDir = _path.dirname(this.configPath);
|
|
71
|
+
await _promises.mkdir(configDir, {
|
|
72
|
+
recursive: true
|
|
73
|
+
});
|
|
74
|
+
try {
|
|
75
|
+
const content = await _promises.readFile(this.configPath, 'utf-8');
|
|
76
|
+
const saved = JSON.parse(content);
|
|
77
|
+
this.config.rules = saved.rules || [];
|
|
78
|
+
} catch {
|
|
79
|
+
// Arquivo não existe ainda, usar config padrão
|
|
80
|
+
}
|
|
81
|
+
} catch (error) {
|
|
82
|
+
console.error('Error initializing permissions:', error);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
async checkPermission(command) {
|
|
86
|
+
const dangerLevel = this.getDangerLevel(command);
|
|
87
|
+
if (dangerLevel === _permissiontypes.DangerLevel.SAFE) {
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
const existingRule = this.findMatchingRule(command);
|
|
91
|
+
if (existingRule && existingRule.allowed) {
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
if (existingRule && !existingRule.allowed) {
|
|
95
|
+
this.promptService.error('Command denied by saved rule');
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
const response = await this.requestPermission(command, dangerLevel);
|
|
99
|
+
if (response.scope !== _permissiontypes.PermissionScope.ONCE) {
|
|
100
|
+
await this.saveRule(command, response);
|
|
101
|
+
}
|
|
102
|
+
return response.allowed;
|
|
103
|
+
}
|
|
104
|
+
getDangerLevel(command) {
|
|
105
|
+
for (const pattern of this.DANGER_PATTERNS[_permissiontypes.DangerLevel.DANGEROUS]){
|
|
106
|
+
if (pattern.test(command)) {
|
|
107
|
+
return _permissiontypes.DangerLevel.DANGEROUS;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
for (const pattern of this.DANGER_PATTERNS[_permissiontypes.DangerLevel.CAUTIOUS]){
|
|
111
|
+
if (pattern.test(command)) {
|
|
112
|
+
return _permissiontypes.DangerLevel.CAUTIOUS;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return _permissiontypes.DangerLevel.SAFE;
|
|
116
|
+
}
|
|
117
|
+
findMatchingRule(command) {
|
|
118
|
+
const sessionRule = this.sessionRules.get(command);
|
|
119
|
+
if (sessionRule) return sessionRule;
|
|
120
|
+
for (const rule of this.config.rules){
|
|
121
|
+
if (this.matchesPattern(command, rule.pattern)) {
|
|
122
|
+
return rule;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
matchesPattern(command, pattern) {
|
|
128
|
+
if (pattern.startsWith('/') && pattern.endsWith('/')) {
|
|
129
|
+
const regex = new RegExp(pattern.slice(1, -1));
|
|
130
|
+
return regex.test(command);
|
|
131
|
+
}
|
|
132
|
+
return command === pattern;
|
|
133
|
+
}
|
|
134
|
+
async requestPermission(command, dangerLevel) {
|
|
135
|
+
console.log('');
|
|
136
|
+
this.promptService.warn(`Permission required to execute command:`);
|
|
137
|
+
console.log(` ${command}`);
|
|
138
|
+
console.log('');
|
|
139
|
+
if (dangerLevel === _permissiontypes.DangerLevel.DANGEROUS) {
|
|
140
|
+
this.promptService.error('⚠️ WARNING: This command is potentially DANGEROUS!');
|
|
141
|
+
}
|
|
142
|
+
const choices = [
|
|
143
|
+
{
|
|
144
|
+
key: 'allow-once',
|
|
145
|
+
label: 'Allow once',
|
|
146
|
+
description: 'Execute just this time'
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
key: 'allow-session',
|
|
150
|
+
label: 'Allow for session',
|
|
151
|
+
description: 'Allow during this session'
|
|
152
|
+
},
|
|
153
|
+
...dangerLevel !== _permissiontypes.DangerLevel.DANGEROUS ? [
|
|
154
|
+
{
|
|
155
|
+
key: 'allow-always',
|
|
156
|
+
label: 'Always allow',
|
|
157
|
+
description: 'Never ask again for this command'
|
|
158
|
+
}
|
|
159
|
+
] : [],
|
|
160
|
+
{
|
|
161
|
+
key: 'deny',
|
|
162
|
+
label: 'Deny',
|
|
163
|
+
description: 'Do not execute'
|
|
164
|
+
}
|
|
165
|
+
];
|
|
166
|
+
const choice = await this.promptService.choice('What do you want to do?', choices);
|
|
167
|
+
switch(choice){
|
|
168
|
+
case 'allow-once':
|
|
169
|
+
return {
|
|
170
|
+
allowed: true,
|
|
171
|
+
scope: _permissiontypes.PermissionScope.ONCE
|
|
172
|
+
};
|
|
173
|
+
case 'allow-session':
|
|
174
|
+
return {
|
|
175
|
+
allowed: true,
|
|
176
|
+
scope: _permissiontypes.PermissionScope.SESSION
|
|
177
|
+
};
|
|
178
|
+
case 'allow-always':
|
|
179
|
+
return {
|
|
180
|
+
allowed: true,
|
|
181
|
+
scope: _permissiontypes.PermissionScope.ALWAYS
|
|
182
|
+
};
|
|
183
|
+
case 'deny':
|
|
184
|
+
return {
|
|
185
|
+
allowed: false,
|
|
186
|
+
scope: _permissiontypes.PermissionScope.ONCE
|
|
187
|
+
};
|
|
188
|
+
default:
|
|
189
|
+
return {
|
|
190
|
+
allowed: false,
|
|
191
|
+
scope: _permissiontypes.PermissionScope.ONCE
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
async saveRule(command, response) {
|
|
196
|
+
const rule = {
|
|
197
|
+
pattern: command,
|
|
198
|
+
allowed: response.allowed,
|
|
199
|
+
scope: response.scope,
|
|
200
|
+
createdAt: Date.now()
|
|
201
|
+
};
|
|
202
|
+
if (response.scope === _permissiontypes.PermissionScope.SESSION) {
|
|
203
|
+
this.sessionRules.set(command, rule);
|
|
204
|
+
} else if (response.scope === _permissiontypes.PermissionScope.ALWAYS) {
|
|
205
|
+
this.config.rules.push(rule);
|
|
206
|
+
await this.persistConfig();
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
async persistConfig() {
|
|
210
|
+
try {
|
|
211
|
+
await _promises.writeFile(this.configPath, JSON.stringify(this.config, null, 2), 'utf-8');
|
|
212
|
+
} catch (error) {
|
|
213
|
+
this.promptService.error('Failed to save permissions config: ' + error.message);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
clearSession() {
|
|
217
|
+
this.sessionRules.clear();
|
|
218
|
+
}
|
|
219
|
+
async removeRule(pattern) {
|
|
220
|
+
this.config.rules = this.config.rules.filter((r)=>r.pattern !== pattern);
|
|
221
|
+
await this.persistConfig();
|
|
222
|
+
}
|
|
223
|
+
listRules() {
|
|
224
|
+
return [
|
|
225
|
+
...this.config.rules
|
|
226
|
+
];
|
|
227
|
+
}
|
|
228
|
+
constructor(promptService){
|
|
229
|
+
this.promptService = promptService;
|
|
230
|
+
this.sessionRules = new Map();
|
|
231
|
+
this.DANGER_PATTERNS = {
|
|
232
|
+
[_permissiontypes.DangerLevel.DANGEROUS]: [
|
|
233
|
+
/rm\s+(-rf|--recursive\s+--force)/,
|
|
234
|
+
/dd\s+if=.*of=/,
|
|
235
|
+
/mkfs/,
|
|
236
|
+
/:(){ :|:& };:/,
|
|
237
|
+
/curl.*\|\s*(bash|sh)/,
|
|
238
|
+
/wget.*\|\s*(bash|sh)/,
|
|
239
|
+
/>\s*\/dev\/sd[a-z]/
|
|
240
|
+
],
|
|
241
|
+
[_permissiontypes.DangerLevel.CAUTIOUS]: [
|
|
242
|
+
/^rm\s/,
|
|
243
|
+
/^mv\s/,
|
|
244
|
+
/^chmod\s/,
|
|
245
|
+
/^chown\s/,
|
|
246
|
+
/npm\s+install.*-g/,
|
|
247
|
+
/sudo\s/,
|
|
248
|
+
/git\s+push.*--force/,
|
|
249
|
+
/git\s+reset.*--hard/
|
|
250
|
+
],
|
|
251
|
+
[_permissiontypes.DangerLevel.SAFE]: []
|
|
252
|
+
};
|
|
253
|
+
this.configPath = _path.join(_os.homedir(), '.cast', 'permissions.json');
|
|
254
|
+
this.config = {
|
|
255
|
+
rules: [],
|
|
256
|
+
sessionRules: [],
|
|
257
|
+
dangerPatterns: this.DANGER_PATTERNS
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
PermissionService = _ts_decorate([
|
|
262
|
+
(0, _common.Injectable)(),
|
|
263
|
+
_ts_metadata("design:type", Function),
|
|
264
|
+
_ts_metadata("design:paramtypes", [
|
|
265
|
+
typeof _promptservice.PromptService === "undefined" ? Object : _promptservice.PromptService
|
|
266
|
+
])
|
|
267
|
+
], PermissionService);
|
|
268
|
+
|
|
269
|
+
//# sourceMappingURL=permission.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/permissions/services/permission.service.ts"],"sourcesContent":["import { Injectable } from '@nestjs/common';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport * as os from 'os';\nimport {\n PermissionScope,\n PermissionResponse,\n PermissionRule,\n PermissionsConfig,\n DangerLevel,\n} from '../types/permission.types';\nimport { PromptService } from './prompt.service';\n\n@Injectable()\nexport class PermissionService {\n private config: PermissionsConfig;\n private configPath: string;\n private sessionRules: Map<string, PermissionRule> = new Map();\n\n private readonly DANGER_PATTERNS = {\n [DangerLevel.DANGEROUS]: [\n /rm\\s+(-rf|--recursive\\s+--force)/,\n /dd\\s+if=.*of=/,\n /mkfs/,\n /:(){ :|:& };:/,\n /curl.*\\|\\s*(bash|sh)/,\n /wget.*\\|\\s*(bash|sh)/,\n />\\s*\\/dev\\/sd[a-z]/, \n ],\n [DangerLevel.CAUTIOUS]: [\n /^rm\\s/,\n /^mv\\s/,\n /^chmod\\s/,\n /^chown\\s/, \n /npm\\s+install.*-g/,\n /sudo\\s/,\n /git\\s+push.*--force/,\n /git\\s+reset.*--hard/,\n ],\n [DangerLevel.SAFE]: [],\n };\n\n constructor(private promptService: PromptService) {\n this.configPath = path.join(os.homedir(), '.cast', 'permissions.json');\n this.config = {\n rules: [],\n sessionRules: [],\n dangerPatterns: this.DANGER_PATTERNS,\n };\n }\n\n async initialize(): Promise<void> {\n try {\n const configDir = path.dirname(this.configPath);\n await fs.mkdir(configDir, { recursive: true });\n\n try {\n const content = await fs.readFile(this.configPath, 'utf-8');\n const saved = JSON.parse(content);\n this.config.rules = saved.rules || [];\n } catch {\n // Arquivo não existe ainda, usar config padrão\n }\n } catch (error) {\n console.error('Error initializing permissions:', error);\n }\n }\n async checkPermission(command: string): Promise<boolean> {\n const dangerLevel = this.getDangerLevel(command);\n\n if (dangerLevel === DangerLevel.SAFE) {\n return true;\n }\n\n const existingRule = this.findMatchingRule(command);\n if (existingRule && existingRule.allowed) {\n return true;\n }\n if (existingRule && !existingRule.allowed) {\n this.promptService.error('Command denied by saved rule');\n return false;\n }\n\n const response = await this.requestPermission(command, dangerLevel);\n\n if (response.scope !== PermissionScope.ONCE) {\n await this.saveRule(command, response);\n }\n\n return response.allowed;\n }\n\n private getDangerLevel(command: string): DangerLevel {\n for (const pattern of this.DANGER_PATTERNS[DangerLevel.DANGEROUS]) {\n if (pattern.test(command)) {\n return DangerLevel.DANGEROUS;\n }\n }\n\n for (const pattern of this.DANGER_PATTERNS[DangerLevel.CAUTIOUS]) {\n if (pattern.test(command)) {\n return DangerLevel.CAUTIOUS;\n }\n }\n\n return DangerLevel.SAFE;\n }\n\n private findMatchingRule(command: string): PermissionRule | null {\n const sessionRule = this.sessionRules.get(command);\n if (sessionRule) return sessionRule;\n\n for (const rule of this.config.rules) {\n if (this.matchesPattern(command, rule.pattern)) {\n return rule;\n }\n }\n\n return null;\n }\n\n private matchesPattern(command: string, pattern: string): boolean {\n if (pattern.startsWith('/') && pattern.endsWith('/')) {\n const regex = new RegExp(pattern.slice(1, -1));\n return regex.test(command);\n }\n\n return command === pattern;\n }\n\n private async requestPermission(\n command: string,\n dangerLevel: DangerLevel,\n ): Promise<PermissionResponse> {\n console.log('');\n this.promptService.warn(`Permission required to execute command:`);\n console.log(` ${command}`);\n console.log('');\n\n if (dangerLevel === DangerLevel.DANGEROUS) {\n this.promptService.error('⚠️ WARNING: This command is potentially DANGEROUS!');\n }\n\n const choices = [\n { key: 'allow-once', label: 'Allow once', description: 'Execute just this time' },\n {\n key: 'allow-session',\n label: 'Allow for session',\n description: 'Allow during this session',\n },\n ...(dangerLevel !== DangerLevel.DANGEROUS\n ? [\n {\n key: 'allow-always',\n label: 'Always allow',\n description: 'Never ask again for this command',\n },\n ]\n : []),\n { key: 'deny', label: 'Deny', description: 'Do not execute' },\n ];\n\n const choice = await this.promptService.choice('What do you want to do?', choices);\n\n switch (choice) {\n case 'allow-once':\n return { allowed: true, scope: PermissionScope.ONCE };\n case 'allow-session':\n return { allowed: true, scope: PermissionScope.SESSION };\n case 'allow-always':\n return { allowed: true, scope: PermissionScope.ALWAYS };\n case 'deny':\n return { allowed: false, scope: PermissionScope.ONCE };\n default:\n return { allowed: false, scope: PermissionScope.ONCE };\n }\n }\n\n private async saveRule(command: string, response: PermissionResponse): Promise<void> {\n const rule: PermissionRule = {\n pattern: command,\n allowed: response.allowed,\n scope: response.scope,\n createdAt: Date.now(),\n };\n\n if (response.scope === PermissionScope.SESSION) {\n this.sessionRules.set(command, rule);\n } else if (response.scope === PermissionScope.ALWAYS) {\n this.config.rules.push(rule);\n await this.persistConfig();\n }\n }\n\n private async persistConfig(): Promise<void> {\n try {\n await fs.writeFile(this.configPath, JSON.stringify(this.config, null, 2), 'utf-8');\n } catch (error) {\n this.promptService.error('Failed to save permissions config: ' + (error as Error).message);\n }\n }\n\n clearSession(): void {\n this.sessionRules.clear();\n }\n\n async removeRule(pattern: string): Promise<void> {\n this.config.rules = this.config.rules.filter((r) => r.pattern !== pattern);\n await this.persistConfig();\n }\n\n listRules(): PermissionRule[] {\n return [...this.config.rules];\n }\n}\n"],"names":["PermissionService","initialize","configDir","path","dirname","configPath","fs","mkdir","recursive","content","readFile","saved","JSON","parse","config","rules","error","console","checkPermission","command","dangerLevel","getDangerLevel","DangerLevel","SAFE","existingRule","findMatchingRule","allowed","promptService","response","requestPermission","scope","PermissionScope","ONCE","saveRule","pattern","DANGER_PATTERNS","DANGEROUS","test","CAUTIOUS","sessionRule","sessionRules","get","rule","matchesPattern","startsWith","endsWith","regex","RegExp","slice","log","warn","choices","key","label","description","choice","SESSION","ALWAYS","createdAt","Date","now","set","push","persistConfig","writeFile","stringify","message","clearSession","clear","removeRule","filter","r","listRules","Map","join","os","homedir","dangerPatterns"],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "PromptService", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return PromptService;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _common = require("@nestjs/common");
|
|
12
|
+
const _readline = /*#__PURE__*/ _interop_require_wildcard(require("readline"));
|
|
13
|
+
const _theme = require("../../repl/utils/theme");
|
|
14
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
15
|
+
if (typeof WeakMap !== "function") return null;
|
|
16
|
+
var cacheBabelInterop = new WeakMap();
|
|
17
|
+
var cacheNodeInterop = new WeakMap();
|
|
18
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
19
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
20
|
+
})(nodeInterop);
|
|
21
|
+
}
|
|
22
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
23
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
24
|
+
return obj;
|
|
25
|
+
}
|
|
26
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
27
|
+
return {
|
|
28
|
+
default: obj
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
32
|
+
if (cache && cache.has(obj)) {
|
|
33
|
+
return cache.get(obj);
|
|
34
|
+
}
|
|
35
|
+
var newObj = {
|
|
36
|
+
__proto__: null
|
|
37
|
+
};
|
|
38
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
39
|
+
for(var key in obj){
|
|
40
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
41
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
42
|
+
if (desc && (desc.get || desc.set)) {
|
|
43
|
+
Object.defineProperty(newObj, key, desc);
|
|
44
|
+
} else {
|
|
45
|
+
newObj[key] = obj[key];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
newObj.default = obj;
|
|
50
|
+
if (cache) {
|
|
51
|
+
cache.set(obj, newObj);
|
|
52
|
+
}
|
|
53
|
+
return newObj;
|
|
54
|
+
}
|
|
55
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
56
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
57
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
58
|
+
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
59
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
60
|
+
}
|
|
61
|
+
let PromptService = class PromptService {
|
|
62
|
+
async question(query) {
|
|
63
|
+
return new Promise((resolve)=>{
|
|
64
|
+
const rl = _readline.createInterface({
|
|
65
|
+
input: process.stdin,
|
|
66
|
+
output: process.stdout,
|
|
67
|
+
terminal: false
|
|
68
|
+
});
|
|
69
|
+
rl.question(query + ' ', (answer)=>{
|
|
70
|
+
rl.close();
|
|
71
|
+
resolve(answer);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
async confirm(message, defaultValue = false) {
|
|
76
|
+
const suffix = defaultValue ? ' [Y/n]' : ' [y/N]';
|
|
77
|
+
const answer = await this.question(`${_theme.Colors.yellow}${message}${suffix}${_theme.Colors.reset}`);
|
|
78
|
+
if (!answer.trim()) return defaultValue;
|
|
79
|
+
return answer.toLowerCase().startsWith('y');
|
|
80
|
+
}
|
|
81
|
+
async choice(message, choices) {
|
|
82
|
+
console.log(`\n${_theme.Colors.cyan}${message}${_theme.Colors.reset}`);
|
|
83
|
+
console.log('');
|
|
84
|
+
choices.forEach((choice, index)=>{
|
|
85
|
+
const desc = choice.description ? `${_theme.Colors.dim} - ${choice.description}${_theme.Colors.reset}` : '';
|
|
86
|
+
console.log(` ${_theme.Colors.white}${index + 1}.${_theme.Colors.reset} ${_theme.Colors.bold}${choice.label}${_theme.Colors.reset}${desc}`);
|
|
87
|
+
});
|
|
88
|
+
console.log('');
|
|
89
|
+
while(true){
|
|
90
|
+
const answer = await this.question(`${_theme.Colors.yellow}Choose (1-${choices.length}):${_theme.Colors.reset}`);
|
|
91
|
+
const index = parseInt(answer) - 1;
|
|
92
|
+
if (index >= 0 && index < choices.length) {
|
|
93
|
+
return choices[index].key;
|
|
94
|
+
}
|
|
95
|
+
console.log(`${_theme.Colors.red}Invalid choice. Please try again.${_theme.Colors.reset}`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
warn(message) {
|
|
99
|
+
console.log(`${_theme.Colors.yellow} ${message}${_theme.Colors.reset}`);
|
|
100
|
+
}
|
|
101
|
+
error(message) {
|
|
102
|
+
console.log(`${_theme.Colors.red} ${message}${_theme.Colors.reset}`);
|
|
103
|
+
}
|
|
104
|
+
success(message) {
|
|
105
|
+
console.log(`${_theme.Colors.green} ${message}${_theme.Colors.reset}`);
|
|
106
|
+
}
|
|
107
|
+
info(message) {
|
|
108
|
+
console.log(`${_theme.Colors.blue} ${message}${_theme.Colors.reset}`);
|
|
109
|
+
}
|
|
110
|
+
close() {}
|
|
111
|
+
};
|
|
112
|
+
PromptService = _ts_decorate([
|
|
113
|
+
(0, _common.Injectable)()
|
|
114
|
+
], PromptService);
|
|
115
|
+
|
|
116
|
+
//# sourceMappingURL=prompt.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/permissions/services/prompt.service.ts"],"sourcesContent":["import { Injectable } from '@nestjs/common';\nimport * as readline from 'readline';\nimport { Colors } from '../../repl/utils/theme';\n\n@Injectable()\nexport class PromptService {\n async question(query: string): Promise<string> {\n return new Promise((resolve) => {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n terminal: false,\n });\n\n rl.question(query + ' ', (answer) => {\n rl.close();\n resolve(answer);\n });\n });\n }\n\n async confirm(message: string, defaultValue = false): Promise<boolean> {\n const suffix = defaultValue ? ' [Y/n]' : ' [y/N]';\n const answer = await this.question(\n `${Colors.yellow}${message}${suffix}${Colors.reset}`,\n );\n\n if (!answer.trim()) return defaultValue;\n\n return answer.toLowerCase().startsWith('y');\n }\n\n async choice<T extends string>(\n message: string,\n choices: { key: T; label: string; description?: string }[],\n ): Promise<T> {\n console.log(`\\n${Colors.cyan}${message}${Colors.reset}`);\n console.log('');\n\n choices.forEach((choice, index) => {\n const desc = choice.description\n ? `${Colors.dim} - ${choice.description}${Colors.reset}`\n : '';\n console.log(\n ` ${Colors.white}${index + 1}.${Colors.reset} ${Colors.bold}${choice.label}${Colors.reset}${desc}`,\n );\n });\n\n console.log('');\n\n while (true) {\n const answer = await this.question(\n `${Colors.yellow}Choose (1-${choices.length}):${Colors.reset}`,\n );\n const index = parseInt(answer) - 1;\n\n if (index >= 0 && index < choices.length) {\n return choices[index].key;\n }\n\n console.log(\n `${Colors.red}Invalid choice. Please try again.${Colors.reset}`,\n );\n }\n }\n\n warn(message: string): void {\n console.log(`${Colors.yellow} ${message}${Colors.reset}`);\n }\n\n error(message: string): void {\n console.log(`${Colors.red} ${message}${Colors.reset}`);\n }\n\n success(message: string): void {\n console.log(`${Colors.green} ${message}${Colors.reset}`);\n }\n\n info(message: string): void {\n console.log(`${Colors.blue} ${message}${Colors.reset}`);\n }\n\n close(): void {}\n}\n"],"names":["PromptService","question","query","Promise","resolve","rl","readline","createInterface","input","process","stdin","output","stdout","terminal","answer","close","confirm","message","defaultValue","suffix","Colors","yellow","reset","trim","toLowerCase","startsWith","choice","choices","console","log","cyan","forEach","index","desc","description","dim","white","bold","label","length","parseInt","key","red","warn","error","success","green","info","blue"],"mappings":";;;;+BAKaA;;;eAAAA;;;wBALc;kEACD;uBACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGhB,IAAA,AAAMA,gBAAN,MAAMA;IACX,MAAMC,SAASC,KAAa,EAAmB;QAC7C,OAAO,IAAIC,QAAQ,CAACC;YAClB,MAAMC,KAAKC,UAASC,eAAe,CAAC;gBAClCC,OAAOC,QAAQC,KAAK;gBACpBC,QAAQF,QAAQG,MAAM;gBACtBC,UAAU;YACZ;YAEAR,GAAGJ,QAAQ,CAACC,QAAQ,KAAK,CAACY;gBACxBT,GAAGU,KAAK;gBACRX,QAAQU;YACV;QACF;IACF;IAEA,MAAME,QAAQC,OAAe,EAAEC,eAAe,KAAK,EAAoB;QACrE,MAAMC,SAASD,eAAe,WAAW;QACzC,MAAMJ,SAAS,MAAM,IAAI,CAACb,QAAQ,CAChC,GAAGmB,aAAM,CAACC,MAAM,GAAGJ,UAAUE,SAASC,aAAM,CAACE,KAAK,EAAE;QAGtD,IAAI,CAACR,OAAOS,IAAI,IAAI,OAAOL;QAE3B,OAAOJ,OAAOU,WAAW,GAAGC,UAAU,CAAC;IACzC;IAEA,MAAMC,OACJT,OAAe,EACfU,OAA0D,EAC9C;QACZC,QAAQC,GAAG,CAAC,CAAC,EAAE,EAAET,aAAM,CAACU,IAAI,GAAGb,UAAUG,aAAM,CAACE,KAAK,EAAE;QACvDM,QAAQC,GAAG,CAAC;QAEZF,QAAQI,OAAO,CAAC,CAACL,QAAQM;YACvB,MAAMC,OAAOP,OAAOQ,WAAW,GAC3B,GAAGd,aAAM,CAACe,GAAG,CAAC,GAAG,EAAET,OAAOQ,WAAW,GAAGd,aAAM,CAACE,KAAK,EAAE,GACtD;YACJM,QAAQC,GAAG,CACT,CAAC,EAAE,EAAET,aAAM,CAACgB,KAAK,GAAGJ,QAAQ,EAAE,CAAC,EAAEZ,aAAM,CAACE,KAAK,CAAC,CAAC,EAAEF,aAAM,CAACiB,IAAI,GAAGX,OAAOY,KAAK,GAAGlB,aAAM,CAACE,KAAK,GAAGW,MAAM;QAEvG;QAEAL,QAAQC,GAAG,CAAC;QAEZ,MAAO,KAAM;YACX,MAAMf,SAAS,MAAM,IAAI,CAACb,QAAQ,CAChC,GAAGmB,aAAM,CAACC,MAAM,CAAC,UAAU,EAAEM,QAAQY,MAAM,CAAC,EAAE,EAAEnB,aAAM,CAACE,KAAK,EAAE;YAEhE,MAAMU,QAAQQ,SAAS1B,UAAU;YAEjC,IAAIkB,SAAS,KAAKA,QAAQL,QAAQY,MAAM,EAAE;gBACxC,OAAOZ,OAAO,CAACK,MAAM,CAACS,GAAG;YAC3B;YAEAb,QAAQC,GAAG,CACT,GAAGT,aAAM,CAACsB,GAAG,CAAC,iCAAiC,EAAEtB,aAAM,CAACE,KAAK,EAAE;QAEnE;IACF;IAEAqB,KAAK1B,OAAe,EAAQ;QAC1BW,QAAQC,GAAG,CAAC,GAAGT,aAAM,CAACC,MAAM,CAAC,EAAE,EAAEJ,UAAUG,aAAM,CAACE,KAAK,EAAE;IAC3D;IAEAsB,MAAM3B,OAAe,EAAQ;QAC3BW,QAAQC,GAAG,CAAC,GAAGT,aAAM,CAACsB,GAAG,CAAC,EAAE,EAAEzB,UAAUG,aAAM,CAACE,KAAK,EAAE;IACxD;IAEAuB,QAAQ5B,OAAe,EAAQ;QAC7BW,QAAQC,GAAG,CAAC,GAAGT,aAAM,CAAC0B,KAAK,CAAC,EAAE,EAAE7B,UAAUG,aAAM,CAACE,KAAK,EAAE;IAC1D;IAEAyB,KAAK9B,OAAe,EAAQ;QAC1BW,QAAQC,GAAG,CAAC,GAAGT,aAAM,CAAC4B,IAAI,CAAC,EAAE,EAAE/B,UAAUG,aAAM,CAACE,KAAK,EAAE;IACzD;IAEAP,QAAc,CAAC;AACjB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
get DangerLevel () {
|
|
13
|
+
return DangerLevel;
|
|
14
|
+
},
|
|
15
|
+
get PermissionScope () {
|
|
16
|
+
return PermissionScope;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
var PermissionScope = /*#__PURE__*/ function(PermissionScope) {
|
|
20
|
+
PermissionScope["ONCE"] = "once";
|
|
21
|
+
PermissionScope["SESSION"] = "session";
|
|
22
|
+
PermissionScope["ALWAYS"] = "always";
|
|
23
|
+
return PermissionScope;
|
|
24
|
+
}({});
|
|
25
|
+
var DangerLevel = /*#__PURE__*/ function(DangerLevel) {
|
|
26
|
+
DangerLevel["SAFE"] = "safe";
|
|
27
|
+
DangerLevel["CAUTIOUS"] = "cautious";
|
|
28
|
+
DangerLevel["DANGEROUS"] = "dangerous";
|
|
29
|
+
return DangerLevel;
|
|
30
|
+
}({});
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=permission.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/modules/permissions/types/permission.types.ts"],"sourcesContent":["export enum PermissionScope {\n ONCE = 'once',\n SESSION = 'session',\n ALWAYS = 'always',\n}\n\nexport interface PermissionResponse {\n allowed: boolean;\n scope: PermissionScope;\n remember?: boolean;\n}\n\nexport interface PermissionRule {\n pattern: string;\n allowed: boolean;\n scope: PermissionScope;\n createdAt: number;\n}\n\nexport enum DangerLevel {\n SAFE = 'safe',\n CAUTIOUS = 'cautious',\n DANGEROUS = 'dangerous',\n}\n\nexport interface PermissionsConfig {\n rules: PermissionRule[];\n sessionRules: PermissionRule[];\n dangerPatterns: {\n [key in DangerLevel]: RegExp[];\n };\n}\n"],"names":["DangerLevel","PermissionScope"],"mappings":";;;;;;;;;;;QAmBYA;eAAAA;;QAnBAC;eAAAA;;;AAAL,IAAA,AAAKA,yCAAAA;;;;WAAAA;;AAmBL,IAAA,AAAKD,qCAAAA;;;;WAAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
_export_star(require("./project.module"), exports);
|
|
6
|
+
_export_star(require("./services/project-loader.service"), exports);
|
|
7
|
+
_export_star(require("./services/project-context.service"), exports);
|
|
8
|
+
_export_star(require("./services/project-analyzer.service"), exports);
|
|
9
|
+
_export_star(require("./types"), exports);
|
|
10
|
+
function _export_star(from, to) {
|
|
11
|
+
Object.keys(from).forEach(function(k) {
|
|
12
|
+
if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
|
|
13
|
+
Object.defineProperty(to, k, {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function() {
|
|
16
|
+
return from[k];
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
return from;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/modules/project/index.ts"],"sourcesContent":["export * from './project.module';\nexport * from './services/project-loader.service';\nexport * from './services/project-context.service';\nexport * from './services/project-analyzer.service';\nexport * from './types';\n"],"names":[],"mappings":";;;;qBAAc;qBACA;qBACA;qBACA;qBACA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "ProjectModule", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return ProjectModule;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _common = require("@nestjs/common");
|
|
12
|
+
const _projectloaderservice = require("./services/project-loader.service");
|
|
13
|
+
const _projectcontextservice = require("./services/project-context.service");
|
|
14
|
+
const _projectanalyzerservice = require("./services/project-analyzer.service");
|
|
15
|
+
function _ts_decorate(decorators, target, key, desc) {
|
|
16
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
17
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
18
|
+
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
19
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
20
|
+
}
|
|
21
|
+
let ProjectModule = class ProjectModule {
|
|
22
|
+
};
|
|
23
|
+
ProjectModule = _ts_decorate([
|
|
24
|
+
(0, _common.Module)({
|
|
25
|
+
providers: [
|
|
26
|
+
_projectloaderservice.ProjectLoaderService,
|
|
27
|
+
_projectcontextservice.ProjectContextService,
|
|
28
|
+
_projectanalyzerservice.ProjectAnalyzerService
|
|
29
|
+
],
|
|
30
|
+
exports: [
|
|
31
|
+
_projectloaderservice.ProjectLoaderService,
|
|
32
|
+
_projectcontextservice.ProjectContextService,
|
|
33
|
+
_projectanalyzerservice.ProjectAnalyzerService
|
|
34
|
+
]
|
|
35
|
+
})
|
|
36
|
+
], ProjectModule);
|
|
37
|
+
|
|
38
|
+
//# sourceMappingURL=project.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/modules/project/project.module.ts"],"sourcesContent":["import { Module } from '@nestjs/common';\nimport { ProjectLoaderService } from './services/project-loader.service';\nimport { ProjectContextService } from './services/project-context.service';\nimport { ProjectAnalyzerService } from './services/project-analyzer.service';\n\n@Module({\n providers: [ProjectLoaderService, ProjectContextService, ProjectAnalyzerService],\n exports: [ProjectLoaderService, ProjectContextService, ProjectAnalyzerService],\n})\nexport class ProjectModule {}\n"],"names":["ProjectModule","providers","ProjectLoaderService","ProjectContextService","ProjectAnalyzerService","exports"],"mappings":";;;;+BASaA;;;eAAAA;;;wBATU;sCACc;uCACC;wCACC;;;;;;;AAMhC,IAAA,AAAMA,gBAAN,MAAMA;AAAe;;;QAH1BC,WAAW;YAACC,0CAAoB;YAAEC,4CAAqB;YAAEC,8CAAsB;SAAC;QAChFC,SAAS;YAACH,0CAAoB;YAAEC,4CAAqB;YAAEC,8CAAsB;SAAC"}
|