@heybox/hb-sdk 0.5.18 → 0.6.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 (48) hide show
  1. package/README.md +29 -25
  2. package/dist/cli-chunks/{create-OZOIdeBz.cjs → create-DYb53EQ-.cjs} +1 -1
  3. package/dist/cli-chunks/{dev-DXz8izSJ.cjs → dev-CPKTuA6q.cjs} +35 -6
  4. package/dist/cli-chunks/{doctor-DjMSJoQ5.cjs → doctor-TshFvqHC.cjs} +1 -1
  5. package/dist/cli-chunks/{index-CsOcGUzF.cjs → index-CCeHouBU.cjs} +21 -16
  6. package/dist/cli-chunks/{index-Cl5HFTBW.cjs → index-NOO3q8_C.cjs} +3 -3
  7. package/dist/cli-chunks/{login-Ct-46gLx.cjs → login-DtXHSm8R.cjs} +2 -2
  8. package/dist/cli-chunks/remote-BWfn7qIN.cjs +9915 -0
  9. package/dist/cli-chunks/{context-CKJlNcSN.cjs → sdk-version-policy-B1CFC1Dk.cjs} +122 -1
  10. package/dist/cli-chunks/{session-dRGPpyS1.cjs → session-DIcRjyDY.cjs} +2 -1
  11. package/dist/cli.cjs +1 -1
  12. package/dist/devtools/mock-host/index.html +40 -0
  13. package/dist/devtools/mock-host/main.js +85 -0
  14. package/dist/index.cjs.js +232 -4
  15. package/dist/index.esm.js +233 -3
  16. package/dist/miniapp-publish.cjs.js +4 -0
  17. package/dist/miniapp-publish.esm.js +4 -1
  18. package/dist/protocol.cjs.js +9 -0
  19. package/dist/protocol.esm.js +7 -1
  20. package/dist/vite.cjs.js +9159 -22
  21. package/dist/vite.esm.js +9159 -23
  22. package/package.json +19 -7
  23. package/skill/SKILL.md +23 -23
  24. package/skill/references/api-protocol.md +11 -2
  25. package/skill/references/api-root.md +145 -19
  26. package/skill/references/cli.md +13 -15
  27. package/skill/references/recipes.md +12 -44
  28. package/skill/references/safety-boundaries.md +1 -2
  29. package/skill/scripts/sync-references.mjs +2 -2
  30. package/skill/skill.json +4 -4
  31. package/types/cli/auth/base-url.d.ts +20 -0
  32. package/types/cli/config.d.ts +11 -0
  33. package/types/core/client.d.ts +7 -0
  34. package/types/core/csp-violation.d.ts +5 -0
  35. package/types/core/history-observer.d.ts +4 -0
  36. package/types/core/version.d.ts +2 -0
  37. package/types/index.d.ts +0 -2
  38. package/types/miniapp-manifest/schema.d.ts +6 -1
  39. package/types/miniapp-manifest/sdk-version-policy.d.ts +9 -0
  40. package/types/miniapp-publish/index.d.ts +1 -0
  41. package/types/protocol/constants.d.ts +6 -0
  42. package/types/protocol/types.d.ts +45 -0
  43. package/types/protocol.d.ts +2 -2
  44. package/types/vite/html-policy.d.ts +4 -0
  45. package/types/vite/index.d.ts +23 -3
  46. package/types/vite/runtime-gate.d.ts +5 -0
  47. package/types/vite/sdk-version-gate.d.ts +8 -0
  48. package/dist/cli-chunks/remote-C77axNSw.cjs +0 -1604
package/dist/index.esm.js CHANGED
@@ -70,6 +70,54 @@ class HbMiniProgramNetworkError extends Error {
70
70
  }
71
71
  }
72
72
 
73
+ /** 将浏览器 CSP 事件转换为不包含原始 URL 敏感部分的 bridge 载荷。 */
74
+ async function createCSPViolationPayload(event, baseHref, sdkVersion, cryptoImplementation) {
75
+ const { pathnameForHash, ...blockedResource } = normalizeBlockedResource(event.blockedURI, baseHref);
76
+ return {
77
+ effectiveDirective: event.effectiveDirective,
78
+ violatedDirective: event.violatedDirective,
79
+ disposition: event.disposition,
80
+ ...blockedResource,
81
+ sanitizedPathnameHash: pathnameForHash
82
+ ? await hashPathname(pathnameForHash, cryptoImplementation)
83
+ : undefined,
84
+ sdkVersion,
85
+ timestamp: Date.now(),
86
+ };
87
+ }
88
+ function normalizeBlockedResource(blockedURI, baseHref) {
89
+ if (blockedURI === 'inline' || blockedURI === 'eval' || blockedURI === 'wasm-eval') {
90
+ return {
91
+ blockedResourceType: blockedURI === 'inline' ? 'inline' : 'eval',
92
+ };
93
+ }
94
+ if (!blockedURI) {
95
+ return { blockedResourceType: 'unknown' };
96
+ }
97
+ try {
98
+ const url = new URL(blockedURI, baseHref);
99
+ const segmentCount = url.pathname.split('/').filter(Boolean).length;
100
+ return {
101
+ blockedResourceType: 'url',
102
+ blockedOrigin: url.origin === 'null' ? undefined : url.origin,
103
+ redactedPathname: segmentCount === 0 ? '/' : `/${Array(segmentCount).fill(':segment').join('/')}`,
104
+ pathnameForHash: url.pathname,
105
+ };
106
+ }
107
+ catch {
108
+ return { blockedResourceType: 'unknown' };
109
+ }
110
+ }
111
+ async function hashPathname(pathname, cryptoImplementation) {
112
+ try {
113
+ const digest = await cryptoImplementation.subtle.digest('SHA-256', new TextEncoder().encode(pathname));
114
+ return Array.from(new Uint8Array(digest), value => value.toString(16).padStart(2, '0')).join('');
115
+ }
116
+ catch {
117
+ return undefined;
118
+ }
119
+ }
120
+
73
121
  /** SDK 内部事件总线,负责管理沙盒生命周期与业务事件监听。 */
74
122
  class MiniProgramEventBus {
75
123
  eventHandlers = new Map();
@@ -103,6 +151,100 @@ class MiniProgramEventBus {
103
151
  }
104
152
  }
105
153
 
154
+ const historyObservers = new WeakMap();
155
+ /** 共享同一个 History patch,并在最后一个订阅者退出时精确恢复原属性。 */
156
+ function subscribeHistoryChanges(history, listener) {
157
+ let state = historyObservers.get(history);
158
+ if (!state) {
159
+ state = createHistoryObserver(history);
160
+ if (!state) {
161
+ return () => undefined;
162
+ }
163
+ historyObservers.set(history, state);
164
+ }
165
+ state.listeners.add(listener);
166
+ let active = true;
167
+ return () => {
168
+ if (!active) {
169
+ return;
170
+ }
171
+ active = false;
172
+ state.listeners.delete(listener);
173
+ if (state.listeners.size === 0) {
174
+ restoreHistoryObserver(history, state);
175
+ historyObservers.delete(history);
176
+ }
177
+ };
178
+ }
179
+ function createHistoryObserver(history) {
180
+ const listeners = new Set();
181
+ const originalPushState = readOriginalMethod(history, 'pushState');
182
+ const originalReplaceState = readOriginalMethod(history, 'replaceState');
183
+ const notify = () => {
184
+ [...listeners].forEach(currentListener => {
185
+ try {
186
+ currentListener();
187
+ }
188
+ catch {
189
+ // 单个 SDK 诊断失败不能影响 History API 或其他订阅者。
190
+ }
191
+ });
192
+ };
193
+ const patchedPushState = (...args) => {
194
+ originalPushState.value.apply(history, args);
195
+ notify();
196
+ };
197
+ const patchedReplaceState = (...args) => {
198
+ originalReplaceState.value.apply(history, args);
199
+ notify();
200
+ };
201
+ const state = {
202
+ listeners,
203
+ originalPushState,
204
+ originalReplaceState,
205
+ patchedPushState,
206
+ patchedReplaceState,
207
+ };
208
+ try {
209
+ definePatchedMethod(history, 'pushState', patchedPushState, originalPushState.descriptor);
210
+ definePatchedMethod(history, 'replaceState', patchedReplaceState, originalReplaceState.descriptor);
211
+ return state;
212
+ }
213
+ catch {
214
+ restoreHistoryObserver(history, state);
215
+ return undefined;
216
+ }
217
+ }
218
+ function readOriginalMethod(history, name) {
219
+ return {
220
+ descriptor: Object.getOwnPropertyDescriptor(history, name),
221
+ value: history[name],
222
+ };
223
+ }
224
+ function definePatchedMethod(history, name, value, originalDescriptor) {
225
+ Object.defineProperty(history, name, {
226
+ configurable: true,
227
+ enumerable: originalDescriptor?.enumerable ?? false,
228
+ writable: true,
229
+ value,
230
+ });
231
+ }
232
+ function restoreHistoryObserver(history, state) {
233
+ restoreMethod(history, 'pushState', state.patchedPushState, state.originalPushState);
234
+ restoreMethod(history, 'replaceState', state.patchedReplaceState, state.originalReplaceState);
235
+ }
236
+ function restoreMethod(history, name, patchedValue, original) {
237
+ if (history[name] !== patchedValue) {
238
+ return;
239
+ }
240
+ if (original.descriptor) {
241
+ Object.defineProperty(history, name, original.descriptor);
242
+ }
243
+ else {
244
+ delete history[name];
245
+ }
246
+ }
247
+
106
248
  /** 小程序沙盒通信命名空间,父容器与 iframe 内 SDK 必须保持一致。 */
107
249
  const MINI_PROGRAM_MESSAGE_NAMESPACE = 'heybox:miniprogram';
108
250
  /** 小程序沙盒通信协议版本。 */
@@ -111,6 +253,12 @@ const MINI_PROGRAM_MESSAGE_VERSION = 1;
111
253
  const MINI_PROGRAM_BRIDGE_NONCE_PARAM = 'hb_mini_bridge_nonce';
112
254
  /** SDK 初始化时发给父容器的握手方法名。 */
113
255
  const SDK_HANDSHAKE_METHOD = 'sdk.handshake';
256
+ /** Runtime 主动探测 SDK 当前文档地址的内部方法名。 */
257
+ const RUNTIME_LOCATION_PROBE_METHOD = 'runtime.location.probe';
258
+ /** SDK 向 Runtime 报告当前文档地址的内部方法名。 */
259
+ const SDK_LOCATION_REPORT_METHOD = 'sdk.location.report';
260
+ /** SDK 向 Runtime 报告 CSP 违规的内部方法名。 */
261
+ const SDK_CSP_VIOLATION_METHOD = 'sdk.csp.violation';
114
262
 
115
263
  /** 获取浏览器全局 window。 */
116
264
  function getGlobalWindow() {
@@ -170,6 +318,11 @@ function createMessageId() {
170
318
  return `${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`;
171
319
  }
172
320
 
321
+ /** 构建时替换为当前发布包的实际版本。 */
322
+ const HB_SDK_VERSION = typeof undefined === 'string'
323
+ ? undefined
324
+ : '0.6.0';
325
+
173
326
  /**
174
327
  * 判断未知数据是否符合小程序 bridge 消息信封。
175
328
  *
@@ -199,6 +352,13 @@ class MiniProgramBridgeClient {
199
352
  pendingRequests = new Map();
200
353
  eventBus = new MiniProgramEventBus();
201
354
  handleMessage;
355
+ handlePopState = () => this.postLocationReport('popstate');
356
+ handleHashChange = () => this.postLocationReport('hashchange');
357
+ handlePageShow = () => this.postLocationReport('pageshow');
358
+ handleSecurityPolicyViolation = (event) => {
359
+ this.postCSPViolation(event);
360
+ };
361
+ unsubscribeHistoryChanges;
202
362
  started = false;
203
363
  readySettled = false;
204
364
  readyPromise;
@@ -286,6 +446,12 @@ class MiniProgramBridgeClient {
286
446
  destroy() {
287
447
  this.destroyed = true;
288
448
  this.selfWindow?.removeEventListener('message', this.handleMessage);
449
+ this.selfWindow?.removeEventListener('popstate', this.handlePopState);
450
+ this.selfWindow?.removeEventListener('hashchange', this.handleHashChange);
451
+ this.selfWindow?.removeEventListener('pageshow', this.handlePageShow);
452
+ this.selfWindow?.removeEventListener('securitypolicyviolation', this.handleSecurityPolicyViolation);
453
+ this.unsubscribeHistoryChanges?.();
454
+ this.unsubscribeHistoryChanges = undefined;
289
455
  const error = createSDKError('SDK_DESTROYED', '小程序 SDK 已销毁');
290
456
  this.failReady(error);
291
457
  this.rejectAllPending(error);
@@ -312,6 +478,13 @@ class MiniProgramBridgeClient {
312
478
  return;
313
479
  }
314
480
  this.selfWindow.addEventListener('message', this.handleMessage);
481
+ this.selfWindow.addEventListener('popstate', this.handlePopState);
482
+ this.selfWindow.addEventListener('hashchange', this.handleHashChange);
483
+ this.selfWindow.addEventListener('pageshow', this.handlePageShow);
484
+ this.selfWindow.addEventListener('securitypolicyviolation', this.handleSecurityPolicyViolation);
485
+ this.unsubscribeHistoryChanges = subscribeHistoryChanges(this.selfWindow.history, () => {
486
+ this.postLocationReport('history');
487
+ });
315
488
  this.readyTimer = setTimeout(() => {
316
489
  this.failReady(createSDKError('READY_TIMEOUT', '小程序沙盒握手超时'));
317
490
  }, this.timeout);
@@ -348,11 +521,12 @@ class MiniProgramBridgeClient {
348
521
  payload: {
349
522
  href: this.selfWindow.location.href,
350
523
  userAgent: this.selfWindow.navigator.userAgent,
524
+ sdkVersion: HB_SDK_VERSION,
351
525
  },
352
526
  });
353
527
  }
354
528
  onMessage(event) {
355
- if (event.source && event.source !== this.targetWindow) {
529
+ if (event.source !== this.targetWindow) {
356
530
  return;
357
531
  }
358
532
  if (!isMiniProgramBridgeMessage(event.data) || event.data.nonce !== this.nonce) {
@@ -364,6 +538,59 @@ class MiniProgramBridgeClient {
364
538
  }
365
539
  if (event.data.type === 'response') {
366
540
  this.handleResponse(event.data);
541
+ return;
542
+ }
543
+ if (event.data.type === 'request' && event.data.method === RUNTIME_LOCATION_PROBE_METHOD) {
544
+ const payload = event.data.payload;
545
+ if (typeof payload?.probeId === 'string') {
546
+ this.postLocationReport('probe', payload.probeId);
547
+ }
548
+ }
549
+ }
550
+ postLocationReport(trigger, probeId) {
551
+ if (this.destroyed || !this.selfWindow) {
552
+ return;
553
+ }
554
+ try {
555
+ this.postMessage({
556
+ namespace: MINI_PROGRAM_MESSAGE_NAMESPACE,
557
+ version: MINI_PROGRAM_MESSAGE_VERSION,
558
+ nonce: this.nonce,
559
+ type: 'event',
560
+ method: SDK_LOCATION_REPORT_METHOD,
561
+ payload: {
562
+ probeId,
563
+ href: this.selfWindow.location.href,
564
+ sdkVersion: HB_SDK_VERSION,
565
+ trigger,
566
+ timestamp: Date.now(),
567
+ },
568
+ });
569
+ }
570
+ catch {
571
+ // 内部诊断消息失败不能改变 Mini-program 自身的导航语义。
572
+ }
573
+ }
574
+ async postCSPViolation(event) {
575
+ if (!this.selfWindow) {
576
+ return;
577
+ }
578
+ try {
579
+ const payload = await createCSPViolationPayload(event, this.selfWindow.location.href, HB_SDK_VERSION, this.selfWindow.crypto);
580
+ if (this.destroyed) {
581
+ return;
582
+ }
583
+ this.postMessage({
584
+ namespace: MINI_PROGRAM_MESSAGE_NAMESPACE,
585
+ version: MINI_PROGRAM_MESSAGE_VERSION,
586
+ nonce: this.nonce,
587
+ type: 'event',
588
+ method: SDK_CSP_VIOLATION_METHOD,
589
+ payload,
590
+ });
591
+ }
592
+ catch {
593
+ // CSP 违规已经由浏览器阻断,诊断发送失败不影响页面继续降级运行。
367
594
  }
368
595
  }
369
596
  handleEvent(message) {
@@ -374,6 +601,9 @@ class MiniProgramBridgeClient {
374
601
  else if (eventName === 'ready' && !this.runtimeUnavailable) {
375
602
  this.resolveReadyOnce();
376
603
  }
604
+ else if (eventName === 'show' && !this.runtimeUnavailable) {
605
+ this.postLocationReport('resume');
606
+ }
377
607
  this.eventBus.emit(eventName, message.payload);
378
608
  }
379
609
  handleResponse(message) {
@@ -1116,7 +1346,7 @@ function createMiniProgramSDK(options) {
1116
1346
  return new MiniProgramSDK(options);
1117
1347
  }
1118
1348
 
1119
- let defaultSDK = null;
1349
+ let defaultSDK = createMiniProgramSDK();
1120
1350
  function getDefaultSDK() {
1121
1351
  if (!defaultSDK) {
1122
1352
  defaultSDK = createMiniProgramSDK();
@@ -1228,4 +1458,4 @@ const hbSDK = {
1228
1458
  cloud,
1229
1459
  };
1230
1460
 
1231
- export { HbMiniProgramNetworkError, HbMiniProgramSDKError, MiniProgramSDK, auth, cloud, createMiniProgramSDK, hbSDK as default, device, navigation, network, off, on, ready, share, storage, ui, user, viewport };
1461
+ export { HbMiniProgramNetworkError, HbMiniProgramSDKError, auth, cloud, hbSDK as default, device, navigation, network, off, on, ready, share, storage, ui, user, viewport };
@@ -1,5 +1,7 @@
1
1
  'use strict';
2
2
 
3
+ const APIUserMiniprogramPublicSdkConfigPath = '/user_miniprogram/public/sdk_config';
4
+
3
5
  var re = {exports: {}};
4
6
 
5
7
  var constants;
@@ -2813,6 +2815,7 @@ const MINIAPP_UPLOAD_SCOPE = 'activity';
2813
2815
  const ACTIVITY_UPLOAD_KEY_MAX_LENGTH = 64;
2814
2816
  const MINIAPP_UPLOAD_BATCH_SIZE = 50;
2815
2817
  const MINIAPP_UPLOAD_TOTAL_SIZE_LIMIT_BYTES = 100 * 1024 * 1024;
2818
+ const PUBLIC_USER_MINIPROGRAM_SDK_CONFIG_API_PATH = APIUserMiniprogramPublicSdkConfigPath;
2816
2819
  const USER_MINIPROGRAM_ACCESS_STATUS_API_PATH = '/mall/developer/user_miniprogram/access_status';
2817
2820
  const DEVELOPER_ENTITY_LIST_API_PATH = '/mall/developer/entity/list';
2818
2821
  const DEVELOPER_ENTITY_SWITCH_API_PATH = '/mall/developer/entity/switch';
@@ -2918,6 +2921,7 @@ exports.MINIAPP_UPLOAD_BATCH_SIZE = MINIAPP_UPLOAD_BATCH_SIZE;
2918
2921
  exports.MINIAPP_UPLOAD_SCOPE = MINIAPP_UPLOAD_SCOPE;
2919
2922
  exports.MINIAPP_UPLOAD_TOTAL_SIZE_LIMIT_BYTES = MINIAPP_UPLOAD_TOTAL_SIZE_LIMIT_BYTES;
2920
2923
  exports.PRECHECK_USER_MINIPROGRAM_VERSION_API_PATH = PRECHECK_USER_MINIPROGRAM_VERSION_API_PATH;
2924
+ exports.PUBLIC_USER_MINIPROGRAM_SDK_CONFIG_API_PATH = PUBLIC_USER_MINIPROGRAM_SDK_CONFIG_API_PATH;
2921
2925
  exports.RELEASE_USER_MINIPROGRAM_VERSION_API_PATH = RELEASE_USER_MINIPROGRAM_VERSION_API_PATH;
2922
2926
  exports.REOPEN_USER_MINIPROGRAM_API_PATH = REOPEN_USER_MINIPROGRAM_API_PATH;
2923
2927
  exports.SUBMIT_USER_MINIPROGRAM_AUDIT_API_PATH = SUBMIT_USER_MINIPROGRAM_AUDIT_API_PATH;
@@ -1,3 +1,5 @@
1
+ const APIUserMiniprogramPublicSdkConfigPath = '/user_miniprogram/public/sdk_config';
2
+
1
3
  var re = {exports: {}};
2
4
 
3
5
  var constants;
@@ -2811,6 +2813,7 @@ const MINIAPP_UPLOAD_SCOPE = 'activity';
2811
2813
  const ACTIVITY_UPLOAD_KEY_MAX_LENGTH = 64;
2812
2814
  const MINIAPP_UPLOAD_BATCH_SIZE = 50;
2813
2815
  const MINIAPP_UPLOAD_TOTAL_SIZE_LIMIT_BYTES = 100 * 1024 * 1024;
2816
+ const PUBLIC_USER_MINIPROGRAM_SDK_CONFIG_API_PATH = APIUserMiniprogramPublicSdkConfigPath;
2814
2817
  const USER_MINIPROGRAM_ACCESS_STATUS_API_PATH = '/mall/developer/user_miniprogram/access_status';
2815
2818
  const DEVELOPER_ENTITY_LIST_API_PATH = '/mall/developer/entity/list';
2816
2819
  const DEVELOPER_ENTITY_SWITCH_API_PATH = '/mall/developer/entity/switch';
@@ -2901,4 +2904,4 @@ function shouldUploadDistFile(relativePath) {
2901
2904
  return true;
2902
2905
  }
2903
2906
 
2904
- export { ACTIVITY_UPLOAD_KEY_MAX_LENGTH, CREATE_USER_MINIPROGRAM_API_PATH, CREATE_USER_MINIPROGRAM_LEADERBOARD_API_PATH, DELETE_USER_MINIPROGRAM_LEADERBOARD_API_PATH, DETAIL_USER_MINIPROGRAM_API_PATH, DETAIL_USER_MINIPROGRAM_LEADERBOARD_API_PATH, DEVELOPER_ENTITY_LIST_API_PATH, DEVELOPER_ENTITY_SWITCH_API_PATH, LIST_USER_MINIPROGRAM_API_PATH, LIST_USER_MINIPROGRAM_LEADERBOARD_API_PATH, LIST_USER_MINIPROGRAM_VERSION_API_PATH, MINIAPP_UPLOAD_BATCH_SIZE, MINIAPP_UPLOAD_SCOPE, MINIAPP_UPLOAD_TOTAL_SIZE_LIMIT_BYTES, PRECHECK_USER_MINIPROGRAM_VERSION_API_PATH, RELEASE_USER_MINIPROGRAM_VERSION_API_PATH, REOPEN_USER_MINIPROGRAM_API_PATH, SUBMIT_USER_MINIPROGRAM_AUDIT_API_PATH, TAKE_DOWN_USER_MINIPROGRAM_API_PATH, UPDATE_SQUARE_DISPLAY_API_PATH, UPDATE_USER_MINIPROGRAM_PREVIEW_ALLOWLIST_API_PATH, USER_MINIPROGRAM_ACCESS_STATUS_API_PATH, USER_MINIPROGRAM_PREVIEW_ALLOWLIST_API_PATH, USER_MINIPROGRAM_VERSION_PREVIEW_INFO_API_PATH, WITHDRAW_USER_MINIPROGRAM_VERSION_API_PATH, getMiniProgramUploadAlias, getMiniappUploadKey, isValidMiniappManifestVersion as isValidVersion, normalizeRelativePath, relativePathContainsNodeModulesSegment, shouldUploadDistFile, validateUploadPaths, validateUploadTotalSize };
2907
+ export { ACTIVITY_UPLOAD_KEY_MAX_LENGTH, CREATE_USER_MINIPROGRAM_API_PATH, CREATE_USER_MINIPROGRAM_LEADERBOARD_API_PATH, DELETE_USER_MINIPROGRAM_LEADERBOARD_API_PATH, DETAIL_USER_MINIPROGRAM_API_PATH, DETAIL_USER_MINIPROGRAM_LEADERBOARD_API_PATH, DEVELOPER_ENTITY_LIST_API_PATH, DEVELOPER_ENTITY_SWITCH_API_PATH, LIST_USER_MINIPROGRAM_API_PATH, LIST_USER_MINIPROGRAM_LEADERBOARD_API_PATH, LIST_USER_MINIPROGRAM_VERSION_API_PATH, MINIAPP_UPLOAD_BATCH_SIZE, MINIAPP_UPLOAD_SCOPE, MINIAPP_UPLOAD_TOTAL_SIZE_LIMIT_BYTES, PRECHECK_USER_MINIPROGRAM_VERSION_API_PATH, PUBLIC_USER_MINIPROGRAM_SDK_CONFIG_API_PATH, RELEASE_USER_MINIPROGRAM_VERSION_API_PATH, REOPEN_USER_MINIPROGRAM_API_PATH, SUBMIT_USER_MINIPROGRAM_AUDIT_API_PATH, TAKE_DOWN_USER_MINIPROGRAM_API_PATH, UPDATE_SQUARE_DISPLAY_API_PATH, UPDATE_USER_MINIPROGRAM_PREVIEW_ALLOWLIST_API_PATH, USER_MINIPROGRAM_ACCESS_STATUS_API_PATH, USER_MINIPROGRAM_PREVIEW_ALLOWLIST_API_PATH, USER_MINIPROGRAM_VERSION_PREVIEW_INFO_API_PATH, WITHDRAW_USER_MINIPROGRAM_VERSION_API_PATH, getMiniProgramUploadAlias, getMiniappUploadKey, isValidMiniappManifestVersion as isValidVersion, normalizeRelativePath, relativePathContainsNodeModulesSegment, shouldUploadDistFile, validateUploadPaths, validateUploadTotalSize };
@@ -8,6 +8,12 @@ const MINI_PROGRAM_MESSAGE_VERSION = 1;
8
8
  const MINI_PROGRAM_BRIDGE_NONCE_PARAM = 'hb_mini_bridge_nonce';
9
9
  /** SDK 初始化时发给父容器的握手方法名。 */
10
10
  const SDK_HANDSHAKE_METHOD = 'sdk.handshake';
11
+ /** Runtime 主动探测 SDK 当前文档地址的内部方法名。 */
12
+ const RUNTIME_LOCATION_PROBE_METHOD = 'runtime.location.probe';
13
+ /** SDK 向 Runtime 报告当前文档地址的内部方法名。 */
14
+ const SDK_LOCATION_REPORT_METHOD = 'sdk.location.report';
15
+ /** SDK 向 Runtime 报告 CSP 违规的内部方法名。 */
16
+ const SDK_CSP_VIOLATION_METHOD = 'sdk.csp.violation';
11
17
 
12
18
  /**
13
19
  * 判断未知数据是否符合小程序 bridge 消息信封。
@@ -339,7 +345,10 @@ exports.NAVIGATION_CLOSE_METHOD = NAVIGATION_CLOSE_METHOD;
339
345
  exports.NAVIGATION_OPEN_APP_PAGE_METHOD = NAVIGATION_OPEN_APP_PAGE_METHOD;
340
346
  exports.NAVIGATION_RELOAD_METHOD = NAVIGATION_RELOAD_METHOD;
341
347
  exports.NETWORK_REQUEST_METHOD = NETWORK_REQUEST_METHOD;
348
+ exports.RUNTIME_LOCATION_PROBE_METHOD = RUNTIME_LOCATION_PROBE_METHOD;
349
+ exports.SDK_CSP_VIOLATION_METHOD = SDK_CSP_VIOLATION_METHOD;
342
350
  exports.SDK_HANDSHAKE_METHOD = SDK_HANDSHAKE_METHOD;
351
+ exports.SDK_LOCATION_REPORT_METHOD = SDK_LOCATION_REPORT_METHOD;
343
352
  exports.SHARE_SCREENSHOT_METHOD = SHARE_SCREENSHOT_METHOD;
344
353
  exports.SHARE_SHOW_SHARE_MENU_METHOD = SHARE_SHOW_SHARE_MENU_METHOD;
345
354
  exports.STORAGE_GET_STORAGE_METHOD = STORAGE_GET_STORAGE_METHOD;
@@ -6,6 +6,12 @@ const MINI_PROGRAM_MESSAGE_VERSION = 1;
6
6
  const MINI_PROGRAM_BRIDGE_NONCE_PARAM = 'hb_mini_bridge_nonce';
7
7
  /** SDK 初始化时发给父容器的握手方法名。 */
8
8
  const SDK_HANDSHAKE_METHOD = 'sdk.handshake';
9
+ /** Runtime 主动探测 SDK 当前文档地址的内部方法名。 */
10
+ const RUNTIME_LOCATION_PROBE_METHOD = 'runtime.location.probe';
11
+ /** SDK 向 Runtime 报告当前文档地址的内部方法名。 */
12
+ const SDK_LOCATION_REPORT_METHOD = 'sdk.location.report';
13
+ /** SDK 向 Runtime 报告 CSP 违规的内部方法名。 */
14
+ const SDK_CSP_VIOLATION_METHOD = 'sdk.csp.violation';
9
15
 
10
16
  /**
11
17
  * 判断未知数据是否符合小程序 bridge 消息信封。
@@ -321,4 +327,4 @@ const MINI_PROGRAM_PROTOCOL_CAPABILITIES = [
321
327
  },
322
328
  ];
323
329
 
324
- export { AUTH_LOGIN_METHOD, CLOUD_LEADERBOARD_DELETE_CURRENT_USER_ENTRY_METHOD, CLOUD_LEADERBOARD_GET_CURRENT_USER_ENTRY_METHOD, CLOUD_LEADERBOARD_GET_INFO_METHOD, CLOUD_LEADERBOARD_GET_LIST_METHOD, CLOUD_LEADERBOARD_SUBMIT_METHOD, DEVICE_SET_CLIPBOARD_METHOD, DEVICE_VIBRATE_METHOD, MINI_PROGRAM_BRIDGE_NONCE_PARAM, MINI_PROGRAM_MESSAGE_NAMESPACE, MINI_PROGRAM_MESSAGE_VERSION, MINI_PROGRAM_PROTOCOL_CAPABILITIES, NAVIGATION_CLOSE_METHOD, NAVIGATION_OPEN_APP_PAGE_METHOD, NAVIGATION_RELOAD_METHOD, NETWORK_REQUEST_METHOD, SDK_HANDSHAKE_METHOD, SHARE_SCREENSHOT_METHOD, SHARE_SHOW_SHARE_MENU_METHOD, STORAGE_GET_STORAGE_METHOD, STORAGE_SET_STORAGE_METHOD, UI_HIDE_LOADING_METHOD, UI_SHOW_LOADING_METHOD, UI_SHOW_TOAST_METHOD, USER_GET_CURRENT_USER_DETAIL_METHOD, USER_GET_CURRENT_USER_PROFILE_METHOD, USER_GET_INFO_METHOD, USER_GET_PLATFORM_ACCOUNT_INFO_METHOD, USER_GET_PLATFORM_ACCOUNT_OVERVIEW_METHOD, USER_GET_STEAM_GAME_LIST_METHOD, VIEWPORT_GET_WINDOW_INFO_METHOD, VIEWPORT_SET_NAVIGATION_BAR_STYLE_METHOD, isMiniProgramBridgeMessage };
330
+ export { AUTH_LOGIN_METHOD, CLOUD_LEADERBOARD_DELETE_CURRENT_USER_ENTRY_METHOD, CLOUD_LEADERBOARD_GET_CURRENT_USER_ENTRY_METHOD, CLOUD_LEADERBOARD_GET_INFO_METHOD, CLOUD_LEADERBOARD_GET_LIST_METHOD, CLOUD_LEADERBOARD_SUBMIT_METHOD, DEVICE_SET_CLIPBOARD_METHOD, DEVICE_VIBRATE_METHOD, MINI_PROGRAM_BRIDGE_NONCE_PARAM, MINI_PROGRAM_MESSAGE_NAMESPACE, MINI_PROGRAM_MESSAGE_VERSION, MINI_PROGRAM_PROTOCOL_CAPABILITIES, NAVIGATION_CLOSE_METHOD, NAVIGATION_OPEN_APP_PAGE_METHOD, NAVIGATION_RELOAD_METHOD, NETWORK_REQUEST_METHOD, RUNTIME_LOCATION_PROBE_METHOD, SDK_CSP_VIOLATION_METHOD, SDK_HANDSHAKE_METHOD, SDK_LOCATION_REPORT_METHOD, SHARE_SCREENSHOT_METHOD, SHARE_SHOW_SHARE_MENU_METHOD, STORAGE_GET_STORAGE_METHOD, STORAGE_SET_STORAGE_METHOD, UI_HIDE_LOADING_METHOD, UI_SHOW_LOADING_METHOD, UI_SHOW_TOAST_METHOD, USER_GET_CURRENT_USER_DETAIL_METHOD, USER_GET_CURRENT_USER_PROFILE_METHOD, USER_GET_INFO_METHOD, USER_GET_PLATFORM_ACCOUNT_INFO_METHOD, USER_GET_PLATFORM_ACCOUNT_OVERVIEW_METHOD, USER_GET_STEAM_GAME_LIST_METHOD, VIEWPORT_GET_WINDOW_INFO_METHOD, VIEWPORT_SET_NAVIGATION_BAR_STYLE_METHOD, isMiniProgramBridgeMessage };