3dviewer-sdk 1.0.12 → 1.0.14

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.mjs CHANGED
@@ -119,8 +119,10 @@ var NodeModule = class {
119
119
  };
120
120
 
121
121
  // src/modules/files.module.ts
122
- var DEFAULT_API_BASE_URL = "https://dev.3dviewer.anybim.vn";
122
+ var DEFAULT_API_BASE_URL = "https://dev.3dviewer.anybim.vn/service/conversion";
123
123
  var DEFAULT_VIEWER_ORIGIN = "http://localhost:3000";
124
+ var SDK_VIEWER_PATH = "/mainviewer-sdk";
125
+ var LEGACY_VIEWER_PATH = "/mainviewer";
124
126
  var FilesModule = class {
125
127
  constructor(viewer) {
126
128
  this.viewer = viewer;
@@ -270,12 +272,7 @@ var FilesModule = class {
270
272
  const raw = this.config.baseUrl || this.viewer.getOptions().baseUrl || DEFAULT_API_BASE_URL;
271
273
  return this.normalizeBaseUrl(raw);
272
274
  }
273
- // Resolve conversion API base URL with legacy baseUrl fallback.
274
- resolveConversionBaseUrl() {
275
- const raw = this.config.conversionBaseUrl || this.viewer.getOptions().conversionBaseUrl;
276
- return (raw == null ? void 0 : raw.trim()) ? this.normalizeBaseUrl(raw) : this.resolveBaseUrl();
277
- }
278
- // Resolve viewer route path (e.g. /mainviewer).
275
+ // Resolve viewer route path for all SDK flows.
279
276
  resolveViewerPath() {
280
277
  const configuredPath = this.config.viewerPath || this.viewer.getOptions().viewerPath;
281
278
  if (!configuredPath) {
@@ -283,36 +280,41 @@ var FilesModule = class {
283
280
  if (viewerUrl) {
284
281
  try {
285
282
  const pathname = new URL(viewerUrl, window.location.href).pathname;
286
- if (pathname && pathname !== "/") return pathname;
283
+ if (pathname && pathname !== "/") return this.normalizeSdkViewerPath(pathname);
287
284
  } catch {
288
285
  }
289
286
  }
290
287
  }
291
- const p = (configuredPath || "/mainviewer").trim();
292
- if (!p) return "/mainviewer";
293
- return p.startsWith("/") ? p : `/${p}`;
288
+ return this.normalizeSdkViewerPath(configuredPath || SDK_VIEWER_PATH);
289
+ }
290
+ normalizeSdkViewerPath(path) {
291
+ const p = path.trim();
292
+ if (!p || p === LEGACY_VIEWER_PATH) return SDK_VIEWER_PATH;
293
+ const normalized = p.startsWith("/") ? p : `/${p}`;
294
+ return normalized === LEGACY_VIEWER_PATH ? SDK_VIEWER_PATH : normalized;
294
295
  }
295
296
  // Viewer host used to open iframe after conversion completes.
296
297
  resolveViewerOrigin() {
297
- const configuredBaseUrl = this.config.baseUrl || this.viewer.getOptions().baseUrl;
298
- if (configuredBaseUrl) {
298
+ const viewerUrl = this.viewer.getOptions().url;
299
+ if (viewerUrl) {
299
300
  try {
300
- return this.normalizeBaseUrl(new URL(configuredBaseUrl, window.location.href).origin);
301
+ return this.normalizeBaseUrl(new URL(viewerUrl, window.location.href).origin);
301
302
  } catch {
302
303
  }
303
304
  }
304
- const viewerUrl = this.viewer.getOptions().url;
305
- if (viewerUrl) {
305
+ const configuredBaseUrl = this.config.baseUrl || this.viewer.getOptions().baseUrl;
306
+ if (configuredBaseUrl) {
306
307
  try {
307
- return this.normalizeBaseUrl(new URL(viewerUrl, window.location.href).origin);
308
+ return this.normalizeBaseUrl(new URL(configuredBaseUrl, window.location.href).origin);
308
309
  } catch {
309
310
  }
310
311
  }
311
312
  return this.normalizeBaseUrl(DEFAULT_VIEWER_ORIGIN);
312
313
  }
313
- // Use the configured conversion API root as-is.
314
+ // Resolve conversion service root from configured API base URL.
315
+ // Do not auto-append path segments (e.g. "/service/conversion").
314
316
  resolveHostConversion() {
315
- return this.resolveConversionBaseUrl();
317
+ return this.resolveBaseUrl();
316
318
  }
317
319
  // Resolve upload path sent to conversion APIs.
318
320
  getUploadPath() {
@@ -430,6 +432,8 @@ var FilesModule = class {
430
432
  originalFilePath: options.originalFilePath,
431
433
  convertOptions,
432
434
  downloadUrl: options.downloadUrl,
435
+ workflowId: options.workflowId,
436
+ taskId: options.taskId,
433
437
  baseFileId: options.baseFileId,
434
438
  baseMajorRev: (_a = options.baseMajorRev) != null ? _a : 0,
435
439
  baseMinorRev: (_b = options.baseMinorRev) != null ? _b : 0
@@ -464,11 +468,11 @@ var FilesModule = class {
464
468
  }
465
469
  // Submit conversion request to the newer downloadUrl-based endpoint.
466
470
  async cacheFileV2(options) {
471
+ var _a;
467
472
  const hostConversion = await this.resolveHostConversion();
468
473
  const params = new URLSearchParams();
469
- if (typeof options.overwrite === "boolean") {
470
- params.set("overwrite", String(options.overwrite));
471
- }
474
+ params.set("overwrite", String((_a = options.overwrite) != null ? _a : true));
475
+ params.set("ignore_line_weight", "1");
472
476
  if (options.project) {
473
477
  params.set("project", options.project);
474
478
  }
@@ -561,8 +565,8 @@ var FilesModule = class {
561
565
  };
562
566
 
563
567
  // src/modules/toolbar.module.ts
564
- function createRequestId() {
565
- return `sheets_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`;
568
+ function createRequestId(prefix) {
569
+ return `${prefix}_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`;
566
570
  }
567
571
  var ALL_3D_TOOLBAR_OPERATORS = [
568
572
  "home",
@@ -648,90 +652,78 @@ var ToolbarModule = class {
648
652
  enableAllPdf() {
649
653
  this.clearDisabledPdf();
650
654
  }
651
- hideToolbar() {
652
- this.setToolbarVisible(false);
655
+ useToolbar(target = "all") {
656
+ this.postToolbarUse({ target });
653
657
  }
654
- showToolbar() {
655
- this.setToolbarVisible(true);
658
+ useLeftToolbar() {
659
+ this.useToolbar("left");
656
660
  }
657
- setToolbarVisible(visible, target = "all") {
658
- this.postToolbarVisibility({ visible, target });
661
+ useCenterToolbar() {
662
+ this.useToolbar("center");
659
663
  }
660
- hideLeftToolbar() {
661
- this.setToolbarVisible(false, "left");
664
+ useRightToolbar() {
665
+ this.useToolbar("right");
662
666
  }
663
- showLeftToolbar() {
664
- this.setToolbarVisible(true, "left");
665
- }
666
- hideCenterToolbar() {
667
- this.setToolbarVisible(false, "center");
668
- }
669
- showCenterToolbar() {
670
- this.setToolbarVisible(true, "center");
671
- }
672
- hideRightToolbar() {
673
- this.setToolbarVisible(false, "right");
674
- }
675
- showRightToolbar() {
676
- this.setToolbarVisible(true, "right");
667
+ usePanel(panel, format) {
668
+ this.postPanelOpen({ panel, format });
677
669
  }
678
670
  openClippingPlanes() {
679
- this.postPanelOpen({ panel: "clipping-commands", format: "3d" });
671
+ this.usePanel("clipping-commands", "3d");
680
672
  }
681
673
  closeClippingPlanes() {
682
674
  this.postPanelClose({ panel: "clipping-commands", format: "3d" });
683
675
  }
684
676
  openSetting() {
685
- this.postPanelOpen({ panel: "setting" });
677
+ this.usePanel("setting");
686
678
  }
687
679
  closeSetting() {
688
680
  this.postPanelClose({ panel: "setting" });
689
681
  }
690
682
  openSetting3D() {
691
- this.postPanelOpen({ panel: "setting", format: "3d" });
683
+ this.usePanel("setting", "3d");
692
684
  }
693
685
  closeSetting3D() {
694
686
  this.postPanelClose({ panel: "setting", format: "3d" });
695
687
  }
696
688
  openSettingPdf() {
697
- this.postPanelOpen({ panel: "setting", format: "pdf" });
689
+ this.usePanel("setting", "pdf");
698
690
  }
699
691
  closeSettingPdf() {
700
692
  this.postPanelClose({ panel: "setting", format: "pdf" });
701
693
  }
702
694
  openStatesObjects() {
703
- this.postPanelOpen({ panel: "statesObjects", format: "3d" });
695
+ this.usePanel("statesObjects", "3d");
704
696
  }
705
697
  closeStatesObjects() {
706
698
  this.postPanelClose({ panel: "statesObjects", format: "3d" });
707
699
  }
708
700
  openLinkedObjects() {
709
- this.postPanelOpen({ panel: "linkedObjects", format: "3d" });
701
+ this.usePanel("linkedObjects", "3d");
710
702
  }
711
703
  closeLinkedObjects() {
712
704
  this.postPanelClose({ panel: "linkedObjects", format: "3d" });
713
705
  }
714
706
  openModelTree() {
715
- this.postPanelOpen({ panel: "model-tree", format: "3d" });
707
+ this.usePanel("model-tree", "3d");
716
708
  }
717
709
  closeModelTree() {
718
710
  this.postPanelClose({ panel: "model-tree", format: "3d" });
719
711
  }
720
712
  openObjectProperties() {
721
- this.postPanelOpen({ panel: "object-properties", format: "3d" });
713
+ this.usePanel("object-properties", "3d");
722
714
  }
723
715
  closeObjectProperties() {
724
716
  this.postPanelClose({ panel: "object-properties", format: "3d" });
725
717
  }
726
718
  openSheets() {
727
- this.postPanelOpen({ panel: "sheets", format: "3d" });
719
+ this.usePanel("sheets", "3d");
728
720
  }
729
721
  closeSheets() {
730
722
  this.postPanelClose({ panel: "sheets", format: "3d" });
731
723
  }
732
724
  getSheets(options) {
733
725
  var _a;
734
- const requestId = createRequestId();
726
+ const requestId = createRequestId("sheets");
735
727
  const timeoutMs = Math.max(1e3, (_a = options == null ? void 0 : options.timeoutMs) != null ? _a : 1e4);
736
728
  return new Promise((resolve, reject) => {
737
729
  const timer = setTimeout(() => {
@@ -747,6 +739,60 @@ var ToolbarModule = class {
747
739
  this.postSheetsGetList({ requestId });
748
740
  });
749
741
  }
742
+ getObjectProperties(options) {
743
+ var _a;
744
+ const requestId = createRequestId("object_properties");
745
+ const timeoutMs = Math.max(1e3, (_a = options == null ? void 0 : options.timeoutMs) != null ? _a : 1e4);
746
+ return new Promise((resolve, reject) => {
747
+ const timer = setTimeout(() => {
748
+ off();
749
+ reject(new Error("Timeout while getting object properties list from viewer"));
750
+ }, timeoutMs);
751
+ const off = this.viewer._on("object-properties:list", (payload) => {
752
+ if (payload.requestId !== requestId) return;
753
+ clearTimeout(timer);
754
+ off();
755
+ resolve(payload.properties);
756
+ });
757
+ this.postObjectPropertiesGetList({ requestId });
758
+ });
759
+ }
760
+ getLinkedObjects(options) {
761
+ var _a;
762
+ const requestId = createRequestId("linked_objects");
763
+ const timeoutMs = Math.max(1e3, (_a = options == null ? void 0 : options.timeoutMs) != null ? _a : 1e4);
764
+ return new Promise((resolve, reject) => {
765
+ const timer = setTimeout(() => {
766
+ off();
767
+ reject(new Error("Timeout while getting linked objects list from viewer"));
768
+ }, timeoutMs);
769
+ const off = this.viewer._on("linked-objects:list", (payload) => {
770
+ if (payload.requestId !== requestId) return;
771
+ clearTimeout(timer);
772
+ off();
773
+ resolve(payload.linkedObjects);
774
+ });
775
+ this.postLinkedObjectsGetList({ requestId });
776
+ });
777
+ }
778
+ getStatesObjects(options) {
779
+ var _a;
780
+ const requestId = createRequestId("states_objects");
781
+ const timeoutMs = Math.max(1e3, (_a = options == null ? void 0 : options.timeoutMs) != null ? _a : 1e4);
782
+ return new Promise((resolve, reject) => {
783
+ const timer = setTimeout(() => {
784
+ off();
785
+ reject(new Error("Timeout while getting states objects list from viewer"));
786
+ }, timeoutMs);
787
+ const off = this.viewer._on("states-objects:list", (payload) => {
788
+ if (payload.requestId !== requestId) return;
789
+ clearTimeout(timer);
790
+ off();
791
+ resolve(payload.statesObjects);
792
+ });
793
+ this.postStatesObjectsGetList({ requestId });
794
+ });
795
+ }
750
796
  applySheet(sheetId) {
751
797
  this.postSheetsApply({ sheetId });
752
798
  }
@@ -789,8 +835,8 @@ var ToolbarModule = class {
789
835
  postConfig(payload) {
790
836
  this.viewer.postToViewer("viewer-toolbar-config" /* TOOLBAR_CONFIG */, payload);
791
837
  }
792
- postToolbarVisibility(payload) {
793
- this.viewer.postToViewer("viewer-toolbar-visibility" /* TOOLBAR_VISIBILITY */, payload);
838
+ postToolbarUse(payload) {
839
+ this.viewer.postToViewer("viewer-toolbar-use" /* TOOLBAR_USE */, payload);
794
840
  }
795
841
  postPanelOpen(payload) {
796
842
  this.viewer.postToViewer("viewer-panel-open" /* PANEL_OPEN */, payload);
@@ -807,6 +853,15 @@ var ToolbarModule = class {
807
853
  postSheetsApply(payload) {
808
854
  this.viewer.postToViewer("viewer-sheets-apply" /* SHEETS_APPLY */, payload);
809
855
  }
856
+ postObjectPropertiesGetList(payload) {
857
+ this.viewer.postToViewer("viewer-object-properties-get-list" /* OBJECT_PROPERTIES_GET_LIST */, payload);
858
+ }
859
+ postLinkedObjectsGetList(payload) {
860
+ this.viewer.postToViewer("viewer-linked-objects-get-list" /* LINKED_OBJECTS_GET_LIST */, payload);
861
+ }
862
+ postStatesObjectsGetList(payload) {
863
+ this.viewer.postToViewer("viewer-states-objects-get-list" /* STATES_OBJECTS_GET_LIST */, payload);
864
+ }
810
865
  };
811
866
 
812
867
  // src/modules/model-tree.module.ts
@@ -963,6 +1018,8 @@ var LanguageModule = class {
963
1018
  };
964
1019
 
965
1020
  // src/viewer.ts
1021
+ var SDK_VIEWER_PATH2 = "/mainviewer-sdk";
1022
+ var LEGACY_VIEWER_PATH2 = "/mainviewer";
966
1023
  var Viewer3D = class {
967
1024
  constructor(options) {
968
1025
  this.options = options;
@@ -1067,6 +1124,54 @@ var Viewer3D = class {
1067
1124
  });
1068
1125
  break;
1069
1126
  }
1127
+ case "viewer-object-properties-list" /* OBJECT_PROPERTIES_LIST */: {
1128
+ const payload = data.payload;
1129
+ if (!payload || !payload.requestId || !Array.isArray(payload.properties)) break;
1130
+ this._emit("object-properties:list", {
1131
+ requestId: String(payload.requestId),
1132
+ properties: payload.properties.filter((item) => item && typeof item === "object").map((item) => ({ ...item })),
1133
+ timestamp: Number(payload.timestamp) || Date.now()
1134
+ });
1135
+ break;
1136
+ }
1137
+ case "viewer-linked-objects-list" /* LINKED_OBJECTS_LIST */: {
1138
+ const payload = data.payload;
1139
+ if (!payload || !payload.requestId || !Array.isArray(payload.linkedObjects)) break;
1140
+ this._emit("linked-objects:list", {
1141
+ requestId: String(payload.requestId),
1142
+ linkedObjects: payload.linkedObjects.filter((item) => item && typeof item === "object").map((item) => ({ ...item })),
1143
+ timestamp: Number(payload.timestamp) || Date.now()
1144
+ });
1145
+ break;
1146
+ }
1147
+ case "viewer-states-objects-list" /* STATES_OBJECTS_LIST */: {
1148
+ const payload = data.payload;
1149
+ if (!payload || !payload.requestId || !Array.isArray(payload.statesObjects)) break;
1150
+ this._emit("states-objects:list", {
1151
+ requestId: String(payload.requestId),
1152
+ statesObjects: payload.statesObjects.map((item) => {
1153
+ var _a2, _b2, _c2, _d2, _e, _f, _g;
1154
+ return {
1155
+ id: String((_a2 = item.id) != null ? _a2 : ""),
1156
+ name: String((_b2 = item.name) != null ? _b2 : ""),
1157
+ char: String((_c2 = item.char) != null ? _c2 : ""),
1158
+ object: Array.isArray(item.object) ? item.object.map((objectItem) => {
1159
+ var _a3;
1160
+ return {
1161
+ name: String((_a3 = objectItem == null ? void 0 : objectItem.name) != null ? _a3 : ""),
1162
+ id: Number(objectItem == null ? void 0 : objectItem.id) || 0
1163
+ };
1164
+ }) : [],
1165
+ states: {
1166
+ color: String((_e = (_d2 = item.states) == null ? void 0 : _d2.color) != null ? _e : ""),
1167
+ type: String((_g = (_f = item.states) == null ? void 0 : _f.type) != null ? _g : "")
1168
+ }
1169
+ };
1170
+ }),
1171
+ timestamp: Number(payload.timestamp) || Date.now()
1172
+ });
1173
+ break;
1174
+ }
1070
1175
  case "viewer-markup-list" /* MARKUP_LIST */: {
1071
1176
  const payload = data.payload;
1072
1177
  if (!payload || !payload.requestId || !Array.isArray(payload.markups)) break;
@@ -1186,18 +1291,39 @@ var Viewer3D = class {
1186
1291
  if (!this.initialized) throw new Error("Call viewer.init() before using viewer");
1187
1292
  }
1188
1293
  withInitialOptions(url) {
1189
- if (!this.options.initialToolbarVisibility) return url;
1190
1294
  try {
1191
1295
  const parsedUrl = new URL(url, window.location.href);
1192
- parsedUrl.searchParams.set(
1193
- "toolbarVisibility",
1194
- JSON.stringify(this.options.initialToolbarVisibility)
1195
- );
1296
+ if (parsedUrl.pathname === LEGACY_VIEWER_PATH2) {
1297
+ parsedUrl.pathname = SDK_VIEWER_PATH2;
1298
+ }
1299
+ const initialToolbar = this.normalizeInitialToolbar();
1300
+ if (initialToolbar) {
1301
+ parsedUrl.searchParams.set("useToolbar", JSON.stringify(initialToolbar));
1302
+ }
1196
1303
  return parsedUrl.toString();
1197
1304
  } catch {
1198
1305
  return url;
1199
1306
  }
1200
1307
  }
1308
+ normalizeInitialToolbar() {
1309
+ const initialToolbar = this.options.initialToolbar;
1310
+ if (!initialToolbar) return null;
1311
+ if (typeof initialToolbar === "string") {
1312
+ return { [initialToolbar]: true };
1313
+ }
1314
+ if (Array.isArray(initialToolbar)) {
1315
+ return initialToolbar.reduce((result, target) => {
1316
+ result[target] = true;
1317
+ return result;
1318
+ }, {});
1319
+ }
1320
+ const entries = Object.entries(initialToolbar).filter(([, enabled]) => enabled === true);
1321
+ if (entries.length === 0) return null;
1322
+ return entries.reduce((result, [target]) => {
1323
+ result[target] = true;
1324
+ return result;
1325
+ }, {});
1326
+ }
1201
1327
  // ===== typed internal events used by modules =====
1202
1328
  _on(event, cb) {
1203
1329
  return this.emitter.on(event, cb);
package/package.json CHANGED
@@ -1,16 +1,21 @@
1
1
  {
2
2
  "name": "3dviewer-sdk",
3
- "version": "1.0.12",
3
+ "version": "1.0.14",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "files": [
7
7
  "dist"
8
8
  ],
9
9
  "scripts": {
10
- "build": "tsup src/index.ts --format cjs,esm --dts --no-splitting"
10
+ "build": "tsup src/index.ts --format cjs,esm --dts --no-splitting",
11
+ "test": "vitest run tests",
12
+ "test:watch": "vitest tests"
11
13
  },
12
14
  "devDependencies": {
15
+ "@vitest/coverage-v8": "^4.1.4",
16
+ "jsdom": "^29.0.2",
13
17
  "tsup": "^8.5.1",
14
- "typescript": "^5.9.3"
18
+ "typescript": "^5.9.3",
19
+ "vitest": "^4.1.4"
15
20
  }
16
21
  }
@@ -1,97 +0,0 @@
1
- import type { MarkupListItem, MarkupOperationResultPayload, PdfCurrentPagePayload, PdfModeEventPayload, PdfToolbarActionEventPayload } from "./messages";
2
- export declare type ViewerEventMap = {
3
- "camera:home": {
4
- timestamp: number;
5
- };
6
- "node:select": {
7
- nodeId: string;
8
- timestamp: number;
9
- };
10
- "interaction:pan-change": {
11
- enabled: boolean;
12
- };
13
- "toolbar:pdf-plan-mode": PdfModeEventPayload;
14
- "toolbar:pdf-document-mode": PdfModeEventPayload;
15
- "toolbar:pdf-first-page": PdfToolbarActionEventPayload;
16
- "toolbar:pdf-previous-page": PdfToolbarActionEventPayload;
17
- "toolbar:pdf-next-page": PdfToolbarActionEventPayload;
18
- "toolbar:pdf-last-page": PdfToolbarActionEventPayload;
19
- "toolbar:pdf-current-page": PdfCurrentPagePayload;
20
- "modelTree:node-ids": {
21
- requestId: string;
22
- nodeIds: string[];
23
- timestamp: number;
24
- };
25
- "sheets:list": {
26
- requestId: string;
27
- sheets: {
28
- id: string | number;
29
- name: string;
30
- is3D?: boolean;
31
- viewId?: string;
32
- }[];
33
- activeSheetId?: string | number | null;
34
- timestamp: number;
35
- };
36
- "markup:list": {
37
- requestId: string;
38
- markups: MarkupListItem[];
39
- timestamp: number;
40
- };
41
- "markup:save": MarkupOperationResultPayload;
42
- "markup:cancel": MarkupOperationResultPayload;
43
- };
44
- export declare type LoadStage = "idle" | "uploading" | "converting" | "rendering" | "completed" | "error";
45
- export declare type LoadStatePayload = {
46
- isLoading: boolean;
47
- stage: LoadStage;
48
- message?: string;
49
- elapsedMs?: number;
50
- };
51
- export declare type PreparedViewerData = {
52
- baseFileId: string;
53
- baseMajorRev: number;
54
- baseMinorRev: number;
55
- fileName: string;
56
- query: string;
57
- url: string;
58
- };
59
- export declare type FilesEventMap = {
60
- "files:state": LoadStatePayload;
61
- "files:upload:start": {
62
- fileName: string;
63
- };
64
- "files:upload:success": {
65
- fileName: string;
66
- baseFileId: string;
67
- };
68
- "files:upload:error": {
69
- fileName: string;
70
- error: string;
71
- };
72
- "files:conversion:start": {
73
- fileName: string;
74
- };
75
- "files:conversion:success": PreparedViewerData;
76
- "files:conversion:error": {
77
- fileName: string;
78
- error: string;
79
- };
80
- "files:render:start": {
81
- url: string;
82
- };
83
- "files:render:success": {
84
- url: string;
85
- };
86
- "files:render:error": {
87
- url?: string;
88
- error: string;
89
- };
90
- "files:load:success": PreparedViewerData;
91
- "files:load:error": {
92
- error: string;
93
- };
94
- };
95
- export declare type SdkEventMap = ViewerEventMap & FilesEventMap;
96
- export declare type SdkEventKey = keyof SdkEventMap;
97
- export declare type SdkEventPayload<K extends SdkEventKey> = SdkEventMap[K];
@@ -1 +0,0 @@
1
- export {};