// // Copyright © 2020, 2021 Anticrm Platform Contributors. // Copyright © 2021, 2022, 2023 Hardcore Engineering Inc. // // Licensed under the Eclipse Public License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. You may // obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // // See the License for the specific language governing permissions and // limitations under the License. // import { Employee, Person, PersonSpace } from '@hcengineering/contact' import { PersonId, Class, Doc, Mixin, Ref, Tx, TxCUD, AccountUuid } from '@hcengineering/core' import { NotificationContent, NotificationType } from '@hcengineering/notification' import { Metadata, Plugin, Resource, plugin } from '@hcengineering/platform' import type { TriggerControl, TriggerFunc } from '@hcengineering/server-core' /** * @public */ export const serverNotificationId = 'server-notification' as Plugin export { DOMAIN_USER_NOTIFY, DOMAIN_NOTIFICATION, DOMAIN_DOC_NOTIFY } from '@hcengineering/notification' /** * @public */ export type Presenter = (doc: T, control: TriggerControl) => Promise /** * @public */ export interface HTMLPresenter extends Class { presenter: Resource> } /** * @public */ export interface TextPresenter extends Class { presenter: Resource> } /** * @public */ export type TypeMatchFunc = Resource< ( tx: Tx, doc: Doc, person: Ref, socialIds: PersonId[], type: NotificationType, control: TriggerControl, account: AccountUuid ) => boolean | Promise > /** * @public */ export interface TypeMatch extends NotificationType { func: TypeMatchFunc } /** * @public */ export type NotificationContentProvider = ( doc: Doc, tx: TxCUD, person: Ref, control: TriggerControl ) => Promise /** * @public */ export interface NotificationPresenter extends Class { presenter: Resource } export interface ReceiverInfo { account: AccountUuid employee: Ref socialIds: PersonId[] space: Ref } export interface SenderInfo { socialId: PersonId person?: Person } export const NOTIFICATION_BODY_SIZE = 50 export const PUSH_NOTIFICATION_TITLE_SIZE = 80 /** * @public */ export default plugin(serverNotificationId, { metadata: { MailUrl: '' as Metadata, MailAuthToken: '' as Metadata, WebPushUrl: '' as Metadata, InboxOnlyNotifications: '' as Metadata }, mixin: { HTMLPresenter: '' as Ref>, TextPresenter: '' as Ref>, TypeMatch: '' as Ref>, NotificationPresenter: '' as Ref> }, trigger: { OnAttributeCreate: '' as Resource, OnAttributeUpdate: '' as Resource, OnReactionChanged: '' as Resource, OnDocRemove: '' as Resource, OnEmployeeDeactivate: '' as Resource, PushNotificationsHandler: '' as Resource }, function: { IsUserEmployeeInFieldValueTypeMatch: '' as TypeMatchFunc, MentionTypeMatch: '' as TypeMatchFunc } })