@intlayer/backend 5.7.8 → 5.8.0-canary.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/cjs/schemas/dictionary.schema.cjs.map +1 -1
- package/dist/cjs/schemas/discussion.schema.cjs.map +1 -1
- package/dist/cjs/schemas/oAuth2.schema.cjs.map +1 -1
- package/dist/cjs/schemas/organization.schema.cjs.map +1 -1
- package/dist/cjs/schemas/plans.schema.cjs.map +1 -1
- package/dist/cjs/schemas/project.schema.cjs.map +1 -1
- package/dist/cjs/schemas/session.schema.cjs.map +1 -1
- package/dist/cjs/schemas/tag.schema.cjs.map +1 -1
- package/dist/cjs/schemas/user.schema.cjs.map +1 -1
- package/dist/cjs/services/organization.service.cjs +1 -2
- package/dist/cjs/services/organization.service.cjs.map +1 -1
- package/dist/cjs/utils/AI/aiSdk.cjs +2 -3
- package/dist/cjs/utils/AI/aiSdk.cjs.map +1 -1
- package/dist/cjs/utils/AI/askDocQuestion/askDocQuestion.cjs +1 -1
- package/dist/cjs/utils/AI/askDocQuestion/askDocQuestion.cjs.map +1 -1
- package/dist/cjs/utils/AI/askDocQuestion/embeddings.json +20502 -9216
- package/dist/cjs/utils/AI/autocomplete/index.cjs +2 -5
- package/dist/cjs/utils/AI/autocomplete/index.cjs.map +1 -1
- package/dist/cjs/utils/permissions.cjs +1 -1
- package/dist/cjs/utils/permissions.cjs.map +1 -1
- package/dist/cjs/utils/rateLimiter.cjs.map +1 -1
- package/dist/esm/schemas/dictionary.schema.mjs.map +1 -1
- package/dist/esm/schemas/discussion.schema.mjs.map +1 -1
- package/dist/esm/schemas/oAuth2.schema.mjs.map +1 -1
- package/dist/esm/schemas/organization.schema.mjs.map +1 -1
- package/dist/esm/schemas/plans.schema.mjs.map +1 -1
- package/dist/esm/schemas/project.schema.mjs.map +1 -1
- package/dist/esm/schemas/session.schema.mjs.map +1 -1
- package/dist/esm/schemas/tag.schema.mjs.map +1 -1
- package/dist/esm/schemas/user.schema.mjs.map +1 -1
- package/dist/esm/services/organization.service.mjs +1 -2
- package/dist/esm/services/organization.service.mjs.map +1 -1
- package/dist/esm/utils/AI/aiSdk.mjs +2 -3
- package/dist/esm/utils/AI/aiSdk.mjs.map +1 -1
- package/dist/esm/utils/AI/askDocQuestion/askDocQuestion.mjs +1 -1
- package/dist/esm/utils/AI/askDocQuestion/askDocQuestion.mjs.map +1 -1
- package/dist/esm/utils/AI/askDocQuestion/embeddings.json +20502 -9216
- package/dist/esm/utils/AI/autocomplete/index.mjs +2 -5
- package/dist/esm/utils/AI/autocomplete/index.mjs.map +1 -1
- package/dist/esm/utils/permissions.mjs +1 -1
- package/dist/esm/utils/permissions.mjs.map +1 -1
- package/dist/esm/utils/rateLimiter.mjs.map +1 -1
- package/dist/types/models/dictionary.model.d.ts +1 -1
- package/dist/types/models/discussion.model.d.ts +1 -1
- package/dist/types/models/oAuth2.model.d.ts +1 -1
- package/dist/types/schemas/dictionary.schema.d.ts +2 -2
- package/dist/types/schemas/discussion.schema.d.ts +2 -2
- package/dist/types/schemas/oAuth2.schema.d.ts +2 -2
- package/dist/types/schemas/organization.schema.d.ts +2 -2
- package/dist/types/schemas/plans.schema.d.ts +2 -2
- package/dist/types/schemas/project.schema.d.ts +2 -2
- package/dist/types/schemas/session.schema.d.ts +2 -2
- package/dist/types/schemas/tag.schema.d.ts +2 -2
- package/dist/types/schemas/user.schema.d.ts +2 -2
- package/dist/types/services/organization.service.d.ts.map +1 -1
- package/dist/types/utils/AI/aiSdk.d.ts +2 -3
- package/dist/types/utils/AI/aiSdk.d.ts.map +1 -1
- package/dist/types/utils/AI/autocomplete/index.d.ts.map +1 -1
- package/dist/types/utils/rateLimiter.d.ts +1 -1
- package/dist/types/utils/rateLimiter.d.ts.map +1 -1
- package/package.json +20 -20
|
@@ -10,8 +10,7 @@ const CHAT_GPT_PROMPT = getFileContent("./PROMPT.md");
|
|
|
10
10
|
const aiDefaultOptions = {
|
|
11
11
|
provider: AIProvider.OPENAI,
|
|
12
12
|
model: "gpt-4o-mini",
|
|
13
|
-
temperature: 0.7
|
|
14
|
-
maxTokens: 128
|
|
13
|
+
temperature: 0.7
|
|
15
14
|
};
|
|
16
15
|
const autocomplete = async ({
|
|
17
16
|
text,
|
|
@@ -30,9 +29,7 @@ const autocomplete = async ({
|
|
|
30
29
|
messages: [
|
|
31
30
|
{ role: "system", content: prompt },
|
|
32
31
|
{ role: "assistant", content: text }
|
|
33
|
-
]
|
|
34
|
-
maxTokens: aiConfig.maxTokens ?? 128
|
|
35
|
-
// Generate next tokens
|
|
32
|
+
]
|
|
36
33
|
});
|
|
37
34
|
logger.info(`${usage?.totalTokens ?? 0} tokens used in the request`);
|
|
38
35
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/utils/AI/autocomplete/index.ts"],"sourcesContent":["import { logger } from '@logger';\nimport { generateText } from 'ai';\nimport { readFileSync } from 'fs';\nimport { dirname, join } from 'path';\nimport { fileURLToPath } from 'url';\nimport { AIConfig, AIOptions, AIProvider } from '../aiSdk';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\n// Get the content of a file at the specified path\nconst getFileContent = (filePath: string) =>\n readFileSync(join(__dirname, filePath), { encoding: 'utf-8' });\n\nexport type AutocompleteOptions = {\n text: string;\n aiConfig: AIConfig;\n applicationContext?: string;\n contextBefore?: string;\n currentLine?: string;\n contextAfter?: string;\n};\n\nexport type AutocompleteFileResultData = {\n autocompletion: string;\n tokenUsed: number;\n};\n\n// The prompt template to send to the AI model\nconst CHAT_GPT_PROMPT = getFileContent('./PROMPT.md');\n\nexport const aiDefaultOptions: AIOptions = {\n provider: AIProvider.OPENAI,\n model: 'gpt-4o-mini',\n temperature: 0.7,\n
|
|
1
|
+
{"version":3,"sources":["../../../../../src/utils/AI/autocomplete/index.ts"],"sourcesContent":["import { logger } from '@logger';\nimport { generateText } from 'ai';\nimport { readFileSync } from 'fs';\nimport { dirname, join } from 'path';\nimport { fileURLToPath } from 'url';\nimport { AIConfig, AIOptions, AIProvider } from '../aiSdk';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\n// Get the content of a file at the specified path\nconst getFileContent = (filePath: string) =>\n readFileSync(join(__dirname, filePath), { encoding: 'utf-8' });\n\nexport type AutocompleteOptions = {\n text: string;\n aiConfig: AIConfig;\n applicationContext?: string;\n contextBefore?: string;\n currentLine?: string;\n contextAfter?: string;\n};\n\nexport type AutocompleteFileResultData = {\n autocompletion: string;\n tokenUsed: number;\n};\n\n// The prompt template to send to the AI model\nconst CHAT_GPT_PROMPT = getFileContent('./PROMPT.md');\n\nexport const aiDefaultOptions: AIOptions = {\n provider: AIProvider.OPENAI,\n model: 'gpt-4o-mini',\n temperature: 0.7,\n};\n\n/**\n * Autocompletes a content declaration file by constructing a prompt for AI models.\n * The prompt includes details about the project's locales, file paths of content declarations,\n * and requests for identifying issues or inconsistencies.\n */\nexport const autocomplete = async ({\n text,\n aiConfig,\n applicationContext,\n contextBefore,\n currentLine,\n contextAfter,\n}: AutocompleteOptions): Promise<AutocompleteFileResultData | undefined> => {\n // Prepare the prompt for AI by replacing placeholders with actual values.\n const prompt = CHAT_GPT_PROMPT.replace(\n '{{applicationContext}}',\n applicationContext ?? ''\n )\n .replace('{{contextBefore}}', contextBefore ?? '')\n .replace('{{currentLine}}', currentLine ?? '')\n .replace('{{contextAfter}}', contextAfter ?? '');\n\n // Use the AI SDK to generate the completion\n const { text: newContent, usage } = await generateText({\n ...aiConfig,\n messages: [\n { role: 'system', content: prompt },\n { role: 'assistant', content: text },\n ],\n });\n\n logger.info(`${usage?.totalTokens ?? 0} tokens used in the request`);\n\n return {\n autocompletion: newContent,\n tokenUsed: usage?.totalTokens ?? 0,\n };\n};\n"],"mappings":"AAAA,SAAS,cAAc;AACvB,SAAS,oBAAoB;AAC7B,SAAS,oBAAoB;AAC7B,SAAS,SAAS,YAAY;AAC9B,SAAS,qBAAqB;AAC9B,SAA8B,kBAAkB;AAEhD,MAAM,YAAY,QAAQ,cAAc,YAAY,GAAG,CAAC;AAGxD,MAAM,iBAAiB,CAAC,aACtB,aAAa,KAAK,WAAW,QAAQ,GAAG,EAAE,UAAU,QAAQ,CAAC;AAiB/D,MAAM,kBAAkB,eAAe,aAAa;AAE7C,MAAM,mBAA8B;AAAA,EACzC,UAAU,WAAW;AAAA,EACrB,OAAO;AAAA,EACP,aAAa;AACf;AAOO,MAAM,eAAe,OAAO;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA4E;AAE1E,QAAM,SAAS,gBAAgB;AAAA,IAC7B;AAAA,IACA,sBAAsB;AAAA,EACxB,EACG,QAAQ,qBAAqB,iBAAiB,EAAE,EAChD,QAAQ,mBAAmB,eAAe,EAAE,EAC5C,QAAQ,oBAAoB,gBAAgB,EAAE;AAGjD,QAAM,EAAE,MAAM,YAAY,MAAM,IAAI,MAAM,aAAa;AAAA,IACrD,GAAG;AAAA,IACH,UAAU;AAAA,MACR,EAAE,MAAM,UAAU,SAAS,OAAO;AAAA,MAClC,EAAE,MAAM,aAAa,SAAS,KAAK;AAAA,IACrC;AAAA,EACF,CAAC;AAED,SAAO,KAAK,GAAG,OAAO,eAAe,CAAC,6BAA6B;AAEnE,SAAO;AAAA,IACL,gBAAgB;AAAA,IAChB,WAAW,OAAO,eAAe;AAAA,EACnC;AACF;","names":[]}
|
|
@@ -221,7 +221,7 @@ const hasPermission = (roles, permission) => {
|
|
|
221
221
|
const rolesCheck = roles.map(
|
|
222
222
|
(role) => ROLE_POLICY[role]?.[permission] ?? (() => false)
|
|
223
223
|
);
|
|
224
|
-
return (args) => rolesCheck.some((check) => check(args));
|
|
224
|
+
return ((args) => rolesCheck.some((check) => check(args)));
|
|
225
225
|
};
|
|
226
226
|
export {
|
|
227
227
|
ROLE_POLICY,
|
|
@@ -1 +1 @@
|
|
|
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 * 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 * 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 * 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 * 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 targetUsers,\n }: SessionContext & { targetUsers: (User | UserAPI)[] }) =>\n targetUsers.every(\n (targetUser) =>\n String(targetUser.id) === String(user?.id) &&\n targetUser.email === user?.email\n ),\n 'user:write': ({\n user,\n targetUsers,\n }: SessionContext & { targetUsers: (User | UserAPI)[] }) =>\n targetUsers.every(\n (targetUser) =>\n String(targetUser.id) === String(user?.id) &&\n targetUser.email === user?.email\n ),\n 'user:admin': ({\n user,\n targetUsers,\n }: SessionContext & { targetUsers: (User | UserAPI)[] }) =>\n targetUsers.every(\n (targetUser) =>\n String(targetUser.id) === String(user?.id) &&\n targetUser.email === user?.email\n ),\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 targetUsers,\n }: SessionContext & { targetUsers: (User | UserAPI)[] }) =>\n targetUsers.every((targetUser) =>\n organization?.membersIds?.map(String).includes(String(targetUser?.id))\n ),\n },\n org_user: {\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\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 targetUsers,\n }: SessionContext & { targetUsers: (User | UserAPI)[] }) =>\n targetUsers.every((targetUser) =>\n organization?.membersIds?.map(String).includes(String(targetUser?.id))\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 targetTags,\n }: SessionContext & { targetTags: (Tag | TagAPI)[] }) =>\n targetTags.every((tag) => String(project?.id) === String(tag?.projectId)),\n 'tag:write': ({\n project,\n targetTags,\n }: SessionContext & { targetTags: (Tag | TagAPI)[] }) =>\n targetTags.every((tag) => String(project?.id) === String(tag?.projectId)),\n 'tag:admin': ({\n project,\n targetTags,\n }: SessionContext & { targetTags: (Tag | TagAPI)[] }) =>\n targetTags.every((tag) => String(project?.id) === String(tag?.projectId)),\n\n 'user:write': ({\n project,\n targetUsers,\n }: SessionContext & { targetUsers: (User | UserAPI)[] }) =>\n targetUsers.every((targetUser) =>\n project?.membersIds?.map(String).includes(String(targetUser?.id))\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': ({\n project,\n targetTags,\n user,\n }: SessionContext & {\n targetTags: (Tag | TagAPI)[];\n }) =>\n project?.membersIds?.map(String).includes(String(user?.id)) &&\n targetTags.every((tag) => String(project?.id) === String(tag?.projectId)),\n 'tag:write': ({\n project,\n targetTags,\n user,\n }: SessionContext & {\n targetTags: (Tag | TagAPI)[];\n }) =>\n project?.membersIds?.map(String).includes(String(user?.id)) &&\n targetTags.every((tag) => String(project?.id) === String(tag?.projectId)),\n 'tag:admin': ({\n user,\n project,\n targetTags,\n }: SessionContext & {\n targetTags: (Tag | TagAPI)[];\n }) =>\n project?.adminsIds?.map(String).includes(String(user?.id)) &&\n targetTags.every((tag) => String(project?.id) === String(tag?.projectId)),\n\n 'user:read': ({\n project,\n targetUsers,\n }: SessionContext & { targetUsers: (User | UserAPI)[] }) =>\n targetUsers.every((targetUser) =>\n project?.membersIds?.map(String).includes(String(targetUser?.id))\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
|
+
{"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 * 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 * 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 * 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 * 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 targetUsers,\n }: SessionContext & { targetUsers: (User | UserAPI)[] }) =>\n targetUsers.every(\n (targetUser) =>\n String(targetUser.id) === String(user?.id) &&\n targetUser.email === user?.email\n ),\n 'user:write': ({\n user,\n targetUsers,\n }: SessionContext & { targetUsers: (User | UserAPI)[] }) =>\n targetUsers.every(\n (targetUser) =>\n String(targetUser.id) === String(user?.id) &&\n targetUser.email === user?.email\n ),\n 'user:admin': ({\n user,\n targetUsers,\n }: SessionContext & { targetUsers: (User | UserAPI)[] }) =>\n targetUsers.every(\n (targetUser) =>\n String(targetUser.id) === String(user?.id) &&\n targetUser.email === user?.email\n ),\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 targetUsers,\n }: SessionContext & { targetUsers: (User | UserAPI)[] }) =>\n targetUsers.every((targetUser) =>\n organization?.membersIds?.map(String).includes(String(targetUser?.id))\n ),\n },\n org_user: {\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\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 targetUsers,\n }: SessionContext & { targetUsers: (User | UserAPI)[] }) =>\n targetUsers.every((targetUser) =>\n organization?.membersIds?.map(String).includes(String(targetUser?.id))\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 targetTags,\n }: SessionContext & { targetTags: (Tag | TagAPI)[] }) =>\n targetTags.every((tag) => String(project?.id) === String(tag?.projectId)),\n 'tag:write': ({\n project,\n targetTags,\n }: SessionContext & { targetTags: (Tag | TagAPI)[] }) =>\n targetTags.every((tag) => String(project?.id) === String(tag?.projectId)),\n 'tag:admin': ({\n project,\n targetTags,\n }: SessionContext & { targetTags: (Tag | TagAPI)[] }) =>\n targetTags.every((tag) => String(project?.id) === String(tag?.projectId)),\n\n 'user:write': ({\n project,\n targetUsers,\n }: SessionContext & { targetUsers: (User | UserAPI)[] }) =>\n targetUsers.every((targetUser) =>\n project?.membersIds?.map(String).includes(String(targetUser?.id))\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': ({\n project,\n targetTags,\n user,\n }: SessionContext & {\n targetTags: (Tag | TagAPI)[];\n }) =>\n project?.membersIds?.map(String).includes(String(user?.id)) &&\n targetTags.every((tag) => String(project?.id) === String(tag?.projectId)),\n 'tag:write': ({\n project,\n targetTags,\n user,\n }: SessionContext & {\n targetTags: (Tag | TagAPI)[];\n }) =>\n project?.membersIds?.map(String).includes(String(user?.id)) &&\n targetTags.every((tag) => String(project?.id) === String(tag?.projectId)),\n 'tag:admin': ({\n user,\n project,\n targetTags,\n }: SessionContext & {\n targetTags: (Tag | TagAPI)[];\n }) =>\n project?.adminsIds?.map(String).includes(String(user?.id)) &&\n targetTags.every((tag) => String(project?.id) === String(tag?.projectId)),\n\n 'user:read': ({\n project,\n targetUsers,\n }: SessionContext & { targetUsers: (User | UserAPI)[] }) =>\n targetUsers.every((targetUser) =>\n project?.membersIds?.map(String).includes(String(targetUser?.id))\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 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/utils/rateLimiter.ts"],"sourcesContent":["import type { NextFunction, Request, Response } from 'express';\nimport rateLimit from 'express-rate-limit';\nimport { ErrorHandler } from './errors';\n\n// -------------------------------------------------------------\n// Create the rate-limiter instances once at module load-time so\n// that the hit counters are shared across every incoming request.\n// -------------------------------------------------------------\n\nexport const ipLimiter: (\n req: Request,\n res: Response,\n next: NextFunction\n) =>
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/rateLimiter.ts"],"sourcesContent":["import type { NextFunction, Request, Response } from 'express';\nimport rateLimit from 'express-rate-limit';\nimport { ErrorHandler } from './errors';\n\n// -------------------------------------------------------------\n// Create the rate-limiter instances once at module load-time so\n// that the hit counters are shared across every incoming request.\n// -------------------------------------------------------------\n\nexport const ipLimiter: (\n req: Request,\n res: Response,\n next: NextFunction\n) => unknown = rateLimit({\n windowMs: 60 * 1000, // 1-minute window\n limit: 500, // 500 requests / IP / window\n standardHeaders: 'draft-8',\n legacyHeaders: false,\n // Use a custom key generator that handles proxy headers securely\n keyGenerator: (req) => {\n // Use the real IP address, falling back to socket remote address\n return req.ip ?? req.socket?.remoteAddress ?? 'unknown';\n },\n handler: (req, res, _next) => {\n const { limit, remaining, resetTime } = (req as any).rateLimit;\n\n ErrorHandler.handleGenericErrorResponse(res, 'RATE_LIMIT_EXCEEDED', {\n limit: `${limit} per minute`,\n retryAfter: Math.ceil((resetTime!.getTime() - Date.now()) / 1000),\n remaining,\n });\n },\n});\n\nexport const unauthenticatedChatBotLimiter: (\n req: Request,\n res: Response,\n next: NextFunction\n) => any = rateLimit({\n windowMs: 60 * 60 * 1000, // 1-hour window\n limit: 3, // 3 requests / IP / window\n standardHeaders: 'draft-8',\n skip: (_req, res) => Boolean(res.locals.user), // authenticated? then skip\n legacyHeaders: false,\n // Use a custom key generator that handles proxy headers securely\n keyGenerator: (req) => {\n // Use the real IP address, falling back to socket remote address\n return req.ip ?? req.socket?.remoteAddress ?? 'unknown';\n },\n handler: (req, res) => {\n const { limit, remaining, resetTime } = (req as any).rateLimit;\n\n ErrorHandler.handleGenericErrorResponse(\n res,\n 'RATE_LIMIT_EXCEEDED_UNAUTHENTICATED',\n {\n limit: `${limit} per hour`,\n retryAfter: Math.ceil((resetTime!.getTime() - Date.now()) / 1000),\n remaining,\n }\n );\n },\n});\n"],"mappings":"AACA,OAAO,eAAe;AACtB,SAAS,oBAAoB;AAOtB,MAAM,YAIE,UAAU;AAAA,EACvB,UAAU,KAAK;AAAA;AAAA,EACf,OAAO;AAAA;AAAA,EACP,iBAAiB;AAAA,EACjB,eAAe;AAAA;AAAA,EAEf,cAAc,CAAC,QAAQ;AAErB,WAAO,IAAI,MAAM,IAAI,QAAQ,iBAAiB;AAAA,EAChD;AAAA,EACA,SAAS,CAAC,KAAK,KAAK,UAAU;AAC5B,UAAM,EAAE,OAAO,WAAW,UAAU,IAAK,IAAY;AAErD,iBAAa,2BAA2B,KAAK,uBAAuB;AAAA,MAClE,OAAO,GAAG,KAAK;AAAA,MACf,YAAY,KAAK,MAAM,UAAW,QAAQ,IAAI,KAAK,IAAI,KAAK,GAAI;AAAA,MAChE;AAAA,IACF,CAAC;AAAA,EACH;AACF,CAAC;AAEM,MAAM,gCAIF,UAAU;AAAA,EACnB,UAAU,KAAK,KAAK;AAAA;AAAA,EACpB,OAAO;AAAA;AAAA,EACP,iBAAiB;AAAA,EACjB,MAAM,CAAC,MAAM,QAAQ,QAAQ,IAAI,OAAO,IAAI;AAAA;AAAA,EAC5C,eAAe;AAAA;AAAA,EAEf,cAAc,CAAC,QAAQ;AAErB,WAAO,IAAI,MAAM,IAAI,QAAQ,iBAAiB;AAAA,EAChD;AAAA,EACA,SAAS,CAAC,KAAK,QAAQ;AACrB,UAAM,EAAE,OAAO,WAAW,UAAU,IAAK,IAAY;AAErD,iBAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,QACE,OAAO,GAAG,KAAK;AAAA,QACf,YAAY,KAAK,MAAM,UAAW,QAAQ,IAAI,KAAK,IAAI,KAAK,GAAI;AAAA,QAChE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Dictionary } from '../types/dictionary.types';
|
|
2
2
|
import { Model } from 'mongoose';
|
|
3
|
-
export declare const DictionaryModel: Model<Dictionary, {}, {}, {}, import("mongoose").Document<unknown, {}, Dictionary, {}> & import("../types/dictionary.types").DictionaryData & {
|
|
3
|
+
export declare const DictionaryModel: Model<Dictionary, {}, {}, {}, import("mongoose").Document<unknown, {}, Dictionary, {}, {}> & import("../types/dictionary.types").DictionaryData & {
|
|
4
4
|
id: import("mongoose").Types.ObjectId;
|
|
5
5
|
createdAt: number;
|
|
6
6
|
updatedAt: number;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Discussion } from '../types/discussion.types';
|
|
2
2
|
import { Model } from 'mongoose';
|
|
3
|
-
export declare const DiscussionModel: Model<Discussion, {}, {}, {}, import("mongoose").Document<unknown, {}, Discussion, {}> & Discussion & Required<{
|
|
3
|
+
export declare const DiscussionModel: Model<Discussion, {}, {}, {}, import("mongoose").Document<unknown, {}, Discussion, {}, {}> & Discussion & Required<{
|
|
4
4
|
_id: unknown;
|
|
5
5
|
}> & {
|
|
6
6
|
__v: number;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Model } from 'mongoose';
|
|
2
2
|
import { type Token } from '../schemas/oAuth2.schema';
|
|
3
|
-
export declare const OAuth2AccessTokenModel: Model<Token, {}, {}, {}, import("mongoose").Document<unknown, {}, Token, {}> & Omit<import("oauth2-server").Token, "user" | "client"> & {
|
|
3
|
+
export declare const OAuth2AccessTokenModel: Model<Token, {}, {}, {}, import("mongoose").Document<unknown, {}, Token, {}, {}> & Omit<import("oauth2-server").Token, "user" | "client"> & {
|
|
4
4
|
clientId: import("oauth2-server").Client["id"];
|
|
5
5
|
userId: import("../export").User["id"];
|
|
6
6
|
} & {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { DictionarySchema } from '../types/dictionary.types';
|
|
2
2
|
import { Schema } from 'mongoose';
|
|
3
|
-
export declare const dictionarySchema: Schema<DictionarySchema, import("mongoose").Model<DictionarySchema, any, any, any, import("mongoose").Document<unknown, any, DictionarySchema, any> & Omit<import("../types/dictionary.types").Dictionary, "id"> & {
|
|
3
|
+
export declare const dictionarySchema: Schema<DictionarySchema, import("mongoose").Model<DictionarySchema, any, any, any, import("mongoose").Document<unknown, any, DictionarySchema, any, {}> & Omit<import("../types/dictionary.types").Dictionary, "id"> & {
|
|
4
4
|
_id: import("mongoose").Types.ObjectId;
|
|
5
5
|
} & Required<{
|
|
6
6
|
_id: import("mongoose").Types.ObjectId;
|
|
7
7
|
}> & {
|
|
8
8
|
__v: number;
|
|
9
|
-
}, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, DictionarySchema, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<DictionarySchema>, {}
|
|
9
|
+
}, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, DictionarySchema, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<DictionarySchema>, {}, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>> & import("mongoose").FlatRecord<DictionarySchema> & Required<{
|
|
10
10
|
_id: import("mongoose").Types.ObjectId;
|
|
11
11
|
}> & {
|
|
12
12
|
__v: number;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { DiscussionSchema } from '../types/discussion.types';
|
|
2
2
|
import { Schema } from 'mongoose';
|
|
3
|
-
export declare const discussionSchema: Schema<DiscussionSchema, import("mongoose").Model<DiscussionSchema, any, any, any, import("mongoose").Document<unknown, any, DiscussionSchema, any> & Omit<import("../types/discussion.types").Discussion, "id"> & {
|
|
3
|
+
export declare const discussionSchema: Schema<DiscussionSchema, import("mongoose").Model<DiscussionSchema, any, any, any, import("mongoose").Document<unknown, any, DiscussionSchema, any, {}> & Omit<import("../types/discussion.types").Discussion, "id"> & {
|
|
4
4
|
_id: import("mongoose").Types.ObjectId;
|
|
5
5
|
} & Required<{
|
|
6
6
|
_id: import("mongoose").Types.ObjectId;
|
|
7
7
|
}> & {
|
|
8
8
|
__v: number;
|
|
9
|
-
}, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, DiscussionSchema, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<DiscussionSchema>, {}
|
|
9
|
+
}, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, DiscussionSchema, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<DiscussionSchema>, {}, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>> & import("mongoose").FlatRecord<DiscussionSchema> & Required<{
|
|
10
10
|
_id: import("mongoose").Types.ObjectId;
|
|
11
11
|
}> & {
|
|
12
12
|
__v: number;
|
|
@@ -5,14 +5,14 @@ export type Token = Omit<TokenType, 'client' | 'user'> & {
|
|
|
5
5
|
clientId: Client['id'];
|
|
6
6
|
userId: User['id'];
|
|
7
7
|
};
|
|
8
|
-
export declare const accessTokenSchema: Schema<Token, import("mongoose").Model<Token, any, any, any, import("mongoose").Document<unknown, any, Token, any> & Omit<TokenType, "user" | "client"> & {
|
|
8
|
+
export declare const accessTokenSchema: Schema<Token, import("mongoose").Model<Token, any, any, any, import("mongoose").Document<unknown, any, Token, any, {}> & Omit<TokenType, "user" | "client"> & {
|
|
9
9
|
clientId: Client["id"];
|
|
10
10
|
userId: User["id"];
|
|
11
11
|
} & {
|
|
12
12
|
_id: import("mongoose").Types.ObjectId;
|
|
13
13
|
} & {
|
|
14
14
|
__v: number;
|
|
15
|
-
}, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, Token, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<Token>, {}
|
|
15
|
+
}, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, Token, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<Token>, {}, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>> & import("mongoose").FlatRecord<Token> & {
|
|
16
16
|
_id: import("mongoose").Types.ObjectId;
|
|
17
17
|
} & {
|
|
18
18
|
__v: number;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { OrganizationSchema } from '../export';
|
|
2
2
|
import { Schema } from 'mongoose';
|
|
3
|
-
export declare const organizationSchema: Schema<OrganizationSchema, import("mongoose").Model<OrganizationSchema, any, any, any, import("mongoose").Document<unknown, any, OrganizationSchema, any> & Omit<import("../export").Organization, "id"> & {
|
|
3
|
+
export declare const organizationSchema: Schema<OrganizationSchema, import("mongoose").Model<OrganizationSchema, any, any, any, import("mongoose").Document<unknown, any, OrganizationSchema, any, {}> & Omit<import("../export").Organization, "id"> & {
|
|
4
4
|
_id: import("mongoose").Types.ObjectId;
|
|
5
5
|
} & Required<{
|
|
6
6
|
_id: import("mongoose").Types.ObjectId;
|
|
7
7
|
}> & {
|
|
8
8
|
__v: number;
|
|
9
|
-
}, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, OrganizationSchema, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<OrganizationSchema>, {}
|
|
9
|
+
}, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, OrganizationSchema, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<OrganizationSchema>, {}, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>> & import("mongoose").FlatRecord<OrganizationSchema> & Required<{
|
|
10
10
|
_id: import("mongoose").Types.ObjectId;
|
|
11
11
|
}> & {
|
|
12
12
|
__v: number;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { PlanSchema } from '../types/plan.types';
|
|
2
2
|
import { Schema } from 'mongoose';
|
|
3
|
-
export declare const planSchema: Schema<PlanSchema, import("mongoose").Model<PlanSchema, any, any, any, import("mongoose").Document<unknown, any, PlanSchema, any> & Omit<import("../types/plan.types").Plan, "id"> & {
|
|
3
|
+
export declare const planSchema: Schema<PlanSchema, import("mongoose").Model<PlanSchema, any, any, any, import("mongoose").Document<unknown, any, PlanSchema, any, {}> & Omit<import("../types/plan.types").Plan, "id"> & {
|
|
4
4
|
_id: import("mongoose").Types.ObjectId;
|
|
5
5
|
} & Required<{
|
|
6
6
|
_id: import("mongoose").Types.ObjectId;
|
|
7
7
|
}> & {
|
|
8
8
|
__v: number;
|
|
9
|
-
}, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, PlanSchema, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<PlanSchema>, {}
|
|
9
|
+
}, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, PlanSchema, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<PlanSchema>, {}, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>> & import("mongoose").FlatRecord<PlanSchema> & Required<{
|
|
10
10
|
_id: import("mongoose").Types.ObjectId;
|
|
11
11
|
}> & {
|
|
12
12
|
__v: number;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { Project, ProjectSchema } from '../types/project.types';
|
|
2
2
|
import { Schema } from 'mongoose';
|
|
3
|
-
export declare const projectSchema: Schema<ProjectSchema, import("mongoose").Model<ProjectSchema, any, any, any, import("mongoose").Document<unknown, any, ProjectSchema, any> & Omit<Project, "id"> & {
|
|
3
|
+
export declare const projectSchema: Schema<ProjectSchema, import("mongoose").Model<ProjectSchema, any, any, any, import("mongoose").Document<unknown, any, ProjectSchema, any, {}> & Omit<Project, "id"> & {
|
|
4
4
|
_id: import("mongoose").Types.ObjectId;
|
|
5
5
|
} & Required<{
|
|
6
6
|
_id: import("mongoose").Types.ObjectId;
|
|
7
7
|
}> & {
|
|
8
8
|
__v: number;
|
|
9
|
-
}, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, ProjectSchema, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<ProjectSchema>, {}
|
|
9
|
+
}, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, ProjectSchema, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<ProjectSchema>, {}, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>> & import("mongoose").FlatRecord<ProjectSchema> & Required<{
|
|
10
10
|
_id: import("mongoose").Types.ObjectId;
|
|
11
11
|
}> & {
|
|
12
12
|
__v: number;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { SessionSchema } from '../export';
|
|
2
2
|
import { Schema } from 'mongoose';
|
|
3
|
-
export declare const sessionSchema: Schema<SessionSchema, import("mongoose").Model<SessionSchema, any, any, any, import("mongoose").Document<unknown, any, SessionSchema, any> & Omit<import("../export").SessionData, "id"> & {
|
|
3
|
+
export declare const sessionSchema: Schema<SessionSchema, import("mongoose").Model<SessionSchema, any, any, any, import("mongoose").Document<unknown, any, SessionSchema, any, {}> & Omit<import("../export").SessionData, "id"> & {
|
|
4
4
|
_id: import("mongoose").Types.ObjectId;
|
|
5
5
|
} & Required<{
|
|
6
6
|
_id: import("mongoose").Types.ObjectId;
|
|
7
7
|
}> & {
|
|
8
8
|
__v: number;
|
|
9
|
-
}, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, SessionSchema, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<SessionSchema>, {}
|
|
9
|
+
}, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, SessionSchema, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<SessionSchema>, {}, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>> & import("mongoose").FlatRecord<SessionSchema> & Required<{
|
|
10
10
|
_id: import("mongoose").Types.ObjectId;
|
|
11
11
|
}> & {
|
|
12
12
|
__v: number;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { TagSchema } from '../types/tag.types';
|
|
2
2
|
import { Schema } from 'mongoose';
|
|
3
|
-
export declare const tagSchema: Schema<TagSchema, import("mongoose").Model<TagSchema, any, any, any, import("mongoose").Document<unknown, any, TagSchema, any> & Omit<import("../types/tag.types").Tag, "id"> & {
|
|
3
|
+
export declare const tagSchema: Schema<TagSchema, import("mongoose").Model<TagSchema, any, any, any, import("mongoose").Document<unknown, any, TagSchema, any, {}> & Omit<import("../types/tag.types").Tag, "id"> & {
|
|
4
4
|
_id: import("mongoose").Types.ObjectId;
|
|
5
5
|
} & Required<{
|
|
6
6
|
_id: import("mongoose").Types.ObjectId;
|
|
7
7
|
}> & {
|
|
8
8
|
__v: number;
|
|
9
|
-
}, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, TagSchema, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<TagSchema>, {}
|
|
9
|
+
}, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, TagSchema, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<TagSchema>, {}, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>> & import("mongoose").FlatRecord<TagSchema> & Required<{
|
|
10
10
|
_id: import("mongoose").Types.ObjectId;
|
|
11
11
|
}> & {
|
|
12
12
|
__v: number;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { UserSchema } from '../types/user.types';
|
|
2
2
|
import { Schema } from 'mongoose';
|
|
3
|
-
export declare const userSchema: Schema<UserSchema, import("mongoose").Model<UserSchema, any, any, any, import("mongoose").Document<unknown, any, UserSchema, any> & Omit<import("../types/user.types").User, "id"> & {
|
|
3
|
+
export declare const userSchema: Schema<UserSchema, import("mongoose").Model<UserSchema, any, any, any, import("mongoose").Document<unknown, any, UserSchema, any, {}> & Omit<import("../types/user.types").User, "id"> & {
|
|
4
4
|
_id: import("mongoose").Types.ObjectId;
|
|
5
5
|
} & Required<{
|
|
6
6
|
_id: import("mongoose").Types.ObjectId;
|
|
7
7
|
}> & {
|
|
8
8
|
__v: number;
|
|
9
|
-
}, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, UserSchema, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<UserSchema>, {}
|
|
9
|
+
}, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, UserSchema, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<UserSchema>, {}, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>> & import("mongoose").FlatRecord<UserSchema> & Required<{
|
|
10
10
|
_id: import("mongoose").Types.ObjectId;
|
|
11
11
|
}> & {
|
|
12
12
|
__v: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organization.service.d.ts","sourceRoot":"","sources":["../../../src/services/organization.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,wBAAwB,EACxB,oBAAoB,EACrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,IAAI,EAAgB,MAAM,oBAAoB,CAAC;AAG7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iEAAiE,CAAC;AAK3G,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAC5B,SAAS,mBAAmB,EAC5B,MAAM,MAAM,EACZ,OAAO,MAAM,KACZ,OAAO,CAAC,oBAAoB,EAAE,CAC8B,CAAC;AAEhE;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAC9B,gBAAgB,MAAM,GAAG,KAAK,CAAC,QAAQ,KACtC,OAAO,CAAC,oBAAoB,CAQ9B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAC7B,SAAS,mBAAmB,KAC3B,OAAO,CAAC,MAAM,CAQhB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAC7B,cAAc,wBAAwB,EACtC,QAAQ,MAAM,GAAG,KAAK,CAAC,QAAQ,KAC9B,OAAO,CAAC,oBAAoB,CAqB9B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GACjC,gBAAgB,MAAM,GAAG,KAAK,CAAC,QAAQ,EACvC,cAAc,OAAO,CAAC,YAAY,CAAC,KAClC,OAAO,CAAC,oBAAoB,CAqB9B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,gBAAgB,MAAM,GAAG,KAAK,CAAC,QAAQ,KACtC,OAAO,CAAC,oBAAoB,CAS9B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GACrB,cAAc,YAAY,GAAG,oBAAoB,EACjD,MAAM,OAAO,CAAC,IAAI,CAAC,KAClB,OAAO,CAAC,oBAAoB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"organization.service.d.ts","sourceRoot":"","sources":["../../../src/services/organization.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,wBAAwB,EACxB,oBAAoB,EACrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,IAAI,EAAgB,MAAM,oBAAoB,CAAC;AAG7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iEAAiE,CAAC;AAK3G,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAC5B,SAAS,mBAAmB,EAC5B,MAAM,MAAM,EACZ,OAAO,MAAM,KACZ,OAAO,CAAC,oBAAoB,EAAE,CAC8B,CAAC;AAEhE;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAC9B,gBAAgB,MAAM,GAAG,KAAK,CAAC,QAAQ,KACtC,OAAO,CAAC,oBAAoB,CAQ9B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAC7B,SAAS,mBAAmB,KAC3B,OAAO,CAAC,MAAM,CAQhB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAC7B,cAAc,wBAAwB,EACtC,QAAQ,MAAM,GAAG,KAAK,CAAC,QAAQ,KAC9B,OAAO,CAAC,oBAAoB,CAqB9B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GACjC,gBAAgB,MAAM,GAAG,KAAK,CAAC,QAAQ,EACvC,cAAc,OAAO,CAAC,YAAY,CAAC,KAClC,OAAO,CAAC,oBAAoB,CAqB9B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,gBAAgB,MAAM,GAAG,KAAK,CAAC,QAAQ,KACtC,OAAO,CAAC,oBAAoB,CAS9B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GACrB,cAAc,YAAY,GAAG,oBAAoB,EACjD,MAAM,OAAO,CAAC,IAAI,CAAC,KAClB,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAqBrC,CAAC"}
|
|
@@ -3,14 +3,14 @@ import { deepseek } from '@ai-sdk/deepseek';
|
|
|
3
3
|
import { google } from '@ai-sdk/google';
|
|
4
4
|
import { mistral } from '@ai-sdk/mistral';
|
|
5
5
|
import { openai } from '@ai-sdk/openai';
|
|
6
|
-
import {
|
|
6
|
+
import { AssistantModelMessage, generateText, SystemModelMessage, ToolModelMessage, UserModelMessage } from 'ai';
|
|
7
7
|
import { Response } from 'express';
|
|
8
8
|
type AnthropicModel = Parameters<typeof anthropic>[0];
|
|
9
9
|
type DeepSeekModel = Parameters<typeof deepseek>[0];
|
|
10
10
|
type MistralModel = Parameters<typeof mistral>[0];
|
|
11
11
|
type OpenAIModel = Parameters<typeof openai>[0];
|
|
12
12
|
type GoogleModel = Parameters<typeof google>[0];
|
|
13
|
-
export type Messages =
|
|
13
|
+
export type Messages = (SystemModelMessage | UserModelMessage | AssistantModelMessage | ToolModelMessage)[];
|
|
14
14
|
/**
|
|
15
15
|
* Supported AI models
|
|
16
16
|
*/
|
|
@@ -34,7 +34,6 @@ export type AIOptions = {
|
|
|
34
34
|
temperature?: number;
|
|
35
35
|
apiKey?: string;
|
|
36
36
|
applicationContext?: string;
|
|
37
|
-
maxTokens?: number;
|
|
38
37
|
};
|
|
39
38
|
export type ChatCompletionRequestMessage = {
|
|
40
39
|
role: 'system' | 'user' | 'assistant';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aiSdk.d.ts","sourceRoot":"","sources":["../../../../src/utils/AI/aiSdk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAmB,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAkB,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAA4B,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAiB,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAgB,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,
|
|
1
|
+
{"version":3,"file":"aiSdk.d.ts","sourceRoot":"","sources":["../../../../src/utils/AI/aiSdk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAmB,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAkB,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAA4B,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAiB,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAgB,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EACL,qBAAqB,EACrB,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAEhD,MAAM,MAAM,QAAQ,GAAG,CACnB,kBAAkB,GAClB,gBAAgB,GAChB,qBAAqB,GACrB,gBAAgB,CACnB,EAAE,CAAC;AAEJ;;GAEG;AACH,MAAM,MAAM,KAAK,GACb,cAAc,GACd,aAAa,GACb,YAAY,GACZ,WAAW,GACX,WAAW,GACX,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB;;GAEG;AACH,oBAAY,UAAU;IACpB,MAAM,WAAW;IACjB,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,MAAM,WAAW;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAGF,MAAM,MAAM,4BAA4B,GAAG;IACzC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB,CAAC;AAEF,KAAK,UAAU,GAAG,QAAQ,GAAG,iBAAiB,GAAG,cAAc,GAAG,QAAQ,CAAC;AAsE3E,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAK1D,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC;CAC3B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GACtB,KAAK,QAAQ,EACb,SAAS,eAAe,KACvB,OAAO,CAAC,QAAQ,CAiFlB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/utils/AI/autocomplete/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAc,MAAM,UAAU,CAAC;AAQ3D,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAKF,eAAO,MAAM,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/utils/AI/autocomplete/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAc,MAAM,UAAU,CAAC;AAQ3D,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAKF,eAAO,MAAM,gBAAgB,EAAE,SAI9B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAU,mFAOhC,mBAAmB,KAAG,OAAO,CAAC,0BAA0B,GAAG,SAAS,CAyBtE,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { NextFunction, Request, Response } from 'express';
|
|
2
|
-
export declare const ipLimiter: (req: Request, res: Response, next: NextFunction) =>
|
|
2
|
+
export declare const ipLimiter: (req: Request, res: Response, next: NextFunction) => unknown;
|
|
3
3
|
export declare const unauthenticatedChatBotLimiter: (req: Request, res: Response, next: NextFunction) => any;
|
|
4
4
|
//# sourceMappingURL=rateLimiter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rateLimiter.d.ts","sourceRoot":"","sources":["../../../src/utils/rateLimiter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAS/D,eAAO,MAAM,SAAS,EAAE,CACtB,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,KACf,
|
|
1
|
+
{"version":3,"file":"rateLimiter.d.ts","sourceRoot":"","sources":["../../../src/utils/rateLimiter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAS/D,eAAO,MAAM,SAAS,EAAE,CACtB,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,KACf,OAmBH,CAAC;AAEH,eAAO,MAAM,6BAA6B,EAAE,CAC1C,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,KACf,GAwBH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intlayer/backend",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.8.0-canary.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Intlayer Backend is a an application that allow you to manage your Intlayer content and interact with the intlayer editor.",
|
|
6
6
|
"keywords": [
|
|
@@ -50,22 +50,22 @@
|
|
|
50
50
|
"./package.json"
|
|
51
51
|
],
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@ai-sdk/anthropic": "^
|
|
54
|
-
"@ai-sdk/deepseek": "^0.
|
|
55
|
-
"@ai-sdk/google": "^
|
|
56
|
-
"@ai-sdk/mistral": "^
|
|
57
|
-
"@ai-sdk/openai": "^
|
|
58
|
-
"@react-email/components": "^0.
|
|
59
|
-
"ai": "^
|
|
53
|
+
"@ai-sdk/anthropic": "^2.0.4",
|
|
54
|
+
"@ai-sdk/deepseek": "^1.0.7",
|
|
55
|
+
"@ai-sdk/google": "^2.0.6",
|
|
56
|
+
"@ai-sdk/mistral": "^2.0.4",
|
|
57
|
+
"@ai-sdk/openai": "^2.0.14",
|
|
58
|
+
"@react-email/components": "^0.5.0",
|
|
59
|
+
"ai": "^5.0.14",
|
|
60
60
|
"bcryptjs": "^3.0.2",
|
|
61
61
|
"better-auth": "^1.3.4",
|
|
62
62
|
"compression": "^1.8.0",
|
|
63
63
|
"cookie-parser": "^1.4.7",
|
|
64
64
|
"cors": "^2.8.5",
|
|
65
65
|
"deepmerge": "^4.3.1",
|
|
66
|
-
"dotenv": "^16.
|
|
66
|
+
"dotenv": "^16.6.1",
|
|
67
67
|
"express": "^5.1.0",
|
|
68
|
-
"express-rate-limit": "^
|
|
68
|
+
"express-rate-limit": "^8.0.1",
|
|
69
69
|
"helmet": "^8.1.0",
|
|
70
70
|
"jsonwebtoken": "^9.0.2",
|
|
71
71
|
"mongodb": "^6.15.0",
|
|
@@ -74,11 +74,11 @@
|
|
|
74
74
|
"openai": "^5.5.1",
|
|
75
75
|
"react": "^19.1.1",
|
|
76
76
|
"react-email": "^4.0.16",
|
|
77
|
-
"resend": "^
|
|
77
|
+
"resend": "^6.0.1",
|
|
78
78
|
"stripe": "^18.3.0",
|
|
79
79
|
"validator": "^13.12.0",
|
|
80
80
|
"winston": "^3.17.0",
|
|
81
|
-
"express-intlayer": "5.
|
|
81
|
+
"express-intlayer": "5.8.0-canary.0"
|
|
82
82
|
},
|
|
83
83
|
"devDependencies": {
|
|
84
84
|
"@types/body-parser": "^1.19.5",
|
|
@@ -89,27 +89,27 @@
|
|
|
89
89
|
"@types/csurf": "^1.11.5",
|
|
90
90
|
"@types/express": "^5.0.2",
|
|
91
91
|
"@types/jsonwebtoken": "^9.0.9",
|
|
92
|
-
"@types/node": "^
|
|
92
|
+
"@types/node": "^24.2.1",
|
|
93
93
|
"@types/oauth2-server": "^3.0.18",
|
|
94
94
|
"@types/react": "^19.1.6",
|
|
95
95
|
"@types/validator": "^13.12.2",
|
|
96
96
|
"esbuild-fix-imports-plugin": "^1.0.21",
|
|
97
|
-
"eslint": "^9.
|
|
97
|
+
"eslint": "^9.33.0",
|
|
98
98
|
"prettier": "^3.5.0",
|
|
99
99
|
"rimraf": "^6.0.1",
|
|
100
100
|
"tsc-alias": "^1.8.16",
|
|
101
101
|
"tsup": "^8.5.0",
|
|
102
102
|
"tsx": "^4.19.4",
|
|
103
|
-
"typescript": "^5.
|
|
103
|
+
"typescript": "^5.9.2",
|
|
104
104
|
"vitest": "^3.2.2",
|
|
105
|
-
"@intlayer/
|
|
105
|
+
"@intlayer/config": "5.8.0-canary.0",
|
|
106
|
+
"@intlayer/docs": "5.8.0-canary.0",
|
|
106
107
|
"@utils/eslint-config": "1.0.4",
|
|
107
|
-
"@intlayer/
|
|
108
|
+
"@intlayer/core": "5.8.0-canary.0",
|
|
108
109
|
"@utils/ts-config": "1.0.4",
|
|
109
|
-
"@
|
|
110
|
-
"intlayer": "5.7.8",
|
|
110
|
+
"@utils/tsup-config": "1.0.4",
|
|
111
111
|
"@utils/ts-config-types": "1.0.4",
|
|
112
|
-
"
|
|
112
|
+
"intlayer": "5.8.0-canary.0"
|
|
113
113
|
},
|
|
114
114
|
"scripts": {
|
|
115
115
|
"build": "pnpm clean & pnpm build:ci",
|