@expressms/smartapp-sdk 1.4.2-alpha.1 → 1.5.0-alpha.3

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/README.md CHANGED
@@ -1,653 +1,3 @@
1
1
  # SmartApp SDK
2
2
 
3
- __Библиотека предлагает__:
4
-
5
- __Методы SmartApp Bridge__
6
-
7
- - Отправка ивента клиенту:
8
-
9
- ```
10
- bridge?.sendClientEvent({
11
- method: string,
12
- params: object,
13
- timeout?: number
14
- })
15
- ```
16
-
17
- - Отправка ивента боту:
18
-
19
- ```
20
- bridge?.sendBotEvent({
21
- method: string,
22
- params: object,
23
- timeout?: number
24
- })
25
- ```
26
-
27
- - `bridge?.onReceive(callback: Function)` - передать клиенту коллбэк для выполнения при получении входящих ивентов;
28
-
29
- - `bridge?.enableLogs()` - включить сбор логов SmartApp (выключено по умолчанию);
30
-
31
- - `bridge?.disableLogs()` - выключить сбор логов SmartApp (выключено по умолчанию);
32
-
33
- - `bridge?.disableRenameParams()` – выключить переименование полей ивентов SmartApp из `camelCase` в `snake_case` при отправке
34
- ивента боту или клиенту, и наоборот, при получении (включено по умолчанию);
35
-
36
- - `bridge?.enableRenameParams()` – включить переименование полей ивентов SmartApp из `camelCase` в `snake_case` при отправке
37
- ивента боту или клиенту, и наоборот, при получении (включено по умолчанию);
38
-
39
- __Реализации клиентских методов SmartApp Bridge__
40
-
41
- - `ready({ timeout?: number })` - отправить клиенту команду `ready`;
42
-
43
- - `routingChanged(isRoot: boolean)` - отправить клиенту команду `routing_changed`;
44
-
45
- - `onBackPressed(handleBackPressed: Function)` - передать клиенту коллбэк для выполнения при получении команды `back_pressed`;
46
-
47
- - `onMoveToRoot(handleMoveToRoot: Function)` - передать клиенту коллбэк для выполнения при получении команды `move_to_root`;
48
-
49
- - `addContact({ phone: string, name: string })` - скачать `.csv` файл контакта;
50
-
51
- - `getContact({ phone: string })` – получить контакт по номеру телефона;
52
-
53
- - `createPersonalChat({ huid: string })` - создать чат с юзером или открыть существующий;
54
-
55
- - `onNotification(handleNotification: Function)` - передать клиенту коллбэк для выполнения при получении ивента с `type === "notification"`;
56
-
57
- - ```
58
- sendMessage({
59
- userHuid: string | null,
60
- groupChatId: string | null,
61
- messageBody: string,
62
- messageMeta? : Object
63
- })
64
- ```
65
-
66
- отправить сообщение юзеру, боту или в групповой чат;
67
-
68
- - ```
69
- openSmartApp({
70
- appId: string,
71
- meta?: any,
72
- })
73
- ```
74
-
75
- открыть смартапп;
76
-
77
- - ```
78
- closeSmartApp()
79
- ```
80
-
81
- закрыть текущий смартапп;
82
-
83
- - `exitSmartAppToCatalog()` - выйти из смартапп на каталог;
84
-
85
- - `useQuery()` - получить параметры `url` SmartApp;
86
-
87
- - `openClientSettings()` - открыть настройки профиля пользователя Express;
88
-
89
- - `getChats({ filter: string | null })` - запросить чаты;
90
-
91
- - `requestLocation()` - запросить геолокацию;
92
-
93
- - `searchCorporatePhonebook({ filter: string | null })` - запросить результаты поиска по корпоративной phonebook и результат трастового поиска ;
94
-
95
- __Метод onReceive__
96
-
97
- ```
98
- import { EventChannel, eventChannel } from "redux-saga"
99
-
100
- function subscribeClientEvents(): EventChannel<any> {
101
- return eventChannel(emit => {
102
- bridge?.onReceive((event) => emit(event as any))
103
- return () => {}
104
- })
105
- }
106
- ```
107
-
108
- __Метод routingChanged__
109
-
110
- ```
111
- function routerChangedSaga(action: any) {
112
- const isRoot = action.payload.location.pathname === "/"
113
-
114
- routingChanged(isRoot)
115
- }
116
- ```
117
-
118
- __Метод onBackPressed__
119
-
120
- ```
121
- function handleClientBackPressedEvent() {
122
- history.goBack()
123
- }
124
-
125
- function* watchClientEvents() {
126
- yield onBackPressed(handleClientBackPressedEvent)
127
- }
128
- ```
129
-
130
- __Метод onMoveToRoot__
131
-
132
- ```
133
- function handleMoveToRoot() {
134
- history.push('/') - home page
135
- }
136
-
137
- function* watchClientEvents() {
138
- yield onMoveToRoot(handleMoveToRoot)
139
- }
140
- ```
141
-
142
- __Редирект в другой смартапп__
143
-
144
- ```
145
- bridge?.sendClientEvent({
146
- method: "open_smart_app",
147
- params: {
148
- appId: string // уникальный идентификатор SmartApp e.g. "017aade3-0f2d-5274-93f2-79607f564dc6",
149
- }
150
- })
151
- ```
152
-
153
- __Редирект в другой смартапп, передача поля `meta`__
154
-
155
- ```
156
- openSmartApp({
157
- appId: string // уникальный идентификатор SmartApp e.g. "017aade3-0f2d-5274-93f2-79607f564dc6",
158
- meta: Object, // "meta" может содержать любую информацию
159
- })
160
- ```
161
-
162
- __Редирект в другой смартапп и передача информации в поле `meta`__
163
-
164
- SmartApp 1 отправляет клиенту ивент:
165
-
166
- ```
167
- openSmartApp({
168
- appId: "017aade3-0f2d-5274-93f2-79607f564dc6",
169
- meta: {
170
- route: "/route-in-feature-smartapp"
171
- }
172
- })
173
- ```
174
-
175
- Клиент получает ивент, сохраняет значение поля `meta`.
176
-
177
- Клиент открывает SmartApp 2 с `appId === "017aade3-0f2d-5274-93f2-79607f564dc6"`.
178
-
179
- SmartApp 2 шлет ивент `ready`:
180
-
181
- `const response = yield ready()`
182
-
183
- В ответе на `ready` SmartApp 2 проверяет наличие поля `openSmartAppMeta`:
184
-
185
- ```
186
- if (response?.payload?.openSmartAppMeta) {
187
- const meta = response?.payload?.openSmartAppMeta
188
- history.push(`${openSmartAppMeta?.route}`)
189
- }
190
- ```
191
-
192
- SmartApp 2 выполняет необходимые действия с `meta`, которую SmartApp 1 отправляет клиенту, а клиент возвращает в ответе на
193
- ивент `ready` SmartApp 2.
194
-
195
- __Получение параметров `url` SmartApp__
196
-
197
- `const urlParams = useQuery()`
198
-
199
- Метод возвращает объект типа:
200
-
201
- ```
202
- {
203
- platform: "web" | "ios" | "android",
204
- theme: "default" | "dark"
205
- }
206
- ```
207
-
208
- __Открытие настроек профиля__
209
-
210
- `openClientSettings()`
211
-
212
- Метод отправляет клиенту запрос типа:
213
-
214
- ```
215
- {
216
- "ref": <string>,
217
- "handler": "express",
218
- "type": "open_client_settings",
219
- "payload": {},
220
- "files": []
221
- }
222
- ```
223
-
224
- Ответа от клиента не приходит. Происходит открытие Настроек профиля пользователя Express.
225
-
226
- __Запрос чатов__
227
-
228
- `const response = yield getChats({ filter }: { filter: string | null })`
229
-
230
- Метод отправляет клиенту запрос типа:
231
-
232
- ```
233
- {
234
- "ref": <string>,
235
- "handler": "express",
236
- "type": "get_chats",
237
- "payload": {
238
- "filter": <string|null>,
239
- },
240
- "files": []
241
- }
242
- ```
243
-
244
- И получает ответ типа:
245
-
246
- ```
247
- {
248
- "ref": <string>,
249
- "status": "success",
250
- "data": {
251
- "chats": [
252
- {
253
- "group_chat_id": <uuid>,
254
- "name": <string>,
255
- "avatar": <string|null>,
256
- "members_type": "cts|rts|hybrid",
257
- "is_trusted": <bool>,
258
- "chat_type": "chat|group_chat|botx|channel",
259
- },
260
- ],
261
- }
262
- }
263
- ```
264
-
265
- __Запрос геолокации__
266
-
267
- `const response = yield requestLocation()`
268
-
269
- Метод отправляет клиенту запрос типа:
270
-
271
- ```
272
- {
273
- "ref": <string>,
274
- "handler": "express",
275
- "type": "request_location",
276
- "payload": {},
277
- "files": []
278
- }
279
- ```
280
-
281
- И получает ответ типа:
282
-
283
- ```
284
- {
285
- "ref": <string>,
286
- "status": "success",
287
- "data": {
288
- "latitude": <string|null>,
289
- "longitude": <string|null>,
290
- "timestamp": <"YYYY-MM-DDThh:mm:ss.fZZZZZ"|null>,
291
- }
292
- }
293
- ```
294
-
295
- Ответ клиента в случае ошибки:
296
-
297
- ```
298
- {
299
- "ref": <string>,
300
- "status": "error",
301
- "error_code": "permission_denied" | "location_undefined"
302
- }
303
- ```
304
-
305
- Статус error_code отправляется в следующих случаях:
306
-
307
- ```
308
- 1. Ошибка разрешения на получение геолокации, error_code = "permission_denied"
309
- 2. Ошибка получения данных геолокации, error_code = "location_undefined"
310
- ```
311
-
312
- __Запрос результатов поиска по корпоративной phonebook и результат трастового поиска__
313
-
314
- `const response = yield searchCorporatePhonebook({ filter }: { filter: string | null })`
315
-
316
- Метод отправляет клиенту запрос типа:
317
-
318
- ```
319
- {
320
- "ref": <string>,
321
- "handler": "express",
322
- "type": "search_corporate_phonebook",
323
- "payload": {
324
- "filter": <string|null>,
325
- },
326
- "files": []
327
- }
328
- ```
329
-
330
- И получает ответ типа:
331
-
332
- ```
333
- {
334
- "ref": <string>,
335
- "status": "success",
336
- "data": {
337
- "corp_phonebook_entries": [
338
- {
339
- "avatar": <string|null>,
340
- "name": <string>,
341
- "company": <string|null>,
342
- "company_position": <string|null>,
343
- "office": <string|null>,
344
- "department": <string|null>,
345
- "server_name": <string>,
346
- "contacts": [
347
- {
348
- "active": <bool>,
349
- "contact": <string>,
350
- "contact_type": <string>,
351
- "user_huid": <uuid>,
352
- "user_kind": <string>,
353
- }
354
- ],
355
- },
356
- ],
357
- "trust_search_entries": [
358
- {
359
- "avatar": <string|null>,
360
- "name": <string>,
361
- "company": <string|null>,
362
- "company_position": <string|null>,
363
- "office": <string|null>,
364
- "department": <string|null>,
365
- "server_name": <string>,
366
- "contacts": [
367
- {
368
- "active": <bool>,
369
- "contact": <string>,
370
- "contact_type": <string>,
371
- "user_huid": <uuid>,
372
- "user_kind": <string>,
373
- }
374
- ],
375
- },
376
- ],
377
- }
378
- }
379
- ```
380
-
381
- Ответ клиента в случае ошибки:
382
-
383
- ```
384
- {
385
- "ref": <string>,
386
- "status": "error",
387
- "error_code": <string>
388
- }
389
- ```
390
-
391
- Статус error и error_code отправляются в следующих случаях:
392
-
393
- ```
394
- 1. Таймаут одного из REST API, error_code = timeout
395
- 2. Ошибка сервера 4xx, error_code = <reason из ответа сервера>
396
- 3. Запрос менее 3х символов, error_code = filter_too_short
397
- ```
398
-
399
- __Открытие группового чата__
400
-
401
- ```
402
- const response = yield openGroupChat({ groupChatId: <uuid> })
403
- ```
404
-
405
- Метод отправляет клиенту запрос типа:
406
- ```
407
- {
408
- "ref": <string>,
409
- "handler": "express",
410
- "type": "smartapp_rpc",
411
- "method": "open_group_chat",
412
- "payload": {
413
- "group_chat_id": <uuid>,
414
- },
415
- "files": []
416
- }
417
- ```
418
-
419
- И получает ответ типа:
420
-
421
- ```
422
- {
423
- "ref": <string>,
424
- "status": "success|error",
425
- "error_code"?: <string>
426
- }
427
- ```
428
-
429
- __Открытие файла__
430
-
431
- Метод отправляет клиенту запрос типа:
432
-
433
- ```
434
- const response = yield openFile(file: {
435
- "type": <string> | null
436
- "file": <string>
437
- "fileMimeType": <string> | null
438
- "fileName": <string> | null
439
- "filePreview": <string> | null
440
- "filePreviewHeight": <number> | null
441
- "filePreviewWidth": <number> | null
442
- "fileSize": <number>
443
- "fileHash": <string> | null
444
- "fileEncryptionAlgo": <string> | null
445
- "chunkSize": <number> | null
446
- "fileId": <string> | null
447
- "key": {} | null
448
- }
449
- )
450
- ```
451
-
452
- И получает ответ типа:
453
-
454
- ```
455
- {
456
- "ref": <string>,
457
- "status": "success|error",
458
- "error_code"?: <string>
459
- }
460
- ```
461
-
462
- __Отправка скрытой команды боту__
463
-
464
- Команда позволяет только передать боту информацию. Обработка информации должна быть реализована на стороне бота.
465
-
466
- ```
467
- await sendBotCommand({ userHuid, body, data}: {
468
- userHuid: <string>
469
- body: <string>
470
- data: { command: <string> } | null
471
- }
472
- )
473
- ```
474
-
475
- Метод отправляет клиенту ивент типа:
476
-
477
- ```
478
- {
479
- "ref": <string>,
480
- "type": "smartapp_rpc",
481
- "handler": "express",
482
- "payload": {
483
- "userHuid": <string>,
484
- "message": {
485
- "body": "hello",
486
- "data": {
487
- "command": "/test"
488
- }
489
- }
490
- },
491
- "method": "send_bot_command"
492
- }
493
- ```
494
-
495
- В чат с ботом придет значение параметра `{ "body": "hello" }`, бот получит объект `{ "command": "/test" }`.
496
-
497
- __Запрос профиля текущего пользователя__
498
-
499
- ```
500
- const response = yield requestSelfProfile()
501
- ```
502
-
503
- Метод отправляет клиенту запрос типа:
504
- ```
505
- {
506
- "ref": <string>,
507
- "handler": "express",
508
- "type": "smartapp_rpc",
509
- "method": "request_self_profile",
510
- "payload": {},
511
- "files": []
512
- }
513
- ```
514
-
515
- И получает ответ:
516
-
517
- ```
518
- {
519
- "ref": <string>,
520
- "status": "success|error",
521
- "data": {
522
- "userHuid": string,
523
- "name": string,
524
- "avatar": string | null,
525
- "avatarPreview": string | null,
526
- "company": string | null,
527
- "department": string | null,
528
- "office": string | null,
529
- "manager": string | null,
530
- "managerHuid": string | null,
531
- "email": string | null,
532
- "phone": string | null,
533
- "description": string | null,
534
- "otherPhone": string | null,
535
- "ip_phone": string | null,
536
- "otherIpPhone": string | null,
537
- }
538
- }
539
- ```
540
-
541
- __Открытие карточки контакта__
542
-
543
- ```
544
- yield openContactCard({ userHuid: "123e4567-e89b-12d3-a456-426655440000" })
545
- ```
546
-
547
- Метод отправляет клиенту запрос на открытие карточки контакта с указанным huid.
548
-
549
-
550
- __Статус подключения клиента к серверу__
551
-
552
- ```
553
- const response = yield getConnectionStatus()
554
- ```
555
-
556
- Метод отправляет клиенту запрос типа:
557
- ```
558
- {
559
- "ref": <string>,
560
- "handler": "express",
561
- "type": "smartapp_rpc",
562
- "method": "get_connection_status",
563
- "payload": {},
564
- "files": []
565
- }
566
- ```
567
-
568
- И получает ответ:
569
- ```
570
- {
571
- "ref": <string>,
572
- "status": "success|error",
573
- "data": {
574
- "connectionStatus": "connected" | "disconnected",
575
- }
576
- }
577
- ```
578
-
579
- __Создание ссылки (deeplink)__
580
-
581
- ```
582
- const response = yield createDeeplink({
583
- appId: "email-app",
584
- meta: [
585
- {
586
- key: "route",
587
- value: "/send-email",
588
- },
589
- {
590
- key: "email",
591
- value: "test@mail.ru",
592
- },
593
- ]
594
- })
595
- ```
596
-
597
- Метод отправляет клиенту запрос типа:
598
- ```
599
- {
600
- "ref": <string>,
601
- "handler": "express",
602
- "type": "smartapp_rpc",
603
- "method": "create_deeplink",
604
- "payload": {
605
- "app_id": "email-app",
606
- "meta": [
607
- {
608
- "key": "route",
609
- "value": "/send-email",
610
- },
611
- {
612
- "key": "email",
613
- "value": "test@mail.ru",
614
- },
615
- ]
616
- },
617
- "files": []
618
- }
619
- ```
620
-
621
- И получает ответ:
622
- ```
623
- {
624
- "ref": <string>,
625
- "status": "success|error",
626
- "data": {
627
- "deeplink": "https://xlnk.ms/open/smartapp/email-app?route=%2Fsend-email&email=test%40mail.ru",
628
- }
629
- }
630
- ```
631
-
632
- Также можно подписаться на изменение статуса подключения:
633
- ```
634
- yield subscribeClientEvents('connection_status', (event) => {
635
- // TODO: обработать event.data.connectionStatus
636
- })
637
- ```
638
-
639
- Отписаться от изменения статуса подключения:
640
- ```
641
- yield unsubscribeClientEvents('connection_status', functionName)
642
- ```
643
-
644
- __Открытие сообщения в чате__
645
-
646
- ```
647
- yield openChatMessage({
648
- groupChatId: "123e4567-e89b-12d3-a456-426655440000",
649
- syncId: "123e4567-e89b-12d3-a456-426655440000",
650
- })
651
- ```
652
-
653
- Метод отправляет клиенту запрос на открытие сообщения в чате. Если сообщение существует, оно будет подсвечено.
3
+ Методы библиотеки описаны в [руководстве разработчика](https://docs.express.ms/smartapps/developer-guide/smartapp-sdk/).
@@ -1,8 +1,8 @@
1
1
  import Bridge from '@expressms/smartapp-bridge';
2
- import { createDeeplink, getChats, getConnectionStatus, openChatMessage, openClientSettings, openFile, openGroupChat, requestLocation, searchCorporatePhonebook, sendBotCommand, subscribeClientEvents, unsubscribeClientEvents } from './lib/client';
2
+ import { clientStorageClear, clientStorageGet, clientStorageRemove, clientStorageSet, createDeeplink, getChats, getConnectionStatus, openChatMessage, openClientSettings, openFile, openGroupChat, requestLocation, searchCorporatePhonebook, sendBotCommand, subscribeClientEvents, unsubscribeClientEvents } from './lib/client';
3
3
  import { addContact, createPersonalChat, getContact, openContactCard, requestSelfProfile, sendMessage } from './lib/contacts';
4
4
  import { useQuery } from './lib/helpers/helpers';
5
5
  import { ready } from './lib/logging';
6
6
  import { onNotification } from './lib/notification';
7
7
  import { closeSmartApp, exitSmartAppToCatalog, onBackPressed, onMoveToRoot, openSmartApp, routingChanged } from './lib/routing';
8
- export { Bridge, ready, routingChanged, onBackPressed, addContact, getContact, createPersonalChat, onNotification, sendMessage, openSmartApp, openFile, exitSmartAppToCatalog, useQuery, openClientSettings, getChats, searchCorporatePhonebook, sendBotCommand, openGroupChat, onMoveToRoot, requestLocation, openContactCard, requestSelfProfile, closeSmartApp, getConnectionStatus, subscribeClientEvents, unsubscribeClientEvents, createDeeplink, openChatMessage, };
8
+ export { Bridge, ready, routingChanged, onBackPressed, addContact, getContact, createPersonalChat, onNotification, sendMessage, openSmartApp, openFile, exitSmartAppToCatalog, useQuery, openClientSettings, getChats, searchCorporatePhonebook, sendBotCommand, openGroupChat, onMoveToRoot, requestLocation, openContactCard, requestSelfProfile, closeSmartApp, getConnectionStatus, subscribeClientEvents, unsubscribeClientEvents, createDeeplink, openChatMessage, clientStorageGet, clientStorageSet, clientStorageRemove, clientStorageClear, };
@@ -3,10 +3,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.openChatMessage = exports.createDeeplink = exports.unsubscribeClientEvents = exports.subscribeClientEvents = exports.getConnectionStatus = exports.closeSmartApp = exports.requestSelfProfile = exports.openContactCard = exports.requestLocation = exports.onMoveToRoot = exports.openGroupChat = exports.sendBotCommand = exports.searchCorporatePhonebook = exports.getChats = exports.openClientSettings = exports.useQuery = exports.exitSmartAppToCatalog = exports.openFile = exports.openSmartApp = exports.sendMessage = exports.onNotification = exports.createPersonalChat = exports.getContact = exports.addContact = exports.onBackPressed = exports.routingChanged = exports.ready = exports.Bridge = void 0;
6
+ exports.clientStorageClear = exports.clientStorageRemove = exports.clientStorageSet = exports.clientStorageGet = exports.openChatMessage = exports.createDeeplink = exports.unsubscribeClientEvents = exports.subscribeClientEvents = exports.getConnectionStatus = exports.closeSmartApp = exports.requestSelfProfile = exports.openContactCard = exports.requestLocation = exports.onMoveToRoot = exports.openGroupChat = exports.sendBotCommand = exports.searchCorporatePhonebook = exports.getChats = exports.openClientSettings = exports.useQuery = exports.exitSmartAppToCatalog = exports.openFile = exports.openSmartApp = exports.sendMessage = exports.onNotification = exports.createPersonalChat = exports.getContact = exports.addContact = exports.onBackPressed = exports.routingChanged = exports.ready = exports.Bridge = void 0;
7
7
  const smartapp_bridge_1 = __importDefault(require("@expressms/smartapp-bridge"));
8
8
  exports.Bridge = smartapp_bridge_1.default;
9
9
  const client_1 = require("./lib/client");
10
+ Object.defineProperty(exports, "clientStorageClear", { enumerable: true, get: function () { return client_1.clientStorageClear; } });
11
+ Object.defineProperty(exports, "clientStorageGet", { enumerable: true, get: function () { return client_1.clientStorageGet; } });
12
+ Object.defineProperty(exports, "clientStorageRemove", { enumerable: true, get: function () { return client_1.clientStorageRemove; } });
13
+ Object.defineProperty(exports, "clientStorageSet", { enumerable: true, get: function () { return client_1.clientStorageSet; } });
10
14
  Object.defineProperty(exports, "createDeeplink", { enumerable: true, get: function () { return client_1.createDeeplink; } });
11
15
  Object.defineProperty(exports, "getChats", { enumerable: true, get: function () { return client_1.getChats; } });
12
16
  Object.defineProperty(exports, "getConnectionStatus", { enumerable: true, get: function () { return client_1.getConnectionStatus; } });
@@ -39,4 +43,4 @@ Object.defineProperty(exports, "onBackPressed", { enumerable: true, get: functio
39
43
  Object.defineProperty(exports, "onMoveToRoot", { enumerable: true, get: function () { return routing_1.onMoveToRoot; } });
40
44
  Object.defineProperty(exports, "openSmartApp", { enumerable: true, get: function () { return routing_1.openSmartApp; } });
41
45
  Object.defineProperty(exports, "routingChanged", { enumerable: true, get: function () { return routing_1.routingChanged; } });
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsaUZBQStDO0FBb0M3QyxpQkFwQ0sseUJBQU0sQ0FvQ0w7QUFuQ1IseUNBYXFCO0FBZ0RuQiwrRkE1REEsdUJBQWMsT0E0REE7QUFaZCx5RkEvQ0EsaUJBQVEsT0ErQ0E7QUFTUixvR0F2REEsNEJBQW1CLE9BdURBO0FBSW5CLGdHQTFEQSx3QkFBZSxPQTBEQTtBQWRmLG1HQTNDQSwyQkFBa0IsT0EyQ0E7QUFIbEIseUZBdkNBLGlCQUFRLE9BdUNBO0FBT1IsOEZBN0NBLHNCQUFhLE9BNkNBO0FBRWIsZ0dBOUNBLHdCQUFlLE9BOENBO0FBSmYseUdBekNBLGlDQUF3QixPQXlDQTtBQUN4QiwrRkF6Q0EsdUJBQWMsT0F5Q0E7QUFRZCxzR0FoREEsOEJBQXFCLE9BZ0RBO0FBQ3JCLHdHQWhEQSxnQ0FBdUIsT0FnREE7QUE5Q3pCLDZDQU91QjtBQWtCckIsMkZBeEJBLHFCQUFVLE9Bd0JBO0FBRVYsbUdBekJBLDZCQUFrQixPQXlCQTtBQURsQiwyRkF2QkEscUJBQVUsT0F1QkE7QUFlVixnR0FyQ0EsMEJBQWUsT0FxQ0E7QUFDZixtR0FyQ0EsNkJBQWtCLE9BcUNBO0FBYmxCLDRGQXZCQSxzQkFBVyxPQXVCQTtBQXJCYixtREFBOEM7QUF5QjVDLHlGQXpCTSxrQkFBUSxPQXlCTjtBQXhCViwyQ0FBbUM7QUFhakMsc0ZBYk0sZUFBSyxPQWFOO0FBWlAscURBQWlEO0FBa0IvQywrRkFsQk0sNkJBQWMsT0FrQk47QUFqQmhCLDJDQU9zQjtBQXlCcEIsOEZBL0JBLHVCQUFhLE9BK0JBO0FBWGIsc0dBbkJBLCtCQUFxQixPQW1CQTtBQVJyQiw4RkFWQSx1QkFBYSxPQVVBO0FBZWIsNkZBeEJBLHNCQUFZLE9Bd0JBO0FBVFosNkZBZEEsc0JBQVksT0FjQTtBQVBaLCtGQU5BLHdCQUFjLE9BTUEifQ==
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsaUZBQStDO0FBd0M3QyxpQkF4Q0sseUJBQU0sQ0F3Q0w7QUF2Q1IseUNBaUJxQjtBQXFEbkIsbUdBckVBLDJCQUFrQixPQXFFQTtBQUhsQixpR0FqRUEseUJBQWdCLE9BaUVBO0FBRWhCLG9HQWxFQSw0QkFBbUIsT0FrRUE7QUFEbkIsaUdBaEVBLHlCQUFnQixPQWdFQTtBQUhoQiwrRkE1REEsdUJBQWMsT0E0REE7QUFaZCx5RkEvQ0EsaUJBQVEsT0ErQ0E7QUFTUixvR0F2REEsNEJBQW1CLE9BdURBO0FBSW5CLGdHQTFEQSx3QkFBZSxPQTBEQTtBQWRmLG1HQTNDQSwyQkFBa0IsT0EyQ0E7QUFIbEIseUZBdkNBLGlCQUFRLE9BdUNBO0FBT1IsOEZBN0NBLHNCQUFhLE9BNkNBO0FBRWIsZ0dBOUNBLHdCQUFlLE9BOENBO0FBSmYseUdBekNBLGlDQUF3QixPQXlDQTtBQUN4QiwrRkF6Q0EsdUJBQWMsT0F5Q0E7QUFRZCxzR0FoREEsOEJBQXFCLE9BZ0RBO0FBQ3JCLHdHQWhEQSxnQ0FBdUIsT0FnREE7QUE5Q3pCLDZDQU91QjtBQWtCckIsMkZBeEJBLHFCQUFVLE9Bd0JBO0FBRVYsbUdBekJBLDZCQUFrQixPQXlCQTtBQURsQiwyRkF2QkEscUJBQVUsT0F1QkE7QUFlVixnR0FyQ0EsMEJBQWUsT0FxQ0E7QUFDZixtR0FyQ0EsNkJBQWtCLE9BcUNBO0FBYmxCLDRGQXZCQSxzQkFBVyxPQXVCQTtBQXJCYixtREFBOEM7QUF5QjVDLHlGQXpCTSxrQkFBUSxPQXlCTjtBQXhCViwyQ0FBbUM7QUFhakMsc0ZBYk0sZUFBSyxPQWFOO0FBWlAscURBQWlEO0FBa0IvQywrRkFsQk0sNkJBQWMsT0FrQk47QUFqQmhCLDJDQU9zQjtBQXlCcEIsOEZBL0JBLHVCQUFhLE9BK0JBO0FBWGIsc0dBbkJBLCtCQUFxQixPQW1CQTtBQVJyQiw4RkFWQSx1QkFBYSxPQVVBO0FBZWIsNkZBeEJBLHNCQUFZLE9Bd0JBO0FBVFosNkZBZEEsc0JBQVksT0FjQTtBQVBaLCtGQU5BLHdCQUFjLE9BTUEifQ==
@@ -1,6 +1,7 @@
1
1
  import { EmitterEventPayload } from '@expressms/smartapp-bridge/build/main/types/eventEmitter';
2
2
  import { CreateDeeplinkResponse, File, GetConnectionStatusResponse } from '../../types';
3
3
  export * from './events';
4
+ export * from './storage';
4
5
  declare const openClientSettings: () => Promise<EmitterEventPayload> | undefined;
5
6
  declare const getChats: ({ filter }: {
6
7
  filter: string | null;