@nekutima/biome-sdk 0.1.18
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/README.md +100 -0
- package/dist/auth/auth.service.d.ts +90 -0
- package/dist/auth/auth.service.d.ts.map +1 -0
- package/dist/auth/auth.service.js +166 -0
- package/dist/auth/auth.service.js.map +1 -0
- package/dist/auth/types.d.ts +19 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +3 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/core/configuration.d.ts +26 -0
- package/dist/core/configuration.d.ts.map +1 -0
- package/dist/core/configuration.js +3 -0
- package/dist/core/configuration.js.map +1 -0
- package/dist/core/error-handler.d.ts +24 -0
- package/dist/core/error-handler.d.ts.map +1 -0
- package/dist/core/error-handler.js +76 -0
- package/dist/core/error-handler.js.map +1 -0
- package/dist/core/http-client.d.ts +43 -0
- package/dist/core/http-client.d.ts.map +1 -0
- package/dist/core/http-client.js +97 -0
- package/dist/core/http-client.js.map +1 -0
- package/dist/core/state-manager.d.ts +16 -0
- package/dist/core/state-manager.d.ts.map +1 -0
- package/dist/core/state-manager.js +33 -0
- package/dist/core/state-manager.js.map +1 -0
- package/dist/files/file-upload.d.ts +60 -0
- package/dist/files/file-upload.d.ts.map +1 -0
- package/dist/files/file-upload.js +121 -0
- package/dist/files/file-upload.js.map +1 -0
- package/dist/index.d.ts +80 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +140 -0
- package/dist/index.js.map +1 -0
- package/dist/models/api-error.model.d.ts +31 -0
- package/dist/models/api-error.model.d.ts.map +1 -0
- package/dist/models/api-error.model.js +53 -0
- package/dist/models/api-error.model.js.map +1 -0
- package/dist/models/api-response.model.d.ts +51 -0
- package/dist/models/api-response.model.d.ts.map +1 -0
- package/dist/models/api-response.model.js +77 -0
- package/dist/models/api-response.model.js.map +1 -0
- package/dist/models/chat.model.d.ts +59 -0
- package/dist/models/chat.model.d.ts.map +1 -0
- package/dist/models/chat.model.js +3 -0
- package/dist/models/chat.model.js.map +1 -0
- package/dist/models/ecosystem.model.d.ts +16 -0
- package/dist/models/ecosystem.model.d.ts.map +1 -0
- package/dist/models/ecosystem.model.js +7 -0
- package/dist/models/ecosystem.model.js.map +1 -0
- package/dist/models/file.model.d.ts +67 -0
- package/dist/models/file.model.d.ts.map +1 -0
- package/dist/models/file.model.js +3 -0
- package/dist/models/file.model.js.map +1 -0
- package/dist/models/notification.model.d.ts +172 -0
- package/dist/models/notification.model.d.ts.map +1 -0
- package/dist/models/notification.model.js +77 -0
- package/dist/models/notification.model.js.map +1 -0
- package/dist/models/person.model.d.ts +94 -0
- package/dist/models/person.model.d.ts.map +1 -0
- package/dist/models/person.model.js +14 -0
- package/dist/models/person.model.js.map +1 -0
- package/dist/models/project.model.d.ts +62 -0
- package/dist/models/project.model.d.ts.map +1 -0
- package/dist/models/project.model.js +93 -0
- package/dist/models/project.model.js.map +1 -0
- package/dist/models/task-update.model.d.ts +28 -0
- package/dist/models/task-update.model.d.ts.map +1 -0
- package/dist/models/task-update.model.js +8 -0
- package/dist/models/task-update.model.js.map +1 -0
- package/dist/models/task-url.model.d.ts +16 -0
- package/dist/models/task-url.model.d.ts.map +1 -0
- package/dist/models/task-url.model.js +3 -0
- package/dist/models/task-url.model.js.map +1 -0
- package/dist/models/task.model.d.ts +120 -0
- package/dist/models/task.model.d.ts.map +1 -0
- package/dist/models/task.model.js +78 -0
- package/dist/models/task.model.js.map +1 -0
- package/dist/models/timezone.model.d.ts +19 -0
- package/dist/models/timezone.model.d.ts.map +1 -0
- package/dist/models/timezone.model.js +12 -0
- package/dist/models/timezone.model.js.map +1 -0
- package/dist/models/user.model.d.ts +101 -0
- package/dist/models/user.model.d.ts.map +1 -0
- package/dist/models/user.model.js +22 -0
- package/dist/models/user.model.js.map +1 -0
- package/dist/profiles/profile.service.d.ts +52 -0
- package/dist/profiles/profile.service.d.ts.map +1 -0
- package/dist/profiles/profile.service.js +119 -0
- package/dist/profiles/profile.service.js.map +1 -0
- package/dist/profiles/types.d.ts +1 -0
- package/dist/profiles/types.d.ts.map +1 -0
- package/dist/profiles/types.js +3 -0
- package/dist/profiles/types.js.map +1 -0
- package/dist/tasks/task-sorting.d.ts +51 -0
- package/dist/tasks/task-sorting.d.ts.map +1 -0
- package/dist/tasks/task-sorting.js +137 -0
- package/dist/tasks/task-sorting.js.map +1 -0
- package/dist/tasks/task.service.d.ts +134 -0
- package/dist/tasks/task.service.d.ts.map +1 -0
- package/dist/tasks/task.service.js +256 -0
- package/dist/tasks/task.service.js.map +1 -0
- package/dist/tasks/types.d.ts +2 -0
- package/dist/tasks/types.d.ts.map +1 -0
- package/dist/tasks/types.js +3 -0
- package/dist/tasks/types.js.map +1 -0
- package/dist/types/actor.types.d.ts +101 -0
- package/dist/types/actor.types.d.ts.map +1 -0
- package/dist/types/actor.types.js +135 -0
- package/dist/types/actor.types.js.map +1 -0
- package/dist/types/api.types.d.ts +43 -0
- package/dist/types/api.types.d.ts.map +1 -0
- package/dist/types/api.types.js +6 -0
- package/dist/types/api.types.js.map +1 -0
- package/dist/types/common.types.d.ts +40 -0
- package/dist/types/common.types.d.ts.map +1 -0
- package/dist/types/common.types.js +6 -0
- package/dist/types/common.types.js.map +1 -0
- package/dist/types/state-machine.types.d.ts +102 -0
- package/dist/types/state-machine.types.d.ts.map +1 -0
- package/dist/types/state-machine.types.js +18 -0
- package/dist/types/state-machine.types.js.map +1 -0
- package/dist/users/user.service.d.ts +49 -0
- package/dist/users/user.service.d.ts.map +1 -0
- package/dist/users/user.service.js +119 -0
- package/dist/users/user.service.js.map +1 -0
- package/dist/utils/date.utils.d.ts +60 -0
- package/dist/utils/date.utils.d.ts.map +1 -0
- package/dist/utils/date.utils.js +125 -0
- package/dist/utils/date.utils.js.map +1 -0
- package/dist/utils/username-generator.d.ts +76 -0
- package/dist/utils/username-generator.d.ts.map +1 -0
- package/dist/utils/username-generator.js +177 -0
- package/dist/utils/username-generator.js.map +1 -0
- package/dist/utils/validation.utils.d.ts +57 -0
- package/dist/utils/validation.utils.d.ts.map +1 -0
- package/dist/utils/validation.utils.js +117 -0
- package/dist/utils/validation.utils.js.map +1 -0
- package/dist/validation/password-strength.d.ts +66 -0
- package/dist/validation/password-strength.d.ts.map +1 -0
- package/dist/validation/password-strength.js +192 -0
- package/dist/validation/password-strength.js.map +1 -0
- package/dist/validation/schemas.d.ts +69 -0
- package/dist/validation/schemas.d.ts.map +1 -0
- package/dist/validation/schemas.js +94 -0
- package/dist/validation/schemas.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BiomeTasks = void 0;
|
|
4
|
+
const error_handler_1 = require("../core/error-handler");
|
|
5
|
+
/**
|
|
6
|
+
* Task management service - pure business logic without UI state
|
|
7
|
+
*/
|
|
8
|
+
class BiomeTasks {
|
|
9
|
+
constructor(http) {
|
|
10
|
+
this.http = http;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Get task by ID
|
|
14
|
+
*/
|
|
15
|
+
async getById(id) {
|
|
16
|
+
try {
|
|
17
|
+
const response = await this.http.get(`/tasks/task/${id}`);
|
|
18
|
+
return response.payload;
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
throw (0, error_handler_1.createSdkError)(error, 'Failed to get task');
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Create a new task
|
|
26
|
+
*/
|
|
27
|
+
async create(task) {
|
|
28
|
+
try {
|
|
29
|
+
const response = await this.http.post('/tasks/task', task);
|
|
30
|
+
return response.payload;
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
throw (0, error_handler_1.createSdkError)(error, 'Failed to create task');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Update an existing task
|
|
38
|
+
*/
|
|
39
|
+
async update(id, updates) {
|
|
40
|
+
try {
|
|
41
|
+
const response = await this.http.put(`/tasks/task/${id}`, updates);
|
|
42
|
+
return response.payload;
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
throw (0, error_handler_1.createSdkError)(error, 'Failed to update task');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Update specific task fields (partial update)
|
|
50
|
+
*/
|
|
51
|
+
async updateFields(id, fields) {
|
|
52
|
+
try {
|
|
53
|
+
const response = await this.http.patch(`/tasks/task/${id}/fields`, fields);
|
|
54
|
+
return response.payload;
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
throw (0, error_handler_1.createSdkError)(error, 'Failed to update task fields');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Delete a task
|
|
62
|
+
*/
|
|
63
|
+
async delete(id) {
|
|
64
|
+
try {
|
|
65
|
+
await this.http.delete(`/tasks/task/${id}`);
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
throw (0, error_handler_1.createSdkError)(error, 'Failed to delete task');
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get tasks assigned to current user
|
|
73
|
+
*/
|
|
74
|
+
async getMyTasks(filters) {
|
|
75
|
+
try {
|
|
76
|
+
const params = this.buildQueryParams(filters);
|
|
77
|
+
const response = await this.http.get(`/tasks/my?${params}`);
|
|
78
|
+
return response.payload;
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
throw (0, error_handler_1.createSdkError)(error, 'Failed to get my tasks');
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get tasks delegated by current user
|
|
86
|
+
*/
|
|
87
|
+
async getDelegatedTasks(filters) {
|
|
88
|
+
try {
|
|
89
|
+
const params = this.buildQueryParams(filters);
|
|
90
|
+
const response = await this.http.get(`/tasks/delegated?${params}`);
|
|
91
|
+
return response.payload;
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
throw (0, error_handler_1.createSdkError)(error, 'Failed to get delegated tasks');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Search tasks
|
|
99
|
+
*/
|
|
100
|
+
async searchTasks(query, filters) {
|
|
101
|
+
try {
|
|
102
|
+
const params = this.buildQueryParams({ ...filters, search: query });
|
|
103
|
+
const response = await this.http.get(`/tasks/search?${params}`);
|
|
104
|
+
return response.payload;
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
throw (0, error_handler_1.createSdkError)(error, 'Failed to search tasks');
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Get tasks by status (for frontend compatibility)
|
|
112
|
+
*/
|
|
113
|
+
async getTasksByStatus(statuses) {
|
|
114
|
+
try {
|
|
115
|
+
const params = this.buildQueryParams({ status: statuses });
|
|
116
|
+
const response = await this.http.get(`/tasks/by-status?${params}`);
|
|
117
|
+
return response.payload;
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
throw (0, error_handler_1.createSdkError)(error, 'Failed to get tasks by status');
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Get task prerequisites/children
|
|
125
|
+
*/
|
|
126
|
+
async getRequisites(parentId) {
|
|
127
|
+
try {
|
|
128
|
+
const response = await this.http.get(`/tasks/task/children/${parentId}`);
|
|
129
|
+
const payload = response.payload;
|
|
130
|
+
const childIds = payload.children;
|
|
131
|
+
if (childIds.length === 0) {
|
|
132
|
+
return [];
|
|
133
|
+
}
|
|
134
|
+
// Fetch full details for all child tasks
|
|
135
|
+
const taskPromises = childIds.map(id => this.getById(id));
|
|
136
|
+
return Promise.all(taskPromises);
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
throw (0, error_handler_1.createSdkError)(error, 'Failed to get task requisites');
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Accept a task
|
|
144
|
+
*/
|
|
145
|
+
async accept(id) {
|
|
146
|
+
try {
|
|
147
|
+
const response = await this.http.put(`/tasks/task/${id}/accept`, {});
|
|
148
|
+
return response.payload;
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
throw (0, error_handler_1.createSdkError)(error, 'Failed to accept task');
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Reject a task
|
|
156
|
+
*/
|
|
157
|
+
async reject(id, request) {
|
|
158
|
+
try {
|
|
159
|
+
const response = await this.http.put(`/tasks/task/${id}/reject`, request);
|
|
160
|
+
return response.payload;
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
throw (0, error_handler_1.createSdkError)(error, 'Failed to reject task');
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Deliver a completed task
|
|
168
|
+
*/
|
|
169
|
+
async deliver(id, request) {
|
|
170
|
+
try {
|
|
171
|
+
const response = await this.http.put(`/tasks/task/${id}/deliver`, request);
|
|
172
|
+
return response.payload;
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
throw (0, error_handler_1.createSdkError)(error, 'Failed to deliver task');
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Evaluate a delivered task
|
|
180
|
+
*/
|
|
181
|
+
async evaluate(id, request) {
|
|
182
|
+
try {
|
|
183
|
+
const response = await this.http.put(`/tasks/task/${id}/evaluate`, request);
|
|
184
|
+
return response.payload;
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
throw (0, error_handler_1.createSdkError)(error, 'Failed to evaluate task');
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Archive a task
|
|
192
|
+
*/
|
|
193
|
+
async archive(id) {
|
|
194
|
+
try {
|
|
195
|
+
const response = await this.http.put(`/tasks/task/${id}/archive`, {});
|
|
196
|
+
return response.payload;
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
throw (0, error_handler_1.createSdkError)(error, 'Failed to archive task');
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Cancel a task
|
|
204
|
+
*/
|
|
205
|
+
async cancel(id, request) {
|
|
206
|
+
try {
|
|
207
|
+
const response = await this.http.put(`/tasks/task/${id}/cancel`, request);
|
|
208
|
+
return response.payload;
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
throw (0, error_handler_1.createSdkError)(error, 'Failed to cancel task');
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Quit a task (for assignee)
|
|
216
|
+
*/
|
|
217
|
+
async quit(id) {
|
|
218
|
+
try {
|
|
219
|
+
const response = await this.http.put(`/tasks/task/${id}/quit`, {});
|
|
220
|
+
return response.payload;
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
throw (0, error_handler_1.createSdkError)(error, 'Failed to quit task');
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Build query parameters from filters
|
|
228
|
+
*/
|
|
229
|
+
buildQueryParams(filters) {
|
|
230
|
+
if (!filters)
|
|
231
|
+
return '';
|
|
232
|
+
const params = new URLSearchParams();
|
|
233
|
+
if (filters.status) {
|
|
234
|
+
const statuses = Array.isArray(filters.status) ? filters.status : [filters.status];
|
|
235
|
+
statuses.forEach(status => params.append('status', status));
|
|
236
|
+
}
|
|
237
|
+
if (filters.assigneeId) {
|
|
238
|
+
params.append('assigneeId', filters.assigneeId.toString());
|
|
239
|
+
}
|
|
240
|
+
if (filters.requesterId) {
|
|
241
|
+
params.append('requesterId', filters.requesterId.toString());
|
|
242
|
+
}
|
|
243
|
+
if (filters.limit) {
|
|
244
|
+
params.append('limit', filters.limit.toString());
|
|
245
|
+
}
|
|
246
|
+
if (filters.offset) {
|
|
247
|
+
params.append('offset', filters.offset.toString());
|
|
248
|
+
}
|
|
249
|
+
if (filters.search) {
|
|
250
|
+
params.append('q', filters.search);
|
|
251
|
+
}
|
|
252
|
+
return params.toString();
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
exports.BiomeTasks = BiomeTasks;
|
|
256
|
+
//# sourceMappingURL=task.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.service.js","sourceRoot":"","sources":["../../src/tasks/task.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tasks/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tasks/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Actor types for state machine validation
|
|
3
|
+
* These types define the actors that can perform state transitions
|
|
4
|
+
*/
|
|
5
|
+
import { Actor } from './state-machine.types';
|
|
6
|
+
export type { Actor };
|
|
7
|
+
/**
|
|
8
|
+
* Project-specific actor types
|
|
9
|
+
*/
|
|
10
|
+
export declare enum ProjectActorType {
|
|
11
|
+
CONCEPTUALIZER = "conceptualizer",
|
|
12
|
+
PROJECT_MANAGER = "project_manager"
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Task-specific actor types
|
|
16
|
+
*/
|
|
17
|
+
export declare enum TaskActorType {
|
|
18
|
+
ASSIGNEE = "assignee",
|
|
19
|
+
REQUESTER = "requester"
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Actor permissions
|
|
23
|
+
*/
|
|
24
|
+
export declare enum ActorPermission {
|
|
25
|
+
PROJECT_CREATE = "project:create",
|
|
26
|
+
PROJECT_UPDATE = "project:update",
|
|
27
|
+
PROJECT_DELETE = "project:delete",
|
|
28
|
+
PROJECT_STATE_TRANSITION = "project:state_transition",
|
|
29
|
+
TASK_CREATE = "task:create",
|
|
30
|
+
TASK_UPDATE = "task:update",
|
|
31
|
+
TASK_DELETE = "task:delete",
|
|
32
|
+
TASK_STATE_TRANSITION = "task:state_transition",
|
|
33
|
+
READ = "read",
|
|
34
|
+
WRITE = "write",
|
|
35
|
+
ADMIN = "admin"
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Project actor with specific permissions
|
|
39
|
+
*/
|
|
40
|
+
export type ProjectActor = Actor & {
|
|
41
|
+
type: ProjectActorType;
|
|
42
|
+
permissions: ActorPermission[];
|
|
43
|
+
projectId?: number;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Task actor with specific permissions
|
|
47
|
+
*/
|
|
48
|
+
export type TaskActor = Actor & {
|
|
49
|
+
type: TaskActorType;
|
|
50
|
+
permissions: ActorPermission[];
|
|
51
|
+
taskId?: number;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Actor validation result
|
|
55
|
+
*/
|
|
56
|
+
export type ActorValidationResult = {
|
|
57
|
+
isValid: boolean;
|
|
58
|
+
actor: Actor;
|
|
59
|
+
permissions: string[];
|
|
60
|
+
missingPermissions: ActorPermission[];
|
|
61
|
+
error?: string;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Actor factory for creating actors with specific permissions
|
|
65
|
+
*/
|
|
66
|
+
export declare const ActorFactory: {
|
|
67
|
+
/**
|
|
68
|
+
* Create a conceptualizer actor
|
|
69
|
+
*/
|
|
70
|
+
createConceptualizer: (userId: number, projectId?: number) => ProjectActor;
|
|
71
|
+
/**
|
|
72
|
+
* Create a project manager actor
|
|
73
|
+
*/
|
|
74
|
+
createProjectManager: (userId: number, projectId?: number) => ProjectActor;
|
|
75
|
+
/**
|
|
76
|
+
* Create an assignee actor
|
|
77
|
+
*/
|
|
78
|
+
createAssignee: (userId: number, taskId?: number) => TaskActor;
|
|
79
|
+
/**
|
|
80
|
+
* Create a requester actor
|
|
81
|
+
*/
|
|
82
|
+
createRequester: (userId: number, taskId?: number) => TaskActor;
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Actor validation utilities
|
|
86
|
+
*/
|
|
87
|
+
export declare const ActorValidator: {
|
|
88
|
+
/**
|
|
89
|
+
* Check if an actor has a specific permission
|
|
90
|
+
*/
|
|
91
|
+
hasPermission: (actor: Actor, permission: ActorPermission) => boolean;
|
|
92
|
+
/**
|
|
93
|
+
* Check if an actor has all required permissions
|
|
94
|
+
*/
|
|
95
|
+
hasAllPermissions: (actor: Actor, permissions: ActorPermission[]) => boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Validate an actor for a specific action
|
|
98
|
+
*/
|
|
99
|
+
validateActor: (actor: Actor, requiredPermissions: ActorPermission[]) => ActorValidationResult;
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=actor.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actor.types.d.ts","sourceRoot":"","sources":["../../src/types/actor.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAE9C,YAAY,EAAE,KAAK,EAAE,CAAC;AAEtB;;GAEG;AACH,oBAAY,gBAAgB;IACxB,cAAc,mBAAmB;IACjC,eAAe,oBAAoB;CACtC;AAED;;GAEG;AACH,oBAAY,aAAa;IACrB,QAAQ,aAAa;IACrB,SAAS,cAAc;CAC1B;AAED;;GAEG;AACH,oBAAY,eAAe;IAEvB,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;IACjC,wBAAwB,6BAA6B;IAGrD,WAAW,gBAAgB;IAC3B,WAAW,gBAAgB;IAC3B,WAAW,gBAAgB;IAC3B,qBAAqB,0BAA0B;IAG/C,IAAI,SAAS;IACb,KAAK,UAAU;IACf,KAAK,UAAU;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG;IAC/B,IAAI,EAAE,gBAAgB,CAAC;IACvB,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG;IAC5B,IAAI,EAAE,aAAa,CAAC;IACpB,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,kBAAkB,EAAE,eAAe,EAAE,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY;IACrB;;OAEG;mCAC4B,MAAM,cAAc,MAAM,KAAG,YAAY;IAaxE;;OAEG;mCAC4B,MAAM,cAAc,MAAM,KAAG,YAAY;IAexE;;OAEG;6BACsB,MAAM,WAAW,MAAM,KAAG,SAAS;IAO5D;;OAEG;8BACuB,MAAM,WAAW,MAAM,KAAG,SAAS;CAYhE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc;IACvB;;OAEG;2BACoB,KAAK,cAAc,eAAe,KAAG,OAAO;IAInE;;OAEG;+BACwB,KAAK,eAAe,eAAe,EAAE,KAAG,OAAO;IAI1E;;OAEG;2BACoB,KAAK,uBAAuB,eAAe,EAAE,KAAG,qBAAqB;CAW/F,CAAC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Actor types for state machine validation
|
|
4
|
+
* These types define the actors that can perform state transitions
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.ActorValidator = exports.ActorFactory = exports.ActorPermission = exports.TaskActorType = exports.ProjectActorType = void 0;
|
|
8
|
+
/**
|
|
9
|
+
* Project-specific actor types
|
|
10
|
+
*/
|
|
11
|
+
var ProjectActorType;
|
|
12
|
+
(function (ProjectActorType) {
|
|
13
|
+
ProjectActorType["CONCEPTUALIZER"] = "conceptualizer";
|
|
14
|
+
ProjectActorType["PROJECT_MANAGER"] = "project_manager";
|
|
15
|
+
})(ProjectActorType || (exports.ProjectActorType = ProjectActorType = {}));
|
|
16
|
+
/**
|
|
17
|
+
* Task-specific actor types
|
|
18
|
+
*/
|
|
19
|
+
var TaskActorType;
|
|
20
|
+
(function (TaskActorType) {
|
|
21
|
+
TaskActorType["ASSIGNEE"] = "assignee";
|
|
22
|
+
TaskActorType["REQUESTER"] = "requester";
|
|
23
|
+
})(TaskActorType || (exports.TaskActorType = TaskActorType = {}));
|
|
24
|
+
/**
|
|
25
|
+
* Actor permissions
|
|
26
|
+
*/
|
|
27
|
+
var ActorPermission;
|
|
28
|
+
(function (ActorPermission) {
|
|
29
|
+
// Project permissions
|
|
30
|
+
ActorPermission["PROJECT_CREATE"] = "project:create";
|
|
31
|
+
ActorPermission["PROJECT_UPDATE"] = "project:update";
|
|
32
|
+
ActorPermission["PROJECT_DELETE"] = "project:delete";
|
|
33
|
+
ActorPermission["PROJECT_STATE_TRANSITION"] = "project:state_transition";
|
|
34
|
+
// Task permissions
|
|
35
|
+
ActorPermission["TASK_CREATE"] = "task:create";
|
|
36
|
+
ActorPermission["TASK_UPDATE"] = "task:update";
|
|
37
|
+
ActorPermission["TASK_DELETE"] = "task:delete";
|
|
38
|
+
ActorPermission["TASK_STATE_TRANSITION"] = "task:state_transition";
|
|
39
|
+
// General permissions
|
|
40
|
+
ActorPermission["READ"] = "read";
|
|
41
|
+
ActorPermission["WRITE"] = "write";
|
|
42
|
+
ActorPermission["ADMIN"] = "admin";
|
|
43
|
+
})(ActorPermission || (exports.ActorPermission = ActorPermission = {}));
|
|
44
|
+
/**
|
|
45
|
+
* Actor factory for creating actors with specific permissions
|
|
46
|
+
*/
|
|
47
|
+
exports.ActorFactory = {
|
|
48
|
+
/**
|
|
49
|
+
* Create a conceptualizer actor
|
|
50
|
+
*/
|
|
51
|
+
createConceptualizer: (userId, projectId) => ({
|
|
52
|
+
id: userId,
|
|
53
|
+
type: ProjectActorType.CONCEPTUALIZER,
|
|
54
|
+
permissions: [
|
|
55
|
+
ActorPermission.PROJECT_CREATE,
|
|
56
|
+
ActorPermission.PROJECT_UPDATE,
|
|
57
|
+
ActorPermission.PROJECT_STATE_TRANSITION,
|
|
58
|
+
ActorPermission.READ,
|
|
59
|
+
ActorPermission.WRITE,
|
|
60
|
+
],
|
|
61
|
+
projectId,
|
|
62
|
+
}),
|
|
63
|
+
/**
|
|
64
|
+
* Create a project manager actor
|
|
65
|
+
*/
|
|
66
|
+
createProjectManager: (userId, projectId) => ({
|
|
67
|
+
id: userId,
|
|
68
|
+
type: ProjectActorType.PROJECT_MANAGER,
|
|
69
|
+
permissions: [
|
|
70
|
+
ActorPermission.PROJECT_UPDATE,
|
|
71
|
+
ActorPermission.PROJECT_STATE_TRANSITION,
|
|
72
|
+
ActorPermission.TASK_CREATE,
|
|
73
|
+
ActorPermission.TASK_UPDATE,
|
|
74
|
+
ActorPermission.TASK_STATE_TRANSITION,
|
|
75
|
+
ActorPermission.READ,
|
|
76
|
+
ActorPermission.WRITE,
|
|
77
|
+
],
|
|
78
|
+
projectId,
|
|
79
|
+
}),
|
|
80
|
+
/**
|
|
81
|
+
* Create an assignee actor
|
|
82
|
+
*/
|
|
83
|
+
createAssignee: (userId, taskId) => ({
|
|
84
|
+
id: userId,
|
|
85
|
+
type: TaskActorType.ASSIGNEE,
|
|
86
|
+
permissions: [ActorPermission.TASK_UPDATE, ActorPermission.TASK_STATE_TRANSITION, ActorPermission.READ],
|
|
87
|
+
taskId,
|
|
88
|
+
}),
|
|
89
|
+
/**
|
|
90
|
+
* Create a requester actor
|
|
91
|
+
*/
|
|
92
|
+
createRequester: (userId, taskId) => ({
|
|
93
|
+
id: userId,
|
|
94
|
+
type: TaskActorType.REQUESTER,
|
|
95
|
+
permissions: [
|
|
96
|
+
ActorPermission.TASK_CREATE,
|
|
97
|
+
ActorPermission.TASK_UPDATE,
|
|
98
|
+
ActorPermission.TASK_STATE_TRANSITION,
|
|
99
|
+
ActorPermission.READ,
|
|
100
|
+
ActorPermission.WRITE,
|
|
101
|
+
],
|
|
102
|
+
taskId,
|
|
103
|
+
}),
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Actor validation utilities
|
|
107
|
+
*/
|
|
108
|
+
exports.ActorValidator = {
|
|
109
|
+
/**
|
|
110
|
+
* Check if an actor has a specific permission
|
|
111
|
+
*/
|
|
112
|
+
hasPermission: (actor, permission) => {
|
|
113
|
+
return actor.permissions.includes(permission);
|
|
114
|
+
},
|
|
115
|
+
/**
|
|
116
|
+
* Check if an actor has all required permissions
|
|
117
|
+
*/
|
|
118
|
+
hasAllPermissions: (actor, permissions) => {
|
|
119
|
+
return permissions.every((permission) => actor.permissions.includes(permission));
|
|
120
|
+
},
|
|
121
|
+
/**
|
|
122
|
+
* Validate an actor for a specific action
|
|
123
|
+
*/
|
|
124
|
+
validateActor: (actor, requiredPermissions) => {
|
|
125
|
+
const missingPermissions = requiredPermissions.filter((permission) => !actor.permissions.includes(permission));
|
|
126
|
+
return {
|
|
127
|
+
isValid: missingPermissions.length === 0,
|
|
128
|
+
actor,
|
|
129
|
+
permissions: actor.permissions,
|
|
130
|
+
missingPermissions,
|
|
131
|
+
error: missingPermissions.length > 0 ? `Missing permissions: ${missingPermissions.join(', ')}` : undefined,
|
|
132
|
+
};
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
//# sourceMappingURL=actor.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actor.types.js","sourceRoot":"","sources":["../../src/types/actor.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API-specific types for Biome platform
|
|
3
|
+
*/
|
|
4
|
+
import { ApiResponseType } from '../models/api-response.model';
|
|
5
|
+
export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
|
|
6
|
+
export type HttpStatus = 200 | 201 | 204 | 400 | 401 | 403 | 404 | 409 | 422 | 429 | 500;
|
|
7
|
+
export type ApiEndpoint = {
|
|
8
|
+
method: HttpMethod;
|
|
9
|
+
path: string;
|
|
10
|
+
description: string;
|
|
11
|
+
requiresAuth: boolean;
|
|
12
|
+
requiredRoles?: string[];
|
|
13
|
+
};
|
|
14
|
+
export type ApiRequest<T = any> = {
|
|
15
|
+
body?: T;
|
|
16
|
+
params?: Record<string, string>;
|
|
17
|
+
query?: Record<string, string>;
|
|
18
|
+
headers?: Record<string, string>;
|
|
19
|
+
};
|
|
20
|
+
export type ApiResponse<T = any> = {
|
|
21
|
+
statusCode: HttpStatus;
|
|
22
|
+
type: ApiResponseType;
|
|
23
|
+
data?: T;
|
|
24
|
+
message: string;
|
|
25
|
+
isSuccess: boolean;
|
|
26
|
+
errors?: string[];
|
|
27
|
+
};
|
|
28
|
+
export type ValidationError = {
|
|
29
|
+
field: string;
|
|
30
|
+
message: string;
|
|
31
|
+
value?: any;
|
|
32
|
+
};
|
|
33
|
+
export type ApiValidationResponse = {
|
|
34
|
+
isValid: boolean;
|
|
35
|
+
errors: ValidationError[];
|
|
36
|
+
};
|
|
37
|
+
export type RateLimitInfo = {
|
|
38
|
+
limit: number;
|
|
39
|
+
remaining: number;
|
|
40
|
+
reset: Date;
|
|
41
|
+
retryAfter?: number;
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=api.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.types.d.ts","sourceRoot":"","sources":["../../src/types/api.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;AAErE,MAAM,MAAM,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAEzF,MAAM,MAAM,WAAW,GAAG;IACtB,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,UAAU,CAAC,CAAC,GAAG,GAAG,IAAI;IAC9B,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,GAAG,IAAI;IAC/B,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,GAAG,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,IAAI,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.types.js","sourceRoot":"","sources":["../../src/types/api.types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Common types used across the Biome platform
|
|
3
|
+
*/
|
|
4
|
+
export type PaginationParams = {
|
|
5
|
+
page?: number;
|
|
6
|
+
limit?: number;
|
|
7
|
+
offset?: number;
|
|
8
|
+
};
|
|
9
|
+
export type PaginatedResponse<T> = {
|
|
10
|
+
data: T[];
|
|
11
|
+
pagination: {
|
|
12
|
+
page: number;
|
|
13
|
+
limit: number;
|
|
14
|
+
total: number;
|
|
15
|
+
totalPages: number;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
export type SortParams = {
|
|
19
|
+
field: string;
|
|
20
|
+
direction: 'asc' | 'desc';
|
|
21
|
+
};
|
|
22
|
+
export type FilterParams = {
|
|
23
|
+
[key: string]: any;
|
|
24
|
+
};
|
|
25
|
+
export type QueryParams = PaginationParams & {
|
|
26
|
+
sort?: SortParams;
|
|
27
|
+
filter?: FilterParams;
|
|
28
|
+
search?: string;
|
|
29
|
+
};
|
|
30
|
+
export type Id = number | string;
|
|
31
|
+
export type Timestamp = Date | string;
|
|
32
|
+
export type Optional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
|
|
33
|
+
export type RequiredFields<T, K extends keyof T> = T & Required<Pick<T, K>>;
|
|
34
|
+
export type DeepPartial<T> = {
|
|
35
|
+
[P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
|
|
36
|
+
};
|
|
37
|
+
export type Nullable<T> = T | null;
|
|
38
|
+
export type Undefinable<T> = T | undefined;
|
|
39
|
+
export type NullableUndefinable<T> = T | null | undefined;
|
|
40
|
+
//# sourceMappingURL=common.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.types.d.ts","sourceRoot":"","sources":["../../src/types/common.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI;IAC/B,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,UAAU,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;KACtB,CAAC;CACL,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG;IACzC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,CAAC;AAEjC,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,MAAM,CAAC;AAEtC,MAAM,MAAM,QAAQ,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAE9E,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAE5E,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;KACxB,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAClE,CAAC;AAEF,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAEnC,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;AAE3C,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.types.js","sourceRoot":"","sources":["../../src/types/common.types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|