@critical-path/core 0.48.1 → 0.50.0
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 +4 -0
- package/dist/engine/index.d.ts +21 -1
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +120 -72
- package/dist/engine/index.js.map +1 -1
- package/dist/schemas/index.d.ts +64 -10
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +24 -17
- package/dist/schemas/index.js.map +1 -1
- package/dist/store/sqlite.d.ts +2 -0
- package/dist/store/sqlite.d.ts.map +1 -1
- package/dist/store/sqlite.js +39 -9
- package/dist/store/sqlite.js.map +1 -1
- package/dist/testing/conformance.d.ts.map +1 -1
- package/dist/testing/conformance.js +53 -0
- package/dist/testing/conformance.js.map +1 -1
- package/dist/types/index.d.ts +20 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -190,6 +190,10 @@ await asVic.createTask({ projectId, title: 'x' }); // ForbiddenError if vic is o
|
|
|
190
190
|
|
|
191
191
|
Checks run on `withActor` views (the base engine is trusted). Roles come from `project.members`: users (`{ userId, role }`) or whole teams (`{ teamId, role }`), with roles `viewer` < `contributor` < `project_manager` < `admin`. Project creators become `admin`. Actors with `roles: ['admin']` are superusers. Projects the actor cannot read, or that belong to another tenant, behave as if they do not exist (`NotFoundError`). Lists are filtered. Records created through a view are stamped with the actor's `tenantId`. See the docs site's Authorization page for the full permission matrix and custom policies.
|
|
192
192
|
|
|
193
|
+
#### Custom fields
|
|
194
|
+
|
|
195
|
+
Every entity (projects, workflows, teams, tasks, containers, iterations, deliverables, comments, attachments, time entries, dependencies, webhooks) accepts a `customFields` JSON object on create and update for your own data. Task custom fields are validated against the project's `customFieldDefinitions`; on other entities any JSON object is stored as-is. Updates replace the whole object.
|
|
196
|
+
|
|
193
197
|
#### Webhooks
|
|
194
198
|
|
|
195
199
|
```ts
|
package/dist/engine/index.d.ts
CHANGED
|
@@ -84,6 +84,16 @@ export declare class CriticalPathEngine {
|
|
|
84
84
|
private projectIdOfComment;
|
|
85
85
|
private projectIdOfAttachment;
|
|
86
86
|
/** Strips fields only the engine may set (tenancy) from updates made through a view. */
|
|
87
|
+
/**
|
|
88
|
+
* Removes fields an update may never change: the id and timestamps, the record's owner
|
|
89
|
+
* (`owned`, e.g. `projectId`), and on actor views the tenant. Routers strip these through their
|
|
90
|
+
* schemas; this protects plugin routes and direct engine callers too.
|
|
91
|
+
*/
|
|
92
|
+
private withoutOwnership;
|
|
93
|
+
/** The project, or `NotFoundError`. Checked even when no policy is enforced, so records cannot be orphaned. */
|
|
94
|
+
private requireExistingProject;
|
|
95
|
+
/** A workflow a project may use: it must exist and belong to the project's tenant. */
|
|
96
|
+
private assertUsableWorkflow;
|
|
87
97
|
private withoutTenant;
|
|
88
98
|
private initialize;
|
|
89
99
|
private seedInitialData;
|
|
@@ -127,6 +137,11 @@ export declare class CriticalPathEngine {
|
|
|
127
137
|
actorType?: string;
|
|
128
138
|
};
|
|
129
139
|
}): Promise<Task | null>;
|
|
140
|
+
/**
|
|
141
|
+
* After a task completes or is canceled, unblocks downstream tasks whose upstream tasks are all
|
|
142
|
+
* completed or canceled. Runs on an elevated view, so upstream tasks the caller cannot read still
|
|
143
|
+
* count, and resolves each task's status against its own project's definitions.
|
|
144
|
+
*/
|
|
130
145
|
private checkAndUnblockDownstreamTasks;
|
|
131
146
|
/**
|
|
132
147
|
* Deletes a task and everything that belongs to it: subtasks (or, with `subtasks: 'detach'`,
|
|
@@ -143,10 +158,13 @@ export declare class CriticalPathEngine {
|
|
|
143
158
|
* descendants (which would create a cycle).
|
|
144
159
|
*/
|
|
145
160
|
private assertValidParent;
|
|
161
|
+
/** A task's direct subtasks, paged through the store's parent filter (indexed in SQLite). */
|
|
162
|
+
private childTasks;
|
|
146
163
|
/** Removes records owned by a task; the task's deletion was already authorized. */
|
|
147
164
|
private deleteTaskChildren;
|
|
148
165
|
/** Removes a dependency between two tasks. Requires `task.update` on the dependent task's project. */
|
|
149
166
|
removeDependency(id: string): Promise<boolean>;
|
|
167
|
+
/** Adds a dependency. Adding one that already exists (same tasks and type) returns the existing one. */
|
|
150
168
|
addDependency(dep: Omit<TaskDependency, 'id'>): Promise<TaskDependency>;
|
|
151
169
|
/**
|
|
152
170
|
* Collects every dependency edge reachable upstream from `startTaskId`. A new edge
|
|
@@ -203,6 +221,7 @@ export declare class CriticalPathEngine {
|
|
|
203
221
|
uploaderType?: 'user' | 'agent' | 'system';
|
|
204
222
|
artifactType?: 'plan' | 'spec' | 'deliverable' | 'review' | 'general';
|
|
205
223
|
metadata?: Record<string, unknown>;
|
|
224
|
+
customFields?: Record<string, unknown>;
|
|
206
225
|
}): Promise<Attachment>;
|
|
207
226
|
readAttachmentText(id: string): Promise<string>;
|
|
208
227
|
/**
|
|
@@ -306,11 +325,12 @@ export declare class CriticalPathEngine {
|
|
|
306
325
|
events: Webhook['events'];
|
|
307
326
|
secret?: string;
|
|
308
327
|
active?: boolean;
|
|
328
|
+
customFields?: Record<string, unknown>;
|
|
309
329
|
}): Promise<{
|
|
310
330
|
webhook: PublicWebhook;
|
|
311
331
|
secret: string;
|
|
312
332
|
}>;
|
|
313
|
-
updateWebhook(id: string, updates: Partial<Pick<Webhook, 'name' | 'url' | 'events' | 'active' | 'secret'>>): Promise<PublicWebhook | null>;
|
|
333
|
+
updateWebhook(id: string, updates: Partial<Pick<Webhook, 'name' | 'url' | 'events' | 'active' | 'secret' | 'customFields'>>): Promise<PublicWebhook | null>;
|
|
314
334
|
deleteWebhook(id: string): Promise<boolean>;
|
|
315
335
|
private validateWebhookUrl;
|
|
316
336
|
/** Finds the tenant an event belongs to, from the entity in its payload or its project. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,IAAI,EACJ,KAAK,EAEL,kBAAkB,EAClB,OAAO,EACP,IAAI,EACJ,cAAc,EACd,mBAAmB,EACnB,IAAI,EACJ,aAAa,EACb,SAAS,EACT,OAAO,EACP,UAAU,EACV,kBAAkB,EAClB,eAAe,EAEf,qBAAqB,EACrB,SAAS,EACT,OAAO,EACP,aAAa,EACb,QAAQ,EACR,eAAe,EAEf,WAAW,EACX,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,EACpB,6BAA6B,EAC7B,cAAc,EACd,qBAAqB,EACrB,cAAc,EAId,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EACpB,2BAA2B,EAC5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAiB,KAAK,aAAa,EAAE,KAAK,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACjH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAWrD,OAAO,EACL,cAAc,EAwCf,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAAE,iBAAiB,EAAoB,MAAM,2BAA2B,CAAC;AAIhF,OAAO,EAAuC,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAExF,oDAAoD;AACpD,MAAM,WAAW,4BAA6B,SAAQ,UAAU;IAC9D,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,gFAAgF;IAChF,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAGD,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAM9B,qBAAa,kBAAkB;IAC7B,SAAgB,MAAM,EAAE,kBAAkB,CAAC;IAC3C,SAAgB,KAAK,EAAE,cAAc,CAAC;IACtC,SAAgB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjD,SAAgB,OAAO,EAAE,cAAc,CAAC;IACxC,SAAgB,MAAM,EAAE,cAAc,CAAC;IACvC,+GAA+G;IAC/G,SAAgB,QAAQ,EAAE,iBAAiB,CAAC;IAC5C,SAAgB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAqB;IACzD,2FAA2F;IAC3F,SAAgB,KAAK,CAAC,EAAE,KAAK,CAAC;IAC9B,wFAAwF;IACxF,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAU;gBAErC,MAAM,GAAE,kBAAuB;IAoC3C;;;;;;OAMG;IACH,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,kBAAkB;IAM3C,iEAAiE;YACnD,YAAY;IAQ1B,OAAO,CAAC,SAAS;IAMjB;;;OAGG;IACH,OAAO,KAAK,SAAS,GAEpB;IAED,0FAA0F;IAC1F,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6C;IAE1E,gGAAgG;IAChG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAuB;IAEvD;;;;;OAKG;YACW,aAAa;IAuD3B,qGAAqG;IACrG,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,aAAa;YAKP,SAAS;IAWvB;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwC;IAEvE,OAAO,CAAC,YAAY;IAepB,yFAAyF;YAC3E,eAAe;YAOf,cAAc;IAK5B;;;OAGG;YACW,oBAAoB;YAapB,sBAAsB;IAIpC,kGAAkG;YACpF,cAAc;YAgBd,eAAe;YAIf,kBAAkB;YAMlB,qBAAqB;IAInC,wFAAwF;IACxF,OAAO,CAAC,aAAa;YAMP,UAAU;YASV,eAAe;IAuCvB,YAAY,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAKnC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAKjD,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;IAuB7F,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IA4BhF,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA2B5C,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAiBnE,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAO5D,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAOhE,iCAAiC,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAQpE,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAOjC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAK/C,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IA+BzF,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAyCnF;;;OAGG;IACG,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAInC,gBAAgB;IA6CxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAMnD;;;OAGG;IACG,UAAU,CAAC,KAAK,GAAE,SAAc,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAQ5D,sFAAsF;IAChF,eAAe,CAAC,KAAK,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAW3D,kBAAkB;IAK1B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAMzC,UAAU,CAAC,SAAS,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAgFrD,UAAU,CACd,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,EACtB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACnE,GACA,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;YAiUT,8BAA8B;IAyE5C;;;;OAIG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;KAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhG,gHAAgH;YAClG,aAAa;IA0C3B;;;OAGG;YACW,iBAAiB;IAgB/B,mFAAmF;YACrE,kBAAkB;IAmChC,sGAAsG;IAChG,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAyB9C,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;IA8B7E;;;;OAIG;YACW,2BAA2B;IA0BnC,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAgCpE,qBAAqB,CACzB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,IAAI,CAAC;QAAC,oBAAoB,CAAC,EAAE,MAAM,CAAA;KAAE,GAChE,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAmB/B,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,UAAU,GAAG,QAAQ,CAAC,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IA+C1H,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAK/C,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAM/C,aAAa,CAAC,MAAM,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAKpF,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAKpD,UAAU,CACd,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC,GAAG;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAC1F,OAAO,CAAC,OAAO,CAAC;IA0Bb,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IA4B7E,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAyB3C,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IA8CzG,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAiC5G,cAAc,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAUlI,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;YAM7C,uBAAuB;IAO/B,gBAAgB,CACpB,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GACjG,OAAO,CAAC,UAAU,CAAC;IAwBhB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAsC9C,oBAAoB,CACxB,KAAK,EAAE,eAAe,GAAG;QACvB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;QAC3C,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,QAAQ,GAAG,SAAS,CAAC;QACtE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,GACA,OAAO,CAAC,UAAU,CAAC;IAuChB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiCrD;;;;OAIG;IACG,+BAA+B,CAAC,OAAO,EAAE;QAC7C,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAkBlC,6FAA6F;IAC7F,OAAO,CAAC,mBAAmB;IAgB3B;;;;OAIG;YACW,uBAAuB;IAW/B,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAK3B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAKzC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB7E,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAgBpE,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBxC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAK1D,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAMvD,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;IAkBzG,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAgBjG,gGAAgG;IAC1F,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAIrC,kBAAkB;IAoBhC,gGAAgG;YAClF,mBAAmB;IAW3B,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAK1D,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAMvD,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,WAAW,CAAC;IAkCtE,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAiDzF,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAIvC,oBAAoB;IA6B5B,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAgDhF,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAKtD,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAMnD,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAwBnF,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAuCzF,6FAA6F;IACvF,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAIrC,kBAAkB;IAmBhC;;;;OAIG;IACG,iBAAiB,CAAC,KAAK,EAAE;QAC7B,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCX,qBAAqB,CACzB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,oBAAoB,CAAC;IAsBhC;;;;;;;OAOG;IACG,8BAA8B,CAAC,OAAO,GAAE,4BAAiC,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAsDxH,4EAA4E;IAC5E,OAAO,CAAC,eAAe;IAoBvB,oDAAoD;YACtC,gBAAgB;IAQ9B,sFAAsF;YACxE,UAAU;IAOlB,iBAAiB,CACrB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,cAAc,CAAC;IAyDpB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAwB7D,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAmBpF,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAkBpG,uBAAuB,CAC3B,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,oBAAoB,CAAC;IA4BhC;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAUjC,sFAAsF;YACxE,eAAe;IAS7B,OAAO,CAAC,eAAe;IAIvB,mGAAmG;IAC7F,WAAW,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAMvC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAM3D;;;OAGG;IACG,aAAa,CAAC,KAAK,EAAE;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,aAAa,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAgBjD,aAAa,CACjB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,GAC/E,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAY1B,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOjD,OAAO,CAAC,kBAAkB;IAQ1B,2FAA2F;YAC7E,kBAAkB;CAmBjC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"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"}
|
package/dist/engine/index.js
CHANGED
|
@@ -256,6 +256,31 @@ export class CriticalPathEngine {
|
|
|
256
256
|
return a.projectId ?? (await this.projectIdOfTask(a.taskId)) ?? (await this.projectIdOfComment(a.commentId));
|
|
257
257
|
}
|
|
258
258
|
/** Strips fields only the engine may set (tenancy) from updates made through a view. */
|
|
259
|
+
/**
|
|
260
|
+
* Removes fields an update may never change: the id and timestamps, the record's owner
|
|
261
|
+
* (`owned`, e.g. `projectId`), and on actor views the tenant. Routers strip these through their
|
|
262
|
+
* schemas; this protects plugin routes and direct engine callers too.
|
|
263
|
+
*/
|
|
264
|
+
withoutOwnership(updates, owned = []) {
|
|
265
|
+
const blocked = new Set(['id', 'createdAt', 'updatedAt', ...owned, ...(this.actor ? ['tenantId'] : [])]);
|
|
266
|
+
return Object.fromEntries(Object.entries(updates).filter(([key]) => !blocked.has(key)));
|
|
267
|
+
}
|
|
268
|
+
/** The project, or `NotFoundError`. Checked even when no policy is enforced, so records cannot be orphaned. */
|
|
269
|
+
async requireExistingProject(projectId) {
|
|
270
|
+
const project = await this.store.getProject(projectId);
|
|
271
|
+
if (!project)
|
|
272
|
+
throw new NotFoundError(`Project "${projectId}" not found.`);
|
|
273
|
+
return project;
|
|
274
|
+
}
|
|
275
|
+
/** A workflow a project may use: it must exist and belong to the project's tenant. */
|
|
276
|
+
async assertUsableWorkflow(workflowId, tenantId) {
|
|
277
|
+
if (!workflowId)
|
|
278
|
+
return;
|
|
279
|
+
const workflow = await this.store.getWorkflow(workflowId);
|
|
280
|
+
if (!workflow || (workflow.tenantId ?? undefined) !== (tenantId ?? undefined)) {
|
|
281
|
+
throw new ValidationError(`Workflow "${workflowId}" was not found.`);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
259
284
|
withoutTenant(updates) {
|
|
260
285
|
if (!this.actor || !('tenantId' in updates))
|
|
261
286
|
return updates;
|
|
@@ -393,7 +418,7 @@ export class CriticalPathEngine {
|
|
|
393
418
|
return project.workflow;
|
|
394
419
|
if (project?.workflowId) {
|
|
395
420
|
const wf = await this.store.getWorkflow(project.workflowId);
|
|
396
|
-
if (wf)
|
|
421
|
+
if (wf && (wf.tenantId ?? undefined) === (project.tenantId ?? undefined))
|
|
397
422
|
return wf;
|
|
398
423
|
}
|
|
399
424
|
// Only fall back to workflows from the project's own tenant.
|
|
@@ -443,6 +468,7 @@ export class CriticalPathEngine {
|
|
|
443
468
|
validateCustomFieldDefinitions(project.customFieldDefinitions, this.plugins.getCustomFieldTypes());
|
|
444
469
|
// Views always use the actor's tenant (possibly none); only trusted base-engine calls may set it.
|
|
445
470
|
const input = { ...project, tenantId: this.actor ? this.actor.tenantId : project.tenantId };
|
|
471
|
+
await this.assertUsableWorkflow(input.workflowId, input.tenantId);
|
|
446
472
|
// The creator administers the project they create.
|
|
447
473
|
if (this.actor && this.actor.userId !== 'anonymous' && !input.members?.some((m) => m.userId === this.actor.userId)) {
|
|
448
474
|
input.members = [...(input.members ?? []), { userId: this.actor.userId, role: 'admin' }];
|
|
@@ -483,6 +509,9 @@ export class CriticalPathEngine {
|
|
|
483
509
|
}
|
|
484
510
|
validateCustomFieldDefinitions(updates.customFieldDefinitions, this.plugins.getCustomFieldTypes());
|
|
485
511
|
updates = this.withoutTenant(updates);
|
|
512
|
+
if (updates.workflowId && updates.workflowId !== existing.workflowId) {
|
|
513
|
+
await this.assertUsableWorkflow(updates.workflowId, existing.tenantId);
|
|
514
|
+
}
|
|
486
515
|
const updated = await this.store.updateProject(id, updates);
|
|
487
516
|
if (updated) {
|
|
488
517
|
const now = new Date().toISOString();
|
|
@@ -604,7 +633,7 @@ export class CriticalPathEngine {
|
|
|
604
633
|
throw new ValidationError('Plugins cannot move a task to another project in beforeTaskCreate.');
|
|
605
634
|
}
|
|
606
635
|
const projectId = taskInput.projectId;
|
|
607
|
-
const project = await this.
|
|
636
|
+
const project = await this.requireExistingProject(projectId);
|
|
608
637
|
const workflow = await this.resolveProjectWorkflow(projectId);
|
|
609
638
|
// Merge hook output over the caller's input for every schema-known task field. Unknown keys
|
|
610
639
|
// (id, timestamps, identity fields, anything else) never reach the store.
|
|
@@ -862,7 +891,7 @@ export class CriticalPathEngine {
|
|
|
862
891
|
};
|
|
863
892
|
await this.events.publish(statusEvent);
|
|
864
893
|
const statusDef = resolveStatusDefinition(updated.status, project?.statusDefinitions || workflow?.statuses);
|
|
865
|
-
if (statusDef.category === 'completed') {
|
|
894
|
+
if (statusDef.category === 'completed' || statusDef.category === 'canceled') {
|
|
866
895
|
await this.checkAndUnblockDownstreamTasks(updated);
|
|
867
896
|
}
|
|
868
897
|
}
|
|
@@ -946,66 +975,67 @@ export class CriticalPathEngine {
|
|
|
946
975
|
});
|
|
947
976
|
return updated;
|
|
948
977
|
}
|
|
978
|
+
/**
|
|
979
|
+
* After a task completes or is canceled, unblocks downstream tasks whose upstream tasks are all
|
|
980
|
+
* completed or canceled. Runs on an elevated view, so upstream tasks the caller cannot read still
|
|
981
|
+
* count, and resolves each task's status against its own project's definitions.
|
|
982
|
+
*/
|
|
949
983
|
async checkAndUnblockDownstreamTasks(completedTask) {
|
|
950
984
|
try {
|
|
951
|
-
const
|
|
985
|
+
const engine = this.elevated();
|
|
986
|
+
const graph = await engine.getTaskDependencyGraph(completedTask.id);
|
|
952
987
|
if (!graph.downstreamTasks || graph.downstreamTasks.length === 0)
|
|
953
988
|
return;
|
|
989
|
+
const statusDefsByProject = new Map();
|
|
990
|
+
const categoryOf = async (task) => {
|
|
991
|
+
if (!statusDefsByProject.has(task.projectId)) {
|
|
992
|
+
const project = await this.store.getProject(task.projectId);
|
|
993
|
+
const workflow = await this.resolveProjectWorkflow(task.projectId);
|
|
994
|
+
statusDefsByProject.set(task.projectId, project?.statusDefinitions || workflow?.statuses);
|
|
995
|
+
}
|
|
996
|
+
return resolveStatusDefinition(task.status, statusDefsByProject.get(task.projectId)).category;
|
|
997
|
+
};
|
|
954
998
|
for (const downstream of graph.downstreamTasks) {
|
|
955
|
-
const
|
|
956
|
-
|
|
957
|
-
const downstreamStatusDefs = downstreamProject?.statusDefinitions || downstreamWorkflow?.statuses;
|
|
958
|
-
const downstreamStatusDef = resolveStatusDefinition(downstream.status, downstreamStatusDefs);
|
|
959
|
-
if (downstreamStatusDef.category === 'completed' || downstreamStatusDef.category === 'canceled') {
|
|
999
|
+
const category = await categoryOf(downstream);
|
|
1000
|
+
if (category === 'completed' || category === 'canceled')
|
|
960
1001
|
continue;
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
updates.isBlocked = false;
|
|
972
|
-
updates.blockedReason = null;
|
|
973
|
-
if (downstream.blockedSince) {
|
|
974
|
-
const startMs = new Date(downstream.blockedSince).getTime();
|
|
975
|
-
const endMs = new Date().getTime();
|
|
976
|
-
if (!isNaN(startMs) && !isNaN(endMs) && endMs >= startMs) {
|
|
977
|
-
const blockedSeconds = Math.max(0, (endMs - startMs) / 1000);
|
|
978
|
-
updates.blockedDurationSeconds = (downstream.blockedDurationSeconds ?? 0) + blockedSeconds;
|
|
979
|
-
}
|
|
980
|
-
updates.blockedSince = null;
|
|
981
|
-
}
|
|
1002
|
+
// Nothing to unblock; don't publish task.unblocked for tasks that were never blocked.
|
|
1003
|
+
if (!downstream.isBlocked && !downstream.blockedReason && !downstream.blockedSince)
|
|
1004
|
+
continue;
|
|
1005
|
+
const downstreamGraph = await engine.getTaskDependencyGraph(downstream.id);
|
|
1006
|
+
let allSatisfied = true;
|
|
1007
|
+
for (const up of downstreamGraph.upstreamTasks) {
|
|
1008
|
+
const upCategory = await categoryOf(up);
|
|
1009
|
+
if (upCategory !== 'completed' && upCategory !== 'canceled') {
|
|
1010
|
+
allSatisfied = false;
|
|
1011
|
+
break;
|
|
982
1012
|
}
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
1013
|
+
}
|
|
1014
|
+
if (!allSatisfied)
|
|
1015
|
+
continue;
|
|
1016
|
+
const updates = { isBlocked: false, blockedReason: null };
|
|
1017
|
+
if (downstream.blockedSince) {
|
|
1018
|
+
const startMs = new Date(downstream.blockedSince).getTime();
|
|
1019
|
+
const endMs = Date.now();
|
|
1020
|
+
if (!isNaN(startMs) && endMs >= startMs) {
|
|
1021
|
+
updates.blockedDurationSeconds = (downstream.blockedDurationSeconds ?? 0) + (endMs - startMs) / 1000;
|
|
987
1022
|
}
|
|
988
|
-
|
|
989
|
-
const unblockedEvent = {
|
|
990
|
-
id: `evt_${crypto.randomUUID()}`,
|
|
991
|
-
name: 'task.unblocked',
|
|
992
|
-
aggregateId: downstream.id,
|
|
993
|
-
aggregateType: 'Task',
|
|
994
|
-
occurredAt: now,
|
|
995
|
-
payload: {
|
|
996
|
-
task: updatedDownstream,
|
|
997
|
-
upstreamTaskId: completedTask.id
|
|
998
|
-
}
|
|
999
|
-
};
|
|
1000
|
-
await this.events.publish(unblockedEvent);
|
|
1001
|
-
await this.store.logActivity({
|
|
1002
|
-
projectId: downstream.projectId,
|
|
1003
|
-
taskId: downstream.id,
|
|
1004
|
-
actorId: this.actorIdOr('system'),
|
|
1005
|
-
action: 'task.unblocked',
|
|
1006
|
-
details: { unblockedByTaskId: completedTask.id }
|
|
1007
|
-
});
|
|
1023
|
+
updates.blockedSince = null;
|
|
1008
1024
|
}
|
|
1025
|
+
const updatedDownstream = (await this.store.updateTask(downstream.id, updates)) ?? downstream;
|
|
1026
|
+
await this.publishEvent({
|
|
1027
|
+
name: 'task.unblocked',
|
|
1028
|
+
aggregateId: downstream.id,
|
|
1029
|
+
aggregateType: 'Task',
|
|
1030
|
+
payload: { task: updatedDownstream, upstreamTaskId: completedTask.id }
|
|
1031
|
+
});
|
|
1032
|
+
await this.store.logActivity({
|
|
1033
|
+
projectId: downstream.projectId,
|
|
1034
|
+
taskId: downstream.id,
|
|
1035
|
+
actorId: this.actorIdOr('system'),
|
|
1036
|
+
action: 'task.unblocked',
|
|
1037
|
+
details: { unblockedByTaskId: completedTask.id }
|
|
1038
|
+
});
|
|
1009
1039
|
}
|
|
1010
1040
|
}
|
|
1011
1041
|
catch (err) {
|
|
@@ -1078,12 +1108,23 @@ export class CriticalPathEngine {
|
|
|
1078
1108
|
ancestor = (await this.store.getTask(ancestor))?.parentId;
|
|
1079
1109
|
}
|
|
1080
1110
|
}
|
|
1111
|
+
/** A task's direct subtasks, paged through the store's parent filter (indexed in SQLite). */
|
|
1112
|
+
async childTasks(task) {
|
|
1113
|
+
const children = [];
|
|
1114
|
+
let cursor;
|
|
1115
|
+
do {
|
|
1116
|
+
const page = await this.store.queryTasks({ projectId: task.projectId, parentId: task.id, limit: 500, cursor });
|
|
1117
|
+
children.push(...page.items);
|
|
1118
|
+
cursor = page.nextCursor;
|
|
1119
|
+
} while (cursor);
|
|
1120
|
+
return children;
|
|
1121
|
+
}
|
|
1081
1122
|
/** Removes records owned by a task; the task's deletion was already authorized. */
|
|
1082
1123
|
async deleteTaskChildren(task, subtasks, deleting) {
|
|
1083
1124
|
const cascade = this.elevated();
|
|
1084
1125
|
// Parent cycles stored before parents were validated: skip tasks this cascade is already deleting.
|
|
1085
1126
|
deleting.add(task.id);
|
|
1086
|
-
const children = (await this.
|
|
1127
|
+
const children = (await this.childTasks(task)).filter((t) => !deleting.has(t.id));
|
|
1087
1128
|
for (const child of children) {
|
|
1088
1129
|
if (subtasks === 'delete') {
|
|
1089
1130
|
await cascade.deleteTaskNow(child.id, { subtasks }, deleting);
|
|
@@ -1136,15 +1177,17 @@ export class CriticalPathEngine {
|
|
|
1136
1177
|
return removed;
|
|
1137
1178
|
}
|
|
1138
1179
|
// --- Task Dependencies & Graph ---
|
|
1180
|
+
/** Adds a dependency. Adding one that already exists (same tasks and type) returns the existing one. */
|
|
1139
1181
|
async addDependency(dep) {
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1182
|
+
const [task, upstream] = await Promise.all([this.getTask(dep.taskId), this.getTask(dep.dependsOnTaskId)]);
|
|
1183
|
+
if (!task)
|
|
1184
|
+
throw new NotFoundError(`Task "${dep.taskId}" not found.`);
|
|
1185
|
+
if (!upstream)
|
|
1186
|
+
throw new NotFoundError(`Task "${dep.dependsOnTaskId}" not found.`);
|
|
1187
|
+
await this.requireProjectAccess('task.update', task.projectId);
|
|
1188
|
+
const duplicate = (await this.store.getDependencies(dep.taskId)).find((d) => d.taskId === dep.taskId && d.dependsOnTaskId === dep.dependsOnTaskId && d.type === dep.type);
|
|
1189
|
+
if (duplicate)
|
|
1190
|
+
return duplicate;
|
|
1148
1191
|
// Enforce Directed Acyclic Graph (DAG) Invariant
|
|
1149
1192
|
const reachableDeps = await this.collectUpstreamDependencies(dep.dependsOnTaskId);
|
|
1150
1193
|
const cycleCheck = detectDependencyCycle(reachableDeps, dep);
|
|
@@ -1328,6 +1371,7 @@ export class CriticalPathEngine {
|
|
|
1328
1371
|
type: 'comment',
|
|
1329
1372
|
ownerId: existing.authorId
|
|
1330
1373
|
});
|
|
1374
|
+
updates = this.withoutOwnership(updates, ['taskId', 'authorId', 'authorType', 'reactions']);
|
|
1331
1375
|
const mentions = updates.mentions ?? (updates.content ? extractMentions(updates.content) : undefined);
|
|
1332
1376
|
const toUpdate = mentions !== undefined ? { ...updates, mentions } : updates;
|
|
1333
1377
|
const updated = await this.store.updateComment(id, toUpdate);
|
|
@@ -1552,7 +1596,8 @@ export class CriticalPathEngine {
|
|
|
1552
1596
|
url: uploadResult.url,
|
|
1553
1597
|
storageKey: uploadResult.storageKey,
|
|
1554
1598
|
artifactType: input.artifactType,
|
|
1555
|
-
metadata: input.metadata
|
|
1599
|
+
metadata: input.metadata,
|
|
1600
|
+
...(input.customFields ? { customFields: input.customFields } : {})
|
|
1556
1601
|
});
|
|
1557
1602
|
}
|
|
1558
1603
|
async readAttachmentText(id) {
|
|
@@ -1669,7 +1714,7 @@ export class CriticalPathEngine {
|
|
|
1669
1714
|
if (!existing)
|
|
1670
1715
|
return null;
|
|
1671
1716
|
await this.requireWorkspaceAccess('workspace.manage');
|
|
1672
|
-
const updated = await this.store.updateTeam(id, this.
|
|
1717
|
+
const updated = await this.store.updateTeam(id, this.withoutOwnership(updates));
|
|
1673
1718
|
if (updated) {
|
|
1674
1719
|
await this.publishEvent({
|
|
1675
1720
|
name: 'team.updated',
|
|
@@ -1710,6 +1755,7 @@ export class CriticalPathEngine {
|
|
|
1710
1755
|
}
|
|
1711
1756
|
async createContainer(container) {
|
|
1712
1757
|
await this.requireProjectAccess('plan.manage', container.projectId);
|
|
1758
|
+
await this.requireExistingProject(container.projectId);
|
|
1713
1759
|
const created = await this.store.createContainer(container);
|
|
1714
1760
|
const now = new Date().toISOString();
|
|
1715
1761
|
const event = {
|
|
@@ -1728,7 +1774,7 @@ export class CriticalPathEngine {
|
|
|
1728
1774
|
if (!existing)
|
|
1729
1775
|
return null;
|
|
1730
1776
|
await this.requireProjectAccess('plan.manage', existing.projectId);
|
|
1731
|
-
const updated = await this.store.updateContainer(id, updates);
|
|
1777
|
+
const updated = await this.store.updateContainer(id, this.withoutOwnership(updates, ['projectId']));
|
|
1732
1778
|
if (updated) {
|
|
1733
1779
|
await this.publishEvent({
|
|
1734
1780
|
name: 'container.updated',
|
|
@@ -1784,7 +1830,7 @@ export class CriticalPathEngine {
|
|
|
1784
1830
|
}
|
|
1785
1831
|
async createDeliverable(input) {
|
|
1786
1832
|
await this.requireProjectAccess('plan.manage', input.projectId);
|
|
1787
|
-
const project = await this.
|
|
1833
|
+
const project = await this.requireExistingProject(input.projectId);
|
|
1788
1834
|
if (project?.customFieldDefinitions && input.customFields) {
|
|
1789
1835
|
validateCustomFieldValues(project.customFieldDefinitions, input.customFields, this.plugins.getCustomFieldTypes());
|
|
1790
1836
|
}
|
|
@@ -1820,7 +1866,7 @@ export class CriticalPathEngine {
|
|
|
1820
1866
|
if (updates.status && updates.status === 'delivered' && !existing.deliveredAt && !updates.deliveredAt) {
|
|
1821
1867
|
updates.deliveredAt = new Date().toISOString();
|
|
1822
1868
|
}
|
|
1823
|
-
const updated = await this.store.updateDeliverable(id, updates);
|
|
1869
|
+
const updated = await this.store.updateDeliverable(id, this.withoutOwnership(updates, ['projectId']));
|
|
1824
1870
|
if (updated) {
|
|
1825
1871
|
const now = new Date().toISOString();
|
|
1826
1872
|
if (updates.status && updates.status !== existing.status) {
|
|
@@ -1944,6 +1990,7 @@ export class CriticalPathEngine {
|
|
|
1944
1990
|
}
|
|
1945
1991
|
async createIteration(iteration) {
|
|
1946
1992
|
await this.requireProjectAccess('plan.manage', iteration.projectId);
|
|
1993
|
+
await this.requireExistingProject(iteration.projectId);
|
|
1947
1994
|
const created = await this.store.createIteration(iteration);
|
|
1948
1995
|
await this.publishEvent({
|
|
1949
1996
|
name: 'iteration.created',
|
|
@@ -1970,7 +2017,7 @@ export class CriticalPathEngine {
|
|
|
1970
2017
|
if (!existing)
|
|
1971
2018
|
return null;
|
|
1972
2019
|
await this.requireProjectAccess('plan.manage', existing.projectId);
|
|
1973
|
-
const updated = await this.store.updateIteration(id, updates);
|
|
2020
|
+
const updated = await this.store.updateIteration(id, this.withoutOwnership(updates, ['projectId']));
|
|
1974
2021
|
if (updated) {
|
|
1975
2022
|
await this.publishEvent({
|
|
1976
2023
|
name: 'iteration.updated',
|
|
@@ -2351,7 +2398,8 @@ export class CriticalPathEngine {
|
|
|
2351
2398
|
events: input.events,
|
|
2352
2399
|
secret,
|
|
2353
2400
|
active: input.active ?? true,
|
|
2354
|
-
tenantId: this.actor?.tenantId
|
|
2401
|
+
tenantId: this.actor?.tenantId,
|
|
2402
|
+
...(input.customFields ? { customFields: input.customFields } : {})
|
|
2355
2403
|
});
|
|
2356
2404
|
this.webhooks.invalidate();
|
|
2357
2405
|
return { webhook: this.toPublicWebhook(created), secret };
|
|
@@ -2361,8 +2409,8 @@ export class CriticalPathEngine {
|
|
|
2361
2409
|
return null;
|
|
2362
2410
|
if (updates.url)
|
|
2363
2411
|
this.validateWebhookUrl(updates.url);
|
|
2364
|
-
const { name, url, events, active, secret } = updates;
|
|
2365
|
-
const updated = await this.store.updateWebhook(id, Object.fromEntries(Object.entries({ name, url, events, active, secret }).filter(([, v]) => v !== undefined)));
|
|
2412
|
+
const { name, url, events, active, secret, customFields } = updates;
|
|
2413
|
+
const updated = await this.store.updateWebhook(id, Object.fromEntries(Object.entries({ name, url, events, active, secret, customFields }).filter(([, v]) => v !== undefined)));
|
|
2366
2414
|
this.webhooks.invalidate();
|
|
2367
2415
|
return updated ? this.toPublicWebhook(updated) : null;
|
|
2368
2416
|
}
|