@fonderie/workspaces 2.0.0 → 3.0.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/index.d.cts CHANGED
@@ -17,7 +17,13 @@ type WorkspacesEventKey = (typeof EVENT_KEYS)[keyof typeof EVENT_KEYS];
17
17
  interface IWorkspacesConfig {
18
18
  invitationTtl?: string;
19
19
  personalWorkspace?: boolean;
20
+ routes?: Partial<Record<WorkspaceRouteId, WorkspaceRouteOverride>>;
20
21
  }
22
+ type WorkspaceRouteId = 'createWorkspace' | 'listWorkspaces' | 'getWorkspace' | 'updateWorkspace' | 'archive' | 'restore' | 'getSettings' | 'updateSettings' | 'listMembers' | 'removeMember' | 'getMemberRoles' | 'addMemberRole' | 'removeMemberRole' | 'listInvitations' | 'invite' | 'cancelInvitation' | 'acceptInvitation' | 'createRole' | 'listRoles' | 'getRole' | 'updateRole' | 'removeRole' | 'setRolePermissions';
23
+ type WorkspaceRouteOverride = string | {
24
+ method?: string;
25
+ path?: string;
26
+ };
21
27
 
22
28
  declare class WorkspacesModule implements IFonderieModule {
23
29
  private store;
package/dist/index.d.ts CHANGED
@@ -17,7 +17,13 @@ type WorkspacesEventKey = (typeof EVENT_KEYS)[keyof typeof EVENT_KEYS];
17
17
  interface IWorkspacesConfig {
18
18
  invitationTtl?: string;
19
19
  personalWorkspace?: boolean;
20
+ routes?: Partial<Record<WorkspaceRouteId, WorkspaceRouteOverride>>;
20
21
  }
22
+ type WorkspaceRouteId = 'createWorkspace' | 'listWorkspaces' | 'getWorkspace' | 'updateWorkspace' | 'archive' | 'restore' | 'getSettings' | 'updateSettings' | 'listMembers' | 'removeMember' | 'getMemberRoles' | 'addMemberRole' | 'removeMemberRole' | 'listInvitations' | 'invite' | 'cancelInvitation' | 'acceptInvitation' | 'createRole' | 'listRoles' | 'getRole' | 'updateRole' | 'removeRole' | 'setRolePermissions';
23
+ type WorkspaceRouteOverride = string | {
24
+ method?: string;
25
+ path?: string;
26
+ };
21
27
 
22
28
  declare class WorkspacesModule implements IFonderieModule {
23
29
  private store;
package/dist/index.js CHANGED
@@ -1277,38 +1277,45 @@ function buildWorkspaceRoutes(store, config, bus) {
1277
1277
  const member = memberController(store);
1278
1278
  const role = roleController(store);
1279
1279
  const invitation = invitationController(store, ttl, bus);
1280
+ const R = (id, method, path, ...handlers) => {
1281
+ const o = config.routes?.[id];
1282
+ if (!o) return [method, path, ...handlers];
1283
+ if (typeof o === "string") return [method, o, ...handlers];
1284
+ return [o.method ?? method, o.path ?? path, ...handlers];
1285
+ };
1280
1286
  return [
1281
1287
  // ── Workspace creation + listing (no workspace context required)
1282
- ["POST", "/workspaces", requireAuth, validate(createWorkspaceSchema), workspace.create],
1283
- ["GET", "/workspaces", requireAuth, workspace.list],
1288
+ R("createWorkspace", "POST", "/workspaces", requireAuth, validate(createWorkspaceSchema), workspace.create),
1289
+ R("listWorkspaces", "GET", "/workspaces", requireAuth, workspace.list),
1284
1290
  // ── Members (workspace resolved from X-Workspace-ID header)
1285
- ["GET", "/workspaces/members", requireAuth, wsCtx, member.list],
1286
- ["DELETE", "/workspaces/members/:userId", requireAuth, wsCtx, member.remove],
1287
- ["GET", "/workspaces/members/:userId/roles", requireAuth, wsCtx, member.getUserRoles],
1288
- ["POST", "/workspaces/members/:userId/roles", requireAuth, wsCtx, validate(addMemberRoleSchema), member.addRole],
1289
- ["DELETE", "/workspaces/members/:userId/roles/:roleId", requireAuth, wsCtx, member.removeRole],
1291
+ R("listMembers", "GET", "/workspaces/members", requireAuth, wsCtx, member.list),
1292
+ R("removeMember", "DELETE", "/workspaces/members/:userId", requireAuth, wsCtx, member.remove),
1293
+ R("getMemberRoles", "GET", "/workspaces/members/:userId/roles", requireAuth, wsCtx, member.getUserRoles),
1294
+ R("addMemberRole", "POST", "/workspaces/members/:userId/roles", requireAuth, wsCtx, validate(addMemberRoleSchema), member.addRole),
1295
+ R("removeMemberRole", "DELETE", "/workspaces/members/:userId/roles/:roleId", requireAuth, wsCtx, member.removeRole),
1290
1296
  // ── Invitations
1291
- ["GET", "/workspaces/invitations", requireAuth, wsCtx, invitation.list],
1292
- ["POST", "/workspaces/invitations", requireAuth, wsCtx, validate(createInvitationsSchema), invitation.invite],
1293
- ["DELETE", "/workspaces/invitations/:inviteId", requireAuth, wsCtx, invitation.cancel],
1294
- ["POST", "/workspaces/invitations/accept", requireAuth, validate(acceptInvitationSchema), invitation.accept],
1297
+ R("listInvitations", "GET", "/workspaces/invitations", requireAuth, wsCtx, invitation.list),
1298
+ R("invite", "POST", "/workspaces/invitations", requireAuth, wsCtx, validate(createInvitationsSchema), invitation.invite),
1299
+ R("cancelInvitation", "DELETE", "/workspaces/invitations/:inviteId", requireAuth, wsCtx, invitation.cancel),
1300
+ R("acceptInvitation", "POST", "/workspaces/invitations/accept", requireAuth, validate(acceptInvitationSchema), invitation.accept),
1295
1301
  // ── Roles
1296
- ["POST", "/workspaces/roles", requireAuth, wsCtx, validate(createRoleSchema), role.create],
1297
- ["GET", "/workspaces/roles", requireAuth, wsCtx, role.list],
1298
- ["GET", "/workspaces/roles/:roleId", requireAuth, wsCtx, role.get],
1299
- ["PUT", "/workspaces/roles/:roleId", requireAuth, wsCtx, validate(updateRoleSchema), role.update],
1300
- ["DELETE", "/workspaces/roles/:roleId", requireAuth, wsCtx, role.remove],
1301
- ["POST", "/workspaces/roles/:roleId/permissions", requireAuth, wsCtx, validate(setRolePermissionsSchema), role.setPermissions],
1302
+ R("createRole", "POST", "/workspaces/roles", requireAuth, wsCtx, validate(createRoleSchema), role.create),
1303
+ R("listRoles", "GET", "/workspaces/roles", requireAuth, wsCtx, role.list),
1304
+ R("getRole", "GET", "/workspaces/roles/:roleId", requireAuth, wsCtx, role.get),
1305
+ R("updateRole", "PUT", "/workspaces/roles/:roleId", requireAuth, wsCtx, validate(updateRoleSchema), role.update),
1306
+ R("removeRole", "DELETE", "/workspaces/roles/:roleId", requireAuth, wsCtx, role.remove),
1307
+ R("setRolePermissions", "POST", "/workspaces/roles/:roleId/permissions", requireAuth, wsCtx, validate(setRolePermissionsSchema), role.setPermissions),
1302
1308
  // ── Workspace lifecycle
1303
- ["POST", "/workspaces/archive", requireAuth, wsCtx, workspace.archive],
1304
- ["POST", "/workspaces/restore", requireAuth, wsCtx, workspace.restore],
1305
- ["GET", "/workspaces/settings", requireAuth, wsCtx, workspace.getSettings],
1306
- ["PUT", "/workspaces/settings", requireAuth, wsCtx, validate(updateSettingsSchema), workspace.updateSettings],
1309
+ R("archive", "POST", "/workspaces/archive", requireAuth, wsCtx, workspace.archive),
1310
+ R("restore", "POST", "/workspaces/restore", requireAuth, wsCtx, workspace.restore),
1311
+ R("getSettings", "GET", "/workspaces/settings", requireAuth, wsCtx, workspace.getSettings),
1312
+ R("updateSettings", "PUT", "/workspaces/settings", requireAuth, wsCtx, validate(updateSettingsSchema), workspace.updateSettings),
1307
1313
  // ── Path-based lookup by ID (admin / cross-workspace use)
1308
- ["GET", "/workspaces/:id", requireAuth, wsCtx, workspace.get],
1309
- // ── Update current workspace — ID resolved from X-Workspace-ID header
1310
- // (or personal workspace fallback when header is absent)
1311
- ["PUT", "/workspaces", requireAuth, wsCtx, validate(updateWorkspaceSchema), workspace.update]
1314
+ R("getWorkspace", "GET", "/workspaces/:id", requireAuth, wsCtx, workspace.get),
1315
+ // ── Update current workspace — ID from :id path param (wsCtx) or the
1316
+ // X-Workspace-ID header (or personal-workspace fallback when absent). Set
1317
+ // routes.updateWorkspace = '/workspaces/:id' to match a path-id frontend.
1318
+ R("updateWorkspace", "PUT", "/workspaces", requireAuth, wsCtx, validate(updateWorkspaceSchema), workspace.update)
1312
1319
  ];
1313
1320
  }
1314
1321