@chatman-media/conversation-engine 1.2.0 → 1.3.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.
@@ -0,0 +1,90 @@
1
+ /**
2
+ * AdminInformer — единый «информер» владельца тенанта. В него сливаются оба
3
+ * существующих продюсера событий (OpsAlertRouter и NotificationService), а
4
+ * решение о доставке принимается по настройкам владельца:
5
+ *
6
+ * - подписки по темам (informer_topics): тема выключена → событие отброшено;
7
+ * - порог важности (informer_level): silent | critical | important | all;
8
+ * - мут (informer_muted_until): гасит реалтайм, но событие копится в дайджест.
9
+ *
10
+ * Доставка:
11
+ * - событие проходит порог и не в муте → реалтайм-пуш в личный Telegram
12
+ * владельца (тот же operator-бот) + email-гарантия для critical;
13
+ * - иначе → строка остаётся в ленте admin_notifications с delivered_at=NULL,
14
+ * откуда её заберёт informer-digest-sweep (apps/worker).
15
+ *
16
+ * Лента (admin_notifications) пишется на КАЖДОЕ принятое событие — это и
17
+ * источник дайджеста, и scrollback для бот-команды «/last», и persisted-дедуп
18
+ * (переживает рестарт процесса, в отличие от in-memory cooldown).
19
+ *
20
+ * Адресат — superadmin тенанта (владелец). Операторы продолжают получать свои
21
+ * уведомления через NotificationService (правила/группы) — informer их не
22
+ * трогает; per-operator-рассылка владельцу отключается на стороне notify(),
23
+ * чтобы не было дублей.
24
+ *
25
+ * Зависимости (TelegramClient, email) инжектятся — пакет без app-зависимостей.
26
+ */
27
+ import { type OperatorSettings } from "./dal/notifications.ts";
28
+ import type { Db } from "./dal/types.ts";
29
+ import type { NotificationEvent } from "./notifications.ts";
30
+ import type { OpsAlert, OpsEmailSender, OpsTelegramSender } from "./ops-alerts.ts";
31
+ export type InformerTopic = "leads" | "escalation" | "orders" | "system";
32
+ export type InformerSeverity = "critical" | "important" | "info";
33
+ export type InformerLevel = "silent" | "critical" | "important" | "all";
34
+ export declare const INFORMER_TOPICS: readonly InformerTopic[];
35
+ export interface InformerEvent {
36
+ tenantId: number;
37
+ topic: InformerTopic;
38
+ severity: InformerSeverity;
39
+ /** Исходный тип события (order_stuck, stage_changed, ...). */
40
+ kind: string;
41
+ title: string;
42
+ detail: string;
43
+ /** Уникален для конкретного условия — основа persisted-дедупа. */
44
+ dedupKey: string;
45
+ /** Глубокая ссылка (например <appUrl>/leads/123) — добавляется ссылкой в сообщение. */
46
+ url?: string;
47
+ }
48
+ export declare function passesThreshold(severity: InformerSeverity, level: InformerLevel): boolean;
49
+ export declare function isMuted(settings: OperatorSettings | undefined, nowEpoch: number): boolean;
50
+ /** Тема включена, если карты нет (NULL = все включены) или ключ != false. */
51
+ export declare function topicEnabled(settings: OperatorSettings | undefined, topic: InformerTopic): boolean;
52
+ export declare function opsAlertToInformer(alert: OpsAlert): InformerEvent;
53
+ /** null — если тип события не предназначен для владельца-информера. */
54
+ export declare function notificationEventToInformer(event: NotificationEvent, appUrl?: string): InformerEvent | null;
55
+ export interface AdminInformerDeps {
56
+ db: Db;
57
+ /** Токен operator-бота (PLATFORM_OPERATOR_BOT_TOKEN). Пусто → Telegram отключён. */
58
+ botToken: string;
59
+ appUrl: string;
60
+ /** Отправитель email (для critical-гарантии). null → email-канал отключён. */
61
+ email?: OpsEmailSender | null;
62
+ /** Override отправителя Telegram (для тестов). По умолчанию строится из botToken. */
63
+ telegram?: OpsTelegramSender | null;
64
+ /** Анти-шторм: не повторять (tenant, dedupKey) чаще, сек. Default 1800 (30 мин). */
65
+ cooldownSec?: number;
66
+ log?: {
67
+ warn?: (msg: string, ctx?: unknown) => void;
68
+ info?: (msg: string, ctx?: unknown) => void;
69
+ };
70
+ }
71
+ export declare class AdminInformer {
72
+ private readonly deps;
73
+ private readonly telegram;
74
+ private readonly cooldownSec;
75
+ /** Не-tenant-bound репо для пост-транзакционных апдейтов ленты (таблица без RLS). */
76
+ private readonly repo;
77
+ constructor(deps: AdminInformerDeps);
78
+ /**
79
+ * adminId владельца (superadmin) тенанта — чтобы NotificationService мог
80
+ * пропустить его в per-operator-рассылке (владельца обслуживает информер).
81
+ */
82
+ resolveOwnerAdminId(tenantId: number): Promise<number | null>;
83
+ /** Удобные входы для существующих продюсеров. */
84
+ emitOpsAlert(alert: OpsAlert): Promise<void>;
85
+ emitNotificationEvent(event: NotificationEvent): Promise<void>;
86
+ emit(event: InformerEvent): Promise<void>;
87
+ private renderHtml;
88
+ private renderEmailHtml;
89
+ }
90
+ //# sourceMappingURL=admin-informer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-informer.d.ts","sourceRoot":"","sources":["../src/admin-informer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=admin-informer.integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-informer.integration.test.d.ts","sourceRoot":"","sources":["../src/admin-informer.integration.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=admin-informer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-informer.test.d.ts","sourceRoot":"","sources":["../src/admin-informer.test.ts"],"names":[],"mappings":""}
@@ -9,6 +9,6 @@ export { MessagesRepo, type MessageRow } from "./messages.ts";
9
9
  export { OutboundQueueRepo, type OutboundQueueRow } from "./outbound.ts";
10
10
  export { type SkillAggregateRow, type SkillOutcomeRow, SkillOutcomesRepo, } from "./skill-outcomes.ts";
11
11
  export { StylesRepo, type StyleRow } from "./styles.ts";
12
- export { NotificationsRepo, type NotificationRule, type OperatorSettings } from "./notifications.ts";
12
+ export { type AdminNotificationRow, type InformerPrefs, type NewAdminNotification, NotificationsRepo, type NotificationRule, type OperatorSettings, type OwnerSettings, } from "./notifications.ts";
13
13
  export type { Db, RepoCtx } from "./types.ts";
14
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACL,KAAK,yBAAyB,EAC9B,eAAe,EACf,KAAK,aAAa,EAClB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACrG,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACL,KAAK,yBAAyB,EAC9B,eAAe,EACf,KAAK,aAAa,EAClB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,iBAAiB,EACjB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACnB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC"}
@@ -1,8 +1,18 @@
1
1
  import type { PostgresJsDatabase } from "drizzle-orm/postgres-js";
2
- import { type notificationRules as nrTable, type operatorSettings as osTable, type notificationTemplates as ntTable } from "@chatman-media/storage";
2
+ import { type adminNotifications as anTable, type notificationRules as nrTable, type operatorSettings as osTable, type notificationTemplates as ntTable } from "@chatman-media/storage";
3
3
  export type NotificationRule = typeof nrTable.$inferSelect;
4
4
  export type OperatorSettings = typeof osTable.$inferSelect;
5
5
  export type NotificationTemplate = typeof ntTable.$inferSelect;
6
+ export type AdminNotificationRow = typeof anTable.$inferSelect;
7
+ export type NewAdminNotification = typeof anTable.$inferInsert;
8
+ /** Частичный апдейт informer-настроек владельца (см. миграцию 0032). */
9
+ export type InformerPrefs = Partial<Pick<OperatorSettings, "informerLevel" | "informerTopics" | "informerDigest" | "informerDigestHour" | "informerTz" | "informerMutedUntil" | "informerLastDigestAt">>;
10
+ /** Владелец тенанта (superadmin) + его operator_settings. */
11
+ export interface OwnerSettings {
12
+ adminId: number;
13
+ email: string;
14
+ settings: OperatorSettings | undefined;
15
+ }
6
16
  export declare class NotificationsRepo {
7
17
  private readonly db;
8
18
  constructor(db: PostgresJsDatabase);
@@ -28,5 +38,33 @@ export declare class NotificationsRepo {
28
38
  eventType: string;
29
39
  } | undefined>;
30
40
  deleteGroupLinkToken(token: string): Promise<void>;
41
+ /**
42
+ * Владелец тенанта (superadmin) + его operator_settings. admins под RLS —
43
+ * звать ВНУТРИ withTenant(tenantId), иначе вернёт 0 строк.
44
+ */
45
+ resolveOwnerSettings(tenantId: number): Promise<OwnerSettings | null>;
46
+ /** Резолв operator_settings по личному Telegram chat_id (для бот-команд). */
47
+ findOperatorSettingsByChatId(chatId: string): Promise<OperatorSettings | undefined>;
48
+ /**
49
+ * Частичное обновление informer-настроек владельца по adminId. С tenantId —
50
+ * upsert (создаёт строку, если её ещё нет — путь из UI до привязки Telegram);
51
+ * без tenantId — plain update (путь из бота, где строка уже есть).
52
+ */
53
+ updateInformerPrefs(adminId: number, prefs: InformerPrefs, tenantId?: number): Promise<void>;
54
+ /** Пишет строку ленты, возвращает id. */
55
+ insertAdminNotification(row: NewAdminNotification): Promise<number>;
56
+ /** Помечает строку доставленной в реалтайме (исключает из дайджеста). */
57
+ markNotificationDelivered(id: number, deliveredAt: number): Promise<void>;
58
+ /**
59
+ * Последняя строка по (tenant, dedupKey) не старше sinceEpoch — persisted-дедуп
60
+ * (переживает рестарт процесса, в отличие от in-memory cooldown).
61
+ */
62
+ findRecentByDedup(tenantId: number, dedupKey: string, sinceEpoch: number): Promise<AdminNotificationRow | undefined>;
63
+ /** Последние N уведомлений владельца — для «/last». */
64
+ listRecentNotifications(tenantId: number, adminId: number, limit?: number): Promise<AdminNotificationRow[]>;
65
+ /** Очередь дайджеста: принято, в реалтайм не доставлено, ещё не сведено. */
66
+ listPendingDigest(tenantId: number, adminId: number): Promise<AdminNotificationRow[]>;
67
+ /** Помечает строки вошедшими в батч дайджеста. */
68
+ markDigested(ids: number[], batchId: number): Promise<void>;
31
69
  }
32
70
  //# sourceMappingURL=notifications.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../src/dal/notifications.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAuF,KAAK,iBAAiB,IAAI,OAAO,EAAE,KAAK,gBAAgB,IAAI,OAAO,EAAE,KAAK,qBAAqB,IAAI,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEzO,MAAM,MAAM,gBAAgB,GAAG,OAAO,OAAO,CAAC,YAAY,CAAC;AAC3D,MAAM,MAAM,gBAAgB,GAAG,OAAO,OAAO,CAAC,YAAY,CAAC;AAC3D,MAAM,MAAM,oBAAoB,GAAG,OAAO,OAAO,CAAC,YAAY,CAAC;AAE/D,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,kBAAkB;IAE7C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAalF,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAS5E,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAerE,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBrE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYhE,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAO3E,qBAAqB,CACzB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,sBAAsB,CAAC,CAAC,GACjF,OAAO,CAAC,IAAI,CAAC;IAWV,sBAAsB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAc3F,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IASrG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAOxD,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvD,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IASvF,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,oBAAoB,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAalF,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAOhE,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7D,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAc7F,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IAUhH,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGzD"}
1
+ {"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../src/dal/notifications.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  export { resolveContact } from "./contact-resolver.ts";
2
2
  export { resolveConversation } from "./conversation-resolver.ts";
3
- export { ChannelIdentitiesRepo, type ChannelIdentityRow, ContactsRepo, type ContactRow, ConversationsRepo, type ConversationRow, type Db, DrizzleKbStore, KbSuggestionsRepo, type ExperimentAllocationEntry, ExperimentsRepo, type ExperimentRow, LeadsRepo, type LeadRow, MessagesRepo, type MessageRow, OutboundQueueRepo, type OutboundQueueRow, parseAllocation, type RepoCtx, type SkillAggregateRow, type SkillOutcomeRow, SkillOutcomesRepo, StylesRepo, type StyleRow, NotificationsRepo, type NotificationRule, type OperatorSettings, } from "./dal/index.ts";
3
+ export { ChannelIdentitiesRepo, type ChannelIdentityRow, ContactsRepo, type ContactRow, ConversationsRepo, type ConversationRow, type Db, DrizzleKbStore, KbSuggestionsRepo, type ExperimentAllocationEntry, ExperimentsRepo, type ExperimentRow, LeadsRepo, type LeadRow, MessagesRepo, type MessageRow, OutboundQueueRepo, type OutboundQueueRow, parseAllocation, type RepoCtx, type SkillAggregateRow, type SkillOutcomeRow, SkillOutcomesRepo, StylesRepo, type StyleRow, type AdminNotificationRow, type InformerPrefs, type NewAdminNotification, NotificationsRepo, type NotificationRule, type OperatorSettings, type OwnerSettings, } from "./dal/index.ts";
4
4
  export { NotificationService, type NotificationEvent } from "./notifications.ts";
5
+ export { type OpsAlert, type OpsAlertKind, type OpsAlertRouterDeps, type OpsAlertSink, type OpsEmailSender, OpsAlertRouter, type OpsSeverity, type OwnerContacts, renderOpsEmailHtml, ResendEmailSender, resolveOwnerContacts, } from "./ops-alerts.ts";
6
+ export { AdminInformer, type AdminInformerDeps, type InformerEvent, type InformerLevel, type InformerSeverity, type InformerTopic, INFORMER_TOPICS, isMuted, notificationEventToInformer, opsAlertToInformer, passesThreshold, topicEnabled, } from "./admin-informer.ts";
5
7
  export { OperatorBotHandler } from "./operator-bot-handler.ts";
6
8
  export { allowedTransitions, FunnelTransitionError, getInitialStage, isTerminal, validateTransition, } from "./funnel-machine.ts";
7
9
  export { ensureLead, type LeadHookContext, transitionLeadState, } from "./lead-lifecycle.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EACL,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,YAAY,EACZ,KAAK,UAAU,EACf,iBAAiB,EACjB,KAAK,eAAe,EACpB,KAAK,EAAE,EACP,cAAc,EACd,iBAAiB,EACjB,KAAK,yBAAyB,EAC9B,eAAe,EACf,KAAK,aAAa,EAClB,SAAS,EACT,KAAK,OAAO,EACZ,YAAY,EACZ,KAAK,UAAU,EACf,iBAAiB,EACjB,KAAK,gBAAgB,EACrB,eAAe,EACf,KAAK,OAAO,EACZ,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,iBAAiB,EACjB,UAAU,EACV,KAAK,QAAQ,EACb,iBAAiB,EACjB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAK/D,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,UAAU,EACV,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EACL,kBAAkB,EAClB,KAAK,eAAe,EACpB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EAAE,oBAAoB,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EACL,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,uBAAuB,EACvB,KAAK,2BAA2B,EAChC,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EACL,cAAc,EACd,KAAK,kBAAkB,EACvB,KAAK,aAAa,GACnB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EACL,gBAAgB,EAChB,KAAK,oBAAoB,EACzB,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,oBAAoB,GAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,KAAK,EACV,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,WAAW,EACX,KAAK,aAAa,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}