@weavix/sdk-core 0.0.2 → 0.0.4

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.
Files changed (39) hide show
  1. package/dist/bridge/types/ErrorCodes.d.ts +8 -0
  2. package/dist/bridge/types/ErrorCodes.d.ts.map +1 -1
  3. package/dist/host/hostApi.d.ts +10 -0
  4. package/dist/host/hostApi.d.ts.map +1 -1
  5. package/dist/host/types/AuthContextType.d.ts +2 -0
  6. package/dist/host/types/AuthContextType.d.ts.map +1 -0
  7. package/dist/host/types/ExternalApiAuthCheckAndRequestPayload.d.ts +3 -0
  8. package/dist/host/types/ExternalApiAuthCheckAndRequestPayload.d.ts.map +1 -0
  9. package/dist/host/types/ExternalApiAuthCheckAndRequestResult.d.ts +4 -0
  10. package/dist/host/types/ExternalApiAuthCheckAndRequestResult.d.ts.map +1 -0
  11. package/dist/host/types/ExternalApiAuthGetStatusDomain.d.ts +7 -0
  12. package/dist/host/types/ExternalApiAuthGetStatusDomain.d.ts.map +1 -0
  13. package/dist/host/types/ExternalApiAuthGetStatusPayload.d.ts +6 -0
  14. package/dist/host/types/ExternalApiAuthGetStatusPayload.d.ts.map +1 -0
  15. package/dist/host/types/ExternalApiAuthGetStatusResult.d.ts +5 -0
  16. package/dist/host/types/ExternalApiAuthGetStatusResult.d.ts.map +1 -0
  17. package/dist/host/types/ExternalApiAuthRequestPayload.d.ts +5 -0
  18. package/dist/host/types/ExternalApiAuthRequestPayload.d.ts.map +1 -0
  19. package/dist/host/types/ExternalApiAuthRequestResult.d.ts +4 -0
  20. package/dist/host/types/ExternalApiAuthRequestResult.d.ts.map +1 -0
  21. package/dist/host/types/ExternalApiAuthRevokePayload.d.ts +6 -0
  22. package/dist/host/types/ExternalApiAuthRevokePayload.d.ts.map +1 -0
  23. package/dist/host/types/ExternalApiAuthRevokeResult.d.ts +4 -0
  24. package/dist/host/types/ExternalApiAuthRevokeResult.d.ts.map +1 -0
  25. package/dist/host/types/ExternalApiCallPayload.d.ts +11 -0
  26. package/dist/host/types/ExternalApiCallPayload.d.ts.map +1 -0
  27. package/dist/host/types/ExternalApiCallResult.d.ts +3 -0
  28. package/dist/host/types/ExternalApiCallResult.d.ts.map +1 -0
  29. package/dist/host/types/ExternalApiDomainInfo.d.ts +8 -0
  30. package/dist/host/types/ExternalApiDomainInfo.d.ts.map +1 -0
  31. package/dist/host/types/PluginProxyMethod.d.ts +2 -0
  32. package/dist/host/types/PluginProxyMethod.d.ts.map +1 -0
  33. package/dist/host/types/PluginProxyResponse.d.ts +6 -0
  34. package/dist/host/types/PluginProxyResponse.d.ts.map +1 -0
  35. package/dist/index.d.ts +15 -1
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.mjs +104 -85
  38. package/dist/index.mjs.map +1 -1
  39. package/package.json +1 -1
@@ -10,4 +10,12 @@ export declare const METHOD_NOT_SUPPORTED = 1003;
10
10
  export declare const MISSING_REQUIRED_SCOPE = 1004;
11
11
  /** Код ошибки: непредвиденная или неклассифицированная ошибка. */
12
12
  export declare const UNKNOWN_ERROR = 6666;
13
+ /** Storage record version does not match the current one. */
14
+ export declare const VERSION_CONFLICT = 1010;
15
+ /** Data size exceeds 256 KiB after the operation. */
16
+ export declare const DATA_TOO_LARGE = 1011;
17
+ /** bucket failed validation (format or length). */
18
+ export declare const BAD_KEY = 1012;
19
+ /** External api call failed. */
20
+ export declare const EXTERNAL_API_CALL_ERROR = 1013;
13
21
  //# sourceMappingURL=ErrorCodes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorCodes.d.ts","sourceRoot":"","sources":["../../../src/bridge/types/ErrorCodes.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,eAAO,MAAM,8BAA8B,OAAO,CAAC;AAEnD,wGAAwG;AACxG,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C,8GAA8G;AAC9G,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC,4FAA4F;AAC5F,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,yFAAyF;AACzF,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C,kEAAkE;AAClE,eAAO,MAAM,aAAa,OAAO,CAAC"}
1
+ {"version":3,"file":"ErrorCodes.d.ts","sourceRoot":"","sources":["../../../src/bridge/types/ErrorCodes.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,eAAO,MAAM,8BAA8B,OAAO,CAAC;AAEnD,wGAAwG;AACxG,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C,8GAA8G;AAC9G,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC,4FAA4F;AAC5F,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,yFAAyF;AACzF,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C,kEAAkE;AAClE,eAAO,MAAM,aAAa,OAAO,CAAC;AAElC,6DAA6D;AAC7D,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC,qDAAqD;AACrD,eAAO,MAAM,cAAc,OAAO,CAAC;AAEnC,mDAAmD;AACnD,eAAO,MAAM,OAAO,OAAO,CAAC;AAE5B,gCAAgC;AAChC,eAAO,MAAM,uBAAuB,OAAO,CAAC"}
@@ -1,4 +1,9 @@
1
1
  import { ContentSizeUpdateRequest } from './types/ContentSizeUpdateRequest';
2
+ import { ExternalApiAuthCheckAndRequestPayload } from './types/ExternalApiAuthCheckAndRequestPayload';
3
+ import { ExternalApiAuthGetStatusPayload } from './types/ExternalApiAuthGetStatusPayload';
4
+ import { ExternalApiAuthRequestPayload } from './types/ExternalApiAuthRequestPayload';
5
+ import { ExternalApiAuthRevokePayload } from './types/ExternalApiAuthRevokePayload';
6
+ import { ExternalApiCallPayload } from './types/ExternalApiCallPayload';
2
7
  export interface HostInitOptions {
3
8
  /**
4
9
  * Автоматически изменять размер контейнера плагина
@@ -45,6 +50,11 @@ export declare class HostApi {
45
50
  getEntityMeta(): Record<string, string> | undefined;
46
51
  getContextLevel(): ContextLevel;
47
52
  disableAutoResize(): void;
53
+ externalApiAuthGetStatus(payload: ExternalApiAuthGetStatusPayload): Promise<unknown>;
54
+ externalApiAuthRevoke(payload: ExternalApiAuthRevokePayload): Promise<unknown>;
55
+ externalApiAuthRequest(payload: ExternalApiAuthRequestPayload): Promise<unknown>;
56
+ externalApiAuthCheckAndRequest(payload: ExternalApiAuthCheckAndRequestPayload): Promise<unknown>;
57
+ externalApiCall(payload: ExternalApiCallPayload): Promise<unknown>;
48
58
  }
49
59
  export declare const hostApi: HostApi;
50
60
  //# sourceMappingURL=hostApi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hostApi.d.ts","sourceRoot":"","sources":["../../src/host/hostApi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAGjF,MAAM,WAAW,eAAe;IAC5B;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,CAAC;AAE5C,MAAM,MAAM,YAAY,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC,CAAC;AAEF,qBAAa,OAAO;IAChB,OAAO,CAAC,iBAAiB,CAAC,CAAoB;IAC9C,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,WAAW,CAAuC;IAC1D,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,UAAU,CAAiD;IACnE,OAAO,CAAC,YAAY,CAAwB;IAE5C,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAI5B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAI7B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAI9B,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;IAItE,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzC,IAAI,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAsDpC,OAAO,IAAI,MAAM;IAOjB,UAAU,IAAI,MAAM;IAOpB,SAAS,IAAI,MAAM;IAOnB,WAAW,IAAI,MAAM;IAOrB,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAOxC,WAAW,IAAI,MAAM,GAAG,IAAI;IAI5B,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS;IAInD,eAAe,IAAI,YAAY;IAI/B,iBAAiB,IAAI,IAAI;CAG5B;AAED,eAAO,MAAM,OAAO,SAAgB,CAAC"}
1
+ {"version":3,"file":"hostApi.d.ts","sourceRoot":"","sources":["../../src/host/hostApi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,+CAA+C,CAAC;AAC3G,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,yCAAyC,CAAC;AAC/F,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AAC3F,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AACzF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAG7E,MAAM,WAAW,eAAe;IAC5B;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,CAAC;AAE5C,MAAM,MAAM,YAAY,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC,CAAC;AAEF,qBAAa,OAAO;IAChB,OAAO,CAAC,iBAAiB,CAAC,CAAoB;IAC9C,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,WAAW,CAAuC;IAC1D,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,UAAU,CAAiD;IACnE,OAAO,CAAC,YAAY,CAAwB;IAE5C,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAI5B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAI7B,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAI9B,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;IAItE,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzC,IAAI,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAsDpC,OAAO,IAAI,MAAM;IAOjB,UAAU,IAAI,MAAM;IAOpB,SAAS,IAAI,MAAM;IAOnB,WAAW,IAAI,MAAM;IAOrB,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAOxC,WAAW,IAAI,MAAM,GAAG,IAAI;IAI5B,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS;IAInD,eAAe,IAAI,YAAY;IAI/B,iBAAiB,IAAI,IAAI;IAIzB,wBAAwB,CAAC,OAAO,EAAE,+BAA+B,GAAG,OAAO,CAAC,OAAO,CAAC;IAIpF,qBAAqB,CAAC,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAAC,OAAO,CAAC;IAI9E,sBAAsB,CAAC,OAAO,EAAE,6BAA6B,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhF,8BAA8B,CAC1B,OAAO,EAAE,qCAAqC,GAC/C,OAAO,CAAC,OAAO,CAAC;IAInB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,OAAO,CAAC;CAGrE;AAED,eAAO,MAAM,OAAO,SAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export type AuthContextType = 'user' | 'organization';
2
+ //# sourceMappingURL=AuthContextType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthContextType.d.ts","sourceRoot":"","sources":["../../../src/host/types/AuthContextType.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { ExternalApiAuthGetStatusPayload } from './ExternalApiAuthGetStatusPayload';
2
+ export type ExternalApiAuthCheckAndRequestPayload = ExternalApiAuthGetStatusPayload;
3
+ //# sourceMappingURL=ExternalApiAuthCheckAndRequestPayload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExternalApiAuthCheckAndRequestPayload.d.ts","sourceRoot":"","sources":["../../../src/host/types/ExternalApiAuthCheckAndRequestPayload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AAEzF,MAAM,MAAM,qCAAqC,GAAG,+BAA+B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export type ExternalApiAuthCheckAndRequestResult = {
2
+ success: boolean;
3
+ };
4
+ //# sourceMappingURL=ExternalApiAuthCheckAndRequestResult.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExternalApiAuthCheckAndRequestResult.d.ts","sourceRoot":"","sources":["../../../src/host/types/ExternalApiAuthCheckAndRequestResult.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oCAAoC,GAAG;IAC/C,OAAO,EAAE,OAAO,CAAC;CACpB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { AuthContextType } from './AuthContextType';
2
+ export type ExternalApiAuthGetStatusDomain = {
3
+ domain: string;
4
+ contextType: AuthContextType;
5
+ authenticated: boolean;
6
+ };
7
+ //# sourceMappingURL=ExternalApiAuthGetStatusDomain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExternalApiAuthGetStatusDomain.d.ts","sourceRoot":"","sources":["../../../src/host/types/ExternalApiAuthGetStatusDomain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,MAAM,8BAA8B,GAAG;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,eAAe,CAAC;IAC7B,aAAa,EAAE,OAAO,CAAC;CAC1B,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { AuthContextType } from './AuthContextType';
2
+ export type ExternalApiAuthGetStatusPayload = {
3
+ domains?: string[];
4
+ contextType?: AuthContextType;
5
+ };
6
+ //# sourceMappingURL=ExternalApiAuthGetStatusPayload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExternalApiAuthGetStatusPayload.d.ts","sourceRoot":"","sources":["../../../src/host/types/ExternalApiAuthGetStatusPayload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,MAAM,+BAA+B,GAAG;IAC1C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,eAAe,CAAC;CACjC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { ExternalApiAuthGetStatusDomain } from './ExternalApiAuthGetStatusDomain';
2
+ export type ExternalApiAuthGetStatusResult = {
3
+ domains: ExternalApiAuthGetStatusDomain[];
4
+ };
5
+ //# sourceMappingURL=ExternalApiAuthGetStatusResult.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExternalApiAuthGetStatusResult.d.ts","sourceRoot":"","sources":["../../../src/host/types/ExternalApiAuthGetStatusResult.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAEvF,MAAM,MAAM,8BAA8B,GAAG;IACzC,OAAO,EAAE,8BAA8B,EAAE,CAAC;CAC7C,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { ExternalApiDomainInfo } from './ExternalApiDomainInfo';
2
+ export type ExternalApiAuthRequestPayload = {
3
+ domains: ExternalApiDomainInfo[];
4
+ };
5
+ //# sourceMappingURL=ExternalApiAuthRequestPayload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExternalApiAuthRequestPayload.d.ts","sourceRoot":"","sources":["../../../src/host/types/ExternalApiAuthRequestPayload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,MAAM,6BAA6B,GAAG;IACxC,OAAO,EAAE,qBAAqB,EAAE,CAAC;CACpC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export type ExternalApiAuthRequestResult = {
2
+ success: boolean;
3
+ };
4
+ //# sourceMappingURL=ExternalApiAuthRequestResult.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExternalApiAuthRequestResult.d.ts","sourceRoot":"","sources":["../../../src/host/types/ExternalApiAuthRequestResult.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,4BAA4B,GAAG;IACvC,OAAO,EAAE,OAAO,CAAC;CACpB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { AuthContextType } from './AuthContextType';
2
+ export type ExternalApiAuthRevokePayload = {
3
+ domains: string[];
4
+ contextType?: AuthContextType;
5
+ };
6
+ //# sourceMappingURL=ExternalApiAuthRevokePayload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExternalApiAuthRevokePayload.d.ts","sourceRoot":"","sources":["../../../src/host/types/ExternalApiAuthRevokePayload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,MAAM,4BAA4B,GAAG;IACvC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,eAAe,CAAC;CACjC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export type ExternalApiAuthRevokeResult = {
2
+ success: boolean;
3
+ };
4
+ //# sourceMappingURL=ExternalApiAuthRevokeResult.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExternalApiAuthRevokeResult.d.ts","sourceRoot":"","sources":["../../../src/host/types/ExternalApiAuthRevokeResult.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,2BAA2B,GAAG;IACtC,OAAO,EAAE,OAAO,CAAC;CACpB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { AuthContextType } from './AuthContextType';
2
+ import { PluginProxyMethod } from './PluginProxyMethod';
3
+ export type ExternalApiCallPayload = {
4
+ url: string;
5
+ method: PluginProxyMethod;
6
+ headers?: Record<string, string>;
7
+ body?: Record<string, unknown>;
8
+ timeoutMs?: number;
9
+ contextType?: AuthContextType;
10
+ };
11
+ //# sourceMappingURL=ExternalApiCallPayload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExternalApiCallPayload.d.ts","sourceRoot":"","sources":["../../../src/host/types/ExternalApiCallPayload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,MAAM,sBAAsB,GAAG;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,eAAe,CAAC;CACjC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { PluginProxyResponse } from './PluginProxyResponse';
2
+ export type ExternalApiCallResult = PluginProxyResponse;
3
+ //# sourceMappingURL=ExternalApiCallResult.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExternalApiCallResult.d.ts","sourceRoot":"","sources":["../../../src/host/types/ExternalApiCallResult.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,MAAM,MAAM,qBAAqB,GAAG,mBAAmB,CAAC"}
@@ -0,0 +1,8 @@
1
+ export type ExternalApiDomainInfo = {
2
+ domain: string;
3
+ instructions?: string | {
4
+ en?: string;
5
+ ru?: string;
6
+ };
7
+ };
8
+ //# sourceMappingURL=ExternalApiDomainInfo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExternalApiDomainInfo.d.ts","sourceRoot":"","sources":["../../../src/host/types/ExternalApiDomainInfo.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EACP,MAAM,GACN;QACI,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,EAAE,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACX,CAAC"}
@@ -0,0 +1,2 @@
1
+ export type PluginProxyMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
2
+ //# sourceMappingURL=PluginProxyMethod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PluginProxyMethod.d.ts","sourceRoot":"","sources":["../../../src/host/types/PluginProxyMethod.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC"}
@@ -0,0 +1,6 @@
1
+ export type PluginProxyResponse = {
2
+ status: number;
3
+ headers?: Record<string, string>;
4
+ body?: Record<string, unknown>;
5
+ };
6
+ //# sourceMappingURL=PluginProxyResponse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PluginProxyResponse.d.ts","sourceRoot":"","sources":["../../../src/host/types/PluginProxyResponse.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { initBridge, sendRequest } from './bridge/bridge';
2
2
  export type { BaseMessage } from './bridge/types/BaseMessage';
3
- export { METHOD_NOT_SUPPORTED, MISSING_REQUIRED_SCOPE, PLUGIN_ID_IS_NOT_CORRECT, PLUGIN_ID_OR_SLOT_NOT_PROVIDED, UNKNOWN_ERROR, VALIDATION_ERROR, } from './bridge/types/ErrorCodes';
3
+ export { BAD_KEY, DATA_TOO_LARGE, EXTERNAL_API_CALL_ERROR, METHOD_NOT_SUPPORTED, MISSING_REQUIRED_SCOPE, PLUGIN_ID_IS_NOT_CORRECT, PLUGIN_ID_OR_SLOT_NOT_PROVIDED, UNKNOWN_ERROR, VALIDATION_ERROR, VERSION_CONFLICT, } from './bridge/types/ErrorCodes';
4
4
  export { PluginActionError } from './bridge/types/PluginActionError';
5
5
  export type { PluginConfirmPayload, PluginToastAction, PluginToastPayload, UiContract, } from './bridge/types/UiContract';
6
6
  export { getHandler, setHandler } from './handlers/handlers';
@@ -18,6 +18,20 @@ export { AutoResizeManager } from './host/utils/autoResize';
18
18
  export type { ResizeCallback } from './host/utils/autoResize';
19
19
  export type { ContentSizeUpdateRequest, ContentSizeUpdateRequestUnit, } from './host/types/ContentSizeUpdateRequest';
20
20
  export type { NavigateRequest } from './host/types/NavigateRequest';
21
+ export type { AuthContextType } from './host/types/AuthContextType';
22
+ export type { PluginProxyMethod } from './host/types/PluginProxyMethod';
23
+ export type { PluginProxyResponse } from './host/types/PluginProxyResponse';
24
+ export type { ExternalApiAuthGetStatusPayload } from './host/types/ExternalApiAuthGetStatusPayload';
25
+ export type { ExternalApiAuthGetStatusDomain } from './host/types/ExternalApiAuthGetStatusDomain';
26
+ export type { ExternalApiAuthGetStatusResult } from './host/types/ExternalApiAuthGetStatusResult';
27
+ export type { ExternalApiAuthRevokePayload } from './host/types/ExternalApiAuthRevokePayload';
28
+ export type { ExternalApiAuthRevokeResult } from './host/types/ExternalApiAuthRevokeResult';
29
+ export type { ExternalApiAuthRequestPayload } from './host/types/ExternalApiAuthRequestPayload';
30
+ export type { ExternalApiAuthRequestResult } from './host/types/ExternalApiAuthRequestResult';
31
+ export type { ExternalApiAuthCheckAndRequestPayload } from './host/types/ExternalApiAuthCheckAndRequestPayload';
32
+ export type { ExternalApiAuthCheckAndRequestResult } from './host/types/ExternalApiAuthCheckAndRequestResult';
33
+ export type { ExternalApiCallPayload } from './host/types/ExternalApiCallPayload';
34
+ export type { ExternalApiCallResult } from './host/types/ExternalApiCallResult';
21
35
  export type { Theme } from './common/types/Theme';
22
36
  export { HostApi, hostApi } from './host/hostApi';
23
37
  export type { BasicContext, ContextLevel, HostInitOptions } from './host/hostApi';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG1D,YAAY,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EACH,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,8BAA8B,EAC9B,aAAa,EACb,gBAAgB,GACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,YAAY,EACR,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,GACb,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAG7D,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACnF,YAAY,EACR,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,WAAW,GACd,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EACR,wBAAwB,EACxB,4BAA4B,GAC/B,MAAM,uCAAuC,CAAC;AAC/C,YAAY,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,YAAY,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAGlD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG1D,YAAY,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EACH,OAAO,EACP,cAAc,EACd,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,8BAA8B,EAC9B,aAAa,EACb,gBAAgB,EAChB,gBAAgB,GACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,YAAY,EACR,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,GACb,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAG7D,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACnF,YAAY,EACR,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,WAAW,GACd,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EACR,wBAAwB,EACxB,4BAA4B,GAC/B,MAAM,uCAAuC,CAAC;AAC/C,YAAY,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,YAAY,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACxE,YAAY,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,YAAY,EAAE,+BAA+B,EAAE,MAAM,8CAA8C,CAAC;AACpG,YAAY,EAAE,8BAA8B,EAAE,MAAM,6CAA6C,CAAC;AAClG,YAAY,EAAE,8BAA8B,EAAE,MAAM,6CAA6C,CAAC;AAClG,YAAY,EAAE,4BAA4B,EAAE,MAAM,2CAA2C,CAAC;AAC9F,YAAY,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AAC5F,YAAY,EAAE,6BAA6B,EAAE,MAAM,4CAA4C,CAAC;AAChG,YAAY,EAAE,4BAA4B,EAAE,MAAM,2CAA2C,CAAC;AAC9F,YAAY,EAAE,qCAAqC,EAAE,MAAM,oDAAoD,CAAC;AAChH,YAAY,EAAE,oCAAoC,EAAE,MAAM,mDAAmD,CAAC;AAC9G,YAAY,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAClF,YAAY,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAGhF,YAAY,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAGlD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/index.mjs CHANGED
@@ -13,7 +13,7 @@ function w(i, e) {
13
13
  t.delete(s), t.size === 0 && g.delete(i);
14
14
  };
15
15
  }
16
- function R(i) {
16
+ function b(i) {
17
17
  const e = i.method;
18
18
  m.set(e, i.result);
19
19
  const t = g.get(e);
@@ -25,44 +25,44 @@ function R(i) {
25
25
  console.error(`[EventBus] Error in subscriber for "${i.method}":`, n);
26
26
  }
27
27
  }
28
- function _() {
28
+ function U() {
29
29
  m.clear(), g.clear();
30
30
  }
31
- const P = {
31
+ const q = {
32
32
  on(i, e) {
33
33
  return w(i, e);
34
34
  }
35
35
  }, E = {};
36
- function H(i, e) {
36
+ function P(i, e) {
37
37
  E[i] = e;
38
38
  }
39
- function S(i) {
39
+ function A(i) {
40
40
  return E[i];
41
41
  }
42
- const q = 1e3, N = 1001, B = 1002, k = 1003, D = 1004, I = 6666;
42
+ const x = 1e3, H = 1001, N = 1002, k = 1003, B = 1004, I = 6666, D = 1010, F = 1011, G = 1012, X = 1013;
43
43
  class y extends Error {
44
44
  constructor(e, t, s) {
45
45
  super(t), this.name = "PluginActionError", this.code = e, this.errorData = s;
46
46
  }
47
47
  }
48
- class v {
48
+ class S {
49
49
  constructor(e, t, s, n, r, o) {
50
50
  this.pendingRequests = /* @__PURE__ */ new Map(), this.messageListener = null, this.requestTimeout = 1e4, this.pluginId = e, this.elementId = t, this.targetOrigin = r, this.entityId = n, this.entityMeta = o, this.slot = s, this.initListener();
51
51
  }
52
52
  request(e, t, s) {
53
53
  return new Promise((n, r) => {
54
- const o = this.generateMessageId(), c = s?.timeout ?? this.requestTimeout, l = {
54
+ const o = this.generateMessageId(), l = s?.timeout ?? this.requestTimeout, u = {
55
55
  messageId: o,
56
56
  method: e,
57
57
  payload: t
58
- }, a = setTimeout(() => {
59
- this.pendingRequests.get(o) && (this.pendingRequests.delete(o), r(new Error(`Request timeout: ${e} exceeded ${c}ms`)));
60
- }, c);
61
- this.pendingRequests.set(o, { resolve: n, reject: r, timeoutId: a });
58
+ }, c = setTimeout(() => {
59
+ this.pendingRequests.get(o) && (this.pendingRequests.delete(o), r(new Error(`Request timeout: ${e} exceeded ${l}ms`)));
60
+ }, l);
61
+ this.pendingRequests.set(o, { resolve: n, reject: r, timeoutId: c });
62
62
  try {
63
- this.send(l);
63
+ this.send(u);
64
64
  } catch (d) {
65
- clearTimeout(a), this.pendingRequests.delete(o), r(d);
65
+ clearTimeout(c), this.pendingRequests.delete(o), r(d);
66
66
  }
67
67
  });
68
68
  }
@@ -98,7 +98,7 @@ class v {
98
98
  }
99
99
  const t = e.data;
100
100
  if (console.info("[Bridge] Received message:", t), t.type === "event") {
101
- console.info("[Bridge] Dispatching host event:", t.method, t.result), R(t);
101
+ console.info("[Bridge] Dispatching host event:", t.method, t.result), b(t);
102
102
  return;
103
103
  }
104
104
  if (console.info("[Bridge] Received message:", e.data), !t.messageId) {
@@ -108,32 +108,32 @@ class v {
108
108
  const s = t, n = this.pendingRequests.get(s.messageId);
109
109
  if (!n) {
110
110
  if (s.type === "request") {
111
- const c = s.result.method, l = S(c);
112
- if (!l) {
111
+ const l = s.result.method, u = A(l);
112
+ if (!u) {
113
113
  this.send({
114
114
  messageId: s.messageId,
115
115
  type: "response",
116
116
  result: null,
117
117
  errorCode: I,
118
- error: `No handler for method ${c}`
118
+ error: `No handler for method ${l}`
119
119
  });
120
120
  return;
121
121
  }
122
122
  try {
123
- const a = l();
123
+ const c = u();
124
124
  this.send({
125
125
  messageId: s.messageId,
126
- payload: a,
126
+ payload: c,
127
127
  method: "responseData",
128
128
  type: "response"
129
129
  });
130
- } catch (a) {
131
- const d = a instanceof Error ? a : new Error(String(a)), f = d instanceof y ? d.code : I;
130
+ } catch (c) {
131
+ const d = c instanceof Error ? c : new Error(String(c)), p = d instanceof y ? d.code : I;
132
132
  this.send({
133
133
  messageId: s.messageId,
134
134
  type: "response",
135
135
  result: null,
136
- errorCode: f,
136
+ errorCode: p,
137
137
  error: d.message
138
138
  });
139
139
  }
@@ -156,8 +156,8 @@ class v {
156
156
  }
157
157
  }
158
158
  let h = null;
159
- function M(i, e, t, s, n, r) {
160
- return h && h.destroy(), h = new v(
159
+ function v(i, e, t, s, n, r) {
160
+ return h && h.destroy(), h = new S(
161
161
  i,
162
162
  e,
163
163
  t,
@@ -171,14 +171,14 @@ function C() {
171
171
  throw new Error("Bridge not initialized. Call initBridge first.");
172
172
  return h;
173
173
  }
174
- function u(i, e, t) {
174
+ function a(i, e, t) {
175
175
  return C().request(i, e, t);
176
176
  }
177
- const O = 3e5;
178
- class T {
177
+ const M = 3e5;
178
+ class O {
179
179
  show(e) {
180
- return u("confirm.show", e, {
181
- timeout: O
180
+ return a("confirm.show", e, {
181
+ timeout: M
182
182
  });
183
183
  }
184
184
  }
@@ -189,9 +189,9 @@ class L {
189
189
  async add(e) {
190
190
  this.ensureEventSubscription();
191
191
  const t = [], s = e.actions?.map((o) => {
192
- const c = crypto.randomUUID();
193
- return this.callbackMap.set(c, o.onClick), t.push(c), { id: c, label: o.label };
194
- }), n = await u("toast.add", {
192
+ const l = crypto.randomUUID();
193
+ return this.callbackMap.set(l, o.onClick), t.push(l), { id: l, label: o.label };
194
+ }), n = await a("toast.add", {
195
195
  name: e.name,
196
196
  title: e.title,
197
197
  content: e.content,
@@ -218,16 +218,16 @@ class L {
218
218
  }
219
219
  }
220
220
  }
221
- class z {
221
+ class T {
222
222
  constructor() {
223
- this.toaster = new L(), this.confirm = new T();
223
+ this.toaster = new L(), this.confirm = new O();
224
224
  }
225
225
  navigate(e) {
226
- return u("navigate", e);
226
+ return a("navigate", e);
227
227
  }
228
228
  }
229
- const x = new z();
230
- function F(i, e, t) {
229
+ const $ = new T();
230
+ function V(i, e, t) {
231
231
  if (e === "")
232
232
  return t;
233
233
  const s = e.split(".");
@@ -239,13 +239,13 @@ function F(i, e, t) {
239
239
  return t;
240
240
  return n ?? t;
241
241
  }
242
- function $(i, e, t = "ru") {
242
+ function Y(i, e, t = "ru") {
243
243
  if (typeof i == "string")
244
244
  return i;
245
245
  const s = (e ?? t).toLowerCase(), n = t.toLowerCase();
246
246
  return i[s] || i[n] || i.ru || i.en || "";
247
247
  }
248
- class A {
248
+ class _ {
249
249
  constructor(e) {
250
250
  this.lastHeight = 0, this.isUpdating = !1, this.consecutiveSmallIncreases = 0, this.MAX_CONSECUTIVE_SMALL_INCREASES = 5, this.SMALL_INCREASE_THRESHOLD_PX = 10, this.resizeCallback = e;
251
251
  }
@@ -257,14 +257,14 @@ class A {
257
257
  const e = async () => {
258
258
  if (this.isUpdating)
259
259
  return;
260
- const s = document.getElementById("root"), n = window.getComputedStyle(document.body), r = parseInt(n.marginTop, 10) || 0, o = parseInt(n.marginBottom, 10) || 0, l = Math.max(
260
+ const s = document.getElementById("root"), n = window.getComputedStyle(document.body), r = parseInt(n.marginTop, 10) || 0, o = parseInt(n.marginBottom, 10) || 0, u = Math.max(
261
261
  document.body.scrollHeight,
262
262
  document.body.offsetHeight,
263
263
  s ? s.scrollHeight + r + o : 0
264
264
  ) + 4;
265
- if (l !== this.lastHeight) {
266
- if (l > this.lastHeight)
267
- if (l - this.lastHeight <= this.SMALL_INCREASE_THRESHOLD_PX) {
265
+ if (u !== this.lastHeight) {
266
+ if (u > this.lastHeight)
267
+ if (u - this.lastHeight <= this.SMALL_INCREASE_THRESHOLD_PX) {
268
268
  if (this.consecutiveSmallIncreases++, this.consecutiveSmallIncreases > this.MAX_CONSECUTIVE_SMALL_INCREASES) {
269
269
  console.warn(
270
270
  "[AutoResize] Infinite loop detected. Stopping auto-resize. This may be caused by elements with viewport-relative units (vh, %)."
@@ -275,11 +275,11 @@ class A {
275
275
  this.consecutiveSmallIncreases = 0;
276
276
  else
277
277
  this.consecutiveSmallIncreases = 0;
278
- this.isUpdating = !0, this.lastHeight = l;
278
+ this.isUpdating = !0, this.lastHeight = u;
279
279
  try {
280
- await this.resizeCallback(l);
281
- } catch (a) {
282
- console.error("[AutoResize] Failed to update content size:", a);
280
+ await this.resizeCallback(u);
281
+ } catch (c) {
282
+ console.error("[AutoResize] Failed to update content size:", c);
283
283
  } finally {
284
284
  this.isUpdating = !1;
285
285
  }
@@ -293,33 +293,33 @@ class A {
293
293
  this.resizeObserver?.disconnect(), clearTimeout(this.resizeTimeout), this.isUpdating = !1, this.consecutiveSmallIncreases = 0;
294
294
  }
295
295
  }
296
- class U {
296
+ class z {
297
297
  constructor() {
298
298
  this.slot = null, this.service = null, this.origin = null, this.innerUrl = null, this.queryParams = null, this.entityId = null, this.entityMeta = void 0, this.contextLevel = "full";
299
299
  }
300
300
  getTheme() {
301
- return u("theme.get");
301
+ return a("theme.get");
302
302
  }
303
303
  getLanguage() {
304
- return u("language.get");
304
+ return a("language.get");
305
305
  }
306
306
  getUserId() {
307
- return u("userId.get");
307
+ return a("userId.get");
308
308
  }
309
309
  getIsYateam() {
310
- return u("isYateam.get");
310
+ return a("isYateam.get");
311
311
  }
312
312
  getContext() {
313
- return u("context.get");
313
+ return a("context.get");
314
314
  }
315
315
  updateContentSize(e) {
316
- return u("contentSize.update", e);
316
+ return a("contentSize.update", e);
317
317
  }
318
318
  notifyReady() {
319
- return u("plugin.ready");
319
+ return a("plugin.ready");
320
320
  }
321
321
  close(e) {
322
- return u("plugin.close", e);
322
+ return a("plugin.close", e);
323
323
  }
324
324
  init(e) {
325
325
  const { autoResize: t = !0 } = e, s = new URLSearchParams(location.search);
@@ -336,16 +336,16 @@ class U {
336
336
  const o = s.get("id");
337
337
  if (!o)
338
338
  throw new Error("Plugin id is not defined");
339
- const c = s.get("elementId");
340
- if (!c)
339
+ const l = s.get("elementId");
340
+ if (!l)
341
341
  throw new Error("Element id is not defined");
342
- const l = s.get("entityId"), a = s.get("entityMeta"), d = a ? JSON.parse(a) : void 0;
343
- M(o, c, n, l, r, d), this.slot = n, this.origin = r, this.entityId = l, this.entityMeta = d;
344
- const f = s.get("contextLevel");
345
- this.contextLevel = f === "basic" ? "basic" : "full", this.innerUrl = s.get("innerUrl") ?? "";
346
- const p = s.get("queryParams");
347
- this.queryParams = p ? JSON.parse(decodeURIComponent(p)) : {}, t && (this.autoResizeManager = new A(
348
- (b) => this.updateContentSize({ height: b })
342
+ const u = s.get("entityId"), c = s.get("entityMeta"), d = c ? JSON.parse(c) : void 0;
343
+ v(o, l, n, u, r, d), this.slot = n, this.origin = r, this.entityId = u, this.entityMeta = d;
344
+ const p = s.get("contextLevel");
345
+ this.contextLevel = p === "basic" ? "basic" : "full", this.innerUrl = s.get("innerUrl") ?? "";
346
+ const f = s.get("queryParams");
347
+ this.queryParams = f ? JSON.parse(decodeURIComponent(f)) : {}, t && (this.autoResizeManager = new _(
348
+ (R) => this.updateContentSize({ height: R })
349
349
  ), this.autoResizeManager.enable());
350
350
  }
351
351
  getSlot() {
@@ -385,31 +385,50 @@ class U {
385
385
  disableAutoResize() {
386
386
  this.autoResizeManager?.disable();
387
387
  }
388
+ externalApiAuthGetStatus(e) {
389
+ return a("externalApi.auth.getStatus", e);
390
+ }
391
+ externalApiAuthRevoke(e) {
392
+ return a("externalApi.auth.revoke", e);
393
+ }
394
+ externalApiAuthRequest(e) {
395
+ return a("externalApi.auth.request", e);
396
+ }
397
+ externalApiAuthCheckAndRequest(e) {
398
+ return a("externalApi.auth.checkAndRequest", e);
399
+ }
400
+ externalApiCall(e) {
401
+ return a("externalApi.call", e);
402
+ }
388
403
  }
389
- const X = new U();
404
+ const J = new z();
390
405
  export {
391
- A as AutoResizeManager,
392
- T as Confirm,
393
- U as HostApi,
406
+ _ as AutoResizeManager,
407
+ G as BAD_KEY,
408
+ O as Confirm,
409
+ F as DATA_TOO_LARGE,
410
+ X as EXTERNAL_API_CALL_ERROR,
411
+ z as HostApi,
394
412
  k as METHOD_NOT_SUPPORTED,
395
- D as MISSING_REQUIRED_SCOPE,
396
- N as PLUGIN_ID_IS_NOT_CORRECT,
397
- q as PLUGIN_ID_OR_SLOT_NOT_PROVIDED,
413
+ B as MISSING_REQUIRED_SCOPE,
414
+ H as PLUGIN_ID_IS_NOT_CORRECT,
415
+ x as PLUGIN_ID_OR_SLOT_NOT_PROVIDED,
398
416
  y as PluginActionError,
399
417
  L as Toaster,
400
418
  I as UNKNOWN_ERROR,
401
- B as VALIDATION_ERROR,
402
- R as dispatchHostEvent,
403
- P as eventBus,
404
- F as getField,
405
- S as getHandler,
406
- $ as getLocalizedString,
407
- X as hostApi,
408
- M as initBridge,
419
+ N as VALIDATION_ERROR,
420
+ D as VERSION_CONFLICT,
421
+ b as dispatchHostEvent,
422
+ q as eventBus,
423
+ V as getField,
424
+ A as getHandler,
425
+ Y as getLocalizedString,
426
+ J as hostApi,
427
+ v as initBridge,
409
428
  w as on,
410
- _ as resetEventBus,
411
- u as sendRequest,
412
- H as setHandler,
413
- x as uiApi
429
+ U as resetEventBus,
430
+ a as sendRequest,
431
+ P as setHandler,
432
+ $ as uiApi
414
433
  };
415
434
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/events/eventBus.ts","../src/handlers/handlers.ts","../src/bridge/types/ErrorCodes.ts","../src/bridge/types/PluginActionError.ts","../src/bridge/bridge.ts","../src/ui/Confirm.ts","../src/ui/Toaster.ts","../src/ui/uiApi.ts","../src/utils/getField.ts","../src/utils/localization.ts","../src/host/utils/autoResize.ts","../src/host/hostApi.ts"],"sourcesContent":["import type {\n EventMessage,\n HostEventCallback,\n HostEventContract,\n HostEventMethod,\n Unsubscribe,\n} from './types';\n\nconst subscribers = new Map<HostEventMethod, Set<(result: unknown) => void>>();\nconst lastValues = new Map<HostEventMethod, unknown>();\n\n/**\n * Subscribe to a host-pushed event.\n * If a value was already dispatched for this method, the callback is called\n * synchronously with the cached value before returning.\n * @param method - Event method name (e.g. `'theme.changed'`)\n * @param callback - Function called with the typed event payload\n * @returns An `Unsubscribe` function that removes this subscription\n */\nexport function on<M extends HostEventMethod>(\n method: M,\n callback: HostEventCallback<M>,\n): Unsubscribe {\n let set = subscribers.get(method);\n if (!set) {\n set = new Set();\n subscribers.set(method, set);\n }\n\n const cb = callback as (result: unknown) => void;\n set.add(cb);\n\n // Replay last known value to the new subscriber immediately\n if (lastValues.has(method)) {\n try {\n // eslint-disable-next-line callback-return -- sync replay to new subscriber; return value unused\n cb(lastValues.get(method));\n } catch (err) {\n console.error(`[EventBus] Error replaying cached value for \"${method}\":`, err);\n }\n }\n\n return () => {\n set.delete(cb);\n if (set.size === 0) {\n subscribers.delete(method);\n }\n };\n}\n\n/**\n * Dispatch an incoming event message to all registered subscribers.\n * Caches the value so late subscribers receive it on subscription.\n */\nexport function dispatchHostEvent(message: EventMessage): void {\n const method = message.method as HostEventMethod;\n lastValues.set(method, message.result);\n\n const set = subscribers.get(method);\n if (!set) {\n return;\n }\n for (const cb of set) {\n try {\n // eslint-disable-next-line callback-return -- notify subscribers; return value unused\n cb(message.result);\n } catch (err) {\n console.error(`[EventBus] Error in subscriber for \"${message.method}\":`, err);\n }\n }\n}\n\n/**\n * Clears all cached last values and subscribers from the event bus.\n * Intended for use in tests to prevent state leaking between test cases.\n */\nexport function resetEventBus(): void {\n lastValues.clear();\n subscribers.clear();\n}\n\n/**\n * Public event emitter — subscribe to host-pushed events.\n * Only events defined in `HostEventContract` are accepted.\n * @example\n * ```ts\n * import { eventBus } from '@yandex-data-ui/tracker-plugin-sdk-core';\n *\n * const unsubscribe = eventBus.on('theme.changed', (theme) => {\n * console.log('Theme:', theme);\n * });\n *\n * unsubscribe();\n * ```\n */\nexport const eventBus = {\n on<M extends HostEventMethod>(\n method: M,\n callback: (result: HostEventContract[M]['result']) => void,\n ): Unsubscribe {\n return on(method, callback);\n },\n};\n","type AnyHandler = (...args: unknown[]) => unknown;\n\nconst handlers: Record<string, AnyHandler> = {};\n\n/**\n * Регистрирует handler по имени. Тип не проверяется на runtime'е;\n * type-safety обеспечивается typed wrapper'ом в публикуемых пакетах.\n */\nexport function setHandler(name: string, handler: AnyHandler): void {\n handlers[name] = handler;\n}\n\n/**\n * Возвращает зарегистрированный handler по имени, или undefined.\n */\nexport function getHandler(name: string): AnyHandler | undefined {\n return handlers[name];\n}\n","/** Код ошибки: не переданы обязательные параметры инициализации плагина (pluginId или slot). */\nexport const PLUGIN_ID_OR_SLOT_NOT_PROVIDED = 1000;\n\n/** Код ошибки: переданный pluginId не совпадает с зарегистрированным плагином или неверного формата. */\nexport const PLUGIN_ID_IS_NOT_CORRECT = 1001;\n\n/** Код ошибки: данные запроса не прошли валидацию (неверный формат, обязательные поля отсутствуют и т.п.). */\nexport const VALIDATION_ERROR = 1002;\n\n/** Код ошибки: запрошенный метод API не поддерживается в данной конфигурации или версии. */\nexport const METHOD_NOT_SUPPORTED = 1003;\n\n/** Код ошибки: у плагина нет необходимого scope (разрешения) для выполнения операции. */\nexport const MISSING_REQUIRED_SCOPE = 1004;\n\n/** Код ошибки: непредвиденная или неклассифицированная ошибка. */\nexport const UNKNOWN_ERROR = 6666;\n","export class PluginActionError extends Error {\n readonly code: number;\n\n readonly errorData?: unknown;\n\n constructor(code: number, message: string, errorData?: unknown) {\n super(message);\n this.name = 'PluginActionError';\n this.code = code;\n this.errorData = errorData;\n }\n}\n","import { dispatchHostEvent } from '../events/eventBus';\nimport type { EventMessage } from '../events/types';\nimport { getHandler } from '../handlers/handlers';\nimport { UNKNOWN_ERROR } from './types/ErrorCodes';\nimport type { BaseMessage } from './types/BaseMessage';\nimport { PluginActionError } from './types/PluginActionError';\n\ntype RequestOptions = { timeout?: number };\n\ntype PendingRequest = {\n resolve: (value: unknown) => void;\n reject: (error: Error) => void;\n timeoutId: ReturnType<typeof setTimeout>;\n};\n\ntype RawRequestMessage = BaseMessage & {\n method: string;\n payload: unknown;\n};\n\ntype RawResponseMessage = BaseMessage & {\n type: 'response';\n result: unknown;\n error?: string;\n errorCode?: number;\n errorData?: unknown;\n};\n\ntype RawIncomingRequestMessage = BaseMessage & {\n type: 'request';\n result: { method: string; payload: unknown };\n error?: string;\n};\n\nclass PluginBridge {\n private pluginId: string;\n private elementId: string;\n private targetOrigin: string;\n private slot: string;\n private entityId: string | null;\n private entityMeta: Record<string, string> | undefined;\n private pendingRequests: Map<string, PendingRequest> = new Map();\n private messageListener: ((event: MessageEvent) => void) | null = null;\n private readonly requestTimeout = 10000;\n\n constructor(\n pluginId: string,\n elementId: string,\n slot: string,\n entityId: string | null,\n targetOrigin: string,\n entityMeta?: Record<string, string>,\n ) {\n this.pluginId = pluginId;\n this.elementId = elementId;\n this.targetOrigin = targetOrigin;\n this.entityId = entityId;\n this.entityMeta = entityMeta;\n this.slot = slot;\n this.initListener();\n }\n\n request(method: string, payload?: unknown, options?: RequestOptions): Promise<unknown> {\n return new Promise((resolve, reject) => {\n const messageId = this.generateMessageId();\n const timeoutMs = options?.timeout ?? this.requestTimeout;\n\n const requestMessage: RawRequestMessage = {\n messageId,\n method,\n payload,\n };\n\n const timeoutId = setTimeout(() => {\n const pending = this.pendingRequests.get(messageId);\n if (pending) {\n this.pendingRequests.delete(messageId);\n reject(new Error(`Request timeout: ${method} exceeded ${timeoutMs}ms`));\n }\n }, timeoutMs);\n\n this.pendingRequests.set(messageId, { resolve, reject, timeoutId });\n\n try {\n this.send(requestMessage);\n } catch (e) {\n clearTimeout(timeoutId);\n this.pendingRequests.delete(messageId);\n reject(e as Error);\n }\n });\n }\n\n send<T = unknown>(message: T): void {\n window.parent.postMessage(\n {\n pluginId: this.pluginId,\n elementId: this.elementId,\n slot: this.slot,\n entityId: this.entityId,\n entityMeta: this.entityMeta,\n ...message,\n },\n this.targetOrigin,\n );\n }\n\n destroy(): void {\n if (this.messageListener) {\n window.removeEventListener('message', this.messageListener);\n this.messageListener = null;\n }\n\n this.pendingRequests.forEach((pending) => {\n clearTimeout(pending.timeoutId);\n });\n this.pendingRequests.clear();\n }\n\n private initListener(): void {\n this.messageListener = async (event: MessageEvent) => {\n if (event.origin !== this.targetOrigin) {\n console.info(\n '[Bridge] Ignored message from origin:',\n event.origin,\n '(expected:',\n this.targetOrigin,\n ')',\n );\n return;\n }\n\n const message = event.data;\n console.info('[Bridge] Received message:', message);\n\n if (message.type === 'event') {\n console.info('[Bridge] Dispatching host event:', message.method, message.result);\n dispatchHostEvent(message as EventMessage);\n return;\n }\n\n console.info('[Bridge] Received message:', event.data);\n\n if (!message.messageId) {\n console.info('[Bridge] Ignored message without messageId:', message);\n return;\n }\n\n const typedMessage = message as RawResponseMessage | RawIncomingRequestMessage;\n const pending = this.pendingRequests.get(typedMessage.messageId);\n\n if (!pending) {\n if (typedMessage.type === 'request') {\n const incoming = typedMessage as RawIncomingRequestMessage;\n const method = incoming.result.method;\n const handler = getHandler(method);\n\n if (!handler) {\n this.send({\n messageId: typedMessage.messageId,\n type: 'response',\n result: null,\n errorCode: UNKNOWN_ERROR,\n error: `No handler for method ${method}`,\n });\n return;\n }\n\n try {\n const data = handler();\n this.send({\n messageId: typedMessage.messageId,\n payload: data,\n method: 'responseData',\n type: 'response',\n });\n } catch (e) {\n const err = e instanceof Error ? e : new Error(String(e));\n const errorCode =\n err instanceof PluginActionError ? err.code : UNKNOWN_ERROR;\n this.send({\n messageId: typedMessage.messageId,\n type: 'response',\n result: null,\n errorCode,\n error: err.message,\n });\n }\n }\n\n return;\n }\n\n clearTimeout(pending.timeoutId);\n this.pendingRequests.delete(typedMessage.messageId);\n\n const response = typedMessage as RawResponseMessage;\n if (response.type === 'response' && response.errorCode) {\n pending.reject(\n new PluginActionError(\n response.errorCode,\n response.error ?? 'Unknown error',\n response.errorData,\n ),\n );\n } else {\n pending.resolve(response.result);\n }\n };\n\n window.addEventListener('message', this.messageListener);\n }\n\n private generateMessageId(): string {\n return crypto.randomUUID();\n }\n}\n\nlet bridgeInstance: PluginBridge | null = null;\n\nexport function initBridge(\n pluginId: string,\n elementId: string,\n slot: string,\n entityId: string | null,\n targetOrigin: string,\n entityMeta?: Record<string, string>,\n): PluginBridge {\n if (bridgeInstance) {\n bridgeInstance.destroy();\n }\n bridgeInstance = new PluginBridge(\n pluginId,\n elementId,\n slot,\n entityId,\n targetOrigin,\n entityMeta,\n );\n return bridgeInstance;\n}\n\nfunction getBridge(): PluginBridge {\n if (!bridgeInstance) {\n throw new Error('Bridge not initialized. Call initBridge first.');\n }\n return bridgeInstance;\n}\n\nexport function sendRequest(\n method: string,\n payload?: unknown,\n options?: RequestOptions,\n): Promise<unknown> {\n return getBridge().request(method, payload, options);\n}\n","import { sendRequest } from '../bridge/bridge';\n\nexport type ConfirmOptions = {\n title?: string;\n message: string;\n textButtonApply?: string;\n textButtonCancel?: string;\n theme?: 'normal' | 'danger';\n};\n\nexport type ConfirmResult = { confirmed: boolean };\n\nconst CONFIRM_TIMEOUT_MS = 300_000;\n\nexport class Confirm {\n show(options: ConfirmOptions): Promise<ConfirmResult> {\n return sendRequest('confirm.show', options, {\n timeout: CONFIRM_TIMEOUT_MS,\n }) as Promise<ConfirmResult>;\n }\n}\n","import { sendRequest } from '../bridge/bridge';\nimport { on } from '../events/eventBus';\n\nexport type ToastAction = {\n label: string;\n onClick: () => void;\n};\n\nexport type ToastOptions = {\n name?: string;\n title: string;\n content?: string;\n theme?: 'success' | 'danger' | 'warning' | 'info';\n autoHiding?: number;\n isClosable?: boolean;\n actions?: ToastAction[];\n};\n\nexport class Toaster {\n private callbackMap = new Map<string, () => void>();\n private toastActionIds = new Map<string, string[]>();\n private eventSubscribed = false;\n\n async add(options: ToastOptions): Promise<{ name: string }> {\n this.ensureEventSubscription();\n\n const actionIds: string[] = [];\n const serializedActions = options.actions?.map((action) => {\n const actionId = crypto.randomUUID();\n\n this.callbackMap.set(actionId, action.onClick);\n actionIds.push(actionId);\n\n return { id: actionId, label: action.label };\n });\n\n const result = (await sendRequest('toast.add', {\n name: options.name,\n title: options.title,\n content: options.content,\n theme: options.theme,\n autoHiding: options.autoHiding,\n isClosable: options.isClosable,\n actions: serializedActions,\n })) as { name: string };\n\n if (actionIds.length > 0) {\n this.toastActionIds.set(result.name, actionIds);\n }\n\n const autoHiding = options.autoHiding ?? 5000;\n\n setTimeout(() => this.cleanupCallbacksForToast(result.name), autoHiding + 1000);\n\n return result;\n }\n\n private ensureEventSubscription() {\n if (this.eventSubscribed) return;\n this.eventSubscribed = true;\n\n on('toast.action.clicked', ({ name, actionId }) => {\n const callback = this.callbackMap.get(actionId);\n\n // eslint-disable-next-line callback-return -- optional void callback for side effects\n callback?.();\n this.cleanupCallbacksForToast(name);\n });\n }\n\n private cleanupCallbacksForToast(name: string) {\n const actionIds = this.toastActionIds.get(name);\n\n if (actionIds) {\n for (const id of actionIds) {\n this.callbackMap.delete(id);\n }\n this.toastActionIds.delete(name);\n }\n }\n}\n","import { sendRequest } from '../bridge/bridge';\nimport type { NavigateRequest } from '../host/types/NavigateRequest';\nimport { Confirm } from './Confirm';\nimport { Toaster } from './Toaster';\n\nclass UiApi {\n readonly toaster = new Toaster();\n readonly confirm = new Confirm();\n\n navigate(payload: NavigateRequest): Promise<unknown> {\n return sendRequest('navigate', payload);\n }\n}\n\nexport const uiApi = new UiApi();\n","/**\n * Извлекает значение из объекта по точечному пути (dot notation).\n * Предназначена для работы с полями типа Record<string, unknown>, например со значениями полей задачи (Issue).\n *\n * Поддерживает вложенные пути: `'priority.display'`, `'assignee.display.ru'` и т.д.\n * Если любой сегмент пути отсутствует или не является объектом — возвращается defaultValue или undefined.\n * @param obj - Объект с произвольной структурой (например, issue или issue.values)\n * @param path - Путь к полю через точку, например `'priority.display'` или `'summary'`\n * @param defaultValue - Значение по умолчанию, если путь не найден\n * @returns Значение по пути, defaultValue или undefined\n * @example\n * ```ts\n * // Поле верхнего уровня\n * getField(issue, 'key'); // 'QUEUE-123'\n *\n * // Вложенное поле (например, приоритет с display)\n * getField(issue, 'priority.display'); // 'много' | undefined\n *\n * // С типизацией и значением по умолчанию\n * const name = getField<string>(issue, 'summary', 'Без названия');\n *\n * // Элемент массива по индексу (массивы — объекты с числовыми ключами)\n * getField(tags, '0'); // первый элемент\n * ```\n */\nexport function getField<T = unknown>(\n obj: Record<string, unknown>,\n path: string,\n defaultValue?: T,\n): T | undefined {\n if (path === '') {\n return defaultValue;\n }\n\n const keys = path.split('.');\n let result: unknown = obj;\n\n for (const key of keys) {\n if (\n result !== null &&\n typeof result === 'object' &&\n Object.prototype.hasOwnProperty.call(result, key)\n ) {\n result = (result as Record<string, unknown>)[key];\n } else {\n return defaultValue;\n }\n }\n\n return (result as T | undefined) ?? defaultValue;\n}\n","/**\n * Структурный shape `LocalizedString` — общая база, к которой структурно\n * совместимы api-types `LocalizedString` обоих flavors. Реальная функция\n * `getLocalizedString` читает только ключи `ru` и `en`, поэтому более\n * узкие api-types-варианты (с дополнительными ключами) совместимы.\n */\nexport type LocalizedString = string | { ru?: string; en?: string };\n\n/**\n * Получить локализованную строку на основе языка\n * @param value - Локализованная строка\n * @param language - Код языка ('ru' или 'en')\n * @param fallbackLanguage - Резервный язык (по умолчанию 'ru')\n */\nexport function getLocalizedString(\n value: LocalizedString,\n language: string | undefined,\n fallbackLanguage = 'ru',\n): string {\n if (typeof value === 'string') {\n return value;\n }\n\n const lang = (language ?? fallbackLanguage).toLowerCase() as 'ru' | 'en';\n const fallback = fallbackLanguage.toLowerCase() as 'ru' | 'en';\n\n return value[lang] || value[fallback] || value.ru || value.en || '';\n}\n","export type ResizeCallback = (height: number) => Promise<void> | void;\n\nexport class AutoResizeManager {\n private resizeCallback: ResizeCallback;\n private resizeObserver?: ResizeObserver;\n private resizeTimeout?: ReturnType<typeof setTimeout>;\n private lastHeight = 0;\n private isUpdating = false;\n private consecutiveSmallIncreases = 0;\n private readonly MAX_CONSECUTIVE_SMALL_INCREASES = 5;\n private readonly SMALL_INCREASE_THRESHOLD_PX = 10;\n\n constructor(resizeCallback: ResizeCallback) {\n this.resizeCallback = resizeCallback;\n }\n\n enable(): void {\n if (!document.body) {\n console.error('[AutoResize] document.body does not exist yet');\n return;\n }\n\n const sendHeight = async () => {\n if (this.isUpdating) {\n return;\n }\n\n // Use body.scrollHeight as primary source in iframe\n // documentElement.scrollHeight can cache old values\n const root = document.getElementById('root');\n const bodyStyles = window.getComputedStyle(document.body);\n const marginTop = parseInt(bodyStyles.marginTop, 10) || 0;\n const marginBottom = parseInt(bodyStyles.marginBottom, 10) || 0;\n\n const measuredHeight = Math.max(\n document.body.scrollHeight,\n document.body.offsetHeight,\n root ? root.scrollHeight + marginTop + marginBottom : 0,\n );\n\n // Add small buffer to compensate for rounding errors\n const height = measuredHeight + 4;\n\n if (height !== this.lastHeight) {\n // Detect infinite loop: if height keeps increasing by small amounts\n // This prevents issues with elements using viewport units (vh, %)\n if (height > this.lastHeight) {\n const increase = height - this.lastHeight;\n\n // Only count small increases as potential loop indicators\n // Large increases are normal (user adding content)\n if (increase <= this.SMALL_INCREASE_THRESHOLD_PX) {\n this.consecutiveSmallIncreases++;\n\n if (this.consecutiveSmallIncreases > this.MAX_CONSECUTIVE_SMALL_INCREASES) {\n console.warn(\n '[AutoResize] Infinite loop detected. Stopping auto-resize. ' +\n 'This may be caused by elements with viewport-relative units (vh, %).',\n );\n this.disable();\n return;\n }\n } else {\n // Large increase - reset counter (normal content addition)\n this.consecutiveSmallIncreases = 0;\n }\n } else {\n // Height decreased - reset counter\n this.consecutiveSmallIncreases = 0;\n }\n\n this.isUpdating = true;\n this.lastHeight = height;\n\n try {\n await this.resizeCallback(height);\n } catch (error) {\n console.error('[AutoResize] Failed to update content size:', error);\n } finally {\n this.isUpdating = false;\n }\n }\n };\n\n const debouncedSendHeight = () => {\n clearTimeout(this.resizeTimeout);\n this.resizeTimeout = setTimeout(sendHeight, 100);\n };\n\n this.resizeObserver = new ResizeObserver(debouncedSendHeight);\n this.resizeObserver.observe(document.body);\n\n // Send initial height\n sendHeight();\n }\n\n disable(): void {\n this.resizeObserver?.disconnect();\n clearTimeout(this.resizeTimeout);\n this.isUpdating = false;\n this.consecutiveSmallIncreases = 0;\n }\n}\n","import { initBridge, sendRequest } from '../bridge/bridge';\nimport type { ContentSizeUpdateRequest } from './types/ContentSizeUpdateRequest';\nimport { AutoResizeManager } from './utils/autoResize';\n\nexport interface HostInitOptions {\n /**\n * Автоматически изменять размер контейнера плагина\n * при изменении содержимого\n * @default true\n */\n autoResize?: boolean;\n}\n\n/**\n * Untyped runtime класс HostApi. Methods, которые возвращают значения,\n * зависящие от SlotContextMap, типизированы как `unknown` или `string`.\n * Type-safety добавляется в публикуемых пакетах через typed wrapper.\n */\nexport type ContextLevel = 'basic' | 'full';\n\nexport type BasicContext = {\n entityId: string;\n entityMeta?: Record<string, string>;\n};\n\nexport class HostApi {\n private autoResizeManager?: AutoResizeManager;\n private slot: string | null = null;\n private service: string | null = null;\n private origin: string | null = null;\n private innerUrl: string | null = null;\n private queryParams: Record<string, string> | null = null;\n private entityId: string | null = null;\n private entityMeta: Record<string, string> | undefined = undefined;\n private contextLevel: ContextLevel = 'full';\n\n getTheme(): Promise<unknown> {\n return sendRequest('theme.get');\n }\n\n getLanguage(): Promise<unknown> {\n return sendRequest('language.get');\n }\n\n getUserId(): Promise<unknown> {\n return sendRequest('userId.get');\n }\n\n getIsYateam(): Promise<unknown> {\n return sendRequest('isYateam.get');\n }\n\n getContext(): Promise<unknown> {\n return sendRequest('context.get');\n }\n\n updateContentSize(payload: ContentSizeUpdateRequest): Promise<unknown> {\n return sendRequest('contentSize.update', payload);\n }\n\n notifyReady(): Promise<unknown> {\n return sendRequest('plugin.ready');\n }\n\n close(payload: unknown): Promise<unknown> {\n return sendRequest('plugin.close', payload);\n }\n\n init(options: HostInitOptions): void {\n const { autoResize = true } = options;\n\n const searchParams = new URLSearchParams(location.search);\n this.service = searchParams.get('service');\n if (this.service === null) {\n throw new Error(\n 'Missing required URL parameter \"service\". A plugin cannot run outside the host application context. ' +\n 'Open the plugin from the host application.',\n );\n }\n const slot = searchParams.get('slot');\n if (!slot) {\n throw new Error('Slot is not defined');\n }\n const targetOrigin = searchParams.get('parentOrigin');\n if (!targetOrigin) {\n throw new Error('Target origin is not defined');\n }\n const pluginId = searchParams.get('id');\n if (!pluginId) {\n throw new Error('Plugin id is not defined');\n }\n const elementId = searchParams.get('elementId');\n if (!elementId) {\n throw new Error('Element id is not defined');\n }\n const entityId = searchParams.get('entityId');\n const entityMetaRaw = searchParams.get('entityMeta');\n const entityMeta = entityMetaRaw\n ? (JSON.parse(entityMetaRaw) as Record<string, string>)\n : undefined;\n initBridge(pluginId, elementId, slot, entityId, targetOrigin, entityMeta);\n\n this.slot = slot;\n this.origin = targetOrigin;\n this.entityId = entityId;\n this.entityMeta = entityMeta;\n\n const contextLevelParam = searchParams.get('contextLevel');\n this.contextLevel = contextLevelParam === 'basic' ? 'basic' : 'full';\n\n this.innerUrl = searchParams.get('innerUrl') ?? '';\n const queryParamsRaw = searchParams.get('queryParams');\n this.queryParams = queryParamsRaw ? JSON.parse(decodeURIComponent(queryParamsRaw)) : {};\n\n if (autoResize) {\n this.autoResizeManager = new AutoResizeManager(\n (height) => this.updateContentSize({ height }) as unknown as Promise<void>,\n );\n this.autoResizeManager.enable();\n }\n }\n\n getSlot(): string {\n if (this.slot === null) {\n throw new Error('Plugin not initialized. Call init() first.');\n }\n return this.slot;\n }\n\n getService(): string {\n if (this.service === null) {\n throw new Error('Service not initialized. Call init() first.');\n }\n return this.service;\n }\n\n getOrigin(): string {\n if (this.origin === null) {\n throw new Error('Origin not initialized. Call init() first.');\n }\n return this.origin;\n }\n\n getInnerUrl(): string {\n if (this.innerUrl === null) {\n throw new Error('Plugin not initialized. Call init() first.');\n }\n return this.innerUrl;\n }\n\n getQueryParams(): Record<string, string> {\n if (this.queryParams === null) {\n throw new Error('Plugin not initialized. Call init() first.');\n }\n return this.queryParams;\n }\n\n getEntityId(): string | null {\n return this.entityId;\n }\n\n getEntityMeta(): Record<string, string> | undefined {\n return this.entityMeta;\n }\n\n getContextLevel(): ContextLevel {\n return this.contextLevel;\n }\n\n disableAutoResize(): void {\n this.autoResizeManager?.disable();\n }\n}\n\nexport const hostApi = new HostApi();\n"],"names":["subscribers","lastValues","on","method","callback","set","cb","err","dispatchHostEvent","message","resetEventBus","eventBus","handlers","setHandler","name","handler","getHandler","PLUGIN_ID_OR_SLOT_NOT_PROVIDED","PLUGIN_ID_IS_NOT_CORRECT","VALIDATION_ERROR","METHOD_NOT_SUPPORTED","MISSING_REQUIRED_SCOPE","UNKNOWN_ERROR","PluginActionError","code","errorData","PluginBridge","pluginId","elementId","slot","entityId","targetOrigin","entityMeta","payload","options","resolve","reject","messageId","timeoutMs","requestMessage","timeoutId","e","pending","event","typedMessage","data","errorCode","response","bridgeInstance","initBridge","getBridge","sendRequest","CONFIRM_TIMEOUT_MS","Confirm","Toaster","actionIds","serializedActions","action","actionId","result","autoHiding","id","UiApi","uiApi","getField","obj","path","defaultValue","keys","key","getLocalizedString","value","language","fallbackLanguage","lang","fallback","AutoResizeManager","resizeCallback","sendHeight","root","bodyStyles","marginTop","marginBottom","height","error","debouncedSendHeight","HostApi","autoResize","searchParams","entityMetaRaw","contextLevelParam","queryParamsRaw","hostApi"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/events/eventBus.ts","../src/handlers/handlers.ts","../src/bridge/types/ErrorCodes.ts","../src/bridge/types/PluginActionError.ts","../src/bridge/bridge.ts","../src/ui/Confirm.ts","../src/ui/Toaster.ts","../src/ui/uiApi.ts","../src/utils/getField.ts","../src/utils/localization.ts","../src/host/utils/autoResize.ts","../src/host/hostApi.ts"],"sourcesContent":["import type {\n EventMessage,\n HostEventCallback,\n HostEventContract,\n HostEventMethod,\n Unsubscribe,\n} from './types';\n\nconst subscribers = new Map<HostEventMethod, Set<(result: unknown) => void>>();\nconst lastValues = new Map<HostEventMethod, unknown>();\n\n/**\n * Subscribe to a host-pushed event.\n * If a value was already dispatched for this method, the callback is called\n * synchronously with the cached value before returning.\n * @param method - Event method name (e.g. `'theme.changed'`)\n * @param callback - Function called with the typed event payload\n * @returns An `Unsubscribe` function that removes this subscription\n */\nexport function on<M extends HostEventMethod>(\n method: M,\n callback: HostEventCallback<M>,\n): Unsubscribe {\n let set = subscribers.get(method);\n if (!set) {\n set = new Set();\n subscribers.set(method, set);\n }\n\n const cb = callback as (result: unknown) => void;\n set.add(cb);\n\n // Replay last known value to the new subscriber immediately\n if (lastValues.has(method)) {\n try {\n // eslint-disable-next-line callback-return -- sync replay to new subscriber; return value unused\n cb(lastValues.get(method));\n } catch (err) {\n console.error(`[EventBus] Error replaying cached value for \"${method}\":`, err);\n }\n }\n\n return () => {\n set.delete(cb);\n if (set.size === 0) {\n subscribers.delete(method);\n }\n };\n}\n\n/**\n * Dispatch an incoming event message to all registered subscribers.\n * Caches the value so late subscribers receive it on subscription.\n */\nexport function dispatchHostEvent(message: EventMessage): void {\n const method = message.method as HostEventMethod;\n lastValues.set(method, message.result);\n\n const set = subscribers.get(method);\n if (!set) {\n return;\n }\n for (const cb of set) {\n try {\n // eslint-disable-next-line callback-return -- notify subscribers; return value unused\n cb(message.result);\n } catch (err) {\n console.error(`[EventBus] Error in subscriber for \"${message.method}\":`, err);\n }\n }\n}\n\n/**\n * Clears all cached last values and subscribers from the event bus.\n * Intended for use in tests to prevent state leaking between test cases.\n */\nexport function resetEventBus(): void {\n lastValues.clear();\n subscribers.clear();\n}\n\n/**\n * Public event emitter — subscribe to host-pushed events.\n * Only events defined in `HostEventContract` are accepted.\n * @example\n * ```ts\n * import { eventBus } from '@yandex-data-ui/tracker-plugin-sdk-core';\n *\n * const unsubscribe = eventBus.on('theme.changed', (theme) => {\n * console.log('Theme:', theme);\n * });\n *\n * unsubscribe();\n * ```\n */\nexport const eventBus = {\n on<M extends HostEventMethod>(\n method: M,\n callback: (result: HostEventContract[M]['result']) => void,\n ): Unsubscribe {\n return on(method, callback);\n },\n};\n","type AnyHandler = (...args: unknown[]) => unknown;\n\nconst handlers: Record<string, AnyHandler> = {};\n\n/**\n * Регистрирует handler по имени. Тип не проверяется на runtime'е;\n * type-safety обеспечивается typed wrapper'ом в публикуемых пакетах.\n */\nexport function setHandler(name: string, handler: AnyHandler): void {\n handlers[name] = handler;\n}\n\n/**\n * Возвращает зарегистрированный handler по имени, или undefined.\n */\nexport function getHandler(name: string): AnyHandler | undefined {\n return handlers[name];\n}\n","/** Код ошибки: не переданы обязательные параметры инициализации плагина (pluginId или slot). */\nexport const PLUGIN_ID_OR_SLOT_NOT_PROVIDED = 1000;\n\n/** Код ошибки: переданный pluginId не совпадает с зарегистрированным плагином или неверного формата. */\nexport const PLUGIN_ID_IS_NOT_CORRECT = 1001;\n\n/** Код ошибки: данные запроса не прошли валидацию (неверный формат, обязательные поля отсутствуют и т.п.). */\nexport const VALIDATION_ERROR = 1002;\n\n/** Код ошибки: запрошенный метод API не поддерживается в данной конфигурации или версии. */\nexport const METHOD_NOT_SUPPORTED = 1003;\n\n/** Код ошибки: у плагина нет необходимого scope (разрешения) для выполнения операции. */\nexport const MISSING_REQUIRED_SCOPE = 1004;\n\n/** Код ошибки: непредвиденная или неклассифицированная ошибка. */\nexport const UNKNOWN_ERROR = 6666;\n\n/** Storage record version does not match the current one. */\nexport const VERSION_CONFLICT = 1010;\n\n/** Data size exceeds 256 KiB after the operation. */\nexport const DATA_TOO_LARGE = 1011;\n\n/** bucket failed validation (format or length). */\nexport const BAD_KEY = 1012;\n\n/** External api call failed. */\nexport const EXTERNAL_API_CALL_ERROR = 1013;\n","export class PluginActionError extends Error {\n readonly code: number;\n\n readonly errorData?: unknown;\n\n constructor(code: number, message: string, errorData?: unknown) {\n super(message);\n this.name = 'PluginActionError';\n this.code = code;\n this.errorData = errorData;\n }\n}\n","import { dispatchHostEvent } from '../events/eventBus';\nimport type { EventMessage } from '../events/types';\nimport { getHandler } from '../handlers/handlers';\nimport { UNKNOWN_ERROR } from './types/ErrorCodes';\nimport type { BaseMessage } from './types/BaseMessage';\nimport { PluginActionError } from './types/PluginActionError';\n\ntype RequestOptions = { timeout?: number };\n\ntype PendingRequest = {\n resolve: (value: unknown) => void;\n reject: (error: Error) => void;\n timeoutId: ReturnType<typeof setTimeout>;\n};\n\ntype RawRequestMessage = BaseMessage & {\n method: string;\n payload: unknown;\n};\n\ntype RawResponseMessage = BaseMessage & {\n type: 'response';\n result: unknown;\n error?: string;\n errorCode?: number;\n errorData?: unknown;\n};\n\ntype RawIncomingRequestMessage = BaseMessage & {\n type: 'request';\n result: { method: string; payload: unknown };\n error?: string;\n};\n\nclass PluginBridge {\n private pluginId: string;\n private elementId: string;\n private targetOrigin: string;\n private slot: string;\n private entityId: string | null;\n private entityMeta: Record<string, string> | undefined;\n private pendingRequests: Map<string, PendingRequest> = new Map();\n private messageListener: ((event: MessageEvent) => void) | null = null;\n private readonly requestTimeout = 10000;\n\n constructor(\n pluginId: string,\n elementId: string,\n slot: string,\n entityId: string | null,\n targetOrigin: string,\n entityMeta?: Record<string, string>,\n ) {\n this.pluginId = pluginId;\n this.elementId = elementId;\n this.targetOrigin = targetOrigin;\n this.entityId = entityId;\n this.entityMeta = entityMeta;\n this.slot = slot;\n this.initListener();\n }\n\n request(method: string, payload?: unknown, options?: RequestOptions): Promise<unknown> {\n return new Promise((resolve, reject) => {\n const messageId = this.generateMessageId();\n const timeoutMs = options?.timeout ?? this.requestTimeout;\n\n const requestMessage: RawRequestMessage = {\n messageId,\n method,\n payload,\n };\n\n const timeoutId = setTimeout(() => {\n const pending = this.pendingRequests.get(messageId);\n if (pending) {\n this.pendingRequests.delete(messageId);\n reject(new Error(`Request timeout: ${method} exceeded ${timeoutMs}ms`));\n }\n }, timeoutMs);\n\n this.pendingRequests.set(messageId, { resolve, reject, timeoutId });\n\n try {\n this.send(requestMessage);\n } catch (e) {\n clearTimeout(timeoutId);\n this.pendingRequests.delete(messageId);\n reject(e as Error);\n }\n });\n }\n\n send<T = unknown>(message: T): void {\n window.parent.postMessage(\n {\n pluginId: this.pluginId,\n elementId: this.elementId,\n slot: this.slot,\n entityId: this.entityId,\n entityMeta: this.entityMeta,\n ...message,\n },\n this.targetOrigin,\n );\n }\n\n destroy(): void {\n if (this.messageListener) {\n window.removeEventListener('message', this.messageListener);\n this.messageListener = null;\n }\n\n this.pendingRequests.forEach((pending) => {\n clearTimeout(pending.timeoutId);\n });\n this.pendingRequests.clear();\n }\n\n private initListener(): void {\n this.messageListener = async (event: MessageEvent) => {\n if (event.origin !== this.targetOrigin) {\n console.info(\n '[Bridge] Ignored message from origin:',\n event.origin,\n '(expected:',\n this.targetOrigin,\n ')',\n );\n return;\n }\n\n const message = event.data;\n console.info('[Bridge] Received message:', message);\n\n if (message.type === 'event') {\n console.info('[Bridge] Dispatching host event:', message.method, message.result);\n dispatchHostEvent(message as EventMessage);\n return;\n }\n\n console.info('[Bridge] Received message:', event.data);\n\n if (!message.messageId) {\n console.info('[Bridge] Ignored message without messageId:', message);\n return;\n }\n\n const typedMessage = message as RawResponseMessage | RawIncomingRequestMessage;\n const pending = this.pendingRequests.get(typedMessage.messageId);\n\n if (!pending) {\n if (typedMessage.type === 'request') {\n const incoming = typedMessage as RawIncomingRequestMessage;\n const method = incoming.result.method;\n const handler = getHandler(method);\n\n if (!handler) {\n this.send({\n messageId: typedMessage.messageId,\n type: 'response',\n result: null,\n errorCode: UNKNOWN_ERROR,\n error: `No handler for method ${method}`,\n });\n return;\n }\n\n try {\n const data = handler();\n this.send({\n messageId: typedMessage.messageId,\n payload: data,\n method: 'responseData',\n type: 'response',\n });\n } catch (e) {\n const err = e instanceof Error ? e : new Error(String(e));\n const errorCode =\n err instanceof PluginActionError ? err.code : UNKNOWN_ERROR;\n this.send({\n messageId: typedMessage.messageId,\n type: 'response',\n result: null,\n errorCode,\n error: err.message,\n });\n }\n }\n\n return;\n }\n\n clearTimeout(pending.timeoutId);\n this.pendingRequests.delete(typedMessage.messageId);\n\n const response = typedMessage as RawResponseMessage;\n if (response.type === 'response' && response.errorCode) {\n pending.reject(\n new PluginActionError(\n response.errorCode,\n response.error ?? 'Unknown error',\n response.errorData,\n ),\n );\n } else {\n pending.resolve(response.result);\n }\n };\n\n window.addEventListener('message', this.messageListener);\n }\n\n private generateMessageId(): string {\n return crypto.randomUUID();\n }\n}\n\nlet bridgeInstance: PluginBridge | null = null;\n\nexport function initBridge(\n pluginId: string,\n elementId: string,\n slot: string,\n entityId: string | null,\n targetOrigin: string,\n entityMeta?: Record<string, string>,\n): PluginBridge {\n if (bridgeInstance) {\n bridgeInstance.destroy();\n }\n bridgeInstance = new PluginBridge(\n pluginId,\n elementId,\n slot,\n entityId,\n targetOrigin,\n entityMeta,\n );\n return bridgeInstance;\n}\n\nfunction getBridge(): PluginBridge {\n if (!bridgeInstance) {\n throw new Error('Bridge not initialized. Call initBridge first.');\n }\n return bridgeInstance;\n}\n\nexport function sendRequest(\n method: string,\n payload?: unknown,\n options?: RequestOptions,\n): Promise<unknown> {\n return getBridge().request(method, payload, options);\n}\n","import { sendRequest } from '../bridge/bridge';\n\nexport type ConfirmOptions = {\n title?: string;\n message: string;\n textButtonApply?: string;\n textButtonCancel?: string;\n theme?: 'normal' | 'danger';\n};\n\nexport type ConfirmResult = { confirmed: boolean };\n\nconst CONFIRM_TIMEOUT_MS = 300_000;\n\nexport class Confirm {\n show(options: ConfirmOptions): Promise<ConfirmResult> {\n return sendRequest('confirm.show', options, {\n timeout: CONFIRM_TIMEOUT_MS,\n }) as Promise<ConfirmResult>;\n }\n}\n","import { sendRequest } from '../bridge/bridge';\nimport { on } from '../events/eventBus';\n\nexport type ToastAction = {\n label: string;\n onClick: () => void;\n};\n\nexport type ToastOptions = {\n name?: string;\n title: string;\n content?: string;\n theme?: 'success' | 'danger' | 'warning' | 'info';\n autoHiding?: number;\n isClosable?: boolean;\n actions?: ToastAction[];\n};\n\nexport class Toaster {\n private callbackMap = new Map<string, () => void>();\n private toastActionIds = new Map<string, string[]>();\n private eventSubscribed = false;\n\n async add(options: ToastOptions): Promise<{ name: string }> {\n this.ensureEventSubscription();\n\n const actionIds: string[] = [];\n const serializedActions = options.actions?.map((action) => {\n const actionId = crypto.randomUUID();\n\n this.callbackMap.set(actionId, action.onClick);\n actionIds.push(actionId);\n\n return { id: actionId, label: action.label };\n });\n\n const result = (await sendRequest('toast.add', {\n name: options.name,\n title: options.title,\n content: options.content,\n theme: options.theme,\n autoHiding: options.autoHiding,\n isClosable: options.isClosable,\n actions: serializedActions,\n })) as { name: string };\n\n if (actionIds.length > 0) {\n this.toastActionIds.set(result.name, actionIds);\n }\n\n const autoHiding = options.autoHiding ?? 5000;\n\n setTimeout(() => this.cleanupCallbacksForToast(result.name), autoHiding + 1000);\n\n return result;\n }\n\n private ensureEventSubscription() {\n if (this.eventSubscribed) return;\n this.eventSubscribed = true;\n\n on('toast.action.clicked', ({ name, actionId }) => {\n const callback = this.callbackMap.get(actionId);\n\n // eslint-disable-next-line callback-return -- optional void callback for side effects\n callback?.();\n this.cleanupCallbacksForToast(name);\n });\n }\n\n private cleanupCallbacksForToast(name: string) {\n const actionIds = this.toastActionIds.get(name);\n\n if (actionIds) {\n for (const id of actionIds) {\n this.callbackMap.delete(id);\n }\n this.toastActionIds.delete(name);\n }\n }\n}\n","import { sendRequest } from '../bridge/bridge';\nimport type { NavigateRequest } from '../host/types/NavigateRequest';\nimport { Confirm } from './Confirm';\nimport { Toaster } from './Toaster';\n\nclass UiApi {\n readonly toaster = new Toaster();\n readonly confirm = new Confirm();\n\n navigate(payload: NavigateRequest): Promise<unknown> {\n return sendRequest('navigate', payload);\n }\n}\n\nexport const uiApi = new UiApi();\n","/**\n * Извлекает значение из объекта по точечному пути (dot notation).\n * Предназначена для работы с полями типа Record<string, unknown>, например со значениями полей задачи (Issue).\n *\n * Поддерживает вложенные пути: `'priority.display'`, `'assignee.display.ru'` и т.д.\n * Если любой сегмент пути отсутствует или не является объектом — возвращается defaultValue или undefined.\n * @param obj - Объект с произвольной структурой (например, issue или issue.values)\n * @param path - Путь к полю через точку, например `'priority.display'` или `'summary'`\n * @param defaultValue - Значение по умолчанию, если путь не найден\n * @returns Значение по пути, defaultValue или undefined\n * @example\n * ```ts\n * // Поле верхнего уровня\n * getField(issue, 'key'); // 'QUEUE-123'\n *\n * // Вложенное поле (например, приоритет с display)\n * getField(issue, 'priority.display'); // 'много' | undefined\n *\n * // С типизацией и значением по умолчанию\n * const name = getField<string>(issue, 'summary', 'Без названия');\n *\n * // Элемент массива по индексу (массивы — объекты с числовыми ключами)\n * getField(tags, '0'); // первый элемент\n * ```\n */\nexport function getField<T = unknown>(\n obj: Record<string, unknown>,\n path: string,\n defaultValue?: T,\n): T | undefined {\n if (path === '') {\n return defaultValue;\n }\n\n const keys = path.split('.');\n let result: unknown = obj;\n\n for (const key of keys) {\n if (\n result !== null &&\n typeof result === 'object' &&\n Object.prototype.hasOwnProperty.call(result, key)\n ) {\n result = (result as Record<string, unknown>)[key];\n } else {\n return defaultValue;\n }\n }\n\n return (result as T | undefined) ?? defaultValue;\n}\n","/**\n * Структурный shape `LocalizedString` — общая база, к которой структурно\n * совместимы api-types `LocalizedString` обоих flavors. Реальная функция\n * `getLocalizedString` читает только ключи `ru` и `en`, поэтому более\n * узкие api-types-варианты (с дополнительными ключами) совместимы.\n */\nexport type LocalizedString = string | { ru?: string; en?: string };\n\n/**\n * Получить локализованную строку на основе языка\n * @param value - Локализованная строка\n * @param language - Код языка ('ru' или 'en')\n * @param fallbackLanguage - Резервный язык (по умолчанию 'ru')\n */\nexport function getLocalizedString(\n value: LocalizedString,\n language: string | undefined,\n fallbackLanguage = 'ru',\n): string {\n if (typeof value === 'string') {\n return value;\n }\n\n const lang = (language ?? fallbackLanguage).toLowerCase() as 'ru' | 'en';\n const fallback = fallbackLanguage.toLowerCase() as 'ru' | 'en';\n\n return value[lang] || value[fallback] || value.ru || value.en || '';\n}\n","export type ResizeCallback = (height: number) => Promise<void> | void;\n\nexport class AutoResizeManager {\n private resizeCallback: ResizeCallback;\n private resizeObserver?: ResizeObserver;\n private resizeTimeout?: ReturnType<typeof setTimeout>;\n private lastHeight = 0;\n private isUpdating = false;\n private consecutiveSmallIncreases = 0;\n private readonly MAX_CONSECUTIVE_SMALL_INCREASES = 5;\n private readonly SMALL_INCREASE_THRESHOLD_PX = 10;\n\n constructor(resizeCallback: ResizeCallback) {\n this.resizeCallback = resizeCallback;\n }\n\n enable(): void {\n if (!document.body) {\n console.error('[AutoResize] document.body does not exist yet');\n return;\n }\n\n const sendHeight = async () => {\n if (this.isUpdating) {\n return;\n }\n\n // Use body.scrollHeight as primary source in iframe\n // documentElement.scrollHeight can cache old values\n const root = document.getElementById('root');\n const bodyStyles = window.getComputedStyle(document.body);\n const marginTop = parseInt(bodyStyles.marginTop, 10) || 0;\n const marginBottom = parseInt(bodyStyles.marginBottom, 10) || 0;\n\n const measuredHeight = Math.max(\n document.body.scrollHeight,\n document.body.offsetHeight,\n root ? root.scrollHeight + marginTop + marginBottom : 0,\n );\n\n // Add small buffer to compensate for rounding errors\n const height = measuredHeight + 4;\n\n if (height !== this.lastHeight) {\n // Detect infinite loop: if height keeps increasing by small amounts\n // This prevents issues with elements using viewport units (vh, %)\n if (height > this.lastHeight) {\n const increase = height - this.lastHeight;\n\n // Only count small increases as potential loop indicators\n // Large increases are normal (user adding content)\n if (increase <= this.SMALL_INCREASE_THRESHOLD_PX) {\n this.consecutiveSmallIncreases++;\n\n if (this.consecutiveSmallIncreases > this.MAX_CONSECUTIVE_SMALL_INCREASES) {\n console.warn(\n '[AutoResize] Infinite loop detected. Stopping auto-resize. ' +\n 'This may be caused by elements with viewport-relative units (vh, %).',\n );\n this.disable();\n return;\n }\n } else {\n // Large increase - reset counter (normal content addition)\n this.consecutiveSmallIncreases = 0;\n }\n } else {\n // Height decreased - reset counter\n this.consecutiveSmallIncreases = 0;\n }\n\n this.isUpdating = true;\n this.lastHeight = height;\n\n try {\n await this.resizeCallback(height);\n } catch (error) {\n console.error('[AutoResize] Failed to update content size:', error);\n } finally {\n this.isUpdating = false;\n }\n }\n };\n\n const debouncedSendHeight = () => {\n clearTimeout(this.resizeTimeout);\n this.resizeTimeout = setTimeout(sendHeight, 100);\n };\n\n this.resizeObserver = new ResizeObserver(debouncedSendHeight);\n this.resizeObserver.observe(document.body);\n\n // Send initial height\n sendHeight();\n }\n\n disable(): void {\n this.resizeObserver?.disconnect();\n clearTimeout(this.resizeTimeout);\n this.isUpdating = false;\n this.consecutiveSmallIncreases = 0;\n }\n}\n","import { initBridge, sendRequest } from '../bridge/bridge';\nimport type { ContentSizeUpdateRequest } from './types/ContentSizeUpdateRequest';\nimport type { ExternalApiAuthCheckAndRequestPayload } from './types/ExternalApiAuthCheckAndRequestPayload';\nimport type { ExternalApiAuthGetStatusPayload } from './types/ExternalApiAuthGetStatusPayload';\nimport type { ExternalApiAuthRequestPayload } from './types/ExternalApiAuthRequestPayload';\nimport type { ExternalApiAuthRevokePayload } from './types/ExternalApiAuthRevokePayload';\nimport type { ExternalApiCallPayload } from './types/ExternalApiCallPayload';\nimport { AutoResizeManager } from './utils/autoResize';\n\nexport interface HostInitOptions {\n /**\n * Автоматически изменять размер контейнера плагина\n * при изменении содержимого\n * @default true\n */\n autoResize?: boolean;\n}\n\n/**\n * Untyped runtime класс HostApi. Methods, которые возвращают значения,\n * зависящие от SlotContextMap, типизированы как `unknown` или `string`.\n * Type-safety добавляется в публикуемых пакетах через typed wrapper.\n */\nexport type ContextLevel = 'basic' | 'full';\n\nexport type BasicContext = {\n entityId: string;\n entityMeta?: Record<string, string>;\n};\n\nexport class HostApi {\n private autoResizeManager?: AutoResizeManager;\n private slot: string | null = null;\n private service: string | null = null;\n private origin: string | null = null;\n private innerUrl: string | null = null;\n private queryParams: Record<string, string> | null = null;\n private entityId: string | null = null;\n private entityMeta: Record<string, string> | undefined = undefined;\n private contextLevel: ContextLevel = 'full';\n\n getTheme(): Promise<unknown> {\n return sendRequest('theme.get');\n }\n\n getLanguage(): Promise<unknown> {\n return sendRequest('language.get');\n }\n\n getUserId(): Promise<unknown> {\n return sendRequest('userId.get');\n }\n\n getIsYateam(): Promise<unknown> {\n return sendRequest('isYateam.get');\n }\n\n getContext(): Promise<unknown> {\n return sendRequest('context.get');\n }\n\n updateContentSize(payload: ContentSizeUpdateRequest): Promise<unknown> {\n return sendRequest('contentSize.update', payload);\n }\n\n notifyReady(): Promise<unknown> {\n return sendRequest('plugin.ready');\n }\n\n close(payload: unknown): Promise<unknown> {\n return sendRequest('plugin.close', payload);\n }\n\n init(options: HostInitOptions): void {\n const { autoResize = true } = options;\n\n const searchParams = new URLSearchParams(location.search);\n this.service = searchParams.get('service');\n if (this.service === null) {\n throw new Error(\n 'Missing required URL parameter \"service\". A plugin cannot run outside the host application context. ' +\n 'Open the plugin from the host application.',\n );\n }\n const slot = searchParams.get('slot');\n if (!slot) {\n throw new Error('Slot is not defined');\n }\n const targetOrigin = searchParams.get('parentOrigin');\n if (!targetOrigin) {\n throw new Error('Target origin is not defined');\n }\n const pluginId = searchParams.get('id');\n if (!pluginId) {\n throw new Error('Plugin id is not defined');\n }\n const elementId = searchParams.get('elementId');\n if (!elementId) {\n throw new Error('Element id is not defined');\n }\n const entityId = searchParams.get('entityId');\n const entityMetaRaw = searchParams.get('entityMeta');\n const entityMeta = entityMetaRaw\n ? (JSON.parse(entityMetaRaw) as Record<string, string>)\n : undefined;\n initBridge(pluginId, elementId, slot, entityId, targetOrigin, entityMeta);\n\n this.slot = slot;\n this.origin = targetOrigin;\n this.entityId = entityId;\n this.entityMeta = entityMeta;\n\n const contextLevelParam = searchParams.get('contextLevel');\n this.contextLevel = contextLevelParam === 'basic' ? 'basic' : 'full';\n\n this.innerUrl = searchParams.get('innerUrl') ?? '';\n const queryParamsRaw = searchParams.get('queryParams');\n this.queryParams = queryParamsRaw ? JSON.parse(decodeURIComponent(queryParamsRaw)) : {};\n\n if (autoResize) {\n this.autoResizeManager = new AutoResizeManager(\n (height) => this.updateContentSize({ height }) as unknown as Promise<void>,\n );\n this.autoResizeManager.enable();\n }\n }\n\n getSlot(): string {\n if (this.slot === null) {\n throw new Error('Plugin not initialized. Call init() first.');\n }\n return this.slot;\n }\n\n getService(): string {\n if (this.service === null) {\n throw new Error('Service not initialized. Call init() first.');\n }\n return this.service;\n }\n\n getOrigin(): string {\n if (this.origin === null) {\n throw new Error('Origin not initialized. Call init() first.');\n }\n return this.origin;\n }\n\n getInnerUrl(): string {\n if (this.innerUrl === null) {\n throw new Error('Plugin not initialized. Call init() first.');\n }\n return this.innerUrl;\n }\n\n getQueryParams(): Record<string, string> {\n if (this.queryParams === null) {\n throw new Error('Plugin not initialized. Call init() first.');\n }\n return this.queryParams;\n }\n\n getEntityId(): string | null {\n return this.entityId;\n }\n\n getEntityMeta(): Record<string, string> | undefined {\n return this.entityMeta;\n }\n\n getContextLevel(): ContextLevel {\n return this.contextLevel;\n }\n\n disableAutoResize(): void {\n this.autoResizeManager?.disable();\n }\n\n externalApiAuthGetStatus(payload: ExternalApiAuthGetStatusPayload): Promise<unknown> {\n return sendRequest('externalApi.auth.getStatus', payload);\n }\n\n externalApiAuthRevoke(payload: ExternalApiAuthRevokePayload): Promise<unknown> {\n return sendRequest('externalApi.auth.revoke', payload);\n }\n\n externalApiAuthRequest(payload: ExternalApiAuthRequestPayload): Promise<unknown> {\n return sendRequest('externalApi.auth.request', payload);\n }\n\n externalApiAuthCheckAndRequest(\n payload: ExternalApiAuthCheckAndRequestPayload,\n ): Promise<unknown> {\n return sendRequest('externalApi.auth.checkAndRequest', payload);\n }\n\n externalApiCall(payload: ExternalApiCallPayload): Promise<unknown> {\n return sendRequest('externalApi.call', payload);\n }\n}\n\nexport const hostApi = new HostApi();\n"],"names":["subscribers","lastValues","on","method","callback","set","cb","err","dispatchHostEvent","message","resetEventBus","eventBus","handlers","setHandler","name","handler","getHandler","PLUGIN_ID_OR_SLOT_NOT_PROVIDED","PLUGIN_ID_IS_NOT_CORRECT","VALIDATION_ERROR","METHOD_NOT_SUPPORTED","MISSING_REQUIRED_SCOPE","UNKNOWN_ERROR","VERSION_CONFLICT","DATA_TOO_LARGE","BAD_KEY","EXTERNAL_API_CALL_ERROR","PluginActionError","code","errorData","PluginBridge","pluginId","elementId","slot","entityId","targetOrigin","entityMeta","payload","options","resolve","reject","messageId","timeoutMs","requestMessage","timeoutId","e","pending","event","typedMessage","data","errorCode","response","bridgeInstance","initBridge","getBridge","sendRequest","CONFIRM_TIMEOUT_MS","Confirm","Toaster","actionIds","serializedActions","action","actionId","result","autoHiding","id","UiApi","uiApi","getField","obj","path","defaultValue","keys","key","getLocalizedString","value","language","fallbackLanguage","lang","fallback","AutoResizeManager","resizeCallback","sendHeight","root","bodyStyles","marginTop","marginBottom","height","error","debouncedSendHeight","HostApi","autoResize","searchParams","entityMetaRaw","contextLevelParam","queryParamsRaw","hostApi"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@weavix/sdk-core",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "exports": {
5
5
  ".": {
6
6
  "types": "./dist/index.d.ts",