@meridianjs/workspace-member 1.1.0 → 2.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.mts CHANGED
@@ -9,6 +9,17 @@ declare class WorkspaceMemberModuleService extends WorkspaceMemberModuleService_
9
9
  getMembership(workspaceId: string, userId: string): Promise<any | null>;
10
10
  isMember(workspaceId: string, userId: string): Promise<boolean>;
11
11
  ensureMember(workspaceId: string, userId: string, role?: "admin" | "member"): Promise<any>;
12
+ createAccessRequest(data: {
13
+ workspace_id: string;
14
+ user_id: string;
15
+ message?: string | null;
16
+ }): Promise<any>;
17
+ getPendingRequest(workspaceId: string, userId: string): Promise<any | null>;
18
+ getAccessRequest(id: string): Promise<any | null>;
19
+ listPendingAccessRequests(workspaceId: string): Promise<any[]>;
20
+ updateAccessRequestStatus(id: string, status: "approved" | "denied"): Promise<any>;
21
+ getUserPendingRequests(userId: string): Promise<any[]>;
22
+ deleteAccessRequest(id: string): Promise<void>;
12
23
  }
13
24
 
14
25
  declare const _default: _meridianjs_types.ModuleDefinition;
package/dist/index.d.ts CHANGED
@@ -9,6 +9,17 @@ declare class WorkspaceMemberModuleService extends WorkspaceMemberModuleService_
9
9
  getMembership(workspaceId: string, userId: string): Promise<any | null>;
10
10
  isMember(workspaceId: string, userId: string): Promise<boolean>;
11
11
  ensureMember(workspaceId: string, userId: string, role?: "admin" | "member"): Promise<any>;
12
+ createAccessRequest(data: {
13
+ workspace_id: string;
14
+ user_id: string;
15
+ message?: string | null;
16
+ }): Promise<any>;
17
+ getPendingRequest(workspaceId: string, userId: string): Promise<any | null>;
18
+ getAccessRequest(id: string): Promise<any | null>;
19
+ listPendingAccessRequests(workspaceId: string): Promise<any[]>;
20
+ updateAccessRequestStatus(id: string, status: "approved" | "denied"): Promise<any>;
21
+ getUserPendingRequests(userId: string): Promise<any[]>;
22
+ deleteAccessRequest(id: string): Promise<void>;
12
23
  }
13
24
 
14
25
  declare const _default: _meridianjs_types.ModuleDefinition;
package/dist/index.js CHANGED
@@ -24,10 +24,10 @@ __export(index_exports, {
24
24
  default: () => index_default
25
25
  });
26
26
  module.exports = __toCommonJS(index_exports);
27
- var import_framework_utils4 = require("@meridianjs/framework-utils");
27
+ var import_framework_utils5 = require("@meridianjs/framework-utils");
28
28
 
29
29
  // src/service.ts
30
- var import_framework_utils2 = require("@meridianjs/framework-utils");
30
+ var import_framework_utils3 = require("@meridianjs/framework-utils");
31
31
 
32
32
  // src/models/workspace-member.ts
33
33
  var import_framework_utils = require("@meridianjs/framework-utils");
@@ -42,9 +42,24 @@ var WorkspaceMember = import_framework_utils.model.define("workspace_member", {
42
42
  ]);
43
43
  var workspace_member_default = WorkspaceMember;
44
44
 
45
+ // src/models/workspace-access-request.ts
46
+ var import_framework_utils2 = require("@meridianjs/framework-utils");
47
+ var WorkspaceAccessRequest = import_framework_utils2.model.define("workspace_access_request", {
48
+ id: import_framework_utils2.model.id().primaryKey(),
49
+ workspace_id: import_framework_utils2.model.text(),
50
+ user_id: import_framework_utils2.model.text(),
51
+ message: import_framework_utils2.model.text().nullable(),
52
+ status: import_framework_utils2.model.enum(["pending", "approved", "denied"]).default("pending")
53
+ }, [
54
+ { columns: ["workspace_id"] },
55
+ { columns: ["workspace_id", "user_id"] }
56
+ ]);
57
+ var workspace_access_request_default = WorkspaceAccessRequest;
58
+
45
59
  // src/service.ts
46
- var WorkspaceMemberModuleService = class extends (0, import_framework_utils2.MeridianService)({
47
- WorkspaceMember: workspace_member_default
60
+ var WorkspaceMemberModuleService = class extends (0, import_framework_utils3.MeridianService)({
61
+ WorkspaceMember: workspace_member_default,
62
+ WorkspaceAccessRequest: workspace_access_request_default
48
63
  }) {
49
64
  container;
50
65
  constructor(container) {
@@ -72,27 +87,63 @@ var WorkspaceMemberModuleService = class extends (0, import_framework_utils2.Mer
72
87
  throw err;
73
88
  }
74
89
  }
90
+ async createAccessRequest(data) {
91
+ const repo = this.container.resolve("workspaceAccessRequestRepository");
92
+ const record = repo.create({ ...data, status: "pending" });
93
+ await repo.persistAndFlush(record);
94
+ return record;
95
+ }
96
+ async getPendingRequest(workspaceId, userId) {
97
+ const repo = this.container.resolve("workspaceAccessRequestRepository");
98
+ return repo.findOne({ workspace_id: workspaceId, user_id: userId, status: "pending" }) ?? null;
99
+ }
100
+ async getAccessRequest(id) {
101
+ const repo = this.container.resolve("workspaceAccessRequestRepository");
102
+ return repo.findOne({ id }) ?? null;
103
+ }
104
+ async listPendingAccessRequests(workspaceId) {
105
+ const repo = this.container.resolve("workspaceAccessRequestRepository");
106
+ return repo.find({ workspace_id: workspaceId, status: "pending" }, { orderBy: { created_at: "ASC" } });
107
+ }
108
+ async updateAccessRequestStatus(id, status) {
109
+ const repo = this.container.resolve("workspaceAccessRequestRepository");
110
+ const record = await repo.findOne({ id });
111
+ if (!record) throw new Error("Access request not found");
112
+ record.status = status;
113
+ await repo.persistAndFlush(record);
114
+ return record;
115
+ }
116
+ async getUserPendingRequests(userId) {
117
+ const repo = this.container.resolve("workspaceAccessRequestRepository");
118
+ return repo.find({ user_id: userId, status: "pending" }, { orderBy: { created_at: "ASC" } });
119
+ }
120
+ async deleteAccessRequest(id) {
121
+ const repo = this.container.resolve("workspaceAccessRequestRepository");
122
+ const record = await repo.findOne({ id });
123
+ if (record) await repo.removeAndFlush(record);
124
+ }
75
125
  };
76
126
 
77
127
  // src/loaders/default.ts
78
- var import_framework_utils3 = require("@meridianjs/framework-utils");
128
+ var import_framework_utils4 = require("@meridianjs/framework-utils");
79
129
  async function defaultLoader({ container }) {
80
130
  const config = container.resolve("config");
81
- const orm = await (0, import_framework_utils3.createModuleOrm)(
82
- [(0, import_framework_utils3.dmlToEntitySchema)(workspace_member_default)],
131
+ const orm = await (0, import_framework_utils4.createModuleOrm)(
132
+ [(0, import_framework_utils4.dmlToEntitySchema)(workspace_member_default), (0, import_framework_utils4.dmlToEntitySchema)(workspace_access_request_default)],
83
133
  config.projectConfig.databaseUrl
84
134
  );
85
135
  const em = orm.em.fork();
86
136
  container.register({
87
- workspaceMemberRepository: (0, import_framework_utils3.createRepository)(em, "workspace_member"),
137
+ workspaceMemberRepository: (0, import_framework_utils4.createRepository)(em, "workspace_member"),
138
+ workspaceAccessRequestRepository: (0, import_framework_utils4.createRepository)(em, "workspace_access_request"),
88
139
  workspaceMemberOrm: orm
89
140
  });
90
141
  }
91
142
 
92
143
  // src/index.ts
93
- var index_default = (0, import_framework_utils4.Module)("workspaceMemberModuleService", {
144
+ var index_default = (0, import_framework_utils5.Module)("workspaceMemberModuleService", {
94
145
  service: WorkspaceMemberModuleService,
95
- models: [workspace_member_default],
146
+ models: [workspace_member_default, workspace_access_request_default],
96
147
  loaders: [defaultLoader]
97
148
  });
98
149
  // Annotate the CommonJS export names for ESM import in node:
package/dist/index.mjs CHANGED
@@ -17,9 +17,24 @@ var WorkspaceMember = model.define("workspace_member", {
17
17
  ]);
18
18
  var workspace_member_default = WorkspaceMember;
19
19
 
20
+ // src/models/workspace-access-request.ts
21
+ import { model as model2 } from "@meridianjs/framework-utils";
22
+ var WorkspaceAccessRequest = model2.define("workspace_access_request", {
23
+ id: model2.id().primaryKey(),
24
+ workspace_id: model2.text(),
25
+ user_id: model2.text(),
26
+ message: model2.text().nullable(),
27
+ status: model2.enum(["pending", "approved", "denied"]).default("pending")
28
+ }, [
29
+ { columns: ["workspace_id"] },
30
+ { columns: ["workspace_id", "user_id"] }
31
+ ]);
32
+ var workspace_access_request_default = WorkspaceAccessRequest;
33
+
20
34
  // src/service.ts
21
35
  var WorkspaceMemberModuleService = class extends MeridianService({
22
- WorkspaceMember: workspace_member_default
36
+ WorkspaceMember: workspace_member_default,
37
+ WorkspaceAccessRequest: workspace_access_request_default
23
38
  }) {
24
39
  container;
25
40
  constructor(container) {
@@ -47,6 +62,41 @@ var WorkspaceMemberModuleService = class extends MeridianService({
47
62
  throw err;
48
63
  }
49
64
  }
65
+ async createAccessRequest(data) {
66
+ const repo = this.container.resolve("workspaceAccessRequestRepository");
67
+ const record = repo.create({ ...data, status: "pending" });
68
+ await repo.persistAndFlush(record);
69
+ return record;
70
+ }
71
+ async getPendingRequest(workspaceId, userId) {
72
+ const repo = this.container.resolve("workspaceAccessRequestRepository");
73
+ return repo.findOne({ workspace_id: workspaceId, user_id: userId, status: "pending" }) ?? null;
74
+ }
75
+ async getAccessRequest(id) {
76
+ const repo = this.container.resolve("workspaceAccessRequestRepository");
77
+ return repo.findOne({ id }) ?? null;
78
+ }
79
+ async listPendingAccessRequests(workspaceId) {
80
+ const repo = this.container.resolve("workspaceAccessRequestRepository");
81
+ return repo.find({ workspace_id: workspaceId, status: "pending" }, { orderBy: { created_at: "ASC" } });
82
+ }
83
+ async updateAccessRequestStatus(id, status) {
84
+ const repo = this.container.resolve("workspaceAccessRequestRepository");
85
+ const record = await repo.findOne({ id });
86
+ if (!record) throw new Error("Access request not found");
87
+ record.status = status;
88
+ await repo.persistAndFlush(record);
89
+ return record;
90
+ }
91
+ async getUserPendingRequests(userId) {
92
+ const repo = this.container.resolve("workspaceAccessRequestRepository");
93
+ return repo.find({ user_id: userId, status: "pending" }, { orderBy: { created_at: "ASC" } });
94
+ }
95
+ async deleteAccessRequest(id) {
96
+ const repo = this.container.resolve("workspaceAccessRequestRepository");
97
+ const record = await repo.findOne({ id });
98
+ if (record) await repo.removeAndFlush(record);
99
+ }
50
100
  };
51
101
 
52
102
  // src/loaders/default.ts
@@ -54,12 +104,13 @@ import { dmlToEntitySchema, createRepository, createModuleOrm } from "@meridianj
54
104
  async function defaultLoader({ container }) {
55
105
  const config = container.resolve("config");
56
106
  const orm = await createModuleOrm(
57
- [dmlToEntitySchema(workspace_member_default)],
107
+ [dmlToEntitySchema(workspace_member_default), dmlToEntitySchema(workspace_access_request_default)],
58
108
  config.projectConfig.databaseUrl
59
109
  );
60
110
  const em = orm.em.fork();
61
111
  container.register({
62
112
  workspaceMemberRepository: createRepository(em, "workspace_member"),
113
+ workspaceAccessRequestRepository: createRepository(em, "workspace_access_request"),
63
114
  workspaceMemberOrm: orm
64
115
  });
65
116
  }
@@ -67,7 +118,7 @@ async function defaultLoader({ container }) {
67
118
  // src/index.ts
68
119
  var index_default = Module("workspaceMemberModuleService", {
69
120
  service: WorkspaceMemberModuleService,
70
- models: [workspace_member_default],
121
+ models: [workspace_member_default, workspace_access_request_default],
71
122
  loaders: [defaultLoader]
72
123
  });
73
124
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meridianjs/workspace-member",
3
- "version": "1.1.0",
3
+ "version": "2.0.0",
4
4
  "description": "Meridian workspace-member module — tracks workspace membership and roles",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -25,8 +25,8 @@
25
25
  "prepublishOnly": "npm run build"
26
26
  },
27
27
  "dependencies": {
28
- "@meridianjs/framework-utils": "^1.11.0",
29
- "@meridianjs/types": "^1.11.0",
28
+ "@meridianjs/framework-utils": "^2.0.0",
29
+ "@meridianjs/types": "^2.0.0",
30
30
  "@mikro-orm/core": "^6.4.3",
31
31
  "@mikro-orm/postgresql": "^6.4.3"
32
32
  },