{"version":3,"file":"chunks/16.566c2e4d876f304fb52d.js","mappings":"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","sources":["webpack://core/./services/users/Role.model.ts","webpack://core/./services/users/User.model.ts","webpack://core/./services/users/Users.repository.ts","webpack://core/./services/users/Users.service.ts","webpack://core/./services/users/MyUser.view-model.ts","webpack://core/./services/issues/Issue.model.ts","webpack://core/./services/issues/Issues.repository.ts","webpack://core/./services/issues/Issues.service.ts","webpack://core/./services/comments/Comment.model.ts","webpack://core/./services/comments/Comments.repository.ts","webpack://core/./services/comments/Comments.service.ts","webpack://core/./services/Logger.service.ts","webpack://core/./services/organization/models/Org.model.ts","webpack://core/./services/organization/Org.repository.ts","webpack://core/./services/organization/Org.service.ts","webpack://core/./services/organization/types.ts","webpack://core/./services/FeatureFlags.service.ts"],"sourcesContent":["import type { UserRoles } from '../../base';\n\nexport class RoleModel {\n name: UserRoles;\n\n description: string;\n}\n","import type { UserId } from 'core/types';\nimport type { OrganizationUserRoles } from 'core/base';\n\nexport class UserModel {\n id: UserId;\n\n email: string;\n\n roles: OrganizationUserRoles[] | null;\n\n firstName?: string;\n\n lastName?: string;\n\n uniqueUserName?: string;\n\n userName?: string;\n}\n","import type { PaginationResponse, UserRoles } from 'core/base';\nimport { BaseRepository } from 'core/base';\nimport type { AxiosRequestConfig } from 'axios';\nimport type { UserModel } from './User.model';\nimport type { UserId } from '../../types';\nimport type { RoleModel } from './Role.model';\n\nexport class UsersRepository extends BaseRepository {\n constructor() {\n super('/users');\n }\n\n async getAll(config?: AxiosRequestConfig) {\n const { data } = await this.httpClient.get>('/', config);\n\n return data;\n }\n\n async getUserInfo() {\n const { data } = await this.httpClient.get('/me');\n\n return data;\n }\n\n getRoles() {\n return this.httpClient.get('/roles').then(({ data }) => data);\n }\n\n updateUserRoles(id: UserId, roles: UserRoles[]) {\n return this.httpClient.put(`/${id}/roles`, roles).then(({ data }) => data);\n }\n\n updateManyUsersRoles(usersForUpdate: { userID: UserId; roles: UserRoles[] }[]) {\n return this.httpClient.post(`/update/roles`, usersForUpdate).then(({ data }) => data);\n }\n}\n","import { URL_LIST } from 'core/store/modules/common/literals';\nimport type { AxiosRequestConfig } from 'axios';\nimport type { UserRoles } from '../../base';\nimport { fusionAuthRedirect } from '../fusionAuthRedirect';\nimport { UsersRepository } from './Users.repository';\nimport type { UserId } from '../../types';\nimport type { RoleModel } from './Role.model';\n\nconst skipRoles = (roles?: RoleModel[], skipValues?: UserRoles[]) => {\n if (!roles) return [];\n return roles.filter(role => !skipValues?.includes(role.name));\n};\n\nexport class UsersService {\n usersRepo: UsersRepository = new UsersRepository();\n\n getUserInfo() {\n return this.usersRepo.getUserInfo();\n }\n\n getAll(config?: AxiosRequestConfig) {\n return this.usersRepo.getAll(config);\n }\n\n getRoles() {\n return this.usersRepo.getRoles();\n }\n\n async getRolesByRole() {\n const roles = await this.getRoles();\n\n return {\n getAdminResourceRoles: () => skipRoles(roles, ['admin']),\n getMemberResourceRoles: () => skipRoles(roles, ['admin', 'owner']),\n getGuestResourceRoles: () => skipRoles(roles, ['admin', 'owner', 'member']),\n getAdminInstanceRoles: () => skipRoles(roles, ['owner']),\n };\n }\n\n updateUserRoles(id: UserId, roles: UserRoles[]) {\n return this.usersRepo.updateUserRoles(id, roles);\n }\n\n updateManyUsersRoles(usersForUpdate: { userID: UserId; roles: UserRoles[] }[]) {\n return this.usersRepo.updateManyUsersRoles(usersForUpdate);\n }\n\n // eslint-disable-next-line class-methods-use-this\n login() {\n fusionAuthRedirect(URL_LIST.auth);\n }\n\n // eslint-disable-next-line class-methods-use-this\n logout() {\n fusionAuthRedirect(URL_LIST.logout, window.location.origin);\n }\n}\n","import type { DocumentId } from '../../types';\nimport type { OrganizationUserRoles } from '../../base';\n\ntype UserActions = {\n [P in OrganizationUserRoles as `atLeast${Capitalize>}`]?: () => boolean;\n};\n\nexport class MyUserViewModel implements UserActions {\n id: DocumentId;\n\n roles: OrganizationUserRoles[];\n\n orgID: string;\n\n email: string;\n\n userName?: string;\n\n atLeastAdmin() {\n return this.roles.some(r => ['admin'].includes(r));\n }\n\n atLeastMember() {\n return this.roles.some(r => ['member', 'admin'].includes(r));\n }\n\n atLeastGuest() {\n return this.roles.some(r => ['guest', 'member', 'admin'].includes(r));\n }\n}\n","import type { DocumentId, DocumentRevision, IssueStatusType, UserId } from 'core/types';\n\nexport type IssueLinkModel = {\n entityType: string;\n entityID: DocumentId;\n};\nexport class IssueModel {\n _id: DocumentId;\n\n _rev: DocumentRevision;\n\n title: string;\n\n description: string;\n\n assigneeIDs: UserId[];\n\n status: IssueStatusType;\n\n dueDate: Date;\n\n link: IssueLinkModel;\n\n createdAtUTC?: Date;\n\n createdBy: UserId;\n}\n","import type {\n BaseDocumentChangeModel,\n BaseDocumentModel,\n CustomError,\n PaginationResponse,\n UpdateResponse,\n} from 'core/base';\nimport { BaseRepository } from 'core/base';\nimport type { DocumentId, DocumentRevision } from 'core/types';\nimport type { AxiosRequestConfig } from 'axios';\nimport type { IssueModel } from './Issue.model';\n\nexport class IssuesRepository extends BaseRepository {\n constructor() {\n super('/issues');\n }\n\n async getAll(config?: AxiosRequestConfig) {\n const { data } = await this.httpClient.get>('/', config);\n\n return data;\n }\n\n async getByType(typeName: string, id: DocumentId) {\n const { data } = await this.httpClient.get>(\n `/${typeName}/${id}`,\n );\n\n return data;\n }\n\n async get(id: DocumentId) {\n const { data } = await this.httpClient.get(`/${id}`);\n\n return data;\n }\n\n async update(model: IssueModel): Promise {\n const { _id, _rev } = model;\n const config: AxiosRequestConfig = {\n headers: {\n 'If-Match': `\"${_rev}\"`,\n },\n };\n\n const { headers } = await this.httpClient.put>(\n `/${_id}`,\n model,\n config,\n );\n\n return {\n ...model,\n _rev: JSON.parse(headers.etag) as DocumentRevision,\n };\n }\n\n async create(\n model: IssueModel,\n config?: AxiosRequestConfig,\n ): Promise<{ model: IssueModel; error?: CustomError; ok: boolean }> {\n await this.httpClient.post>('/', model, config);\n\n return {\n model,\n ok: true,\n };\n }\n\n getChanges(id: DocumentId, since?: DocumentRevision) {\n const options = {\n params: {\n since,\n },\n };\n\n return this.httpClient\n .get[]>(`${id}/changes`, options)\n .then(({ data }) => data);\n }\n}\n","import type { DocumentId, DocumentRevision } from 'core/types';\nimport type { AxiosRequestConfig } from 'axios';\nimport { IssuesRepository } from './Issues.repository';\nimport type { IssueModel } from './Issue.model';\n\nexport class IssuesService {\n issuesRepo: IssuesRepository = new IssuesRepository();\n\n getIssue(id: DocumentId) {\n return this.issuesRepo.get(id);\n }\n\n create(issue: IssueModel) {\n return this.issuesRepo.create(issue);\n }\n\n update(issue: IssueModel) {\n return this.issuesRepo.update(issue);\n }\n\n getByType(typeName: string, id: DocumentId) {\n return this.issuesRepo.getByType(typeName, id);\n }\n\n getAll(config?: AxiosRequestConfig) {\n return this.issuesRepo.getAll(config);\n }\n\n getChanges(id: DocumentId, since?: DocumentRevision) {\n return this.issuesRepo.getChanges(id, since);\n }\n}\n","import type { DocumentId, DocumentRevision, UserId } from 'core/types';\n\nexport type CommentLinkModel = {\n entityType: string;\n entityID: DocumentId;\n};\nexport class CommentModel {\n _id: DocumentId;\n\n _rev: DocumentRevision;\n\n text: string;\n\n authorID: UserId;\n\n link: CommentLinkModel;\n\n createdAtUTC: Date;\n}\n","import type { CustomError, PaginationResponse, UpdateResponse } from 'core/base';\nimport { BaseRepository } from 'core/base';\nimport type { DocumentId, DocumentRevision } from 'core/types';\nimport type { AxiosRequestConfig } from 'axios';\nimport type { CommentModel } from './Comment.model';\n\nexport class CommentsRepository extends BaseRepository {\n constructor() {\n super('/comments');\n }\n\n async getAll() {\n const { data } = await this.httpClient.get>('/');\n\n return data;\n }\n\n async getByType(typeName: string, id: DocumentId) {\n const { data } = await this.httpClient.get>(\n `/${typeName}/${id}`,\n );\n\n return data;\n }\n\n async get(id: DocumentId) {\n const { data } = await this.httpClient.get(`/${id}`);\n\n return data;\n }\n\n async update(model: CommentModel): Promise {\n const { _id, _rev } = model;\n const config: AxiosRequestConfig = {\n headers: {\n 'If-Match': `\"${_rev}\"`,\n },\n };\n\n const { headers } = await this.httpClient.put>(\n `/${_id}`,\n model,\n config,\n );\n\n return {\n ...model,\n _rev: JSON.parse(headers.etag) as DocumentRevision,\n };\n }\n\n async create(\n model: CommentModel,\n config?: AxiosRequestConfig,\n ): Promise<{ model: CommentModel; error?: CustomError; ok: boolean }> {\n await this.httpClient.post>('/', model, config);\n\n return {\n model,\n ok: true,\n };\n }\n}\n","import type { DocumentId } from 'core/types';\nimport { CommentsRepository } from './Comments.repository';\nimport type { CommentModel } from './Comment.model';\n\nexport class CommentsService {\n commentsRepo: CommentsRepository = new CommentsRepository();\n\n getComment(id: DocumentId) {\n return this.commentsRepo.get(id);\n }\n\n create(comment: CommentModel) {\n return this.commentsRepo.create(comment);\n }\n\n update(comment: CommentModel) {\n return this.commentsRepo.update(comment);\n }\n\n getByType(typeName: string, id: DocumentId) {\n return this.commentsRepo.getByType(typeName, id);\n }\n\n getAll() {\n return this.commentsRepo.getAll();\n }\n}\n","import UAParser from 'ua-parser-js';\nimport { env } from '../utils/env';\nimport type { UserModel } from './users';\n\nconst JOB = 'web-client';\n\ntype LOG_LEVELS = 'info' | 'error' | 'warn';\n\ntype InfoData = Record;\n\ntype ErrorData = { message?: string; error?: unknown; stack?: string };\n\ntype LogArgs = ['error', unknown] | ['info', InfoData] | ['warn', InfoData];\n\nconst parseError = (error: unknown): ErrorData => {\n if (error instanceof Error) {\n return {\n message: error.message,\n stack: error.stack?.toString(),\n };\n }\n\n return { error };\n};\n\nexport class LoggerService {\n #uaParser: UAParser;\n\n #user?: UserModel;\n\n constructor(private appName: string) {\n this.#uaParser = new UAParser();\n }\n\n setUser(user: UserModel) {\n this.#user = user;\n }\n\n log(...args: LogArgs) {\n this.#sendOrLog(...args);\n }\n\n error(error: unknown) {\n this.#sendOrLog('error', error);\n }\n\n info(info: InfoData) {\n this.#sendOrLog('info', info);\n }\n\n warn(info: InfoData) {\n this.#sendOrLog('warn', info);\n }\n\n #prepareBody(level: LOG_LEVELS, logInfo: InfoData | ErrorData) {\n const os = this.#uaParser.getOS();\n const browser = this.#uaParser.getBrowser();\n\n return {\n streams: [\n {\n stream: {\n job: JOB,\n app: this.appName,\n host: window.location.hostname,\n level,\n user: this.#user,\n url: window.location.href,\n },\n values: [[LoggerService.#now(), JSON.stringify({ os, browser, ...logInfo })]],\n },\n ],\n };\n }\n\n #sendOrLog(...args: LogArgs) {\n const [level, arg] = args;\n // TODO: use feature flags to activate logger\n if (!env.LOG_URL) {\n // eslint-disable-next-line no-console\n console[level]('LoggerService:', arg);\n return;\n }\n\n const getLogInfo = () => {\n if (level === 'error') {\n return parseError(arg);\n }\n\n return arg;\n };\n\n const body = this.#prepareBody(level, getLogInfo());\n LoggerService.#send(body);\n }\n\n static #send(body: unknown) {\n const headers = {\n type: 'application/json',\n };\n const blob = new Blob([JSON.stringify(body)], headers);\n navigator.sendBeacon(env.LOG_URL, blob);\n }\n\n static #now() {\n return `${Date.now() * 1_000_000}`;\n }\n}\n","import type { OrgFeaturesList } from '../types';\n\ntype OrgModule = { id: string; label: string };\n\nexport class OrgModel {\n features?: OrgFeaturesList[];\n\n modules?: OrgModule[];\n}\n","import { BaseRepository } from '../../base';\nimport type { OrgModel } from './models/Org.model';\n\nexport class OrgRepository extends BaseRepository {\n constructor() {\n super('/org');\n }\n\n get() {\n return this.httpClient.get('/').then(({ data }) => data);\n }\n}\n","import { injectable } from 'inversify';\nimport { OrgRepository } from './Org.repository';\n\n@injectable()\nexport class OrgService {\n protected orgRepo = new OrgRepository();\n\n get() {\n return this.orgRepo.get();\n }\n}\n","export enum OrgFeaturesList {\n keystone = 'keystone',\n}\n\nexport enum ThirdPartyVendors {\n keystone = 'keystone',\n}\n","import { injectable } from 'inversify';\nimport { env } from '../utils';\n\ntype FeatureFlags = 'logger' | T;\n\n@injectable()\nexport class FeatureFlagsService {\n #flags: Set>;\n\n constructor() {\n const featureFlags = env.FEATURE_FLAGS;\n this.#flags = new Set>(featureFlags.split(',') as FeatureFlags[]);\n }\n\n has(name: FeatureFlags) {\n return this.#flags.has(name);\n }\n}\n"],"names":["RoleModel","UserModel","UsersRepository","BaseRepository","constructor","super","getAll","config","data","this","httpClient","get","getUserInfo","getRoles","then","updateUserRoles","id","roles","put","updateManyUsersRoles","usersForUpdate","post","skipRoles","skipValues","filter","role","includes","name","UsersService","usersRepo","getRolesByRole","getAdminResourceRoles","getMemberResourceRoles","getGuestResourceRoles","getAdminInstanceRoles","login","fusionAuthRedirect","URL_LIST","auth","logout","window","location","origin","MyUserViewModel","atLeastAdmin","some","r","atLeastMember","atLeastGuest","IssueModel","IssuesRepository","getByType","typeName","update","model","_id","_rev","headers","JSON","parse","etag","create","ok","getChanges","since","options","params","IssuesService","issuesRepo","getIssue","issue","CommentModel","CommentsRepository","CommentsService","commentsRepo","getComment","comment","LoggerService","appName","setUser","user","log","args","error","info","warn","level","logInfo","os","getOS","browser","getBrowser","streams","stream","job","app","host","hostname","url","href","values","stringify","arg","env","LOG_URL","console","body","Error","message","stack","toString","blob","Blob","type","navigator","sendBeacon","Date","now","OrgModel","OrgRepository","OrgService","orgRepo","OrgFeaturesList","ThirdPartyVendors","injectable","FeatureFlagsService","featureFlags","FEATURE_FLAGS","Set","split","has"],"sourceRoot":""}