@kindgi/platform 0.1.8 → 0.1.9-rc.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/dist/in-memory/index.d.ts +1 -0
- package/dist/in-memory/index.d.ts.map +1 -1
- package/dist/in-memory/index.js.map +1 -1
- package/dist/in-memory/org-binding.d.ts +26 -1
- package/dist/in-memory/org-binding.d.ts.map +1 -1
- package/dist/in-memory/org-binding.js +9 -2
- package/dist/in-memory/org-binding.js.map +1 -1
- package/dist/in-memory/project-binding.d.ts +8 -1
- package/dist/in-memory/project-binding.d.ts.map +1 -1
- package/dist/in-memory/project-binding.js +34 -16
- package/dist/in-memory/project-binding.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/org-binding.d.ts +24 -10
- package/dist/org-binding.d.ts.map +1 -1
- package/dist/project-binding.d.ts +31 -6
- package/dist/project-binding.d.ts.map +1 -1
- package/dist/tenant-hierarchy-binding.d.ts +20 -1
- package/dist/tenant-hierarchy-binding.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/in-memory/index.ts +1 -0
- package/src/in-memory/org-binding.ts +25 -3
- package/src/in-memory/project-binding.ts +46 -16
- package/src/index.ts +6 -2
- package/src/org-binding.ts +27 -13
- package/src/project-binding.ts +33 -6
- package/src/tenant-hierarchy-binding.ts +22 -1
- package/tests/in-memory-org-binding.test.ts +25 -1
- package/tests/in-memory-project-binding.test.ts +25 -1
- package/tests/org-binding.conformance.ts +49 -3
- package/tests/project-binding.conformance.ts +126 -1
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* durable implementations of the same binding interfaces.
|
|
5
5
|
*/
|
|
6
6
|
export { makeInMemoryOrgBinding } from './org-binding.js';
|
|
7
|
+
export type { InMemoryOrgBindingOptions } from './org-binding.js';
|
|
7
8
|
export { makeInMemoryTeamBinding } from './team-binding.js';
|
|
8
9
|
export { makeInMemoryProjectBinding } from './project-binding.js';
|
|
9
10
|
export type { InMemoryHierarchyOptions } from './project-binding.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/in-memory/index.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,YAAY,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/in-memory/index.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,YAAY,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,YAAY,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/in-memory/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC;;;;GAIG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/in-memory/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC;;;;GAIG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -1,6 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `makeInMemoryOrgBinding` — reference in-memory implementation of
|
|
3
|
+
* `OrgBinding`. Used by tests + dev-time defaults. Not durable —
|
|
4
|
+
* production deployments supply their own implementation.
|
|
5
|
+
*
|
|
6
|
+
* Storage: a single `Map<OrgId, Org>` keyed by orgId. Every operation
|
|
7
|
+
* filters by `tenantId` at the row level — a lookup from tenant A
|
|
8
|
+
* against an orgId that exists in tenant B returns `undefined` (not a
|
|
9
|
+
* hit). Cross-tenant leakage is a hard guardrail, asserted by the
|
|
10
|
+
* conformance suite. Slugs are unique within a tenant: `create` and
|
|
11
|
+
* `update` resolve to `slug-conflict` for a slug another org holds.
|
|
12
|
+
* `delete` tombstones: a deleted org reads as unknown and frees its slug.
|
|
13
|
+
*/
|
|
14
|
+
import type { OrgId, TenantId } from '@kindgi/types';
|
|
1
15
|
import type { OrgBinding } from '../org-binding.js';
|
|
16
|
+
/**
|
|
17
|
+
* - `environmentOrderOf`: the id of the environment order the org is the
|
|
18
|
+
* parent of, or `undefined` for none. Given, `delete` refuses an org that
|
|
19
|
+
* is the parent of an order (`org-has-environment-order`), as the durable
|
|
20
|
+
* binding does under its per-tenant lock; absent, no org holds one. Compose
|
|
21
|
+
* this to the environment-order binding wherever both share a store so the
|
|
22
|
+
* guard is never silently unset.
|
|
23
|
+
*/
|
|
24
|
+
export interface InMemoryOrgBindingOptions {
|
|
25
|
+
readonly environmentOrderOf?: (tenantId: TenantId, orgId: OrgId) => string | undefined | Promise<string | undefined>;
|
|
26
|
+
}
|
|
2
27
|
/**
|
|
3
28
|
* Factory for the in-memory `OrgBinding`.
|
|
4
29
|
*/
|
|
5
|
-
export declare function makeInMemoryOrgBinding(): OrgBinding;
|
|
30
|
+
export declare function makeInMemoryOrgBinding(options?: InMemoryOrgBindingOptions): OrgBinding;
|
|
6
31
|
//# sourceMappingURL=org-binding.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"org-binding.d.ts","sourceRoot":"","sources":["../../src/in-memory/org-binding.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"org-binding.d.ts","sourceRoot":"","sources":["../../src/in-memory/org-binding.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAQ,QAAQ,EAAa,MAAM,eAAe,CAAC;AAEtE,OAAO,KAAK,EACV,UAAU,EAKX,MAAM,mBAAmB,CAAC;AAW3B;;;;;;;GAOG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAC5B,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,KACT,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CACvD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,GAAE,yBAA8B,GAAG,UAAU,CA0F1F"}
|
|
@@ -9,7 +9,7 @@ function nextOrgId() {
|
|
|
9
9
|
/**
|
|
10
10
|
* Factory for the in-memory `OrgBinding`.
|
|
11
11
|
*/
|
|
12
|
-
export function makeInMemoryOrgBinding() {
|
|
12
|
+
export function makeInMemoryOrgBinding(options = {}) {
|
|
13
13
|
const rows = new Map();
|
|
14
14
|
/** Tombstoned orgs: kept, and read as unknown. */
|
|
15
15
|
const deleted = new Set();
|
|
@@ -90,8 +90,15 @@ export function makeInMemoryOrgBinding() {
|
|
|
90
90
|
async delete(tenantId, orgId) {
|
|
91
91
|
// Idempotent: a no-op when absent, already deleted or in another tenant.
|
|
92
92
|
if (live(tenantId, orgId) === undefined)
|
|
93
|
-
return;
|
|
93
|
+
return { kind: 'ok' };
|
|
94
|
+
// A live org that is the parent of an environment order isn't deleted;
|
|
95
|
+
// a tenant admin clears the order first. No await between the answer
|
|
96
|
+
// and the tombstone — one step, as the durable binding's lock makes it.
|
|
97
|
+
const orderId = await options.environmentOrderOf?.(tenantId, orgId);
|
|
98
|
+
if (orderId !== undefined)
|
|
99
|
+
return { kind: 'org-has-environment-order', orderId };
|
|
94
100
|
deleted.add(orgId);
|
|
101
|
+
return { kind: 'ok' };
|
|
95
102
|
},
|
|
96
103
|
};
|
|
97
104
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"org-binding.js","sourceRoot":"","sources":["../../src/in-memory/org-binding.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;
|
|
1
|
+
{"version":3,"file":"org-binding.js","sourceRoot":"","sources":["../../src/in-memory/org-binding.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* slug is unique within its org, and a project without an org's among
|
|
15
15
|
* the tenant's projects without one (`slug-conflict`).
|
|
16
16
|
*/
|
|
17
|
-
import type { OrgId, TenantId } from '@kindgi/types';
|
|
17
|
+
import type { OrgId, ProjectId, TenantId } from '@kindgi/types';
|
|
18
18
|
import type { ProjectBinding, ProjectMembershipBinding } from '../project-binding.js';
|
|
19
19
|
import type { TeamProjectGrantBinding } from '../team-project-grant-binding.js';
|
|
20
20
|
/**
|
|
@@ -25,10 +25,17 @@ import type { TeamProjectGrantBinding } from '../team-project-grant-binding.js';
|
|
|
25
25
|
* (`TenantLimits.projectsInProduction`), read where it's kept;
|
|
26
26
|
* `undefined` for none. Read synchronously, so `setProduction` reads,
|
|
27
27
|
* counts and changes in one step, as a database's lock makes it.
|
|
28
|
+
* - `environmentOrderOf`: the id of the environment order a project is a
|
|
29
|
+
* member of, or `undefined` for none. Given, `delete` and an `orgId` move
|
|
30
|
+
* refuse a project that is in an order (`project-in-environment-order`), as
|
|
31
|
+
* the durable binding does under its per-tenant lock; absent, no project is
|
|
32
|
+
* in an order. Compose this to the environment-order binding's `orderOf`
|
|
33
|
+
* wherever both share a store so the guard is never silently unset.
|
|
28
34
|
*/
|
|
29
35
|
export interface InMemoryHierarchyOptions {
|
|
30
36
|
readonly orgExists?: (tenantId: TenantId, orgId: OrgId) => boolean | Promise<boolean>;
|
|
31
37
|
readonly productionLimit?: (tenantId: TenantId) => number | undefined;
|
|
38
|
+
readonly environmentOrderOf?: (tenantId: TenantId, projectId: ProjectId) => string | undefined | Promise<string | undefined>;
|
|
32
39
|
}
|
|
33
40
|
/**
|
|
34
41
|
* Combined factory — returns the three project-related bindings that
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-binding.d.ts","sourceRoot":"","sources":["../../src/in-memory/project-binding.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAU,KAAK,
|
|
1
|
+
{"version":3,"file":"project-binding.d.ts","sourceRoot":"","sources":["../../src/in-memory/project-binding.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAU,KAAK,EAAQ,SAAS,EAAU,QAAQ,EAAU,MAAM,eAAe,CAAC;AAE9F,OAAO,KAAK,EACV,cAAc,EAMd,wBAAwB,EAIzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAGV,uBAAuB,EACxB,MAAM,kCAAkC,CAAC;AAwB1C;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtF,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,MAAM,GAAG,SAAS,CAAC;IACtE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAC5B,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,KACjB,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CACvD;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,GAAE,wBAA6B,GAAG;IAClF,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,wBAAwB,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC;CAC1C,CA2XA"}
|
|
@@ -28,6 +28,20 @@ export function makeInMemoryProjectBinding(options = {}) {
|
|
|
28
28
|
return undefined;
|
|
29
29
|
return p;
|
|
30
30
|
}
|
|
31
|
+
// Cascade — a deleted project's direct memberships + team grants drop with it.
|
|
32
|
+
function cascadeProjectDelete(projectId) {
|
|
33
|
+
for (const key of membershipRows.keys()) {
|
|
34
|
+
if (key.startsWith(`${projectId}::`))
|
|
35
|
+
membershipRows.delete(key);
|
|
36
|
+
}
|
|
37
|
+
for (let i = grantOrder.length - 1; i >= 0; i -= 1) {
|
|
38
|
+
const key = grantOrder[i];
|
|
39
|
+
if (key?.endsWith(`::${projectId}`)) {
|
|
40
|
+
grantRows.delete(key);
|
|
41
|
+
grantOrder.splice(i, 1);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
31
45
|
/** `limit-reached` when the tenant's projects in production are at its limit or past it. */
|
|
32
46
|
function limitReached(tenantId) {
|
|
33
47
|
const limit = options.productionLimit?.(tenantId);
|
|
@@ -133,6 +147,16 @@ export function makeInMemoryProjectBinding(options = {}) {
|
|
|
133
147
|
if (patch.orgId !== undefined) {
|
|
134
148
|
nextOrgId = patch.orgId === null ? undefined : patch.orgId;
|
|
135
149
|
}
|
|
150
|
+
// A move to another parent is refused while the project is in an
|
|
151
|
+
// environment order; a rename, slug or description change is not. The
|
|
152
|
+
// parent changes exactly when `nextOrgId` differs from the current org,
|
|
153
|
+
// and the order guard takes precedence over `org-not-found`.
|
|
154
|
+
if (patch.orgId !== undefined && nextOrgId !== row.orgId) {
|
|
155
|
+
const orderId = await options.environmentOrderOf?.(tenantId, projectId);
|
|
156
|
+
if (orderId !== undefined) {
|
|
157
|
+
return { kind: 'project-in-environment-order', orderId };
|
|
158
|
+
}
|
|
159
|
+
}
|
|
136
160
|
if (patch.orgId !== undefined &&
|
|
137
161
|
patch.orgId !== null &&
|
|
138
162
|
(await options.orgExists?.(tenantId, patch.orgId)) === false) {
|
|
@@ -182,24 +206,18 @@ export function makeInMemoryProjectBinding(options = {}) {
|
|
|
182
206
|
},
|
|
183
207
|
async delete(tenantId, projectId) {
|
|
184
208
|
const row = findProjectInTenant(tenantId, projectId);
|
|
209
|
+
// An id that names no project is `ok` — deleting is idempotent.
|
|
185
210
|
if (row === undefined)
|
|
186
|
-
return;
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
if (key.startsWith(`${projectId}::`)) {
|
|
191
|
-
membershipRows.delete(key);
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
for (let i = grantOrder.length - 1; i >= 0; i -= 1) {
|
|
195
|
-
const key = grantOrder[i];
|
|
196
|
-
if (key === undefined)
|
|
197
|
-
continue;
|
|
198
|
-
if (key.endsWith(`::${projectId}`)) {
|
|
199
|
-
grantRows.delete(key);
|
|
200
|
-
grantOrder.splice(i, 1);
|
|
201
|
-
}
|
|
211
|
+
return { kind: 'ok' };
|
|
212
|
+
const orderId = await options.environmentOrderOf?.(tenantId, projectId);
|
|
213
|
+
if (orderId !== undefined) {
|
|
214
|
+
return { kind: 'project-in-environment-order', orderId };
|
|
202
215
|
}
|
|
216
|
+
// No await between the order answer and the delete — one step, as the
|
|
217
|
+
// durable binding's per-tenant lock makes it.
|
|
218
|
+
projectRows.delete(projectId);
|
|
219
|
+
cascadeProjectDelete(projectId);
|
|
220
|
+
return { kind: 'ok' };
|
|
203
221
|
},
|
|
204
222
|
};
|
|
205
223
|
const memberships = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-binding.js","sourceRoot":"","sources":["../../src/in-memory/project-binding.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"project-binding.js","sourceRoot":"","sources":["../../src/in-memory/project-binding.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
export type * from './scope.js';
|
|
9
9
|
export type * from './types.js';
|
|
10
10
|
export { scopeKey } from './scope.js';
|
|
11
|
-
export type { OrgBinding, OrgCreateOutcome,
|
|
11
|
+
export type { OrgBinding, OrgCreateOutcome, OrgDeleteOutcome, OrgListFilter, OrgUpdateOutcome, } from './org-binding.js';
|
|
12
12
|
export type { TeamBinding, TeamCreateOutcome, TeamListFilter, TeamMembershipAddInput, TeamMembershipAddOutcome, TeamMembershipBinding, TeamMembershipUpdateRoleOutcome, TeamUpdateOutcome, } from './team-binding.js';
|
|
13
|
-
export type { ProjectBinding, ProjectCreateOutcome, ProjectListFilter, ProjectMembershipAddInput, ProjectMembershipAddOutcome, ProjectMembershipBinding, ProjectMembershipUpdateRoleOutcome, ProjectProductionOutcome, ProjectUpdateOutcome, } from './project-binding.js';
|
|
13
|
+
export type { ProjectBinding, ProjectCreateOutcome, ProjectDeleteOutcome, ProjectListFilter, ProjectMembershipAddInput, ProjectMembershipAddOutcome, ProjectMembershipBinding, ProjectMembershipUpdateRoleOutcome, ProjectProductionOutcome, ProjectUpdateOutcome, } from './project-binding.js';
|
|
14
14
|
export type { TeamProjectGrant, TeamProjectGrantAddInput, TeamProjectGrantBinding, } from './team-project-grant-binding.js';
|
|
15
15
|
export { makeInMemoryOrgBinding, makeInMemoryTeamBinding, makeInMemoryProjectBinding, } from './in-memory/index.js';
|
|
16
|
-
export type { InMemoryHierarchyOptions } from './in-memory/index.js';
|
|
16
|
+
export type { InMemoryHierarchyOptions, InMemoryOrgBindingOptions, } from './in-memory/index.js';
|
|
17
17
|
export type { AddProjectMemberError, AddProjectMemberParams, AddTeamMemberError, AddTeamMemberParams, AddTeamProjectGrantError, AddTeamProjectGrantResult, CreateOrgError, CreateOrgParams, CreateProjectError, CreateProjectParams, CreateTeamError, CreateTeamParams, DeleteTeamParams, MembershipWriteError, RemoveProjectMemberParams, RemoveTeamMemberParams, RemoveTeamProjectGrantParams, TeamProjectGrantParams, TeamProjectGrantUpdateRoleOutcome, TenantHierarchyBinding, TenantLimits, TenantSummary, UpdateProjectMemberRoleParams, UpdateTeamMemberRoleParams, } from './tenant-hierarchy-binding.js';
|
|
18
18
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AAEH,mBAAmB,YAAY,CAAC;AAChC,mBAAmB,YAAY,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,YAAY,EACV,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AAEH,mBAAmB,YAAY,CAAC;AAChC,mBAAmB,YAAY,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,YAAY,EACV,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EACrB,+BAA+B,EAC/B,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,yBAAyB,EACzB,2BAA2B,EAC3B,wBAAwB,EACxB,kCAAkC,EAClC,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,gBAAgB,EAChB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,EACzB,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,yBAAyB,EACzB,sBAAsB,EACtB,4BAA4B,EAC5B,sBAAsB,EACtB,iCAAiC,EACjC,sBAAsB,EACtB,YAAY,EACZ,aAAa,EACb,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,+BAA+B,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAYjC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAYjC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAqCtC,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC"}
|
package/dist/org-binding.d.ts
CHANGED
|
@@ -77,20 +77,34 @@ export interface OrgBinding {
|
|
|
77
77
|
* whose projects leave a deleted org (the Kindgi runtime's: they
|
|
78
78
|
* become projects without an org) answers `slug-conflict` instead
|
|
79
79
|
* when one of them has the slug of a project that has no org, and
|
|
80
|
-
* deletes nothing.
|
|
81
|
-
*
|
|
80
|
+
* deletes nothing. A storage that holds environment orders (the Kindgi
|
|
81
|
+
* runtime's) answers `org-has-environment-order` instead, naming the
|
|
82
|
+
* order, when the org is the parent of one, and deletes nothing: a tenant
|
|
83
|
+
* admin clears the order first. `ok`: the org is deleted, or wasn't there
|
|
84
|
+
* (or was already deleted — idempotent).
|
|
82
85
|
*/
|
|
83
|
-
delete(tenantId: TenantId, orgId: OrgId): Promise<
|
|
86
|
+
delete(tenantId: TenantId, orgId: OrgId): Promise<OrgDeleteOutcome>;
|
|
84
87
|
}
|
|
85
|
-
/**
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
88
|
+
/** What `OrgBinding.delete` did. */
|
|
89
|
+
export type OrgDeleteOutcome = {
|
|
90
|
+
readonly kind: 'ok';
|
|
91
|
+
} | {
|
|
92
|
+
/**
|
|
93
|
+
* The org's projects would leave it with `slugs` that projects without
|
|
94
|
+
* an org already have. Rename or move them first. Nothing is deleted.
|
|
95
|
+
*/
|
|
91
96
|
readonly kind: 'slug-conflict';
|
|
92
97
|
readonly slugs: readonly string[];
|
|
93
|
-
}
|
|
98
|
+
} | {
|
|
99
|
+
/**
|
|
100
|
+
* The org is the parent of an environment order, so deleting it would
|
|
101
|
+
* orphan the order. Refused until a tenant admin clears the order
|
|
102
|
+
* (`PUT /v1/environment-orders/orgs/{orgId}` with `[]`). The answer
|
|
103
|
+
* names the order (`details.orderId`). Nothing is deleted.
|
|
104
|
+
*/
|
|
105
|
+
readonly kind: 'org-has-environment-order';
|
|
106
|
+
readonly orderId: string;
|
|
107
|
+
};
|
|
94
108
|
/** What `OrgBinding.create` did. */
|
|
95
109
|
export type OrgCreateOutcome = {
|
|
96
110
|
readonly kind: 'ok';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"org-binding.d.ts","sourceRoot":"","sources":["../src/org-binding.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEnE,OAAO,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAEzD;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAc,SAAQ,MAAM;IAC3C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACrE;;;;OAIG;IACH,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;IAChE;;;;OAIG;IACH,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACpE;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACrF
|
|
1
|
+
{"version":3,"file":"org-binding.d.ts","sourceRoot":"","sources":["../src/org-binding.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEnE,OAAO,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAEzD;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAc,SAAQ,MAAM;IAC3C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACrE;;;;OAIG;IACH,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;IAChE;;;;OAIG;IACH,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACpE;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACrF;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACrE;AAED,oCAAoC;AACpC,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;CAAE,GACvB;IACE;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC,GACD;IACE;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,2BAA2B,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEN,oCAAoC;AACpC,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAC9C;IACE,uDAAuD;IACvD,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAAC;AAEN,oCAAoC;AACpC,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;CAAE,GACvB;IACE,yCAAyC;IACzC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;CAChC,GACD;IACE,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAAC"}
|
|
@@ -73,16 +73,22 @@ export interface ProjectBinding {
|
|
|
73
73
|
* Partially update a `Project`. `ProjectPatch.orgId` supports
|
|
74
74
|
* `null` to re-assign the project out of any org. Resolves to
|
|
75
75
|
* `project-not-found` when no project has `projectId` in the tenant,
|
|
76
|
-
*
|
|
76
|
+
* to `slug-conflict` when `patch.slug` is another project's slug, and to
|
|
77
|
+
* `project-in-environment-order` when the patch would change `orgId` for a
|
|
78
|
+
* project that is a member of an environment order (clear it first). A
|
|
79
|
+
* patch that leaves `orgId` untouched — a rename, slug or description
|
|
80
|
+
* change — is never refused on that ground.
|
|
77
81
|
*/
|
|
78
82
|
update(tenantId: TenantId, projectId: ProjectId, patch: ProjectPatch): Promise<ProjectUpdateOutcome>;
|
|
79
83
|
/**
|
|
80
|
-
* Delete a `Project`.
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
+
* Delete a `Project`. Resolves to `project-in-environment-order` when the
|
|
85
|
+
* project is a member of an environment order — the delete does not happen;
|
|
86
|
+
* clear it from the order first. Deleting an id that names no project is
|
|
87
|
+
* `ok` (idempotent). What happens to content rows that still reference a
|
|
88
|
+
* deleted project is the storage layer's concern; the in-memory adapter
|
|
89
|
+
* removes the project's direct memberships and team grants with it.
|
|
84
90
|
*/
|
|
85
|
-
delete(tenantId: TenantId, projectId: ProjectId): Promise<
|
|
91
|
+
delete(tenantId: TenantId, projectId: ProjectId): Promise<ProjectDeleteOutcome>;
|
|
86
92
|
/**
|
|
87
93
|
* Put the project in production (`production: true`), or take it out.
|
|
88
94
|
* Optional: without it, the production route answers 501
|
|
@@ -195,6 +201,25 @@ export type ProjectUpdateOutcome = {
|
|
|
195
201
|
*/
|
|
196
202
|
readonly kind: 'org-not-found';
|
|
197
203
|
readonly orgId: OrgId;
|
|
204
|
+
} | {
|
|
205
|
+
/**
|
|
206
|
+
* The project is a member of an environment order, so it can't be
|
|
207
|
+
* moved to another parent. Clear it from the order first. Only a patch
|
|
208
|
+
* that changes `orgId` is refused; a rename or slug change is not.
|
|
209
|
+
*/
|
|
210
|
+
readonly kind: 'project-in-environment-order';
|
|
211
|
+
readonly orderId: string;
|
|
212
|
+
};
|
|
213
|
+
/** What `ProjectBinding.delete` did. */
|
|
214
|
+
export type ProjectDeleteOutcome = {
|
|
215
|
+
readonly kind: 'ok';
|
|
216
|
+
} | {
|
|
217
|
+
/**
|
|
218
|
+
* The project is a member of an environment order, so it can't be
|
|
219
|
+
* deleted. Clear it from the order first.
|
|
220
|
+
*/
|
|
221
|
+
readonly kind: 'project-in-environment-order';
|
|
222
|
+
readonly orderId: string;
|
|
198
223
|
};
|
|
199
224
|
/** What `ProjectMembershipBinding.add` did (`ok` when already a member, too). */
|
|
200
225
|
export type ProjectMembershipAddOutcome = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-binding.d.ts","sourceRoot":"","sources":["../src/project-binding.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEjG,OAAO,KAAK,EACV,OAAO,EACP,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB;;;;GAIG;AACH,MAAM,WAAW,iBAAkB,SAAQ,MAAM;IAC/C,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;;;OAOG;IACH,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC7E;;;OAGG;IACH,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IAC5E;;;OAGG;IACH,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5E;;;OAGG;IACH,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IAC7D
|
|
1
|
+
{"version":3,"file":"project-binding.d.ts","sourceRoot":"","sources":["../src/project-binding.ts"],"names":[],"mappings":"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"}
|
|
@@ -82,6 +82,13 @@ export type AddTeamMemberError = {
|
|
|
82
82
|
readonly code: 'membership-exists';
|
|
83
83
|
readonly message: string;
|
|
84
84
|
readonly role: TeamRole;
|
|
85
|
+
} | {
|
|
86
|
+
/**
|
|
87
|
+
* A person a site signs in (`createdBy: site:<id>`): they hold only
|
|
88
|
+
* the grants their site's sign-in writes, never one given here.
|
|
89
|
+
*/
|
|
90
|
+
readonly code: 'site-person-grants-managed';
|
|
91
|
+
readonly message: string;
|
|
85
92
|
} | {
|
|
86
93
|
readonly code: 'add-failed';
|
|
87
94
|
readonly message: string;
|
|
@@ -96,6 +103,13 @@ export type AddProjectMemberError = {
|
|
|
96
103
|
readonly code: 'membership-exists';
|
|
97
104
|
readonly message: string;
|
|
98
105
|
readonly role: ProjectRole;
|
|
106
|
+
} | {
|
|
107
|
+
/**
|
|
108
|
+
* A person a site signs in (`createdBy: site:<id>`): they hold only
|
|
109
|
+
* the grants their site's sign-in writes, never one given here.
|
|
110
|
+
*/
|
|
111
|
+
readonly code: 'site-person-grants-managed';
|
|
112
|
+
readonly message: string;
|
|
99
113
|
} | {
|
|
100
114
|
readonly code: 'add-failed';
|
|
101
115
|
readonly message: string;
|
|
@@ -163,7 +177,12 @@ export interface DeleteTeamParams {
|
|
|
163
177
|
}
|
|
164
178
|
/** A membership change that couldn't be written (the row and its tuple both left as they were). */
|
|
165
179
|
export interface MembershipWriteError {
|
|
166
|
-
|
|
180
|
+
/**
|
|
181
|
+
* `write-failed`: the row and its tuple couldn't be changed together.
|
|
182
|
+
* `site-person-grants-managed`: the person is one a site signs in, who
|
|
183
|
+
* holds only the grants their site's sign-in writes.
|
|
184
|
+
*/
|
|
185
|
+
readonly code: 'write-failed' | 'site-person-grants-managed';
|
|
167
186
|
readonly message: string;
|
|
168
187
|
readonly cause?: unknown;
|
|
169
188
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant-hierarchy-binding.d.ts","sourceRoot":"","sources":["../src/tenant-hierarchy-binding.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tenant-hierarchy-binding.d.ts","sourceRoot":"","sources":["../src/tenant-hierarchy-binding.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACxF,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EACV,OAAO,EACP,WAAW,EACX,WAAW,EACX,eAAe,EACf,QAAQ,EACR,QAAQ,EACT,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GACtF;IAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAE3F,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;CACzB;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE;AACxF,4EAA4E;GAC1E;IAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GACnF;IAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAE3F,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;CAC5B;AAED,MAAM,MAAM,kBAAkB,GAC1B;IAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE;AACxF,4EAA4E;GAC1E;IAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GACnF;IAAE,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GACzF;IAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAE3F,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;CAC5B;AAED,MAAM,MAAM,kBAAkB,GAC1B;IACE,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,GACD;IACE,sEAAsE;IACtE,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;CACzB,GACD;IACE;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,4BAA4B,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAExF,MAAM,MAAM,qBAAqB,GAC7B;IACE,6CAA6C;IAC7C,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,GACD;IACE,sEAAsE;IACtE,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;CAC5B,GACD;IACE;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,4BAA4B,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAExF,4EAA4E;AAC5E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,sCAAsC;AACtC,MAAM,WAAW,0BAA2B,SAAQ,sBAAsB;IACxE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;CACzB;AAED,MAAM,WAAW,6BAA8B,SAAQ,yBAAyB;IAC9E,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;CAC5B;AAED,oDAAoD;AACpD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;CAChC;AAED,iDAAiD;AACjD,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,wBAAwB,GAChC;IAAE,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAChE;IAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC7D;IAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAE1F,mGAAmG;AACnG,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;CAClC;AAED,MAAM,MAAM,iCAAiC,GACzC;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAA;CAAE,GACzD;IAAE,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAA;CAAE,GACtC;IAAE,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAA;CAAE,CAAC;AAE9C,4BAA4B;AAC5B,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,mGAAmG;AACnG,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,4BAA4B,CAAC;IAC7D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;CACrD;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,oFAAoF;IACpF,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,wFAAwF;IACxF,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAC3C,qEAAqE;IACrE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,yEAAyE;IACzE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,4FAA4F;IAC5F,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,6FAA6F;IAC7F,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC;;;;;OAKG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACxC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;QAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;KAAE,EAAE,cAAc,CAAC,CAAC,CAAC;IAC/F,UAAU,CACR,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,MAAM,CAAC;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,eAAe,CAAC,CAAC,CAAC;IACjE,aAAa,CACX,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,MAAM,CAAC;QAAE,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;KAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAC1E,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACtF,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAC/F;;;;;;OAMG;IACH,gBAAgB,CAAC,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAC/F,+FAA+F;IAC/F,oBAAoB,CAAC,CACnB,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAAC,MAAM,CAAC,+BAA+B,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAC1E,iGAAiG;IACjG,mBAAmB,CAAC,CAClB,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAC/C,yGAAyG;IACzG,uBAAuB,CAAC,CACtB,MAAM,EAAE,6BAA6B,GACpC,OAAO,CAAC,MAAM,CAAC,kCAAkC,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAC7E;;;;;;OAMG;IACH,mBAAmB,CAAC,CAClB,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,MAAM,CAAC,yBAAyB,EAAE,wBAAwB,CAAC,CAAC,CAAC;IACxE,kEAAkE;IAClE,0BAA0B,CAAC,CACzB,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,MAAM,CAAC,iCAAiC,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAC5E,yFAAyF;IACzF,sBAAsB,CAAC,CACrB,MAAM,EAAE,4BAA4B,GACnC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAC/C;;;;;;OAMG;IACH,UAAU,CAAC,CACT,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,MAAM,CAAC;QAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;KAAE,EAAE,oBAAoB,CAAC,CAAC,CAAC;IACxE;;;;OAIG;IACH,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;CAC9D"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kindgi/platform",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.9-rc.0",
|
|
4
4
|
"description": "Multi-tenant hierarchy primitives — the Tenant → Org → Team → Project + User type surface, the `Scope` discriminated access-boundary, binding interfaces for orgs, teams, projects, memberships, team-project grants and the tenant hierarchy, and reference in-memory adapters.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"README.md"
|
|
31
31
|
],
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@kindgi/types": "0.1.
|
|
33
|
+
"@kindgi/types": "0.1.9-rc.0"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@types/node": "^22.10.5",
|
package/src/in-memory/index.ts
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
export { makeInMemoryOrgBinding } from './org-binding.js';
|
|
11
|
+
export type { InMemoryOrgBindingOptions } from './org-binding.js';
|
|
11
12
|
export { makeInMemoryTeamBinding } from './team-binding.js';
|
|
12
13
|
export { makeInMemoryProjectBinding } from './project-binding.js';
|
|
13
14
|
export type { InMemoryHierarchyOptions } from './project-binding.js';
|
|
@@ -20,6 +20,7 @@ import type { OrgId, Page, TenantId, Timestamp } from '@kindgi/types';
|
|
|
20
20
|
import type {
|
|
21
21
|
OrgBinding,
|
|
22
22
|
OrgCreateOutcome,
|
|
23
|
+
OrgDeleteOutcome,
|
|
23
24
|
OrgListFilter,
|
|
24
25
|
OrgUpdateOutcome,
|
|
25
26
|
} from '../org-binding.js';
|
|
@@ -33,10 +34,25 @@ function nextOrgId(): OrgId {
|
|
|
33
34
|
return `org-${orgIdCounter}` as OrgId;
|
|
34
35
|
}
|
|
35
36
|
|
|
37
|
+
/**
|
|
38
|
+
* - `environmentOrderOf`: the id of the environment order the org is the
|
|
39
|
+
* parent of, or `undefined` for none. Given, `delete` refuses an org that
|
|
40
|
+
* is the parent of an order (`org-has-environment-order`), as the durable
|
|
41
|
+
* binding does under its per-tenant lock; absent, no org holds one. Compose
|
|
42
|
+
* this to the environment-order binding wherever both share a store so the
|
|
43
|
+
* guard is never silently unset.
|
|
44
|
+
*/
|
|
45
|
+
export interface InMemoryOrgBindingOptions {
|
|
46
|
+
readonly environmentOrderOf?: (
|
|
47
|
+
tenantId: TenantId,
|
|
48
|
+
orgId: OrgId,
|
|
49
|
+
) => string | undefined | Promise<string | undefined>;
|
|
50
|
+
}
|
|
51
|
+
|
|
36
52
|
/**
|
|
37
53
|
* Factory for the in-memory `OrgBinding`.
|
|
38
54
|
*/
|
|
39
|
-
export function makeInMemoryOrgBinding(): OrgBinding {
|
|
55
|
+
export function makeInMemoryOrgBinding(options: InMemoryOrgBindingOptions = {}): OrgBinding {
|
|
40
56
|
const rows = new Map<OrgId, Org>();
|
|
41
57
|
/** Tombstoned orgs: kept, and read as unknown. */
|
|
42
58
|
const deleted = new Set<OrgId>();
|
|
@@ -114,10 +130,16 @@ export function makeInMemoryOrgBinding(): OrgBinding {
|
|
|
114
130
|
return { kind: 'ok' };
|
|
115
131
|
},
|
|
116
132
|
|
|
117
|
-
async delete(tenantId: TenantId, orgId: OrgId): Promise<
|
|
133
|
+
async delete(tenantId: TenantId, orgId: OrgId): Promise<OrgDeleteOutcome> {
|
|
118
134
|
// Idempotent: a no-op when absent, already deleted or in another tenant.
|
|
119
|
-
if (live(tenantId, orgId) === undefined) return;
|
|
135
|
+
if (live(tenantId, orgId) === undefined) return { kind: 'ok' };
|
|
136
|
+
// A live org that is the parent of an environment order isn't deleted;
|
|
137
|
+
// a tenant admin clears the order first. No await between the answer
|
|
138
|
+
// and the tombstone — one step, as the durable binding's lock makes it.
|
|
139
|
+
const orderId = await options.environmentOrderOf?.(tenantId, orgId);
|
|
140
|
+
if (orderId !== undefined) return { kind: 'org-has-environment-order', orderId };
|
|
120
141
|
deleted.add(orgId);
|
|
142
|
+
return { kind: 'ok' };
|
|
121
143
|
},
|
|
122
144
|
};
|
|
123
145
|
}
|
|
@@ -23,6 +23,7 @@ import type { Filter, OrgId, Page, ProjectId, TeamId, TenantId, UserId } from '@
|
|
|
23
23
|
import type {
|
|
24
24
|
ProjectBinding,
|
|
25
25
|
ProjectCreateOutcome,
|
|
26
|
+
ProjectDeleteOutcome,
|
|
26
27
|
ProjectListFilter,
|
|
27
28
|
ProjectMembershipAddInput,
|
|
28
29
|
ProjectMembershipAddOutcome,
|
|
@@ -67,10 +68,20 @@ function grantKey(teamId: TeamId, projectId: ProjectId): string {
|
|
|
67
68
|
* (`TenantLimits.projectsInProduction`), read where it's kept;
|
|
68
69
|
* `undefined` for none. Read synchronously, so `setProduction` reads,
|
|
69
70
|
* counts and changes in one step, as a database's lock makes it.
|
|
71
|
+
* - `environmentOrderOf`: the id of the environment order a project is a
|
|
72
|
+
* member of, or `undefined` for none. Given, `delete` and an `orgId` move
|
|
73
|
+
* refuse a project that is in an order (`project-in-environment-order`), as
|
|
74
|
+
* the durable binding does under its per-tenant lock; absent, no project is
|
|
75
|
+
* in an order. Compose this to the environment-order binding's `orderOf`
|
|
76
|
+
* wherever both share a store so the guard is never silently unset.
|
|
70
77
|
*/
|
|
71
78
|
export interface InMemoryHierarchyOptions {
|
|
72
79
|
readonly orgExists?: (tenantId: TenantId, orgId: OrgId) => boolean | Promise<boolean>;
|
|
73
80
|
readonly productionLimit?: (tenantId: TenantId) => number | undefined;
|
|
81
|
+
readonly environmentOrderOf?: (
|
|
82
|
+
tenantId: TenantId,
|
|
83
|
+
projectId: ProjectId,
|
|
84
|
+
) => string | undefined | Promise<string | undefined>;
|
|
74
85
|
}
|
|
75
86
|
|
|
76
87
|
/**
|
|
@@ -95,6 +106,20 @@ export function makeInMemoryProjectBinding(options: InMemoryHierarchyOptions = {
|
|
|
95
106
|
return p;
|
|
96
107
|
}
|
|
97
108
|
|
|
109
|
+
// Cascade — a deleted project's direct memberships + team grants drop with it.
|
|
110
|
+
function cascadeProjectDelete(projectId: ProjectId): void {
|
|
111
|
+
for (const key of membershipRows.keys()) {
|
|
112
|
+
if (key.startsWith(`${projectId}::`)) membershipRows.delete(key);
|
|
113
|
+
}
|
|
114
|
+
for (let i = grantOrder.length - 1; i >= 0; i -= 1) {
|
|
115
|
+
const key = grantOrder[i];
|
|
116
|
+
if (key?.endsWith(`::${projectId}`)) {
|
|
117
|
+
grantRows.delete(key);
|
|
118
|
+
grantOrder.splice(i, 1);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
98
123
|
/** `limit-reached` when the tenant's projects in production are at its limit or past it. */
|
|
99
124
|
function limitReached(tenantId: TenantId): ProjectProductionOutcome | undefined {
|
|
100
125
|
const limit = options.productionLimit?.(tenantId);
|
|
@@ -207,6 +232,16 @@ export function makeInMemoryProjectBinding(options: InMemoryHierarchyOptions = {
|
|
|
207
232
|
if (patch.orgId !== undefined) {
|
|
208
233
|
nextOrgId = patch.orgId === null ? undefined : patch.orgId;
|
|
209
234
|
}
|
|
235
|
+
// A move to another parent is refused while the project is in an
|
|
236
|
+
// environment order; a rename, slug or description change is not. The
|
|
237
|
+
// parent changes exactly when `nextOrgId` differs from the current org,
|
|
238
|
+
// and the order guard takes precedence over `org-not-found`.
|
|
239
|
+
if (patch.orgId !== undefined && nextOrgId !== row.orgId) {
|
|
240
|
+
const orderId = await options.environmentOrderOf?.(tenantId, projectId);
|
|
241
|
+
if (orderId !== undefined) {
|
|
242
|
+
return { kind: 'project-in-environment-order', orderId };
|
|
243
|
+
}
|
|
244
|
+
}
|
|
210
245
|
if (
|
|
211
246
|
patch.orgId !== undefined &&
|
|
212
247
|
patch.orgId !== null &&
|
|
@@ -258,24 +293,19 @@ export function makeInMemoryProjectBinding(options: InMemoryHierarchyOptions = {
|
|
|
258
293
|
return { kind: 'ok', productionSince: next.productionSince ?? null, changed: true };
|
|
259
294
|
},
|
|
260
295
|
|
|
261
|
-
async delete(tenantId, projectId): Promise<
|
|
296
|
+
async delete(tenantId, projectId): Promise<ProjectDeleteOutcome> {
|
|
262
297
|
const row = findProjectInTenant(tenantId, projectId);
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
membershipRows.delete(key);
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
for (let i = grantOrder.length - 1; i >= 0; i -= 1) {
|
|
272
|
-
const key = grantOrder[i];
|
|
273
|
-
if (key === undefined) continue;
|
|
274
|
-
if (key.endsWith(`::${projectId}`)) {
|
|
275
|
-
grantRows.delete(key);
|
|
276
|
-
grantOrder.splice(i, 1);
|
|
277
|
-
}
|
|
298
|
+
// An id that names no project is `ok` — deleting is idempotent.
|
|
299
|
+
if (row === undefined) return { kind: 'ok' };
|
|
300
|
+
const orderId = await options.environmentOrderOf?.(tenantId, projectId);
|
|
301
|
+
if (orderId !== undefined) {
|
|
302
|
+
return { kind: 'project-in-environment-order', orderId };
|
|
278
303
|
}
|
|
304
|
+
// No await between the order answer and the delete — one step, as the
|
|
305
|
+
// durable binding's per-tenant lock makes it.
|
|
306
|
+
projectRows.delete(projectId);
|
|
307
|
+
cascadeProjectDelete(projectId);
|
|
308
|
+
return { kind: 'ok' };
|
|
279
309
|
},
|
|
280
310
|
};
|
|
281
311
|
|
package/src/index.ts
CHANGED
|
@@ -16,8 +16,8 @@ export { scopeKey } from './scope.js';
|
|
|
16
16
|
export type {
|
|
17
17
|
OrgBinding,
|
|
18
18
|
OrgCreateOutcome,
|
|
19
|
+
OrgDeleteOutcome,
|
|
19
20
|
OrgListFilter,
|
|
20
|
-
OrgDeleteConflict,
|
|
21
21
|
OrgUpdateOutcome,
|
|
22
22
|
} from './org-binding.js';
|
|
23
23
|
export type {
|
|
@@ -33,6 +33,7 @@ export type {
|
|
|
33
33
|
export type {
|
|
34
34
|
ProjectBinding,
|
|
35
35
|
ProjectCreateOutcome,
|
|
36
|
+
ProjectDeleteOutcome,
|
|
36
37
|
ProjectListFilter,
|
|
37
38
|
ProjectMembershipAddInput,
|
|
38
39
|
ProjectMembershipAddOutcome,
|
|
@@ -52,7 +53,10 @@ export {
|
|
|
52
53
|
makeInMemoryTeamBinding,
|
|
53
54
|
makeInMemoryProjectBinding,
|
|
54
55
|
} from './in-memory/index.js';
|
|
55
|
-
export type {
|
|
56
|
+
export type {
|
|
57
|
+
InMemoryHierarchyOptions,
|
|
58
|
+
InMemoryOrgBindingOptions,
|
|
59
|
+
} from './in-memory/index.js';
|
|
56
60
|
|
|
57
61
|
export type {
|
|
58
62
|
AddProjectMemberError,
|
package/src/org-binding.ts
CHANGED
|
@@ -84,22 +84,36 @@ export interface OrgBinding {
|
|
|
84
84
|
* whose projects leave a deleted org (the Kindgi runtime's: they
|
|
85
85
|
* become projects without an org) answers `slug-conflict` instead
|
|
86
86
|
* when one of them has the slug of a project that has no org, and
|
|
87
|
-
* deletes nothing.
|
|
88
|
-
*
|
|
87
|
+
* deletes nothing. A storage that holds environment orders (the Kindgi
|
|
88
|
+
* runtime's) answers `org-has-environment-order` instead, naming the
|
|
89
|
+
* order, when the org is the parent of one, and deletes nothing: a tenant
|
|
90
|
+
* admin clears the order first. `ok`: the org is deleted, or wasn't there
|
|
91
|
+
* (or was already deleted — idempotent).
|
|
89
92
|
*/
|
|
90
|
-
|
|
91
|
-
delete(tenantId: TenantId, orgId: OrgId): Promise<void | OrgDeleteConflict>;
|
|
93
|
+
delete(tenantId: TenantId, orgId: OrgId): Promise<OrgDeleteOutcome>;
|
|
92
94
|
}
|
|
93
95
|
|
|
94
|
-
/**
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
96
|
+
/** What `OrgBinding.delete` did. */
|
|
97
|
+
export type OrgDeleteOutcome =
|
|
98
|
+
| { readonly kind: 'ok' }
|
|
99
|
+
| {
|
|
100
|
+
/**
|
|
101
|
+
* The org's projects would leave it with `slugs` that projects without
|
|
102
|
+
* an org already have. Rename or move them first. Nothing is deleted.
|
|
103
|
+
*/
|
|
104
|
+
readonly kind: 'slug-conflict';
|
|
105
|
+
readonly slugs: readonly string[];
|
|
106
|
+
}
|
|
107
|
+
| {
|
|
108
|
+
/**
|
|
109
|
+
* The org is the parent of an environment order, so deleting it would
|
|
110
|
+
* orphan the order. Refused until a tenant admin clears the order
|
|
111
|
+
* (`PUT /v1/environment-orders/orgs/{orgId}` with `[]`). The answer
|
|
112
|
+
* names the order (`details.orderId`). Nothing is deleted.
|
|
113
|
+
*/
|
|
114
|
+
readonly kind: 'org-has-environment-order';
|
|
115
|
+
readonly orderId: string;
|
|
116
|
+
};
|
|
103
117
|
|
|
104
118
|
/** What `OrgBinding.create` did. */
|
|
105
119
|
export type OrgCreateOutcome =
|
package/src/project-binding.ts
CHANGED
|
@@ -87,7 +87,11 @@ export interface ProjectBinding {
|
|
|
87
87
|
* Partially update a `Project`. `ProjectPatch.orgId` supports
|
|
88
88
|
* `null` to re-assign the project out of any org. Resolves to
|
|
89
89
|
* `project-not-found` when no project has `projectId` in the tenant,
|
|
90
|
-
*
|
|
90
|
+
* to `slug-conflict` when `patch.slug` is another project's slug, and to
|
|
91
|
+
* `project-in-environment-order` when the patch would change `orgId` for a
|
|
92
|
+
* project that is a member of an environment order (clear it first). A
|
|
93
|
+
* patch that leaves `orgId` untouched — a rename, slug or description
|
|
94
|
+
* change — is never refused on that ground.
|
|
91
95
|
*/
|
|
92
96
|
update(
|
|
93
97
|
tenantId: TenantId,
|
|
@@ -95,12 +99,14 @@ export interface ProjectBinding {
|
|
|
95
99
|
patch: ProjectPatch,
|
|
96
100
|
): Promise<ProjectUpdateOutcome>;
|
|
97
101
|
/**
|
|
98
|
-
* Delete a `Project`.
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
+
* Delete a `Project`. Resolves to `project-in-environment-order` when the
|
|
103
|
+
* project is a member of an environment order — the delete does not happen;
|
|
104
|
+
* clear it from the order first. Deleting an id that names no project is
|
|
105
|
+
* `ok` (idempotent). What happens to content rows that still reference a
|
|
106
|
+
* deleted project is the storage layer's concern; the in-memory adapter
|
|
107
|
+
* removes the project's direct memberships and team grants with it.
|
|
102
108
|
*/
|
|
103
|
-
delete(tenantId: TenantId, projectId: ProjectId): Promise<
|
|
109
|
+
delete(tenantId: TenantId, projectId: ProjectId): Promise<ProjectDeleteOutcome>;
|
|
104
110
|
/**
|
|
105
111
|
* Put the project in production (`production: true`), or take it out.
|
|
106
112
|
* Optional: without it, the production route answers 501
|
|
@@ -232,6 +238,27 @@ export type ProjectUpdateOutcome =
|
|
|
232
238
|
*/
|
|
233
239
|
readonly kind: 'org-not-found';
|
|
234
240
|
readonly orgId: OrgId;
|
|
241
|
+
}
|
|
242
|
+
| {
|
|
243
|
+
/**
|
|
244
|
+
* The project is a member of an environment order, so it can't be
|
|
245
|
+
* moved to another parent. Clear it from the order first. Only a patch
|
|
246
|
+
* that changes `orgId` is refused; a rename or slug change is not.
|
|
247
|
+
*/
|
|
248
|
+
readonly kind: 'project-in-environment-order';
|
|
249
|
+
readonly orderId: string;
|
|
250
|
+
};
|
|
251
|
+
|
|
252
|
+
/** What `ProjectBinding.delete` did. */
|
|
253
|
+
export type ProjectDeleteOutcome =
|
|
254
|
+
| { readonly kind: 'ok' }
|
|
255
|
+
| {
|
|
256
|
+
/**
|
|
257
|
+
* The project is a member of an environment order, so it can't be
|
|
258
|
+
* deleted. Clear it from the order first.
|
|
259
|
+
*/
|
|
260
|
+
readonly kind: 'project-in-environment-order';
|
|
261
|
+
readonly orderId: string;
|
|
235
262
|
};
|
|
236
263
|
|
|
237
264
|
/** What `ProjectMembershipBinding.add` did (`ok` when already a member, too). */
|
|
@@ -88,6 +88,14 @@ export type AddTeamMemberError =
|
|
|
88
88
|
readonly message: string;
|
|
89
89
|
readonly role: TeamRole;
|
|
90
90
|
}
|
|
91
|
+
| {
|
|
92
|
+
/**
|
|
93
|
+
* A person a site signs in (`createdBy: site:<id>`): they hold only
|
|
94
|
+
* the grants their site's sign-in writes, never one given here.
|
|
95
|
+
*/
|
|
96
|
+
readonly code: 'site-person-grants-managed';
|
|
97
|
+
readonly message: string;
|
|
98
|
+
}
|
|
91
99
|
| { readonly code: 'add-failed'; readonly message: string; readonly cause?: unknown };
|
|
92
100
|
|
|
93
101
|
export type AddProjectMemberError =
|
|
@@ -102,6 +110,14 @@ export type AddProjectMemberError =
|
|
|
102
110
|
readonly message: string;
|
|
103
111
|
readonly role: ProjectRole;
|
|
104
112
|
}
|
|
113
|
+
| {
|
|
114
|
+
/**
|
|
115
|
+
* A person a site signs in (`createdBy: site:<id>`): they hold only
|
|
116
|
+
* the grants their site's sign-in writes, never one given here.
|
|
117
|
+
*/
|
|
118
|
+
readonly code: 'site-person-grants-managed';
|
|
119
|
+
readonly message: string;
|
|
120
|
+
}
|
|
105
121
|
| { readonly code: 'add-failed'; readonly message: string; readonly cause?: unknown };
|
|
106
122
|
|
|
107
123
|
/** Which direct membership to remove: the user's on the team or project. */
|
|
@@ -165,7 +181,12 @@ export interface DeleteTeamParams {
|
|
|
165
181
|
|
|
166
182
|
/** A membership change that couldn't be written (the row and its tuple both left as they were). */
|
|
167
183
|
export interface MembershipWriteError {
|
|
168
|
-
|
|
184
|
+
/**
|
|
185
|
+
* `write-failed`: the row and its tuple couldn't be changed together.
|
|
186
|
+
* `site-person-grants-managed`: the person is one a site signs in, who
|
|
187
|
+
* holds only the grants their site's sign-in writes.
|
|
188
|
+
*/
|
|
189
|
+
readonly code: 'write-failed' | 'site-person-grants-managed';
|
|
169
190
|
readonly message: string;
|
|
170
191
|
readonly cause?: unknown;
|
|
171
192
|
}
|
|
@@ -6,7 +6,31 @@
|
|
|
6
6
|
* in-memory reference adapter.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
+
import type { OrgId, TenantId } from '@kindgi/types';
|
|
10
|
+
|
|
9
11
|
import { makeInMemoryOrgBinding } from '../src/in-memory/org-binding.js';
|
|
10
12
|
import { runOrgBindingConformance } from './org-binding.conformance.js';
|
|
11
13
|
|
|
12
|
-
runOrgBindingConformance(makeInMemoryOrgBinding, 'InMemoryOrgBinding'
|
|
14
|
+
runOrgBindingConformance(makeInMemoryOrgBinding, 'InMemoryOrgBinding', {
|
|
15
|
+
makeGuardedBinding: () => {
|
|
16
|
+
// The order each org is the parent of, keyed by tenant + org: the test's
|
|
17
|
+
// own store, which the binding reads through `environmentOrderOf` — the
|
|
18
|
+
// in-memory stand-in for a `project_stages` row.
|
|
19
|
+
const orders = new Map<string, string>();
|
|
20
|
+
const key = (tenantId: TenantId, orgId: OrgId) => `${tenantId}::${orgId}`;
|
|
21
|
+
const binding = makeInMemoryOrgBinding({
|
|
22
|
+
environmentOrderOf: (tenantId, orgId) => orders.get(key(tenantId, orgId)),
|
|
23
|
+
});
|
|
24
|
+
return {
|
|
25
|
+
binding,
|
|
26
|
+
putInEnvironmentOrder: async (tenantId: TenantId, orgId: OrgId) => {
|
|
27
|
+
const orderId = `org:${orgId}`;
|
|
28
|
+
orders.set(key(tenantId, orgId), orderId);
|
|
29
|
+
return orderId;
|
|
30
|
+
},
|
|
31
|
+
clearEnvironmentOrder: async (tenantId: TenantId, orgId: OrgId) => {
|
|
32
|
+
orders.delete(key(tenantId, orgId));
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
},
|
|
36
|
+
});
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* in-memory reference adapter.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import type { TenantId } from '@kindgi/types';
|
|
9
|
+
import type { ProjectId, TenantId } from '@kindgi/types';
|
|
10
10
|
|
|
11
11
|
import { makeInMemoryProjectBinding } from '../src/in-memory/project-binding.js';
|
|
12
12
|
import {
|
|
@@ -39,3 +39,27 @@ runProjectBindingConformance(
|
|
|
39
39
|
'InMemoryProjectBinding (checking orgs)',
|
|
40
40
|
{ checksOrgs: true },
|
|
41
41
|
);
|
|
42
|
+
// With the environment-order guard: a project put in an order can't be
|
|
43
|
+
// deleted or moved to another parent; a rename or slug change still works.
|
|
44
|
+
runProjectBindingConformance(
|
|
45
|
+
() => {
|
|
46
|
+
const orders = new Map<string, string>();
|
|
47
|
+
const key = (tenantId: TenantId, projectId: ProjectId) => `${tenantId}::${projectId}`;
|
|
48
|
+
return {
|
|
49
|
+
...makeInMemoryProjectBinding({
|
|
50
|
+
environmentOrderOf: (tenantId, projectId) => orders.get(key(tenantId, projectId)),
|
|
51
|
+
}),
|
|
52
|
+
putInEnvironmentOrder: (tenantId, projectId) => {
|
|
53
|
+
const orderId = `tenant:${tenantId}`;
|
|
54
|
+
orders.set(key(tenantId, projectId), orderId);
|
|
55
|
+
return Promise.resolve(orderId);
|
|
56
|
+
},
|
|
57
|
+
clearEnvironmentOrder: (tenantId, projectId) => {
|
|
58
|
+
orders.delete(key(tenantId, projectId));
|
|
59
|
+
return Promise.resolve();
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
},
|
|
63
|
+
'InMemoryProjectBinding (environment-order guard)',
|
|
64
|
+
{ checksEnvironmentOrders: true },
|
|
65
|
+
);
|
|
@@ -42,6 +42,20 @@ async function createOrg(b: OrgBinding, tenantId: TenantId, spec: OrgSpec): Prom
|
|
|
42
42
|
export function runOrgBindingConformance(
|
|
43
43
|
makeBinding: () => OrgBinding,
|
|
44
44
|
label = 'OrgBinding',
|
|
45
|
+
options: {
|
|
46
|
+
/**
|
|
47
|
+
* The binding refuses to delete an org that is the parent of an
|
|
48
|
+
* environment order (`org-has-environment-order`). `makeGuardedBinding`
|
|
49
|
+
* returns a binding and helpers that put an org in an order and clear it,
|
|
50
|
+
* sharing the binding's store — the in-memory adapter a map, the durable
|
|
51
|
+
* one `project_stages` rows — so the one guard suite runs on both.
|
|
52
|
+
*/
|
|
53
|
+
readonly makeGuardedBinding?: () => {
|
|
54
|
+
readonly binding: OrgBinding;
|
|
55
|
+
readonly putInEnvironmentOrder: (tenantId: TenantId, orgId: OrgId) => Promise<string>;
|
|
56
|
+
readonly clearEnvironmentOrder: (tenantId: TenantId, orgId: OrgId) => Promise<void>;
|
|
57
|
+
};
|
|
58
|
+
} = {},
|
|
45
59
|
): void {
|
|
46
60
|
describe(`${label} — CRUD happy paths`, () => {
|
|
47
61
|
it('creates + gets an Org', async () => {
|
|
@@ -67,7 +81,7 @@ export function runOrgBindingConformance(
|
|
|
67
81
|
it('deletes an Org', async () => {
|
|
68
82
|
const b = makeBinding();
|
|
69
83
|
const id = await createOrg(b, T1, { name: 'Acme', slug: 'acme' });
|
|
70
|
-
await b.delete(T1, id);
|
|
84
|
+
expect(await b.delete(T1, id)).toEqual({ kind: 'ok' });
|
|
71
85
|
const got = await b.get(T1, id);
|
|
72
86
|
expect(got).toBeUndefined();
|
|
73
87
|
});
|
|
@@ -80,7 +94,7 @@ export function runOrgBindingConformance(
|
|
|
80
94
|
const page = await b.list(T1, {});
|
|
81
95
|
expect(page.items.map((o) => o.id)).toEqual([kept]);
|
|
82
96
|
expect(await b.update(T1, id, { name: 'Acme 2' })).toEqual({ kind: 'org-not-found' });
|
|
83
|
-
await b.delete(T1, id);
|
|
97
|
+
expect(await b.delete(T1, id)).toEqual({ kind: 'ok' });
|
|
84
98
|
expect(await b.get(T1, kept)).toBeDefined();
|
|
85
99
|
});
|
|
86
100
|
|
|
@@ -199,7 +213,7 @@ export function runOrgBindingConformance(
|
|
|
199
213
|
|
|
200
214
|
it('delete on unknown orgId is a no-op', async () => {
|
|
201
215
|
const b = makeBinding();
|
|
202
|
-
await expect(b.delete(T1, unknown)).resolves.
|
|
216
|
+
await expect(b.delete(T1, unknown)).resolves.toEqual({ kind: 'ok' });
|
|
203
217
|
});
|
|
204
218
|
});
|
|
205
219
|
|
|
@@ -237,4 +251,36 @@ export function runOrgBindingConformance(
|
|
|
237
251
|
expect(await b.update(T1, id, { name: 'Acme Corp', slug: 'acme' })).toEqual({ kind: 'ok' });
|
|
238
252
|
});
|
|
239
253
|
});
|
|
254
|
+
|
|
255
|
+
const makeGuarded = options.makeGuardedBinding;
|
|
256
|
+
if (makeGuarded !== undefined) {
|
|
257
|
+
describe(`${label} — environment-order guard`, () => {
|
|
258
|
+
it('refuses to delete an org that is the parent of an environment order; the org stays', async () => {
|
|
259
|
+
const { binding, putInEnvironmentOrder } = makeGuarded();
|
|
260
|
+
const id = await createOrg(binding, T1, { name: 'Acme', slug: 'acme' });
|
|
261
|
+
const orderId = await putInEnvironmentOrder(T1, id);
|
|
262
|
+
expect(await binding.delete(T1, id)).toEqual({
|
|
263
|
+
kind: 'org-has-environment-order',
|
|
264
|
+
orderId,
|
|
265
|
+
});
|
|
266
|
+
expect((await binding.get(T1, id))?.id).toBe(id);
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
it('deletes the org once its environment order is cleared', async () => {
|
|
270
|
+
const { binding, putInEnvironmentOrder, clearEnvironmentOrder } = makeGuarded();
|
|
271
|
+
const id = await createOrg(binding, T1, { name: 'Acme', slug: 'acme' });
|
|
272
|
+
await putInEnvironmentOrder(T1, id);
|
|
273
|
+
await clearEnvironmentOrder(T1, id);
|
|
274
|
+
expect(await binding.delete(T1, id)).toEqual({ kind: 'ok' });
|
|
275
|
+
expect(await binding.get(T1, id)).toBeUndefined();
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
it('deletes an org that is the parent of no environment order', async () => {
|
|
279
|
+
const { binding } = makeGuarded();
|
|
280
|
+
const id = await createOrg(binding, T1, { name: 'Acme', slug: 'acme' });
|
|
281
|
+
expect(await binding.delete(T1, id)).toEqual({ kind: 'ok' });
|
|
282
|
+
expect(await binding.get(T1, id)).toBeUndefined();
|
|
283
|
+
});
|
|
284
|
+
});
|
|
285
|
+
}
|
|
240
286
|
}
|
|
@@ -68,6 +68,14 @@ export function runProjectBindingConformance(
|
|
|
68
68
|
* production (`undefined` for none) where this binding reads it.
|
|
69
69
|
*/
|
|
70
70
|
readonly setProductionLimit?: (tenantId: TenantId, limit: number | undefined) => Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* With `checksEnvironmentOrders`: put the project in an environment order
|
|
73
|
+
* and return that order's id, or clear it from its order. The store backs
|
|
74
|
+
* this however it holds orders — the in-memory adapter a map, the durable
|
|
75
|
+
* one a `project_stages` row — so the one guard suite runs on both.
|
|
76
|
+
*/
|
|
77
|
+
readonly putInEnvironmentOrder?: (tenantId: TenantId, projectId: ProjectId) => Promise<string>;
|
|
78
|
+
readonly clearEnvironmentOrder?: (tenantId: TenantId, projectId: ProjectId) => Promise<void>;
|
|
71
79
|
},
|
|
72
80
|
label = 'ProjectBinding',
|
|
73
81
|
options: {
|
|
@@ -89,6 +97,13 @@ export function runProjectBindingConformance(
|
|
|
89
97
|
* once can't both take the last place.
|
|
90
98
|
*/
|
|
91
99
|
readonly productionLimit?: boolean;
|
|
100
|
+
/**
|
|
101
|
+
* The binding refuses to delete, or to move to another parent, a project
|
|
102
|
+
* that is a member of an environment order (`project-in-environment-order`),
|
|
103
|
+
* while allowing a rename or slug change. Needs `putInEnvironmentOrder` +
|
|
104
|
+
* `clearEnvironmentOrder` on the binding.
|
|
105
|
+
*/
|
|
106
|
+
readonly checksEnvironmentOrders?: boolean;
|
|
92
107
|
} = {},
|
|
93
108
|
): void {
|
|
94
109
|
describe(`${label} — project CRUD`, () => {
|
|
@@ -122,7 +137,7 @@ export function runProjectBindingConformance(
|
|
|
122
137
|
const id = await createProject(projects, T1, { name: 'A', slug: 'a' });
|
|
123
138
|
await memberships.add(T1, { projectId: id, userId: U1, role: 'editor' });
|
|
124
139
|
await grants.add(T1, { teamId: TEAM_A, projectId: id, role: 'editor' });
|
|
125
|
-
await projects.delete(T1, id);
|
|
140
|
+
expect(await projects.delete(T1, id)).toEqual({ kind: 'ok' });
|
|
126
141
|
const mPage = await memberships.listForUser(T1, U1, {});
|
|
127
142
|
expect(mPage.items).toHaveLength(0);
|
|
128
143
|
const gPage = await grants.listForTeam(T1, TEAM_A, {});
|
|
@@ -130,6 +145,116 @@ export function runProjectBindingConformance(
|
|
|
130
145
|
});
|
|
131
146
|
});
|
|
132
147
|
|
|
148
|
+
if (options.checksEnvironmentOrders === true) {
|
|
149
|
+
describe(`${label} — environment-order guard`, () => {
|
|
150
|
+
function orderOps(binding: ReturnType<typeof makeBinding>) {
|
|
151
|
+
const put = binding.putInEnvironmentOrder;
|
|
152
|
+
const clear = binding.clearEnvironmentOrder;
|
|
153
|
+
if (put === undefined || clear === undefined) {
|
|
154
|
+
throw new Error(
|
|
155
|
+
'checksEnvironmentOrders needs putInEnvironmentOrder + clearEnvironmentOrder',
|
|
156
|
+
);
|
|
157
|
+
}
|
|
158
|
+
return { put, clear };
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
it('refuses to delete a project in an environment order; the project stays', async () => {
|
|
162
|
+
const binding = makeBinding();
|
|
163
|
+
const { projects } = binding;
|
|
164
|
+
const { put } = orderOps(binding);
|
|
165
|
+
const id = await createProject(projects, T1, { name: 'Staging', slug: 'staging' });
|
|
166
|
+
const orderId = await put(T1, id);
|
|
167
|
+
expect(await projects.delete(T1, id)).toEqual({
|
|
168
|
+
kind: 'project-in-environment-order',
|
|
169
|
+
orderId,
|
|
170
|
+
});
|
|
171
|
+
expect((await projects.get(T1, id))?.id).toBe(id);
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
it('refuses to move a project in an environment order to another parent', async () => {
|
|
175
|
+
const binding = makeBinding();
|
|
176
|
+
const { projects } = binding;
|
|
177
|
+
const { put } = orderOps(binding);
|
|
178
|
+
// A project under the tenant (no org); the move adds a parent, refused.
|
|
179
|
+
const id = await createProject(projects, T1, { name: 'Prod', slug: 'prod' });
|
|
180
|
+
const orderId = await put(T1, id);
|
|
181
|
+
expect(await projects.update(T1, id, { orgId: ORG_A })).toEqual({
|
|
182
|
+
kind: 'project-in-environment-order',
|
|
183
|
+
orderId,
|
|
184
|
+
});
|
|
185
|
+
expect((await projects.get(T1, id))?.orgId).toBeUndefined();
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
it('allows a rename or slug change for a project in an environment order', async () => {
|
|
189
|
+
const binding = makeBinding();
|
|
190
|
+
const { projects } = binding;
|
|
191
|
+
const { put } = orderOps(binding);
|
|
192
|
+
const id = await createProject(projects, T1, { name: 'Dev', slug: 'dev' });
|
|
193
|
+
await put(T1, id);
|
|
194
|
+
expect(await projects.update(T1, id, { name: 'Dev-renamed', slug: 'dev-2' })).toEqual({
|
|
195
|
+
kind: 'ok',
|
|
196
|
+
});
|
|
197
|
+
const got = await projects.get(T1, id);
|
|
198
|
+
expect(got?.name).toBe('Dev-renamed');
|
|
199
|
+
expect(got?.slug).toBe('dev-2');
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
it("allows a patch naming an org-less project's current (no) org — a no-op move, not a refusal", async () => {
|
|
203
|
+
const binding = makeBinding();
|
|
204
|
+
const { projects } = binding;
|
|
205
|
+
const { put } = orderOps(binding);
|
|
206
|
+
// The project has no org; `orgId: null` names that same parent, so the
|
|
207
|
+
// patch isn't a move and isn't refused — only an actual change of parent
|
|
208
|
+
// is. A form that always sends `orgId` can still rename an ordered project.
|
|
209
|
+
const id = await createProject(projects, T1, { name: 'Staging', slug: 'staging' });
|
|
210
|
+
const orderId = await put(T1, id);
|
|
211
|
+
expect(await projects.update(T1, id, { name: 'Staging-2', orgId: null })).toEqual({
|
|
212
|
+
kind: 'ok',
|
|
213
|
+
});
|
|
214
|
+
const afterNoOrg = await projects.get(T1, id);
|
|
215
|
+
expect(afterNoOrg?.name).toBe('Staging-2');
|
|
216
|
+
expect(afterNoOrg?.orgId).toBeUndefined();
|
|
217
|
+
// Still in its order: an actual move is still refused, naming the order.
|
|
218
|
+
expect(await projects.update(T1, id, { orgId: ORG_A })).toEqual({
|
|
219
|
+
kind: 'project-in-environment-order',
|
|
220
|
+
orderId,
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
it("allows a patch naming an org project's current org, and refuses it leaving the order", async () => {
|
|
225
|
+
const binding = makeBinding();
|
|
226
|
+
const { projects } = binding;
|
|
227
|
+
const { put } = orderOps(binding);
|
|
228
|
+
// The project is under ORG_A; `orgId: ORG_A` names that same parent — a
|
|
229
|
+
// no-op move, allowed — while leaving the org (`orgId: null`) is a real
|
|
230
|
+
// move and refused while the project is in the order.
|
|
231
|
+
const id = await createProject(projects, T1, { name: 'Prod', slug: 'prod', orgId: ORG_A });
|
|
232
|
+
const orderId = await put(T1, id);
|
|
233
|
+
expect(await projects.update(T1, id, { name: 'Prod-2', orgId: ORG_A })).toEqual({
|
|
234
|
+
kind: 'ok',
|
|
235
|
+
});
|
|
236
|
+
const afterSameOrg = await projects.get(T1, id);
|
|
237
|
+
expect(afterSameOrg?.name).toBe('Prod-2');
|
|
238
|
+
expect(afterSameOrg?.orgId).toBe(ORG_A);
|
|
239
|
+
expect(await projects.update(T1, id, { orgId: null })).toEqual({
|
|
240
|
+
kind: 'project-in-environment-order',
|
|
241
|
+
orderId,
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
it('deletes a project once it is cleared from its order', async () => {
|
|
246
|
+
const binding = makeBinding();
|
|
247
|
+
const { projects } = binding;
|
|
248
|
+
const { put, clear } = orderOps(binding);
|
|
249
|
+
const id = await createProject(projects, T1, { name: 'Staging', slug: 'staging' });
|
|
250
|
+
await put(T1, id);
|
|
251
|
+
await clear(T1, id);
|
|
252
|
+
expect(await projects.delete(T1, id)).toEqual({ kind: 'ok' });
|
|
253
|
+
expect(await projects.get(T1, id)).toBeUndefined();
|
|
254
|
+
});
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
|
|
133
258
|
if (options.production === true) {
|
|
134
259
|
describe(`${label} — production`, () => {
|
|
135
260
|
function setter(projects: ProjectBinding) {
|