@agenus-io/pixel-backend-sdk 1.1.6 → 1.1.8
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/Class/index.d.ts +8 -1
- package/dist/Class/index.js +161 -0
- package/dist/Class/interface.d.ts +242 -1
- package/package.json +1 -1
package/dist/Class/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AWSConfig, SendSaleParams } from "../config";
|
|
2
|
-
import { ICreatePixelDTO, IGetOnePixelDTO, IGetPixelDTO, IDeletePixelDTO, IUpdatePixelDTO, IPixelSdk, IUpdateOffersDTO, IMetricsDTO, IFunilSummaryDTO, IAccessGraphDTO, IEventsSourceDTO, IEventsDeviceDTO, IEventsPerPageDTO, IEventsPerProjectDTO, ISummaryDTO } from './interface';
|
|
2
|
+
import { ICreatePixelDTO, IGetOnePixelDTO, IGetPixelDTO, IDeletePixelDTO, IUpdatePixelDTO, IPixelSdk, IUpdateOffersDTO, IMetricsDTO, IFunilSummaryDTO, IAccessGraphDTO, IEventsSourceDTO, IEventsDeviceDTO, IEventsPerPageDTO, IEventsPerProjectDTO, ISummaryDTO, ISessionsSummaryDTO, ISessionsGraphDTO, IConversionGraphDTO, IVisitorsGraphDTO, ITrafficDeviceDTO, ITrafficSourceDTO, IEventGetDTO } from './interface';
|
|
3
3
|
/**
|
|
4
4
|
* Classe responsável por com vendas e pixels
|
|
5
5
|
*/
|
|
@@ -36,4 +36,11 @@ export declare class PixelSDK implements IPixelSdk {
|
|
|
36
36
|
EventsPerPage({ workSpaceId, startDate, endDate }: IEventsPerPageDTO.Params): Promise<IEventsPerPageDTO.Result>;
|
|
37
37
|
EventsPerProject({ workSpaceId, startDate, endDate }: IEventsPerProjectDTO.Params): Promise<IEventsPerProjectDTO.Result>;
|
|
38
38
|
Summary({ workSpaceId, startDate, endDate, projectId, pageId }: ISummaryDTO.Params): Promise<ISummaryDTO.Result>;
|
|
39
|
+
SessionsSummary({ workSpaceId, startDate, endDate, pixelId }: ISessionsSummaryDTO.Params): Promise<ISessionsSummaryDTO.Result>;
|
|
40
|
+
SessionsGraph({ workSpaceId, startDate, endDate }: ISessionsGraphDTO.Params): Promise<ISessionsGraphDTO.Result>;
|
|
41
|
+
ConversionGraph({ workSpaceId, startDate, endDate, pixelId }: IConversionGraphDTO.Params): Promise<IConversionGraphDTO.Result>;
|
|
42
|
+
VisitorsGraph({ workSpaceId, startDate, endDate, pixelId }: IVisitorsGraphDTO.Params): Promise<IVisitorsGraphDTO.Result>;
|
|
43
|
+
TrafficDevice({ workSpaceId, startDate, endDate, pixelId }: ITrafficDeviceDTO.Params): Promise<ITrafficDeviceDTO.Result>;
|
|
44
|
+
TrafficSource({ workSpaceId, startDate, endDate, pixelId }: ITrafficSourceDTO.Params): Promise<ITrafficSourceDTO.Result>;
|
|
45
|
+
EventGet({ workSpaceId, startDate, endDate, pixelId, type, category }: IEventGetDTO.Params): Promise<IEventGetDTO.Result>;
|
|
39
46
|
}
|
package/dist/Class/index.js
CHANGED
|
@@ -401,5 +401,166 @@ class PixelSDK {
|
|
|
401
401
|
throw "Erro ao obter resumo de eventos";
|
|
402
402
|
}
|
|
403
403
|
}
|
|
404
|
+
async SessionsSummary({ workSpaceId, startDate, endDate, pixelId }) {
|
|
405
|
+
try {
|
|
406
|
+
const token = {
|
|
407
|
+
appId: this.appId,
|
|
408
|
+
secretToken: this.appToken,
|
|
409
|
+
workSpaceId: workSpaceId,
|
|
410
|
+
};
|
|
411
|
+
const response = await axios_1.default.get(`${this.apiUrl}/metrics/sessions/summary`, {
|
|
412
|
+
headers: { "app-id": token.appId, "app-secret-token": token.secretToken, "work-space-id": token.workSpaceId },
|
|
413
|
+
params: { startDate, endDate, pixelId },
|
|
414
|
+
});
|
|
415
|
+
return response.data;
|
|
416
|
+
}
|
|
417
|
+
catch (error) {
|
|
418
|
+
if (error instanceof axios_1.AxiosError) {
|
|
419
|
+
console.log(error.response?.data);
|
|
420
|
+
}
|
|
421
|
+
else {
|
|
422
|
+
console.log(error);
|
|
423
|
+
}
|
|
424
|
+
throw "Erro ao obter resumo de sessões";
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
async SessionsGraph({ workSpaceId, startDate, endDate }) {
|
|
428
|
+
try {
|
|
429
|
+
const token = {
|
|
430
|
+
appId: this.appId,
|
|
431
|
+
secretToken: this.appToken,
|
|
432
|
+
workSpaceId: workSpaceId,
|
|
433
|
+
};
|
|
434
|
+
const response = await axios_1.default.get(`${this.apiUrl}/metrics/sessions/graph`, {
|
|
435
|
+
headers: { "app-id": token.appId, "app-secret-token": token.secretToken, "work-space-id": token.workSpaceId },
|
|
436
|
+
params: { startDate, endDate },
|
|
437
|
+
});
|
|
438
|
+
return response.data;
|
|
439
|
+
}
|
|
440
|
+
catch (error) {
|
|
441
|
+
if (error instanceof axios_1.AxiosError) {
|
|
442
|
+
console.log(error.response?.data);
|
|
443
|
+
}
|
|
444
|
+
else {
|
|
445
|
+
console.log(error);
|
|
446
|
+
}
|
|
447
|
+
throw "Erro ao obter gráfico de sessões";
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
async ConversionGraph({ workSpaceId, startDate, endDate, pixelId }) {
|
|
451
|
+
try {
|
|
452
|
+
const token = {
|
|
453
|
+
appId: this.appId,
|
|
454
|
+
secretToken: this.appToken,
|
|
455
|
+
workSpaceId: workSpaceId,
|
|
456
|
+
};
|
|
457
|
+
const response = await axios_1.default.get(`${this.apiUrl}/metrics/sessions/conversion-graph`, {
|
|
458
|
+
headers: { "app-id": token.appId, "app-secret-token": token.secretToken, "work-space-id": token.workSpaceId },
|
|
459
|
+
params: { startDate, endDate, pixelId },
|
|
460
|
+
});
|
|
461
|
+
return response.data;
|
|
462
|
+
}
|
|
463
|
+
catch (error) {
|
|
464
|
+
if (error instanceof axios_1.AxiosError) {
|
|
465
|
+
console.log(error.response?.data);
|
|
466
|
+
}
|
|
467
|
+
else {
|
|
468
|
+
console.log(error);
|
|
469
|
+
}
|
|
470
|
+
throw "Erro ao obter gráfico de conversões";
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
async VisitorsGraph({ workSpaceId, startDate, endDate, pixelId }) {
|
|
474
|
+
try {
|
|
475
|
+
const token = {
|
|
476
|
+
appId: this.appId,
|
|
477
|
+
secretToken: this.appToken,
|
|
478
|
+
workSpaceId: workSpaceId,
|
|
479
|
+
};
|
|
480
|
+
const response = await axios_1.default.get(`${this.apiUrl}/metrics/visitors/graph`, {
|
|
481
|
+
headers: { "app-id": token.appId, "app-secret-token": token.secretToken, "work-space-id": token.workSpaceId },
|
|
482
|
+
params: { startDate, endDate, pixelId },
|
|
483
|
+
});
|
|
484
|
+
return response.data;
|
|
485
|
+
}
|
|
486
|
+
catch (error) {
|
|
487
|
+
if (error instanceof axios_1.AxiosError) {
|
|
488
|
+
console.log(error.response?.data);
|
|
489
|
+
}
|
|
490
|
+
else {
|
|
491
|
+
console.log(error);
|
|
492
|
+
}
|
|
493
|
+
throw "Erro ao obter gráfico de visitantes";
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
async TrafficDevice({ workSpaceId, startDate, endDate, pixelId }) {
|
|
497
|
+
try {
|
|
498
|
+
const token = {
|
|
499
|
+
appId: this.appId,
|
|
500
|
+
secretToken: this.appToken,
|
|
501
|
+
workSpaceId: workSpaceId,
|
|
502
|
+
};
|
|
503
|
+
const response = await axios_1.default.get(`${this.apiUrl}/metrics/visitors/traffic-device`, {
|
|
504
|
+
headers: { "app-id": token.appId, "app-secret-token": token.secretToken, "work-space-id": token.workSpaceId },
|
|
505
|
+
params: { startDate, endDate, pixelId },
|
|
506
|
+
});
|
|
507
|
+
return response.data;
|
|
508
|
+
}
|
|
509
|
+
catch (error) {
|
|
510
|
+
if (error instanceof axios_1.AxiosError) {
|
|
511
|
+
console.log(error.response?.data);
|
|
512
|
+
}
|
|
513
|
+
else {
|
|
514
|
+
console.log(error);
|
|
515
|
+
}
|
|
516
|
+
throw "Erro ao obter dispositivos de tráfego";
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
async TrafficSource({ workSpaceId, startDate, endDate, pixelId }) {
|
|
520
|
+
try {
|
|
521
|
+
const token = {
|
|
522
|
+
appId: this.appId,
|
|
523
|
+
secretToken: this.appToken,
|
|
524
|
+
workSpaceId: workSpaceId,
|
|
525
|
+
};
|
|
526
|
+
const response = await axios_1.default.get(`${this.apiUrl}/metrics/visitors/traffic-source`, {
|
|
527
|
+
headers: { "app-id": token.appId, "app-secret-token": token.secretToken, "work-space-id": token.workSpaceId },
|
|
528
|
+
params: { startDate, endDate, pixelId },
|
|
529
|
+
});
|
|
530
|
+
return response.data;
|
|
531
|
+
}
|
|
532
|
+
catch (error) {
|
|
533
|
+
if (error instanceof axios_1.AxiosError) {
|
|
534
|
+
console.log(error.response?.data);
|
|
535
|
+
}
|
|
536
|
+
else {
|
|
537
|
+
console.log(error);
|
|
538
|
+
}
|
|
539
|
+
throw "Erro ao obter dispositivos de tráfego";
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
async EventGet({ workSpaceId, startDate, endDate, pixelId, type, category }) {
|
|
543
|
+
try {
|
|
544
|
+
const token = {
|
|
545
|
+
appId: this.appId,
|
|
546
|
+
secretToken: this.appToken,
|
|
547
|
+
workSpaceId: workSpaceId,
|
|
548
|
+
};
|
|
549
|
+
const response = await axios_1.default.get(`${this.apiUrl}/events`, {
|
|
550
|
+
headers: { "app-id": token.appId, "app-secret-token": token.secretToken, "work-space-id": token.workSpaceId },
|
|
551
|
+
params: { startDate, endDate, pixelId, type, category },
|
|
552
|
+
});
|
|
553
|
+
return response.data;
|
|
554
|
+
}
|
|
555
|
+
catch (error) {
|
|
556
|
+
if (error instanceof axios_1.AxiosError) {
|
|
557
|
+
console.log(error.response?.data);
|
|
558
|
+
}
|
|
559
|
+
else {
|
|
560
|
+
console.log(error);
|
|
561
|
+
}
|
|
562
|
+
throw "Erro ao obter eventos";
|
|
563
|
+
}
|
|
564
|
+
}
|
|
404
565
|
}
|
|
405
566
|
exports.PixelSDK = PixelSDK;
|
|
@@ -259,8 +259,134 @@ export declare namespace IEventsPerProjectDTO {
|
|
|
259
259
|
startDate: Date;
|
|
260
260
|
endDate: Date;
|
|
261
261
|
};
|
|
262
|
+
type PaginationMeta = {
|
|
263
|
+
total: number;
|
|
264
|
+
totalPages: number;
|
|
265
|
+
page: number;
|
|
266
|
+
pageSize: number;
|
|
267
|
+
};
|
|
268
|
+
type DeviceOs = {
|
|
269
|
+
name: string;
|
|
270
|
+
version: string;
|
|
271
|
+
};
|
|
272
|
+
type DeviceEngine = {
|
|
273
|
+
name: string;
|
|
274
|
+
version: string;
|
|
275
|
+
};
|
|
276
|
+
type DeviceScreen = {
|
|
277
|
+
width: number;
|
|
278
|
+
height: number;
|
|
279
|
+
pixel_ratio: number;
|
|
280
|
+
};
|
|
281
|
+
type DeviceBrowser = {
|
|
282
|
+
name: string;
|
|
283
|
+
version: string;
|
|
284
|
+
};
|
|
285
|
+
type EventDevice = {
|
|
286
|
+
id: string;
|
|
287
|
+
os: DeviceOs;
|
|
288
|
+
type: string;
|
|
289
|
+
engine: DeviceEngine;
|
|
290
|
+
screen: DeviceScreen;
|
|
291
|
+
browser: DeviceBrowser;
|
|
292
|
+
language: string;
|
|
293
|
+
userAgent: string;
|
|
294
|
+
};
|
|
295
|
+
type EventScriptMeta = {
|
|
296
|
+
pageId: string;
|
|
297
|
+
version: string;
|
|
298
|
+
projectId: string;
|
|
299
|
+
script_url: string;
|
|
300
|
+
environment: string;
|
|
301
|
+
pixel_source: string;
|
|
302
|
+
};
|
|
303
|
+
type BehaviorSnapshot = {
|
|
304
|
+
state: {
|
|
305
|
+
isIdle: boolean;
|
|
306
|
+
isActive: boolean;
|
|
307
|
+
isVisible: boolean;
|
|
308
|
+
};
|
|
309
|
+
pageId: string;
|
|
310
|
+
scroll: {
|
|
311
|
+
maxDepth: number;
|
|
312
|
+
};
|
|
313
|
+
timing: {
|
|
314
|
+
idleTime: number;
|
|
315
|
+
activeTime: number;
|
|
316
|
+
visibleTime: number;
|
|
317
|
+
};
|
|
318
|
+
sessionId: string;
|
|
319
|
+
timestamp: number;
|
|
320
|
+
visitorId: string;
|
|
321
|
+
engagement: {
|
|
322
|
+
level: string;
|
|
323
|
+
score: number;
|
|
324
|
+
};
|
|
325
|
+
interaction: {
|
|
326
|
+
clicks: number;
|
|
327
|
+
keypresses: number;
|
|
328
|
+
mouseMovements: number;
|
|
329
|
+
};
|
|
330
|
+
};
|
|
331
|
+
type BehaviorCriticalEvent = {
|
|
332
|
+
type: string;
|
|
333
|
+
pageId: string;
|
|
334
|
+
sessionId: string;
|
|
335
|
+
timestamp: number;
|
|
336
|
+
visitorId: string;
|
|
337
|
+
};
|
|
338
|
+
type BehaviorSummaryData = {
|
|
339
|
+
path: string;
|
|
340
|
+
hostname: string;
|
|
341
|
+
page_url: string;
|
|
342
|
+
sessionId: string;
|
|
343
|
+
timestamp: number;
|
|
344
|
+
visitorId: string;
|
|
345
|
+
behaviorSnapshots: BehaviorSnapshot[];
|
|
346
|
+
behaviorCriticalEvents: BehaviorCriticalEvent[];
|
|
347
|
+
};
|
|
348
|
+
type UserIdleData = {
|
|
349
|
+
path: string;
|
|
350
|
+
hostname: string;
|
|
351
|
+
page_url: string;
|
|
352
|
+
active_ms: number;
|
|
353
|
+
timestamp: number;
|
|
354
|
+
idle_threshold_ms: number;
|
|
355
|
+
};
|
|
356
|
+
type EventPayload = BehaviorSummaryData | UserIdleData | Record<string, unknown>;
|
|
357
|
+
type EventItem = {
|
|
358
|
+
id: string;
|
|
359
|
+
eventId: string;
|
|
360
|
+
sent: boolean;
|
|
361
|
+
errorType: string;
|
|
362
|
+
errorMessage: string | null;
|
|
363
|
+
sessionId: string;
|
|
364
|
+
currency: string | null;
|
|
365
|
+
type: string;
|
|
366
|
+
category: string;
|
|
367
|
+
timestamp: string;
|
|
368
|
+
fingerprint: string;
|
|
369
|
+
ip: string;
|
|
370
|
+
userAgent: string;
|
|
371
|
+
device: EventDevice;
|
|
372
|
+
data: EventPayload;
|
|
373
|
+
meta: EventScriptMeta;
|
|
374
|
+
pixelId: string;
|
|
375
|
+
createdAt: string;
|
|
376
|
+
updatedAt: string;
|
|
377
|
+
visitorId: string;
|
|
378
|
+
utms: unknown;
|
|
379
|
+
utmSource: string | null;
|
|
380
|
+
utmMedium: string | null;
|
|
381
|
+
utmCampaign: string | null;
|
|
382
|
+
utmContent: string | null;
|
|
383
|
+
utmTerm: string | null;
|
|
384
|
+
pageusProjectId: string | null;
|
|
385
|
+
pageusPageId: string | null;
|
|
386
|
+
};
|
|
262
387
|
type Result = {
|
|
263
|
-
data:
|
|
388
|
+
data: EventItem[];
|
|
389
|
+
meta: PaginationMeta;
|
|
264
390
|
};
|
|
265
391
|
}
|
|
266
392
|
export declare namespace ISummaryDTO {
|
|
@@ -280,6 +406,114 @@ export declare namespace ISummaryDTO {
|
|
|
280
406
|
engagementRate: number;
|
|
281
407
|
};
|
|
282
408
|
}
|
|
409
|
+
export declare namespace ISessionsSummaryDTO {
|
|
410
|
+
type Params = {
|
|
411
|
+
workSpaceId: string;
|
|
412
|
+
startDate?: Date;
|
|
413
|
+
endDate?: Date;
|
|
414
|
+
pixelId?: string;
|
|
415
|
+
};
|
|
416
|
+
type Result = {
|
|
417
|
+
totalSessions: number;
|
|
418
|
+
uniqueUsers: number;
|
|
419
|
+
averageTimeSession: number;
|
|
420
|
+
conversionRate: string;
|
|
421
|
+
dataSessionsEngagement: number;
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
export declare namespace ISessionsGraphDTO {
|
|
425
|
+
type Params = {
|
|
426
|
+
workSpaceId: string;
|
|
427
|
+
startDate?: Date;
|
|
428
|
+
endDate?: Date;
|
|
429
|
+
pixelId?: string;
|
|
430
|
+
};
|
|
431
|
+
type Result = {
|
|
432
|
+
graph: {
|
|
433
|
+
sessions: number;
|
|
434
|
+
date: string;
|
|
435
|
+
}[];
|
|
436
|
+
percentageEvolution: number;
|
|
437
|
+
};
|
|
438
|
+
}
|
|
439
|
+
export declare namespace IConversionGraphDTO {
|
|
440
|
+
type Params = {
|
|
441
|
+
workSpaceId: string;
|
|
442
|
+
startDate?: Date;
|
|
443
|
+
endDate?: Date;
|
|
444
|
+
pixelId?: string;
|
|
445
|
+
};
|
|
446
|
+
type Result = {
|
|
447
|
+
graph: {
|
|
448
|
+
conversions: number;
|
|
449
|
+
sessions: number;
|
|
450
|
+
date: string;
|
|
451
|
+
}[];
|
|
452
|
+
percentageEvolution: number;
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
export declare namespace IVisitorsGraphDTO {
|
|
456
|
+
type Params = {
|
|
457
|
+
workSpaceId: string;
|
|
458
|
+
startDate?: Date;
|
|
459
|
+
endDate?: Date;
|
|
460
|
+
pixelId?: string;
|
|
461
|
+
};
|
|
462
|
+
type Result = {
|
|
463
|
+
graph: {
|
|
464
|
+
date: string;
|
|
465
|
+
visitors: number;
|
|
466
|
+
}[];
|
|
467
|
+
percentageEvolution: number;
|
|
468
|
+
};
|
|
469
|
+
}
|
|
470
|
+
export declare namespace ITrafficDeviceDTO {
|
|
471
|
+
type Params = {
|
|
472
|
+
workSpaceId: string;
|
|
473
|
+
startDate?: Date;
|
|
474
|
+
endDate?: Date;
|
|
475
|
+
pixelId?: string;
|
|
476
|
+
};
|
|
477
|
+
type Result = {
|
|
478
|
+
os: {
|
|
479
|
+
_count: number;
|
|
480
|
+
os: string;
|
|
481
|
+
}[];
|
|
482
|
+
browser: {
|
|
483
|
+
_count: number;
|
|
484
|
+
browser: string;
|
|
485
|
+
}[];
|
|
486
|
+
type: {
|
|
487
|
+
_count: number;
|
|
488
|
+
type: string;
|
|
489
|
+
}[];
|
|
490
|
+
};
|
|
491
|
+
}
|
|
492
|
+
export declare namespace ITrafficSourceDTO {
|
|
493
|
+
type Params = {
|
|
494
|
+
workSpaceId: string;
|
|
495
|
+
startDate?: Date;
|
|
496
|
+
endDate?: Date;
|
|
497
|
+
pixelId?: string;
|
|
498
|
+
};
|
|
499
|
+
type Result = {
|
|
500
|
+
_count: number;
|
|
501
|
+
utmSource: string;
|
|
502
|
+
}[];
|
|
503
|
+
}
|
|
504
|
+
export declare namespace IEventGetDTO {
|
|
505
|
+
type Params = {
|
|
506
|
+
workSpaceId: string;
|
|
507
|
+
startDate?: Date;
|
|
508
|
+
endDate?: Date;
|
|
509
|
+
pixelId?: string;
|
|
510
|
+
type?: string[];
|
|
511
|
+
category?: string[];
|
|
512
|
+
};
|
|
513
|
+
type Result = {
|
|
514
|
+
data: Record<string, number>;
|
|
515
|
+
};
|
|
516
|
+
}
|
|
283
517
|
export interface IPixelSdk {
|
|
284
518
|
Create(params: ICreatePixelDTO.Params): Promise<ICreatePixelDTO.Result>;
|
|
285
519
|
Update(params: IUpdatePixelDTO.Params): Promise<void>;
|
|
@@ -295,5 +529,12 @@ export interface IPixelSdk {
|
|
|
295
529
|
EventsPerPage(params: IEventsPerPageDTO.Params): Promise<IEventsPerPageDTO.Result>;
|
|
296
530
|
EventsPerProject(params: IEventsPerProjectDTO.Params): Promise<IEventsPerProjectDTO.Result>;
|
|
297
531
|
Summary(params: ISummaryDTO.Params): Promise<ISummaryDTO.Result>;
|
|
532
|
+
SessionsSummary(params: ISessionsSummaryDTO.Params): Promise<ISessionsSummaryDTO.Result>;
|
|
533
|
+
SessionsGraph(params: ISessionsGraphDTO.Params): Promise<ISessionsGraphDTO.Result>;
|
|
534
|
+
ConversionGraph(params: IConversionGraphDTO.Params): Promise<IConversionGraphDTO.Result>;
|
|
535
|
+
VisitorsGraph(params: IVisitorsGraphDTO.Params): Promise<IVisitorsGraphDTO.Result>;
|
|
536
|
+
TrafficDevice(params: ITrafficDeviceDTO.Params): Promise<ITrafficDeviceDTO.Result>;
|
|
537
|
+
TrafficSource(params: ITrafficSourceDTO.Params): Promise<ITrafficSourceDTO.Result>;
|
|
538
|
+
EventGet(params: IEventGetDTO.Params): Promise<IEventGetDTO.Result>;
|
|
298
539
|
}
|
|
299
540
|
export {};
|