manageos 1.0.0 → 1.0.2

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 (62) hide show
  1. package/README.md +142 -0
  2. package/dist/audio.d.ts +38 -0
  3. package/dist/audio.d.ts.map +1 -0
  4. package/dist/audio.js +178 -0
  5. package/dist/audio.js.map +1 -0
  6. package/dist/clipboard.d.ts +16 -0
  7. package/dist/clipboard.d.ts.map +1 -0
  8. package/dist/clipboard.js +56 -0
  9. package/dist/clipboard.js.map +1 -0
  10. package/dist/encryption.d.ts +16 -0
  11. package/dist/encryption.d.ts.map +1 -0
  12. package/dist/encryption.js +53 -0
  13. package/dist/encryption.js.map +1 -0
  14. package/dist/filesystem.d.ts +2 -0
  15. package/dist/filesystem.d.ts.map +1 -1
  16. package/dist/filesystem.js +40 -15
  17. package/dist/filesystem.js.map +1 -1
  18. package/dist/firewall.d.ts +39 -0
  19. package/dist/firewall.d.ts.map +1 -0
  20. package/dist/firewall.js +116 -0
  21. package/dist/firewall.js.map +1 -0
  22. package/dist/index.d.ts +22 -2
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +37 -11
  25. package/dist/index.js.map +1 -1
  26. package/dist/network.d.ts +82 -0
  27. package/dist/network.d.ts.map +1 -0
  28. package/dist/network.js +355 -0
  29. package/dist/network.js.map +1 -0
  30. package/dist/notification.d.ts +81 -0
  31. package/dist/notification.d.ts.map +1 -0
  32. package/dist/notification.js +146 -0
  33. package/dist/notification.js.map +1 -0
  34. package/dist/power.d.ts +18 -0
  35. package/dist/power.d.ts.map +1 -0
  36. package/dist/power.js +65 -0
  37. package/dist/power.js.map +1 -0
  38. package/dist/regedit.js +38 -2
  39. package/dist/regedit.js.map +1 -1
  40. package/dist/screen.d.ts +11 -0
  41. package/dist/screen.d.ts.map +1 -0
  42. package/dist/screen.js +13 -0
  43. package/dist/screen.js.map +1 -0
  44. package/dist/services.d.ts +60 -0
  45. package/dist/services.d.ts.map +1 -0
  46. package/dist/services.js +322 -0
  47. package/dist/services.js.map +1 -0
  48. package/dist/systeminfo.js +21 -15
  49. package/dist/systeminfo.js.map +1 -1
  50. package/dist/taskmgr.js +11 -8
  51. package/dist/taskmgr.js.map +1 -1
  52. package/dist/uac.d.ts +28 -0
  53. package/dist/uac.d.ts.map +1 -0
  54. package/dist/uac.js +69 -0
  55. package/dist/uac.js.map +1 -0
  56. package/dist/{usermanager.d.ts → users.d.ts} +2 -2
  57. package/dist/users.d.ts.map +1 -0
  58. package/dist/{usermanager.js → users.js} +7 -4
  59. package/dist/users.js.map +1 -0
  60. package/package.json +11 -1
  61. package/dist/usermanager.d.ts.map +0 -1
  62. package/dist/usermanager.js.map +0 -1
package/README.md ADDED
@@ -0,0 +1,142 @@
1
+ # ManageOS
2
+
3
+ **ManageOS** is a Node.js library that provides a set of tools to manage operating system resources and settings on Windows systems. It offers utilities for registry editing, process management, file system operations, system information retrieval, and user account management.
4
+
5
+ ---
6
+
7
+ ## 📦 Installation
8
+
9
+ Install via npm:
10
+
11
+ ```bash
12
+ npm install manageos
13
+ ```
14
+
15
+ or with Yarn:
16
+
17
+ ```bash
18
+ yarn add manageos
19
+ ```
20
+
21
+ ---
22
+
23
+ ## 🛠 Usage
24
+
25
+ ### Import the package
26
+
27
+ ```ts
28
+ import ManageOS from "manageos";
29
+ ```
30
+
31
+ ---
32
+
33
+ ### File System
34
+
35
+ ```ts
36
+ // Synchronous usage
37
+ const files = ManageOS.FileSystem.sync.listDirectory("C:\\Path\\To\\Folder");
38
+
39
+ // Asynchronous usage
40
+ const filesAsync = await ManageOS.FileSystem.async.listDirectory(
41
+ "C:\\Path\\To\\Folder"
42
+ );
43
+ ```
44
+
45
+ ---
46
+
47
+ ### Registry Editor
48
+
49
+ ```ts
50
+ await ManageOS.Regedit.createKey("HKCU\\Software\\MyApp");
51
+ await ManageOS.Regedit.setValue(
52
+ "HKCU\\Software\\MyApp",
53
+ "TestValue",
54
+ "REG_SZ",
55
+ "Hello World"
56
+ );
57
+ const registryData = await ManageOS.Regedit.listKey("HKCU\\Software\\MyApp");
58
+ await ManageOS.Regedit.deleteKey("HKCU\\Software\\MyApp");
59
+ ```
60
+
61
+ ---
62
+
63
+ ### Process Manager
64
+
65
+ ```ts
66
+ const processes = ManageOS.Taskmgr.sync.listProcesses();
67
+ const processCount = ManageOS.Taskmgr.sync.getProcessCount();
68
+
69
+ ManageOS.Taskmgr.sync.killByName("notepad.exe", true);
70
+ ```
71
+
72
+ ---
73
+
74
+ ### System Information
75
+
76
+ ```ts
77
+ const sysInfo = ManageOS.SystemInfo();
78
+ console.log(sysInfo.platform, sysInfo.architecture, sysInfo.cpus);
79
+ ```
80
+
81
+ ---
82
+
83
+ ### User Management
84
+
85
+ ```ts
86
+ const users = ManageOS.UserManager.listUsers();
87
+ const userInfo = ManageOS.UserManager.getUserInfo("Administrator");
88
+
89
+ ManageOS.UserManager.createUser("newuser", "password123");
90
+ ManageOS.UserManager.deleteUser("newuser");
91
+ ```
92
+
93
+ ---
94
+
95
+ ## 📚 API Overview
96
+
97
+ - **`ManageOS.FileSystem`** – File and directory operations (sync & async versions).
98
+ - **`ManageOS.Regedit`** – Create, delete, read, and modify Windows Registry keys and values.
99
+ - **`ManageOS.Taskmgr`** – Process listing, monitoring, and termination.
100
+ - **`ManageOS.SystemInfo`** – Retrieve system details such as OS version, CPU info, memory, and uptime.
101
+ - **`ManageOS.UserManager`** – Manage Windows user accounts and groups.
102
+
103
+ ---
104
+
105
+ ## ⚙ Requirements
106
+
107
+ - Node.js v18 or higher
108
+ - Windows operating system (registry and process management are Windows-specific)
109
+ - Administrative privileges for some operations
110
+
111
+ ---
112
+
113
+ ## 💡 Notes
114
+
115
+ - Many operations require elevated privileges (Administrator mode).
116
+ - Registry changes can affect system stability. Use with caution.
117
+ - This library wraps built-in Windows commands, so all outputs depend on system configuration.
118
+
119
+ ---
120
+
121
+ ## 🔧 Development
122
+
123
+ Clone the repository and install dependencies:
124
+
125
+ ```bash
126
+ git clone https://github.com/yourusername/manageos.git
127
+ cd manageos
128
+ npm install
129
+ npm run build
130
+ ```
131
+
132
+ Run in development mode:
133
+
134
+ ```bash
135
+ npm run dev
136
+ ```
137
+
138
+ ---
139
+
140
+ ## 📄 License
141
+
142
+ MIT License © Tiziano Tomas Luzi Ramos
@@ -0,0 +1,38 @@
1
+ declare class Sync {
2
+ static getVolume(): number | Error;
3
+ static setVolume(volume: number): {
4
+ success: boolean;
5
+ error?: Error;
6
+ };
7
+ static isMuted(): boolean | Error;
8
+ static mute(): {
9
+ success: boolean;
10
+ error?: Error;
11
+ };
12
+ static unmute(): {
13
+ success: boolean;
14
+ error?: Error;
15
+ };
16
+ }
17
+ declare class Async {
18
+ static getVolume(): Promise<number | Error>;
19
+ static setVolume(volume: number): Promise<{
20
+ success: boolean;
21
+ error?: Error;
22
+ }>;
23
+ static isMuted(): Promise<boolean | Error>;
24
+ static mute(): Promise<{
25
+ success: boolean;
26
+ error?: Error;
27
+ }>;
28
+ static unmute(): Promise<{
29
+ success: boolean;
30
+ error?: Error;
31
+ }>;
32
+ }
33
+ export default class Audio {
34
+ static readonly Sync: typeof Sync;
35
+ static readonly Async: typeof Async;
36
+ }
37
+ export {};
38
+ //# sourceMappingURL=audio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../src/audio.ts"],"names":[],"mappings":"AAGA,cAAM,IAAI;IACR,MAAM,CAAC,SAAS,IAAI,MAAM,GAAG,KAAK;IAmBlC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE;IAoCrE,MAAM,CAAC,OAAO,IAAI,OAAO,GAAG,KAAK;IAmBjC,MAAM,CAAC,IAAI,IAAI;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE;IAsBlD,MAAM,CAAC,MAAM,IAAI;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE;CAqBrD;AAED,cAAM,KAAK;WACI,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;WASpC,SAAS,CACpB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,CAAC;WAsBlC,OAAO,IAAI,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;WASnC,IAAI,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,CAAC;WAYpD,MAAM,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,CAAC;CAWpE;AAED,MAAM,CAAC,OAAO,OAAO,KAAK;IACxB,gBAAuB,IAAI,cAAQ;IACnC,gBAAuB,KAAK,eAAS;CACtC"}
package/dist/audio.js ADDED
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const loudness_1 = __importDefault(require("loudness"));
7
+ const deasync_1 = __importDefault(require("deasync"));
8
+ class Sync {
9
+ static getVolume() {
10
+ let result = new Error("Unknown error");
11
+ let done = false;
12
+ loudness_1.default
13
+ .getVolume()
14
+ .then((volume) => {
15
+ result = volume;
16
+ done = true;
17
+ })
18
+ .catch((error) => {
19
+ result = error instanceof Error ? error : new Error(String(error));
20
+ done = true;
21
+ });
22
+ deasync_1.default.loopWhile(() => !done);
23
+ return result;
24
+ }
25
+ static setVolume(volume) {
26
+ if (volume < 0 || volume > 100) {
27
+ return {
28
+ success: false,
29
+ error: new Error("Volume must be between 0 and 100."),
30
+ };
31
+ }
32
+ if (!Number.isInteger(volume)) {
33
+ return {
34
+ success: false,
35
+ error: new Error("Volume must be an integer."),
36
+ };
37
+ }
38
+ let result = { success: false };
39
+ let done = false;
40
+ loudness_1.default
41
+ .setVolume(volume)
42
+ .then(() => {
43
+ result = { success: true };
44
+ done = true;
45
+ })
46
+ .catch((error) => {
47
+ result = {
48
+ success: false,
49
+ error: error instanceof Error ? error : new Error(String(error)),
50
+ };
51
+ done = true;
52
+ });
53
+ deasync_1.default.loopWhile(() => !done);
54
+ return result;
55
+ }
56
+ static isMuted() {
57
+ let result = new Error("Unknown error");
58
+ let done = false;
59
+ loudness_1.default
60
+ .getMuted()
61
+ .then((muted) => {
62
+ result = muted;
63
+ done = true;
64
+ })
65
+ .catch((error) => {
66
+ result = error instanceof Error ? error : new Error(String(error));
67
+ done = true;
68
+ });
69
+ deasync_1.default.loopWhile(() => !done);
70
+ return result;
71
+ }
72
+ static mute() {
73
+ let result = { success: false };
74
+ let done = false;
75
+ loudness_1.default
76
+ .setMuted(true)
77
+ .then(() => {
78
+ result = { success: true };
79
+ done = true;
80
+ })
81
+ .catch((error) => {
82
+ result = {
83
+ success: false,
84
+ error: error instanceof Error ? error : new Error(String(error)),
85
+ };
86
+ done = true;
87
+ });
88
+ deasync_1.default.loopWhile(() => !done);
89
+ return result;
90
+ }
91
+ static unmute() {
92
+ let result = { success: false };
93
+ let done = false;
94
+ loudness_1.default
95
+ .setMuted(false)
96
+ .then(() => {
97
+ result = { success: true };
98
+ done = true;
99
+ })
100
+ .catch((error) => {
101
+ result = {
102
+ success: false,
103
+ error: error instanceof Error ? error : new Error(String(error)),
104
+ };
105
+ done = true;
106
+ });
107
+ deasync_1.default.loopWhile(() => !done);
108
+ return result;
109
+ }
110
+ }
111
+ class Async {
112
+ static async getVolume() {
113
+ try {
114
+ const volume = await loudness_1.default.getVolume();
115
+ return volume;
116
+ }
117
+ catch (error) {
118
+ return error instanceof Error ? error : new Error(String(error));
119
+ }
120
+ }
121
+ static async setVolume(volume) {
122
+ // Validate range
123
+ if (volume < 0 || volume > 100) {
124
+ return {
125
+ success: false,
126
+ error: new Error("Volume must be between 0 and 100."),
127
+ };
128
+ }
129
+ // Validate integer
130
+ if (!Number.isInteger(volume)) {
131
+ return {
132
+ success: false,
133
+ error: new Error("Volume must be an integer."),
134
+ };
135
+ }
136
+ await loudness_1.default.setVolume(volume);
137
+ return { success: true };
138
+ }
139
+ static async isMuted() {
140
+ try {
141
+ const muted = await loudness_1.default.getMuted();
142
+ return muted;
143
+ }
144
+ catch (error) {
145
+ return error instanceof Error ? error : new Error(String(error));
146
+ }
147
+ }
148
+ static async mute() {
149
+ try {
150
+ await loudness_1.default.setMuted(true);
151
+ return { success: true };
152
+ }
153
+ catch (error) {
154
+ return {
155
+ success: false,
156
+ error: error instanceof Error ? error : new Error(String(error)),
157
+ };
158
+ }
159
+ }
160
+ static async unmute() {
161
+ try {
162
+ await loudness_1.default.setMuted(false);
163
+ return { success: true };
164
+ }
165
+ catch (error) {
166
+ return {
167
+ success: false,
168
+ error: error instanceof Error ? error : new Error(String(error)),
169
+ };
170
+ }
171
+ }
172
+ }
173
+ class Audio {
174
+ static Sync = Sync;
175
+ static Async = Async;
176
+ }
177
+ exports.default = Audio;
178
+ //# sourceMappingURL=audio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio.js","sourceRoot":"","sources":["../src/audio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ declare class Sync {
2
+ static read(): string | unknown;
3
+ static write(text: string): boolean | unknown;
4
+ static clear(): boolean | unknown;
5
+ }
6
+ declare class Async {
7
+ static read(): Promise<string | unknown>;
8
+ static write(text: string): Promise<boolean | unknown>;
9
+ static clear(): Promise<boolean | unknown>;
10
+ }
11
+ export default class Clipboard {
12
+ static readonly Sync: typeof Sync;
13
+ static readonly Async: typeof Async;
14
+ }
15
+ export {};
16
+ //# sourceMappingURL=clipboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../src/clipboard.ts"],"names":[],"mappings":"AAEA,cAAM,IAAI;IACR,MAAM,CAAC,IAAI,IAAI,MAAM,GAAG,OAAO;IAQ/B,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO;IAS7C,MAAM,CAAC,KAAK,IAAI,OAAO,GAAG,OAAO;CAGlC;AAED,cAAM,KAAK;WACI,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;WAQjC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;WAS/C,KAAK,IAAI,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;CAGjD;AAED,MAAM,CAAC,OAAO,OAAO,SAAS;IAC5B,gBAAuB,IAAI,cAAQ;IACnC,gBAAuB,KAAK,eAAS;CACtC"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const clipboardy_1 = __importDefault(require("clipboardy"));
7
+ class Sync {
8
+ static read() {
9
+ try {
10
+ return clipboardy_1.default.readSync();
11
+ }
12
+ catch (error) {
13
+ return error;
14
+ }
15
+ }
16
+ static write(text) {
17
+ try {
18
+ clipboardy_1.default.writeSync(text);
19
+ return true;
20
+ }
21
+ catch (error) {
22
+ return error;
23
+ }
24
+ }
25
+ static clear() {
26
+ return this.write("");
27
+ }
28
+ }
29
+ class Async {
30
+ static async read() {
31
+ try {
32
+ return await clipboardy_1.default.read();
33
+ }
34
+ catch (error) {
35
+ return error;
36
+ }
37
+ }
38
+ static async write(text) {
39
+ try {
40
+ await clipboardy_1.default.write(text);
41
+ return true;
42
+ }
43
+ catch (error) {
44
+ return error;
45
+ }
46
+ }
47
+ static async clear() {
48
+ return await this.write("");
49
+ }
50
+ }
51
+ class Clipboard {
52
+ static Sync = Sync;
53
+ static Async = Async;
54
+ }
55
+ exports.default = Clipboard;
56
+ //# sourceMappingURL=clipboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../src/clipboard.ts"],"names":[],"mappings":";;;;;AAAA,4DAAoC;AAEpC,MAAM,IAAI;IACR,MAAM,CAAC,IAAI;QACT,IAAI,CAAC;YACH,OAAO,oBAAU,CAAC,QAAQ,EAAE,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAY;QACvB,IAAI,CAAC;YACH,oBAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;CACF;AAED,MAAM,KAAK;IACT,MAAM,CAAC,KAAK,CAAC,IAAI;QACf,IAAI,CAAC;YACH,OAAO,MAAM,oBAAU,CAAC,IAAI,EAAE,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAY;QAC7B,IAAI,CAAC;YACH,MAAM,oBAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,KAAK;QAChB,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;CACF;AAED,MAAqB,SAAS;IACrB,MAAM,CAAU,IAAI,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAU,KAAK,GAAG,KAAK,CAAC;;AAFvC,4BAGC"}
@@ -0,0 +1,16 @@
1
+ export default class Encryption {
2
+ private static algorithm;
3
+ private static key;
4
+ private static iv;
5
+ static init(key: string, iv?: Buffer): void;
6
+ static encrypt(text: string): {
7
+ iv: string;
8
+ encryptedData: string;
9
+ };
10
+ static decrypt(encryptedData: string, ivHex: string): string;
11
+ static hash(data: string, algorithm?: string): string;
12
+ static generateKey(length?: number): string;
13
+ static saveKeyToFile(path: string, key: string): void;
14
+ static loadKeyFromFile(path: string): string;
15
+ }
16
+ //# sourceMappingURL=encryption.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../src/encryption.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAyB;IACjD,OAAO,CAAC,MAAM,CAAC,GAAG,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAC,EAAE,CAAS;IAE1B,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM;IAQpC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE;IAanE,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAW5D,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,MAAiB,GAAG,MAAM;IAI/D,MAAM,CAAC,WAAW,CAAC,MAAM,GAAE,MAAW,GAAG,MAAM;IAI/C,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAI9C,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAG7C"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const crypto_1 = __importDefault(require("crypto"));
7
+ const fs_1 = __importDefault(require("fs"));
8
+ class Encryption {
9
+ static algorithm = "aes-256-cbc";
10
+ static key;
11
+ static iv;
12
+ static init(key, iv) {
13
+ if (!key || key.length < 32) {
14
+ throw new Error("La clave debe tener al menos 32 caracteres");
15
+ }
16
+ this.key = Buffer.from(key.slice(0, 32));
17
+ this.iv = iv || crypto_1.default.randomBytes(16);
18
+ }
19
+ static encrypt(text) {
20
+ if (!this.key)
21
+ throw new Error("Encryption key no inicializada");
22
+ const cipher = crypto_1.default.createCipheriv(this.algorithm, this.key, this.iv);
23
+ let encrypted = cipher.update(text, "utf8", "hex");
24
+ encrypted += cipher.final("hex");
25
+ return {
26
+ iv: this.iv.toString("hex"),
27
+ encryptedData: encrypted,
28
+ };
29
+ }
30
+ static decrypt(encryptedData, ivHex) {
31
+ if (!this.key)
32
+ throw new Error("Encryption key no inicializada");
33
+ const iv = Buffer.from(ivHex, "hex");
34
+ const decipher = crypto_1.default.createDecipheriv(this.algorithm, this.key, iv);
35
+ let decrypted = decipher.update(encryptedData, "hex", "utf8");
36
+ decrypted += decipher.final("utf8");
37
+ return decrypted;
38
+ }
39
+ static hash(data, algorithm = "sha256") {
40
+ return crypto_1.default.createHash(algorithm).update(data).digest("hex");
41
+ }
42
+ static generateKey(length = 32) {
43
+ return crypto_1.default.randomBytes(length).toString("hex");
44
+ }
45
+ static saveKeyToFile(path, key) {
46
+ fs_1.default.writeFileSync(path, key, { encoding: "utf8" });
47
+ }
48
+ static loadKeyFromFile(path) {
49
+ return fs_1.default.readFileSync(path, { encoding: "utf8" });
50
+ }
51
+ }
52
+ exports.default = Encryption;
53
+ //# sourceMappingURL=encryption.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.js","sourceRoot":"","sources":["../src/encryption.ts"],"names":[],"mappings":";;;;;AAAA,oDAA4B;AAC5B,4CAAoB;AAEpB,MAAqB,UAAU;IACrB,MAAM,CAAC,SAAS,GAAW,aAAa,CAAC;IACzC,MAAM,CAAC,GAAG,CAAS;IACnB,MAAM,CAAC,EAAE,CAAS;IAE1B,MAAM,CAAC,IAAI,CAAC,GAAW,EAAE,EAAW;QAClC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,gBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,IAAY;QACzB,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAEjE,MAAM,MAAM,GAAG,gBAAM,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACxE,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACnD,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEjC,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC3B,aAAa,EAAE,SAAS;SACzB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,aAAqB,EAAE,KAAa;QACjD,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAEjE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,gBAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACvE,IAAI,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC9D,SAAS,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEpC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,IAAY,EAAE,YAAoB,QAAQ;QACpD,OAAO,gBAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,SAAiB,EAAE;QACpC,OAAO,gBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,IAAY,EAAE,GAAW;QAC5C,YAAE,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,IAAY;QACjC,OAAO,YAAE,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IACrD,CAAC;;AAnDH,6BAoDC"}
@@ -5,6 +5,7 @@ interface FileInfo {
5
5
  isDirectory: boolean;
6
6
  }
7
7
  declare class Sync {
8
+ static createFile(filePath: string, content?: string): boolean | unknown;
8
9
  static currentPath(): string;
9
10
  static listDirectory(dirPath: string): FileInfo[];
10
11
  static readFile(filePath: string): string;
@@ -14,6 +15,7 @@ declare class Sync {
14
15
  }
15
16
  declare class Async {
16
17
  static currentPath(): string;
18
+ static createFile(filePath: string, content?: string): Promise<boolean | unknown>;
17
19
  static listDirectory(dirPath: string): Promise<FileInfo[]>;
18
20
  static readFile(filePath: string): Promise<string>;
19
21
  static deleteFile(filePath: string, force?: boolean): Promise<boolean | unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../src/filesystem.ts"],"names":[],"mappings":"AAGA,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,cAAM,IAAI;IACR,MAAM,CAAC,WAAW,IAAI,MAAM;IAG5B,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE;IAkBjD,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IASzC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,GAAG,OAAO;IASrE,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO;IAS1D,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,GAAG,OAAO;CAQ1E;AAED,cAAM,KAAK;IACT,MAAM,CAAC,WAAW,IAAI,MAAM;IAG5B,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAmB1D,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IASlD,MAAM,CAAC,UAAU,CACf,QAAQ,EAAE,MAAM,EAChB,KAAK,UAAQ,GACZ,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;IAW7B,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;IAWnE,MAAM,CAAC,eAAe,CACpB,OAAO,EAAE,MAAM,EACf,KAAK,UAAQ,GACZ,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;CAU9B;AAED,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B,MAAM,CAAC,QAAQ,CAAC,KAAK,eAAS;IAC9B,MAAM,CAAC,QAAQ,CAAC,IAAI,cAAQ;CAC7B"}
1
+ {"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../src/filesystem.ts"],"names":[],"mappings":"AAGA,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,cAAM,IAAI;IACR,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,SAAK,GAAG,OAAO,GAAG,OAAO;IASpE,MAAM,CAAC,WAAW,IAAI,MAAM;IAG5B,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE;IAkBjD,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IASzC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,GAAG,OAAO;IASrE,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO;IAS1D,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,GAAG,OAAO;CAQ1E;AAED,cAAM,KAAK;IACT,MAAM,CAAC,WAAW,IAAI,MAAM;IAG5B,MAAM,CAAC,UAAU,CACf,QAAQ,EAAE,MAAM,EAChB,OAAO,SAAK,GACX,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;IAS7B,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAmB1D,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IASlD,MAAM,CAAC,UAAU,CACf,QAAQ,EAAE,MAAM,EAChB,KAAK,UAAQ,GACZ,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;IAW7B,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;IAWnE,MAAM,CAAC,eAAe,CACpB,OAAO,EAAE,MAAM,EACf,KAAK,UAAQ,GACZ,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;CAU9B;AAED,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B,MAAM,CAAC,QAAQ,CAAC,KAAK,eAAS;IAC9B,MAAM,CAAC,QAAQ,CAAC,IAAI,cAAQ;CAC7B"}