WIP message-delivery-method-web-push
Main daploy / deploy (push) Successful in 1m22s

This commit is contained in:
2024-11-27 15:57:11 +02:00
parent 056247a414
commit 1c8019d41a
48 changed files with 464 additions and 128 deletions
+1
View File
@@ -0,0 +1 @@
dist
@@ -0,0 +1,16 @@
/**
* Базовый интерфейс для всех документов в базе данных.
* Содержит общие поля, такие как идентификатор, тип и дату создания.
*/
export interface BaseDocument {
/** Уникальный идентификатор документа */
_id: string
_rev?: string
/** Тип документа */
type: string
/** Дата создания документа в формате ISO */
created_at: string
}
@@ -0,0 +1,36 @@
import { type BaseDocument } from './BaseDocument'
/**
* Интерфейс для документа сообщения.
* Используется для хранения сообщений, отправленных через QR‑код, с поддержкой вложений.
*/
export interface MessageDocument extends BaseDocument {
/** Тип документа, всегда 'message' */
type: 'message'
/** Идентификатор QR‑кода, к которому относится сообщение */
qr_code_uri: string
/** Идентификатор чата для связывания сообщений */
chat: string
/** Отправитель сообщения ('guest' или 'owner') */
from: 'guest' | 'owner'
/** Содержимое сообщения */
body: string
/** Опциональная геопозиция (широта и долгота) */
location?: { lat: number; lng: number }
/** Идентификатор пользователя, отправившего сообщение */
user_uuid: string
/** Идентификатор браузера, отправившего сообщение */
browser_uuid: string
/** Вложения, такие как фото */
// _attachments?: {
// [key: string]: Attachment
// }
}
@@ -0,0 +1,16 @@
import type { BaseDocument } from "./BaseDocument";
export interface PublicSettingsDocument extends BaseDocument {
_id: string; // Формат: "public_settings:<name>"
type: "public_settings";
/**
* Название настройки
*/
name: string;
/**
* Значение настройки
*/
value: string;
}
@@ -0,0 +1,44 @@
import type { BaseDocument } from './BaseDocument'
export type ContactInfo = {
name?: string
phone?: string
email?: string
}
/**
* Интерфейс для документа QR‑кода.
* Представляет QR‑код, созданный пользователем, и информацию о привязанном объекте.
*/
export interface QRCodeDocument extends BaseDocument {
/** Тип документа, всегда 'qr_code' */
type: 'qr_code'
/** Уникальный URL для настройки и взаимодействия */
uri: string
/** Ссылка на QR‑код */
url: string
/** Идентификатор пользователя, который создал QR‑код */
user_uuid: string
/** Идентификатор браузера, через который был создан QR-код */
browser_uuid: string
/** Название объекта, для которого создан QR‑код, например "Мой автомобиль" */
name: string
messageDeliveryMethod: 'telegram' | 'webPush'
/** Тип объекта, для которого создан QR‑код, например "car" */
placement: 'car' | 'pet' | 'door' | 'store' | 'restaurant_table' | 'other'
/** Доступные действия для гостей (например, ["send_message"]) */
actions: string[]
/** Предустановленное сообщение для гостей */
predefinedMessages?: string[]
contactInfo?: ContactInfo
}
@@ -0,0 +1,24 @@
import type { BaseDocument } from "./BaseDocument";
type MessageDeliveryMethodWebPushVapid = {
name: "message_delivery_method_web_push_vapid";
value: {
subject: string;
keys: {
publicKey: string;
privateKey: string;
};
};
};
type MessageDeliveryMethodWebPushGcmApiKey = {
name: "message_delivery_method_web_push_gcm_api_key";
value: string;
};
export type ServerSettingsDocument = (
| MessageDeliveryMethodWebPushVapid
| MessageDeliveryMethodWebPushGcmApiKey
) & {
_id: string; // Формат: "server_settings:<name>"
type: "server_settings";
} & BaseDocument;
@@ -0,0 +1,25 @@
import type { BaseDocument } from './BaseDocument'
/**
* Интерфейс для документа пользователя.
* Содержит данные, такие как имя пользователя, уникальный UUID, email и роли.
*/
export interface UserDocument extends BaseDocument {
/** Тип документа, всегда 'user' */
type: 'user'
/** Имя пользователя */
name: string
/** Уникальный UUID пользователя, не связанный с _id */
user_uuid: string
/** Email пользователя */
email: string
/** Роли пользователя (например, ['admin', 'user']) */
roles: string[]
/** Пароль пользователя (должен храниться в зашифрованном виде) */
password: string
}
@@ -0,0 +1,11 @@
import type { BaseDocument } from "./BaseDocument";
export interface WebPushSubscriptionDocument extends BaseDocument {
_id: string; // Формат: "web_push_subscription:<user_uuid>:<browser_uuid>"
type: "web_push_subscription";
user_uuid: string; // UUID пользователя, связанного с подпиской
browser_uuid: string; // UUID браузера, связанного с подпиской
subscription: PushSubscriptionJSON;
created_at: string; // Дата создания подписки в ISO формате
updated_at?: string; // Дата последнего обновления подписки
}
+7
View File
@@ -0,0 +1,7 @@
export * from "./BaseDocument";
export * from "./MessageDocument";
export * from "./PublicSettingsDocument";
export * from "./QRCodeDocument";
export * from "./ServerSettingsDocument";
export * from "./UserDocument";
export * from "./WebPushSubscriptionDocument";
+1
View File
@@ -0,0 +1 @@
export * from "./DBDocuments";
+10
View File
@@ -0,0 +1,10 @@
{
"name": "@hereconnect/types",
"version": "1.0.0",
"main": "index.ts",
"types": "index.ts",
"private": true,
"scripts": {
"build": "tsc"
}
}
+9
View File
@@ -0,0 +1,9 @@
{
"compilerOptions": {
"declaration": true,
"emitDeclarationOnly": true,
"outDir": "./dist",
"strict": true
},
"include": ["index.ts"]
}