basicTrack.ts 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import { IBaseAction, ICustomAction, TrackActionOption } from '@medici/types';
  2. import type { SDKInitConfig, PlatformType, SDKConfigType } from './sdk';
  3. import type { IHistory } from './history';
  4. import { collect } from './collector';
  5. import { cloneDeep } from 'lodash-es';
  6. import { SDK } from './sdk';
  7. export class BaseTrack implements IBaseAction, ICustomAction {
  8. protected _platform: PlatformType;
  9. protected _config: SDKInitConfig;
  10. protected _history: IHistory;
  11. protected _endPoint: string;
  12. protected _trackEndPoint: string;
  13. protected _appId: string;
  14. private _timeOut: ReturnType<typeof setTimeout>;
  15. constructor(params: SDKConfigType) {
  16. this._config = params.config;
  17. this._platform = params.platform;
  18. this._appId = params.appId;
  19. this._endPoint = params.endPoint;
  20. this._trackEndPoint = params.trackEndPoint;
  21. }
  22. get _stopTrack() {
  23. return SDK._stopTrack;
  24. }
  25. public trackView(url: string, referrer: string, uuid: string): Promise<XMLHttpRequestResponseType> {
  26. console.log('BaseTrack-trackView', url, referrer, uuid);
  27. if (!this._stopTrack) {
  28. this._history.playload.url = url;
  29. const historyPlayload = cloneDeep(this._history.playload);
  30. const payload = Object.assign(historyPlayload, {
  31. ...this._config,
  32. referrer: this._history.currentRef,
  33. url: url,
  34. });
  35. console.log('send-playload', payload);
  36. return collect(this._endPoint, 'pageview', payload);
  37. }
  38. }
  39. public trackEvent(event_name: string, event_data: string, url?: string, uuid?: string): Promise<XMLHttpRequestResponseType> {
  40. if (!this._stopTrack) {
  41. console.log('BaseTrack-TrackEvent', event_name, event_data, url, uuid);
  42. this._history.playload.url = url;
  43. const historyPlayload = cloneDeep(this._history.playload);
  44. const payload = Object.assign(historyPlayload, {
  45. referrer: this._history.currentRef,
  46. event_name: event_name,
  47. url: url,
  48. event_data: event_data,
  49. ...this._config,
  50. });
  51. console.log('send-playload', payload);
  52. return collect(this._endPoint, 'event', payload);
  53. }
  54. }
  55. public sendEvent(value: string, type: string, url?: string, uuid?: string): Promise<XMLHttpRequestResponseType> {
  56. if (!this._stopTrack) {
  57. console.log('BaseTrack-sendEvent', value, type, url, uuid);
  58. const payload = Object.assign(this._history.playload, {
  59. referrer: this._history.currentRef,
  60. url: url,
  61. event_name: type,
  62. event_data: value,
  63. ...this._config,
  64. });
  65. return collect(this._endPoint, 'event', payload);
  66. }
  67. }
  68. public track(trackActionName: string, trackActionOption?: TrackActionOption): Promise<XMLHttpRequestResponseType> {
  69. if (!this._stopTrack) {
  70. const historyPlayload = cloneDeep(this._history.playload);
  71. const payload = Object.assign(historyPlayload, {
  72. referrer: this._history.currentRef,
  73. ...trackActionOption,
  74. trackActionName,
  75. ...this._config,
  76. });
  77. return collect(this._trackEndPoint, 'track', payload);
  78. }
  79. }
  80. public startTrack(trackActionName: string, trackActionOption?: TrackActionOption): Promise<XMLHttpRequestResponseType> {
  81. if (!this._stopTrack) {
  82. const historyPlayload = cloneDeep(this._history.playload);
  83. const payload = Object.assign(historyPlayload, {
  84. referrer: this._history.currentRef,
  85. ...trackActionOption,
  86. trackActionName,
  87. ...this._config,
  88. });
  89. if (trackActionOption.maxWaitTime) {
  90. this._timeOut = setTimeout(() => {
  91. this.endTrack(trackActionName, trackActionOption);
  92. }, trackActionOption.maxWaitTime);
  93. }
  94. return collect(this._trackEndPoint, 'startTrack', payload);
  95. }
  96. }
  97. public endTrack(trackActionName: string, trackActionOption?: TrackActionOption): Promise<XMLHttpRequestResponseType> {
  98. clearTimeout(this._timeOut);
  99. if (!this._stopTrack) {
  100. const historyPlayload = cloneDeep(this._history.playload);
  101. const payload = Object.assign(historyPlayload, {
  102. referrer: this._history.currentRef,
  103. ...trackActionOption,
  104. trackActionName,
  105. ...this._config,
  106. });
  107. return collect(this._trackEndPoint, 'endTrack', payload);
  108. }
  109. }
  110. }