@intlayer/backend 5.7.2 → 5.7.3
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/cjs/controllers/ai.controller.cjs.map +1 -1
- package/dist/cjs/controllers/dictionary.controller.cjs +39 -20
- package/dist/cjs/controllers/dictionary.controller.cjs.map +1 -1
- package/dist/cjs/controllers/newsletter.controller.cjs.map +1 -1
- package/dist/cjs/controllers/organization.controller.cjs +51 -19
- package/dist/cjs/controllers/organization.controller.cjs.map +1 -1
- package/dist/cjs/controllers/project.controller.cjs +42 -12
- package/dist/cjs/controllers/project.controller.cjs.map +1 -1
- package/dist/cjs/controllers/projectAccessKey.controller.cjs +21 -3
- package/dist/cjs/controllers/projectAccessKey.controller.cjs.map +1 -1
- package/dist/cjs/controllers/search.controller.cjs.map +1 -1
- package/dist/cjs/controllers/stripe.controller.cjs.map +1 -1
- package/dist/cjs/controllers/tag.controller.cjs +48 -17
- package/dist/cjs/controllers/tag.controller.cjs.map +1 -1
- package/dist/cjs/controllers/user.controller.cjs +7 -1
- package/dist/cjs/controllers/user.controller.cjs.map +1 -1
- package/dist/cjs/middlewares/sessionAuth.middleware.cjs.map +1 -1
- package/dist/cjs/routes/ai.routes.cjs.map +1 -1
- package/dist/cjs/routes/dictionary.routes.cjs.map +1 -1
- package/dist/cjs/routes/eventListener.routes.cjs.map +1 -1
- package/dist/cjs/routes/newsletter.routes.cjs.map +1 -1
- package/dist/cjs/routes/organization.routes.cjs.map +1 -1
- package/dist/cjs/routes/project.routes.cjs +3 -12
- package/dist/cjs/routes/project.routes.cjs.map +1 -1
- package/dist/cjs/routes/search.routes.cjs.map +1 -1
- package/dist/cjs/routes/stripe.routes.cjs.map +1 -1
- package/dist/cjs/routes/tags.routes.cjs.map +1 -1
- package/dist/cjs/routes/user.routes.cjs.map +1 -1
- package/dist/cjs/schemas/tag.schema.cjs +5 -0
- package/dist/cjs/schemas/tag.schema.cjs.map +1 -1
- package/dist/cjs/services/dictionary.service.cjs +0 -8
- package/dist/cjs/services/dictionary.service.cjs.map +1 -1
- package/dist/cjs/services/organization.service.cjs +0 -9
- package/dist/cjs/services/organization.service.cjs.map +1 -1
- package/dist/cjs/types/tag.types.cjs.map +1 -1
- package/dist/cjs/utils/auth/getAuth.cjs +1 -0
- package/dist/cjs/utils/auth/getAuth.cjs.map +1 -1
- package/dist/cjs/utils/permissions.cjs +100 -22
- package/dist/cjs/utils/permissions.cjs.map +1 -1
- package/dist/esm/controllers/ai.controller.mjs.map +1 -1
- package/dist/esm/controllers/dictionary.controller.mjs +39 -20
- package/dist/esm/controllers/dictionary.controller.mjs.map +1 -1
- package/dist/esm/controllers/newsletter.controller.mjs.map +1 -1
- package/dist/esm/controllers/organization.controller.mjs +51 -19
- package/dist/esm/controllers/organization.controller.mjs.map +1 -1
- package/dist/esm/controllers/project.controller.mjs +42 -12
- package/dist/esm/controllers/project.controller.mjs.map +1 -1
- package/dist/esm/controllers/projectAccessKey.controller.mjs +21 -3
- package/dist/esm/controllers/projectAccessKey.controller.mjs.map +1 -1
- package/dist/esm/controllers/search.controller.mjs.map +1 -1
- package/dist/esm/controllers/stripe.controller.mjs.map +1 -1
- package/dist/esm/controllers/tag.controller.mjs +48 -17
- package/dist/esm/controllers/tag.controller.mjs.map +1 -1
- package/dist/esm/controllers/user.controller.mjs +7 -1
- package/dist/esm/controllers/user.controller.mjs.map +1 -1
- package/dist/esm/middlewares/sessionAuth.middleware.mjs.map +1 -1
- package/dist/esm/routes/ai.routes.mjs.map +1 -1
- package/dist/esm/routes/dictionary.routes.mjs.map +1 -1
- package/dist/esm/routes/eventListener.routes.mjs.map +1 -1
- package/dist/esm/routes/newsletter.routes.mjs.map +1 -1
- package/dist/esm/routes/organization.routes.mjs.map +1 -1
- package/dist/esm/routes/project.routes.mjs +3 -12
- package/dist/esm/routes/project.routes.mjs.map +1 -1
- package/dist/esm/routes/search.routes.mjs.map +1 -1
- package/dist/esm/routes/stripe.routes.mjs.map +1 -1
- package/dist/esm/routes/tags.routes.mjs.map +1 -1
- package/dist/esm/routes/user.routes.mjs.map +1 -1
- package/dist/esm/schemas/tag.schema.mjs +5 -0
- package/dist/esm/schemas/tag.schema.mjs.map +1 -1
- package/dist/esm/services/dictionary.service.mjs +0 -7
- package/dist/esm/services/dictionary.service.mjs.map +1 -1
- package/dist/esm/services/organization.service.mjs +0 -9
- package/dist/esm/services/organization.service.mjs.map +1 -1
- package/dist/esm/utils/auth/getAuth.mjs +1 -0
- package/dist/esm/utils/auth/getAuth.mjs.map +1 -1
- package/dist/esm/utils/permissions.mjs +100 -22
- package/dist/esm/utils/permissions.mjs.map +1 -1
- package/dist/types/controllers/ai.controller.d.ts +10 -9
- package/dist/types/controllers/ai.controller.d.ts.map +1 -1
- package/dist/types/controllers/dictionary.controller.d.ts +9 -8
- package/dist/types/controllers/dictionary.controller.d.ts.map +1 -1
- package/dist/types/controllers/newsletter.controller.d.ts +5 -4
- package/dist/types/controllers/newsletter.controller.d.ts.map +1 -1
- package/dist/types/controllers/organization.controller.d.ts +11 -10
- package/dist/types/controllers/organization.controller.d.ts.map +1 -1
- package/dist/types/controllers/project.controller.d.ts +10 -9
- package/dist/types/controllers/project.controller.d.ts.map +1 -1
- package/dist/types/controllers/projectAccessKey.controller.d.ts +5 -4
- package/dist/types/controllers/projectAccessKey.controller.d.ts.map +1 -1
- package/dist/types/controllers/search.controller.d.ts.map +1 -1
- package/dist/types/controllers/stripe.controller.d.ts +5 -4
- package/dist/types/controllers/stripe.controller.d.ts.map +1 -1
- package/dist/types/controllers/tag.controller.d.ts +6 -5
- package/dist/types/controllers/tag.controller.d.ts.map +1 -1
- package/dist/types/controllers/user.controller.d.ts +9 -8
- package/dist/types/controllers/user.controller.d.ts.map +1 -1
- package/dist/types/middlewares/sessionAuth.middleware.d.ts +2 -0
- package/dist/types/middlewares/sessionAuth.middleware.d.ts.map +1 -1
- package/dist/types/schemas/tag.schema.d.ts.map +1 -1
- package/dist/types/services/dictionary.service.d.ts +0 -1
- package/dist/types/services/dictionary.service.d.ts.map +1 -1
- package/dist/types/services/organization.service.d.ts.map +1 -1
- package/dist/types/types/tag.types.d.ts +2 -0
- package/dist/types/types/tag.types.d.ts.map +1 -1
- package/dist/types/utils/auth/getAuth.d.ts.map +1 -1
- package/dist/types/utils/permissions.d.ts +67 -26
- package/dist/types/utils/permissions.d.ts.map +1 -1
- package/package.json +9 -9
|
@@ -16,19 +16,51 @@ const ROLE_POLICY = {
|
|
|
16
16
|
"user:write": () => true,
|
|
17
17
|
"user:admin": () => true
|
|
18
18
|
},
|
|
19
|
+
user: {
|
|
20
|
+
"user:read": ({
|
|
21
|
+
user,
|
|
22
|
+
targetUserIds
|
|
23
|
+
}) => targetUserIds.map(String).includes(String(user?.id)),
|
|
24
|
+
"user:write": ({
|
|
25
|
+
user,
|
|
26
|
+
targetUserIds
|
|
27
|
+
}) => targetUserIds.map(String).includes(String(user?.id)),
|
|
28
|
+
"user:admin": ({
|
|
29
|
+
user,
|
|
30
|
+
targetUserIds
|
|
31
|
+
}) => targetUserIds.map(String).includes(String(user?.id)),
|
|
32
|
+
"organization:read": ({
|
|
33
|
+
user,
|
|
34
|
+
targetOrganizations
|
|
35
|
+
}) => targetOrganizations.every(
|
|
36
|
+
(organization) => organization?.membersIds?.map(String).includes(String(user?.id))
|
|
37
|
+
)
|
|
38
|
+
},
|
|
19
39
|
org_admin: {
|
|
20
|
-
"organization:read": (
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
40
|
+
"organization:read": ({
|
|
41
|
+
organization,
|
|
42
|
+
targetOrganizations
|
|
43
|
+
}) => targetOrganizations.every(
|
|
44
|
+
(targetOrg) => String(targetOrg.id) === String(organization?.id)
|
|
45
|
+
),
|
|
46
|
+
"organization:write": ({
|
|
47
|
+
organization,
|
|
48
|
+
targetOrganizations
|
|
49
|
+
}) => targetOrganizations.every(
|
|
50
|
+
(targetOrg) => String(targetOrg.id) === String(organization?.id)
|
|
51
|
+
),
|
|
52
|
+
"organization:admin": ({
|
|
53
|
+
organization,
|
|
54
|
+
targetOrganizations
|
|
55
|
+
}) => targetOrganizations.every(
|
|
56
|
+
(targetOrg) => String(targetOrg.id) === String(organization?.id)
|
|
57
|
+
),
|
|
58
|
+
"project:read": ({ organization, project }) => String(project?.organizationId) === String(organization?.id),
|
|
59
|
+
"project:write": ({ organization, project }) => String(project?.organizationId) === String(organization?.id),
|
|
60
|
+
"project:admin": ({ organization, project }) => String(project?.organizationId) === String(organization?.id),
|
|
61
|
+
"tag:read": ({ organization, project }) => String(project?.organizationId) === String(organization?.id),
|
|
62
|
+
"tag:write": ({ organization, project }) => String(project?.organizationId) === String(organization?.id),
|
|
63
|
+
"tag:admin": ({ organization, project }) => String(project?.organizationId) === String(organization?.id),
|
|
32
64
|
"user:write": ({
|
|
33
65
|
organization,
|
|
34
66
|
targetUserIds
|
|
@@ -38,6 +70,12 @@ const ROLE_POLICY = {
|
|
|
38
70
|
},
|
|
39
71
|
org_user: {
|
|
40
72
|
"organization:read": () => true,
|
|
73
|
+
"project:read": ({
|
|
74
|
+
user,
|
|
75
|
+
targetProjects
|
|
76
|
+
}) => targetProjects?.every(
|
|
77
|
+
(project) => project?.membersIds?.map(String).includes(String(user?.id))
|
|
78
|
+
),
|
|
41
79
|
"user:read": ({
|
|
42
80
|
organization,
|
|
43
81
|
targetUserIds
|
|
@@ -46,23 +84,62 @@ const ROLE_POLICY = {
|
|
|
46
84
|
)
|
|
47
85
|
},
|
|
48
86
|
project_admin: {
|
|
49
|
-
"project:read": (
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
87
|
+
"project:read": ({
|
|
88
|
+
project,
|
|
89
|
+
targetProjectIds
|
|
90
|
+
}) => targetProjectIds?.every(
|
|
91
|
+
(projectId) => String(project?.id) === String(projectId)
|
|
92
|
+
),
|
|
93
|
+
"project:write": ({
|
|
94
|
+
project,
|
|
95
|
+
targetProjectIds
|
|
96
|
+
}) => targetProjectIds?.every(
|
|
97
|
+
(projectId) => String(project?.id) === String(projectId)
|
|
98
|
+
),
|
|
99
|
+
"project:admin": ({
|
|
100
|
+
project,
|
|
101
|
+
targetProjectIds
|
|
102
|
+
}) => targetProjectIds?.every(
|
|
103
|
+
(projectId) => String(project?.id) === String(projectId)
|
|
104
|
+
),
|
|
105
|
+
"tag:read": ({
|
|
106
|
+
project,
|
|
107
|
+
targetTagProjectIds
|
|
108
|
+
}) => targetTagProjectIds.every(
|
|
109
|
+
(projectId) => String(project?.id) === String(projectId)
|
|
110
|
+
),
|
|
111
|
+
"tag:write": ({
|
|
112
|
+
project,
|
|
113
|
+
targetTagProjectIds
|
|
114
|
+
}) => targetTagProjectIds.every(
|
|
115
|
+
(projectId) => String(project?.id) === String(projectId)
|
|
116
|
+
),
|
|
117
|
+
"tag:admin": ({
|
|
118
|
+
project,
|
|
119
|
+
targetTagProjectIds
|
|
120
|
+
}) => targetTagProjectIds.every(
|
|
121
|
+
(projectId) => String(project?.id) === String(projectId)
|
|
122
|
+
),
|
|
55
123
|
"user:write": ({
|
|
56
124
|
project,
|
|
57
125
|
targetUserIds
|
|
58
126
|
}) => targetUserIds.every(
|
|
59
127
|
(targetUserId) => project?.membersIds?.map(String).includes(String(targetUserId))
|
|
60
|
-
)
|
|
128
|
+
),
|
|
129
|
+
"dictionary:read": ({ project, user }) => project?.adminsIds?.map(String).includes(String(user?.id)),
|
|
130
|
+
"dictionary:write": ({ project, user }) => project?.adminsIds?.map(String).includes(String(user?.id)),
|
|
131
|
+
"dictionary:admin": ({ project, user }) => project?.adminsIds?.map(String).includes(String(user?.id))
|
|
61
132
|
},
|
|
62
133
|
project_user: {
|
|
63
|
-
"project:read": ({ user, project }) => project?.membersIds?.map(String).includes(String(user?.id)),
|
|
64
|
-
"dictionary:read": ({
|
|
65
|
-
|
|
134
|
+
"project:read": ({ user, organization, project }) => String(organization?.id) === String(project?.organizationId) && organization?.membersIds?.map(String).includes(String(user?.id)) && project?.membersIds?.map(String).includes(String(user?.id)),
|
|
135
|
+
"dictionary:read": ({
|
|
136
|
+
user,
|
|
137
|
+
project,
|
|
138
|
+
targetDictionaries
|
|
139
|
+
}) => project?.membersIds?.map(String).includes(String(user?.id)) && targetDictionaries.every(
|
|
140
|
+
(dictionary) => dictionary?.projectIds?.map(String).includes(String(project?.id))
|
|
141
|
+
),
|
|
142
|
+
"dictionary:write": ({ user, project }) => project?.adminsIds?.map(String).includes(String(user?.id)),
|
|
66
143
|
"tag:read": () => true,
|
|
67
144
|
"tag:write": () => true,
|
|
68
145
|
"tag:admin": ({ user, organization }) => organization?.adminsIds?.map(String).includes(String(user?.id)),
|
|
@@ -88,6 +165,7 @@ const getSessionRoles = ({
|
|
|
88
165
|
if (!user) {
|
|
89
166
|
return roles;
|
|
90
167
|
}
|
|
168
|
+
roles.push("user");
|
|
91
169
|
const isUserAdmin = user.role === "admin";
|
|
92
170
|
if (isUserAdmin) {
|
|
93
171
|
roles.push("admin");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/permissions.ts"],"sourcesContent":["import { Dictionary, Organization, Project, Tag, User } from '@/export';\nimport { SessionContext } from '@/types/session.types';\n\n/**\n * @description\n * A named grouping of privileges (e.g. `\"org_admin\"`).\n * Users are *granted* one or more Roles.\n */\nexport type Roles =\n | 'admin'\n | 'org_admin'\n | 'org_user'\n | 'project_admin'\n | 'project_user'\n | 'project_reviewer';\n\n/**\n * @description\n * An atomic operation that can be performed on a resource.\n * - **read**: view or list\n * - **write**: create or update\n * - **admin**: delete or change permissions\n */\nexport type Action = 'read' | 'write' | 'admin';\n\n/**\n * @description\n * A first‑class entity in your domain model that you want to protect.\n */\nexport type Resource = {\n organization: Organization;\n project: Project;\n dictionary: Dictionary;\n tag: Tag;\n user: User;\n};\n\n/**\n * @description\n * A literal string combining a Resource and an Action, e.g. `\"project:write\"`.\n * This is the *unit* checked at runtime in your middleware.\n */\nexport type Permission = `${keyof Resource}:${Action}`;\n\ntype CheckPrivilege = (\n args: any\n) => boolean | undefined | Promise<boolean> | Promise<undefined>;\n\ntype RolePolicy = Record<Roles, Partial<Record<Permission, CheckPrivilege>>>;\n\nexport const ROLE_POLICY = {\n admin: {\n 'organization:read': () => true,\n 'organization:write': () => true,\n 'organization:admin': () => true,\n 'project:read': () => true,\n 'project:write': () => true,\n 'project:admin': () => true,\n 'dictionary:read': () => true,\n 'dictionary:write': () => true,\n 'dictionary:admin': () => true,\n 'tag:read': () => true,\n 'tag:write': () => true,\n 'tag:admin': () => true,\n 'user:read': () => true,\n 'user:write': () => true,\n 'user:admin': () => true,\n },\n org_admin: {\n 'organization:read': () => true,\n 'organization:write': () => true,\n 'organization:admin': () => true,\n\n 'project:read': () => true,\n 'project:write': () => true,\n 'project:admin': () => true,\n 'dictionary:read': () => true,\n 'dictionary:write': () => true,\n 'dictionary:admin': () => true,\n 'tag:read': () => true,\n 'tag:write': () => true,\n 'tag:admin': () => true,\n\n 'user:write': ({\n organization,\n targetUserIds,\n }: SessionContext & { targetUserIds: User['id'][] }) =>\n targetUserIds.every((targetUserId) =>\n organization?.membersIds?.map(String).includes(String(targetUserId))\n ),\n },\n org_user: {\n 'organization:read': () => true,\n\n 'user:read': ({\n organization,\n targetUserIds,\n }: SessionContext & { targetUserIds: User['id'][] }) =>\n targetUserIds.every((targetUserId) =>\n organization?.membersIds?.map(String).includes(String(targetUserId))\n ),\n },\n project_admin: {\n 'project:read': () => true,\n 'project:write': () => true,\n 'project:admin': () => true,\n 'tag:read': () => true,\n 'tag:write': () => true,\n 'tag:admin': () => true,\n\n 'user:write': ({\n project,\n targetUserIds,\n }: SessionContext & { targetUserIds: User['id'][] }) =>\n targetUserIds.every((targetUserId) =>\n project?.membersIds?.map(String).includes(String(targetUserId))\n ),\n },\n project_user: {\n 'project:read': ({ user, project }: SessionContext) =>\n project?.membersIds?.map(String).includes(String(user?.id)),\n\n 'dictionary:read': ({ user, project }: SessionContext) =>\n project?.membersIds?.map(String).includes(String(user?.id)),\n 'dictionary:write': ({ user, project }: SessionContext) =>\n project?.membersIds?.map(String).includes(String(user?.id)),\n\n 'tag:read': () => true,\n 'tag:write': () => true,\n 'tag:admin': ({ user, organization }: SessionContext) =>\n organization?.adminsIds?.map(String).includes(String(user?.id)),\n\n 'user:read': ({\n project,\n targetUserIds,\n }: SessionContext & { targetUserIds: User['id'][] }) =>\n targetUserIds.every((targetUserId) =>\n project?.membersIds?.map(String).includes(String(targetUserId))\n ),\n },\n project_reviewer: {\n 'dictionary:read': ({ user, project }: SessionContext) =>\n project?.membersIds?.map(String).includes(String(user?.id)),\n 'dictionary:write': ({ user, project }: SessionContext) =>\n project?.membersIds?.map(String).includes(String(user?.id)),\n\n 'tag:read': () => true,\n },\n} as const satisfies RolePolicy;\n\nexport const getSessionRoles = ({\n user,\n organization,\n project,\n}: SessionContext): Roles[] => {\n const roles: Roles[] = [];\n\n if (!user) {\n return roles;\n }\n\n const isUserAdmin = user.role === 'admin';\n\n if (isUserAdmin) {\n roles.push('admin');\n }\n\n if (!organization) {\n return roles;\n }\n\n const isOrganizationAdmin = organization.adminsIds\n ?.map(String)\n .includes(String(user!.id));\n\n if (isOrganizationAdmin) {\n roles.push('org_admin');\n }\n\n const isOrganizationMember = organization.membersIds\n ?.map(String)\n .includes(String(user!.id));\n\n if (isOrganizationMember) {\n roles.push('org_user');\n }\n\n if (!project) {\n return roles;\n }\n\n const isProjectAdmin = project.adminsIds\n ?.map(String)\n .includes(String(user!.id));\n\n if (isProjectAdmin) {\n roles.push('project_admin');\n }\n\n const isProjectMember = project?.membersIds\n ?.map(String)\n .includes(String(user!.id));\n\n if (isProjectMember) {\n roles.push('project_user');\n }\n\n // const isProjectReviewer =\n // session.project?.reviewersIds?.includes(session.user!.id);\n\n // if (isProjectReviewer) {\n // roles.push('project_reviewer');\n // }\n\n return roles;\n};\n\nexport const computeEffectivePermission = (roles: Roles[]): Permission[] =>\n Array.from(\n new Set(\n roles.flatMap((role) => Object.keys(ROLE_POLICY[role]) as Permission[])\n )\n );\n\n/**\n * Intersect two permission lists\n * @param permissionList1 - The first permission list\n * @param permissionList2 - The second permission list\n * @returns The intersection of the two permission lists (only permissions present in both)\n */\nexport const intersectPermissions = (\n permissions1: Permission[],\n permissions2: Permission[]\n): Permission[] =>\n permissions1.filter((permission) => permissions2.includes(permission));\n\ntype PermissionResult<\n R extends Roles,\n P extends Permission,\n> = (typeof ROLE_POLICY)[R] extends infer RolePerms\n ? RolePerms extends Record<string, (args: any) => any>\n ? P extends keyof RolePerms\n ? RolePerms[P] extends undefined\n ? never\n : RolePerms[P]\n : never\n : never\n : never;\n\nexport const hasPermission = <P extends Permission>(\n roles: Roles[],\n permission: P\n): PermissionResult<Roles, P> => {\n const rolesCheck: any = roles.map(\n (role) =>\n ROLE_POLICY[role]?.[\n permission as keyof (typeof ROLE_POLICY)[typeof role]\n ] ?? (() => false)\n ) as unknown as PermissionResult<Roles, P>[];\n\n return ((args: any) => rolesCheck.some((check: any) => check(args))) as any;\n};\n"],"mappings":"AAkDO,MAAM,cAAc;AAAA,EACzB,OAAO;AAAA,IACL,qBAAqB,MAAM;AAAA,IAC3B,sBAAsB,MAAM;AAAA,IAC5B,sBAAsB,MAAM;AAAA,IAC5B,gBAAgB,MAAM;AAAA,IACtB,iBAAiB,MAAM;AAAA,IACvB,iBAAiB,MAAM;AAAA,IACvB,mBAAmB,MAAM;AAAA,IACzB,oBAAoB,MAAM;AAAA,IAC1B,oBAAoB,MAAM;AAAA,IAC1B,YAAY,MAAM;AAAA,IAClB,aAAa,MAAM;AAAA,IACnB,aAAa,MAAM;AAAA,IACnB,aAAa,MAAM;AAAA,IACnB,cAAc,MAAM;AAAA,IACpB,cAAc,MAAM;AAAA,EACtB;AAAA,EACA,WAAW;AAAA,IACT,qBAAqB,MAAM;AAAA,IAC3B,sBAAsB,MAAM;AAAA,IAC5B,sBAAsB,MAAM;AAAA,IAE5B,gBAAgB,MAAM;AAAA,IACtB,iBAAiB,MAAM;AAAA,IACvB,iBAAiB,MAAM;AAAA,IACvB,mBAAmB,MAAM;AAAA,IACzB,oBAAoB,MAAM;AAAA,IAC1B,oBAAoB,MAAM;AAAA,IAC1B,YAAY,MAAM;AAAA,IAClB,aAAa,MAAM;AAAA,IACnB,aAAa,MAAM;AAAA,IAEnB,cAAc,CAAC;AAAA,MACb;AAAA,MACA;AAAA,IACF,MACE,cAAc;AAAA,MAAM,CAAC,iBACnB,cAAc,YAAY,IAAI,MAAM,EAAE,SAAS,OAAO,YAAY,CAAC;AAAA,IACrE;AAAA,EACJ;AAAA,EACA,UAAU;AAAA,IACR,qBAAqB,MAAM;AAAA,IAE3B,aAAa,CAAC;AAAA,MACZ;AAAA,MACA;AAAA,IACF,MACE,cAAc;AAAA,MAAM,CAAC,iBACnB,cAAc,YAAY,IAAI,MAAM,EAAE,SAAS,OAAO,YAAY,CAAC;AAAA,IACrE;AAAA,EACJ;AAAA,EACA,eAAe;AAAA,IACb,gBAAgB,MAAM;AAAA,IACtB,iBAAiB,MAAM;AAAA,IACvB,iBAAiB,MAAM;AAAA,IACvB,YAAY,MAAM;AAAA,IAClB,aAAa,MAAM;AAAA,IACnB,aAAa,MAAM;AAAA,IAEnB,cAAc,CAAC;AAAA,MACb;AAAA,MACA;AAAA,IACF,MACE,cAAc;AAAA,MAAM,CAAC,iBACnB,SAAS,YAAY,IAAI,MAAM,EAAE,SAAS,OAAO,YAAY,CAAC;AAAA,IAChE;AAAA,EACJ;AAAA,EACA,cAAc;AAAA,IACZ,gBAAgB,CAAC,EAAE,MAAM,QAAQ,MAC/B,SAAS,YAAY,IAAI,MAAM,EAAE,SAAS,OAAO,MAAM,EAAE,CAAC;AAAA,IAE5D,mBAAmB,CAAC,EAAE,MAAM,QAAQ,MAClC,SAAS,YAAY,IAAI,MAAM,EAAE,SAAS,OAAO,MAAM,EAAE,CAAC;AAAA,IAC5D,oBAAoB,CAAC,EAAE,MAAM,QAAQ,MACnC,SAAS,YAAY,IAAI,MAAM,EAAE,SAAS,OAAO,MAAM,EAAE,CAAC;AAAA,IAE5D,YAAY,MAAM;AAAA,IAClB,aAAa,MAAM;AAAA,IACnB,aAAa,CAAC,EAAE,MAAM,aAAa,MACjC,cAAc,WAAW,IAAI,MAAM,EAAE,SAAS,OAAO,MAAM,EAAE,CAAC;AAAA,IAEhE,aAAa,CAAC;AAAA,MACZ;AAAA,MACA;AAAA,IACF,MACE,cAAc;AAAA,MAAM,CAAC,iBACnB,SAAS,YAAY,IAAI,MAAM,EAAE,SAAS,OAAO,YAAY,CAAC;AAAA,IAChE;AAAA,EACJ;AAAA,EACA,kBAAkB;AAAA,IAChB,mBAAmB,CAAC,EAAE,MAAM,QAAQ,MAClC,SAAS,YAAY,IAAI,MAAM,EAAE,SAAS,OAAO,MAAM,EAAE,CAAC;AAAA,IAC5D,oBAAoB,CAAC,EAAE,MAAM,QAAQ,MACnC,SAAS,YAAY,IAAI,MAAM,EAAE,SAAS,OAAO,MAAM,EAAE,CAAC;AAAA,IAE5D,YAAY,MAAM;AAAA,EACpB;AACF;AAEO,MAAM,kBAAkB,CAAC;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AACF,MAA+B;AAC7B,QAAM,QAAiB,CAAC;AAExB,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,QAAM,cAAc,KAAK,SAAS;AAElC,MAAI,aAAa;AACf,UAAM,KAAK,OAAO;AAAA,EACpB;AAEA,MAAI,CAAC,cAAc;AACjB,WAAO;AAAA,EACT;AAEA,QAAM,sBAAsB,aAAa,WACrC,IAAI,MAAM,EACX,SAAS,OAAO,KAAM,EAAE,CAAC;AAE5B,MAAI,qBAAqB;AACvB,UAAM,KAAK,WAAW;AAAA,EACxB;AAEA,QAAM,uBAAuB,aAAa,YACtC,IAAI,MAAM,EACX,SAAS,OAAO,KAAM,EAAE,CAAC;AAE5B,MAAI,sBAAsB;AACxB,UAAM,KAAK,UAAU;AAAA,EACvB;AAEA,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AAEA,QAAM,iBAAiB,QAAQ,WAC3B,IAAI,MAAM,EACX,SAAS,OAAO,KAAM,EAAE,CAAC;AAE5B,MAAI,gBAAgB;AAClB,UAAM,KAAK,eAAe;AAAA,EAC5B;AAEA,QAAM,kBAAkB,SAAS,YAC7B,IAAI,MAAM,EACX,SAAS,OAAO,KAAM,EAAE,CAAC;AAE5B,MAAI,iBAAiB;AACnB,UAAM,KAAK,cAAc;AAAA,EAC3B;AASA,SAAO;AACT;AAEO,MAAM,6BAA6B,CAAC,UACzC,MAAM;AAAA,EACJ,IAAI;AAAA,IACF,MAAM,QAAQ,CAAC,SAAS,OAAO,KAAK,YAAY,IAAI,CAAC,CAAiB;AAAA,EACxE;AACF;AAQK,MAAM,uBAAuB,CAClC,cACA,iBAEA,aAAa,OAAO,CAAC,eAAe,aAAa,SAAS,UAAU,CAAC;AAehE,MAAM,gBAAgB,CAC3B,OACA,eAC+B;AAC/B,QAAM,aAAkB,MAAM;AAAA,IAC5B,CAAC,SACC,YAAY,IAAI,IACd,UACF,MAAM,MAAM;AAAA,EAChB;AAEA,SAAQ,CAAC,SAAc,WAAW,KAAK,CAAC,UAAe,MAAM,IAAI,CAAC;AACpE;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/permissions.ts"],"sourcesContent":["import { Dictionary, DictionaryAPI } from '@/types/dictionary.types';\nimport { Organization, OrganizationAPI } from '@/types/organization.types';\nimport { Project, ProjectAPI } from '@/types/project.types';\nimport { SessionContext } from '@/types/session.types';\nimport { Tag, TagAPI } from '@/types/tag.types';\nimport { User, UserAPI } from '@/types/user.types';\n\n/**\n * @description\n * A named grouping of privileges (e.g. `\"org_admin\"`).\n * Users are *granted* one or more Roles.\n */\nexport type Roles =\n | 'user'\n | 'admin'\n | 'org_admin'\n | 'org_user'\n | 'project_admin'\n | 'project_user'\n | 'project_reviewer';\n\n/**\n * @description\n * An atomic operation that can be performed on a resource.\n * - **read**: view or list\n * - **write**: create or update\n * - **admin**: delete or change permissions\n */\nexport type Action = 'read' | 'write' | 'admin';\n\n/**\n * @description\n * A first‑class entity in your domain model that you want to protect.\n */\nexport type Resource = {\n organization: Organization;\n project: Project;\n dictionary: Dictionary;\n tag: Tag;\n user: User;\n};\n\n/**\n * @description\n * A literal string combining a Resource and an Action, e.g. `\"project:write\"`.\n * This is the *unit* checked at runtime in your middleware.\n */\nexport type Permission = `${keyof Resource}:${Action}`;\n\ntype CheckPrivilege = (\n args: any\n) => boolean | undefined | Promise<boolean> | Promise<undefined>;\n\ntype RolePolicy = Record<Roles, Partial<Record<Permission, CheckPrivilege>>>;\n\nexport const ROLE_POLICY = {\n admin: {\n 'organization:read': () => true,\n 'organization:write': () => true,\n 'organization:admin': () => true,\n 'project:read': () => true,\n 'project:write': () => true,\n 'project:admin': () => true,\n 'dictionary:read': () => true,\n 'dictionary:write': () => true,\n 'dictionary:admin': () => true,\n 'tag:read': () => true,\n 'tag:write': () => true,\n 'tag:admin': () => true,\n 'user:read': () => true,\n 'user:write': () => true,\n 'user:admin': () => true,\n },\n user: {\n 'user:read': ({\n user,\n targetUserIds,\n }: SessionContext & { targetUserIds: (User | UserAPI)['id'][] }) =>\n targetUserIds.map(String).includes(String(user?.id)),\n 'user:write': ({\n user,\n targetUserIds,\n }: SessionContext & { targetUserIds: (User | UserAPI)['id'][] }) =>\n targetUserIds.map(String).includes(String(user?.id)),\n 'user:admin': ({\n user,\n targetUserIds,\n }: SessionContext & { targetUserIds: (User | UserAPI)['id'][] }) =>\n targetUserIds.map(String).includes(String(user?.id)),\n 'organization:read': ({\n user,\n targetOrganizations,\n }: SessionContext & {\n targetOrganizations: (Organization | OrganizationAPI)[];\n }) =>\n targetOrganizations.every((organization) =>\n organization?.membersIds?.map(String).includes(String(user?.id))\n ),\n },\n org_admin: {\n 'organization:read': ({\n organization,\n targetOrganizations,\n }: SessionContext & {\n targetOrganizations: (Organization | OrganizationAPI)[];\n }) =>\n targetOrganizations.every(\n (targetOrg) => String(targetOrg.id) === String(organization?.id)\n ),\n 'organization:write': ({\n organization,\n targetOrganizations,\n }: SessionContext & {\n targetOrganizations: (Organization | OrganizationAPI)[];\n }) =>\n targetOrganizations.every(\n (targetOrg) => String(targetOrg.id) === String(organization?.id)\n ),\n 'organization:admin': ({\n organization,\n targetOrganizations,\n }: SessionContext & {\n targetOrganizations: (Organization | OrganizationAPI)[];\n }) =>\n targetOrganizations.every(\n (targetOrg) => String(targetOrg.id) === String(organization?.id)\n ),\n\n 'project:read': ({ organization, project }: SessionContext) =>\n String(project?.organizationId) === String(organization?.id),\n 'project:write': ({ organization, project }: SessionContext) =>\n String(project?.organizationId) === String(organization?.id),\n 'project:admin': ({ organization, project }: SessionContext) =>\n String(project?.organizationId) === String(organization?.id),\n\n 'tag:read': ({ organization, project }: SessionContext) =>\n String(project?.organizationId) === String(organization?.id),\n 'tag:write': ({ organization, project }: SessionContext) =>\n String(project?.organizationId) === String(organization?.id),\n 'tag:admin': ({ organization, project }: SessionContext) =>\n String(project?.organizationId) === String(organization?.id),\n\n 'user:write': ({\n organization,\n targetUserIds,\n }: SessionContext & { targetUserIds: (User | UserAPI)['id'][] }) =>\n targetUserIds.every((targetUserId) =>\n organization?.membersIds?.map(String).includes(String(targetUserId))\n ),\n },\n org_user: {\n 'organization:read': () => true,\n\n 'project:read': ({\n user,\n targetProjects,\n }: SessionContext & {\n targetProjects: (Project | ProjectAPI)[];\n }) =>\n targetProjects?.every((project) =>\n project?.membersIds?.map(String).includes(String(user?.id))\n ),\n\n 'user:read': ({\n organization,\n targetUserIds,\n }: SessionContext & { targetUserIds: (User | UserAPI)['id'][] }) =>\n targetUserIds.every((targetUserId) =>\n organization?.membersIds?.map(String).includes(String(targetUserId))\n ),\n },\n project_admin: {\n 'project:read': ({\n project,\n targetProjectIds,\n }: SessionContext & {\n targetProjectIds?: (Project | ProjectAPI)['id'][];\n }) =>\n targetProjectIds?.every(\n (projectId) => String(project?.id) === String(projectId)\n ),\n 'project:write': ({\n project,\n targetProjectIds,\n }: SessionContext & {\n targetProjectIds?: (Project | ProjectAPI)['id'][];\n }) =>\n targetProjectIds?.every(\n (projectId) => String(project?.id) === String(projectId)\n ),\n 'project:admin': ({\n project,\n targetProjectIds,\n }: SessionContext & {\n targetProjectIds?: (Project | ProjectAPI)['id'][];\n }) =>\n targetProjectIds?.every(\n (projectId) => String(project?.id) === String(projectId)\n ),\n\n 'tag:read': ({\n project,\n targetTagProjectIds,\n }: SessionContext & { targetTagProjectIds: (Tag | TagAPI)['id'][] }) =>\n targetTagProjectIds.every(\n (projectId) => String(project?.id) === String(projectId)\n ),\n 'tag:write': ({\n project,\n targetTagProjectIds,\n }: SessionContext & { targetTagProjectIds: (Tag | TagAPI)['id'][] }) =>\n targetTagProjectIds.every(\n (projectId) => String(project?.id) === String(projectId)\n ),\n 'tag:admin': ({\n project,\n targetTagProjectIds,\n }: SessionContext & { targetTagProjectIds: (Tag | TagAPI)['id'][] }) =>\n targetTagProjectIds.every(\n (projectId) => String(project?.id) === String(projectId)\n ),\n\n 'user:write': ({\n project,\n targetUserIds,\n }: SessionContext & { targetUserIds: (User | UserAPI)['id'][] }) =>\n targetUserIds.every((targetUserId) =>\n project?.membersIds?.map(String).includes(String(targetUserId))\n ),\n\n 'dictionary:read': ({ project, user }: SessionContext) =>\n project?.adminsIds?.map(String).includes(String(user?.id)),\n 'dictionary:write': ({ project, user }: SessionContext) =>\n project?.adminsIds?.map(String).includes(String(user?.id)),\n 'dictionary:admin': ({ project, user }: SessionContext) =>\n project?.adminsIds?.map(String).includes(String(user?.id)),\n },\n project_user: {\n 'project:read': ({ user, organization, project }: SessionContext) =>\n String(organization?.id) === String(project?.organizationId) &&\n organization?.membersIds?.map(String).includes(String(user?.id)) &&\n project?.membersIds?.map(String).includes(String(user?.id)),\n\n 'dictionary:read': ({\n user,\n project,\n targetDictionaries,\n }: SessionContext & {\n targetDictionaries: (Dictionary | DictionaryAPI)[];\n }) =>\n project?.membersIds?.map(String).includes(String(user?.id)) &&\n targetDictionaries.every((dictionary) =>\n dictionary?.projectIds?.map(String).includes(String(project?.id))\n ),\n 'dictionary:write': ({ user, project }: SessionContext) =>\n project?.adminsIds?.map(String).includes(String(user?.id)),\n\n 'tag:read': () => true,\n 'tag:write': () => true,\n 'tag:admin': ({ user, organization }: SessionContext) =>\n organization?.adminsIds?.map(String).includes(String(user?.id)),\n\n 'user:read': ({\n project,\n targetUserIds,\n }: SessionContext & { targetUserIds: (User | UserAPI)['id'][] }) =>\n targetUserIds.every((targetUserId) =>\n project?.membersIds?.map(String).includes(String(targetUserId))\n ),\n },\n project_reviewer: {\n 'dictionary:read': ({ user, project }: SessionContext) =>\n project?.membersIds?.map(String).includes(String(user?.id)),\n 'dictionary:write': ({ user, project }: SessionContext) =>\n project?.membersIds?.map(String).includes(String(user?.id)),\n\n 'tag:read': () => true,\n },\n} as const satisfies RolePolicy;\n\nexport const getSessionRoles = ({\n user,\n organization,\n project,\n}: SessionContext): Roles[] => {\n const roles: Roles[] = [];\n\n if (!user) {\n return roles;\n }\n\n roles.push('user');\n\n const isUserAdmin = user.role === 'admin';\n\n if (isUserAdmin) {\n roles.push('admin');\n }\n\n if (!organization) {\n return roles;\n }\n\n const isOrganizationAdmin = organization.adminsIds\n ?.map(String)\n .includes(String(user!.id));\n\n if (isOrganizationAdmin) {\n roles.push('org_admin');\n }\n\n const isOrganizationMember = organization.membersIds\n ?.map(String)\n .includes(String(user!.id));\n\n if (isOrganizationMember) {\n roles.push('org_user');\n }\n\n if (!project) {\n return roles;\n }\n\n const isProjectAdmin = project.adminsIds\n ?.map(String)\n .includes(String(user!.id));\n\n if (isProjectAdmin) {\n roles.push('project_admin');\n }\n\n const isProjectMember = project?.membersIds\n ?.map(String)\n .includes(String(user!.id));\n\n if (isProjectMember) {\n roles.push('project_user');\n }\n\n // const isProjectReviewer =\n // session.project?.reviewersIds?.includes(session.user!.id);\n\n // if (isProjectReviewer) {\n // roles.push('project_reviewer');\n // }\n\n return roles;\n};\n\nexport const computeEffectivePermission = (roles: Roles[]): Permission[] =>\n Array.from(\n new Set(\n roles.flatMap((role) => Object.keys(ROLE_POLICY[role]) as Permission[])\n )\n );\n\n/**\n * Intersect two permission lists\n * @param permissionList1 - The first permission list\n * @param permissionList2 - The second permission list\n * @returns The intersection of the two permission lists (only permissions present in both)\n */\nexport const intersectPermissions = (\n permissions1: Permission[],\n permissions2: Permission[]\n): Permission[] =>\n permissions1.filter((permission) => permissions2.includes(permission));\n\ntype PermissionResult<\n R extends Roles,\n P extends Permission,\n> = (typeof ROLE_POLICY)[R] extends infer RolePerms\n ? RolePerms extends Record<string, (args: any) => any>\n ? P extends keyof RolePerms\n ? RolePerms[P] extends undefined\n ? never\n : RolePerms[P]\n : never\n : never\n : never;\n\nexport const hasPermission = <P extends Permission>(\n roles: Roles[],\n permission: P\n): PermissionResult<Roles, P> => {\n const rolesCheck: any = roles.map(\n (role) =>\n ROLE_POLICY[role]?.[\n permission as keyof (typeof ROLE_POLICY)[typeof role]\n ] ?? (() => false)\n ) as unknown as PermissionResult<Roles, P>[];\n\n return ((args: any) => rolesCheck.some((check: any) => check(args))) as any;\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
import type { Tag } from '../types/tag.types';
|
|
2
2
|
import { type KeyPath } from '@intlayer/core';
|
|
3
|
+
import type { ResponseWithSession } from '../middlewares/sessionAuth.middleware';
|
|
3
4
|
import { type AIOptions, type ChatCompletionRequestMessage } from '../utils/AI/aiSdk';
|
|
4
5
|
import * as askDocQuestionUtil from '../utils/AI/askDocQuestion/askDocQuestion';
|
|
5
6
|
import * as auditContentDeclarationUtil from '../utils/AI/auditDictionary';
|
|
6
7
|
import * as customQueryUtil from '../utils/AI/customQuery';
|
|
7
8
|
import * as translateJSONUtil from '../utils/AI/translateJSON';
|
|
8
9
|
import { type ResponseData } from '../utils/responseData';
|
|
9
|
-
import type { NextFunction, Request
|
|
10
|
+
import type { NextFunction, Request } from 'express';
|
|
10
11
|
import type { Locales } from 'intlayer';
|
|
11
12
|
type ReplaceAIConfigByOptions<T> = Omit<T, 'aiConfig'> & {
|
|
12
13
|
aiOptions?: AIOptions;
|
|
13
14
|
};
|
|
14
15
|
export type CustomQueryBody = ReplaceAIConfigByOptions<customQueryUtil.CustomQueryOptions>;
|
|
15
16
|
export type CustomQueryResult = ResponseData<customQueryUtil.CustomQueryResultData>;
|
|
16
|
-
export declare const customQuery: (req: Request<AuditContentDeclarationBody>, res:
|
|
17
|
+
export declare const customQuery: (req: Request<AuditContentDeclarationBody>, res: ResponseWithSession<CustomQueryResult>, _next: NextFunction) => Promise<void>;
|
|
17
18
|
export type TranslateJSONBody = Omit<ReplaceAIConfigByOptions<translateJSONUtil.TranslateJSONOptions>, 'tags'> & {
|
|
18
19
|
tagsKeys?: string[];
|
|
19
20
|
};
|
|
20
21
|
export type TranslateJSONResult = ResponseData<translateJSONUtil.TranslateJSONResultData>;
|
|
21
|
-
export declare const translateJSON: (req: Request<AuditContentDeclarationBody>, res:
|
|
22
|
+
export declare const translateJSON: (req: Request<AuditContentDeclarationBody>, res: ResponseWithSession<TranslateJSONResult>, _next: NextFunction) => Promise<void>;
|
|
22
23
|
export type AuditContentDeclarationBody = {
|
|
23
24
|
aiOptions?: AIOptions;
|
|
24
25
|
locales: Locales[];
|
|
@@ -31,7 +32,7 @@ export type AuditContentDeclarationResult = ResponseData<auditContentDeclaration
|
|
|
31
32
|
/**
|
|
32
33
|
* Retrieves a list of dictionaries based on filters and pagination.
|
|
33
34
|
*/
|
|
34
|
-
export declare const auditContentDeclaration: (req: Request<AuditContentDeclarationBody>, res:
|
|
35
|
+
export declare const auditContentDeclaration: (req: Request<AuditContentDeclarationBody>, res: ResponseWithSession<AuditContentDeclarationResult>, _next: NextFunction) => Promise<void>;
|
|
35
36
|
export type AuditContentDeclarationFieldBody = {
|
|
36
37
|
aiOptions?: AIOptions;
|
|
37
38
|
locales: Locales[];
|
|
@@ -44,7 +45,7 @@ export type AuditContentDeclarationFieldResult = ResponseData<auditContentDeclar
|
|
|
44
45
|
/**
|
|
45
46
|
* Retrieves a list of dictionaries based on filters and pagination.
|
|
46
47
|
*/
|
|
47
|
-
export declare const auditContentDeclarationField: (req: Request<AuditContentDeclarationFieldBody>, res:
|
|
48
|
+
export declare const auditContentDeclarationField: (req: Request<AuditContentDeclarationFieldBody>, res: ResponseWithSession<AuditContentDeclarationFieldResult>, _next: NextFunction) => Promise<void>;
|
|
48
49
|
export type AuditContentDeclarationMetadataBody = {
|
|
49
50
|
aiOptions?: AIOptions;
|
|
50
51
|
fileContent: string;
|
|
@@ -53,7 +54,7 @@ export type AuditContentDeclarationMetadataResult = ResponseData<auditContentDec
|
|
|
53
54
|
/**
|
|
54
55
|
* Retrieves a list of dictionaries based on filters and pagination.
|
|
55
56
|
*/
|
|
56
|
-
export declare const auditContentDeclarationMetadata: (req: Request<AuditContentDeclarationMetadataBody>, res:
|
|
57
|
+
export declare const auditContentDeclarationMetadata: (req: Request<AuditContentDeclarationMetadataBody>, res: ResponseWithSession<AuditContentDeclarationMetadataResult>, _next: NextFunction) => Promise<void>;
|
|
57
58
|
export type AuditTagBody = {
|
|
58
59
|
aiOptions?: AIOptions;
|
|
59
60
|
tag: Tag;
|
|
@@ -62,13 +63,13 @@ export type AuditTagResult = ResponseData<auditContentDeclarationUtil.AuditFileR
|
|
|
62
63
|
/**
|
|
63
64
|
* Retrieves a list of dictionaries based on filters and pagination.
|
|
64
65
|
*/
|
|
65
|
-
export declare const auditTag: (req: Request<undefined, undefined, AuditTagBody>, res:
|
|
66
|
+
export declare const auditTag: (req: Request<undefined, undefined, AuditTagBody>, res: ResponseWithSession<AuditTagResult>, _next: NextFunction) => Promise<void>;
|
|
66
67
|
export type AskDocQuestionBody = {
|
|
67
68
|
messages: ChatCompletionRequestMessage[];
|
|
68
69
|
discutionId: string;
|
|
69
70
|
};
|
|
70
71
|
export type AskDocQuestionResult = ResponseData<askDocQuestionUtil.AskDocQuestionResult>;
|
|
71
|
-
export declare const askDocQuestion: (req: Request<undefined, undefined, AskDocQuestionBody>, res:
|
|
72
|
+
export declare const askDocQuestion: (req: Request<undefined, undefined, AskDocQuestionBody>, res: ResponseWithSession<AskDocQuestionResult>) => Promise<void>;
|
|
72
73
|
export type AutocompleteBody = {
|
|
73
74
|
text: string;
|
|
74
75
|
aiOptions?: AIOptions;
|
|
@@ -79,6 +80,6 @@ export type AutocompleteBody = {
|
|
|
79
80
|
export type AutocompleteResponse = ResponseData<{
|
|
80
81
|
autocompletion: string;
|
|
81
82
|
}>;
|
|
82
|
-
export declare const autocomplete: (req: Request<undefined, undefined, AutocompleteBody>, res:
|
|
83
|
+
export declare const autocomplete: (req: Request<undefined, undefined, AutocompleteBody>, res: ResponseWithSession<AutocompleteResponse>) => Promise<void>;
|
|
83
84
|
export {};
|
|
84
85
|
//# sourceMappingURL=ai.controller.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.controller.d.ts","sourceRoot":"","sources":["../../../src/controllers/ai.controller.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"ai.controller.d.ts","sourceRoot":"","sources":["../../../src/controllers/ai.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
import type { Dictionary, DictionaryAPI, DictionaryCreationData } from '../types/dictionary.types';
|
|
2
2
|
import type { Dictionary as LocalDictionary } from '@intlayer/core';
|
|
3
|
+
import type { ResponseWithSession } from '../middlewares/sessionAuth.middleware';
|
|
3
4
|
import { type DictionaryFiltersParams } from '../utils/filtersAndPagination/getDictionaryFiltersAndPagination';
|
|
4
5
|
import type { FiltersAndPagination } from '../utils/filtersAndPagination/getFiltersAndPaginationFromBody';
|
|
5
6
|
import { type PaginatedResponse, type ResponseData } from '../utils/responseData';
|
|
6
|
-
import type { NextFunction, Request
|
|
7
|
+
import type { NextFunction, Request } from 'express';
|
|
7
8
|
export type GetDictionariesParams = FiltersAndPagination<DictionaryFiltersParams>;
|
|
8
9
|
export type GetDictionariesResult = PaginatedResponse<DictionaryAPI>;
|
|
9
10
|
/**
|
|
10
11
|
* Retrieves a list of dictionaries based on filters and pagination.
|
|
11
12
|
*/
|
|
12
|
-
export declare const getDictionaries: (req: Request<GetDictionariesParams>, res:
|
|
13
|
+
export declare const getDictionaries: (req: Request<GetDictionariesParams>, res: ResponseWithSession<GetDictionariesResult>, _next: NextFunction) => Promise<void>;
|
|
13
14
|
export type GetDictionariesKeysResult = ResponseData<string[]>;
|
|
14
15
|
/**
|
|
15
16
|
* Retrieves a list of dictionaries keys based on filters and pagination.
|
|
16
17
|
*/
|
|
17
|
-
export declare const getDictionariesKeys: (_req: Request, res:
|
|
18
|
+
export declare const getDictionariesKeys: (_req: Request, res: ResponseWithSession<GetDictionariesKeysResult>, _next: NextFunction) => Promise<void>;
|
|
18
19
|
export type GetDictionaryParams = {
|
|
19
20
|
dictionaryKey: string;
|
|
20
21
|
};
|
|
@@ -25,7 +26,7 @@ export type GetDictionaryResult = ResponseData<DictionaryAPI>;
|
|
|
25
26
|
/**
|
|
26
27
|
* Retrieves a list of dictionaries based on filters and pagination.
|
|
27
28
|
*/
|
|
28
|
-
export declare const getDictionaryByKey: (req: Request<GetDictionaryParams, any, any, GetDictionaryQuery>, res:
|
|
29
|
+
export declare const getDictionaryByKey: (req: Request<GetDictionaryParams, any, any, GetDictionaryQuery>, res: ResponseWithSession<GetDictionaryResult>, _next: NextFunction) => Promise<void>;
|
|
29
30
|
export type AddDictionaryBody = {
|
|
30
31
|
dictionary: DictionaryCreationData;
|
|
31
32
|
};
|
|
@@ -33,7 +34,7 @@ export type AddDictionaryResult = ResponseData<DictionaryAPI>;
|
|
|
33
34
|
/**
|
|
34
35
|
* Adds a new dictionary to the database.
|
|
35
36
|
*/
|
|
36
|
-
export declare const addDictionary: (req: Request<any, any, AddDictionaryBody>, res:
|
|
37
|
+
export declare const addDictionary: (req: Request<any, any, AddDictionaryBody>, res: ResponseWithSession<AddDictionaryResult>, _next: NextFunction) => Promise<void>;
|
|
37
38
|
export type PushDictionariesBody = {
|
|
38
39
|
dictionaries: LocalDictionary[];
|
|
39
40
|
};
|
|
@@ -52,7 +53,7 @@ export type PushDictionariesResult = ResponseData<PushDictionariesResultData>;
|
|
|
52
53
|
* @param res - Express response object.
|
|
53
54
|
* @returns Response containing the created dictionary.
|
|
54
55
|
*/
|
|
55
|
-
export declare const pushDictionaries: (req: Request<any, any, PushDictionariesBody>, res:
|
|
56
|
+
export declare const pushDictionaries: (req: Request<any, any, PushDictionariesBody>, res: ResponseWithSession<PushDictionariesResult>, _next: NextFunction) => Promise<void>;
|
|
56
57
|
export type UpdateDictionaryParam = {
|
|
57
58
|
dictionaryId: string;
|
|
58
59
|
};
|
|
@@ -61,7 +62,7 @@ export type UpdateDictionaryResult = ResponseData<DictionaryAPI>;
|
|
|
61
62
|
/**
|
|
62
63
|
* Updates an existing dictionary in the database.
|
|
63
64
|
*/
|
|
64
|
-
export declare const updateDictionary: (req: Request<UpdateDictionaryParam, any, UpdateDictionaryBody>, res:
|
|
65
|
+
export declare const updateDictionary: (req: Request<UpdateDictionaryParam, any, UpdateDictionaryBody>, res: ResponseWithSession<UpdateDictionaryResult>, _next: NextFunction) => Promise<void>;
|
|
65
66
|
export type DeleteDictionaryParam = {
|
|
66
67
|
dictionaryId: string;
|
|
67
68
|
};
|
|
@@ -69,6 +70,6 @@ export type DeleteDictionaryResult = ResponseData<DictionaryAPI>;
|
|
|
69
70
|
/**
|
|
70
71
|
* Deletes a dictionary from the database by its ID.
|
|
71
72
|
*/
|
|
72
|
-
export declare const deleteDictionary: (req: Request<DeleteDictionaryParam>, res:
|
|
73
|
+
export declare const deleteDictionary: (req: Request<DeleteDictionaryParam>, res: ResponseWithSession<DeleteDictionaryResult>, _next: NextFunction) => Promise<void>;
|
|
73
74
|
export {};
|
|
74
75
|
//# sourceMappingURL=dictionary.controller.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dictionary.controller.d.ts","sourceRoot":"","sources":["../../../src/controllers/dictionary.controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,sBAAsB,EAGvB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAEV,UAAU,IAAI,eAAe,EAC9B,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"dictionary.controller.d.ts","sourceRoot":"","sources":["../../../src/controllers/dictionary.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { EmailsList, UserAPI } from '../types/user.types';
|
|
2
|
+
import type { ResponseWithSession } from '../middlewares/sessionAuth.middleware';
|
|
2
3
|
import { type ResponseData } from '../utils/responseData';
|
|
3
|
-
import type { NextFunction, Request
|
|
4
|
+
import type { NextFunction, Request } from 'express';
|
|
4
5
|
export type NewsletterSubscriptionBody = {
|
|
5
6
|
email: string;
|
|
6
7
|
emailList: EmailsList | EmailsList[];
|
|
@@ -11,7 +12,7 @@ export type NewsletterSubscriptionResult = ResponseData<UserAPI>;
|
|
|
11
12
|
* If the user doesn't exist, creates a new user.
|
|
12
13
|
* If the user exists, updates their newsletter subscription to true.
|
|
13
14
|
*/
|
|
14
|
-
export declare const subscribeToNewsletter: (req: Request<any, any, NewsletterSubscriptionBody>, res:
|
|
15
|
+
export declare const subscribeToNewsletter: (req: Request<any, any, NewsletterSubscriptionBody>, res: ResponseWithSession<NewsletterSubscriptionResult>, _next: NextFunction) => Promise<void>;
|
|
15
16
|
export type NewsletterUnsubscriptionBody = {
|
|
16
17
|
userId: string;
|
|
17
18
|
emailList: EmailsList | EmailsList[];
|
|
@@ -20,11 +21,11 @@ export type NewsletterUnsubscriptionBody = {
|
|
|
20
21
|
* Unsubscribes a user from the newsletter.
|
|
21
22
|
* Only works if the user exists.
|
|
22
23
|
*/
|
|
23
|
-
export declare const unsubscribeFromNewsletter: (req: Request<any, any, NewsletterUnsubscriptionBody>, res:
|
|
24
|
+
export declare const unsubscribeFromNewsletter: (req: Request<any, any, NewsletterUnsubscriptionBody>, res: ResponseWithSession<NewsletterSubscriptionResult>, _next: NextFunction) => Promise<void>;
|
|
24
25
|
/**
|
|
25
26
|
* Gets the newsletter subscription status for a user.
|
|
26
27
|
*/
|
|
27
28
|
export declare const getNewsletterStatus: (_req: Request<{
|
|
28
29
|
email: string;
|
|
29
|
-
}>, res:
|
|
30
|
+
}>, res: ResponseWithSession<NewsletterSubscriptionResult>, _next: NextFunction) => Promise<void>;
|
|
30
31
|
//# sourceMappingURL=newsletter.controller.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"newsletter.controller.d.ts","sourceRoot":"","sources":["../../../src/controllers/newsletter.controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"newsletter.controller.d.ts","sourceRoot":"","sources":["../../../src/controllers/newsletter.controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAK/E,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAIrD,MAAM,MAAM,0BAA0B,GAAG;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC;CACtC,CAAC;AACF,MAAM,MAAM,4BAA4B,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AAEjE;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAChC,KAAK,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,0BAA0B,CAAC,EAClD,KAAK,mBAAmB,CAAC,4BAA4B,CAAC,EACtD,OAAO,YAAY,KAClB,OAAO,CAAC,IAAI,CAuEd,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC;CACtC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,GACpC,KAAK,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,4BAA4B,CAAC,EACpD,KAAK,mBAAmB,CAAC,4BAA4B,CAAC,EACtD,OAAO,YAAY,KAClB,OAAO,CAAC,IAAI,CAmEd,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAC9B,MAAM,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EAChC,KAAK,mBAAmB,CAAC,4BAA4B,CAAC,EACtD,OAAO,YAAY,KAClB,OAAO,CAAC,IAAI,CA+Cd,CAAC"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import type { Organization, OrganizationAPI, OrganizationCreationData } from '../types/organization.types';
|
|
2
|
+
import type { ResponseWithSession } from '../middlewares/sessionAuth.middleware';
|
|
2
3
|
import type { FiltersAndPagination } from '../utils/filtersAndPagination/getFiltersAndPaginationFromBody';
|
|
3
4
|
import { type OrganizationFiltersParams } from '../utils/filtersAndPagination/getOrganizationFiltersAndPagination';
|
|
4
5
|
import { type PaginatedResponse, type ResponseData } from '../utils/responseData';
|
|
5
|
-
import type { NextFunction, Request
|
|
6
|
+
import type { NextFunction, Request } from 'express';
|
|
6
7
|
import { Types } from 'mongoose';
|
|
7
8
|
export type GetOrganizationsParams = FiltersAndPagination<OrganizationFiltersParams>;
|
|
8
9
|
export type GetOrganizationsResult = PaginatedResponse<OrganizationAPI>;
|
|
9
10
|
/**
|
|
10
11
|
* Retrieves a list of organizations based on filters and pagination.
|
|
11
12
|
*/
|
|
12
|
-
export declare const getOrganizations: (req: Request<GetOrganizationsParams>, res:
|
|
13
|
+
export declare const getOrganizations: (req: Request<GetOrganizationsParams>, res: ResponseWithSession<GetOrganizationsResult>, _next: NextFunction) => Promise<void>;
|
|
13
14
|
export type GetOrganizationParam = {
|
|
14
15
|
organizationId: string;
|
|
15
16
|
};
|
|
@@ -17,19 +18,19 @@ export type GetOrganizationResult = ResponseData<OrganizationAPI>;
|
|
|
17
18
|
/**
|
|
18
19
|
* Retrieves an organization by its ID.
|
|
19
20
|
*/
|
|
20
|
-
export declare const getOrganization: (req: Request<GetOrganizationParam, any, any>, res:
|
|
21
|
+
export declare const getOrganization: (req: Request<GetOrganizationParam, any, any>, res: ResponseWithSession<GetOrganizationResult>, _next: NextFunction) => Promise<void>;
|
|
21
22
|
export type AddOrganizationBody = OrganizationCreationData;
|
|
22
23
|
export type AddOrganizationResult = ResponseData<OrganizationAPI>;
|
|
23
24
|
/**
|
|
24
25
|
* Adds a new organization to the database.
|
|
25
26
|
*/
|
|
26
|
-
export declare const addOrganization: (req: Request<any, any, AddOrganizationBody>, res:
|
|
27
|
+
export declare const addOrganization: (req: Request<any, any, AddOrganizationBody>, res: ResponseWithSession<AddOrganizationResult>, _next: NextFunction) => Promise<void>;
|
|
27
28
|
export type UpdateOrganizationBody = Partial<Organization>;
|
|
28
29
|
export type UpdateOrganizationResult = ResponseData<OrganizationAPI>;
|
|
29
30
|
/**
|
|
30
31
|
* Updates an existing organization in the database.
|
|
31
32
|
*/
|
|
32
|
-
export declare const updateOrganization: (req: Request<undefined, undefined, UpdateOrganizationBody>, res:
|
|
33
|
+
export declare const updateOrganization: (req: Request<undefined, undefined, UpdateOrganizationBody>, res: ResponseWithSession<UpdateOrganizationResult>, _next: NextFunction) => Promise<void>;
|
|
33
34
|
export type OrganizationMemberByIdOption = {
|
|
34
35
|
userId: string | Types.ObjectId;
|
|
35
36
|
isAdmin?: boolean;
|
|
@@ -41,7 +42,7 @@ export type AddOrganizationMemberResult = ResponseData<OrganizationAPI>;
|
|
|
41
42
|
/**
|
|
42
43
|
* Add member to the organization in the database.
|
|
43
44
|
*/
|
|
44
|
-
export declare const addOrganizationMember: (req: Request<any, any, AddOrganizationMemberBody>, res:
|
|
45
|
+
export declare const addOrganizationMember: (req: Request<any, any, AddOrganizationMemberBody>, res: ResponseWithSession<AddOrganizationMemberResult>, _next: NextFunction) => Promise<void>;
|
|
45
46
|
export type UpdateOrganizationMembersBody = Partial<{
|
|
46
47
|
membersIds: OrganizationMemberByIdOption[];
|
|
47
48
|
}>;
|
|
@@ -49,12 +50,12 @@ export type UpdateOrganizationMembersResult = ResponseData<OrganizationAPI>;
|
|
|
49
50
|
/**
|
|
50
51
|
* Update members to the organization in the database.
|
|
51
52
|
*/
|
|
52
|
-
export declare const updateOrganizationMembers: (req: Request<any, any, UpdateOrganizationMembersBody>, res:
|
|
53
|
+
export declare const updateOrganizationMembers: (req: Request<any, any, UpdateOrganizationMembersBody>, res: ResponseWithSession<UpdateOrganizationMembersResult>, _next: NextFunction) => Promise<void>;
|
|
53
54
|
export type DeleteOrganizationResult = ResponseData<OrganizationAPI>;
|
|
54
55
|
/**
|
|
55
56
|
* Deletes an organization from the database by its ID.
|
|
56
57
|
*/
|
|
57
|
-
export declare const deleteOrganization: (_req: Request, res:
|
|
58
|
+
export declare const deleteOrganization: (_req: Request, res: ResponseWithSession, _next: NextFunction) => Promise<void>;
|
|
58
59
|
export type SelectOrganizationParam = {
|
|
59
60
|
organizationId: string | Types.ObjectId;
|
|
60
61
|
};
|
|
@@ -62,10 +63,10 @@ export type SelectOrganizationResult = ResponseData<OrganizationAPI>;
|
|
|
62
63
|
/**
|
|
63
64
|
* Select an organization.
|
|
64
65
|
*/
|
|
65
|
-
export declare const selectOrganization: (req: Request<SelectOrganizationParam>, res:
|
|
66
|
+
export declare const selectOrganization: (req: Request<SelectOrganizationParam>, res: ResponseWithSession<SelectOrganizationResult>, _next: NextFunction) => Promise<void>;
|
|
66
67
|
export type UnselectOrganizationResult = ResponseData<null>;
|
|
67
68
|
/**
|
|
68
69
|
* Unselect an organization.
|
|
69
70
|
*/
|
|
70
|
-
export declare const unselectOrganization: (_req: Request, res:
|
|
71
|
+
export declare const unselectOrganization: (_req: Request, res: ResponseWithSession<UnselectOrganizationResult>, _next: NextFunction) => Promise<void>;
|
|
71
72
|
//# sourceMappingURL=organization.controller.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organization.controller.d.ts","sourceRoot":"","sources":["../../../src/controllers/organization.controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,wBAAwB,EACzB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"organization.controller.d.ts","sourceRoot":"","sources":["../../../src/controllers/organization.controller.ts"],"names":[],"mappings":"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"}
|