@weavix/tracker-core 0.0.1 → 0.0.2
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/dist/index.d.ts +30 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
import { BaseMessage } from '@weavix/sdk-core';
|
|
2
2
|
import { ContentSizeUpdateRequest } from '@weavix/sdk-core';
|
|
3
3
|
import { ContextLevel } from '@weavix/sdk-core';
|
|
4
|
+
import { ExternalApiAuthCheckAndRequestPayload } from '@weavix/sdk-core';
|
|
5
|
+
import { ExternalApiAuthCheckAndRequestResult } from '@weavix/sdk-core';
|
|
6
|
+
import { ExternalApiAuthGetStatusPayload } from '@weavix/sdk-core';
|
|
7
|
+
import { ExternalApiAuthGetStatusResult } from '@weavix/sdk-core';
|
|
8
|
+
import { ExternalApiAuthRequestPayload } from '@weavix/sdk-core';
|
|
9
|
+
import { ExternalApiAuthRequestResult } from '@weavix/sdk-core';
|
|
10
|
+
import { ExternalApiAuthRevokePayload } from '@weavix/sdk-core';
|
|
11
|
+
import { ExternalApiAuthRevokeResult } from '@weavix/sdk-core';
|
|
12
|
+
import { ExternalApiCallPayload } from '@weavix/sdk-core';
|
|
13
|
+
import { ExternalApiCallResult } from '@weavix/sdk-core';
|
|
4
14
|
import { HostInitOptions } from '@weavix/sdk-core';
|
|
5
15
|
import { NavigateRequest } from '@weavix/sdk-core';
|
|
6
16
|
import { Theme } from '@weavix/sdk-core';
|
|
@@ -228,6 +238,26 @@ export declare interface HostApi<TSlot extends keyof SlotContextMap = keyof Slot
|
|
|
228
238
|
* Выключить автоматическое изменение размера контейнера
|
|
229
239
|
*/
|
|
230
240
|
disableAutoResize(): void;
|
|
241
|
+
/**
|
|
242
|
+
* Получить статус аутентификации по доменам плагина
|
|
243
|
+
*/
|
|
244
|
+
externalApiAuthGetStatus(payload: ExternalApiAuthGetStatusPayload): Promise<ExternalApiAuthGetStatusResult>;
|
|
245
|
+
/**
|
|
246
|
+
* Отозвать аутентификацию для указанных доменов
|
|
247
|
+
*/
|
|
248
|
+
externalApiAuthRevoke(payload: ExternalApiAuthRevokePayload): Promise<ExternalApiAuthRevokeResult>;
|
|
249
|
+
/**
|
|
250
|
+
* Запросить у пользователя данные для аутентификации по доменам
|
|
251
|
+
*/
|
|
252
|
+
externalApiAuthRequest(payload: ExternalApiAuthRequestPayload): Promise<ExternalApiAuthRequestResult>;
|
|
253
|
+
/**
|
|
254
|
+
* Проверить статус аутентификации и запросить данные для неаутентифицированных доменов
|
|
255
|
+
*/
|
|
256
|
+
externalApiAuthCheckAndRequest(payload: ExternalApiAuthCheckAndRequestPayload): Promise<ExternalApiAuthCheckAndRequestResult>;
|
|
257
|
+
/**
|
|
258
|
+
* Выполнить прокси-запрос к внешнему API
|
|
259
|
+
*/
|
|
260
|
+
externalApiCall(payload: ExternalApiCallPayload): Promise<ExternalApiCallResult>;
|
|
231
261
|
}
|
|
232
262
|
|
|
233
263
|
export declare const hostApi: HostApi;
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/api/trackerApiBase.ts","../src/host/hostApi.ts","../src/handlers/handlers.ts","../src/utils/localization.ts","../src/storage/storageApi.ts"],"sourcesContent":["import { sendRequest } from '@weavix/sdk-core';\nimport type { ApiCallPayload, ApiCallResult } from './types';\n\nexport interface TrackerApiCallOptions {\n pathParams?: Record<string, string>;\n queryParams?: Record<string, unknown>;\n bodyParams?: Record<string, unknown>;\n file?: File;\n}\n\nfunction buildPayload(\n method: string,\n url: string,\n options: TrackerApiCallOptions = {},\n version: string,\n): ApiCallPayload {\n return {\n version,\n method,\n url,\n pathParams: options.pathParams ?? {},\n queryParams: options.queryParams ?? {},\n bodyParams: options.bodyParams ?? {},\n file: options.file,\n };\n}\n\nexport interface TrackerApiInitOptions {\n apiVersion?: string;\n}\n\n/**\n * Untyped runtime API класс. v3-методы возвращают Proxy, который при обращении\n * по любому ключу строит call. Типизация добавляется в публикуемых пакетах\n * через cast (см. typed wrapper).\n */\nexport class TrackerApi {\n private static readonly V3_VERSION = 'v3';\n\n get v3(): {\n get: Record<string, (opts: TrackerApiCallOptions) => Promise<unknown>>;\n post: Record<string, (opts: TrackerApiCallOptions) => Promise<unknown>>;\n put: Record<string, (opts: TrackerApiCallOptions) => Promise<unknown>>;\n patch: Record<string, (opts: TrackerApiCallOptions) => Promise<unknown>>;\n delete: Record<string, (opts: TrackerApiCallOptions) => Promise<unknown>>;\n } {\n return {\n get: this.createMethodProxy('GET'),\n post: this.createMethodProxy('POST'),\n put: this.createMethodProxy('PUT'),\n patch: this.createMethodProxy('PATCH'),\n delete: this.createMethodProxy('DELETE'),\n };\n }\n\n private createMethodProxy(\n method: string,\n ): Record<string, (opts: TrackerApiCallOptions) => Promise<unknown>> {\n const self = this;\n return new Proxy({} as Record<string, (opts: TrackerApiCallOptions) => Promise<unknown>>, {\n get(_, path: string) {\n return (payload: TrackerApiCallOptions) =>\n self.call(method, path, payload, TrackerApi.V3_VERSION);\n },\n });\n }\n\n private call(\n method: string,\n url: string,\n options: TrackerApiCallOptions = {},\n requestVersion: string,\n ): Promise<ApiCallResult> {\n const payload: ApiCallPayload = buildPayload(method, url, options, requestVersion);\n return sendRequest('api.tracker.call', payload) as Promise<ApiCallResult>;\n }\n}\n\nexport const trackerApi = new TrackerApi();\n","import {\n ContentSizeUpdateRequest,\n type ContextLevel,\n type HostInitOptions,\n Theme,\n hostApi as hostApiBase,\n} from '@weavix/sdk-core';\nimport type { SlotContextMap } from '../types/SlotContextMap';\nimport type { PluginClosePayloadMap } from './types/ClosePluginPayload';\n\nexport type { HostInitOptions };\n\n/**\n * Типизированный интерфейс HostApi для публичного API публикуемого core'а.\n */\nexport interface HostApi<TSlot extends keyof SlotContextMap = keyof SlotContextMap> {\n /**\n * Текущая тема хоста\n */\n getTheme(): Promise<Theme>;\n\n /**\n * Текущий язык хоста\n */\n getLanguage(): Promise<string>;\n\n /**\n * Id пользователя\n */\n getUserId(): Promise<string>;\n\n /**\n * Сборка для ятима\n */\n getIsYateam(): Promise<boolean>;\n\n /**\n * Получить текущий контекст, в котором запущен плагин.\n * Тип возвращаемого значения зависит от слота.\n */\n getContext(): Promise<SlotContextMap[TSlot]>;\n\n /**\n * Изменить размер окна, в котором запущен плагин\n */\n updateContentSize(payload: ContentSizeUpdateRequest): Promise<void>;\n\n /**\n * Сообщить, что плагин готов к работе\n */\n notifyReady(): Promise<void>;\n\n /**\n * Сообщить, что плагин закрыт\n */\n close(payload: PluginClosePayloadMap[TSlot]): Promise<void>;\n\n /**\n * Инициализация плагина\n */\n init(options: HostInitOptions): void;\n\n /**\n * Текущий слот, в котором открыт плагин.\n * Вызов до init() приведёт к ошибке.\n */\n getSlot(): TSlot;\n\n /**\n * Сервис, в котором открылся плагин.\n * Вызов до init() приведёт к ошибке.\n */\n getService(): string;\n\n /**\n * Origin родительского окна (хоста).\n * Вызов до init() приведёт к ошибке.\n */\n getOrigin(): string;\n\n /**\n * Внутренний урл плагина.\n * Вызов до init() приведёт к ошибке.\n */\n getInnerUrl(): string;\n\n /**\n * Query-параметры плагина.\n * Вызов до init() приведёт к ошибке.\n */\n getQueryParams(): Record<string, string>;\n\n /**\n * Идентификатор сущности, переданный хостом в параметрах iframe.\n * Доступен сразу после init() без postMessage-запроса.\n */\n getEntityId(): string | null;\n\n /**\n * Метаданные сущности, переданные хостом в параметрах iframe.\n * Доступны сразу после init() без postMessage-запроса.\n */\n getEntityMeta(): Record<string, string> | undefined;\n\n /**\n * Уровень контекста, объявленный в манифесте плагина.\n * 'basic' — только entityId, 'full' — полный контекст слота.\n */\n getContextLevel(): ContextLevel;\n\n /**\n * Выключить автоматическое изменение размера контейнера\n */\n disableAutoResize(): void;\n}\n\nexport const hostApi = hostApiBase as unknown as HostApi;\n","import { getHandler as baseGetHandler, setHandler as baseSetHandler } from '@weavix/sdk-core';\nimport type { GetDataResultMap, HandlerFunction, Handlers } from './types';\n\n/**\n * Регистрирует обработчик. Тип возвращаемого значения задаётся слотом (GetDataResultMap).\n */\nexport function setHandler<TSlot extends keyof GetDataResultMap>(\n name: 'getData',\n handler: () => GetDataResultMap[TSlot],\n): void;\nexport function setHandler<TKey extends keyof Handlers>(\n name: TKey,\n handler: HandlerFunction<TKey>,\n): void;\nexport function setHandler(name: string, handler: (...args: unknown[]) => unknown): void {\n baseSetHandler(name, handler);\n}\n\n/**\n * Возвращает обработчик getData. При указании TSlot — () => GetDataResultMap[TSlot].\n */\nexport function getHandler<TSlot extends keyof GetDataResultMap>(\n name: 'getData',\n): (() => GetDataResultMap[TSlot]) | undefined;\nexport function getHandler<TKey extends keyof Handlers>(\n name: TKey,\n): HandlerFunction<TKey> | undefined;\nexport function getHandler(name: string): ((...args: unknown[]) => unknown) | undefined {\n return baseGetHandler(name);\n}\n","import {\n type LocalizedString as StructuralLocalizedString,\n getLocalizedString as baseGetLocalizedString,\n} from '@weavix/sdk-core';\nimport type { LocalizedString } from '../types/primitives';\n\n/**\n * Получить локализованную строку на основе языка.\n * Принимает `LocalizedString` из @weavix/tracker-core.\n */\nexport function getLocalizedString(\n value: LocalizedString,\n language: string | undefined,\n fallbackLanguage = 'ru',\n): string {\n return baseGetLocalizedString(value as StructuralLocalizedString, language, fallbackLanguage);\n}\n","import { VERSION_CONFLICT, sendRequest } from '@weavix/sdk-core';\n\nimport type { StorageRecord } from './types';\n\nexport type StorageData = Record<string, unknown>;\n\nexport type PatchOptions = {\n bucket?: string;\n data: StorageData;\n version?: number;\n};\n\nconst CONTEXT_TYPE = 'orgShared' as const;\nconst MAX_RETRIES = 2;\n\nasync function readRecord(bucket: string | undefined): Promise<StorageRecord | null> {\n const result = await sendRequest('storage.get', { contextType: CONTEXT_TYPE, bucket });\n\n return result as StorageRecord | null;\n}\n\nasync function patchRecord(\n bucket: string | undefined,\n data: StorageData,\n version: number,\n): Promise<StorageRecord> {\n const result = await sendRequest('storage.patch', {\n contextType: CONTEXT_TYPE,\n bucket,\n data,\n version,\n });\n\n return result as StorageRecord;\n}\n\nfunction isVersionConflict(err: unknown): boolean {\n return (\n typeof err === 'object' &&\n err !== null &&\n (err as { code?: unknown }).code === VERSION_CONFLICT\n );\n}\n\nfunction orgSharedGet(bucket?: string): Promise<StorageRecord | null> {\n return readRecord(bucket);\n}\n\nasync function orgSharedPatch({ bucket, data, version }: PatchOptions): Promise<StorageRecord> {\n if (version !== undefined) {\n return patchRecord(bucket, data, version);\n }\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt += 1) {\n const currentVersion = (await readRecord(bucket))?.version ?? 0;\n\n try {\n return await patchRecord(bucket, data, currentVersion);\n } catch (err) {\n if (!isVersionConflict(err)) throw err;\n lastError = err;\n\n if (attempt < MAX_RETRIES) {\n console.warn(\n `[storageApi] orgShared.patch: VERSION_CONFLICT on version ${currentVersion}, retry ${attempt + 1}/${MAX_RETRIES}`,\n );\n }\n }\n }\n\n throw lastError;\n}\n\nexport const storageApi = {\n orgShared: {\n get: orgSharedGet,\n patch: orgSharedPatch,\n },\n};\n"],"names":["buildPayload","method","url","options","version","_TrackerApi","self","_","path","payload","requestVersion","sendRequest","TrackerApi","trackerApi","hostApi","hostApiBase","setHandler","name","handler","baseSetHandler","getHandler","baseGetHandler","getLocalizedString","value","language","fallbackLanguage","baseGetLocalizedString","CONTEXT_TYPE","MAX_RETRIES","readRecord","bucket","patchRecord","data","isVersionConflict","err","VERSION_CONFLICT","orgSharedGet","orgSharedPatch","lastError","attempt","currentVersion","storageApi"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/api/trackerApiBase.ts","../src/host/hostApi.ts","../src/handlers/handlers.ts","../src/utils/localization.ts","../src/storage/storageApi.ts"],"sourcesContent":["import { sendRequest } from '@weavix/sdk-core';\nimport type { ApiCallPayload, ApiCallResult } from './types';\n\nexport interface TrackerApiCallOptions {\n pathParams?: Record<string, string>;\n queryParams?: Record<string, unknown>;\n bodyParams?: Record<string, unknown>;\n file?: File;\n}\n\nfunction buildPayload(\n method: string,\n url: string,\n options: TrackerApiCallOptions = {},\n version: string,\n): ApiCallPayload {\n return {\n version,\n method,\n url,\n pathParams: options.pathParams ?? {},\n queryParams: options.queryParams ?? {},\n bodyParams: options.bodyParams ?? {},\n file: options.file,\n };\n}\n\nexport interface TrackerApiInitOptions {\n apiVersion?: string;\n}\n\n/**\n * Untyped runtime API класс. v3-методы возвращают Proxy, который при обращении\n * по любому ключу строит call. Типизация добавляется в публикуемых пакетах\n * через cast (см. typed wrapper).\n */\nexport class TrackerApi {\n private static readonly V3_VERSION = 'v3';\n\n get v3(): {\n get: Record<string, (opts: TrackerApiCallOptions) => Promise<unknown>>;\n post: Record<string, (opts: TrackerApiCallOptions) => Promise<unknown>>;\n put: Record<string, (opts: TrackerApiCallOptions) => Promise<unknown>>;\n patch: Record<string, (opts: TrackerApiCallOptions) => Promise<unknown>>;\n delete: Record<string, (opts: TrackerApiCallOptions) => Promise<unknown>>;\n } {\n return {\n get: this.createMethodProxy('GET'),\n post: this.createMethodProxy('POST'),\n put: this.createMethodProxy('PUT'),\n patch: this.createMethodProxy('PATCH'),\n delete: this.createMethodProxy('DELETE'),\n };\n }\n\n private createMethodProxy(\n method: string,\n ): Record<string, (opts: TrackerApiCallOptions) => Promise<unknown>> {\n const self = this;\n return new Proxy({} as Record<string, (opts: TrackerApiCallOptions) => Promise<unknown>>, {\n get(_, path: string) {\n return (payload: TrackerApiCallOptions) =>\n self.call(method, path, payload, TrackerApi.V3_VERSION);\n },\n });\n }\n\n private call(\n method: string,\n url: string,\n options: TrackerApiCallOptions = {},\n requestVersion: string,\n ): Promise<ApiCallResult> {\n const payload: ApiCallPayload = buildPayload(method, url, options, requestVersion);\n return sendRequest('api.tracker.call', payload) as Promise<ApiCallResult>;\n }\n}\n\nexport const trackerApi = new TrackerApi();\n","import type {\n ContentSizeUpdateRequest,\n ContextLevel,\n ExternalApiAuthCheckAndRequestPayload,\n ExternalApiAuthCheckAndRequestResult,\n ExternalApiAuthGetStatusPayload,\n ExternalApiAuthGetStatusResult,\n ExternalApiAuthRequestPayload,\n ExternalApiAuthRequestResult,\n ExternalApiAuthRevokePayload,\n ExternalApiAuthRevokeResult,\n ExternalApiCallPayload,\n ExternalApiCallResult,\n HostInitOptions,\n Theme,\n} from '@weavix/sdk-core';\nimport { hostApi as hostApiBase } from '@weavix/sdk-core';\nimport type { SlotContextMap } from '../types/SlotContextMap';\nimport type { PluginClosePayloadMap } from './types/ClosePluginPayload';\n\nexport type { HostInitOptions };\n\n/**\n * Типизированный интерфейс HostApi для публичного API публикуемого core'а.\n */\nexport interface HostApi<TSlot extends keyof SlotContextMap = keyof SlotContextMap> {\n /**\n * Текущая тема хоста\n */\n getTheme(): Promise<Theme>;\n\n /**\n * Текущий язык хоста\n */\n getLanguage(): Promise<string>;\n\n /**\n * Id пользователя\n */\n getUserId(): Promise<string>;\n\n /**\n * Сборка для ятима\n */\n getIsYateam(): Promise<boolean>;\n\n /**\n * Получить текущий контекст, в котором запущен плагин.\n * Тип возвращаемого значения зависит от слота.\n */\n getContext(): Promise<SlotContextMap[TSlot]>;\n\n /**\n * Изменить размер окна, в котором запущен плагин\n */\n updateContentSize(payload: ContentSizeUpdateRequest): Promise<void>;\n\n /**\n * Сообщить, что плагин готов к работе\n */\n notifyReady(): Promise<void>;\n\n /**\n * Сообщить, что плагин закрыт\n */\n close(payload: PluginClosePayloadMap[TSlot]): Promise<void>;\n\n /**\n * Инициализация плагина\n */\n init(options: HostInitOptions): void;\n\n /**\n * Текущий слот, в котором открыт плагин.\n * Вызов до init() приведёт к ошибке.\n */\n getSlot(): TSlot;\n\n /**\n * Сервис, в котором открылся плагин.\n * Вызов до init() приведёт к ошибке.\n */\n getService(): string;\n\n /**\n * Origin родительского окна (хоста).\n * Вызов до init() приведёт к ошибке.\n */\n getOrigin(): string;\n\n /**\n * Внутренний урл плагина.\n * Вызов до init() приведёт к ошибке.\n */\n getInnerUrl(): string;\n\n /**\n * Query-параметры плагина.\n * Вызов до init() приведёт к ошибке.\n */\n getQueryParams(): Record<string, string>;\n\n /**\n * Идентификатор сущности, переданный хостом в параметрах iframe.\n * Доступен сразу после init() без postMessage-запроса.\n */\n getEntityId(): string | null;\n\n /**\n * Метаданные сущности, переданные хостом в параметрах iframe.\n * Доступны сразу после init() без postMessage-запроса.\n */\n getEntityMeta(): Record<string, string> | undefined;\n\n /**\n * Уровень контекста, объявленный в манифесте плагина.\n * 'basic' — только entityId, 'full' — полный контекст слота.\n */\n getContextLevel(): ContextLevel;\n\n /**\n * Выключить автоматическое изменение размера контейнера\n */\n disableAutoResize(): void;\n\n /**\n * Получить статус аутентификации по доменам плагина\n */\n externalApiAuthGetStatus(\n payload: ExternalApiAuthGetStatusPayload,\n ): Promise<ExternalApiAuthGetStatusResult>;\n\n /**\n * Отозвать аутентификацию для указанных доменов\n */\n externalApiAuthRevoke(\n payload: ExternalApiAuthRevokePayload,\n ): Promise<ExternalApiAuthRevokeResult>;\n\n /**\n * Запросить у пользователя данные для аутентификации по доменам\n */\n externalApiAuthRequest(\n payload: ExternalApiAuthRequestPayload,\n ): Promise<ExternalApiAuthRequestResult>;\n\n /**\n * Проверить статус аутентификации и запросить данные для неаутентифицированных доменов\n */\n externalApiAuthCheckAndRequest(\n payload: ExternalApiAuthCheckAndRequestPayload,\n ): Promise<ExternalApiAuthCheckAndRequestResult>;\n\n /**\n * Выполнить прокси-запрос к внешнему API\n */\n externalApiCall(payload: ExternalApiCallPayload): Promise<ExternalApiCallResult>;\n}\n\nexport const hostApi = hostApiBase as unknown as HostApi;\n","import { getHandler as baseGetHandler, setHandler as baseSetHandler } from '@weavix/sdk-core';\nimport type { GetDataResultMap, HandlerFunction, Handlers } from './types';\n\n/**\n * Регистрирует обработчик. Тип возвращаемого значения задаётся слотом (GetDataResultMap).\n */\nexport function setHandler<TSlot extends keyof GetDataResultMap>(\n name: 'getData',\n handler: () => GetDataResultMap[TSlot],\n): void;\nexport function setHandler<TKey extends keyof Handlers>(\n name: TKey,\n handler: HandlerFunction<TKey>,\n): void;\nexport function setHandler(name: string, handler: (...args: unknown[]) => unknown): void {\n baseSetHandler(name, handler);\n}\n\n/**\n * Возвращает обработчик getData. При указании TSlot — () => GetDataResultMap[TSlot].\n */\nexport function getHandler<TSlot extends keyof GetDataResultMap>(\n name: 'getData',\n): (() => GetDataResultMap[TSlot]) | undefined;\nexport function getHandler<TKey extends keyof Handlers>(\n name: TKey,\n): HandlerFunction<TKey> | undefined;\nexport function getHandler(name: string): ((...args: unknown[]) => unknown) | undefined {\n return baseGetHandler(name);\n}\n","import {\n type LocalizedString as StructuralLocalizedString,\n getLocalizedString as baseGetLocalizedString,\n} from '@weavix/sdk-core';\nimport type { LocalizedString } from '../types/primitives';\n\n/**\n * Получить локализованную строку на основе языка.\n * Принимает `LocalizedString` из @weavix/tracker-core.\n */\nexport function getLocalizedString(\n value: LocalizedString,\n language: string | undefined,\n fallbackLanguage = 'ru',\n): string {\n return baseGetLocalizedString(value as StructuralLocalizedString, language, fallbackLanguage);\n}\n","import { VERSION_CONFLICT, sendRequest } from '@weavix/sdk-core';\n\nimport type { StorageRecord } from './types';\n\nexport type StorageData = Record<string, unknown>;\n\nexport type PatchOptions = {\n bucket?: string;\n data: StorageData;\n version?: number;\n};\n\nconst CONTEXT_TYPE = 'orgShared' as const;\nconst MAX_RETRIES = 2;\n\nasync function readRecord(bucket: string | undefined): Promise<StorageRecord | null> {\n const result = await sendRequest('storage.get', { contextType: CONTEXT_TYPE, bucket });\n\n return result as StorageRecord | null;\n}\n\nasync function patchRecord(\n bucket: string | undefined,\n data: StorageData,\n version: number,\n): Promise<StorageRecord> {\n const result = await sendRequest('storage.patch', {\n contextType: CONTEXT_TYPE,\n bucket,\n data,\n version,\n });\n\n return result as StorageRecord;\n}\n\nfunction isVersionConflict(err: unknown): boolean {\n return (\n typeof err === 'object' &&\n err !== null &&\n (err as { code?: unknown }).code === VERSION_CONFLICT\n );\n}\n\nfunction orgSharedGet(bucket?: string): Promise<StorageRecord | null> {\n return readRecord(bucket);\n}\n\nasync function orgSharedPatch({ bucket, data, version }: PatchOptions): Promise<StorageRecord> {\n if (version !== undefined) {\n return patchRecord(bucket, data, version);\n }\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt += 1) {\n const currentVersion = (await readRecord(bucket))?.version ?? 0;\n\n try {\n return await patchRecord(bucket, data, currentVersion);\n } catch (err) {\n if (!isVersionConflict(err)) throw err;\n lastError = err;\n\n if (attempt < MAX_RETRIES) {\n console.warn(\n `[storageApi] orgShared.patch: VERSION_CONFLICT on version ${currentVersion}, retry ${attempt + 1}/${MAX_RETRIES}`,\n );\n }\n }\n }\n\n throw lastError;\n}\n\nexport const storageApi = {\n orgShared: {\n get: orgSharedGet,\n patch: orgSharedPatch,\n },\n};\n"],"names":["buildPayload","method","url","options","version","_TrackerApi","self","_","path","payload","requestVersion","sendRequest","TrackerApi","trackerApi","hostApi","hostApiBase","setHandler","name","handler","baseSetHandler","getHandler","baseGetHandler","getLocalizedString","value","language","fallbackLanguage","baseGetLocalizedString","CONTEXT_TYPE","MAX_RETRIES","readRecord","bucket","patchRecord","data","isVersionConflict","err","VERSION_CONFLICT","orgSharedGet","orgSharedPatch","lastError","attempt","currentVersion","storageApi"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@weavix/tracker-core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"exports": {
|
|
5
5
|
".": {
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"license": "UNLICENSED",
|
|
17
17
|
"description": "Shared TypeScript types and bridge layer for Tracker plugins",
|
|
18
18
|
"peerDependencies": {
|
|
19
|
-
"@weavix/sdk-core": "^0.0.
|
|
19
|
+
"@weavix/sdk-core": "^0.0.4"
|
|
20
20
|
},
|
|
21
21
|
"publishConfig": {
|
|
22
22
|
"registry": "https://registry.npmjs.org/",
|