@edgible-team/cli 1.2.11 → 1.2.15
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/commands/agent/install.d.ts +4 -0
- package/dist/commands/agent/install.d.ts.map +1 -1
- package/dist/commands/agent/install.js +155 -129
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +4 -0
- package/dist/commands/ai/helpers.d.ts.map +1 -1
- package/dist/commands/ai/helpers.js +10 -5
- package/dist/commands/debug.d.ts.map +1 -1
- package/dist/commands/debug.js +7 -3
- package/dist/commands/stack/deploy.d.ts +6 -0
- package/dist/commands/stack/deploy.d.ts.map +1 -0
- package/dist/commands/stack/deploy.js +58 -0
- package/dist/commands/stack/diff.d.ts +7 -0
- package/dist/commands/stack/diff.d.ts.map +1 -0
- package/dist/commands/stack/diff.js +64 -0
- package/dist/commands/stack/status.d.ts +9 -0
- package/dist/commands/stack/status.d.ts.map +1 -0
- package/dist/commands/stack/status.js +53 -0
- package/dist/commands/stack/teardown.d.ts +6 -0
- package/dist/commands/stack/teardown.d.ts.map +1 -0
- package/dist/commands/stack/teardown.js +104 -0
- package/dist/commands/stack/validate.d.ts +7 -0
- package/dist/commands/stack/validate.d.ts.map +1 -0
- package/dist/commands/stack/validate.js +42 -0
- package/dist/commands/stack.d.ts +10 -0
- package/dist/commands/stack.d.ts.map +1 -0
- package/dist/commands/stack.js +112 -0
- package/dist/index.js +2 -0
- package/dist/services/DependencyInstaller.d.ts +2 -9
- package/dist/services/DependencyInstaller.d.ts.map +1 -1
- package/dist/services/DependencyInstaller.js +5 -30
- package/dist/services/application/ApplicationService.d.ts +3 -0
- package/dist/services/application/ApplicationService.d.ts.map +1 -1
- package/dist/services/application/ApplicationService.js +3 -0
- package/dist/services/instances.d.ts +23 -0
- package/dist/services/instances.d.ts.map +1 -1
- package/dist/services/instances.js +46 -1
- package/dist/services/stack/DependencyGraphManager.d.ts +69 -0
- package/dist/services/stack/DependencyGraphManager.d.ts.map +1 -0
- package/dist/services/stack/DependencyGraphManager.js +204 -0
- package/dist/services/stack/DeviceResolver.d.ts +63 -0
- package/dist/services/stack/DeviceResolver.d.ts.map +1 -0
- package/dist/services/stack/DeviceResolver.js +147 -0
- package/dist/services/stack/GatewayResolver.d.ts +84 -0
- package/dist/services/stack/GatewayResolver.d.ts.map +1 -0
- package/dist/services/stack/GatewayResolver.js +179 -0
- package/dist/services/stack/StackParser.d.ts +38 -0
- package/dist/services/stack/StackParser.d.ts.map +1 -0
- package/dist/services/stack/StackParser.js +234 -0
- package/dist/services/stack/StackService.d.ts +76 -0
- package/dist/services/stack/StackService.d.ts.map +1 -0
- package/dist/services/stack/StackService.js +476 -0
- package/dist/types/ApiRequests.d.ts +8 -0
- package/dist/types/ApiRequests.d.ts.map +1 -1
- package/dist/types/models/ApplicationData.d.ts +22 -0
- package/dist/types/models/ApplicationData.d.ts.map +1 -1
- package/dist/types/models/OrganizationData.d.ts +2 -0
- package/dist/types/models/OrganizationData.d.ts.map +1 -1
- package/dist/types/stack.d.ts +191 -0
- package/dist/types/stack.d.ts.map +1 -0
- package/dist/types/stack.js +5 -0
- package/dist/types/validation/schemas.d.ts +41 -23
- package/dist/types/validation/schemas.d.ts.map +1 -1
- package/dist/types/validation/schemas.js +20 -0
- package/dist/utils/run-as-user.d.ts +24 -0
- package/dist/utils/run-as-user.d.ts.map +1 -0
- package/dist/utils/run-as-user.js +42 -0
- package/dist/utils/stack-errors.d.ts +103 -0
- package/dist/utils/stack-errors.d.ts.map +1 -0
- package/dist/utils/stack-errors.js +158 -0
- package/dist/validation/stack-schemas.d.ts +535 -0
- package/dist/validation/stack-schemas.d.ts.map +1 -0
- package/dist/validation/stack-schemas.js +178 -0
- package/package.json +4 -2
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Application Stack type definitions
|
|
3
|
+
* Defines the structure for declarative application deployments
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Main application stack structure
|
|
7
|
+
*/
|
|
8
|
+
export interface ApplicationStack {
|
|
9
|
+
apiVersion: string;
|
|
10
|
+
kind: 'ApplicationStack';
|
|
11
|
+
metadata: StackMetadata;
|
|
12
|
+
applications: StackApplication[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Stack metadata
|
|
16
|
+
*/
|
|
17
|
+
export interface StackMetadata {
|
|
18
|
+
name: string;
|
|
19
|
+
description?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Application definition within a stack
|
|
23
|
+
*/
|
|
24
|
+
export interface StackApplication {
|
|
25
|
+
name: string;
|
|
26
|
+
description?: string;
|
|
27
|
+
port: number;
|
|
28
|
+
protocol: 'http' | 'https' | 'tcp' | 'udp';
|
|
29
|
+
subtype: ApplicationSubtype;
|
|
30
|
+
deviceName: string;
|
|
31
|
+
published?: boolean;
|
|
32
|
+
hostnames?: string[];
|
|
33
|
+
dependsOn?: string[];
|
|
34
|
+
authModes?: AuthMode[];
|
|
35
|
+
allowedOrganizations?: string[];
|
|
36
|
+
composeFile?: string;
|
|
37
|
+
command?: string;
|
|
38
|
+
workingDir?: string;
|
|
39
|
+
environment?: Record<string, string>;
|
|
40
|
+
logFile?: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Supported application subtypes
|
|
44
|
+
*/
|
|
45
|
+
export type ApplicationSubtype = 'existing' | 'docker-compose' | 'managed-process' | 'docker' | 'podman' | 'qemu';
|
|
46
|
+
/**
|
|
47
|
+
* Authentication modes
|
|
48
|
+
*/
|
|
49
|
+
export type AuthMode = 'none' | 'org' | 'api-key';
|
|
50
|
+
/**
|
|
51
|
+
* Stack with resolved device and gateway IDs
|
|
52
|
+
*/
|
|
53
|
+
export interface ResolvedStack extends ApplicationStack {
|
|
54
|
+
resolved: {
|
|
55
|
+
devices: Map<string, string>;
|
|
56
|
+
gateways: Map<string, string[]>;
|
|
57
|
+
applications: Map<string, string>;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Resolved application ready for deployment
|
|
62
|
+
*/
|
|
63
|
+
export interface ResolvedApplication extends StackApplication {
|
|
64
|
+
deviceId: string;
|
|
65
|
+
gatewayIds?: string[];
|
|
66
|
+
existingApplicationId?: string;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Stack validation result
|
|
70
|
+
*/
|
|
71
|
+
export interface StackValidationResult {
|
|
72
|
+
valid: boolean;
|
|
73
|
+
errors: StackValidationError[];
|
|
74
|
+
warnings: StackValidationWarning[];
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Validation error
|
|
78
|
+
*/
|
|
79
|
+
export interface StackValidationError {
|
|
80
|
+
path: string;
|
|
81
|
+
message: string;
|
|
82
|
+
line?: number;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Validation warning
|
|
86
|
+
*/
|
|
87
|
+
export interface StackValidationWarning {
|
|
88
|
+
path: string;
|
|
89
|
+
message: string;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Options for deploy command
|
|
93
|
+
*/
|
|
94
|
+
export interface DeployOptions {
|
|
95
|
+
file: string;
|
|
96
|
+
app?: string;
|
|
97
|
+
dryRun?: boolean;
|
|
98
|
+
skipDependencies?: boolean;
|
|
99
|
+
force?: boolean;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Options for teardown command
|
|
103
|
+
*/
|
|
104
|
+
export interface TeardownOptions {
|
|
105
|
+
file: string;
|
|
106
|
+
app?: string;
|
|
107
|
+
force?: boolean;
|
|
108
|
+
keepDependencies?: boolean;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Deploy operation result
|
|
112
|
+
*/
|
|
113
|
+
export interface DeployResult {
|
|
114
|
+
success: boolean;
|
|
115
|
+
deployed: DeployedApplication[];
|
|
116
|
+
failed: FailedApplication[];
|
|
117
|
+
skipped: string[];
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Successfully deployed application
|
|
121
|
+
*/
|
|
122
|
+
export interface DeployedApplication {
|
|
123
|
+
name: string;
|
|
124
|
+
applicationId: string;
|
|
125
|
+
urls?: string[];
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Failed application deployment
|
|
129
|
+
*/
|
|
130
|
+
export interface FailedApplication {
|
|
131
|
+
name: string;
|
|
132
|
+
error: string;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Teardown operation result
|
|
136
|
+
*/
|
|
137
|
+
export interface TeardownResult {
|
|
138
|
+
success: boolean;
|
|
139
|
+
removed: string[];
|
|
140
|
+
failed: FailedApplication[];
|
|
141
|
+
skipped: string[];
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Stack status information
|
|
145
|
+
*/
|
|
146
|
+
export interface StackStatus {
|
|
147
|
+
stackName: string;
|
|
148
|
+
applications: ApplicationStatus[];
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Individual application status
|
|
152
|
+
*/
|
|
153
|
+
export interface ApplicationStatus {
|
|
154
|
+
name: string;
|
|
155
|
+
status: 'deployed' | 'not-deployed' | 'error';
|
|
156
|
+
applicationId?: string;
|
|
157
|
+
deviceName: string;
|
|
158
|
+
deviceId?: string;
|
|
159
|
+
published: boolean;
|
|
160
|
+
urls?: string[];
|
|
161
|
+
lastUpdated?: Date;
|
|
162
|
+
error?: string;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Stack diff result
|
|
166
|
+
*/
|
|
167
|
+
export interface StackDiff {
|
|
168
|
+
toCreate: StackApplication[];
|
|
169
|
+
toUpdate: ApplicationDiff[];
|
|
170
|
+
toDelete: ApplicationStatus[];
|
|
171
|
+
unchanged: string[];
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Application diff details
|
|
175
|
+
*/
|
|
176
|
+
export interface ApplicationDiff {
|
|
177
|
+
name: string;
|
|
178
|
+
changes: {
|
|
179
|
+
field: string;
|
|
180
|
+
oldValue: any;
|
|
181
|
+
newValue: any;
|
|
182
|
+
}[];
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Dependency graph node
|
|
186
|
+
*/
|
|
187
|
+
export interface DependencyNode {
|
|
188
|
+
name: string;
|
|
189
|
+
dependencies: string[];
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=stack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack.d.ts","sourceRoot":"","sources":["../../src/types/stack.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,26 +4,32 @@ export declare const CreateOrganizationSchema: z.ZodObject<{
|
|
|
4
4
|
rootUserEmail: z.ZodString;
|
|
5
5
|
description: z.ZodOptional<z.ZodString>;
|
|
6
6
|
billingOrganizationId: z.ZodOptional<z.ZodString>;
|
|
7
|
+
urlAlias: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
7
8
|
}, "strip", z.ZodTypeAny, {
|
|
8
9
|
name: string;
|
|
9
10
|
rootUserEmail: string;
|
|
10
11
|
description?: string | undefined;
|
|
11
12
|
billingOrganizationId?: string | undefined;
|
|
13
|
+
urlAlias?: string | undefined;
|
|
12
14
|
}, {
|
|
13
15
|
name: string;
|
|
14
16
|
rootUserEmail: string;
|
|
15
17
|
description?: string | undefined;
|
|
16
18
|
billingOrganizationId?: string | undefined;
|
|
19
|
+
urlAlias?: string | undefined;
|
|
17
20
|
}>;
|
|
18
21
|
export declare const UpdateOrganizationSchema: z.ZodObject<{
|
|
19
22
|
name: z.ZodOptional<z.ZodString>;
|
|
20
23
|
description: z.ZodOptional<z.ZodString>;
|
|
24
|
+
urlAlias: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
|
|
21
25
|
}, "strip", z.ZodTypeAny, {
|
|
22
26
|
name?: string | undefined;
|
|
23
27
|
description?: string | undefined;
|
|
28
|
+
urlAlias?: string | undefined;
|
|
24
29
|
}, {
|
|
25
30
|
name?: string | undefined;
|
|
26
31
|
description?: string | undefined;
|
|
32
|
+
urlAlias?: string | undefined;
|
|
27
33
|
}>;
|
|
28
34
|
export declare const GetOrganizationSchema: z.ZodObject<{
|
|
29
35
|
organizationId: z.ZodString;
|
|
@@ -93,9 +99,9 @@ export declare const CreateApplicationSchema: z.ZodObject<{
|
|
|
93
99
|
deleteVolumesOnDeletion: boolean;
|
|
94
100
|
command?: string | undefined;
|
|
95
101
|
logFile?: string | undefined;
|
|
96
|
-
workingDirectory?: string | undefined;
|
|
97
|
-
env?: Record<string, string> | undefined;
|
|
98
102
|
dockerComposePath?: string | undefined;
|
|
103
|
+
env?: Record<string, string> | undefined;
|
|
104
|
+
workingDirectory?: string | undefined;
|
|
99
105
|
healthCheckPath?: string | undefined;
|
|
100
106
|
systemdService?: string | undefined;
|
|
101
107
|
}, {
|
|
@@ -103,9 +109,9 @@ export declare const CreateApplicationSchema: z.ZodObject<{
|
|
|
103
109
|
protocol: "http" | "https" | "tcp" | "udp";
|
|
104
110
|
command?: string | undefined;
|
|
105
111
|
logFile?: string | undefined;
|
|
106
|
-
workingDirectory?: string | undefined;
|
|
107
|
-
env?: Record<string, string> | undefined;
|
|
108
112
|
dockerComposePath?: string | undefined;
|
|
113
|
+
env?: Record<string, string> | undefined;
|
|
114
|
+
workingDirectory?: string | undefined;
|
|
109
115
|
deleteVolumesOnDeletion?: boolean | undefined;
|
|
110
116
|
healthCheckPath?: string | undefined;
|
|
111
117
|
systemdService?: string | undefined;
|
|
@@ -119,6 +125,8 @@ export declare const CreateApplicationSchema: z.ZodObject<{
|
|
|
119
125
|
requireOrgAuth: z.ZodOptional<z.ZodBoolean>;
|
|
120
126
|
allowedOrganizations: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
121
127
|
customHeaders: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
128
|
+
targetState: z.ZodDefault<z.ZodEnum<["running", "suspended"]>>;
|
|
129
|
+
dependsOnApplicationIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
122
130
|
}, "strip", z.ZodTypeAny, {
|
|
123
131
|
organizationId: string;
|
|
124
132
|
name: string;
|
|
@@ -128,23 +136,25 @@ export declare const CreateApplicationSchema: z.ZodObject<{
|
|
|
128
136
|
deleteVolumesOnDeletion: boolean;
|
|
129
137
|
command?: string | undefined;
|
|
130
138
|
logFile?: string | undefined;
|
|
131
|
-
workingDirectory?: string | undefined;
|
|
132
|
-
env?: Record<string, string> | undefined;
|
|
133
139
|
dockerComposePath?: string | undefined;
|
|
140
|
+
env?: Record<string, string> | undefined;
|
|
141
|
+
workingDirectory?: string | undefined;
|
|
134
142
|
healthCheckPath?: string | undefined;
|
|
135
143
|
systemdService?: string | undefined;
|
|
136
144
|
};
|
|
137
145
|
subtype: "systemd" | "local-preexisting" | "managed-docker" | "docker-compose" | "managed-process";
|
|
138
146
|
environment: "development" | "staging" | "prod";
|
|
139
147
|
deviceIds: string[];
|
|
148
|
+
targetState: "running" | "suspended";
|
|
140
149
|
description?: string | undefined;
|
|
141
|
-
gatewayIds?: string[] | undefined;
|
|
142
150
|
hostnames?: string[] | undefined;
|
|
143
|
-
useManagedGateway?: boolean | undefined;
|
|
144
151
|
authModes?: ("none" | "org" | "api-key")[] | undefined;
|
|
145
|
-
requireOrgAuth?: boolean | undefined;
|
|
146
152
|
allowedOrganizations?: string[] | undefined;
|
|
153
|
+
gatewayIds?: string[] | undefined;
|
|
154
|
+
useManagedGateway?: boolean | undefined;
|
|
155
|
+
requireOrgAuth?: boolean | undefined;
|
|
147
156
|
customHeaders?: Record<string, string> | undefined;
|
|
157
|
+
dependsOnApplicationIds?: string[] | undefined;
|
|
148
158
|
}, {
|
|
149
159
|
organizationId: string;
|
|
150
160
|
name: string;
|
|
@@ -153,9 +163,9 @@ export declare const CreateApplicationSchema: z.ZodObject<{
|
|
|
153
163
|
protocol: "http" | "https" | "tcp" | "udp";
|
|
154
164
|
command?: string | undefined;
|
|
155
165
|
logFile?: string | undefined;
|
|
156
|
-
workingDirectory?: string | undefined;
|
|
157
|
-
env?: Record<string, string> | undefined;
|
|
158
166
|
dockerComposePath?: string | undefined;
|
|
167
|
+
env?: Record<string, string> | undefined;
|
|
168
|
+
workingDirectory?: string | undefined;
|
|
159
169
|
deleteVolumesOnDeletion?: boolean | undefined;
|
|
160
170
|
healthCheckPath?: string | undefined;
|
|
161
171
|
systemdService?: string | undefined;
|
|
@@ -163,14 +173,16 @@ export declare const CreateApplicationSchema: z.ZodObject<{
|
|
|
163
173
|
subtype: "systemd" | "local-preexisting" | "managed-docker" | "docker-compose" | "managed-process";
|
|
164
174
|
deviceIds: string[];
|
|
165
175
|
description?: string | undefined;
|
|
166
|
-
gatewayIds?: string[] | undefined;
|
|
167
|
-
environment?: "development" | "staging" | "prod" | undefined;
|
|
168
176
|
hostnames?: string[] | undefined;
|
|
169
|
-
useManagedGateway?: boolean | undefined;
|
|
170
177
|
authModes?: ("none" | "org" | "api-key")[] | undefined;
|
|
171
|
-
requireOrgAuth?: boolean | undefined;
|
|
172
178
|
allowedOrganizations?: string[] | undefined;
|
|
179
|
+
environment?: "development" | "staging" | "prod" | undefined;
|
|
180
|
+
gatewayIds?: string[] | undefined;
|
|
181
|
+
useManagedGateway?: boolean | undefined;
|
|
182
|
+
requireOrgAuth?: boolean | undefined;
|
|
173
183
|
customHeaders?: Record<string, string> | undefined;
|
|
184
|
+
targetState?: "running" | "suspended" | undefined;
|
|
185
|
+
dependsOnApplicationIds?: string[] | undefined;
|
|
174
186
|
}>;
|
|
175
187
|
export declare const UpdateApplicationSchema: z.ZodObject<{
|
|
176
188
|
name: z.ZodOptional<z.ZodString>;
|
|
@@ -180,21 +192,27 @@ export declare const UpdateApplicationSchema: z.ZodObject<{
|
|
|
180
192
|
authModes: z.ZodOptional<z.ZodArray<z.ZodEnum<["none", "org", "api-key"]>, "many">>;
|
|
181
193
|
allowedOrganizations: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
182
194
|
customHeaders: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
195
|
+
targetState: z.ZodOptional<z.ZodEnum<["running", "suspended"]>>;
|
|
196
|
+
dependsOnApplicationIds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
183
197
|
}, "strip", z.ZodTypeAny, {
|
|
184
198
|
name?: string | undefined;
|
|
185
199
|
description?: string | undefined;
|
|
186
|
-
environment?: "development" | "staging" | "prod" | undefined;
|
|
187
200
|
authModes?: ("none" | "org" | "api-key")[] | undefined;
|
|
188
201
|
allowedOrganizations?: string[] | undefined;
|
|
202
|
+
environment?: "development" | "staging" | "prod" | undefined;
|
|
189
203
|
customHeaders?: Record<string, string> | undefined;
|
|
204
|
+
targetState?: "running" | "suspended" | undefined;
|
|
205
|
+
dependsOnApplicationIds?: string[] | undefined;
|
|
190
206
|
allowedSourceIPs?: string[] | undefined;
|
|
191
207
|
}, {
|
|
192
208
|
name?: string | undefined;
|
|
193
209
|
description?: string | undefined;
|
|
194
|
-
environment?: "development" | "staging" | "prod" | undefined;
|
|
195
210
|
authModes?: ("none" | "org" | "api-key")[] | undefined;
|
|
196
211
|
allowedOrganizations?: string[] | undefined;
|
|
212
|
+
environment?: "development" | "staging" | "prod" | undefined;
|
|
197
213
|
customHeaders?: Record<string, string> | undefined;
|
|
214
|
+
targetState?: "running" | "suspended" | undefined;
|
|
215
|
+
dependsOnApplicationIds?: string[] | undefined;
|
|
198
216
|
allowedSourceIPs?: string[] | undefined;
|
|
199
217
|
}>;
|
|
200
218
|
export declare const GetApplicationSchema: z.ZodObject<{
|
|
@@ -286,7 +304,7 @@ export declare const UpdateDeviceSchema: z.ZodObject<{
|
|
|
286
304
|
ipAddress: z.ZodOptional<z.ZodString>;
|
|
287
305
|
}, "strip", z.ZodTypeAny, {
|
|
288
306
|
name?: string | undefined;
|
|
289
|
-
status?: "
|
|
307
|
+
status?: "suspended" | "active" | "inactive" | "pending" | undefined;
|
|
290
308
|
type?: "gateway" | "laptop" | "desktop" | "mobile" | "tablet" | "server" | undefined;
|
|
291
309
|
description?: string | undefined;
|
|
292
310
|
os?: string | undefined;
|
|
@@ -296,7 +314,7 @@ export declare const UpdateDeviceSchema: z.ZodObject<{
|
|
|
296
314
|
isTrusted?: boolean | undefined;
|
|
297
315
|
}, {
|
|
298
316
|
name?: string | undefined;
|
|
299
|
-
status?: "
|
|
317
|
+
status?: "suspended" | "active" | "inactive" | "pending" | undefined;
|
|
300
318
|
type?: "gateway" | "laptop" | "desktop" | "mobile" | "tablet" | "server" | undefined;
|
|
301
319
|
description?: string | undefined;
|
|
302
320
|
os?: string | undefined;
|
|
@@ -497,7 +515,7 @@ export declare const CreateResourceSchema: z.ZodObject<{
|
|
|
497
515
|
name: string;
|
|
498
516
|
resourceType: string;
|
|
499
517
|
organizationId?: string | undefined;
|
|
500
|
-
status?: "
|
|
518
|
+
status?: "running" | "pending" | "stopped" | "error" | undefined;
|
|
501
519
|
type?: string | undefined;
|
|
502
520
|
description?: string | undefined;
|
|
503
521
|
region?: string | undefined;
|
|
@@ -509,7 +527,7 @@ export declare const CreateResourceSchema: z.ZodObject<{
|
|
|
509
527
|
name: string;
|
|
510
528
|
resourceType: string;
|
|
511
529
|
organizationId?: string | undefined;
|
|
512
|
-
status?: "
|
|
530
|
+
status?: "running" | "pending" | "stopped" | "error" | undefined;
|
|
513
531
|
type?: string | undefined;
|
|
514
532
|
description?: string | undefined;
|
|
515
533
|
region?: string | undefined;
|
|
@@ -527,14 +545,14 @@ export declare const UpdateResourceSchema: z.ZodObject<{
|
|
|
527
545
|
region: z.ZodOptional<z.ZodString>;
|
|
528
546
|
}, "strip", z.ZodTypeAny, {
|
|
529
547
|
name?: string | undefined;
|
|
530
|
-
status?: "
|
|
548
|
+
status?: "running" | "pending" | "stopped" | "error" | undefined;
|
|
531
549
|
description?: string | undefined;
|
|
532
550
|
region?: string | undefined;
|
|
533
551
|
tags?: string[] | undefined;
|
|
534
552
|
cost?: number | undefined;
|
|
535
553
|
}, {
|
|
536
554
|
name?: string | undefined;
|
|
537
|
-
status?: "
|
|
555
|
+
status?: "running" | "pending" | "stopped" | "error" | undefined;
|
|
538
556
|
description?: string | undefined;
|
|
539
557
|
region?: string | undefined;
|
|
540
558
|
tags?: string[] | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/types/validation/schemas.ts"],"names":[],"mappings":"AAGE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/types/validation/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,16 +4,32 @@
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
5
|
exports.CreateLifecycleEventSchema = exports.PostDevicePoolTrafficSchema = exports.CheckApplicationReachabilitySchema = exports.GetResourceSchema = exports.UpdateResourceSchema = exports.CreateResourceSchema = exports.CreateDeviceWithOrphanedOrganizationSchema = exports.GetChallengeSessionSchema = exports.ForceChangePasswordSchema = exports.RefreshTokenSchema = exports.AuthenticateSchema = exports.LinkOrganizationSchema = exports.UpdateResourceLimitsSchema = exports.CreateBillingOrganizationSchema = exports.AdoptOrganizationSchema = exports.CancelInviteSchema = exports.DeclineInviteSchema = exports.AcceptInviteSchema = exports.CreateOrganizationInviteSchema = exports.GetDeviceSchema = exports.UpdateDeviceSchema = exports.CreateDeviceSchema = exports.RefreshCertificatePathSchema = exports.GetCertificatePathSchema = exports.GetCertificatesPathSchema = exports.GetApplicationSchema = exports.UpdateApplicationSchema = exports.CreateApplicationSchema = exports.GetUserSchema = exports.UpdateUserSchema = exports.CreateUserSchema = exports.GetOrganizationSchema = exports.UpdateOrganizationSchema = exports.CreateOrganizationSchema = void 0;
|
|
6
6
|
const zod_1 = require("zod");
|
|
7
|
+
// Reserved URL aliases that cannot be used
|
|
8
|
+
const RESERVED_ALIASES = [
|
|
9
|
+
'api', 'www', 'admin', 'app', 'apps', 'gateway', 'gateways',
|
|
10
|
+
'device', 'devices', 'user', 'users', 'auth', 'login', 'signup',
|
|
11
|
+
'dashboard', 'console', 'portal', 'system', 'internal', 'staging',
|
|
12
|
+
'prod', 'production', 'dev', 'development', 'test', 'testing',
|
|
13
|
+
'v1', 'v2', 'v3', 'static', 'cdn', 'assets', 'public'
|
|
14
|
+
];
|
|
15
|
+
// URL alias validation: lowercase alphanumeric + hyphens, 3-30 chars
|
|
16
|
+
const UrlAliasSchema = zod_1.z.string()
|
|
17
|
+
.min(3, 'URL alias must be at least 3 characters')
|
|
18
|
+
.max(30, 'URL alias must be 30 characters or less')
|
|
19
|
+
.regex(/^[a-z0-9][a-z0-9-]{1,28}[a-z0-9]$/, 'URL alias must be lowercase alphanumeric with hyphens, cannot start/end with hyphen')
|
|
20
|
+
.refine((val) => !RESERVED_ALIASES.includes(val), 'This alias is reserved and cannot be used');
|
|
7
21
|
// Organization validation schemas
|
|
8
22
|
exports.CreateOrganizationSchema = zod_1.z.object({
|
|
9
23
|
name: zod_1.z.string().min(1, 'Name is required').max(100, 'Name must be 100 characters or less'),
|
|
10
24
|
rootUserEmail: zod_1.z.string().email('Invalid email format'),
|
|
11
25
|
description: zod_1.z.string().max(500, 'Description must be 500 characters or less').optional(),
|
|
12
26
|
billingOrganizationId: zod_1.z.string().min(1, 'Billing organization ID must be provided if specified').optional(),
|
|
27
|
+
urlAlias: UrlAliasSchema.optional(),
|
|
13
28
|
});
|
|
14
29
|
exports.UpdateOrganizationSchema = zod_1.z.object({
|
|
15
30
|
name: zod_1.z.string().min(1).max(100).optional(),
|
|
16
31
|
description: zod_1.z.string().max(500).optional(),
|
|
32
|
+
urlAlias: UrlAliasSchema.optional(),
|
|
17
33
|
});
|
|
18
34
|
exports.GetOrganizationSchema = zod_1.z.object({
|
|
19
35
|
organizationId: zod_1.z.string().min(1, 'Organization ID is required'),
|
|
@@ -74,6 +90,8 @@ exports.CreateApplicationSchema = zod_1.z.object({
|
|
|
74
90
|
requireOrgAuth: zod_1.z.boolean().optional(), // deprecated, use authModes
|
|
75
91
|
allowedOrganizations: zod_1.z.array(zod_1.z.string()).optional(),
|
|
76
92
|
customHeaders: zod_1.z.record(zod_1.z.string(), zod_1.z.string()).optional(),
|
|
93
|
+
targetState: zod_1.z.enum(['running', 'suspended']).default('running'),
|
|
94
|
+
dependsOnApplicationIds: zod_1.z.array(zod_1.z.string().min(1)).optional(),
|
|
77
95
|
});
|
|
78
96
|
// IP address or CIDR block validation
|
|
79
97
|
const IPOrCIDRSchema = zod_1.z.string().regex(/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?:\/(?:[0-9]|[1-2][0-9]|3[0-2]))?$/, 'Invalid IP address or CIDR block (e.g., 192.168.1.0/24 or 10.0.0.1)');
|
|
@@ -85,6 +103,8 @@ exports.UpdateApplicationSchema = zod_1.z.object({
|
|
|
85
103
|
authModes: zod_1.z.array(zod_1.z.enum(['none', 'org', 'api-key'])).optional(),
|
|
86
104
|
allowedOrganizations: zod_1.z.array(zod_1.z.string()).optional(),
|
|
87
105
|
customHeaders: zod_1.z.record(zod_1.z.string(), zod_1.z.string()).optional(),
|
|
106
|
+
targetState: zod_1.z.enum(['running', 'suspended']).optional(),
|
|
107
|
+
dependsOnApplicationIds: zod_1.z.array(zod_1.z.string().min(1)).optional(),
|
|
88
108
|
});
|
|
89
109
|
exports.GetApplicationSchema = zod_1.z.object({
|
|
90
110
|
applicationId: zod_1.z.string().min(1, 'Application ID is required'),
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ExecSyncOptions } from 'child_process';
|
|
2
|
+
/**
|
|
3
|
+
* Utilities to run commands as the real (non-root) user when the process was
|
|
4
|
+
* started with sudo. Ensures tools like Homebrew install under the user's
|
|
5
|
+
* account rather than root.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Get the original user when running under sudo.
|
|
9
|
+
* @returns SUDO_USER if process is root via sudo, otherwise undefined
|
|
10
|
+
*/
|
|
11
|
+
export declare function getSudoUser(): string | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* Execute a command as the original user when executed via sudo.
|
|
14
|
+
* Uses: sudo -u ${SUDO_USER} HOME=$(eval echo ~${SUDO_USER}) <command>
|
|
15
|
+
*
|
|
16
|
+
* Important for Homebrew on macOS: brew refuses to run as root and installs
|
|
17
|
+
* should go to the user's prefix (e.g. /opt/homebrew or ~/.local) not root's.
|
|
18
|
+
*
|
|
19
|
+
* @param command The command to execute
|
|
20
|
+
* @param options Optional execSync options (e.g. stdio: 'inherit' for interactive)
|
|
21
|
+
* @returns Result of execSync
|
|
22
|
+
*/
|
|
23
|
+
export declare function execAsRealUser(command: string, options?: ExecSyncOptions): Buffer | string;
|
|
24
|
+
//# sourceMappingURL=run-as-user.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-as-user.d.ts","sourceRoot":"","sources":["../../src/utils/run-as-user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,eAAe,EAAE,MAAM,eAAe,CAAC;AAE1D;;;;GAIG;AAEH;;;GAGG;AACH,wBAAgB,WAAW,IAAI,MAAM,GAAG,SAAS,CAShD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,MAAM,GAAG,MAAM,CAS1F"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getSudoUser = getSudoUser;
|
|
4
|
+
exports.execAsRealUser = execAsRealUser;
|
|
5
|
+
const child_process_1 = require("child_process");
|
|
6
|
+
/**
|
|
7
|
+
* Utilities to run commands as the real (non-root) user when the process was
|
|
8
|
+
* started with sudo. Ensures tools like Homebrew install under the user's
|
|
9
|
+
* account rather than root.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Get the original user when running under sudo.
|
|
13
|
+
* @returns SUDO_USER if process is root via sudo, otherwise undefined
|
|
14
|
+
*/
|
|
15
|
+
function getSudoUser() {
|
|
16
|
+
const uid = process.getuid ? process.getuid() : undefined;
|
|
17
|
+
const sudoUser = process.env['SUDO_USER'];
|
|
18
|
+
if (uid === 0 && sudoUser) {
|
|
19
|
+
return sudoUser;
|
|
20
|
+
}
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Execute a command as the original user when executed via sudo.
|
|
25
|
+
* Uses: sudo -u ${SUDO_USER} HOME=$(eval echo ~${SUDO_USER}) <command>
|
|
26
|
+
*
|
|
27
|
+
* Important for Homebrew on macOS: brew refuses to run as root and installs
|
|
28
|
+
* should go to the user's prefix (e.g. /opt/homebrew or ~/.local) not root's.
|
|
29
|
+
*
|
|
30
|
+
* @param command The command to execute
|
|
31
|
+
* @param options Optional execSync options (e.g. stdio: 'inherit' for interactive)
|
|
32
|
+
* @returns Result of execSync
|
|
33
|
+
*/
|
|
34
|
+
function execAsRealUser(command, options) {
|
|
35
|
+
const sudoUser = getSudoUser();
|
|
36
|
+
if (sudoUser) {
|
|
37
|
+
const wrappedCommand = `sudo -u ${sudoUser} HOME=$(eval echo ~${sudoUser}) ${command}`;
|
|
38
|
+
return (0, child_process_1.execSync)(wrappedCommand, options);
|
|
39
|
+
}
|
|
40
|
+
return (0, child_process_1.execSync)(command, options);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=run-as-user.js.map
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stack-specific error classes
|
|
3
|
+
* Provides detailed error information for stack operations
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Base error for all stack-related errors
|
|
7
|
+
*/
|
|
8
|
+
export declare class StackError extends Error {
|
|
9
|
+
constructor(message: string);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Error parsing stack YAML file
|
|
13
|
+
*/
|
|
14
|
+
export declare class StackParseError extends StackError {
|
|
15
|
+
filePath?: string | undefined;
|
|
16
|
+
line?: number | undefined;
|
|
17
|
+
constructor(message: string, filePath?: string | undefined, line?: number | undefined);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Error validating stack schema
|
|
21
|
+
*/
|
|
22
|
+
export declare class StackValidationError extends StackError {
|
|
23
|
+
errors: Array<{
|
|
24
|
+
path: string;
|
|
25
|
+
message: string;
|
|
26
|
+
line?: number;
|
|
27
|
+
}>;
|
|
28
|
+
constructor(message: string, errors: Array<{
|
|
29
|
+
path: string;
|
|
30
|
+
message: string;
|
|
31
|
+
line?: number;
|
|
32
|
+
}>);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Error when device not found
|
|
36
|
+
*/
|
|
37
|
+
export declare class DeviceNotFoundError extends StackError {
|
|
38
|
+
deviceName: string;
|
|
39
|
+
constructor(deviceName: string);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Error when multiple devices match the same name
|
|
43
|
+
*/
|
|
44
|
+
export declare class DeviceAmbiguousError extends StackError {
|
|
45
|
+
deviceName: string;
|
|
46
|
+
matchingDeviceIds: string[];
|
|
47
|
+
constructor(deviceName: string, matchingDeviceIds: string[]);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Error when circular dependency detected
|
|
51
|
+
*/
|
|
52
|
+
export declare class CircularDependencyError extends StackError {
|
|
53
|
+
cycle: string[];
|
|
54
|
+
constructor(cycle: string[]);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Error deploying an application
|
|
58
|
+
*/
|
|
59
|
+
export declare class ApplicationDeploymentError extends StackError {
|
|
60
|
+
appName: string;
|
|
61
|
+
reason: string;
|
|
62
|
+
originalError?: Error | undefined;
|
|
63
|
+
constructor(appName: string, reason: string, originalError?: Error | undefined);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Error when dependency deployment fails
|
|
67
|
+
*/
|
|
68
|
+
export declare class DependencyDeploymentError extends StackError {
|
|
69
|
+
appName: string;
|
|
70
|
+
dependencyName: string;
|
|
71
|
+
reason: string;
|
|
72
|
+
constructor(appName: string, dependencyName: string, reason: string);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Error when stack file not found
|
|
76
|
+
*/
|
|
77
|
+
export declare class StackFileNotFoundError extends StackError {
|
|
78
|
+
filePath: string;
|
|
79
|
+
constructor(filePath: string);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Error when required environment variable is missing
|
|
83
|
+
*/
|
|
84
|
+
export declare class EnvironmentVariableError extends StackError {
|
|
85
|
+
variableName: string;
|
|
86
|
+
constructor(variableName: string);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Error when application not found in deployed state
|
|
90
|
+
*/
|
|
91
|
+
export declare class ApplicationNotFoundError extends StackError {
|
|
92
|
+
appName: string;
|
|
93
|
+
constructor(appName: string);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Error when gateway provisioning fails
|
|
97
|
+
*/
|
|
98
|
+
export declare class GatewayProvisioningError extends StackError {
|
|
99
|
+
appName: string;
|
|
100
|
+
reason: string;
|
|
101
|
+
constructor(appName: string, reason: string);
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=stack-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack-errors.d.ts","sourceRoot":"","sources":["../../src/utils/stack-errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,qBAAa,UAAW,SAAQ,KAAK;gBACvB,OAAO,EAAE,MAAM;CAK5B;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,UAAU;IAGpC,QAAQ,CAAC,EAAE,MAAM;IACjB,IAAI,CAAC,EAAE,MAAM;gBAFpB,OAAO,EAAE,MAAM,EACR,QAAQ,CAAC,EAAE,MAAM,YAAA,EACjB,IAAI,CAAC,EAAE,MAAM,YAAA;CAMvB;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,UAAU;IAGzC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;gBADtE,OAAO,EAAE,MAAM,EACR,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAMzE;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,UAAU;IAC9B,UAAU,EAAE,MAAM;gBAAlB,UAAU,EAAE,MAAM;CAKtC;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,UAAU;IAEzC,UAAU,EAAE,MAAM;IAClB,iBAAiB,EAAE,MAAM,EAAE;gBAD3B,UAAU,EAAE,MAAM,EAClB,iBAAiB,EAAE,MAAM,EAAE;CAQrC;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,UAAU;IAClC,KAAK,EAAE,MAAM,EAAE;gBAAf,KAAK,EAAE,MAAM,EAAE;CAKnC;AAED;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,UAAU;IAE/C,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,MAAM;IACd,aAAa,CAAC,EAAE,KAAK;gBAFrB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,aAAa,CAAC,EAAE,KAAK,YAAA;CAM/B;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,UAAU;IAE9C,OAAO,EAAE,MAAM;IACf,cAAc,EAAE,MAAM;IACtB,MAAM,EAAE,MAAM;gBAFd,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM;CAQxB;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,UAAU;IACjC,QAAQ,EAAE,MAAM;gBAAhB,QAAQ,EAAE,MAAM;CAKpC;AAED;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,UAAU;IACnC,YAAY,EAAE,MAAM;gBAApB,YAAY,EAAE,MAAM;CAKxC;AAED;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,UAAU;IACnC,OAAO,EAAE,MAAM;gBAAf,OAAO,EAAE,MAAM;CAKnC;AAED;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,UAAU;IAE7C,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,MAAM;gBADd,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM;CAMxB"}
|