gio-miniprogram-sdk 4.0.0

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 (103) hide show
  1. package/.babelrc +4 -0
  2. package/.eslintignore +11 -0
  3. package/.eslintrc.js +120 -0
  4. package/.github/workflows/greetings.yml +13 -0
  5. package/.github/workflows/publish.yml +43 -0
  6. package/.prettierignore +19 -0
  7. package/.prettierrc.js +9 -0
  8. package/LICENSE +674 -0
  9. package/README.md +103 -0
  10. package/babel.config.js +6 -0
  11. package/bin/build/all.sh +38 -0
  12. package/bin/build/full.sh +32 -0
  13. package/bin/build/jd.sh +14 -0
  14. package/bin/build/ks.sh +14 -0
  15. package/bin/build/my.sh +14 -0
  16. package/bin/build/plugins.sh +5 -0
  17. package/bin/build/qq.sh +14 -0
  18. package/bin/build/quickapp.sh +14 -0
  19. package/bin/build/swan.sh +14 -0
  20. package/bin/build/taro.sh +18 -0
  21. package/bin/build/tb.sh +18 -0
  22. package/bin/build/tt.sh +14 -0
  23. package/bin/build/uniapp.sh +18 -0
  24. package/bin/build/wx.sh +14 -0
  25. package/dist/alipay.js +1 -0
  26. package/dist/baidu.js +1 -0
  27. package/dist/bytedance.js +1 -0
  28. package/dist/jingdong.js +1 -0
  29. package/dist/kuaishou.js +1 -0
  30. package/dist/plugins/gioABTest.js +1 -0
  31. package/dist/plugins/gioCompress.js +1 -0
  32. package/dist/plugins/gioEventAutoTracking.js +1 -0
  33. package/dist/plugins/gioImpressionTracking.js +1 -0
  34. package/dist/qq.js +1 -0
  35. package/dist/quickapp.js +1 -0
  36. package/dist/taobao.js +1 -0
  37. package/dist/taro.js +1 -0
  38. package/dist/uniapp.js +1 -0
  39. package/dist/wechat.js +1 -0
  40. package/package.json +144 -0
  41. package/rollup.config.js +92 -0
  42. package/rollup.plugins.config.js +76 -0
  43. package/src/constants/config.ts +136 -0
  44. package/src/constants/regex.ts +4 -0
  45. package/src/core/dataStore/eventContextBuilder.ts +70 -0
  46. package/src/core/dataStore/eventHooks/appEffects.ts +220 -0
  47. package/src/core/dataStore/eventHooks/index.ts +403 -0
  48. package/src/core/dataStore/eventHooks/minipPage.ts +132 -0
  49. package/src/core/dataStore/eventHooks/pageEffects.ts +168 -0
  50. package/src/core/dataStore/index.ts +543 -0
  51. package/src/core/growingIO.ts +433 -0
  52. package/src/core/plugins.ts +152 -0
  53. package/src/core/uploader.ts +219 -0
  54. package/src/core/userStore.ts +203 -0
  55. package/src/index.ts +68 -0
  56. package/src/minipInstance/base.ts +287 -0
  57. package/src/minipInstance/framework.ts +22 -0
  58. package/src/minipInstance/jd.ts +11 -0
  59. package/src/minipInstance/ks.ts +12 -0
  60. package/src/minipInstance/my.ts +53 -0
  61. package/src/minipInstance/qq.ts +12 -0
  62. package/src/minipInstance/quickapp.ts +230 -0
  63. package/src/minipInstance/swan.ts +20 -0
  64. package/src/minipInstance/tb.ts +53 -0
  65. package/src/minipInstance/tt.ts +12 -0
  66. package/src/minipInstance/wx.ts +12 -0
  67. package/src/platformConfig/base.ts +86 -0
  68. package/src/platformConfig/framework.ts +29 -0
  69. package/src/platformConfig/jd.ts +11 -0
  70. package/src/platformConfig/ks.ts +11 -0
  71. package/src/platformConfig/my.ts +15 -0
  72. package/src/platformConfig/qq.ts +13 -0
  73. package/src/platformConfig/quickapp.ts +48 -0
  74. package/src/platformConfig/swan.ts +11 -0
  75. package/src/platformConfig/tb.ts +29 -0
  76. package/src/platformConfig/tt.ts +11 -0
  77. package/src/platformConfig/wx.ts +20 -0
  78. package/src/pluginsOut/README.md +50 -0
  79. package/src/pluginsOut/frameworks/gioTaobaoAdapter.ts +195 -0
  80. package/src/pluginsOut/frameworks/gioTaroAdapter.ts +358 -0
  81. package/src/pluginsOut/frameworks/gioUniAppAdapter.ts +220 -0
  82. package/src/pluginsOut/ordinary/gioABTest.ts +254 -0
  83. package/src/pluginsOut/ordinary/gioCompress.ts +251 -0
  84. package/src/pluginsOut/ordinary/gioCustomTracking.ts +71 -0
  85. package/src/pluginsOut/ordinary/gioEventAutoTracking.ts +164 -0
  86. package/src/pluginsOut/ordinary/gioImpressionTracking.ts +298 -0
  87. package/src/types/base.ts +150 -0
  88. package/src/types/dataStore.ts +43 -0
  89. package/src/types/eventHooks.ts +141 -0
  90. package/src/types/gioCustomTracking.ts +9 -0
  91. package/src/types/gioEventTracking.ts +10 -0
  92. package/src/types/gioPerformance.ts +8 -0
  93. package/src/types/growingIO.ts +102 -0
  94. package/src/types/minipInstance.ts +126 -0
  95. package/src/types/platforms.ts +65 -0
  96. package/src/types/plugins.ts +24 -0
  97. package/src/types/uploader.ts +26 -0
  98. package/src/types/userStore.ts +22 -0
  99. package/src/utils/glodash.ts +423 -0
  100. package/src/utils/tools.ts +384 -0
  101. package/src/utils/verifiers.ts +76 -0
  102. package/tsconfig.json +32 -0
  103. package/typings/global.d.ts +92 -0
@@ -0,0 +1,12 @@
1
+ import { GrowingIOType } from '@@/types/growingIO';
2
+
3
+ import BaseImplements from './base';
4
+
5
+ class Bytedance extends BaseImplements {
6
+ constructor(public growingIO: GrowingIOType) {
7
+ super(growingIO);
8
+ this.hookSetTitle();
9
+ }
10
+ }
11
+
12
+ export default Bytedance;
@@ -0,0 +1,12 @@
1
+ import { GrowingIOType } from '@@/types/growingIO';
2
+
3
+ import BaseImplements from './base';
4
+
5
+ class Weixin extends BaseImplements {
6
+ constructor(public growingIO: GrowingIOType) {
7
+ super(growingIO);
8
+ this.hookSetTitle();
9
+ }
10
+ }
11
+
12
+ export default Weixin;
@@ -0,0 +1,86 @@
1
+ import { PlatformConfigType } from '@@/types/platforms';
2
+ import { niceTry } from '@@/utils/tools';
3
+
4
+ const Config: PlatformConfigType = {
5
+ scnPrefix: '',
6
+ appHandlers: [
7
+ 'onLaunch',
8
+ 'onShow',
9
+ 'onHide',
10
+ 'onError', // 实际sdk不会执行,但需要写在hook里,防止被归为自定义事件
11
+ 'onPageNotFound', // 实际sdk不会执行,但需要写在hook里,防止被归为自定义事件
12
+ 'onUnhandledRejection', // 实际sdk不会执行,但需要写在hook里,防止被归为自定义事件
13
+ 'onThemeChange' // 实际sdk不会执行,但需要写在hook里,防止被归为自定义事件
14
+ ],
15
+ pageHandlers: [
16
+ 'onLoad',
17
+ 'onShow',
18
+ 'onReady',
19
+ 'onHide',
20
+ 'onShareAppMessage',
21
+ 'onTabItemTap',
22
+ 'onUnload', // 实际sdk不会执行,但需要写在hook里,防止被归为自定义事件
23
+ 'onPullDownRefresh', // 实际sdk不会执行,但需要写在hook里,防止被归为自定义事件
24
+ 'onReachBottom', // 实际sdk不会执行,但需要写在hook里,防止被归为自定义事件
25
+ 'onResize' // 实际sdk不会执行,但需要写在hook里,防止被归为自定义事件
26
+ ],
27
+ actionEventTypes: [
28
+ 'onclick',
29
+ 'tap',
30
+ 'onTap',
31
+ 'longpress',
32
+ 'longTap',
33
+ 'blur',
34
+ 'change',
35
+ 'onChange',
36
+ 'submit',
37
+ 'confirm',
38
+ 'getuserinfo',
39
+ 'getphonenumber',
40
+ 'contact',
41
+ 'mouseup'
42
+ ],
43
+ originalApp: niceTry(() => App),
44
+ originalPage: niceTry(() => Page),
45
+ originalComponent: niceTry(() => Component),
46
+ originalBehavior: niceTry(() => Behavior),
47
+ canHook: true,
48
+ hooks: {
49
+ App: true,
50
+ Page: true,
51
+ Component: true,
52
+ Behavior: true
53
+ },
54
+ listeners: {
55
+ app: {
56
+ appLaunch: 'onLaunch',
57
+ appShow: 'onShow',
58
+ appClose: 'onHide'
59
+ },
60
+ page: {
61
+ pageLoad: 'onLoad',
62
+ pageShow: 'onShow',
63
+ pageReady: 'onReady',
64
+ pageHide: 'onHide',
65
+ pageUnload: 'onUnload',
66
+ tabTap: 'onTabItemTap',
67
+ shareApp: 'onShareAppMessage'
68
+ },
69
+ actions: {
70
+ click: [
71
+ 'onclick',
72
+ 'tap',
73
+ 'longpress',
74
+ 'longTap',
75
+ 'getuserinfo',
76
+ 'getphonenumber',
77
+ 'contact',
78
+ 'mouseup'
79
+ ],
80
+ change: ['blur', 'change', 'confirm'],
81
+ submit: ['submit']
82
+ }
83
+ }
84
+ };
85
+
86
+ export default Config;
@@ -0,0 +1,29 @@
1
+ import { niceTry, getPlainPlatform } from '@@/utils/tools';
2
+
3
+ import JDConfig from './jd';
4
+ import KSConfig from './ks';
5
+ import MyConfig from './my';
6
+ import TbConfig from './tb';
7
+ import QQConfig from './qq';
8
+ import SwanConfig from './swan';
9
+ import TTConfig from './tt';
10
+ import WXConfig from './wx';
11
+
12
+ const plainPlatform = getPlainPlatform();
13
+ const FrameworkConfig = niceTry(() => {
14
+ const INST = {
15
+ jd: JDConfig,
16
+ ks: KSConfig,
17
+ my: MyConfig,
18
+ tb: TbConfig,
19
+ qq: QQConfig,
20
+ swan: SwanConfig,
21
+ tt: TTConfig,
22
+ wx: WXConfig
23
+ };
24
+ const targetConfig = INST[plainPlatform];
25
+ targetConfig.canHook = false;
26
+ return targetConfig;
27
+ });
28
+
29
+ export default FrameworkConfig;
@@ -0,0 +1,11 @@
1
+ import BaseConfig from './base';
2
+
3
+ const JDConfig = {
4
+ ...BaseConfig,
5
+ listeners: { ...BaseConfig.listeners },
6
+ name: 'JingDong',
7
+ platform: 'jdp',
8
+ scnPrefix: 'jd_'
9
+ };
10
+
11
+ export default JDConfig;
@@ -0,0 +1,11 @@
1
+ import BaseConfig from './base';
2
+
3
+ const KSConfig = {
4
+ ...BaseConfig,
5
+ listeners: { ...BaseConfig.listeners },
6
+ name: 'KuaiShou',
7
+ platform: 'kuaishoup',
8
+ scnPrefix: 'ks_'
9
+ };
10
+
11
+ export default KSConfig;
@@ -0,0 +1,15 @@
1
+ import BaseConfig from './base';
2
+
3
+ const MyConfig = {
4
+ ...BaseConfig,
5
+ listeners: { ...BaseConfig.listeners },
6
+ name: 'Alipay',
7
+ platform: 'alip',
8
+ scnPrefix: 'alip_',
9
+ hooks: {
10
+ ...BaseConfig?.hooks,
11
+ Behavior: false
12
+ }
13
+ };
14
+
15
+ export default MyConfig;
@@ -0,0 +1,13 @@
1
+ import BaseConfig from './base';
2
+
3
+ const QQConfig = {
4
+ ...BaseConfig,
5
+ listeners: { ...BaseConfig.listeners },
6
+ name: 'QQ',
7
+ platform: 'qq',
8
+ scnPrefix: 'qq_'
9
+ };
10
+ QQConfig.pageHandlers = [...BaseConfig.pageHandlers, 'onAddToFavorites'];
11
+ QQConfig.listeners.page.addFavorites = 'onAddToFavorites';
12
+
13
+ export default QQConfig;
@@ -0,0 +1,48 @@
1
+ const QuickAppConfig = {
2
+ name: 'QuickApp',
3
+ platform: 'quickapp',
4
+ scnPrefix: 'quickapp_',
5
+ appHandlers: ['onCreate', 'onShow', 'onHide', 'onDestroy', 'onError'],
6
+ pageHandlers: [
7
+ 'onInit',
8
+ 'onReady',
9
+ 'onShow',
10
+ 'onHide',
11
+ 'onDestroy',
12
+ 'onMenuPress',
13
+ 'onShareAppMessage'
14
+ ],
15
+ actionEventTypes: ['click', 'longpress', 'blur', 'change'],
16
+ canHook: false,
17
+ hooks: {
18
+ App: false,
19
+ Page: false,
20
+ Component: false,
21
+ Behavior: false
22
+ },
23
+ listeners: {
24
+ app: {
25
+ appCreate: 'onCreate',
26
+ appShow: 'onShow',
27
+ appHide: 'onHide',
28
+ appClose: 'onDestroy'
29
+ },
30
+ page: {
31
+ pageLoad: 'onInit',
32
+ pageReady: 'onReady',
33
+ pageShow: 'onShow',
34
+ pageHide: 'onHide',
35
+ pageClose: 'onDestroy',
36
+ menuPress: 'onMenuPress',
37
+ tabTap: undefined,
38
+ shareApp: 'onShareAppMessage'
39
+ },
40
+ actions: {
41
+ click: ['click', 'longpress'],
42
+ change: ['blur', 'change'],
43
+ submit: []
44
+ }
45
+ }
46
+ };
47
+
48
+ export default QuickAppConfig;
@@ -0,0 +1,11 @@
1
+ import BaseConfig from './base';
2
+
3
+ const SwanConfig = {
4
+ ...BaseConfig,
5
+ listeners: { ...BaseConfig.listeners },
6
+ name: 'Baidu',
7
+ platform: 'baidup',
8
+ scnPrefix: 'baidup_'
9
+ };
10
+
11
+ export default SwanConfig;
@@ -0,0 +1,29 @@
1
+ import BaseConfig from './base';
2
+
3
+ const TbConfig = {
4
+ ...BaseConfig,
5
+ pageHandlers: [
6
+ ...BaseConfig.pageHandlers,
7
+ 'onInit',
8
+ 'didMount',
9
+ 'didUnmount'
10
+ ],
11
+ listeners: {
12
+ ...BaseConfig.listeners,
13
+ page: {
14
+ ...BaseConfig.listeners.page,
15
+ onInit: 'onInit',
16
+ didMount: 'didMount',
17
+ didUnmount: 'didUnmount'
18
+ }
19
+ },
20
+ name: 'Taobao',
21
+ platform: 'tbp',
22
+ scnPrefix: 'tbp_',
23
+ hooks: {
24
+ ...BaseConfig?.hooks,
25
+ Behavior: false
26
+ }
27
+ };
28
+
29
+ export default TbConfig;
@@ -0,0 +1,11 @@
1
+ import BaseConfig from './base';
2
+
3
+ const TTConfig = {
4
+ ...BaseConfig,
5
+ listeners: { ...BaseConfig.listeners },
6
+ name: 'Bytedance',
7
+ platform: 'bytedance',
8
+ scnPrefix: 'bytedance_'
9
+ };
10
+
11
+ export default TTConfig;
@@ -0,0 +1,20 @@
1
+ import BaseConfig from './base';
2
+
3
+ const WXConfig = {
4
+ ...BaseConfig,
5
+ listeners: { ...BaseConfig.listeners },
6
+ name: 'Weixin',
7
+ platform: 'MinP'
8
+ };
9
+ WXConfig.pageHandlers = [
10
+ ...BaseConfig.pageHandlers,
11
+ 'onShareTimeline',
12
+ 'onAddToFavorites'
13
+ ];
14
+ WXConfig.listeners.page = {
15
+ ...BaseConfig.listeners.page,
16
+ shareTime: 'onShareTimeline',
17
+ addFavorites: 'onAddToFavorites'
18
+ };
19
+
20
+ export default WXConfig;
@@ -0,0 +1,50 @@
1
+ ## 目录说明
2
+
3
+ 本目录下有多个文件夹,其中`ordinary`是主要的一些内置插件,`frameworks`是小程序开发框架的适配,其他文件夹为特殊场景适配。
4
+
5
+ ## 插件名称命名规则
6
+
7
+ `gio`开头表明是gio的插件;
8
+
9
+ 名称带`Adapter`表明是某个场景下的适配;
10
+
11
+ 短横线加环境`-cdp`、`-saas`表明是cdp或者是saas专有的插件;不会被单独打包插件;
12
+
13
+ 除`ordinary`目录下的插件打包会打在`dist/plugins`根目录下,`frameworks`不会被单独打包,其他带文件夹的插件会打包在保留文件夹路径且与`plugins`同级的目录下。
14
+
15
+ 如果新增目录,发布时需要在jekins上修改配置添加路径。
16
+
17
+ ## 开发插件
18
+
19
+ - 这里提供一个Demo供参考:
20
+
21
+ ```js
22
+ /**
23
+ * 名称:插件Demo
24
+ * 用途:用于提供编写插件的模板。
25
+ */
26
+ import { GrowingIOType } from '@@/types/growingIO';
27
+
28
+ class GioDemoPlugin {
29
+ constructor(public growingIO: GrowingIOType) {}
30
+
31
+ onComposeBefore(args) {
32
+ // console.log('onComposeBefore', args);
33
+ }
34
+
35
+ onComposeAfter(args) {
36
+ // console.log('onComposeAfter', args);
37
+ }
38
+
39
+ onSendBefore(args) {
40
+ // console.log('onSendBefore', args);
41
+ }
42
+
43
+ onSendAfter(args) {
44
+ // console.log('onSendAfter', args);
45
+ }
46
+ }
47
+
48
+ export default { name: 'gioDemoPlugin', method: GioDemoPlugin };
49
+
50
+ ```
@@ -0,0 +1,195 @@
1
+ /**
2
+ * 名称:淘宝小程序单发插件
3
+ * 用途:用于提供淘宝小程序云函数和云应用的请求方法。
4
+ */
5
+ import { Event } from '@@/types/base';
6
+ import { GrowingIOType } from '@@/types/growingIO';
7
+
8
+ let ut;
9
+ class GioTaobaoAdapter {
10
+ constructor(public growingIO: GrowingIOType) {
11
+ const { utils, emitter } = this.growingIO;
12
+ ut = utils;
13
+ emitter.on('OPTION_INITIALIZED', (growingIO: GrowingIOType) => {
14
+ const { inPlugin, dataStore } = growingIO;
15
+ if (inPlugin) {
16
+ ut.getGlobal().Component = function (...args: any[]) {
17
+ return dataStore.eventHooks.componentOverriding(args[0]);
18
+ };
19
+ }
20
+ });
21
+ emitter.on('minipLifecycle', ({ event }) => {
22
+ const { dataStore, vdsConfig } = this.growingIO;
23
+ const widgetName = `小部件${vdsConfig.appId}`;
24
+ switch (event) {
25
+ case 'Page onInit':
26
+ {
27
+ const sendVisit = (relationAppInfo: any, sceneInfo: any) => {
28
+ const query = ut
29
+ .keys(relationAppInfo)
30
+ .map((k) => `${k}=${relationAppInfo[k]}`)
31
+ .join('&');
32
+ dataStore.scene = sceneInfo.sceneId ?? '';
33
+ dataStore.sendVisit({
34
+ path: widgetName,
35
+ query,
36
+ title: widgetName
37
+ });
38
+ };
39
+ this.getRelationAppInfo((relationAppInfo: any) =>
40
+ this.getSceneInfo(relationAppInfo, sendVisit)
41
+ );
42
+ }
43
+ break;
44
+ case 'Page didMount':
45
+ dataStore.sendPage({
46
+ path: widgetName,
47
+ title: widgetName
48
+ });
49
+ break;
50
+ default:
51
+ break;
52
+ }
53
+ });
54
+ }
55
+
56
+ // 小部件获取场景值信息
57
+ getSceneInfo = (relationAppInfo: any, callback: any) => {
58
+ this.growingIO.minipInstance.minip?.getRelationAppInfo({
59
+ success: (res) => callback(relationAppInfo, res),
60
+ fail: () => callback(relationAppInfo, {})
61
+ });
62
+ };
63
+
64
+ // 小部件获取关联小程序的信息
65
+ getRelationAppInfo = (callback: any) => {
66
+ this.growingIO.minipInstance.minip?.getRelationAppInfo({
67
+ success: callback,
68
+ fail: () => callback({})
69
+ });
70
+ };
71
+
72
+ // 单条发送无延迟
73
+ singleInvoke = () => {
74
+ const { vdsConfig, emitter, uploader } = this.growingIO;
75
+ // 过滤掉重试超过3次的请求(直接丢弃)
76
+ uploader.hoardingQueue = [...uploader.hoardingQueue].filter(
77
+ (o) => (uploader.retryIds[o.requestId] || 0) < uploader.retryLimit
78
+ );
79
+ uploader.requestQueue = [...uploader.requestQueue].filter(
80
+ (o) => (uploader.retryIds[o.requestId] || 0) < uploader.retryLimit
81
+ );
82
+ if (ut.isEmpty([...uploader.hoardingQueue, ...uploader.requestQueue])) {
83
+ return;
84
+ }
85
+ let requestData =
86
+ uploader.hoardingQueue.shift() ?? uploader.requestQueue.shift();
87
+ // 开启debug模式时,打印事件日志
88
+ if (vdsConfig.debug) {
89
+ console.log('[GrowingIO Debug]:', JSON.stringify(requestData, null, 2));
90
+ }
91
+ emitter.emit('onSendBefore', { requestData });
92
+ this.cloudFuncInvoke(requestData);
93
+ };
94
+
95
+ // 云函数调用
96
+ cloudFuncInvoke = (requestData) => {
97
+ const { vdsConfig, emitter, uploader } = this.growingIO;
98
+ const { serverUrl, projectId, tbConfig } = vdsConfig;
99
+ const app = ut.niceTry(() => getApp() ?? $global);
100
+ const cloud = tbConfig.cloud ?? app.cloud;
101
+ if (cloud?.function?.invoke) {
102
+ uploader.requestingNum += 1;
103
+ cloud.function
104
+ .invoke(
105
+ tbConfig.cloudFuncName,
106
+ {
107
+ domain: serverUrl,
108
+ path: `/v3/projects/${projectId}/collect`,
109
+ params: { stm: Date.now() },
110
+ body: requestData
111
+ },
112
+ tbConfig.cloudFuncHandler
113
+ )
114
+ .then((res) => {
115
+ uploader.requestingNum -= 1;
116
+ // 这里的返回值只是调用了api是否成功,真正是否上报成功不知道,要去淘宝控制台看
117
+ if (res.success) {
118
+ emitter.emit('onSendAfter', { result: res });
119
+ } else {
120
+ uploader.requestFailFn(requestData);
121
+ ut.consoleText(`请求失败! ${JSON.stringify(res)}`, 'error');
122
+ }
123
+ uploader.initiateRequest();
124
+ })
125
+ .catch((e) => {
126
+ uploader.requestingNum -= 1;
127
+ uploader.requestFailFn(requestData);
128
+ ut.consoleText(`请求失败! ${JSON.stringify(e)}`, 'error');
129
+ uploader.initiateRequest();
130
+ });
131
+ } else {
132
+ ut.consoleText(
133
+ '请求失败!无法获取 cloud 对象,请检查 tbConfig 配置项!',
134
+ 'error'
135
+ );
136
+ }
137
+ };
138
+
139
+ // 云应用调用
140
+ tbCloudAppInvoke(requestData) {
141
+ const { vdsConfig, emitter, uploader } = this.growingIO;
142
+ const { serverUrl, projectId, tbConfig } = vdsConfig;
143
+ const app = ut.niceTry(() => getApp() ?? $global);
144
+ const cloud = tbConfig.cloud ?? app.cloud;
145
+ if (cloud?.application?.httpRequest) {
146
+ uploader.requestingNum += 1;
147
+ cloud.application
148
+ .httpRequest({
149
+ //不需要完整域名,只需要接口访问路径即可
150
+ path: tbConfig.path,
151
+ method: 'POST',
152
+ headers: { 'Content-Type': 'application/json;charset=UTF-8' },
153
+ params: { serverUrl, projectId, stm: Date.now() },
154
+ body: requestData,
155
+ exts: { cloudAppId: tbConfig.cloudAppId }
156
+ })
157
+ .then((res) => {
158
+ uploader.requestingNum -= 1;
159
+ // 这里的返回值只是调用了api是否成功,真正是否上报成功不知道,要看云应用的服务端是不是真的转发成功
160
+ if (res.success) {
161
+ emitter.emit('onSendAfter', { result: res });
162
+ } else {
163
+ if (ut.isArray(requestData)) {
164
+ requestData.forEach((o: any) => {
165
+ uploader.requestFailFn(o);
166
+ });
167
+ } else {
168
+ uploader.requestFailFn(requestData);
169
+ }
170
+ ut.consoleText(`请求失败! ${JSON.stringify(res)}`, 'error');
171
+ }
172
+ uploader.initiateRequest();
173
+ })
174
+ .catch((e) => {
175
+ uploader.requestingNum -= 1;
176
+ if (ut.isArray(requestData)) {
177
+ requestData.forEach((o: any) => {
178
+ uploader.requestFailFn(o);
179
+ });
180
+ } else {
181
+ uploader.requestFailFn(requestData);
182
+ }
183
+ ut.consoleText(`请求失败! ${JSON.stringify(e)}`, 'error');
184
+ uploader.initiateRequest();
185
+ });
186
+ } else {
187
+ ut.consoleText(
188
+ '请求失败!无法获取 cloud 对象,请检查 tbConfig 配置项!',
189
+ 'error'
190
+ );
191
+ }
192
+ }
193
+ }
194
+
195
+ export default { name: 'gioTaobaoAdapter', method: GioTaobaoAdapter };