@jskit-ai/workspaces-core 0.1.37 → 0.1.39

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.
@@ -1,7 +1,7 @@
1
1
  export default Object.freeze({
2
2
  packageVersion: 1,
3
3
  packageId: "@jskit-ai/workspaces-core",
4
- version: "0.1.37",
4
+ version: "0.1.39",
5
5
  kind: "runtime",
6
6
  description: "Workspace tenancy runtime plus HTTP routes, role catalog, and workspace config scaffolding.",
7
7
  dependsOn: [
@@ -34,6 +34,32 @@ export default Object.freeze({
34
34
  }
35
35
  },
36
36
  metadata: {
37
+ jskit: {
38
+ tableOwnership: {
39
+ tables: [
40
+ {
41
+ tableName: "workspaces",
42
+ provenance: "runtime-package",
43
+ ownerKind: "package-runtime"
44
+ },
45
+ {
46
+ tableName: "workspace_memberships",
47
+ provenance: "runtime-package",
48
+ ownerKind: "package-runtime"
49
+ },
50
+ {
51
+ tableName: "workspace_settings",
52
+ provenance: "runtime-package",
53
+ ownerKind: "package-runtime"
54
+ },
55
+ {
56
+ tableName: "workspace_invites",
57
+ provenance: "runtime-package",
58
+ ownerKind: "package-runtime"
59
+ }
60
+ ]
61
+ }
62
+ },
37
63
  apiSummary: {
38
64
  surfaces: [
39
65
  {
@@ -116,10 +142,10 @@ export default Object.freeze({
116
142
  mutations: {
117
143
  dependencies: {
118
144
  runtime: {
119
- "@jskit-ai/json-rest-api-core": "0.1.6",
120
- "@jskit-ai/resource-core": "0.1.6",
121
- "@jskit-ai/resource-crud-core": "0.1.6",
122
- "@jskit-ai/users-core": "0.1.71"
145
+ "@jskit-ai/json-rest-api-core": "0.1.8",
146
+ "@jskit-ai/resource-core": "0.1.8",
147
+ "@jskit-ai/resource-crud-core": "0.1.8",
148
+ "@jskit-ai/users-core": "0.1.73"
123
149
  },
124
150
  dev: {}
125
151
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/workspaces-core",
3
- "version": "0.1.37",
3
+ "version": "0.1.39",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "test": "node --test"
@@ -17,14 +17,14 @@
17
17
  "./shared/resources/workspaceSettingsResource": "./src/shared/resources/workspaceSettingsResource.js"
18
18
  },
19
19
  "dependencies": {
20
- "@jskit-ai/auth-core": "0.1.60",
21
- "@jskit-ai/database-runtime": "0.1.61",
22
- "@jskit-ai/http-runtime": "0.1.60",
23
- "@jskit-ai/json-rest-api-core": "0.1.6",
24
- "@jskit-ai/kernel": "0.1.61",
25
- "@jskit-ai/resource-crud-core": "0.1.6",
26
- "@jskit-ai/resource-core": "0.1.6",
27
- "@jskit-ai/users-core": "0.1.71",
20
+ "@jskit-ai/auth-core": "0.1.62",
21
+ "@jskit-ai/database-runtime": "0.1.63",
22
+ "@jskit-ai/http-runtime": "0.1.62",
23
+ "@jskit-ai/json-rest-api-core": "0.1.8",
24
+ "@jskit-ai/kernel": "0.1.63",
25
+ "@jskit-ai/resource-crud-core": "0.1.8",
26
+ "@jskit-ai/resource-core": "0.1.8",
27
+ "@jskit-ai/users-core": "0.1.73",
28
28
  "json-rest-schema": "1.x.x"
29
29
  }
30
30
  }
@@ -289,16 +289,13 @@ function createRepository({ api, knex } = {}) {
289
289
  return [];
290
290
  }
291
291
 
292
- const rows = await queryMemberships(
293
- {
294
- user: normalizedUserId,
295
- status: "active"
296
- },
297
- options
298
- );
292
+ const rows = await queryMemberships({
293
+ user: normalizedUserId,
294
+ status: "active"
295
+ }, options);
299
296
 
300
297
  return rows
301
- .map((row) => normalizeDbRecordId(row?.workspace?.id || row?.workspaceId, { fallback: null }))
298
+ .map((row) => normalizeDbRecordId(row?.workspaceId, { fallback: null }))
302
299
  .filter(Boolean);
303
300
  }
304
301
 
@@ -72,11 +72,24 @@ function createWorkspaceMembershipsApiStub({
72
72
  }
73
73
 
74
74
  if (Object.hasOwn(filters, "user") && Object.hasOwn(filters, "status")) {
75
+ const includeWorkspace = Array.isArray(queryParams?.include) && queryParams.include.includes("workspace");
75
76
  const rows = [...rowByComposite.values()].filter((row) => (
76
77
  String(row?.user?.id || "") === String(filters.user) &&
77
78
  String(row?.status || "") === String(filters.status)
78
79
  ));
79
- return asCollectionDocument(rows.map((row) => toWorkspaceMembershipRow(row)));
80
+ return asCollectionDocument(rows.map((row) => {
81
+ if (includeWorkspace) {
82
+ return toWorkspaceMembershipRow(row);
83
+ }
84
+
85
+ return {
86
+ ...toWorkspaceMembershipRow({
87
+ ...row,
88
+ workspace: null
89
+ }),
90
+ workspaceId: row?.workspace?.id == null ? null : String(row.workspace.id)
91
+ };
92
+ }));
80
93
  }
81
94
 
82
95
  return asCollectionDocument([]);
@@ -251,7 +264,7 @@ test("workspaceMembershipsRepository.listActiveWorkspaceIdsByUserId returns norm
251
264
  createdAt: "2026-03-09 00:26:35.710",
252
265
  updatedAt: "2026-03-10 00:26:35.710"
253
266
  };
254
- const { api } = createWorkspaceMembershipsApiStub({
267
+ const { api, state } = createWorkspaceMembershipsApiStub({
255
268
  rowByComposite: new Map([["7:9", membershipRow]])
256
269
  });
257
270
  const repository = createRepository({ api, knex: createKnexStub() });
@@ -259,4 +272,12 @@ test("workspaceMembershipsRepository.listActiveWorkspaceIdsByUserId returns norm
259
272
  const workspaceIds = await repository.listActiveWorkspaceIdsByUserId("9");
260
273
 
261
274
  assert.deepEqual(workspaceIds, ["7"]);
275
+ assert.deepEqual(state.queryCalls, [
276
+ {
277
+ filters: {
278
+ user: "9",
279
+ status: "active"
280
+ }
281
+ }
282
+ ]);
262
283
  });