@uluops/ops-sdk 1.8.3 → 1.8.5
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/CHANGELOG.md +45 -1
- package/README.md +70 -49
- package/dist/client.d.ts +10 -45
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +16 -11
- package/dist/client.js.map +1 -1
- package/dist/config/constants.d.ts +2 -2
- package/dist/config/constants.js +1 -1
- package/dist/config/validators.d.ts +156 -177
- package/dist/config/validators.d.ts.map +1 -1
- package/dist/config/validators.js +146 -4
- package/dist/config/validators.js.map +1 -1
- package/dist/http/http-client.d.ts +17 -2
- package/dist/http/http-client.d.ts.map +1 -1
- package/dist/http/http-client.js +6 -1
- package/dist/http/http-client.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/operations/analytics.d.ts +86 -29
- package/dist/operations/analytics.d.ts.map +1 -1
- package/dist/operations/analytics.js +89 -32
- package/dist/operations/analytics.js.map +1 -1
- package/dist/operations/auth.d.ts +46 -8
- package/dist/operations/auth.d.ts.map +1 -1
- package/dist/operations/auth.js +46 -8
- package/dist/operations/auth.js.map +1 -1
- package/dist/operations/issues.d.ts +86 -16
- package/dist/operations/issues.d.ts.map +1 -1
- package/dist/operations/issues.js +86 -16
- package/dist/operations/issues.js.map +1 -1
- package/dist/operations/projects.d.ts +64 -10
- package/dist/operations/projects.d.ts.map +1 -1
- package/dist/operations/projects.js +71 -20
- package/dist/operations/projects.js.map +1 -1
- package/dist/operations/runs.d.ts +103 -19
- package/dist/operations/runs.d.ts.map +1 -1
- package/dist/operations/runs.js +107 -20
- package/dist/operations/runs.js.map +1 -1
- package/dist/types/analytics.d.ts +13 -21
- package/dist/types/analytics.d.ts.map +1 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -2
- package/dist/types/index.js.map +1 -1
- package/dist/types/projects.d.ts +0 -6
- package/dist/types/projects.d.ts.map +1 -1
- package/dist/types/response-schemas.d.ts +8 -38
- package/dist/types/response-schemas.d.ts.map +1 -1
- package/dist/types/response-schemas.js +9 -7
- package/dist/types/response-schemas.js.map +1 -1
- package/dist/types/runs.d.ts +0 -6
- package/dist/types/runs.d.ts.map +1 -1
- package/dist/types/schemas.d.ts +3 -24
- package/dist/types/schemas.d.ts.map +1 -1
- package/dist/types/schemas.js +5 -7
- package/dist/types/schemas.js.map +1 -1
- package/package.json +4 -4
- package/dist/operations/admin.d.ts +0 -89
- package/dist/operations/admin.d.ts.map +0 -1
- package/dist/operations/admin.js +0 -134
- package/dist/operations/admin.js.map +0 -1
|
@@ -1,188 +1,167 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { CreateProjectInputSchema, SaveRunInputSchema, CreateUserIssueInputSchema, UpdateIssueStatusInputSchema, CreateIssueNoteInputSchema, ArchiveRunsInputSchema, RegisterInputSchema, LoginInputSchema, UpdateProfileInputSchema, ChangePasswordInputSchema, ResetPasswordInputSchema, CreateApiKeyInputSchema, BulkStatusUpdateInputSchema, DeleteProjectInputSchema, RenameProjectInputSchema, UpdateIssueInputSchema } from '../types/schemas.js';
|
|
2
3
|
/**
|
|
3
|
-
*
|
|
4
|
+
* Client-side validation error thrown when input fails Zod schema validation.
|
|
5
|
+
*
|
|
6
|
+
* Contains structured error details from Zod for programmatic inspection.
|
|
7
|
+
* Import from `@uluops/ops-sdk/errors` or `@uluops/ops-sdk/config`.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* try {
|
|
12
|
+
* validateSaveRunInput(data);
|
|
13
|
+
* } catch (err) {
|
|
14
|
+
* if (err instanceof InputValidationError) {
|
|
15
|
+
* console.log(err.message); // "Invalid save run: project: String must contain at least 1 character(s)"
|
|
16
|
+
* console.log(err.errors); // Zod issue array with path, code, message per field
|
|
17
|
+
* }
|
|
18
|
+
* }
|
|
19
|
+
* ```
|
|
4
20
|
*/
|
|
5
21
|
export declare class InputValidationError extends Error {
|
|
6
22
|
readonly errors: z.ZodError['issues'];
|
|
7
23
|
constructor(message: string, errors: z.ZodError['issues']);
|
|
8
24
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
project: string;
|
|
135
|
-
beforeRunNumber?: number | undefined;
|
|
136
|
-
beforeDate?: string | undefined;
|
|
137
|
-
keepLast?: number | undefined;
|
|
138
|
-
reason?: string | undefined;
|
|
139
|
-
};
|
|
140
|
-
export declare function validateCreateUserIssueInput(data: unknown): {
|
|
141
|
-
project: string;
|
|
142
|
-
title: string;
|
|
143
|
-
priority: "critical" | "high" | "suggested" | "backlog";
|
|
144
|
-
severity?: "critical" | "high" | "medium" | "low" | "info" | undefined;
|
|
145
|
-
category?: string | undefined;
|
|
146
|
-
description?: string | undefined;
|
|
147
|
-
filePath?: string | undefined;
|
|
148
|
-
lineNumber?: number | null | undefined;
|
|
149
|
-
failureCode?: string | undefined;
|
|
150
|
-
failureDomain?: "STR" | "SEM" | "PRA" | "EPI" | undefined;
|
|
151
|
-
failureMode?: string | undefined;
|
|
152
|
-
agent?: string | undefined;
|
|
153
|
-
type?: "observation" | "feature" | "bug" | "refactor" | "config" | "docs" | "infra" | "security" | "test" | "deficiency" | "ambiguity" | undefined;
|
|
154
|
-
};
|
|
155
|
-
export declare function validateUpdateIssueInput(data: unknown): {
|
|
156
|
-
title?: string | undefined;
|
|
157
|
-
status?: "open" | "completed" | "deferred" | "wontfix" | "merged" | "false-positive" | "observation" | undefined;
|
|
158
|
-
priority?: "critical" | "high" | "suggested" | "backlog" | undefined;
|
|
159
|
-
severity?: "critical" | "high" | "medium" | "low" | "info" | null | undefined;
|
|
160
|
-
failureCode?: string | null | undefined;
|
|
161
|
-
failureDomain?: "STR" | "SEM" | "PRA" | "EPI" | null | undefined;
|
|
162
|
-
failureMode?: string | null | undefined;
|
|
163
|
-
category?: string | null | undefined;
|
|
164
|
-
type?: "observation" | "feature" | "bug" | "refactor" | "config" | "docs" | "infra" | "security" | "test" | "deficiency" | "ambiguity" | null | undefined;
|
|
165
|
-
filePath?: string | null | undefined;
|
|
166
|
-
lineNumber?: number | null | undefined;
|
|
167
|
-
};
|
|
168
|
-
export declare function validateUpdateIssueStatusInput(data: unknown): {
|
|
169
|
-
status: "open" | "completed" | "deferred" | "wontfix" | "merged" | "false-positive" | "observation";
|
|
170
|
-
reason?: string | undefined;
|
|
171
|
-
};
|
|
172
|
-
export declare function validateCreateIssueNoteInput(data: unknown): {
|
|
173
|
-
content: string;
|
|
174
|
-
noteType?: "context" | "resolution" | "blocker" | undefined;
|
|
175
|
-
createdBy?: string | undefined;
|
|
176
|
-
};
|
|
177
|
-
export declare function validateBulkStatusUpdateInput(data: unknown): {
|
|
178
|
-
updates: {
|
|
179
|
-
status: "open" | "completed" | "deferred" | "wontfix" | "merged" | "false-positive" | "observation";
|
|
180
|
-
issueId?: string | undefined;
|
|
181
|
-
id?: string | undefined;
|
|
182
|
-
reason?: string | undefined;
|
|
183
|
-
}[];
|
|
184
|
-
};
|
|
25
|
+
/**
|
|
26
|
+
* Validate user registration input.
|
|
27
|
+
* @param data - Raw input: `{ email: string (valid email, max 255), password: string (8-128 chars, requires uppercase + lowercase + digit) }`
|
|
28
|
+
* @returns Validated `RegisterInput`
|
|
29
|
+
* @throws {InputValidationError} If email is invalid or password doesn't meet requirements
|
|
30
|
+
*/
|
|
31
|
+
export declare function validateRegisterInput(data: unknown): z.infer<typeof RegisterInputSchema>;
|
|
32
|
+
/**
|
|
33
|
+
* Validate login input.
|
|
34
|
+
* @param data - Raw input: `{ email: string, password: string }`
|
|
35
|
+
* @returns Validated `LoginInput`
|
|
36
|
+
* @throws {InputValidationError} If email or password is missing
|
|
37
|
+
*/
|
|
38
|
+
export declare function validateLoginInput(data: unknown): z.infer<typeof LoginInputSchema>;
|
|
39
|
+
/**
|
|
40
|
+
* Validate profile update input. At least one field must be provided.
|
|
41
|
+
* @param data - Raw input: `{ username?, name?, bio?, timezone?, websiteUrl?, avatar?, avatarMimeType? }`
|
|
42
|
+
* @returns Validated `UpdateProfileInput`
|
|
43
|
+
* @throws {InputValidationError} If no fields provided, or username doesn't match `^[a-z][a-z0-9_]{2,29}$`
|
|
44
|
+
*/
|
|
45
|
+
export declare function validateUpdateProfileInput(data: unknown): z.infer<typeof UpdateProfileInputSchema>;
|
|
46
|
+
/**
|
|
47
|
+
* Validate password change input.
|
|
48
|
+
* @param data - Raw input: `{ currentPassword: string, newPassword: string (8-128, upper+lower+digit) }`
|
|
49
|
+
* @returns Validated `ChangePasswordInput`
|
|
50
|
+
* @throws {InputValidationError} If current password missing or new password doesn't meet requirements
|
|
51
|
+
*/
|
|
52
|
+
export declare function validateChangePasswordInput(data: unknown): z.infer<typeof ChangePasswordInputSchema>;
|
|
53
|
+
/**
|
|
54
|
+
* Validate password reset input (from reset email).
|
|
55
|
+
* @param data - Raw input: `{ token: string, password: string (8-128, upper+lower+digit) }`
|
|
56
|
+
* @returns Validated `ResetPasswordInput`
|
|
57
|
+
* @throws {InputValidationError} If token missing or password doesn't meet requirements
|
|
58
|
+
*/
|
|
59
|
+
export declare function validateResetPasswordInput(data: unknown): z.infer<typeof ResetPasswordInputSchema>;
|
|
60
|
+
/**
|
|
61
|
+
* Validate API key creation input.
|
|
62
|
+
* @param data - Raw input: `{ name?: string (max 100), expiresAt?: string (ISO 8601) }`
|
|
63
|
+
* @returns Validated `CreateApiKeyInput`
|
|
64
|
+
* @throws {InputValidationError} If name exceeds 100 chars or expiresAt is not valid ISO 8601
|
|
65
|
+
*/
|
|
66
|
+
export declare function validateCreateApiKeyInput(data: unknown): z.infer<typeof CreateApiKeyInputSchema>;
|
|
67
|
+
/**
|
|
68
|
+
* Validate project creation input.
|
|
69
|
+
* @param data - Raw input: `{ name: string (1-200 chars) }`
|
|
70
|
+
* @returns Validated `CreateProjectInput`
|
|
71
|
+
* @throws {InputValidationError} If name is empty or exceeds 200 chars
|
|
72
|
+
*/
|
|
73
|
+
export declare function validateCreateProjectInput(data: unknown): z.infer<typeof CreateProjectInputSchema>;
|
|
74
|
+
/**
|
|
75
|
+
* Validate project deletion input. Requires explicit confirmation.
|
|
76
|
+
* @param data - Raw input: `{ confirm: true, confirmationPhrase: string }`
|
|
77
|
+
* @returns Validated `DeleteProjectInput`
|
|
78
|
+
* @throws {InputValidationError} If confirm is not `true` or confirmationPhrase is missing
|
|
79
|
+
*/
|
|
80
|
+
export declare function validateDeleteProjectInput(data: unknown): z.infer<typeof DeleteProjectInputSchema>;
|
|
81
|
+
/**
|
|
82
|
+
* Validate project rename input.
|
|
83
|
+
* @param data - Raw input: `{ oldName: string, newName: string (1-200 chars) }`
|
|
84
|
+
* @returns Validated `RenameProjectInput`
|
|
85
|
+
* @throws {InputValidationError} If either name is empty or newName exceeds 200 chars
|
|
86
|
+
*/
|
|
87
|
+
export declare function validateRenameProjectInput(data: unknown): z.infer<typeof RenameProjectInputSchema>;
|
|
88
|
+
/**
|
|
89
|
+
* Validate save run input. This is the primary validation for `client.runs.save()`.
|
|
90
|
+
* @param data - Raw input with required fields: `project` (1-200), `workflowType` (1-100),
|
|
91
|
+
* `agents` (non-empty array), `recommendations` (array, use `[]` for empty).
|
|
92
|
+
* Optional: `summary`, `rawMarkdown`, `idempotencyKey`, `definitionType/Name/Version/Hash`,
|
|
93
|
+
* `analysisRecords`, `analysisSummary`.
|
|
94
|
+
* @returns Validated `SaveRunInput`
|
|
95
|
+
* @throws {InputValidationError} If required fields missing, agents empty, or field constraints violated
|
|
96
|
+
*/
|
|
97
|
+
export declare function validateSaveRunInput(data: unknown): z.infer<typeof SaveRunInputSchema>;
|
|
98
|
+
/**
|
|
99
|
+
* Validate archive runs input.
|
|
100
|
+
* @param data - Raw input: `{ project: string }` plus at least one filter:
|
|
101
|
+
* `beforeRunNumber?`, `beforeDate?` (ISO 8601), `keepLast?`, `reason?` (max 500)
|
|
102
|
+
* @returns Validated `ArchiveRunsInput`
|
|
103
|
+
* @throws {InputValidationError} If project missing or filter constraints violated
|
|
104
|
+
*/
|
|
105
|
+
export declare function validateArchiveRunsInput(data: unknown): z.infer<typeof ArchiveRunsInputSchema>;
|
|
106
|
+
/**
|
|
107
|
+
* Validate user-submitted issue creation input.
|
|
108
|
+
* @param data - Raw input with required: `project` (1-200), `title` (1-500),
|
|
109
|
+
* `priority` ('critical' | 'high' | 'suggested' | 'backlog').
|
|
110
|
+
* Optional: `severity`, `category`, `description` (max 10000), `filePath`, `lineNumber`,
|
|
111
|
+
* `failureCode` (e.g. 'SEM-VAL/H'), `failureDomain`, `failureMode`, `agent`, `type`.
|
|
112
|
+
* @returns Validated `CreateUserIssueInput`
|
|
113
|
+
* @throws {InputValidationError} If required fields missing or constraints violated
|
|
114
|
+
*/
|
|
115
|
+
export declare function validateCreateUserIssueInput(data: unknown): z.infer<typeof CreateUserIssueInputSchema>;
|
|
116
|
+
/**
|
|
117
|
+
* Validate issue metadata update input. All fields optional.
|
|
118
|
+
* @param data - Raw input: `{ title?, status?, priority?, severity?, failureCode?, filePath?, lineNumber?, ... }`
|
|
119
|
+
* @returns Validated `UpdateIssueInput`
|
|
120
|
+
* @throws {InputValidationError} If any provided field violates its constraints
|
|
121
|
+
*/
|
|
122
|
+
export declare function validateUpdateIssueInput(data: unknown): z.infer<typeof UpdateIssueInputSchema>;
|
|
123
|
+
/**
|
|
124
|
+
* Validate issue status update input.
|
|
125
|
+
* @param data - Raw input: `{ status: Status, reason?: string (max 500) }`
|
|
126
|
+
* @returns Validated `UpdateIssueStatusInput`
|
|
127
|
+
* @throws {InputValidationError} If status is not a valid Status enum value
|
|
128
|
+
*/
|
|
129
|
+
export declare function validateUpdateIssueStatusInput(data: unknown): z.infer<typeof UpdateIssueStatusInputSchema>;
|
|
130
|
+
/**
|
|
131
|
+
* Validate issue note creation input.
|
|
132
|
+
* @param data - Raw input: `{ content: string (1-10000), noteType?: NoteType, createdBy?: string }`
|
|
133
|
+
* @returns Validated `CreateIssueNoteInput`
|
|
134
|
+
* @throws {InputValidationError} If content is empty or exceeds 10000 chars
|
|
135
|
+
*/
|
|
136
|
+
export declare function validateCreateIssueNoteInput(data: unknown): z.infer<typeof CreateIssueNoteInputSchema>;
|
|
137
|
+
/**
|
|
138
|
+
* Validate bulk issue status update input. Max 100 items per request.
|
|
139
|
+
* @param data - Raw input: `{ updates: Array<{ issueId?: string, id?: string, status: Status, reason?: string }> }`
|
|
140
|
+
* @returns Validated bulk update input
|
|
141
|
+
* @throws {InputValidationError} If updates array is empty, exceeds 100 items, or any item has invalid status
|
|
142
|
+
*/
|
|
143
|
+
export declare function validateBulkStatusUpdateInput(data: unknown): z.infer<typeof BulkStatusUpdateInputSchema>;
|
|
144
|
+
/**
|
|
145
|
+
* Validate that a string is a valid UUID v1-5.
|
|
146
|
+
* @param value - The string to validate
|
|
147
|
+
* @param fieldName - Field name for error messages (e.g. 'projectId', 'issueId')
|
|
148
|
+
* @throws {InputValidationError} If value is not a valid UUID format
|
|
149
|
+
*/
|
|
185
150
|
export declare function validateUuid(value: string, fieldName: string): void;
|
|
151
|
+
/**
|
|
152
|
+
* Validate that a value is a non-empty string after trimming.
|
|
153
|
+
* @param value - The value to validate
|
|
154
|
+
* @param fieldName - Field name for error messages
|
|
155
|
+
* @returns The trimmed string
|
|
156
|
+
* @throws {InputValidationError} If value is not a string or is empty after trimming
|
|
157
|
+
*/
|
|
186
158
|
export declare function validateRequiredString(value: unknown, fieldName: string): string;
|
|
159
|
+
/**
|
|
160
|
+
* Validate that a value is a positive integer (> 0).
|
|
161
|
+
* @param value - The value to validate (coerced via `Number()`)
|
|
162
|
+
* @param fieldName - Field name for error messages
|
|
163
|
+
* @returns The validated number
|
|
164
|
+
* @throws {InputValidationError} If value is not a positive integer
|
|
165
|
+
*/
|
|
187
166
|
export declare function validatePositiveInt(value: unknown, fieldName: string): number;
|
|
188
167
|
//# sourceMappingURL=validators.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/config/validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/config/validators.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
import { CreateProjectInputSchema, SaveRunInputSchema, CreateUserIssueInputSchema, UpdateIssueStatusInputSchema, CreateIssueNoteInputSchema, ArchiveRunsInputSchema, RegisterInputSchema, LoginInputSchema, UpdateProfileInputSchema, ChangePasswordInputSchema, ResetPasswordInputSchema, CreateApiKeyInputSchema, BulkStatusUpdateInputSchema, DeleteProjectInputSchema, RenameProjectInputSchema, UpdateIssueInputSchema, } from '../types/schemas.js';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Client-side validation error thrown when input fails Zod schema validation.
|
|
4
|
+
*
|
|
5
|
+
* Contains structured error details from Zod for programmatic inspection.
|
|
6
|
+
* Import from `@uluops/ops-sdk/errors` or `@uluops/ops-sdk/config`.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* try {
|
|
11
|
+
* validateSaveRunInput(data);
|
|
12
|
+
* } catch (err) {
|
|
13
|
+
* if (err instanceof InputValidationError) {
|
|
14
|
+
* console.log(err.message); // "Invalid save run: project: String must contain at least 1 character(s)"
|
|
15
|
+
* console.log(err.errors); // Zod issue array with path, code, message per field
|
|
16
|
+
* }
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
4
19
|
*/
|
|
5
20
|
export class InputValidationError extends Error {
|
|
6
21
|
errors;
|
|
@@ -11,7 +26,7 @@ export class InputValidationError extends Error {
|
|
|
11
26
|
}
|
|
12
27
|
}
|
|
13
28
|
/**
|
|
14
|
-
*
|
|
29
|
+
* Format a single Zod issue into a human-readable string.
|
|
15
30
|
*/
|
|
16
31
|
function formatZodIssue(e) {
|
|
17
32
|
const field = e.path.join('.') || '(root)';
|
|
@@ -32,78 +47,205 @@ function validate(schema, data, context) {
|
|
|
32
47
|
// ============================================
|
|
33
48
|
// AUTH VALIDATORS
|
|
34
49
|
// ============================================
|
|
50
|
+
/**
|
|
51
|
+
* Validate user registration input.
|
|
52
|
+
* @param data - Raw input: `{ email: string (valid email, max 255), password: string (8-128 chars, requires uppercase + lowercase + digit) }`
|
|
53
|
+
* @returns Validated `RegisterInput`
|
|
54
|
+
* @throws {InputValidationError} If email is invalid or password doesn't meet requirements
|
|
55
|
+
*/
|
|
35
56
|
export function validateRegisterInput(data) {
|
|
36
57
|
return validate(RegisterInputSchema, data, 'register input');
|
|
37
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Validate login input.
|
|
61
|
+
* @param data - Raw input: `{ email: string, password: string }`
|
|
62
|
+
* @returns Validated `LoginInput`
|
|
63
|
+
* @throws {InputValidationError} If email or password is missing
|
|
64
|
+
*/
|
|
38
65
|
export function validateLoginInput(data) {
|
|
39
66
|
return validate(LoginInputSchema, data, 'login input');
|
|
40
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Validate profile update input. At least one field must be provided.
|
|
70
|
+
* @param data - Raw input: `{ username?, name?, bio?, timezone?, websiteUrl?, avatar?, avatarMimeType? }`
|
|
71
|
+
* @returns Validated `UpdateProfileInput`
|
|
72
|
+
* @throws {InputValidationError} If no fields provided, or username doesn't match `^[a-z][a-z0-9_]{2,29}$`
|
|
73
|
+
*/
|
|
41
74
|
export function validateUpdateProfileInput(data) {
|
|
42
75
|
return validate(UpdateProfileInputSchema, data, 'profile update');
|
|
43
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Validate password change input.
|
|
79
|
+
* @param data - Raw input: `{ currentPassword: string, newPassword: string (8-128, upper+lower+digit) }`
|
|
80
|
+
* @returns Validated `ChangePasswordInput`
|
|
81
|
+
* @throws {InputValidationError} If current password missing or new password doesn't meet requirements
|
|
82
|
+
*/
|
|
44
83
|
export function validateChangePasswordInput(data) {
|
|
45
84
|
return validate(ChangePasswordInputSchema, data, 'password change');
|
|
46
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* Validate password reset input (from reset email).
|
|
88
|
+
* @param data - Raw input: `{ token: string, password: string (8-128, upper+lower+digit) }`
|
|
89
|
+
* @returns Validated `ResetPasswordInput`
|
|
90
|
+
* @throws {InputValidationError} If token missing or password doesn't meet requirements
|
|
91
|
+
*/
|
|
47
92
|
export function validateResetPasswordInput(data) {
|
|
48
93
|
return validate(ResetPasswordInputSchema, data, 'password reset');
|
|
49
94
|
}
|
|
95
|
+
/**
|
|
96
|
+
* Validate API key creation input.
|
|
97
|
+
* @param data - Raw input: `{ name?: string (max 100), expiresAt?: string (ISO 8601) }`
|
|
98
|
+
* @returns Validated `CreateApiKeyInput`
|
|
99
|
+
* @throws {InputValidationError} If name exceeds 100 chars or expiresAt is not valid ISO 8601
|
|
100
|
+
*/
|
|
50
101
|
export function validateCreateApiKeyInput(data) {
|
|
51
102
|
return validate(CreateApiKeyInputSchema, data, 'API key creation');
|
|
52
103
|
}
|
|
53
104
|
// ============================================
|
|
54
105
|
// PROJECT VALIDATORS
|
|
55
106
|
// ============================================
|
|
107
|
+
/**
|
|
108
|
+
* Validate project creation input.
|
|
109
|
+
* @param data - Raw input: `{ name: string (1-200 chars) }`
|
|
110
|
+
* @returns Validated `CreateProjectInput`
|
|
111
|
+
* @throws {InputValidationError} If name is empty or exceeds 200 chars
|
|
112
|
+
*/
|
|
56
113
|
export function validateCreateProjectInput(data) {
|
|
57
114
|
return validate(CreateProjectInputSchema, data, 'project creation');
|
|
58
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Validate project deletion input. Requires explicit confirmation.
|
|
118
|
+
* @param data - Raw input: `{ confirm: true, confirmationPhrase: string }`
|
|
119
|
+
* @returns Validated `DeleteProjectInput`
|
|
120
|
+
* @throws {InputValidationError} If confirm is not `true` or confirmationPhrase is missing
|
|
121
|
+
*/
|
|
59
122
|
export function validateDeleteProjectInput(data) {
|
|
60
123
|
return validate(DeleteProjectInputSchema, data, 'project deletion');
|
|
61
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* Validate project rename input.
|
|
127
|
+
* @param data - Raw input: `{ oldName: string, newName: string (1-200 chars) }`
|
|
128
|
+
* @returns Validated `RenameProjectInput`
|
|
129
|
+
* @throws {InputValidationError} If either name is empty or newName exceeds 200 chars
|
|
130
|
+
*/
|
|
62
131
|
export function validateRenameProjectInput(data) {
|
|
63
132
|
return validate(RenameProjectInputSchema, data, 'project rename');
|
|
64
133
|
}
|
|
65
134
|
// ============================================
|
|
66
135
|
// RUN VALIDATORS
|
|
67
136
|
// ============================================
|
|
137
|
+
/**
|
|
138
|
+
* Validate save run input. This is the primary validation for `client.runs.save()`.
|
|
139
|
+
* @param data - Raw input with required fields: `project` (1-200), `workflowType` (1-100),
|
|
140
|
+
* `agents` (non-empty array), `recommendations` (array, use `[]` for empty).
|
|
141
|
+
* Optional: `summary`, `rawMarkdown`, `idempotencyKey`, `definitionType/Name/Version/Hash`,
|
|
142
|
+
* `analysisRecords`, `analysisSummary`.
|
|
143
|
+
* @returns Validated `SaveRunInput`
|
|
144
|
+
* @throws {InputValidationError} If required fields missing, agents empty, or field constraints violated
|
|
145
|
+
*/
|
|
68
146
|
export function validateSaveRunInput(data) {
|
|
69
147
|
return validate(SaveRunInputSchema, data, 'save run');
|
|
70
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* Validate archive runs input.
|
|
151
|
+
* @param data - Raw input: `{ project: string }` plus at least one filter:
|
|
152
|
+
* `beforeRunNumber?`, `beforeDate?` (ISO 8601), `keepLast?`, `reason?` (max 500)
|
|
153
|
+
* @returns Validated `ArchiveRunsInput`
|
|
154
|
+
* @throws {InputValidationError} If project missing or filter constraints violated
|
|
155
|
+
*/
|
|
71
156
|
export function validateArchiveRunsInput(data) {
|
|
72
157
|
return validate(ArchiveRunsInputSchema, data, 'archive runs');
|
|
73
158
|
}
|
|
74
159
|
// ============================================
|
|
75
160
|
// ISSUE VALIDATORS
|
|
76
161
|
// ============================================
|
|
162
|
+
/**
|
|
163
|
+
* Validate user-submitted issue creation input.
|
|
164
|
+
* @param data - Raw input with required: `project` (1-200), `title` (1-500),
|
|
165
|
+
* `priority` ('critical' | 'high' | 'suggested' | 'backlog').
|
|
166
|
+
* Optional: `severity`, `category`, `description` (max 10000), `filePath`, `lineNumber`,
|
|
167
|
+
* `failureCode` (e.g. 'SEM-VAL/H'), `failureDomain`, `failureMode`, `agent`, `type`.
|
|
168
|
+
* @returns Validated `CreateUserIssueInput`
|
|
169
|
+
* @throws {InputValidationError} If required fields missing or constraints violated
|
|
170
|
+
*/
|
|
77
171
|
export function validateCreateUserIssueInput(data) {
|
|
78
172
|
return validate(CreateUserIssueInputSchema, data, 'issue creation');
|
|
79
173
|
}
|
|
174
|
+
/**
|
|
175
|
+
* Validate issue metadata update input. All fields optional.
|
|
176
|
+
* @param data - Raw input: `{ title?, status?, priority?, severity?, failureCode?, filePath?, lineNumber?, ... }`
|
|
177
|
+
* @returns Validated `UpdateIssueInput`
|
|
178
|
+
* @throws {InputValidationError} If any provided field violates its constraints
|
|
179
|
+
*/
|
|
80
180
|
export function validateUpdateIssueInput(data) {
|
|
81
181
|
return validate(UpdateIssueInputSchema, data, 'issue update');
|
|
82
182
|
}
|
|
183
|
+
/**
|
|
184
|
+
* Validate issue status update input.
|
|
185
|
+
* @param data - Raw input: `{ status: Status, reason?: string (max 500) }`
|
|
186
|
+
* @returns Validated `UpdateIssueStatusInput`
|
|
187
|
+
* @throws {InputValidationError} If status is not a valid Status enum value
|
|
188
|
+
*/
|
|
83
189
|
export function validateUpdateIssueStatusInput(data) {
|
|
84
190
|
return validate(UpdateIssueStatusInputSchema, data, 'status update');
|
|
85
191
|
}
|
|
192
|
+
/**
|
|
193
|
+
* Validate issue note creation input.
|
|
194
|
+
* @param data - Raw input: `{ content: string (1-10000), noteType?: NoteType, createdBy?: string }`
|
|
195
|
+
* @returns Validated `CreateIssueNoteInput`
|
|
196
|
+
* @throws {InputValidationError} If content is empty or exceeds 10000 chars
|
|
197
|
+
*/
|
|
86
198
|
export function validateCreateIssueNoteInput(data) {
|
|
87
199
|
return validate(CreateIssueNoteInputSchema, data, 'issue note');
|
|
88
200
|
}
|
|
201
|
+
/**
|
|
202
|
+
* Validate bulk issue status update input. Max 100 items per request.
|
|
203
|
+
* @param data - Raw input: `{ updates: Array<{ issueId?: string, id?: string, status: Status, reason?: string }> }`
|
|
204
|
+
* @returns Validated bulk update input
|
|
205
|
+
* @throws {InputValidationError} If updates array is empty, exceeds 100 items, or any item has invalid status
|
|
206
|
+
*/
|
|
89
207
|
export function validateBulkStatusUpdateInput(data) {
|
|
90
208
|
return validate(BulkStatusUpdateInputSchema, data, 'bulk status update');
|
|
91
209
|
}
|
|
92
210
|
// ============================================
|
|
93
211
|
// SIMPLE VALIDATORS
|
|
94
212
|
// ============================================
|
|
213
|
+
/**
|
|
214
|
+
* Validate that a string is a valid UUID v1-5.
|
|
215
|
+
* @param value - The string to validate
|
|
216
|
+
* @param fieldName - Field name for error messages (e.g. 'projectId', 'issueId')
|
|
217
|
+
* @throws {InputValidationError} If value is not a valid UUID format
|
|
218
|
+
*/
|
|
95
219
|
export function validateUuid(value, fieldName) {
|
|
96
220
|
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
97
221
|
if (!uuidRegex.test(value)) {
|
|
98
|
-
throw new InputValidationError(`Invalid ${fieldName}: must be a valid UUID`, [
|
|
222
|
+
throw new InputValidationError(`Invalid ${fieldName}: must be a valid UUID`, [
|
|
223
|
+
{ code: 'custom', path: [fieldName], message: 'must be a valid UUID' }
|
|
224
|
+
]);
|
|
99
225
|
}
|
|
100
226
|
}
|
|
227
|
+
/**
|
|
228
|
+
* Validate that a value is a non-empty string after trimming.
|
|
229
|
+
* @param value - The value to validate
|
|
230
|
+
* @param fieldName - Field name for error messages
|
|
231
|
+
* @returns The trimmed string
|
|
232
|
+
* @throws {InputValidationError} If value is not a string or is empty after trimming
|
|
233
|
+
*/
|
|
101
234
|
export function validateRequiredString(value, fieldName) {
|
|
102
235
|
if (typeof value !== 'string' || value.trim().length === 0) {
|
|
103
|
-
throw new InputValidationError(`${fieldName} is required`, [
|
|
236
|
+
throw new InputValidationError(`${fieldName} is required`, [
|
|
237
|
+
{ code: 'custom', path: [fieldName], message: 'is required' }
|
|
238
|
+
]);
|
|
104
239
|
}
|
|
105
240
|
return value.trim();
|
|
106
241
|
}
|
|
242
|
+
/**
|
|
243
|
+
* Validate that a value is a positive integer (> 0).
|
|
244
|
+
* @param value - The value to validate (coerced via `Number()`)
|
|
245
|
+
* @param fieldName - Field name for error messages
|
|
246
|
+
* @returns The validated number
|
|
247
|
+
* @throws {InputValidationError} If value is not a positive integer
|
|
248
|
+
*/
|
|
107
249
|
export function validatePositiveInt(value, fieldName) {
|
|
108
250
|
const num = Number(value);
|
|
109
251
|
if (!Number.isInteger(num) || num <= 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/config/validators.ts"],"names":[],"mappings":"AACA,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,0BAA0B,EAC1B,4BAA4B,EAC5B,0BAA0B,EAC1B,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAE7B
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/config/validators.ts"],"names":[],"mappings":"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"}
|