@weavix/tracker-plugin-sdk 0.0.1

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/AGENTS.md ADDED
@@ -0,0 +1,27 @@
1
+ # @weavix/tracker-plugin-sdk — agents
2
+
3
+ **Пакет:** core SDK (Weavix / npm). API идентичен internal, без `yateamApi`.
4
+
5
+ ## Импорты
6
+
7
+ ```typescript
8
+ import { hostApi, trackerApi, uiApi, PluginActionError } from '@weavix/tracker-plugin-sdk';
9
+ ```
10
+
11
+ Peer: `@weavix/tracker-api-types`, `@weavix/tracker-core`.
12
+
13
+ ## Правила
14
+
15
+ - **hostApi** — хост; **trackerApi.v3** — REST.
16
+ - **uiApi** — navigate, toaster, confirm.
17
+
18
+ ## Документация
19
+
20
+ | Файл | Назначение |
21
+ |------|------------|
22
+ | [../../AGENTS.md](../../AGENTS.md) | Общий вход (таблица internal vs external) |
23
+ | [../../docs/agent/COOKBOOK.md](../../docs/agent/COOKBOOK.md) | Рецепты (блок External) |
24
+ | [README.md](./README.md) | Быстрый старт |
25
+ | [API_REFERENCE.md](./API_REFERENCE.md) | hostApi, uiApi, trackerApi.v3 |
26
+
27
+ React: [@weavix/tracker-plugin-sdk-react](../tracker-react-external/AGENTS.md).
@@ -0,0 +1,541 @@
1
+ # API Reference - @weavix/tracker-plugin-sdk
2
+
3
+ ## Table of Contents
4
+
5
+ - [hostApi (HostApi)](#hostapi-hostapi)
6
+ - [init()](#init)
7
+ - [getTheme()](#gettheme)
8
+ - [getLanguage()](#getlanguage)
9
+ - [getContext()](#getcontext)
10
+ - [updateContentSize()](#updatecontentsize)
11
+ - [notifyReady()](#notifyready)
12
+ - [getSlot()](#getslot)
13
+ - [getEntityId()](#getentityid)
14
+ - [getEntityMeta()](#getentitymeta)
15
+ - [getContextLevel()](#getcontextlevel)
16
+ - [disableAutoResize()](#disableautoresize)
17
+ - [uiApi](#uiapi)
18
+ - [navigate()](#navigate)
19
+ - [trackerApi (TrackerApi)](#trackerapi-trackerapi)
20
+ - [v3](#v3)
21
+ - [Types](#types)
22
+ - [TrackerApiInitOptions](#trackerapiinitoptions)
23
+ - [TrackerApiCallOptions](#trackerapicalloptions)
24
+ - [TrackerApiV3](#trackerapiv3)
25
+ - [ApiCallResult](#apicallresult)
26
+ - [ApiCallPayload](#apicallpayload)
27
+ - [PluginActionError](#pluginactionerror)
28
+ - [Theme](#theme)
29
+ - [SlotContextMap](#slotcontextmap)
30
+ - [BasicContext](#basiccontext)
31
+ - [ContextLevel](#contextlevel)
32
+ - [ContentSizeUpdateRequest](#contentsizeupdaterequest)
33
+ - [HostInitOptions](#hostinitoptions)
34
+ - [NavigateRequest](#navigaterequest)
35
+ - [Коды ошибок API](#коды-ошибок-api)
36
+ - [Utils](#utils)
37
+ - [getLocalizedString()](#getlocalizedstring)
38
+ - [getField()](#getfield)
39
+ - [Handlers](#handlers)
40
+
41
+ ---
42
+
43
+ ## hostApi (HostApi)
44
+
45
+ API для взаимодействия с хостом (Tracker): инициализация плагина, тема, язык, контекст слота, размер окна, уведомление о готовности.
46
+
47
+ Экспортируется singleton **`hostApi`**. Обычно используется внутри `TrackerPluginProvider` (пакет react); при необходимости можно вызывать напрямую.
48
+
49
+ ### init()
50
+
51
+ Инициализирует плагин (чтение параметров из URL, инициализация моста, при необходимости — авто-ресайз). Вызывать один раз перед использованием остальных методов.
52
+
53
+ **Parameters:** `options?: HostInitOptions` — опции (например `autoResize`, по умолчанию `true`).
54
+
55
+ **Throws:** `Error` — если в URL нет обязательных параметров (slot, parentOrigin, id, elementId).
56
+
57
+ ```typescript
58
+ import { hostApi } from '@weavix/tracker-plugin-sdk';
59
+
60
+ hostApi.init({ autoResize: true });
61
+ ```
62
+
63
+ ---
64
+
65
+ ### getTheme()
66
+
67
+ Возвращает текущую тему хоста.
68
+
69
+ **Returns:** `Promise<Theme>`
70
+
71
+ ```typescript
72
+ const theme = await hostApi.getTheme(); // 'light' | 'light-hc' | 'dark' | 'dark-hc' | 'system'
73
+ ```
74
+
75
+ ---
76
+
77
+ ### getLanguage()
78
+
79
+ Возвращает текущий язык хоста.
80
+
81
+ **Returns:** `Promise<string>` (например `'ru'`, `'en'`).
82
+
83
+ ```typescript
84
+ const language = await hostApi.getLanguage();
85
+ ```
86
+
87
+ ---
88
+
89
+ ### getContext()
90
+
91
+ Возвращает контекст слота, в котором запущен плагин. Тип зависит от слота (см. [SlotContextMap](#slotcontextmap)).
92
+
93
+ **Returns:** `Promise<SlotContextMap[TSlot]>`
94
+
95
+ ```typescript
96
+ const context = await hostApi.getContext();
97
+ ```
98
+
99
+ ---
100
+
101
+ ### updateContentSize()
102
+
103
+ Отправляет хосту запрос на изменение высоты окна плагина.
104
+
105
+ **Parameters:** `payload: ContentSizeUpdateRequest` (поле `height`).
106
+
107
+ **Returns:** `Promise<…>`
108
+
109
+ ```typescript
110
+ await hostApi.updateContentSize({ height: 500 });
111
+ ```
112
+
113
+ ---
114
+
115
+ ### notifyReady()
116
+
117
+ Сообщает хосту, что плагин готов к работе.
118
+
119
+ **Returns:** `Promise<…>`
120
+
121
+ ```typescript
122
+ await hostApi.notifyReady();
123
+ ```
124
+
125
+ ---
126
+
127
+ ### getSlot()
128
+
129
+ Возвращает текущий слот. Вызывать только после `init()`.
130
+
131
+ **Returns:** `TSlot` (ключ из SlotContextMap).
132
+
133
+ ```typescript
134
+ const slot = hostApi.getSlot(); // например 'issue.action'
135
+ ```
136
+
137
+ ---
138
+
139
+ ### getEntityId()
140
+
141
+ Возвращает идентификатор сущности, переданный хостом в параметрах iframe. Доступен сразу после `init()` без postMessage-запроса.
142
+
143
+ **Returns:** `string | null` — идентификатор сущности или `null`, если параметр не передан.
144
+
145
+ ```typescript
146
+ const entityId = hostApi.getEntityId(); // например 'QUEUE-1' или null
147
+ ```
148
+
149
+ ---
150
+
151
+ ### getEntityMeta()
152
+
153
+ Возвращает метаданные сущности, переданные хостом в параметрах iframe (JSON-объект). Доступны сразу после `init()` без postMessage-запроса.
154
+
155
+ **Returns:** `Record<string, string> | undefined` — объект с метаданными или `undefined`, если метаданных нет.
156
+
157
+ ```typescript
158
+ const entityMeta = hostApi.getEntityMeta(); // например { key: 'QUEUE-1' } или undefined
159
+ ```
160
+
161
+ ---
162
+
163
+ ### getContextLevel()
164
+
165
+ Возвращает уровень контекста, объявленный в манифесте плагина (через параметр iframe `contextLevel`).
166
+
167
+ - `'basic'` — плагин получает только `entityId` и `entityMeta` без postMessage-запроса к хосту.
168
+ - `'full'` — плагин получает полный контекст слота через `context.get` (поведение по умолчанию).
169
+
170
+ **Returns:** `ContextLevel` (`'basic' | 'full'`). По умолчанию `'full'`.
171
+
172
+ ```typescript
173
+ const level = hostApi.getContextLevel(); // 'basic' | 'full'
174
+ ```
175
+
176
+ ---
177
+
178
+ ### disableAutoResize()
179
+
180
+ Отключает автоматическое изменение размера контейнера по контенту.
181
+
182
+ ```typescript
183
+ hostApi.disableAutoResize();
184
+ ```
185
+
186
+ ---
187
+
188
+ ## uiApi
189
+
190
+ Singleton **`uiApi`** — UI-взаимодействия с хостом: навигация, тосты (`uiApi.toaster`), confirm (`uiApi.confirm`).
191
+
192
+ ### navigate()
193
+
194
+ Выполнить навигацию в хост-приложении (путь Tracker, внешний URL и т.д.).
195
+
196
+ **Parameters:** `NavigateRequest` (см. [тип](#navigaterequest))
197
+
198
+ **Returns:** `Promise<void>`
199
+
200
+ ```typescript
201
+ import { uiApi } from '@weavix/tracker-plugin-sdk';
202
+
203
+ await uiApi.navigate({
204
+ path: '/issues/QUEUE-1',
205
+ params: { tab: 'comments' },
206
+ options: { newTab: false },
207
+ });
208
+ ```
209
+
210
+ ---
211
+
212
+ ## trackerApi (TrackerApi)
213
+
214
+ Класс для вызова Tracker Public API через хост (контракт `api.tracker.call`). Доступ к эндпоинтам — через типизированное API **v3**.
215
+
216
+ Описание методов и форматов ответов: [Common format](https://docs.yandex-team.ru/tracker/common-format).
217
+
218
+ Экспортируется singleton **`trackerApi`**.
219
+
220
+ ### v3
221
+
222
+ Объект с методами по HTTP: `get`, `post`, `put`, `patch`, `delete`. Ключи — пути эндпоинтов из OpenAPI (`@weavix/tracker-api-types`); при обращении по пути IDE показывает подсказки и JSDoc.
223
+
224
+ **Примеры:**
225
+
226
+ ```typescript
227
+ import { trackerApi } from '@weavix/tracker-plugin-sdk';
228
+
229
+ // GET — результат: { data, headers }
230
+ const { data, headers } = await trackerApi.v3.get['/issues/{id}']({
231
+ pathParams: { id: 'QUEUE-123' },
232
+ queryParams: { expand: ['COMMENTS'] },
233
+ });
234
+
235
+ // POST
236
+ await trackerApi.v3.post['/v2/issues']({
237
+ bodyParams: { queue: { key: 'TASK' }, summary: 'Новая задача' },
238
+ });
239
+ ```
240
+
241
+ - **v3.get[path](payload)** — GET; `payload`: `pathParams`, опционально `queryParams`.
242
+ - **v3.post[path](payload)** / **put** / **patch** — в `payload` передаётся `bodyParams` (и при необходимости `pathParams`, `queryParams`).
243
+ - **v3.delete[path](payload)** — DELETE; `payload`: `pathParams`, опционально `queryParams`.
244
+
245
+ **Результат** — объект с полями **`data`** (тело ответа) и **`headers`** (полезные заголовки, `Record<string, string>`). По форме это совпадает с типом [`ApiCallResult`](#apicallresult) на стороне контракта с хостом; в **`trackerApi.v3`** TypeScript выводит для **`data`** конкретный тип ответа эндпоинта, а не `unknown`.
246
+
247
+ Во все запросы через `trackerApi.v3` в контракт уходит **version: 'v3'**.
248
+
249
+ ```typescript
250
+ const { data, headers } = await trackerApi.v3.get['/issues/{id}']({
251
+ pathParams: { id: 'QUEUE-123' },
252
+ });
253
+ // data — типизирован по OpenAPI; headers — Record<string, string>
254
+ ```
255
+
256
+ ---
257
+
258
+ ## Types
259
+
260
+ ### TrackerApiInitOptions
261
+
262
+ Опции при создании экземпляра TrackerApi (если будет использоваться не singleton). Сейчас из core экспортируется только `trackerApi`, опции не передаются.
263
+
264
+ ```typescript
265
+ interface TrackerApiInitOptions {
266
+ apiVersion?: string;
267
+ }
268
+ ```
269
+
270
+ ---
271
+
272
+ ### TrackerApiCallOptions
273
+
274
+ Параметры вызова эндпоинта в v3: `pathParams`, `queryParams`, `bodyParams`.
275
+
276
+ ```typescript
277
+ interface TrackerApiCallOptions {
278
+ pathParams?: Record<string, string>;
279
+ queryParams?: Record<string, unknown>;
280
+ bodyParams?: Record<string, unknown>;
281
+ }
282
+ ```
283
+
284
+ ---
285
+
286
+ ### TrackerApiV3
287
+
288
+ Тип объекта `trackerApi.v3`: для каждого пути — вызов с тем же `payload`, что в типах API, а промис резолвится в **`{ data, headers }`**, где **`data`** имеет тип тела ответа этого эндпоинта.
289
+
290
+ ---
291
+
292
+ ### ApiCallResult
293
+
294
+ Результат вызова Tracker API через хост (`api.tracker.call`). Экспортируется из пакета.
295
+
296
+ ```typescript
297
+ type ApiCallResult = {
298
+ /** Тело ответа API */
299
+ data: unknown;
300
+ /** Полезные заголовки ответа (нормализованы в строки) */
301
+ headers: Record<string, string>;
302
+ };
303
+ ```
304
+
305
+ ---
306
+
307
+ ### ApiCallPayload
308
+
309
+ Полезная нагрузка, которую SDK отправляет хосту при вызове API. Обычно собирается внутри `trackerApi`; тип экспортируется для типизации на стороне хоста/обработчиков.
310
+
311
+ ```typescript
312
+ type ApiCallPayload = {
313
+ version: string;
314
+ method: string;
315
+ url: string;
316
+ pathParams: Record<string, string>;
317
+ queryParams: Record<string, unknown>;
318
+ bodyParams: Record<string, unknown>;
319
+ };
320
+ ```
321
+
322
+ ---
323
+
324
+ ### PluginActionError
325
+
326
+ Ошибка действия плагина (в т.ч. при вызове Tracker API через мост). Экспортируется класс **`PluginActionError`**.
327
+
328
+ - **`code`** — числовой код ошибки (см. [Коды ошибок API](#коды-ошибок-api)).
329
+ - **`message`** — текст сообщения.
330
+ - **`errorData`** (опционально) — объект/данные ошибки, которые вернул сервер (тело ответа или структурированная ошибка), если хост их передал.
331
+
332
+ ```typescript
333
+ import { PluginActionError } from '@weavix/tracker-plugin-sdk';
334
+
335
+ try {
336
+ await trackerApi.v3.get['/issues/{id}']({ pathParams: { id: 'BAD' } });
337
+ } catch (e) {
338
+ if (e instanceof PluginActionError) {
339
+ console.log(e.code, e.message, e.errorData);
340
+ }
341
+ }
342
+ ```
343
+
344
+ ---
345
+
346
+ ### Theme
347
+
348
+ Тип темы оформления хоста.
349
+
350
+ ```typescript
351
+ type Theme = 'light' | 'light-hc' | 'dark' | 'dark-hc' | 'system';
352
+ ```
353
+
354
+ ---
355
+
356
+ ### SlotContextMap
357
+
358
+ Маппинг имён слотов на типы контекста. Например, слот `issue.action` даёт контекст типа `Issue`. Типы контекста и мапа (`SlotContextMap`, `Issue` в слоте и др.) задаются пакетом **`@weavix/tracker-core`** и реэкспортируются из core.
359
+
360
+ ```typescript
361
+ // Пример: для слота 'issue.action' getContext() вернёт Issue
362
+ const context = await hostApi.getContext();
363
+ ```
364
+
365
+ ---
366
+
367
+ ### BasicContext
368
+
369
+ Базовый контекст плагина — доступен при `contextLevel = 'basic'` в манифесте. Содержит только данные из параметров iframe, без postMessage-запроса к хосту.
370
+
371
+ ```typescript
372
+ type BasicContext = {
373
+ /** Идентификатор сущности (например, ключ задачи 'QUEUE-1') */
374
+ entityId: string;
375
+ /** Метаданные сущности, переданные хостом */
376
+ entityMeta?: Record<string, string>;
377
+ };
378
+ ```
379
+
380
+ Используется как тип `slotContext` при вызове `useTrackerPluginContext()` или `useTrackerPluginContext('basic')` в react-пакете.
381
+
382
+ ---
383
+
384
+ ### ContextLevel
385
+
386
+ Уровень контекста, объявляемый в манифесте плагина в поле `contextLevel` слота.
387
+
388
+ ```typescript
389
+ type ContextLevel = 'basic' | 'full';
390
+ ```
391
+
392
+ - `'basic'` — плагин получает только `entityId` и `entityMeta` из параметров iframe. Вызов `context.get` не выполняется.
393
+ - `'full'` — плагин получает полный контекст слота через postMessage (`context.get`). Поведение по умолчанию.
394
+
395
+ **Пример в манифесте:**
396
+
397
+ ```json
398
+ {
399
+ "slots": {
400
+ "tracker": {
401
+ "issue.action": [
402
+ {
403
+ "entrypoint": "index.html",
404
+ "contextLevel": "basic"
405
+ }
406
+ ]
407
+ }
408
+ }
409
+ }
410
+ ```
411
+
412
+ ---
413
+
414
+ ### ContentSizeUpdateRequest
415
+
416
+ Запрос на изменение размера контента плагина.
417
+
418
+ ```typescript
419
+ type ContentSizeUpdateRequest = { height?: number };
420
+ ```
421
+
422
+ ---
423
+
424
+ ### HostInitOptions
425
+
426
+ Опции инициализации хоста (передаются в `hostApi.init()`).
427
+
428
+ ```typescript
429
+ interface HostInitOptions {
430
+ /** Авто-ресайз по контенту, по умолчанию true */
431
+ autoResize?: boolean;
432
+ }
433
+ ```
434
+
435
+ ---
436
+
437
+ ### NavigateRequest
438
+
439
+ Запрос на навигацию в хосте (`uiApi.navigate`).
440
+
441
+ ```typescript
442
+ type NavigateRequest = {
443
+ path: string;
444
+ params?: Record<string, string | number | boolean | null | undefined | (string | number | boolean | null | undefined)[]>;
445
+ options?: {
446
+ newTab?: boolean;
447
+ };
448
+ };
449
+ ```
450
+
451
+ ---
452
+
453
+ ## Коды ошибок API
454
+
455
+ При вызовах методов хост может вернуть ошибку с кодом. Константы экспортируются из пакета:
456
+
457
+ ```typescript
458
+ import {
459
+ METHOD_NOT_SUPPORTED,
460
+ MISSING_REQUIRED_SCOPE,
461
+ PLUGIN_ID_IS_NOT_CORRECT,
462
+ PLUGIN_ID_OR_SLOT_NOT_PROVIDED,
463
+ UNKNOWN_ERROR,
464
+ VALIDATION_ERROR,
465
+ } from '@weavix/tracker-plugin-sdk';
466
+ ```
467
+
468
+ | Константа | Код | Описание |
469
+ |-----------|-----|----------|
470
+ | `PLUGIN_ID_OR_SLOT_NOT_PROVIDED` | 1000 | Не переданы обязательные параметры инициализации плагина. |
471
+ | `PLUGIN_ID_IS_NOT_CORRECT` | 1001 | Неверный или несовпадающий pluginId. |
472
+ | `VALIDATION_ERROR` | 1002 | Ошибка валидации запроса. |
473
+ | `METHOD_NOT_SUPPORTED` | 1003 | Метод не поддерживается. |
474
+ | `MISSING_REQUIRED_SCOPE` | 1004 | Недостаточно прав (scope). |
475
+ | `UNKNOWN_ERROR` | 6666 | Неизвестная ошибка. |
476
+
477
+ ---
478
+
479
+ ## Utils
480
+
481
+ ### getLocalizedString()
482
+
483
+ Возвращает локализованную строку по коду языка. Тип `LocalizedString` приходит из **`@weavix/tracker-core`** (реэкспорт из core).
484
+
485
+ ```typescript
486
+ function getLocalizedString(
487
+ value: LocalizedString,
488
+ language: string,
489
+ fallbackLanguage?: string,
490
+ ): string;
491
+ ```
492
+
493
+ ### getField()
494
+
495
+ Извлекает значение из объекта по точечному пути (dot notation).
496
+
497
+ ```typescript
498
+ function getField<T = unknown>(
499
+ obj: Record<string, unknown>,
500
+ path: string,
501
+ defaultValue?: T,
502
+ ): T | undefined;
503
+ ```
504
+
505
+ ---
506
+
507
+ ## Handlers
508
+
509
+ Экспортируются **getHandler**, **setHandler**, типы **HandlerFunction**, **Handlers**, **HttpMethod** — для регистрации обработчиков запросов со стороны хоста (см. контракт и слоты).
510
+
511
+ ---
512
+
513
+ ## Complete Example
514
+
515
+ ```typescript
516
+ import {
517
+ hostApi,
518
+ trackerApi,
519
+ getField,
520
+ type Theme,
521
+ } from '@weavix/tracker-plugin-sdk';
522
+
523
+ // Инициализация обычно выполняется в TrackerPluginProvider (react)
524
+ hostApi.init({ autoResize: true });
525
+
526
+ const theme: Theme = await hostApi.getTheme();
527
+ const language = await hostApi.getLanguage();
528
+ const context = await hostApi.getContext();
529
+
530
+ // Вызов Tracker API v3 (в payload уходит version: 'v3')
531
+ const { data: issue } = await trackerApi.v3.get['/issues/{id}']({
532
+ pathParams: { id: 'KEY-1' },
533
+ queryParams: { expand: ['COMMENTS'] },
534
+ });
535
+
536
+ const summary = getField<string>(issue as Record<string, unknown>, 'summary', 'Без названия');
537
+
538
+ await hostApi.notifyReady();
539
+ ```
540
+
541
+ Типы **HTTP** запросов/ответов эндпоинтов (в т.ч. `Issue` в ответе REST) задаются пакетом **@weavix/tracker-api-types**. Типы **контекста слота** и `SlotContextMap` — из **@weavix/tracker-core** (см. выше).
package/README.md ADDED
@@ -0,0 +1,363 @@
1
+ # @weavix/tracker-plugin-sdk
2
+
3
+ Core package for Tracker plugins (Weavix / npm). API surface matches `@yandex-data-ui/tracker-plugin-sdk-core` without `yateamApi`.
4
+
5
+ > External flavor. Internal (Yandex): `@yandex-data-ui/tracker-plugin-sdk-core`.
6
+
7
+ Низкоуровневое API для взаимодействия с хостом и вызова Tracker Public API.
8
+
9
+ > **Для агентов и AI:** начните с [AGENTS.md](./AGENTS.md) и [COOKBOOK](../../docs/agent/COOKBOOK.md).
10
+
11
+ ## Установка
12
+
13
+ ```bash
14
+ npm install @weavix/tracker-plugin-sdk
15
+ ```
16
+
17
+ ## Использование
18
+
19
+ ```typescript
20
+ import { hostApi, trackerApi } from '@weavix/tracker-plugin-sdk';
21
+
22
+ // Инициализация плагина (чтение параметров из URL, настройка моста)
23
+ hostApi.init({ autoResize: true });
24
+
25
+ // Получение текущей темы
26
+ const theme = await hostApi.getTheme(); // 'light' | 'light-hc' | 'dark' | 'dark-hc' | 'system' | undefined
27
+
28
+ // Получение текущего языка
29
+ const language = await hostApi.getLanguage(); // 'ru' | 'en' | undefined
30
+
31
+ // Получение контекста слота (например, текущей задачи для слота 'issue.action')
32
+ const context = await hostApi.getContext();
33
+
34
+ // Уведомление хоста о готовности плагина
35
+ await hostApi.notifyReady();
36
+
37
+ // Обновление высоты контейнера плагина
38
+ await hostApi.updateContentSize({ height: 500 });
39
+ ```
40
+
41
+ ## Tracker API
42
+
43
+ Все вызовы Tracker Public API выполняются через `trackerApi.v3` — типизированный прокси над HTTP-методами. Ключи — пути эндпоинтов из OpenAPI (`@weavix/tracker-api-types`); IDE предоставляет автодополнение и JSDoc.
44
+
45
+ Подробное описание методов и форматов ответов: [Tracker API Reference](https://docs.yandex-team.ru/tracker/api-ref/about-api).
46
+
47
+ ```typescript
48
+ import { trackerApi } from '@weavix/tracker-plugin-sdk';
49
+
50
+ // GET — возвращает { data, headers }
51
+ const { data: issue } = await trackerApi.v3.get['/issues/{id}']({
52
+ pathParams: { id: 'QUEUE-123' },
53
+ queryParams: { expand: ['COMMENTS'] },
54
+ });
55
+
56
+ // POST
57
+ await trackerApi.v3.post['/v2/issues']({
58
+ bodyParams: { queue: { key: 'TASK' }, summary: 'Новая задача' },
59
+ });
60
+
61
+ // PATCH
62
+ await trackerApi.v3.patch['/v2/issues/{id}']({
63
+ pathParams: { id: 'QUEUE-123' },
64
+ bodyParams: { summary: 'Обновлённое название' },
65
+ });
66
+
67
+ // DELETE
68
+ await trackerApi.v3.delete['/v2/issues/{id}']({
69
+ pathParams: { id: 'QUEUE-123' },
70
+ });
71
+ ```
72
+
73
+ ### Очереди
74
+
75
+ ```typescript
76
+ // Получение списка очередей
77
+ const { data: queues } = await trackerApi.v3.get['/v2/queues']({
78
+ queryParams: { page: 1, perPage: 100 },
79
+ });
80
+
81
+ // Получение конкретной очереди
82
+ const { data: queue } = await trackerApi.v3.get['/v2/queues/{id}']({
83
+ pathParams: { id: 'MYQUEUE' },
84
+ });
85
+ ```
86
+
87
+ ### Задачи
88
+
89
+ ```typescript
90
+ // Получение задачи по ключу
91
+ const { data: issue } = await trackerApi.v3.get['/issues/{id}']({
92
+ pathParams: { id: 'QUEUE-123' },
93
+ });
94
+
95
+ // Создание задачи
96
+ const { data: newIssue } = await trackerApi.v3.post['/v2/issues']({
97
+ bodyParams: {
98
+ queue: { key: 'QUEUE' },
99
+ summary: 'Название задачи',
100
+ },
101
+ });
102
+
103
+ // Поиск задач
104
+ const { data: issues } = await trackerApi.v3.post['/v2/issues/_search']({
105
+ bodyParams: { filter: { queue: 'QUEUE' } },
106
+ });
107
+ ```
108
+
109
+ ## Тосты (Toast notifications)
110
+
111
+ Плагины могут показывать toast-уведомления в хост-приложении через `uiApi.toaster`. API максимально приближен к gravity-ui `useToaster`.
112
+
113
+ > **Permission:** Требуется `"toaster"` в `permissions.ui` манифеста плагина (хост преобразует в scope `tracker:ui:toaster`).
114
+
115
+ ```typescript
116
+ import { uiApi } from '@weavix/tracker-plugin-sdk';
117
+
118
+ // Простой тост
119
+ uiApi.toaster.add({
120
+ title: 'Сохранено',
121
+ theme: 'success',
122
+ });
123
+
124
+ // Тост с текстовым содержимым и кастомным временем показа
125
+ uiApi.toaster.add({
126
+ title: 'Ошибка',
127
+ theme: 'danger',
128
+ content: 'Не удалось загрузить данные',
129
+ autoHiding: 10000,
130
+ });
131
+
132
+ // Тост с кнопкой действия
133
+ uiApi.toaster.add({
134
+ title: 'Элемент удалён',
135
+ theme: 'info',
136
+ content: 'QUEUE-123',
137
+ actions: [
138
+ {
139
+ label: 'Отменить',
140
+ onClick: () => {
141
+ // обработка нажатия
142
+ },
143
+ },
144
+ ],
145
+ });
146
+ ```
147
+
148
+ ### `uiApi.toaster.add(options)`
149
+
150
+ | Параметр | Тип | По умолчанию | Описание |
151
+ |----------|-----|--------------|----------|
152
+ | `title` | `string` | — | Заголовок тоста (обязательный) |
153
+ | `name` | `string` | auto | Уникальный ключ для дедупликации. Генерируется автоматически, если не передан |
154
+ | `theme` | `'success' \| 'danger' \| 'warning' \| 'info'` | `'info'` | Тема (цвет и иконка) |
155
+ | `content` | `string` | — | Текстовое содержимое под заголовком |
156
+ | `autoHiding` | `number` | `5000` | Время показа в мс (от 1000 до 30000) |
157
+ | `isClosable` | `boolean` | `true` | Показывать кнопку закрытия |
158
+ | `actions` | `ToastAction[]` | — | Кнопки действий (макс. 2) |
159
+
160
+ **`ToastAction`:**
161
+
162
+ | Поле | Тип | Описание |
163
+ |------|-----|----------|
164
+ | `label` | `string` | Текст кнопки (макс. 50 символов) |
165
+ | `onClick` | `() => void` | Callback при нажатии |
166
+
167
+ **Возвращает:** `Promise<{ name: string }>` — имя тоста (для идентификации).
168
+
169
+ **Ограничения:**
170
+ - `title` — макс. 200 символов
171
+ - `content` — макс. 500 символов
172
+ - `actions` — макс. 2 кнопки
173
+ - Rate limit — 5 тостов за 10 секунд на плагин
174
+
175
+ ## Навигация в хосте
176
+
177
+ Плагин может открыть путь в хост-приложении или внешний URL через `uiApi.navigate`:
178
+
179
+ ```typescript
180
+ import { uiApi } from '@weavix/tracker-plugin-sdk';
181
+
182
+ await uiApi.navigate({
183
+ path: '/queues/MYQUEUE',
184
+ params: { tab: 'settings' },
185
+ options: { newTab: true },
186
+ });
187
+ ```
188
+
189
+ | Поле | Тип | Описание |
190
+ |------|-----|----------|
191
+ | `path` | `string` | Путь или URL (обязательный) |
192
+ | `params` | `Record<string, string \| number \| boolean \| null \| undefined \| (string \| number \| boolean \| null \| undefined)[]>` | Query-параметры |
193
+ | `options.newTab` | `boolean` | Открыть в новой вкладке |
194
+
195
+ `TrackerPluginProvider` (react) перехватывает клики по внешним ссылкам в iframe и вызывает `uiApi.navigate`.
196
+
197
+ ## Storage API
198
+
199
+ `storageApi` — JSON-хранилище уровня организации, опосредованное хостом. Запись общая на всю организацию: её видят все пользователи плагина, право на запись определяет хост (отдаёт его в поле `canWrite` каждой прочитанной записи).
200
+
201
+ На сегодня доступен единственный контекст — `storageApi.orgShared`.
202
+
203
+ ```typescript
204
+ import { storageApi } from '@weavix/tracker-plugin-sdk';
205
+
206
+ // Чтение
207
+ const record = await storageApi.orgShared.get('settings');
208
+ // record: { data: { theme: 'dark' }, version: 5, canWrite: true, ... } | null
209
+
210
+ // Создание новой записи (на пустом бакете)
211
+ await storageApi.orgShared.patch({
212
+ bucket: 'settings',
213
+ data: { theme: 'dark', notifications: true },
214
+ version: 0,
215
+ });
216
+
217
+ // Обновление без знания текущей версии — SDK сам вычитает её и поретраит конфликты
218
+ await storageApi.orgShared.patch({
219
+ bucket: 'settings',
220
+ data: { count: 42 },
221
+ });
222
+
223
+ // Удаление отдельного поля — передайте `null`
224
+ await storageApi.orgShared.patch({
225
+ bucket: 'settings',
226
+ data: { theme: null },
227
+ });
228
+ ```
229
+
230
+ ### `storageApi.orgShared.get(bucket?)`
231
+
232
+ Возвращает `Promise<StorageRecord | null>` — текущую запись или `null`, если её ещё нет.
233
+
234
+ | Параметр | Тип | По умолчанию | Описание |
235
+ |----------|-----|--------------|----------|
236
+ | `bucket` | `string \| undefined` | хост подставляет `'default'` | Ключ записи внутри контекста |
237
+
238
+ ### `storageApi.orgShared.patch(options)`
239
+
240
+ Merge-patch: поля из `data` накладываются на текущую запись поверх, значение `null` удаляет ключ. Возвращает полный смерженный `StorageRecord` с новой версией (включая поля, дописанные параллельными писателями).
241
+
242
+ | Параметр | Тип | По умолчанию | Описание |
243
+ |----------|-----|--------------|----------|
244
+ | `bucket` | `string` | хост подставляет `'default'` | Ключ записи |
245
+ | `data` | `Record<string, unknown>` | — | Merge-doc; `null` удаляет поле |
246
+ | `version` | `number \| undefined` | auto-resolve | Ожидаемая текущая версия |
247
+
248
+ **Версионирование.**
249
+
250
+ - **С явным `version`** — отправляется один запрос. Любая ошибка, включая `VERSION_CONFLICT`, пробрасывается вызывающему. Используйте, если приложение само держит актуальную версию и должно реагировать на конфликт (например, показать пользователю «данные изменились, перечитайте»). Для создания записи на пустом бакете передавайте `version: 0`.
251
+ - **Без `version`** — SDK сначала читает текущую версию через `get` (для пустого бакета берётся `0`), затем выполняет `patch`. На `VERSION_CONFLICT` цикл повторяется до двух раз, каждый ретрай заново читает версию. Любая другая ошибка пробрасывается мгновенно. В худшем случае — 6 round-trip-ов (3 пары GET + PATCH); на каждом ретрае в консоль пишется `console.warn`.
252
+
253
+ ### Ошибки
254
+
255
+ Все ошибки storage-методов — экземпляры `PluginActionError` с числовыми кодами:
256
+
257
+ | Код | Константа | Когда |
258
+ |-----|-----------|-------|
259
+ | `1010` | `VERSION_CONFLICT` | Переданный `version` не совпал с текущим |
260
+ | `1011` | `DATA_TOO_LARGE` | Размер записи после операции превысил 256 KiB |
261
+ | `1012` | `BAD_KEY` | `bucket` не прошёл валидацию формата или длины |
262
+
263
+ ```typescript
264
+ import { PluginActionError, VERSION_CONFLICT, storageApi } from '@weavix/tracker-plugin-sdk';
265
+
266
+ try {
267
+ await storageApi.orgShared.patch({ bucket: 'settings', data: { x: 1 }, version: 0 });
268
+ } catch (e) {
269
+ if (e instanceof PluginActionError && e.code === VERSION_CONFLICT) {
270
+ // показать пользователю, что версия устарела
271
+ }
272
+ }
273
+ ```
274
+
275
+ ### Типы
276
+
277
+ ```typescript
278
+ import type {
279
+ StorageContextType, // 'orgShared' (расширяемое в будущем)
280
+ StorageRecord, // { key, version, data, canWrite, createdAt, updatedAt }
281
+ StorageGetPayload, // wire-payload для storage.get
282
+ StoragePatchPayload, // wire-payload для storage.patch
283
+ } from '@weavix/tracker-plugin-sdk';
284
+ ```
285
+
286
+ ## Обработка ошибок
287
+
288
+ ```typescript
289
+ import { trackerApi, PluginActionError } from '@weavix/tracker-plugin-sdk';
290
+
291
+ try {
292
+ await trackerApi.v3.get['/issues/{id}']({ pathParams: { id: 'BAD' } });
293
+ } catch (e) {
294
+ if (e instanceof PluginActionError) {
295
+ console.log(e.code, e.message, e.errorData);
296
+ }
297
+ }
298
+ ```
299
+
300
+ ## API
301
+
302
+ ### `hostApi`
303
+
304
+ - `init(options?)` — инициализация плагина (чтение параметров из URL, настройка моста). Вызывать один раз перед использованием остальных методов.
305
+ - `getTheme()` — текущая тема (`'light' | 'light-hc' | 'dark' | 'dark-hc' | 'system'`)
306
+ - `getLanguage()` — текущий код языка (`'ru'`, `'en'` и др.)
307
+ - `getContext()` — контекст слота (тип зависит от слота, см. `SlotContextMap`)
308
+ - `getSlot()` — имя текущего слота (вызывать после `init()`)
309
+ - `updateContentSize(request)` — обновление высоты контейнера плагина
310
+ - `notifyReady()` — уведомление хоста о готовности плагина
311
+ - `disableAutoResize()` — отключение автоматического изменения размера
312
+
313
+ ### `uiApi`
314
+
315
+ UI-методы хоста (навигация, тосты, confirm и др.).
316
+
317
+ - `uiApi.navigate(request)` — навигация в хост-приложении. Подробности — [выше](#навигация-в-хосте).
318
+ - `uiApi.toaster.add(options)` — показать toast-уведомление в хост-приложении. Подробности — [выше](#тосты-toast-notifications).
319
+ - `uiApi.confirm.show(options)` — диалог подтверждения (permission `confirm` в манифесте).
320
+
321
+ ### `trackerApi.v3`
322
+
323
+ Типизированный прокси над эндпоинтами Tracker Public API v3:
324
+
325
+ - `trackerApi.v3.get[path](payload)` — GET-запрос; `payload`: `pathParams`, опционально `queryParams`
326
+ - `trackerApi.v3.post[path](payload)` — POST-запрос; `payload`: `bodyParams`, опционально `pathParams`, `queryParams`
327
+ - `trackerApi.v3.put[path](payload)` — PUT-запрос
328
+ - `trackerApi.v3.patch[path](payload)` — PATCH-запрос
329
+ - `trackerApi.v3.delete[path](payload)` — DELETE-запрос; `payload`: `pathParams`, опционально `queryParams`
330
+
331
+ Все методы возвращают `Promise<{ data, headers }>`, где `data` типизирован согласно ответу эндпоинта.
332
+
333
+ ## Типы
334
+
335
+ - **`SlotContextMap`**, контексты слотов, `LocalizedString` и связанные типы (`Issue` в контексте слота, `Attachment` и т.д.) — из **`@weavix/tracker-core`**, реэкспортируются из этого пакета.
336
+ - Типы **запросов и ответов HTTP** эндпоинтов Tracker Public API (`trackerApi.v3`) — из **`@weavix/tracker-api-types`**.
337
+
338
+ ```typescript
339
+ import type {
340
+ Theme,
341
+ ApiCallResult,
342
+ ApiCallPayload,
343
+ TrackerApiCallOptions,
344
+ ContentSizeUpdateRequest,
345
+ SlotContextMap,
346
+ } from '@weavix/tracker-plugin-sdk';
347
+ ```
348
+
349
+ ## React-интеграция
350
+
351
+ Для React-приложений используйте [@weavix/tracker-plugin-sdk-react](../tracker-react-external/README.md) — `TrackerPluginProvider`, `useTrackerPluginContext`, `useLocalizedString`.
352
+
353
+ ## Полная документация
354
+
355
+ 📖 [AGENTS.md](./AGENTS.md) — краткий вход для агентов.
356
+
357
+ 📖 [COOKBOOK](../../docs/agent/COOKBOOK.md) — типовые сценарии.
358
+
359
+ 📖 [API Reference](./API_REFERENCE.md) — hostApi, trackerApi.v3, типы, ошибки.
360
+
361
+ ## Лицензия
362
+
363
+ UNLICENSED
package/dist/index.mjs ADDED
@@ -0,0 +1,28 @@
1
+ import { trackerApi as r } from "@weavix/tracker-core";
2
+ import { getHandler as o, getLocalizedString as E, hostApi as R, setHandler as i, storageApi as A } from "@weavix/tracker-core";
3
+ import { BAD_KEY as N, DATA_TOO_LARGE as p, METHOD_NOT_SUPPORTED as T, MISSING_REQUIRED_SCOPE as D, PLUGIN_ID_IS_NOT_CORRECT as a, PLUGIN_ID_OR_SLOT_NOT_PROVIDED as n, PluginActionError as s, UNKNOWN_ERROR as S, VALIDATION_ERROR as c, VERSION_CONFLICT as L, dispatchHostEvent as P, getField as g, on as d, resetEventBus as l, uiApi as C } from "@weavix/sdk-core";
4
+ const e = r;
5
+ export {
6
+ N as BAD_KEY,
7
+ p as DATA_TOO_LARGE,
8
+ T as METHOD_NOT_SUPPORTED,
9
+ D as MISSING_REQUIRED_SCOPE,
10
+ a as PLUGIN_ID_IS_NOT_CORRECT,
11
+ n as PLUGIN_ID_OR_SLOT_NOT_PROVIDED,
12
+ s as PluginActionError,
13
+ S as UNKNOWN_ERROR,
14
+ c as VALIDATION_ERROR,
15
+ L as VERSION_CONFLICT,
16
+ P as dispatchHostEvent,
17
+ g as getField,
18
+ o as getHandler,
19
+ E as getLocalizedString,
20
+ R as hostApi,
21
+ d as on,
22
+ l as resetEventBus,
23
+ i as setHandler,
24
+ A as storageApi,
25
+ e as trackerApi,
26
+ C as uiApi
27
+ };
28
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../src/api/trackerApi.ts"],"sourcesContent":["import type {\n ApiV3DeleteMethods,\n ApiV3GetMethods,\n ApiV3PatchMethods,\n ApiV3PostMethods,\n ApiV3PutMethods,\n} from '@weavix/tracker-api-types';\nimport {\n type TrackerApiCallOptions as BaseCallOptions,\n type TrackerApiInitOptions as BaseInitOptions,\n trackerApi as trackerApiBase,\n} from '@weavix/tracker-core';\n\nexport type TrackerApiCallOptions = BaseCallOptions;\nexport type TrackerApiInitOptions = BaseInitOptions;\n\ntype ApiResult<M> = {\n [K in keyof M]: M[K] extends (...args: infer A) => Promise<infer R>\n ? (...args: A) => Promise<{ data: R; headers: Record<string, string> }>\n : never;\n};\n\nexport interface TrackerApiV3 {\n get: ApiResult<ApiV3GetMethods>;\n post: ApiResult<ApiV3PostMethods>;\n put: ApiResult<ApiV3PutMethods>;\n patch: ApiResult<ApiV3PatchMethods>;\n delete: ApiResult<ApiV3DeleteMethods>;\n}\n\nexport interface TrackerApi {\n v3: TrackerApiV3;\n}\n\nexport const trackerApi = trackerApiBase as unknown as TrackerApi;\n"],"names":["trackerApi","trackerApiBase"],"mappings":";;;AAkCO,MAAMA,IAAaC;"}
@@ -0,0 +1,23 @@
1
+ import { ApiV3DeleteMethods, ApiV3GetMethods, ApiV3PatchMethods, ApiV3PostMethods, ApiV3PutMethods } from '@weavix/tracker-api-types';
2
+ import { TrackerApiCallOptions as BaseCallOptions, TrackerApiInitOptions as BaseInitOptions } from '@weavix/tracker-core';
3
+ export type TrackerApiCallOptions = BaseCallOptions;
4
+ export type TrackerApiInitOptions = BaseInitOptions;
5
+ type ApiResult<M> = {
6
+ [K in keyof M]: M[K] extends (...args: infer A) => Promise<infer R> ? (...args: A) => Promise<{
7
+ data: R;
8
+ headers: Record<string, string>;
9
+ }> : never;
10
+ };
11
+ export interface TrackerApiV3 {
12
+ get: ApiResult<ApiV3GetMethods>;
13
+ post: ApiResult<ApiV3PostMethods>;
14
+ put: ApiResult<ApiV3PutMethods>;
15
+ patch: ApiResult<ApiV3PatchMethods>;
16
+ delete: ApiResult<ApiV3DeleteMethods>;
17
+ }
18
+ export interface TrackerApi {
19
+ v3: TrackerApiV3;
20
+ }
21
+ export declare const trackerApi: TrackerApi;
22
+ export {};
23
+ //# sourceMappingURL=trackerApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trackerApi.d.ts","sourceRoot":"","sources":["../../../../src/api/trackerApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EAClB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACH,KAAK,qBAAqB,IAAI,eAAe,EAC7C,KAAK,qBAAqB,IAAI,eAAe,EAEhD,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAC;AACpD,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAC;AAEpD,KAAK,SAAS,CAAC,CAAC,IAAI;KACf,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GAC7D,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC,GACrE,KAAK;CACd,CAAC;AAEF,MAAM,WAAW,YAAY;IACzB,GAAG,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;IAChC,IAAI,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAClC,GAAG,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;IAChC,KAAK,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACpC,MAAM,EAAE,SAAS,CAAC,kBAAkB,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,UAAU;IACvB,EAAE,EAAE,YAAY,CAAC;CACpB;AAED,eAAO,MAAM,UAAU,EAAgC,UAAU,CAAC"}
@@ -0,0 +1,19 @@
1
+ export { hostApi } from '@weavix/tracker-core';
2
+ export type { ApiCallPayload, ApiCallResult, HostApi } from '@weavix/tracker-core';
3
+ export { trackerApi } from './api/trackerApi';
4
+ export type { TrackerApi, TrackerApiCallOptions, TrackerApiInitOptions, TrackerApiV3, } from './api/trackerApi';
5
+ export type { ContentSizeUpdateRequest } from '../../plugin-sdk-core/src/index.ts';
6
+ export { getHandler, setHandler } from '@weavix/tracker-core';
7
+ export type { GetDataResultMap, HandlerFunction, Handlers, HttpMethod } from '@weavix/tracker-core';
8
+ export { dispatchHostEvent, on, resetEventBus } from '../../plugin-sdk-core/src/index.ts';
9
+ export type { EventMessage, HostEventCallback, HostEventContract, HostEventMethod, Unsubscribe, } from '../../plugin-sdk-core/src/index.ts';
10
+ export { BAD_KEY, DATA_TOO_LARGE, METHOD_NOT_SUPPORTED, MISSING_REQUIRED_SCOPE, PLUGIN_ID_IS_NOT_CORRECT, PLUGIN_ID_OR_SLOT_NOT_PROVIDED, PluginActionError, UNKNOWN_ERROR, VALIDATION_ERROR, VERSION_CONFLICT, } from '../../plugin-sdk-core/src/index.ts';
11
+ export type { BasicContext, ContextLevel, Theme } from '../../plugin-sdk-core/src/index.ts';
12
+ export type { Attachment, AttachmentViewerActionSlotContext, BoardTabSlotContext, GoalSlotContext, Issue, IssueCommentActionSlotContext, LocalizedString, MetaEntityV2, PortfolioSlotContext, ProjectSlotContext, SlotContextMap, TriggerActionData, TriggerCreateActionsSlotContext, TriggerEditActionsSlotContext, } from '@weavix/tracker-core';
13
+ export { uiApi } from '../../plugin-sdk-core/src/index.ts';
14
+ export type { ConfirmOptions, ConfirmResult, ToastAction, ToastOptions } from '../../plugin-sdk-core/src/index.ts';
15
+ export { getField } from '../../plugin-sdk-core/src/index.ts';
16
+ export { getLocalizedString } from '@weavix/tracker-core';
17
+ export { storageApi } from '@weavix/tracker-core';
18
+ export type { StorageContextType, StorageGetPayload, StoragePatchPayload, StorageRecord, } from '@weavix/tracker-core';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EACR,UAAU,EACV,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,GACf,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAGjE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC9D,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGpG,OAAO,EAAE,iBAAiB,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACxE,YAAY,EACR,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,WAAW,GACd,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACH,OAAO,EACP,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,8BAA8B,EAC9B,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,GACnB,MAAM,kBAAkB,CAAC;AAG1B,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC1E,YAAY,EACR,UAAU,EACV,iCAAiC,EACjC,mBAAmB,EACnB,eAAe,EACf,KAAK,EACL,6BAA6B,EAC7B,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,+BAA+B,EAC/B,6BAA6B,GAChC,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGjG,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,YAAY,EACR,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,GAChB,MAAM,sBAAsB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@weavix/tracker-plugin-sdk",
3
+ "version": "0.0.1",
4
+ "exports": {
5
+ ".": {
6
+ "types": "./dist/index.d.ts",
7
+ "import": "./dist/index.mjs"
8
+ }
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md",
13
+ "AGENTS.md",
14
+ "API_REFERENCE.md"
15
+ ],
16
+ "keywords": [],
17
+ "author": "Tracker Team",
18
+ "license": "UNLICENSED",
19
+ "description": "Core package for Tracker plugin SDK (Weavix flavor)",
20
+ "publishConfig": {
21
+ "registry": "https://registry.npmjs.org/",
22
+ "access": "public"
23
+ },
24
+ "peerDependencies": {
25
+ "@weavix/sdk-core": "^0.0.3",
26
+ "@weavix/tracker-api-types": ">=0.0.0",
27
+ "@weavix/tracker-core": "^0.0.1"
28
+ },
29
+ "devDependencies": {
30
+ "@types/jest": "*",
31
+ "@weavix/tracker-api-types": "*",
32
+ "@weavix/sdk-core": "0.0.0",
33
+ "@weavix/tracker-core": "0.0.1"
34
+ },
35
+ "scripts": {
36
+ "build": "vite build",
37
+ "typecheck": "tsc --noEmit"
38
+ }
39
+ }