@launchpod/shared 1.1.1 → 1.1.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/__tests__/constants.test.d.ts +2 -0
- package/dist/__tests__/constants.test.d.ts.map +1 -0
- package/dist/__tests__/constants.test.js +59 -0
- package/dist/__tests__/constants.test.js.map +1 -0
- package/dist/__tests__/utils.test.d.ts +2 -0
- package/dist/__tests__/utils.test.d.ts.map +1 -0
- package/dist/__tests__/utils.test.js +196 -0
- package/dist/__tests__/utils.test.js.map +1 -0
- package/dist/constants.d.ts +0 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +8 -11
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/managed-config.d.ts +43 -0
- package/dist/managed-config.d.ts.map +1 -0
- package/dist/managed-config.js +300 -0
- package/dist/managed-config.js.map +1 -0
- package/dist/types.d.ts +12 -11
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +8 -5
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +29 -7
- package/dist/utils.js.map +1 -1
- package/package.json +9 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/constants.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const constants_js_1 = require("../constants.js");
|
|
5
|
+
(0, vitest_1.describe)('TIER_CONFIGS', () => {
|
|
6
|
+
(0, vitest_1.it)('should have exactly 3 entries', () => {
|
|
7
|
+
(0, vitest_1.expect)(constants_js_1.TIER_CONFIGS).toHaveLength(3);
|
|
8
|
+
});
|
|
9
|
+
(0, vitest_1.it)('should have correct tier names in order', () => {
|
|
10
|
+
(0, vitest_1.expect)(constants_js_1.TIER_CONFIGS[0].tier).toBe('standard');
|
|
11
|
+
(0, vitest_1.expect)(constants_js_1.TIER_CONFIGS[1].tier).toBe('plus');
|
|
12
|
+
(0, vitest_1.expect)(constants_js_1.TIER_CONFIGS[2].tier).toBe('pro');
|
|
13
|
+
});
|
|
14
|
+
(0, vitest_1.it)('should have all required fields on each tier', () => {
|
|
15
|
+
const requiredFields = ['tier', 'vCpu', 'memoryGb', 'storage', 'label', 'monthlyPrice', 'description'];
|
|
16
|
+
for (const config of constants_js_1.TIER_CONFIGS) {
|
|
17
|
+
for (const field of requiredFields) {
|
|
18
|
+
(0, vitest_1.expect)(config).toHaveProperty(field);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
(0, vitest_1.describe)('SUPPORTED_REGIONS', () => {
|
|
24
|
+
(0, vitest_1.it)('should contain us-east-1', () => {
|
|
25
|
+
(0, vitest_1.expect)(constants_js_1.SUPPORTED_REGIONS).toContain('us-east-1');
|
|
26
|
+
});
|
|
27
|
+
(0, vitest_1.it)('should contain us-west-2', () => {
|
|
28
|
+
(0, vitest_1.expect)(constants_js_1.SUPPORTED_REGIONS).toContain('us-west-2');
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
(0, vitest_1.describe)('REGION_NAMES', () => {
|
|
32
|
+
(0, vitest_1.it)('should map each supported region to a name', () => {
|
|
33
|
+
for (const region of constants_js_1.SUPPORTED_REGIONS) {
|
|
34
|
+
(0, vitest_1.expect)(constants_js_1.REGION_NAMES[region]).toBeDefined();
|
|
35
|
+
(0, vitest_1.expect)(typeof constants_js_1.REGION_NAMES[region]).toBe('string');
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
(0, vitest_1.describe)('FRAMEWORKS', () => {
|
|
40
|
+
(0, vitest_1.it)('should have at least one framework with status available', () => {
|
|
41
|
+
const available = constants_js_1.FRAMEWORKS.filter((f) => f.status === 'available');
|
|
42
|
+
(0, vitest_1.expect)(available.length).toBeGreaterThanOrEqual(1);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
(0, vitest_1.describe)('Constants', () => {
|
|
46
|
+
(0, vitest_1.it)('MAX_INSTANCES_PER_USER should be 1', () => {
|
|
47
|
+
(0, vitest_1.expect)(constants_js_1.MAX_INSTANCES_PER_USER).toBe(1);
|
|
48
|
+
});
|
|
49
|
+
(0, vitest_1.it)('GATEWAY_PORT should be 18789', () => {
|
|
50
|
+
(0, vitest_1.expect)(constants_js_1.GATEWAY_PORT).toBe(18789);
|
|
51
|
+
});
|
|
52
|
+
(0, vitest_1.it)('INSTANCE_NAME_REGEX should be a RegExp', () => {
|
|
53
|
+
(0, vitest_1.expect)(constants_js_1.INSTANCE_NAME_REGEX).toBeInstanceOf(RegExp);
|
|
54
|
+
});
|
|
55
|
+
(0, vitest_1.it)('PROVISIONING_TIMEOUT_MS should be 600000', () => {
|
|
56
|
+
(0, vitest_1.expect)(constants_js_1.PROVISIONING_TIMEOUT_MS).toBe(600000);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=constants.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.test.js","sourceRoot":"","sources":["../../src/__tests__/constants.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,kDASyB;AAEzB,IAAA,iBAAQ,EAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAA,WAAE,EAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,IAAA,eAAM,EAAC,2BAAY,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,IAAA,eAAM,EAAC,2BAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAA,eAAM,EAAC,2BAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAA,eAAM,EAAC,2BAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;QACvG,KAAK,MAAM,MAAM,IAAI,2BAAY,EAAE,CAAC;YAClC,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;gBACnC,IAAA,eAAM,EAAC,MAAM,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAA,iBAAQ,EAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAA,WAAE,EAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,IAAA,eAAM,EAAC,gCAAiB,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,IAAA,eAAM,EAAC,gCAAiB,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAA,iBAAQ,EAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAA,WAAE,EAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,KAAK,MAAM,MAAM,IAAI,gCAAiB,EAAE,CAAC;YACvC,IAAA,eAAM,EAAC,2BAAY,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC3C,IAAA,eAAM,EAAC,OAAO,2BAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAA,iBAAQ,EAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAA,WAAE,EAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,SAAS,GAAG,yBAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;QACrE,IAAA,eAAM,EAAC,SAAS,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAA,iBAAQ,EAAC,WAAW,EAAE,GAAG,EAAE;IACzB,IAAA,WAAE,EAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,IAAA,eAAM,EAAC,qCAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,IAAA,eAAM,EAAC,2BAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,IAAA,eAAM,EAAC,kCAAmB,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,IAAA,eAAM,EAAC,sCAAuB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/utils.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const utils_js_1 = require("../utils.js");
|
|
5
|
+
(0, vitest_1.describe)('getTierConfig', () => {
|
|
6
|
+
(0, vitest_1.it)('should return config for standard tier', () => {
|
|
7
|
+
const config = (0, utils_js_1.getTierConfig)('standard');
|
|
8
|
+
(0, vitest_1.expect)(config).toBeDefined();
|
|
9
|
+
(0, vitest_1.expect)(config.tier).toBe('standard');
|
|
10
|
+
(0, vitest_1.expect)(config.vCpu).toBe(3);
|
|
11
|
+
(0, vitest_1.expect)(config.memoryGb).toBe(4);
|
|
12
|
+
(0, vitest_1.expect)(config.storage).toBe(80);
|
|
13
|
+
(0, vitest_1.expect)(config.monthlyPrice).toBe(29);
|
|
14
|
+
});
|
|
15
|
+
(0, vitest_1.it)('should return config for plus tier', () => {
|
|
16
|
+
const config = (0, utils_js_1.getTierConfig)('plus');
|
|
17
|
+
(0, vitest_1.expect)(config).toBeDefined();
|
|
18
|
+
(0, vitest_1.expect)(config.tier).toBe('plus');
|
|
19
|
+
(0, vitest_1.expect)(config.vCpu).toBe(4);
|
|
20
|
+
(0, vitest_1.expect)(config.memoryGb).toBe(8);
|
|
21
|
+
(0, vitest_1.expect)(config.storage).toBe(160);
|
|
22
|
+
(0, vitest_1.expect)(config.monthlyPrice).toBe(55);
|
|
23
|
+
});
|
|
24
|
+
(0, vitest_1.it)('should return config for pro tier', () => {
|
|
25
|
+
const config = (0, utils_js_1.getTierConfig)('pro');
|
|
26
|
+
(0, vitest_1.expect)(config).toBeDefined();
|
|
27
|
+
(0, vitest_1.expect)(config.tier).toBe('pro');
|
|
28
|
+
(0, vitest_1.expect)(config.vCpu).toBe(8);
|
|
29
|
+
(0, vitest_1.expect)(config.memoryGb).toBe(16);
|
|
30
|
+
(0, vitest_1.expect)(config.storage).toBe(240);
|
|
31
|
+
(0, vitest_1.expect)(config.monthlyPrice).toBe(99);
|
|
32
|
+
});
|
|
33
|
+
(0, vitest_1.it)('should return undefined for invalid tier', () => {
|
|
34
|
+
const config = (0, utils_js_1.getTierConfig)('invalid');
|
|
35
|
+
(0, vitest_1.expect)(config).toBeUndefined();
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
(0, vitest_1.describe)('isValidInstanceName', () => {
|
|
39
|
+
(0, vitest_1.it)('should accept valid names (min 3 chars)', () => {
|
|
40
|
+
(0, vitest_1.expect)((0, utils_js_1.isValidInstanceName)('abc')).toBe(true);
|
|
41
|
+
(0, vitest_1.expect)((0, utils_js_1.isValidInstanceName)('my-instance')).toBe(true);
|
|
42
|
+
(0, vitest_1.expect)((0, utils_js_1.isValidInstanceName)('MyInstance123')).toBe(true);
|
|
43
|
+
(0, vitest_1.expect)((0, utils_js_1.isValidInstanceName)('a-b-c')).toBe(true);
|
|
44
|
+
});
|
|
45
|
+
(0, vitest_1.it)('should reject names that are too short', () => {
|
|
46
|
+
(0, vitest_1.expect)((0, utils_js_1.isValidInstanceName)('ab')).toBe(false);
|
|
47
|
+
(0, vitest_1.expect)((0, utils_js_1.isValidInstanceName)('a')).toBe(false);
|
|
48
|
+
(0, vitest_1.expect)((0, utils_js_1.isValidInstanceName)('')).toBe(false);
|
|
49
|
+
});
|
|
50
|
+
(0, vitest_1.it)('should reject names starting with a number', () => {
|
|
51
|
+
(0, vitest_1.expect)((0, utils_js_1.isValidInstanceName)('1abc')).toBe(false);
|
|
52
|
+
(0, vitest_1.expect)((0, utils_js_1.isValidInstanceName)('9instance')).toBe(false);
|
|
53
|
+
});
|
|
54
|
+
(0, vitest_1.it)('should reject names starting with a dash', () => {
|
|
55
|
+
(0, vitest_1.expect)((0, utils_js_1.isValidInstanceName)('-abc')).toBe(false);
|
|
56
|
+
(0, vitest_1.expect)((0, utils_js_1.isValidInstanceName)('-my-instance')).toBe(false);
|
|
57
|
+
});
|
|
58
|
+
(0, vitest_1.it)('should reject names that are too long (>63 chars)', () => {
|
|
59
|
+
const longName = 'a' + 'b'.repeat(63); // 64 chars total
|
|
60
|
+
(0, vitest_1.expect)(longName.length).toBe(64);
|
|
61
|
+
(0, vitest_1.expect)((0, utils_js_1.isValidInstanceName)(longName)).toBe(false);
|
|
62
|
+
});
|
|
63
|
+
(0, vitest_1.it)('should accept names at the max length (63 chars)', () => {
|
|
64
|
+
const maxName = 'a' + 'b'.repeat(62); // 63 chars total
|
|
65
|
+
(0, vitest_1.expect)(maxName.length).toBe(63);
|
|
66
|
+
(0, vitest_1.expect)((0, utils_js_1.isValidInstanceName)(maxName)).toBe(true);
|
|
67
|
+
});
|
|
68
|
+
(0, vitest_1.it)('should reject names with special characters', () => {
|
|
69
|
+
(0, vitest_1.expect)((0, utils_js_1.isValidInstanceName)('my_instance')).toBe(false);
|
|
70
|
+
(0, vitest_1.expect)((0, utils_js_1.isValidInstanceName)('my.instance')).toBe(false);
|
|
71
|
+
(0, vitest_1.expect)((0, utils_js_1.isValidInstanceName)('my instance')).toBe(false);
|
|
72
|
+
(0, vitest_1.expect)((0, utils_js_1.isValidInstanceName)('my@instance')).toBe(false);
|
|
73
|
+
(0, vitest_1.expect)((0, utils_js_1.isValidInstanceName)('my!instance')).toBe(false);
|
|
74
|
+
});
|
|
75
|
+
(0, vitest_1.it)('should reject names with underscores', () => {
|
|
76
|
+
(0, vitest_1.expect)((0, utils_js_1.isValidInstanceName)('my_pod')).toBe(false);
|
|
77
|
+
(0, vitest_1.expect)((0, utils_js_1.isValidInstanceName)('a_b_c')).toBe(false);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
(0, vitest_1.describe)('generateToken', () => {
|
|
81
|
+
(0, vitest_1.it)('should generate a token with default length of 32', () => {
|
|
82
|
+
const token = (0, utils_js_1.generateToken)();
|
|
83
|
+
(0, vitest_1.expect)(token).toHaveLength(32);
|
|
84
|
+
});
|
|
85
|
+
(0, vitest_1.it)('should generate a token with custom length', () => {
|
|
86
|
+
(0, vitest_1.expect)((0, utils_js_1.generateToken)(8)).toHaveLength(8);
|
|
87
|
+
(0, vitest_1.expect)((0, utils_js_1.generateToken)(64)).toHaveLength(64);
|
|
88
|
+
(0, vitest_1.expect)((0, utils_js_1.generateToken)(1)).toHaveLength(1);
|
|
89
|
+
});
|
|
90
|
+
(0, vitest_1.it)('should only contain alphanumeric characters', () => {
|
|
91
|
+
const token = (0, utils_js_1.generateToken)(100);
|
|
92
|
+
(0, vitest_1.expect)(token).toMatch(/^[A-Za-z0-9]+$/);
|
|
93
|
+
});
|
|
94
|
+
(0, vitest_1.it)('should generate unique tokens between calls', () => {
|
|
95
|
+
const tokens = new Set(Array.from({ length: 10 }, () => (0, utils_js_1.generateToken)()));
|
|
96
|
+
(0, vitest_1.expect)(tokens.size).toBe(10);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
(0, vitest_1.describe)('generateInstanceId', () => {
|
|
100
|
+
(0, vitest_1.it)('should match the expected format', () => {
|
|
101
|
+
const id = (0, utils_js_1.generateInstanceId)();
|
|
102
|
+
(0, vitest_1.expect)(id).toMatch(/^oc-[a-z0-9]+-[a-z0-9]{8}$/);
|
|
103
|
+
});
|
|
104
|
+
(0, vitest_1.it)('should generate unique IDs between calls', () => {
|
|
105
|
+
const ids = new Set(Array.from({ length: 10 }, () => (0, utils_js_1.generateInstanceId)()));
|
|
106
|
+
(0, vitest_1.expect)(ids.size).toBe(10);
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
(0, vitest_1.describe)('formatBytes', () => {
|
|
110
|
+
(0, vitest_1.it)('should format 0 bytes', () => {
|
|
111
|
+
(0, vitest_1.expect)((0, utils_js_1.formatBytes)(0)).toBe('0 B');
|
|
112
|
+
});
|
|
113
|
+
(0, vitest_1.it)('should format bytes to KB', () => {
|
|
114
|
+
(0, vitest_1.expect)((0, utils_js_1.formatBytes)(1024)).toBe('1 KB');
|
|
115
|
+
});
|
|
116
|
+
(0, vitest_1.it)('should format fractional KB', () => {
|
|
117
|
+
(0, vitest_1.expect)((0, utils_js_1.formatBytes)(1536)).toBe('1.5 KB');
|
|
118
|
+
});
|
|
119
|
+
(0, vitest_1.it)('should format bytes to MB', () => {
|
|
120
|
+
(0, vitest_1.expect)((0, utils_js_1.formatBytes)(1048576)).toBe('1 MB');
|
|
121
|
+
});
|
|
122
|
+
(0, vitest_1.it)('should format bytes to GB', () => {
|
|
123
|
+
(0, vitest_1.expect)((0, utils_js_1.formatBytes)(1073741824)).toBe('1 GB');
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
(0, vitest_1.describe)('formatCost', () => {
|
|
127
|
+
(0, vitest_1.it)('should format cost with 4 decimal places', () => {
|
|
128
|
+
(0, vitest_1.expect)((0, utils_js_1.formatCost)(29)).toBe('$29.0000');
|
|
129
|
+
});
|
|
130
|
+
(0, vitest_1.it)('should format small costs', () => {
|
|
131
|
+
(0, vitest_1.expect)((0, utils_js_1.formatCost)(0.0123)).toBe('$0.0123');
|
|
132
|
+
});
|
|
133
|
+
(0, vitest_1.it)('should format zero cost', () => {
|
|
134
|
+
(0, vitest_1.expect)((0, utils_js_1.formatCost)(0)).toBe('$0.0000');
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
(0, vitest_1.describe)('sleep', () => {
|
|
138
|
+
(0, vitest_1.it)('should resolve after approximately N ms', async () => {
|
|
139
|
+
const delay = 50;
|
|
140
|
+
const start = Date.now();
|
|
141
|
+
await (0, utils_js_1.sleep)(delay);
|
|
142
|
+
const elapsed = Date.now() - start;
|
|
143
|
+
(0, vitest_1.expect)(elapsed).toBeGreaterThanOrEqual(delay - 10);
|
|
144
|
+
(0, vitest_1.expect)(elapsed).toBeLessThan(delay + 100);
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
(0, vitest_1.describe)('retry', () => {
|
|
148
|
+
(0, vitest_1.it)('should succeed on first try and call fn once', async () => {
|
|
149
|
+
const fn = vitest_1.vi.fn().mockResolvedValue('ok');
|
|
150
|
+
const result = await (0, utils_js_1.retry)(fn, 3, 10);
|
|
151
|
+
(0, vitest_1.expect)(result).toBe('ok');
|
|
152
|
+
(0, vitest_1.expect)(fn).toHaveBeenCalledTimes(1);
|
|
153
|
+
});
|
|
154
|
+
(0, vitest_1.it)('should succeed on second attempt after first failure', async () => {
|
|
155
|
+
const fn = vitest_1.vi
|
|
156
|
+
.fn()
|
|
157
|
+
.mockRejectedValueOnce(new Error('fail'))
|
|
158
|
+
.mockResolvedValue('ok');
|
|
159
|
+
const result = await (0, utils_js_1.retry)(fn, 3, 10);
|
|
160
|
+
(0, vitest_1.expect)(result).toBe('ok');
|
|
161
|
+
(0, vitest_1.expect)(fn).toHaveBeenCalledTimes(2);
|
|
162
|
+
});
|
|
163
|
+
(0, vitest_1.it)('should throw last error after exhausting all retries', async () => {
|
|
164
|
+
const fn = vitest_1.vi.fn().mockRejectedValue(new Error('always fails'));
|
|
165
|
+
await (0, vitest_1.expect)((0, utils_js_1.retry)(fn, 3, 10)).rejects.toThrow('always fails');
|
|
166
|
+
(0, vitest_1.expect)(fn).toHaveBeenCalledTimes(3);
|
|
167
|
+
});
|
|
168
|
+
(0, vitest_1.it)('should delay between retries', async () => {
|
|
169
|
+
const fn = vitest_1.vi
|
|
170
|
+
.fn()
|
|
171
|
+
.mockRejectedValueOnce(new Error('fail'))
|
|
172
|
+
.mockResolvedValue('ok');
|
|
173
|
+
const start = Date.now();
|
|
174
|
+
await (0, utils_js_1.retry)(fn, 3, 50);
|
|
175
|
+
const elapsed = Date.now() - start;
|
|
176
|
+
// First retry delay is baseDelay * 2^0 = 50ms
|
|
177
|
+
(0, vitest_1.expect)(elapsed).toBeGreaterThanOrEqual(40);
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
(0, vitest_1.describe)('maskSecret', () => {
|
|
181
|
+
(0, vitest_1.it)('should fully mask short values', () => {
|
|
182
|
+
// visibleChars default is 4, so values <= 8 chars are fully masked
|
|
183
|
+
(0, vitest_1.expect)((0, utils_js_1.maskSecret)('abcdefgh')).toBe('********');
|
|
184
|
+
(0, vitest_1.expect)((0, utils_js_1.maskSecret)('short')).toBe('*****');
|
|
185
|
+
});
|
|
186
|
+
(0, vitest_1.it)('should show first and last 4 chars for long values', () => {
|
|
187
|
+
(0, vitest_1.expect)((0, utils_js_1.maskSecret)('abcdefghijklmnop')).toBe('abcd********mnop');
|
|
188
|
+
});
|
|
189
|
+
(0, vitest_1.it)('should return empty string for empty input', () => {
|
|
190
|
+
(0, vitest_1.expect)((0, utils_js_1.maskSecret)('')).toBe('');
|
|
191
|
+
});
|
|
192
|
+
(0, vitest_1.it)('should handle single character', () => {
|
|
193
|
+
(0, vitest_1.expect)((0, utils_js_1.maskSecret)('x')).toBe('*');
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
//# sourceMappingURL=utils.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../../src/__tests__/utils.test.ts"],"names":[],"mappings":"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"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -7,5 +7,4 @@ export declare const GATEWAY_PORT = 18789;
|
|
|
7
7
|
export declare const INSTANCE_NAME_REGEX: RegExp;
|
|
8
8
|
export declare const MAX_INSTANCES_PER_USER = 1;
|
|
9
9
|
export declare const PROVISIONING_TIMEOUT_MS: number;
|
|
10
|
-
export declare const BILLING_MARKUP_PERCENTAGE = 0.35;
|
|
11
10
|
//# sourceMappingURL=constants.d.ts.map
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEhE,eAAO,MAAM,iBAAiB,EAAE,MAAM,EAA+B,CAAC;AAEtE,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAG/C,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,UAAU,EA4BpC,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEhE,eAAO,MAAM,iBAAiB,EAAE,MAAM,EAA+B,CAAC;AAEtE,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAG/C,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,UAAU,EA4BpC,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,SAAS,EAOjC,CAAC;AAEF,eAAO,MAAM,YAAY,QAAQ,CAAC;AAElC,eAAO,MAAM,mBAAmB,QAAiC,CAAC;AAElE,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAExC,eAAO,MAAM,uBAAuB,QAAiB,CAAC"}
|
package/dist/constants.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// Launchpod SaaS Constants
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.
|
|
4
|
+
exports.PROVISIONING_TIMEOUT_MS = exports.MAX_INSTANCES_PER_USER = exports.INSTANCE_NAME_REGEX = exports.GATEWAY_PORT = exports.FRAMEWORKS = exports.TIER_CONFIGS = exports.REGION_NAMES = exports.SUPPORTED_REGIONS = void 0;
|
|
5
5
|
exports.SUPPORTED_REGIONS = ['us-east-1', 'us-west-2'];
|
|
6
6
|
exports.REGION_NAMES = {
|
|
7
|
-
'us-east-1': 'US East (
|
|
7
|
+
'us-east-1': 'US East (Ashburn, VA)',
|
|
8
8
|
'us-west-2': 'US West (Oregon)',
|
|
9
9
|
};
|
|
10
10
|
exports.TIER_CONFIGS = [
|
|
11
11
|
{
|
|
12
12
|
tier: 'standard',
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
vCpu: 3,
|
|
14
|
+
memoryGb: 4,
|
|
15
15
|
storage: 80,
|
|
16
16
|
label: 'Standard',
|
|
17
17
|
monthlyPrice: 29,
|
|
@@ -19,8 +19,8 @@ exports.TIER_CONFIGS = [
|
|
|
19
19
|
},
|
|
20
20
|
{
|
|
21
21
|
tier: 'plus',
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
vCpu: 4,
|
|
23
|
+
memoryGb: 8,
|
|
24
24
|
storage: 160,
|
|
25
25
|
label: 'Plus',
|
|
26
26
|
monthlyPrice: 55,
|
|
@@ -28,8 +28,8 @@ exports.TIER_CONFIGS = [
|
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
30
|
tier: 'pro',
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
vCpu: 8,
|
|
32
|
+
memoryGb: 16,
|
|
33
33
|
storage: 240,
|
|
34
34
|
label: 'Pro',
|
|
35
35
|
monthlyPrice: 99,
|
|
@@ -42,13 +42,10 @@ exports.FRAMEWORKS = [
|
|
|
42
42
|
name: 'OpenClaw',
|
|
43
43
|
tagline: 'Personal AI agent — messaging, automation, browser, cron',
|
|
44
44
|
status: 'available',
|
|
45
|
-
stars: '150k+',
|
|
46
45
|
},
|
|
47
46
|
];
|
|
48
47
|
exports.GATEWAY_PORT = 18789;
|
|
49
48
|
exports.INSTANCE_NAME_REGEX = /^[a-zA-Z][a-zA-Z0-9-]{2,62}$/;
|
|
50
49
|
exports.MAX_INSTANCES_PER_USER = 1;
|
|
51
50
|
exports.PROVISIONING_TIMEOUT_MS = 10 * 60 * 1000; // 10 minutes
|
|
52
|
-
// Legacy — kept for API backward compatibility, remove when AI proxy is fully removed
|
|
53
|
-
exports.BILLING_MARKUP_PERCENTAGE = 0.35;
|
|
54
51
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";AAAA,2BAA2B;;;AAId,QAAA,iBAAiB,GAAa,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAEzD,QAAA,YAAY,GAA2B;IAClD,WAAW,EAAE,uBAAuB;IACpC,WAAW,EAAE,kBAAkB;CAChC,CAAC;AAEW,QAAA,YAAY,GAAiB;IACxC;QACE,IAAI,EAAE,UAAU;QAChB,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";AAAA,2BAA2B;;;AAId,QAAA,iBAAiB,GAAa,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAEzD,QAAA,YAAY,GAA2B;IAClD,WAAW,EAAE,uBAAuB;IACpC,WAAW,EAAE,kBAAkB;CAChC,CAAC;AAEW,QAAA,YAAY,GAAiB;IACxC;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,CAAC;QACP,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,UAAU;QACjB,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,yBAAyB;KACvC;IACD;QACE,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,CAAC;QACP,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,GAAG;QACZ,KAAK,EAAE,MAAM;QACb,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,6BAA6B;KAC3C;IACD;QACE,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,CAAC;QACP,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE,GAAG;QACZ,KAAK,EAAE,KAAK;QACZ,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,mCAAmC;KACjD;CACF,CAAC;AAEW,QAAA,UAAU,GAAgB;IACrC;QACE,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,0DAA0D;QACnE,MAAM,EAAE,WAAW;KACpB;CACF,CAAC;AAEW,QAAA,YAAY,GAAG,KAAK,CAAC;AAErB,QAAA,mBAAmB,GAAG,8BAA8B,CAAC;AAErD,QAAA,sBAAsB,GAAG,CAAC,CAAC;AAE3B,QAAA,uBAAuB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -18,4 +18,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
18
18
|
__exportStar(require("./types.js"), exports);
|
|
19
19
|
__exportStar(require("./constants.js"), exports);
|
|
20
20
|
__exportStar(require("./utils.js"), exports);
|
|
21
|
+
__exportStar(require("./managed-config.js"), exports);
|
|
21
22
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,4CAA4C;;;;;;;;;;;;;;;;AAE5C,6CAA2B;AAC3B,iDAA+B;AAC/B,6CAA2B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,4CAA4C;;;;;;;;;;;;;;;;AAE5C,6CAA2B;AAC3B,iDAA+B;AAC/B,6CAA2B;AAC3B,sDAAoC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Locked-down base OpenClaw config template for Santuri managed instances.
|
|
3
|
+
* Every managed client starts from this. Per-client customization adds on top, never loosens.
|
|
4
|
+
*/
|
|
5
|
+
export declare const LOCKED_DOWN_BASE_CONFIG: Record<string, any>;
|
|
6
|
+
/** Controls which Google Workspace tools are enabled per instance */
|
|
7
|
+
export type ScopeProfile = 'essential' | 'standard' | 'full';
|
|
8
|
+
/** Returns the Google Workspace tools allowed for a given scope profile */
|
|
9
|
+
export declare function getGoogleTools(profile: ScopeProfile): string[];
|
|
10
|
+
/** Returns the Google Workspace tools to deny for a given scope profile */
|
|
11
|
+
export declare function getGoogleToolDenyList(profile: ScopeProfile): string[];
|
|
12
|
+
/** Default scope profile for new instances */
|
|
13
|
+
export declare const DEFAULT_SCOPE_PROFILE: ScopeProfile;
|
|
14
|
+
/** Resource profile mapping (replaces tier-based server selection) */
|
|
15
|
+
export type ResourceProfile = 'small' | 'medium' | 'large';
|
|
16
|
+
export declare const RESOURCE_PROFILES: Record<ResourceProfile, {
|
|
17
|
+
serverType: string;
|
|
18
|
+
memoryMax: string;
|
|
19
|
+
cpuQuota: string;
|
|
20
|
+
tasksMax: number;
|
|
21
|
+
diskQuotaSoftGB: number;
|
|
22
|
+
diskQuotaHardGB: number;
|
|
23
|
+
}>;
|
|
24
|
+
/** Map legacy tiers to resource profiles */
|
|
25
|
+
export declare const TIER_TO_PROFILE: Record<string, ResourceProfile>;
|
|
26
|
+
export interface ManagedClientConfig {
|
|
27
|
+
botName: string;
|
|
28
|
+
botTheme?: string;
|
|
29
|
+
botEmoji?: string;
|
|
30
|
+
timezone: string;
|
|
31
|
+
channel: 'whatsapp' | 'telegram';
|
|
32
|
+
googleEmail?: string;
|
|
33
|
+
scopeProfile?: ScopeProfile;
|
|
34
|
+
plugins?: string[];
|
|
35
|
+
soulMd?: string;
|
|
36
|
+
agentsMd?: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Build a locked-down openclaw.json for a managed client.
|
|
40
|
+
* Merges base template with per-client overrides. Never loosens deny lists.
|
|
41
|
+
*/
|
|
42
|
+
export declare function buildClientConfig(clientConfig: ManagedClientConfig, gatewayToken: string): Record<string, any>;
|
|
43
|
+
//# sourceMappingURL=managed-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-config.d.ts","sourceRoot":"","sources":["../src/managed-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAmJvD,CAAC;AAIF,qEAAqE;AACrE,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC;AAmC7D,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,EAAE,CAE9D;AAED,2EAA2E;AAC3E,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,EAAE,CAGrE;AAED,8CAA8C;AAC9C,eAAO,MAAM,qBAAqB,EAAE,YAAyB,CAAC;AA8B9D,sEAAsE;AACtE,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE3D,eAAO,MAAM,iBAAiB,EAAE,MAAM,CACpC,eAAe,EACf;IACE,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;CACzB,CA0BF,CAAC;AAEF,4CAA4C;AAC5C,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAI3D,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,UAAU,GAAG,UAAU,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,mBAAmB,EACjC,YAAY,EAAE,MAAM,GACnB,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAyDrB"}
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Locked-down base OpenClaw config template for Santuri managed instances.
|
|
4
|
+
* Every managed client starts from this. Per-client customization adds on top, never loosens.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.TIER_TO_PROFILE = exports.RESOURCE_PROFILES = exports.DEFAULT_SCOPE_PROFILE = exports.LOCKED_DOWN_BASE_CONFIG = void 0;
|
|
8
|
+
exports.getGoogleTools = getGoogleTools;
|
|
9
|
+
exports.getGoogleToolDenyList = getGoogleToolDenyList;
|
|
10
|
+
exports.buildClientConfig = buildClientConfig;
|
|
11
|
+
exports.LOCKED_DOWN_BASE_CONFIG = {
|
|
12
|
+
// ─── Identity (customize per client) ───────────────────────────
|
|
13
|
+
identity: {
|
|
14
|
+
name: 'Assistant',
|
|
15
|
+
theme: 'helpful, professional business assistant',
|
|
16
|
+
emoji: '🤖',
|
|
17
|
+
},
|
|
18
|
+
// ─── Agent Configuration ───────────────────────────────────────
|
|
19
|
+
agents: {
|
|
20
|
+
defaults: {
|
|
21
|
+
workspace: '~/.openclaw/workspace',
|
|
22
|
+
skipBootstrap: false,
|
|
23
|
+
model: {
|
|
24
|
+
primary: 'anthropic/claude-opus-4-6',
|
|
25
|
+
fallbacks: ['anthropic/claude-sonnet-4-5'],
|
|
26
|
+
},
|
|
27
|
+
maxConcurrent: 1,
|
|
28
|
+
timeoutSeconds: 300,
|
|
29
|
+
contextTokens: 100000,
|
|
30
|
+
elevatedDefault: 'off',
|
|
31
|
+
thinkingDefault: 'low',
|
|
32
|
+
userTimezone: 'Africa/Nairobi',
|
|
33
|
+
},
|
|
34
|
+
list: [
|
|
35
|
+
{
|
|
36
|
+
id: 'main',
|
|
37
|
+
default: true,
|
|
38
|
+
tools: {
|
|
39
|
+
profile: 'messaging',
|
|
40
|
+
allow: [
|
|
41
|
+
'web_search',
|
|
42
|
+
'web_fetch',
|
|
43
|
+
'tts',
|
|
44
|
+
'image',
|
|
45
|
+
'read',
|
|
46
|
+
'write',
|
|
47
|
+
'edit',
|
|
48
|
+
'cron',
|
|
49
|
+
'memory_search',
|
|
50
|
+
'memory_get',
|
|
51
|
+
],
|
|
52
|
+
deny: [
|
|
53
|
+
'exec',
|
|
54
|
+
'process',
|
|
55
|
+
'browser',
|
|
56
|
+
'canvas',
|
|
57
|
+
'nodes',
|
|
58
|
+
'gateway',
|
|
59
|
+
'apply_patch',
|
|
60
|
+
'subagents',
|
|
61
|
+
],
|
|
62
|
+
elevated: { enabled: false },
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
},
|
|
67
|
+
// ─── Global Tool Policy ────────────────────────────────────────
|
|
68
|
+
tools: {
|
|
69
|
+
elevated: { enabled: false },
|
|
70
|
+
exec: { security: 'deny' },
|
|
71
|
+
fs: { workspaceOnly: true },
|
|
72
|
+
deny: [
|
|
73
|
+
'exec',
|
|
74
|
+
'process',
|
|
75
|
+
'browser',
|
|
76
|
+
'canvas',
|
|
77
|
+
'nodes',
|
|
78
|
+
'gateway',
|
|
79
|
+
'apply_patch',
|
|
80
|
+
'subagents',
|
|
81
|
+
],
|
|
82
|
+
},
|
|
83
|
+
// ─── Commands (all dangerous commands disabled) ────────────────
|
|
84
|
+
commands: {
|
|
85
|
+
bash: false,
|
|
86
|
+
config: false,
|
|
87
|
+
debug: false,
|
|
88
|
+
restart: false,
|
|
89
|
+
},
|
|
90
|
+
// ─── Session Management ────────────────────────────────────────
|
|
91
|
+
session: {
|
|
92
|
+
dmScope: 'per-channel-peer',
|
|
93
|
+
reset: {
|
|
94
|
+
mode: 'idle',
|
|
95
|
+
idleMinutes: 120,
|
|
96
|
+
},
|
|
97
|
+
maintenance: {
|
|
98
|
+
mode: 'enforce',
|
|
99
|
+
pruneAfter: '7d',
|
|
100
|
+
maxEntries: 200,
|
|
101
|
+
rotateBytes: '5mb',
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
// ─── Channels (per-client — placeholders) ──────────────────────
|
|
105
|
+
channels: {
|
|
106
|
+
whatsapp: {
|
|
107
|
+
enabled: false,
|
|
108
|
+
dmPolicy: 'allowlist',
|
|
109
|
+
allowFrom: [],
|
|
110
|
+
groupPolicy: 'disabled',
|
|
111
|
+
configWrites: false,
|
|
112
|
+
},
|
|
113
|
+
telegram: {
|
|
114
|
+
enabled: false,
|
|
115
|
+
dmPolicy: 'allowlist',
|
|
116
|
+
allowFrom: [],
|
|
117
|
+
groupPolicy: 'disabled',
|
|
118
|
+
configWrites: false,
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
// ─── Gateway ───────────────────────────────────────────────────
|
|
122
|
+
gateway: {
|
|
123
|
+
bind: 'loopback',
|
|
124
|
+
auth: {
|
|
125
|
+
mode: 'token',
|
|
126
|
+
token: 'GENERATED_AT_PROVISION_TIME',
|
|
127
|
+
},
|
|
128
|
+
controlUi: {
|
|
129
|
+
enabled: true,
|
|
130
|
+
allowInsecureAuth: true,
|
|
131
|
+
},
|
|
132
|
+
trustedProxies: ['127.0.0.1', '::1'],
|
|
133
|
+
},
|
|
134
|
+
// ─── Plugins ───────────────────────────────────────────────────
|
|
135
|
+
plugins: {
|
|
136
|
+
enabled: true,
|
|
137
|
+
allow: [],
|
|
138
|
+
entries: {},
|
|
139
|
+
},
|
|
140
|
+
// ─── Skills ────────────────────────────────────────────────────
|
|
141
|
+
skills: {
|
|
142
|
+
allowBundled: [],
|
|
143
|
+
},
|
|
144
|
+
// ─── Logging ───────────────────────────────────────────────────
|
|
145
|
+
logging: {
|
|
146
|
+
level: 'info',
|
|
147
|
+
redactSensitive: 'tools',
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
/** All Google Workspace tools across all profiles */
|
|
151
|
+
const ALL_GOOGLE_TOOLS = [
|
|
152
|
+
'gmail_search', 'gmail_read', 'gmail_labels',
|
|
153
|
+
'gmail_send', 'gmail_draft', 'gmail_archive',
|
|
154
|
+
'calendar_list', 'calendar_create', 'calendar_update', 'calendar_delete',
|
|
155
|
+
'contacts_search', 'contacts_create', 'contacts_update',
|
|
156
|
+
'drive_search', 'drive_read',
|
|
157
|
+
];
|
|
158
|
+
const ESSENTIAL_TOOLS = [
|
|
159
|
+
'gmail_search', 'gmail_read', 'gmail_labels',
|
|
160
|
+
'calendar_list',
|
|
161
|
+
'contacts_search',
|
|
162
|
+
];
|
|
163
|
+
const STANDARD_TOOLS = [
|
|
164
|
+
...ESSENTIAL_TOOLS,
|
|
165
|
+
'gmail_send', 'gmail_draft', 'gmail_archive',
|
|
166
|
+
'calendar_create', 'calendar_update', 'calendar_delete',
|
|
167
|
+
];
|
|
168
|
+
const FULL_TOOLS = [
|
|
169
|
+
...STANDARD_TOOLS,
|
|
170
|
+
'contacts_create', 'contacts_update',
|
|
171
|
+
'drive_search', 'drive_read',
|
|
172
|
+
];
|
|
173
|
+
const SCOPE_PROFILE_TOOLS = {
|
|
174
|
+
essential: ESSENTIAL_TOOLS,
|
|
175
|
+
standard: STANDARD_TOOLS,
|
|
176
|
+
full: FULL_TOOLS,
|
|
177
|
+
};
|
|
178
|
+
/** Returns the Google Workspace tools allowed for a given scope profile */
|
|
179
|
+
function getGoogleTools(profile) {
|
|
180
|
+
return SCOPE_PROFILE_TOOLS[profile];
|
|
181
|
+
}
|
|
182
|
+
/** Returns the Google Workspace tools to deny for a given scope profile */
|
|
183
|
+
function getGoogleToolDenyList(profile) {
|
|
184
|
+
const allowed = getGoogleTools(profile);
|
|
185
|
+
return ALL_GOOGLE_TOOLS.filter(t => !allowed.includes(t));
|
|
186
|
+
}
|
|
187
|
+
/** Default scope profile for new instances */
|
|
188
|
+
exports.DEFAULT_SCOPE_PROFILE = 'standard';
|
|
189
|
+
// ─── Weekly Safety Report Cron (§5) ──────────────────────────────────
|
|
190
|
+
/** Build the weekly safety report cron job config */
|
|
191
|
+
function buildWeeklySafetyReportCron(timezone) {
|
|
192
|
+
return {
|
|
193
|
+
name: 'weekly-safety-report',
|
|
194
|
+
schedule: {
|
|
195
|
+
kind: 'cron',
|
|
196
|
+
expr: '0 9 * * 1', // Every Monday at 9am
|
|
197
|
+
tz: timezone,
|
|
198
|
+
},
|
|
199
|
+
payload: {
|
|
200
|
+
kind: 'agentTurn',
|
|
201
|
+
message: [
|
|
202
|
+
'Generate and send your weekly safety report. Read the audit log',
|
|
203
|
+
'summary from /var/log/openclaw/ and send a brief message to the',
|
|
204
|
+
'client with: email count (read/sent/drafted), calendar events',
|
|
205
|
+
'(created/updated), contacts looked up, and "All systems healthy"',
|
|
206
|
+
'if everything is normal. Keep it short and conversational.',
|
|
207
|
+
].join(' '),
|
|
208
|
+
},
|
|
209
|
+
sessionTarget: 'isolated',
|
|
210
|
+
delivery: {
|
|
211
|
+
mode: 'announce',
|
|
212
|
+
},
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
exports.RESOURCE_PROFILES = {
|
|
216
|
+
small: {
|
|
217
|
+
serverType: 'cpx21', // 3 vCPU / 4 GB / 80 GB — $9.99/mo
|
|
218
|
+
memoryMax: '3G',
|
|
219
|
+
cpuQuota: '300%',
|
|
220
|
+
tasksMax: 512,
|
|
221
|
+
diskQuotaSoftGB: 60,
|
|
222
|
+
diskQuotaHardGB: 62,
|
|
223
|
+
},
|
|
224
|
+
medium: {
|
|
225
|
+
serverType: 'cpx31', // 4 vCPU / 8 GB / 160 GB — $17.99/mo
|
|
226
|
+
memoryMax: '6G',
|
|
227
|
+
cpuQuota: '400%',
|
|
228
|
+
tasksMax: 1024,
|
|
229
|
+
diskQuotaSoftGB: 120,
|
|
230
|
+
diskQuotaHardGB: 124,
|
|
231
|
+
},
|
|
232
|
+
large: {
|
|
233
|
+
serverType: 'cpx41', // 8 vCPU / 16 GB / 240 GB — $33.49/mo
|
|
234
|
+
memoryMax: '12G',
|
|
235
|
+
cpuQuota: '800%',
|
|
236
|
+
tasksMax: 2048,
|
|
237
|
+
diskQuotaSoftGB: 180,
|
|
238
|
+
diskQuotaHardGB: 186,
|
|
239
|
+
},
|
|
240
|
+
};
|
|
241
|
+
/** Map legacy tiers to resource profiles */
|
|
242
|
+
exports.TIER_TO_PROFILE = {
|
|
243
|
+
standard: 'small',
|
|
244
|
+
plus: 'medium',
|
|
245
|
+
pro: 'large',
|
|
246
|
+
};
|
|
247
|
+
/**
|
|
248
|
+
* Build a locked-down openclaw.json for a managed client.
|
|
249
|
+
* Merges base template with per-client overrides. Never loosens deny lists.
|
|
250
|
+
*/
|
|
251
|
+
function buildClientConfig(clientConfig, gatewayToken) {
|
|
252
|
+
const config = JSON.parse(JSON.stringify(exports.LOCKED_DOWN_BASE_CONFIG));
|
|
253
|
+
// Identity
|
|
254
|
+
config.identity.name = clientConfig.botName;
|
|
255
|
+
if (clientConfig.botTheme)
|
|
256
|
+
config.identity.theme = clientConfig.botTheme;
|
|
257
|
+
if (clientConfig.botEmoji)
|
|
258
|
+
config.identity.emoji = clientConfig.botEmoji;
|
|
259
|
+
// Timezone
|
|
260
|
+
config.agents.defaults.userTimezone = clientConfig.timezone;
|
|
261
|
+
// Gateway token
|
|
262
|
+
config.gateway.auth.token = gatewayToken;
|
|
263
|
+
// Channel
|
|
264
|
+
config.channels[clientConfig.channel].enabled = true;
|
|
265
|
+
// Browser config (headless chromium)
|
|
266
|
+
config.browser = {
|
|
267
|
+
enabled: true,
|
|
268
|
+
executablePath: '/usr/local/bin/chromium',
|
|
269
|
+
headless: true,
|
|
270
|
+
noSandbox: true,
|
|
271
|
+
};
|
|
272
|
+
// Plugins
|
|
273
|
+
const plugins = clientConfig.plugins || [];
|
|
274
|
+
if (clientConfig.googleEmail && !plugins.includes('google-workspace')) {
|
|
275
|
+
plugins.push('google-workspace');
|
|
276
|
+
}
|
|
277
|
+
if (plugins.length > 0) {
|
|
278
|
+
config.plugins.allow = plugins;
|
|
279
|
+
// Add Google Workspace tools based on scope profile
|
|
280
|
+
if (plugins.includes('google-workspace')) {
|
|
281
|
+
const profile = clientConfig.scopeProfile || exports.DEFAULT_SCOPE_PROFILE;
|
|
282
|
+
const allowedTools = getGoogleTools(profile);
|
|
283
|
+
const deniedTools = getGoogleToolDenyList(profile);
|
|
284
|
+
config.agents.list[0].tools.allow.push(...allowedTools);
|
|
285
|
+
// Add denied Google tools to global + agent deny lists
|
|
286
|
+
config.tools.deny.push(...deniedTools);
|
|
287
|
+
config.agents.list[0].tools.deny.push(...deniedTools);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
// Cron jobs — weekly safety report (§5)
|
|
291
|
+
if (clientConfig.googleEmail) {
|
|
292
|
+
config.cron = {
|
|
293
|
+
jobs: [
|
|
294
|
+
buildWeeklySafetyReportCron(clientConfig.timezone),
|
|
295
|
+
],
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
return config;
|
|
299
|
+
}
|
|
300
|
+
//# sourceMappingURL=managed-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-config.js","sourceRoot":"","sources":["../src/managed-config.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type DeploymentType = '
|
|
1
|
+
export type DeploymentType = 'hetzner';
|
|
2
2
|
export type InstanceStatus = 'pending' | 'provisioning' | 'awaiting_setup' | 'running' | 'stopping' | 'stopped' | 'terminating' | 'terminated' | 'failed';
|
|
3
3
|
export type InstanceTier = 'standard' | 'plus' | 'pro';
|
|
4
4
|
export type Region = 'us-east-1' | 'us-west-2';
|
|
@@ -16,6 +16,7 @@ export interface User {
|
|
|
16
16
|
email: string;
|
|
17
17
|
name: string | null;
|
|
18
18
|
stripeCustomerId: string | null;
|
|
19
|
+
isAdmin: boolean;
|
|
19
20
|
createdAt: Date;
|
|
20
21
|
updatedAt: Date;
|
|
21
22
|
}
|
|
@@ -28,19 +29,19 @@ export interface Instance {
|
|
|
28
29
|
region: Region;
|
|
29
30
|
status: InstanceStatus;
|
|
30
31
|
modelId: string;
|
|
31
|
-
awsInstanceId: string | null;
|
|
32
|
-
awsClusterArn: string | null;
|
|
33
|
-
awsServiceArn: string | null;
|
|
34
32
|
gatewayUrl: string | null;
|
|
35
33
|
gatewayToken: string;
|
|
36
|
-
gatewayTokenSecretArn: string | null;
|
|
37
|
-
proxyToken: string | null;
|
|
38
|
-
proxyTokenSecretArn: string | null;
|
|
39
|
-
telegramBotTokenArn: string | null;
|
|
40
|
-
telegramUserId: string | null;
|
|
41
34
|
hetznerServerId: string | null;
|
|
42
35
|
hetznerIpAddress: string | null;
|
|
43
36
|
sshPrivateKey: string | null;
|
|
37
|
+
sshAdminPrivateKey: string | null;
|
|
38
|
+
sshAdminPrivateKeyIv: string | null;
|
|
39
|
+
sshAdminPrivateKeyAuthTag: string | null;
|
|
40
|
+
sshUserPrivateKey: string | null;
|
|
41
|
+
sshUserPrivateKeyIv: string | null;
|
|
42
|
+
sshUserPrivateKeyAuthTag: string | null;
|
|
43
|
+
managedClientName: string | null;
|
|
44
|
+
managedBy: string | null;
|
|
44
45
|
createdAt: Date;
|
|
45
46
|
updatedAt: Date;
|
|
46
47
|
startedAt: Date | null;
|
|
@@ -67,8 +68,8 @@ export interface InstanceMetrics {
|
|
|
67
68
|
}
|
|
68
69
|
export interface TierConfig {
|
|
69
70
|
tier: InstanceTier;
|
|
70
|
-
|
|
71
|
-
|
|
71
|
+
vCpu: number;
|
|
72
|
+
memoryGb: number;
|
|
72
73
|
storage: number;
|
|
73
74
|
label: string;
|
|
74
75
|
monthlyPrice: number;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { InstanceTier, TierConfig
|
|
1
|
+
import type { InstanceTier, TierConfig } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Get tier configuration by tier name
|
|
4
4
|
*/
|
|
@@ -12,6 +12,13 @@ export declare function isValidInstanceName(name: string): boolean;
|
|
|
12
12
|
* SECURITY: Uses rejection sampling to ensure uniform distribution
|
|
13
13
|
*/
|
|
14
14
|
export declare function generateToken(length?: number): string;
|
|
15
|
+
/**
|
|
16
|
+
* Generate an instance name from a full name.
|
|
17
|
+
* "Jane Smith" → "jane-s"
|
|
18
|
+
* "Jane" → "jane"
|
|
19
|
+
* "María José García" → "maria-jose-g"
|
|
20
|
+
*/
|
|
21
|
+
export declare function generateInstanceName(fullName: string): string;
|
|
15
22
|
/**
|
|
16
23
|
* Generate a unique instance ID
|
|
17
24
|
*/
|
|
@@ -24,10 +31,6 @@ export declare function formatBytes(bytes: number): string;
|
|
|
24
31
|
* Format cost in USD
|
|
25
32
|
*/
|
|
26
33
|
export declare function formatCost(cost: number): string;
|
|
27
|
-
/**
|
|
28
|
-
* Get AWS region endpoint
|
|
29
|
-
*/
|
|
30
|
-
export declare function getAwsEndpoint(region: Region): string;
|
|
31
34
|
/**
|
|
32
35
|
* Sleep utility for async operations
|
|
33
36
|
*/
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE3D;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,UAAU,GAAG,SAAS,CAExE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,GAAE,MAAW,GAAG,MAAM,CAqBzD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAkB7D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAI3C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO/C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,CAAC,EAC3B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,UAAU,GAAE,MAAU,EACtB,SAAS,GAAE,MAAa,GACvB,OAAO,CAAC,CAAC,CAAC,CAgBZ;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,GAAE,MAAU,GAAG,MAAM,CAO1E"}
|
package/dist/utils.js
CHANGED
|
@@ -4,10 +4,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
exports.getTierConfig = getTierConfig;
|
|
5
5
|
exports.isValidInstanceName = isValidInstanceName;
|
|
6
6
|
exports.generateToken = generateToken;
|
|
7
|
+
exports.generateInstanceName = generateInstanceName;
|
|
7
8
|
exports.generateInstanceId = generateInstanceId;
|
|
8
9
|
exports.formatBytes = formatBytes;
|
|
9
10
|
exports.formatCost = formatCost;
|
|
10
|
-
exports.getAwsEndpoint = getAwsEndpoint;
|
|
11
11
|
exports.sleep = sleep;
|
|
12
12
|
exports.retry = retry;
|
|
13
13
|
exports.maskSecret = maskSecret;
|
|
@@ -48,6 +48,34 @@ function generateToken(length = 32) {
|
|
|
48
48
|
}
|
|
49
49
|
return token;
|
|
50
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Generate an instance name from a full name.
|
|
53
|
+
* "Jane Smith" → "jane-s"
|
|
54
|
+
* "Jane" → "jane"
|
|
55
|
+
* "María José García" → "maria-jose-g"
|
|
56
|
+
*/
|
|
57
|
+
function generateInstanceName(fullName) {
|
|
58
|
+
// Normalize unicode (e.g., accented chars → base letters)
|
|
59
|
+
const normalized = fullName.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
|
|
60
|
+
// Lowercase and split into parts
|
|
61
|
+
const parts = normalized.toLowerCase().trim().split(/\s+/).filter(Boolean);
|
|
62
|
+
if (parts.length === 0)
|
|
63
|
+
return '';
|
|
64
|
+
if (parts.length === 1) {
|
|
65
|
+
const single = parts[0].replace(/[^a-z0-9-]/g, '');
|
|
66
|
+
if (!single || !/^[a-z]/.test(single))
|
|
67
|
+
return '';
|
|
68
|
+
return single.slice(0, 63);
|
|
69
|
+
}
|
|
70
|
+
// firstname-lastinitial format
|
|
71
|
+
const firstName = parts.slice(0, -1).join('-').replace(/[^a-z0-9-]/g, '');
|
|
72
|
+
const lastInitial = parts[parts.length - 1][0]?.replace(/[^a-z0-9]/g, '') || '';
|
|
73
|
+
const name = lastInitial ? `${firstName}-${lastInitial}` : firstName;
|
|
74
|
+
// Ensure starts with a letter and is valid
|
|
75
|
+
if (!name || !/^[a-z]/.test(name))
|
|
76
|
+
return '';
|
|
77
|
+
return name.slice(0, 63);
|
|
78
|
+
}
|
|
51
79
|
/**
|
|
52
80
|
* Generate a unique instance ID
|
|
53
81
|
*/
|
|
@@ -78,12 +106,6 @@ function formatCost(cost) {
|
|
|
78
106
|
maximumFractionDigits: 4,
|
|
79
107
|
}).format(cost);
|
|
80
108
|
}
|
|
81
|
-
/**
|
|
82
|
-
* Get AWS region endpoint
|
|
83
|
-
*/
|
|
84
|
-
function getAwsEndpoint(region) {
|
|
85
|
-
return `https://ec2.${region}.amazonaws.com`;
|
|
86
|
-
}
|
|
87
109
|
/**
|
|
88
110
|
* Sleep utility for async operations
|
|
89
111
|
*/
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";AAAA,mCAAmC;;AAQnC,sCAEC;AAKD,kDAEC;AAMD,sCAqBC;AAKD,gDAIC;AAKD,kCAMC;AAKD,gCAOC;AAKD,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";AAAA,mCAAmC;;AAQnC,sCAEC;AAKD,kDAEC;AAMD,sCAqBC;AAQD,oDAkBC;AAKD,gDAIC;AAKD,kCAMC;AAKD,gCAOC;AAKD,sBAEC;AAKD,sBAoBC;AAKD,gCAOC;AAhJD,iDAAmE;AAGnE;;GAEG;AACH,SAAgB,aAAa,CAAC,IAAkB;IAC9C,OAAO,2BAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,IAAY;IAC9C,OAAO,kCAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,SAAgB,aAAa,CAAC,SAAiB,EAAE;IAC/C,MAAM,KAAK,GAAG,gEAAgE,CAAC;IAC/E,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK;IACrC,mFAAmF;IACnF,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC,CAAC,MAAM;IAErE,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,OAAO,KAAK,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;QAC7B,gDAAgD;QAChD,MAAM,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QACrC,MAAM,YAAY,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,oCAAoC;QACrF,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QAErC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtE,4CAA4C;YAC5C,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,aAAa,EAAE,CAAC;gBACpC,KAAK,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAgB,oBAAoB,CAAC,QAAgB;IACnD,0DAA0D;IAC1D,MAAM,UAAU,GAAG,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAC7E,iCAAiC;IACjC,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,CAAC;QACjD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7B,CAAC;IACD,+BAA+B;IAC/B,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAC1E,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IAChF,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,2CAA2C;IAC3C,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB;IAChC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9C,OAAO,MAAM,SAAS,IAAI,MAAM,EAAE,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,KAAa;IACvC,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9B,MAAM,CAAC,GAAG,IAAI,CAAC;IACf,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,OAAO,GAAG,UAAU,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,IAAY;IACrC,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;QACpC,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,KAAK;QACf,qBAAqB,EAAE,CAAC;QACxB,qBAAqB,EAAE,CAAC;KACzB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAgB,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,KAAK,CACzB,EAAoB,EACpB,aAAqB,CAAC,EACtB,YAAoB,IAAI;IAExB,IAAI,SAA4B,CAAC;IAEjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QACtD,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAc,CAAC;YAC3B,IAAI,OAAO,GAAG,UAAU,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,KAAK,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC/C,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU,CAAC,KAAa,EAAE,eAAuB,CAAC;IAChE,IAAI,KAAK,CAAC,MAAM,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrC,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;IACvC,OAAO,GAAG,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;AAC1C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@launchpod/shared",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.3",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist/"
|
|
@@ -15,14 +15,16 @@
|
|
|
15
15
|
"default": "./dist/index.js"
|
|
16
16
|
}
|
|
17
17
|
},
|
|
18
|
-
"devDependencies": {
|
|
19
|
-
"@types/node": "^20.11.0",
|
|
20
|
-
"typescript": "^5.3.0"
|
|
21
|
-
},
|
|
22
18
|
"scripts": {
|
|
23
19
|
"build": "tsc",
|
|
24
20
|
"dev": "tsc --watch",
|
|
25
21
|
"clean": "rm -rf dist",
|
|
26
|
-
"type-check": "tsc --noEmit"
|
|
22
|
+
"type-check": "tsc --noEmit",
|
|
23
|
+
"test": "vitest --passWithNoTests"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@types/node": "^20.11.0",
|
|
27
|
+
"typescript": "^5.3.0",
|
|
28
|
+
"vitest": "^1.2.0"
|
|
27
29
|
}
|
|
28
|
-
}
|
|
30
|
+
}
|