@plolink/sdk 0.0.4

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.
Files changed (76) hide show
  1. package/README.md +259 -0
  2. package/dist/chunk-4H4RACSE.js +335 -0
  3. package/dist/chunk-4H4RACSE.js.map +1 -0
  4. package/dist/chunk-IHAAKFEJ.js +219 -0
  5. package/dist/chunk-IHAAKFEJ.js.map +1 -0
  6. package/dist/chunk-JR4HYYQI.cjs +221 -0
  7. package/dist/chunk-JR4HYYQI.cjs.map +1 -0
  8. package/dist/chunk-MD4O7FWT.js +46 -0
  9. package/dist/chunk-MD4O7FWT.js.map +1 -0
  10. package/dist/chunk-NS3DJP2O.cjs +349 -0
  11. package/dist/chunk-NS3DJP2O.cjs.map +1 -0
  12. package/dist/chunk-Y3UJVC2L.cjs +48 -0
  13. package/dist/chunk-Y3UJVC2L.cjs.map +1 -0
  14. package/dist/client-CAjIQKPm.d.cts +193 -0
  15. package/dist/client-CwNikk7i.d.ts +193 -0
  16. package/dist/common/index.cjs +65 -0
  17. package/dist/common/index.cjs.map +1 -0
  18. package/dist/common/index.d.cts +422 -0
  19. package/dist/common/index.d.ts +422 -0
  20. package/dist/common/index.js +4 -0
  21. package/dist/common/index.js.map +1 -0
  22. package/dist/core-77EbLgbp.d.cts +97 -0
  23. package/dist/core-77EbLgbp.d.ts +97 -0
  24. package/dist/index.cjs +350 -0
  25. package/dist/index.cjs.map +1 -0
  26. package/dist/index.d.cts +98 -0
  27. package/dist/index.d.ts +98 -0
  28. package/dist/index.js +306 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/modules/agent/index.cjs +21 -0
  31. package/dist/modules/agent/index.cjs.map +1 -0
  32. package/dist/modules/agent/index.d.cts +71 -0
  33. package/dist/modules/agent/index.d.ts +71 -0
  34. package/dist/modules/agent/index.js +19 -0
  35. package/dist/modules/agent/index.js.map +1 -0
  36. package/dist/modules/billing/index.cjs +413 -0
  37. package/dist/modules/billing/index.cjs.map +1 -0
  38. package/dist/modules/billing/index.d.cts +538 -0
  39. package/dist/modules/billing/index.d.ts +538 -0
  40. package/dist/modules/billing/index.js +411 -0
  41. package/dist/modules/billing/index.js.map +1 -0
  42. package/dist/modules/chat/index.cjs +20 -0
  43. package/dist/modules/chat/index.cjs.map +1 -0
  44. package/dist/modules/chat/index.d.cts +68 -0
  45. package/dist/modules/chat/index.d.ts +68 -0
  46. package/dist/modules/chat/index.js +18 -0
  47. package/dist/modules/chat/index.js.map +1 -0
  48. package/dist/modules/psych/index.cjs +20 -0
  49. package/dist/modules/psych/index.cjs.map +1 -0
  50. package/dist/modules/psych/index.d.cts +69 -0
  51. package/dist/modules/psych/index.d.ts +69 -0
  52. package/dist/modules/psych/index.js +18 -0
  53. package/dist/modules/psych/index.js.map +1 -0
  54. package/dist/modules/rbac/index.cjs +197 -0
  55. package/dist/modules/rbac/index.cjs.map +1 -0
  56. package/dist/modules/rbac/index.d.cts +293 -0
  57. package/dist/modules/rbac/index.d.ts +293 -0
  58. package/dist/modules/rbac/index.js +195 -0
  59. package/dist/modules/rbac/index.js.map +1 -0
  60. package/dist/modules/team/index.cjs +54 -0
  61. package/dist/modules/team/index.cjs.map +1 -0
  62. package/dist/modules/team/index.d.cts +91 -0
  63. package/dist/modules/team/index.d.ts +91 -0
  64. package/dist/modules/team/index.js +52 -0
  65. package/dist/modules/team/index.js.map +1 -0
  66. package/dist/modules/virtual-account/index.cjs +293 -0
  67. package/dist/modules/virtual-account/index.cjs.map +1 -0
  68. package/dist/modules/virtual-account/index.d.cts +366 -0
  69. package/dist/modules/virtual-account/index.d.ts +366 -0
  70. package/dist/modules/virtual-account/index.js +291 -0
  71. package/dist/modules/virtual-account/index.js.map +1 -0
  72. package/dist/poller-BlIRbwL4.d.cts +201 -0
  73. package/dist/poller-DWKZjuSw.d.ts +201 -0
  74. package/dist/shared-6ZepUSPW.d.cts +31 -0
  75. package/dist/shared-6ZepUSPW.d.ts +31 -0
  76. package/package.json +96 -0
@@ -0,0 +1,195 @@
1
+ import { PlolinkError } from '../../chunk-MD4O7FWT.js';
2
+
3
+ // src/modules/rbac/index.ts
4
+ var Rbac = class {
5
+ constructor(client) {
6
+ this.client = client;
7
+ }
8
+ /**
9
+ * 获取所有权限点定义 + 系统角色定义
10
+ * GET /api/v1/permissions
11
+ */
12
+ async getPermissionDefinitions() {
13
+ return this.client.axiosInstance.get("/api/v1/permissions");
14
+ }
15
+ /**
16
+ * 列出团队角色(系统角色 + 自定义角色)
17
+ * GET /api/v1/teams/:teamId/roles
18
+ */
19
+ async listTeamRoles(teamId) {
20
+ if (!teamId || teamId.trim().length === 0) {
21
+ throw new PlolinkError("teamId is required", "INVALID_PARAMS");
22
+ }
23
+ return this.client.axiosInstance.get(`/api/v1/teams/${teamId}/roles`);
24
+ }
25
+ /**
26
+ * 创建自定义角色
27
+ * POST /api/v1/teams/:teamId/roles
28
+ */
29
+ async createCustomRole(teamId, params) {
30
+ if (!teamId || teamId.trim().length === 0) {
31
+ throw new PlolinkError("teamId is required", "INVALID_PARAMS");
32
+ }
33
+ if (!params.name || params.name.trim().length === 0) {
34
+ throw new PlolinkError("name is required and cannot be empty", "INVALID_PARAMS");
35
+ }
36
+ if (!params.code || params.code.trim().length === 0) {
37
+ throw new PlolinkError("code is required and cannot be empty", "INVALID_PARAMS");
38
+ }
39
+ if (!Array.isArray(params.permissions)) {
40
+ throw new PlolinkError("permissions must be an array", "INVALID_PARAMS");
41
+ }
42
+ return this.client.axiosInstance.post(`/api/v1/teams/${teamId}/roles`, params);
43
+ }
44
+ /**
45
+ * 更新自定义角色
46
+ * PUT /api/v1/teams/:teamId/roles/:roleId
47
+ */
48
+ async updateCustomRole(teamId, roleId, params) {
49
+ if (!teamId || teamId.trim().length === 0) {
50
+ throw new PlolinkError("teamId is required", "INVALID_PARAMS");
51
+ }
52
+ if (!roleId || roleId.trim().length === 0) {
53
+ throw new PlolinkError("roleId is required", "INVALID_PARAMS");
54
+ }
55
+ if (params.name !== void 0 && params.name.trim().length === 0) {
56
+ throw new PlolinkError("name cannot be empty", "INVALID_PARAMS");
57
+ }
58
+ if (params.code !== void 0 && params.code.trim().length === 0) {
59
+ throw new PlolinkError("code cannot be empty", "INVALID_PARAMS");
60
+ }
61
+ if (params.permissions !== void 0 && !Array.isArray(params.permissions)) {
62
+ throw new PlolinkError("permissions must be an array", "INVALID_PARAMS");
63
+ }
64
+ return this.client.axiosInstance.put(`/api/v1/teams/${teamId}/roles/${roleId}`, params);
65
+ }
66
+ /**
67
+ * 删除自定义角色
68
+ * DELETE /api/v1/teams/:teamId/roles/:roleId?force=true
69
+ */
70
+ async deleteCustomRole(teamId, roleId, options) {
71
+ if (!teamId || teamId.trim().length === 0) {
72
+ throw new PlolinkError("teamId is required", "INVALID_PARAMS");
73
+ }
74
+ if (!roleId || roleId.trim().length === 0) {
75
+ throw new PlolinkError("roleId is required", "INVALID_PARAMS");
76
+ }
77
+ const params = options?.force ? { force: "true" } : void 0;
78
+ return this.client.axiosInstance.delete(`/api/v1/teams/${teamId}/roles/${roleId}`, { params });
79
+ }
80
+ /**
81
+ * 获取角色详情(系统角色或自定义角色)
82
+ * GET /api/v1/teams/:teamId/roles/:roleId
83
+ */
84
+ async getRoleDetail(teamId, roleId) {
85
+ if (!teamId || teamId.trim().length === 0) {
86
+ throw new PlolinkError("teamId is required", "INVALID_PARAMS");
87
+ }
88
+ if (!roleId || roleId.trim().length === 0) {
89
+ throw new PlolinkError("roleId is required", "INVALID_PARAMS");
90
+ }
91
+ return this.client.axiosInstance.get(`/api/v1/teams/${teamId}/roles/${roleId}`);
92
+ }
93
+ /**
94
+ * 获取成员的所有角色(带角色信息与权限)
95
+ * GET /api/v1/teams/:teamId/members/:memberId/roles
96
+ */
97
+ async listMemberRoles(teamId, memberId) {
98
+ if (!teamId || teamId.trim().length === 0) {
99
+ throw new PlolinkError("teamId is required", "INVALID_PARAMS");
100
+ }
101
+ if (!memberId || memberId.trim().length === 0) {
102
+ throw new PlolinkError("memberId is required", "INVALID_PARAMS");
103
+ }
104
+ return this.client.axiosInstance.get(`/api/v1/teams/${teamId}/members/${memberId}/roles`);
105
+ }
106
+ /**
107
+ * 为成员分配角色(系统/自定义)及数据范围
108
+ * POST /api/v1/teams/:teamId/members/:memberId/roles
109
+ */
110
+ async assignMemberRole(teamId, memberId, params) {
111
+ if (!teamId || teamId.trim().length === 0) {
112
+ throw new PlolinkError("teamId is required", "INVALID_PARAMS");
113
+ }
114
+ if (!memberId || memberId.trim().length === 0) {
115
+ throw new PlolinkError("memberId is required", "INVALID_PARAMS");
116
+ }
117
+ if (params.roleType === "SYSTEM" && (!params.roleCode || params.roleCode.trim().length === 0)) {
118
+ throw new PlolinkError("roleCode is required when roleType is SYSTEM", "INVALID_PARAMS");
119
+ }
120
+ if (params.roleType === "CUSTOM" && (!params.roleId || params.roleId.trim().length === 0)) {
121
+ throw new PlolinkError("roleId is required when roleType is CUSTOM", "INVALID_PARAMS");
122
+ }
123
+ return this.client.axiosInstance.post(
124
+ `/api/v1/teams/${teamId}/members/${memberId}/roles`,
125
+ params
126
+ );
127
+ }
128
+ /**
129
+ * 更新成员角色的数据范围
130
+ * PUT /api/v1/teams/:teamId/members/:memberId/roles/:memberRoleId
131
+ */
132
+ async updateMemberRoleScope(teamId, memberId, memberRoleId, params) {
133
+ if (!teamId || teamId.trim().length === 0) {
134
+ throw new PlolinkError("teamId is required", "INVALID_PARAMS");
135
+ }
136
+ if (!memberId || memberId.trim().length === 0) {
137
+ throw new PlolinkError("memberId is required", "INVALID_PARAMS");
138
+ }
139
+ if (!memberRoleId || memberRoleId.trim().length === 0) {
140
+ throw new PlolinkError("memberRoleId is required", "INVALID_PARAMS");
141
+ }
142
+ if (!params.scopeType || params.scopeType.trim().length === 0) {
143
+ throw new PlolinkError("scopeType is required", "INVALID_PARAMS");
144
+ }
145
+ return this.client.axiosInstance.put(
146
+ `/api/v1/teams/${teamId}/members/${memberId}/roles/${memberRoleId}`,
147
+ params
148
+ );
149
+ }
150
+ /**
151
+ * 移除成员角色
152
+ * DELETE /api/v1/teams/:teamId/members/:memberId/roles/:memberRoleId
153
+ */
154
+ async removeMemberRole(teamId, memberId, memberRoleId) {
155
+ if (!teamId || teamId.trim().length === 0) {
156
+ throw new PlolinkError("teamId is required", "INVALID_PARAMS");
157
+ }
158
+ if (!memberId || memberId.trim().length === 0) {
159
+ throw new PlolinkError("memberId is required", "INVALID_PARAMS");
160
+ }
161
+ if (!memberRoleId || memberRoleId.trim().length === 0) {
162
+ throw new PlolinkError("memberRoleId is required", "INVALID_PARAMS");
163
+ }
164
+ return this.client.axiosInstance.delete(
165
+ `/api/v1/teams/${teamId}/members/${memberId}/roles/${memberRoleId}`
166
+ );
167
+ }
168
+ /**
169
+ * 快捷授权人才模块(公司访问范围)
170
+ * POST /api/v1/teams/:teamId/members/:memberId/roles/talent
171
+ */
172
+ async quickGrantTalentAccess(teamId, memberId, params) {
173
+ if (!teamId || teamId.trim().length === 0) {
174
+ throw new PlolinkError("teamId is required", "INVALID_PARAMS");
175
+ }
176
+ if (!memberId || memberId.trim().length === 0) {
177
+ throw new PlolinkError("memberId is required", "INVALID_PARAMS");
178
+ }
179
+ const roleCode = params?.roleCode;
180
+ if (roleCode && roleCode !== "SUB_UNIT_VIEWER" && roleCode !== "SUB_UNIT_MANAGER") {
181
+ throw new PlolinkError(
182
+ "roleCode must be SUB_UNIT_VIEWER or SUB_UNIT_MANAGER",
183
+ "INVALID_PARAMS"
184
+ );
185
+ }
186
+ return this.client.axiosInstance.post(
187
+ `/api/v1/teams/${teamId}/members/${memberId}/roles/talent`,
188
+ params ?? {}
189
+ );
190
+ }
191
+ };
192
+
193
+ export { Rbac };
194
+ //# sourceMappingURL=index.js.map
195
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/modules/rbac/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * RBAC 模块 (Rbac)\n *\n * @description\n * 提供权限点、角色、成员角色分配等能力封装,覆盖后端 `docs/api/rbac.md` 中的核心接口:\n * - 获取权限点定义 + 系统角色定义\n * - 团队角色管理(系统角色列表 + 自定义角色 CRUD)\n * - 成员角色管理(查询/分配/更新数据范围/移除)\n * - 人才模块快捷授权(SUB_UNIT_VIEWER / SUB_UNIT_MANAGER)\n *\n * @example\n * ```typescript\n * import { PlolinkClient } from '@plolink/sdk';\n * import { Team } from '@plolink/sdk/team';\n * import { Rbac } from '@plolink/sdk/rbac';\n * import { VirtualAccount } from '@plolink/sdk/virtual-account';\n *\n * const client = new PlolinkClient({ token: 'session-or-apikey' });\n * const virtualAccount = new VirtualAccount(client);\n * const team = new Team(client);\n * const rbac = new Rbac(client);\n *\n * const created = await virtualAccount.createVirtualAccount({\n * mode: 'EXISTING_TEAM',\n * teamId: 'team-123',\n * virtualAccountName: 'Bot'\n * });\n *\n * const members = await team.listTeamMembers(created.virtualAccount.virtualAccountTeamId);\n * const memberId = team.getMemberIdByUserId(members, created.virtualAccount.id);\n *\n * await rbac.assignMemberRole(created.virtualAccount.virtualAccountTeamId, memberId, {\n * roleType: 'SYSTEM',\n * roleCode: 'SUB_UNIT_VIEWER',\n * scopeType: 'TEAM'\n * });\n * ```\n *\n * @module rbac\n */\n\nimport { PlolinkClient } from '../../core/client';\nimport { PlolinkError } from '../../core/error';\nimport type {\n PermissionDefinitionsResponse,\n TeamRolesResponse,\n CreateCustomRoleParams,\n UpdateCustomRoleParams,\n CustomRoleInfo,\n DeleteRoleResult,\n MemberRoleListItem,\n MemberRoleRecord,\n UpdateMemberRoleScopeParams,\n QuickGrantTalentAccessParams,\n TeamRoleDetail,\n} from '../../types/rbac';\nimport type { AssignRoleParams } from '../../types/shared';\n\nexport type {\n PermissionDefinitionsResponse,\n TeamRolesResponse,\n CreateCustomRoleParams,\n UpdateCustomRoleParams,\n CustomRoleInfo,\n DeleteRoleResult,\n MemberRoleListItem,\n MemberRoleRecord,\n UpdateMemberRoleScopeParams,\n QuickGrantTalentAccessParams,\n TeamRoleDetail,\n} from '../../types/rbac';\n\nexport type { AssignRoleParams, RoleType, ScopeType } from '../../types/shared';\n\nexport class Rbac {\n private client: PlolinkClient;\n\n constructor(client: PlolinkClient) {\n this.client = client;\n }\n\n /**\n * 获取所有权限点定义 + 系统角色定义\n * GET /api/v1/permissions\n */\n public async getPermissionDefinitions(): Promise<PermissionDefinitionsResponse> {\n return this.client.axiosInstance.get('/api/v1/permissions');\n }\n\n /**\n * 列出团队角色(系统角色 + 自定义角色)\n * GET /api/v1/teams/:teamId/roles\n */\n public async listTeamRoles(teamId: string): Promise<TeamRolesResponse> {\n if (!teamId || teamId.trim().length === 0) {\n throw new PlolinkError('teamId is required', 'INVALID_PARAMS');\n }\n return this.client.axiosInstance.get(`/api/v1/teams/${teamId}/roles`);\n }\n\n /**\n * 创建自定义角色\n * POST /api/v1/teams/:teamId/roles\n */\n public async createCustomRole(teamId: string, params: CreateCustomRoleParams): Promise<CustomRoleInfo> {\n if (!teamId || teamId.trim().length === 0) {\n throw new PlolinkError('teamId is required', 'INVALID_PARAMS');\n }\n if (!params.name || params.name.trim().length === 0) {\n throw new PlolinkError('name is required and cannot be empty', 'INVALID_PARAMS');\n }\n if (!params.code || params.code.trim().length === 0) {\n throw new PlolinkError('code is required and cannot be empty', 'INVALID_PARAMS');\n }\n if (!Array.isArray(params.permissions)) {\n throw new PlolinkError('permissions must be an array', 'INVALID_PARAMS');\n }\n return this.client.axiosInstance.post(`/api/v1/teams/${teamId}/roles`, params);\n }\n\n /**\n * 更新自定义角色\n * PUT /api/v1/teams/:teamId/roles/:roleId\n */\n public async updateCustomRole(\n teamId: string,\n roleId: string,\n params: UpdateCustomRoleParams\n ): Promise<CustomRoleInfo> {\n if (!teamId || teamId.trim().length === 0) {\n throw new PlolinkError('teamId is required', 'INVALID_PARAMS');\n }\n if (!roleId || roleId.trim().length === 0) {\n throw new PlolinkError('roleId is required', 'INVALID_PARAMS');\n }\n\n // 允许部分更新,但如果传了 name 就要校验\n if (params.name !== undefined && params.name.trim().length === 0) {\n throw new PlolinkError('name cannot be empty', 'INVALID_PARAMS');\n }\n if (params.code !== undefined && params.code.trim().length === 0) {\n throw new PlolinkError('code cannot be empty', 'INVALID_PARAMS');\n }\n if (params.permissions !== undefined && !Array.isArray(params.permissions)) {\n throw new PlolinkError('permissions must be an array', 'INVALID_PARAMS');\n }\n\n return this.client.axiosInstance.put(`/api/v1/teams/${teamId}/roles/${roleId}`, params);\n }\n\n /**\n * 删除自定义角色\n * DELETE /api/v1/teams/:teamId/roles/:roleId?force=true\n */\n public async deleteCustomRole(\n teamId: string,\n roleId: string,\n options?: { force?: boolean }\n ): Promise<DeleteRoleResult> {\n if (!teamId || teamId.trim().length === 0) {\n throw new PlolinkError('teamId is required', 'INVALID_PARAMS');\n }\n if (!roleId || roleId.trim().length === 0) {\n throw new PlolinkError('roleId is required', 'INVALID_PARAMS');\n }\n const params = options?.force ? { force: 'true' } : undefined;\n return this.client.axiosInstance.delete(`/api/v1/teams/${teamId}/roles/${roleId}`, { params });\n }\n\n /**\n * 获取角色详情(系统角色或自定义角色)\n * GET /api/v1/teams/:teamId/roles/:roleId\n */\n public async getRoleDetail(teamId: string, roleId: string): Promise<TeamRoleDetail> {\n if (!teamId || teamId.trim().length === 0) {\n throw new PlolinkError('teamId is required', 'INVALID_PARAMS');\n }\n if (!roleId || roleId.trim().length === 0) {\n throw new PlolinkError('roleId is required', 'INVALID_PARAMS');\n }\n return this.client.axiosInstance.get(`/api/v1/teams/${teamId}/roles/${roleId}`);\n }\n\n /**\n * 获取成员的所有角色(带角色信息与权限)\n * GET /api/v1/teams/:teamId/members/:memberId/roles\n */\n public async listMemberRoles(teamId: string, memberId: string): Promise<MemberRoleListItem[]> {\n if (!teamId || teamId.trim().length === 0) {\n throw new PlolinkError('teamId is required', 'INVALID_PARAMS');\n }\n if (!memberId || memberId.trim().length === 0) {\n throw new PlolinkError('memberId is required', 'INVALID_PARAMS');\n }\n return this.client.axiosInstance.get(`/api/v1/teams/${teamId}/members/${memberId}/roles`);\n }\n\n /**\n * 为成员分配角色(系统/自定义)及数据范围\n * POST /api/v1/teams/:teamId/members/:memberId/roles\n */\n public async assignMemberRole(\n teamId: string,\n memberId: string,\n params: AssignRoleParams\n ): Promise<MemberRoleRecord> {\n if (!teamId || teamId.trim().length === 0) {\n throw new PlolinkError('teamId is required', 'INVALID_PARAMS');\n }\n if (!memberId || memberId.trim().length === 0) {\n throw new PlolinkError('memberId is required', 'INVALID_PARAMS');\n }\n\n // 最小校验(服务端也会校验;这里提前快速失败)\n if (params.roleType === 'SYSTEM' && (!params.roleCode || params.roleCode.trim().length === 0)) {\n throw new PlolinkError('roleCode is required when roleType is SYSTEM', 'INVALID_PARAMS');\n }\n if (params.roleType === 'CUSTOM' && (!params.roleId || params.roleId.trim().length === 0)) {\n throw new PlolinkError('roleId is required when roleType is CUSTOM', 'INVALID_PARAMS');\n }\n\n return this.client.axiosInstance.post(\n `/api/v1/teams/${teamId}/members/${memberId}/roles`,\n params\n );\n }\n\n /**\n * 更新成员角色的数据范围\n * PUT /api/v1/teams/:teamId/members/:memberId/roles/:memberRoleId\n */\n public async updateMemberRoleScope(\n teamId: string,\n memberId: string,\n memberRoleId: string,\n params: UpdateMemberRoleScopeParams\n ): Promise<MemberRoleRecord> {\n if (!teamId || teamId.trim().length === 0) {\n throw new PlolinkError('teamId is required', 'INVALID_PARAMS');\n }\n if (!memberId || memberId.trim().length === 0) {\n throw new PlolinkError('memberId is required', 'INVALID_PARAMS');\n }\n if (!memberRoleId || memberRoleId.trim().length === 0) {\n throw new PlolinkError('memberRoleId is required', 'INVALID_PARAMS');\n }\n if (!params.scopeType || params.scopeType.trim().length === 0) {\n throw new PlolinkError('scopeType is required', 'INVALID_PARAMS');\n }\n\n return this.client.axiosInstance.put(\n `/api/v1/teams/${teamId}/members/${memberId}/roles/${memberRoleId}`,\n params\n );\n }\n\n /**\n * 移除成员角色\n * DELETE /api/v1/teams/:teamId/members/:memberId/roles/:memberRoleId\n */\n public async removeMemberRole(\n teamId: string,\n memberId: string,\n memberRoleId: string\n ): Promise<DeleteRoleResult> {\n if (!teamId || teamId.trim().length === 0) {\n throw new PlolinkError('teamId is required', 'INVALID_PARAMS');\n }\n if (!memberId || memberId.trim().length === 0) {\n throw new PlolinkError('memberId is required', 'INVALID_PARAMS');\n }\n if (!memberRoleId || memberRoleId.trim().length === 0) {\n throw new PlolinkError('memberRoleId is required', 'INVALID_PARAMS');\n }\n\n return this.client.axiosInstance.delete(\n `/api/v1/teams/${teamId}/members/${memberId}/roles/${memberRoleId}`\n );\n }\n\n /**\n * 快捷授权人才模块(公司访问范围)\n * POST /api/v1/teams/:teamId/members/:memberId/roles/talent\n */\n public async quickGrantTalentAccess(\n teamId: string,\n memberId: string,\n params?: QuickGrantTalentAccessParams\n ): Promise<MemberRoleRecord> {\n if (!teamId || teamId.trim().length === 0) {\n throw new PlolinkError('teamId is required', 'INVALID_PARAMS');\n }\n if (!memberId || memberId.trim().length === 0) {\n throw new PlolinkError('memberId is required', 'INVALID_PARAMS');\n }\n\n // 轻量校验 roleCode\n const roleCode = params?.roleCode;\n if (roleCode && roleCode !== 'SUB_UNIT_VIEWER' && roleCode !== 'SUB_UNIT_MANAGER') {\n throw new PlolinkError(\n 'roleCode must be SUB_UNIT_VIEWER or SUB_UNIT_MANAGER',\n 'INVALID_PARAMS'\n );\n }\n\n return this.client.axiosInstance.post(\n `/api/v1/teams/${teamId}/members/${memberId}/roles/talent`,\n params ?? {}\n );\n }\n}\n\n\n"]}
@@ -0,0 +1,54 @@
1
+ 'use strict';
2
+
3
+ var chunkY3UJVC2L_cjs = require('../../chunk-Y3UJVC2L.cjs');
4
+
5
+ // src/modules/team/index.ts
6
+ var Team = class {
7
+ constructor(client) {
8
+ this.client = client;
9
+ }
10
+ /**
11
+ * 列出团队成员
12
+ *
13
+ * @param teamId - 团队 ID
14
+ * @returns 团队成员列表
15
+ */
16
+ async listTeamMembers(teamId) {
17
+ if (!teamId || teamId.trim().length === 0) {
18
+ throw new chunkY3UJVC2L_cjs.PlolinkError("teamId is required", "INVALID_PARAMS");
19
+ }
20
+ const res = await this.client.axiosInstance.get(
21
+ `/api/v1/teams/${teamId}/members`
22
+ );
23
+ return res.members;
24
+ }
25
+ /**
26
+ * 从团队成员列表中,通过 userId 获取 memberId
27
+ *
28
+ * @description
29
+ * RBAC 的“成员角色”相关 API 使用的是 teamMemberId(memberId),而不是 userId。
30
+ * 虚拟账号创建 API 返回的是虚拟账号 userId(即 virtualAccount.id),因此需要这一步映射。
31
+ *
32
+ * @param members - listTeamMembers 返回的成员列表
33
+ * @param userId - 用户 ID(虚拟账号也是 userId)
34
+ * @returns memberId
35
+ */
36
+ getMemberIdByUserId(members, userId) {
37
+ if (!userId || userId.trim().length === 0) {
38
+ throw new chunkY3UJVC2L_cjs.PlolinkError("userId is required", "INVALID_PARAMS");
39
+ }
40
+ const member = members.find((m) => m.userId === userId);
41
+ if (!member) {
42
+ throw new chunkY3UJVC2L_cjs.PlolinkError(
43
+ "Team member not found for the given userId",
44
+ "NOT_FOUND",
45
+ { userId }
46
+ );
47
+ }
48
+ return member.id;
49
+ }
50
+ };
51
+
52
+ exports.Team = Team;
53
+ //# sourceMappingURL=index.cjs.map
54
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/modules/team/index.ts"],"names":["PlolinkError"],"mappings":";;;;;AA8BO,IAAM,OAAN,MAAW;AAAA,EAGhB,YAAY,MAAA,EAAuB;AACjC,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAa,gBAAgB,MAAA,EAA2C;AACtE,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,IAAA,EAAK,CAAE,WAAW,CAAA,EAAG;AACzC,MAAA,MAAM,IAAIA,8BAAA,CAAa,oBAAA,EAAsB,gBAAgB,CAAA;AAAA,IAC/D;AAEA,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,aAAA,CAAc,GAAA;AAAA,MAC1C,iBAAiB,MAAM,CAAA,QAAA;AAAA,KACzB;AAEA,IAAA,OAAO,GAAA,CAAI,OAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaO,mBAAA,CAAoB,SAA2B,MAAA,EAAwB;AAC5E,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,IAAA,EAAK,CAAE,WAAW,CAAA,EAAG;AACzC,MAAA,MAAM,IAAIA,8BAAA,CAAa,oBAAA,EAAsB,gBAAgB,CAAA;AAAA,IAC/D;AAEA,IAAA,MAAM,SAAS,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,MAAM,CAAA;AACtD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAIA,8BAAA;AAAA,QACR,4CAAA;AAAA,QACA,WAAA;AAAA,QACA,EAAE,MAAA;AAAO,OACX;AAAA,IACF;AAEA,IAAA,OAAO,MAAA,CAAO,EAAA;AAAA,EAChB;AACF","file":"index.cjs","sourcesContent":["/**\n * 团队模块 (Team)\n *\n * @description\n * 团队相关能力封装(目前聚焦“成员查询”,用于配合 RBAC/虚拟账号完成角色管理闭环):\n * - 列出团队成员\n * - 根据 userId 解析 memberId(虚拟账号/普通用户通用)\n *\n * @example\n * ```typescript\n * import { PlolinkClient } from '@plolink/sdk';\n * import { Team } from '@plolink/sdk/team';\n *\n * const client = new PlolinkClient({ token: 'sk-xxx' });\n * const team = new Team(client);\n *\n * const members = await team.listTeamMembers('team-123');\n * const memberId = team.getMemberIdByUserId(members, 'user-abc');\n * ```\n *\n * @module team\n */\n\nimport { PlolinkClient } from '../../core/client';\nimport { PlolinkError } from '../../core/error';\nimport type { TeamMemberInfo } from '../../types/team';\n\nexport type { TeamMemberInfo, TeamMemberRoleInfo } from '../../types/team';\nexport type { RoleType, ScopeType } from '../../types/shared';\n\nexport class Team {\n private client: PlolinkClient;\n\n constructor(client: PlolinkClient) {\n this.client = client;\n }\n\n /**\n * 列出团队成员\n *\n * @param teamId - 团队 ID\n * @returns 团队成员列表\n */\n public async listTeamMembers(teamId: string): Promise<TeamMemberInfo[]> {\n if (!teamId || teamId.trim().length === 0) {\n throw new PlolinkError('teamId is required', 'INVALID_PARAMS');\n }\n\n const res = await this.client.axiosInstance.get<{ members: TeamMemberInfo[] }>(\n `/api/v1/teams/${teamId}/members`\n );\n\n return res.members;\n }\n\n /**\n * 从团队成员列表中,通过 userId 获取 memberId\n *\n * @description\n * RBAC 的“成员角色”相关 API 使用的是 teamMemberId(memberId),而不是 userId。\n * 虚拟账号创建 API 返回的是虚拟账号 userId(即 virtualAccount.id),因此需要这一步映射。\n *\n * @param members - listTeamMembers 返回的成员列表\n * @param userId - 用户 ID(虚拟账号也是 userId)\n * @returns memberId\n */\n public getMemberIdByUserId(members: TeamMemberInfo[], userId: string): string {\n if (!userId || userId.trim().length === 0) {\n throw new PlolinkError('userId is required', 'INVALID_PARAMS');\n }\n\n const member = members.find((m) => m.userId === userId);\n if (!member) {\n throw new PlolinkError(\n 'Team member not found for the given userId',\n 'NOT_FOUND',\n { userId }\n );\n }\n\n return member.id;\n }\n}\n\n\n"]}
@@ -0,0 +1,91 @@
1
+ import { P as PlolinkClient } from '../../client-CAjIQKPm.cjs';
2
+ import { R as RoleType, S as ScopeType } from '../../shared-6ZepUSPW.cjs';
3
+ import '../../core-77EbLgbp.cjs';
4
+ import 'axios';
5
+
6
+ /**
7
+ * Team 模块类型
8
+ */
9
+
10
+ /**
11
+ * 团队成员-角色信息(用于团队成员列表)
12
+ */
13
+ interface TeamMemberRoleInfo {
14
+ memberRoleId: string;
15
+ roleType: RoleType;
16
+ roleCode?: string | null;
17
+ roleName?: string | null;
18
+ scopeType: ScopeType;
19
+ scopeValue: Record<string, unknown> | null;
20
+ }
21
+ /**
22
+ * 团队成员信息(GET /api/v1/teams/:teamId/members 的 members 元素)
23
+ */
24
+ interface TeamMemberInfo {
25
+ id: string;
26
+ userId: string;
27
+ userName: string;
28
+ userEmail: string;
29
+ userImage: string;
30
+ companyName: string;
31
+ contactName: string;
32
+ contactPhone: string;
33
+ parentTeamId: string;
34
+ isCreator: boolean;
35
+ isSubAccount: boolean;
36
+ isTeamAdmin: boolean;
37
+ status: string;
38
+ statusLabel: string;
39
+ invitedAt?: string;
40
+ joinedAt: string | null;
41
+ roles: TeamMemberRoleInfo[];
42
+ }
43
+
44
+ /**
45
+ * 团队模块 (Team)
46
+ *
47
+ * @description
48
+ * 团队相关能力封装(目前聚焦“成员查询”,用于配合 RBAC/虚拟账号完成角色管理闭环):
49
+ * - 列出团队成员
50
+ * - 根据 userId 解析 memberId(虚拟账号/普通用户通用)
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * import { PlolinkClient } from '@plolink/sdk';
55
+ * import { Team } from '@plolink/sdk/team';
56
+ *
57
+ * const client = new PlolinkClient({ token: 'sk-xxx' });
58
+ * const team = new Team(client);
59
+ *
60
+ * const members = await team.listTeamMembers('team-123');
61
+ * const memberId = team.getMemberIdByUserId(members, 'user-abc');
62
+ * ```
63
+ *
64
+ * @module team
65
+ */
66
+
67
+ declare class Team {
68
+ private client;
69
+ constructor(client: PlolinkClient);
70
+ /**
71
+ * 列出团队成员
72
+ *
73
+ * @param teamId - 团队 ID
74
+ * @returns 团队成员列表
75
+ */
76
+ listTeamMembers(teamId: string): Promise<TeamMemberInfo[]>;
77
+ /**
78
+ * 从团队成员列表中,通过 userId 获取 memberId
79
+ *
80
+ * @description
81
+ * RBAC 的“成员角色”相关 API 使用的是 teamMemberId(memberId),而不是 userId。
82
+ * 虚拟账号创建 API 返回的是虚拟账号 userId(即 virtualAccount.id),因此需要这一步映射。
83
+ *
84
+ * @param members - listTeamMembers 返回的成员列表
85
+ * @param userId - 用户 ID(虚拟账号也是 userId)
86
+ * @returns memberId
87
+ */
88
+ getMemberIdByUserId(members: TeamMemberInfo[], userId: string): string;
89
+ }
90
+
91
+ export { RoleType, ScopeType, Team, type TeamMemberInfo, type TeamMemberRoleInfo };
@@ -0,0 +1,91 @@
1
+ import { P as PlolinkClient } from '../../client-CwNikk7i.js';
2
+ import { R as RoleType, S as ScopeType } from '../../shared-6ZepUSPW.js';
3
+ import '../../core-77EbLgbp.js';
4
+ import 'axios';
5
+
6
+ /**
7
+ * Team 模块类型
8
+ */
9
+
10
+ /**
11
+ * 团队成员-角色信息(用于团队成员列表)
12
+ */
13
+ interface TeamMemberRoleInfo {
14
+ memberRoleId: string;
15
+ roleType: RoleType;
16
+ roleCode?: string | null;
17
+ roleName?: string | null;
18
+ scopeType: ScopeType;
19
+ scopeValue: Record<string, unknown> | null;
20
+ }
21
+ /**
22
+ * 团队成员信息(GET /api/v1/teams/:teamId/members 的 members 元素)
23
+ */
24
+ interface TeamMemberInfo {
25
+ id: string;
26
+ userId: string;
27
+ userName: string;
28
+ userEmail: string;
29
+ userImage: string;
30
+ companyName: string;
31
+ contactName: string;
32
+ contactPhone: string;
33
+ parentTeamId: string;
34
+ isCreator: boolean;
35
+ isSubAccount: boolean;
36
+ isTeamAdmin: boolean;
37
+ status: string;
38
+ statusLabel: string;
39
+ invitedAt?: string;
40
+ joinedAt: string | null;
41
+ roles: TeamMemberRoleInfo[];
42
+ }
43
+
44
+ /**
45
+ * 团队模块 (Team)
46
+ *
47
+ * @description
48
+ * 团队相关能力封装(目前聚焦“成员查询”,用于配合 RBAC/虚拟账号完成角色管理闭环):
49
+ * - 列出团队成员
50
+ * - 根据 userId 解析 memberId(虚拟账号/普通用户通用)
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * import { PlolinkClient } from '@plolink/sdk';
55
+ * import { Team } from '@plolink/sdk/team';
56
+ *
57
+ * const client = new PlolinkClient({ token: 'sk-xxx' });
58
+ * const team = new Team(client);
59
+ *
60
+ * const members = await team.listTeamMembers('team-123');
61
+ * const memberId = team.getMemberIdByUserId(members, 'user-abc');
62
+ * ```
63
+ *
64
+ * @module team
65
+ */
66
+
67
+ declare class Team {
68
+ private client;
69
+ constructor(client: PlolinkClient);
70
+ /**
71
+ * 列出团队成员
72
+ *
73
+ * @param teamId - 团队 ID
74
+ * @returns 团队成员列表
75
+ */
76
+ listTeamMembers(teamId: string): Promise<TeamMemberInfo[]>;
77
+ /**
78
+ * 从团队成员列表中,通过 userId 获取 memberId
79
+ *
80
+ * @description
81
+ * RBAC 的“成员角色”相关 API 使用的是 teamMemberId(memberId),而不是 userId。
82
+ * 虚拟账号创建 API 返回的是虚拟账号 userId(即 virtualAccount.id),因此需要这一步映射。
83
+ *
84
+ * @param members - listTeamMembers 返回的成员列表
85
+ * @param userId - 用户 ID(虚拟账号也是 userId)
86
+ * @returns memberId
87
+ */
88
+ getMemberIdByUserId(members: TeamMemberInfo[], userId: string): string;
89
+ }
90
+
91
+ export { RoleType, ScopeType, Team, type TeamMemberInfo, type TeamMemberRoleInfo };
@@ -0,0 +1,52 @@
1
+ import { PlolinkError } from '../../chunk-MD4O7FWT.js';
2
+
3
+ // src/modules/team/index.ts
4
+ var Team = class {
5
+ constructor(client) {
6
+ this.client = client;
7
+ }
8
+ /**
9
+ * 列出团队成员
10
+ *
11
+ * @param teamId - 团队 ID
12
+ * @returns 团队成员列表
13
+ */
14
+ async listTeamMembers(teamId) {
15
+ if (!teamId || teamId.trim().length === 0) {
16
+ throw new PlolinkError("teamId is required", "INVALID_PARAMS");
17
+ }
18
+ const res = await this.client.axiosInstance.get(
19
+ `/api/v1/teams/${teamId}/members`
20
+ );
21
+ return res.members;
22
+ }
23
+ /**
24
+ * 从团队成员列表中,通过 userId 获取 memberId
25
+ *
26
+ * @description
27
+ * RBAC 的“成员角色”相关 API 使用的是 teamMemberId(memberId),而不是 userId。
28
+ * 虚拟账号创建 API 返回的是虚拟账号 userId(即 virtualAccount.id),因此需要这一步映射。
29
+ *
30
+ * @param members - listTeamMembers 返回的成员列表
31
+ * @param userId - 用户 ID(虚拟账号也是 userId)
32
+ * @returns memberId
33
+ */
34
+ getMemberIdByUserId(members, userId) {
35
+ if (!userId || userId.trim().length === 0) {
36
+ throw new PlolinkError("userId is required", "INVALID_PARAMS");
37
+ }
38
+ const member = members.find((m) => m.userId === userId);
39
+ if (!member) {
40
+ throw new PlolinkError(
41
+ "Team member not found for the given userId",
42
+ "NOT_FOUND",
43
+ { userId }
44
+ );
45
+ }
46
+ return member.id;
47
+ }
48
+ };
49
+
50
+ export { Team };
51
+ //# sourceMappingURL=index.js.map
52
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/modules/team/index.ts"],"names":[],"mappings":";;;AA8BO,IAAM,OAAN,MAAW;AAAA,EAGhB,YAAY,MAAA,EAAuB;AACjC,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAa,gBAAgB,MAAA,EAA2C;AACtE,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,IAAA,EAAK,CAAE,WAAW,CAAA,EAAG;AACzC,MAAA,MAAM,IAAI,YAAA,CAAa,oBAAA,EAAsB,gBAAgB,CAAA;AAAA,IAC/D;AAEA,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,MAAA,CAAO,aAAA,CAAc,GAAA;AAAA,MAC1C,iBAAiB,MAAM,CAAA,QAAA;AAAA,KACzB;AAEA,IAAA,OAAO,GAAA,CAAI,OAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaO,mBAAA,CAAoB,SAA2B,MAAA,EAAwB;AAC5E,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,IAAA,EAAK,CAAE,WAAW,CAAA,EAAG;AACzC,MAAA,MAAM,IAAI,YAAA,CAAa,oBAAA,EAAsB,gBAAgB,CAAA;AAAA,IAC/D;AAEA,IAAA,MAAM,SAAS,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,MAAM,CAAA;AACtD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,YAAA;AAAA,QACR,4CAAA;AAAA,QACA,WAAA;AAAA,QACA,EAAE,MAAA;AAAO,OACX;AAAA,IACF;AAEA,IAAA,OAAO,MAAA,CAAO,EAAA;AAAA,EAChB;AACF","file":"index.js","sourcesContent":["/**\n * 团队模块 (Team)\n *\n * @description\n * 团队相关能力封装(目前聚焦“成员查询”,用于配合 RBAC/虚拟账号完成角色管理闭环):\n * - 列出团队成员\n * - 根据 userId 解析 memberId(虚拟账号/普通用户通用)\n *\n * @example\n * ```typescript\n * import { PlolinkClient } from '@plolink/sdk';\n * import { Team } from '@plolink/sdk/team';\n *\n * const client = new PlolinkClient({ token: 'sk-xxx' });\n * const team = new Team(client);\n *\n * const members = await team.listTeamMembers('team-123');\n * const memberId = team.getMemberIdByUserId(members, 'user-abc');\n * ```\n *\n * @module team\n */\n\nimport { PlolinkClient } from '../../core/client';\nimport { PlolinkError } from '../../core/error';\nimport type { TeamMemberInfo } from '../../types/team';\n\nexport type { TeamMemberInfo, TeamMemberRoleInfo } from '../../types/team';\nexport type { RoleType, ScopeType } from '../../types/shared';\n\nexport class Team {\n private client: PlolinkClient;\n\n constructor(client: PlolinkClient) {\n this.client = client;\n }\n\n /**\n * 列出团队成员\n *\n * @param teamId - 团队 ID\n * @returns 团队成员列表\n */\n public async listTeamMembers(teamId: string): Promise<TeamMemberInfo[]> {\n if (!teamId || teamId.trim().length === 0) {\n throw new PlolinkError('teamId is required', 'INVALID_PARAMS');\n }\n\n const res = await this.client.axiosInstance.get<{ members: TeamMemberInfo[] }>(\n `/api/v1/teams/${teamId}/members`\n );\n\n return res.members;\n }\n\n /**\n * 从团队成员列表中,通过 userId 获取 memberId\n *\n * @description\n * RBAC 的“成员角色”相关 API 使用的是 teamMemberId(memberId),而不是 userId。\n * 虚拟账号创建 API 返回的是虚拟账号 userId(即 virtualAccount.id),因此需要这一步映射。\n *\n * @param members - listTeamMembers 返回的成员列表\n * @param userId - 用户 ID(虚拟账号也是 userId)\n * @returns memberId\n */\n public getMemberIdByUserId(members: TeamMemberInfo[], userId: string): string {\n if (!userId || userId.trim().length === 0) {\n throw new PlolinkError('userId is required', 'INVALID_PARAMS');\n }\n\n const member = members.find((m) => m.userId === userId);\n if (!member) {\n throw new PlolinkError(\n 'Team member not found for the given userId',\n 'NOT_FOUND',\n { userId }\n );\n }\n\n return member.id;\n }\n}\n\n\n"]}