@zeppos/zeus-cli 1.2.2 → 1.2.3

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 (221) hide show
  1. package/package.json +1 -1
  2. package/private-modules/zeppos-app-utils/dist/config/device-server.js +113 -0
  3. package/private-modules/zeppos-app-utils/dist/config/device.js +74 -1
  4. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/_package.json +14 -0
  5. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/empty/app-side/i18n/en-US.po +2 -0
  6. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/empty/app-side/index.js +13 -0
  7. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/empty/app.js +10 -0
  8. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/empty/app.json +59 -0
  9. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/empty/assets/default/icon.png +0 -0
  10. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/empty/page/i18n/en-US.po +2 -0
  11. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/empty/page/index.js +7 -0
  12. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/empty/setting/i18n/en-US.po +2 -0
  13. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/empty/setting/index.js +7 -0
  14. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/empty/watchface/index.js +13 -0
  15. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/hello-world/app-side/index.js +11 -0
  16. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/hello-world/app.js +10 -0
  17. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/hello-world/app.json +66 -0
  18. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/hello-world/assets/gtr3/icon.png +0 -0
  19. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/hello-world/assets/gtr3/image/logo.png +0 -0
  20. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/hello-world/assets/gtr3-pro/icon.png +0 -0
  21. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/hello-world/assets/gtr3-pro/image/logo.png +0 -0
  22. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/hello-world/assets/gts3/icon.png +0 -0
  23. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/hello-world/assets/gts3/image/logo.png +0 -0
  24. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/hello-world/page/gtr3/home/index.page.js +18 -0
  25. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/hello-world/page/gtr3/home/index.page.json +1 -0
  26. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/hello-world/page/gtr3/home/index.style.js +15 -0
  27. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/hello-world/page/gtr3-pro/home/index.page.js +18 -0
  28. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/hello-world/page/gtr3-pro/home/index.page.json +1 -0
  29. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/hello-world/page/gtr3-pro/home/index.style.js +15 -0
  30. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/hello-world/page/gts3/home/index.page.js +19 -0
  31. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/hello-world/page/gts3/home/index.page.json +1 -0
  32. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/hello-world/page/gts3/home/index.style.js +15 -0
  33. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/hello-world/page/i18n/en-US.po +3 -0
  34. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/hello-world/setting/i18n/en-US.po +2 -0
  35. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/hello-world/setting/index.js +5 -0
  36. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/hello-world/utils/index.js +3 -0
  37. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/jsconfig.json +14 -0
  38. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/app.js +7 -0
  39. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/app.json +51 -0
  40. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/bg/bg.png +0 -0
  41. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/bigNum/0.png +0 -0
  42. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/bigNum/1.png +0 -0
  43. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/bigNum/2.png +0 -0
  44. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/bigNum/3.png +0 -0
  45. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/bigNum/4.png +0 -0
  46. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/bigNum/5.png +0 -0
  47. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/bigNum/6.png +0 -0
  48. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/bigNum/7.png +0 -0
  49. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/bigNum/8.png +0 -0
  50. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/bigNum/9.png +0 -0
  51. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/bigNum/sp.png +0 -0
  52. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/btn/back.png +0 -0
  53. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/btn/lv.png +0 -0
  54. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/btn/red.png +0 -0
  55. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/point/bg.png +0 -0
  56. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/point/bottom.png +0 -0
  57. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/point/center.png +0 -0
  58. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/point/h.png +0 -0
  59. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/point/left.png +0 -0
  60. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/point/m.png +0 -0
  61. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/point/right.png +0 -0
  62. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/point/s.png +0 -0
  63. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/preview.png +0 -0
  64. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/second/second.png +0 -0
  65. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/smallNum/0.png +0 -0
  66. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/smallNum/1.png +0 -0
  67. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/smallNum/2.png +0 -0
  68. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/smallNum/3.png +0 -0
  69. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/smallNum/4.png +0 -0
  70. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/smallNum/5.png +0 -0
  71. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/smallNum/6.png +0 -0
  72. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/smallNum/7.png +0 -0
  73. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/smallNum/8.png +0 -0
  74. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/smallNum/9.png +0 -0
  75. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/smallNum/d.png +0 -0
  76. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/smallNum/n.png +0 -0
  77. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/week_ch/1.png +0 -0
  78. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/week_ch/2.png +0 -0
  79. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/week_ch/3.png +0 -0
  80. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/week_ch/4.png +0 -0
  81. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/week_ch/5.png +0 -0
  82. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/week_ch/6.png +0 -0
  83. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/week_ch/7.png +0 -0
  84. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/week_en/1.png +0 -0
  85. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/week_en/2.png +0 -0
  86. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/week_en/3.png +0 -0
  87. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/week_en/4.png +0 -0
  88. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/week_en/5.png +0 -0
  89. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/week_en/6.png +0 -0
  90. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/assets/gtr-3-pro/images/week_en/7.png +0 -0
  91. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/shared/buffer.js +11 -0
  92. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/shared/device-polyfill.js +3 -0
  93. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/shared/global.js +17 -0
  94. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/shared/js-module.js +27 -0
  95. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/shared/logger.js +21 -0
  96. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/shared/setTimeout.js +59 -0
  97. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/watchface/gtr-3-pro/index.js +1 -0
  98. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v1/timer/watchface/round/index.js +438 -0
  99. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/_package.json +14 -0
  100. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/app.js +28 -0
  101. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/app.json +51 -0
  102. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gt.s/consume.png +0 -0
  103. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gt.s/food/beer.png +0 -0
  104. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gt.s/food/cake.png +0 -0
  105. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gt.s/food/chocolate.png +0 -0
  106. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gt.s/food/coffee.png +0 -0
  107. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gt.s/food/cookies.png +0 -0
  108. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gt.s/food/ham.png +0 -0
  109. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gt.s/food/hamburger.png +0 -0
  110. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gt.s/food/ice cream.png +0 -0
  111. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gt.s/food/pizza.png +0 -0
  112. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gt.s/food/sausage.png +0 -0
  113. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gt.s/icon.png +0 -0
  114. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gt.s/multiply.png +0 -0
  115. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gt.s/selected.png +0 -0
  116. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gt.s/unselected.png +0 -0
  117. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gts/consume.png +0 -0
  118. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gts/food/beer.png +0 -0
  119. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gts/food/cake.png +0 -0
  120. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gts/food/chocolate.png +0 -0
  121. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gts/food/coffee.png +0 -0
  122. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gts/food/cookies.png +0 -0
  123. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gts/food/ham.png +0 -0
  124. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gts/food/hamburger.png +0 -0
  125. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gts/food/ice cream.png +0 -0
  126. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gts/food/pizza.png +0 -0
  127. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gts/food/sausage.png +0 -0
  128. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gts/icon.png +0 -0
  129. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gts/multiply.png +0 -0
  130. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gts/selected.png +0 -0
  131. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/assets/gts/unselected.png +0 -0
  132. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/page/gt/food-list.js +113 -0
  133. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/page/gt/index.js +126 -0
  134. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/page/gts/food-list.js +113 -0
  135. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/page/gts/index.js +126 -0
  136. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/page/i18n/en-US.po +42 -0
  137. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/page/i18n/zh-CN.po +42 -0
  138. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/utils/constants.js +54 -0
  139. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/utils/storage.js +42 -0
  140. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/utils/styles-gts-3.js +141 -0
  141. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/calories/utils/styles.js +142 -0
  142. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/empty/app-side/i18n/en-US.po +2 -0
  143. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/empty/app-side/index.js +13 -0
  144. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/empty/app.js +10 -0
  145. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/empty/app.json +59 -0
  146. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/empty/assets/default/icon.png +0 -0
  147. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/empty/page/i18n/en-US.po +2 -0
  148. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/empty/page/index.js +7 -0
  149. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/empty/setting/i18n/en-US.po +2 -0
  150. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/empty/setting/index.js +7 -0
  151. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/empty/watchface/index.js +13 -0
  152. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/fetch-api/app-side/i18n/en-US.po +2 -0
  153. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/fetch-api/app-side/index.js +72 -0
  154. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/fetch-api/app.js +23 -0
  155. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/fetch-api/app.json +55 -0
  156. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/fetch-api/assets/common/icon.png +0 -0
  157. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/fetch-api/assets/common.r/icon.png +0 -0
  158. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/fetch-api/assets/common.s/icon.png +0 -0
  159. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/fetch-api/page/i18n/en-US.po +2 -0
  160. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/fetch-api/page/index.js +55 -0
  161. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/fetch-api/pages/i18n/en-US.po +2 -0
  162. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/fetch-api/pages/index.js +55 -0
  163. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/fetch-api/shared/data.js +67 -0
  164. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/fetch-api/shared/defer.js +35 -0
  165. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/fetch-api/shared/device-polyfill.js +6 -0
  166. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/fetch-api/shared/es6-promise.js +1149 -0
  167. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/fetch-api/shared/event.js +42 -0
  168. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/fetch-api/shared/message-side.js +1145 -0
  169. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/fetch-api/shared/message.js +1151 -0
  170. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/fetch-api/utils/config/constants.js +2 -0
  171. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/fetch-api/utils/config/device.js +2 -0
  172. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/hello-world/app-side/index.js +11 -0
  173. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/hello-world/app.js +10 -0
  174. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/hello-world/app.json +66 -0
  175. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/hello-world/assets/gt.r/icon.png +0 -0
  176. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/hello-world/assets/gt.r/image/logo.png +0 -0
  177. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/hello-world/assets/gt.s/icon.png +0 -0
  178. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/hello-world/assets/gt.s/image/logo.png +0 -0
  179. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/hello-world/assets/gtr/icon.png +0 -0
  180. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/hello-world/assets/gtr/image/logo.png +0 -0
  181. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/hello-world/assets/gts/icon.png +0 -0
  182. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/hello-world/assets/gts/image/logo.png +0 -0
  183. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/hello-world/page/gt/home/index.page.js +17 -0
  184. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/hello-world/page/gt/home/index.page.json +1 -0
  185. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/hello-world/page/gt/home/index.page.r.layout.js +28 -0
  186. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/hello-world/page/gt/home/index.page.s.layout.js +28 -0
  187. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/hello-world/page/gt/home/index.style.js +18 -0
  188. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/hello-world/page/gtr/home/index.page.js +20 -0
  189. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/hello-world/page/gtr/home/index.page.json +1 -0
  190. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/hello-world/page/gtr/home/index.style.js +18 -0
  191. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/hello-world/page/gts/home/index.page.js +21 -0
  192. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/hello-world/page/gts/home/index.page.json +1 -0
  193. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/hello-world/page/gts/home/index.style.js +17 -0
  194. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/hello-world/page/i18n/en-US.po +3 -0
  195. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/hello-world/setting/i18n/en-US.po +2 -0
  196. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/hello-world/setting/index.js +5 -0
  197. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/hello-world/utils/index.js +3 -0
  198. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/jsconfig.json +14 -0
  199. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/todo-list/.prettierrc.js +6 -0
  200. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/todo-list/app-side/index.js +48 -0
  201. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/todo-list/app.js +25 -0
  202. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/todo-list/app.json +70 -0
  203. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/todo-list/assets/gt.s/icon.png +0 -0
  204. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/todo-list/assets/gts/icon.png +0 -0
  205. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/todo-list/page/home/index.page.js +155 -0
  206. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/todo-list/page/home/index.page.json +1 -0
  207. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/todo-list/page/home/index.style.js +93 -0
  208. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/todo-list/page/i18n/en-US.po +9 -0
  209. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/todo-list/setting/i18n/en-US.po +5 -0
  210. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/todo-list/setting/index.js +145 -0
  211. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/todo-list/shared/data.js +67 -0
  212. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/todo-list/shared/defer.js +35 -0
  213. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/todo-list/shared/device-polyfill.js +6 -0
  214. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/todo-list/shared/es6-promise.js +1149 -0
  215. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/todo-list/shared/event.js +42 -0
  216. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/todo-list/shared/message-side.js +1145 -0
  217. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/todo-list/shared/message.js +1151 -0
  218. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/todo-list/utils/constants.js +3 -0
  219. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/todo-list/utils/fs.js +38 -0
  220. package/private-modules/zeppos-app-utils/dist/public/template/config-version-v3/v2/todo-list/utils/index.js +38 -0
  221. package/private-modules/zeppos-app-utils/dist/tools/tools.js +14 -0
@@ -0,0 +1,1151 @@
1
+ import { EventBus } from '@zos/utils'
2
+ import { log as Logger } from '@zos/utils'
3
+ import { Deferred, timeout } from './defer'
4
+ import { json2buf, buf2json, bin2hex, str2buf, buf2str } from './data'
5
+
6
+ let logger
7
+
8
+ function initLogger() {
9
+ if (typeof __ZEPPOS__ !== 'undefined') {
10
+ logger = Logger.getLogger('device-message')
11
+ // logger.level = logger.levels.warn
12
+ } else {
13
+ logger = Logger.getLogger('side-message')
14
+ }
15
+ }
16
+
17
+ const DEBUG = true
18
+
19
+ export const MESSAGE_SIZE = 3600
20
+ export const MESSAGE_HEADER = 16
21
+ export const MESSAGE_PAYLOAD = MESSAGE_SIZE - MESSAGE_HEADER
22
+ export const HM_MESSAGE_PROTO_HEADER = 66
23
+ export const HM_MESSAGE_PROTO_PAYLOAD = MESSAGE_PAYLOAD - HM_MESSAGE_PROTO_HEADER
24
+
25
+ export const MessageFlag = {
26
+ Runtime: 0x0,
27
+ App: 0x1
28
+ }
29
+
30
+ export const MessageType = {
31
+ Shake: 0x1,
32
+ Close: 0x2,
33
+ Heart: 0x3,
34
+ Data: 0x4,
35
+ DataWithSystemTool: 0x5,
36
+ Log: 0x6
37
+ }
38
+
39
+ export const MessageRuntimeType = {
40
+ Invoke: 0x1
41
+ }
42
+ export const MessageVersion = {
43
+ Version1: 0x1
44
+ }
45
+
46
+ export const MessagePayloadType = {
47
+ Request: 0x1,
48
+ Response: 0x2,
49
+ Notify: 0x3
50
+ }
51
+
52
+ export const DataType = {
53
+ empty: 'empty',
54
+ json: 'json',
55
+ text: 'text',
56
+ bin: 'bin'
57
+ }
58
+
59
+ export const MessagePayloadDataTypeOp = {
60
+ EMPTY: 0x0,
61
+ TEXT: 0x1,
62
+ JSON: 0x2,
63
+ BIN: 0x3
64
+ }
65
+
66
+ export function getDataType(type) {
67
+ switch (type.toLowerCase()) {
68
+ case DataType.json:
69
+ return MessagePayloadDataTypeOp.JSON
70
+ case DataType.text:
71
+ return MessagePayloadDataTypeOp.TEXT
72
+ case DataType.bin:
73
+ return MessagePayloadDataTypeOp.BIN
74
+ case DataType.empty:
75
+ return MessagePayloadDataTypeOp.EMPTY
76
+ default:
77
+ return MessagePayloadDataTypeOp.TEXT
78
+ }
79
+ }
80
+
81
+ // 中续,结束
82
+ export const MessagePayloadOpCode = {
83
+ Continued: 0x0,
84
+ Finished: 0x1
85
+ }
86
+
87
+ let traceId = 10000
88
+ export function genTraceId() {
89
+ return traceId++
90
+ }
91
+
92
+ let spanId = 1000
93
+ export function genSpanId() {
94
+ return spanId++
95
+ }
96
+
97
+ export function getTimestamp(t = Date.now()) {
98
+ return t % 10000000
99
+ }
100
+
101
+ class Session extends EventBus {
102
+ constructor(id, type, ctx) {
103
+ super()
104
+ this.id = id
105
+ this.type = type // payloadType
106
+ this.ctx = ctx
107
+ this.tempBuf = null
108
+ this.chunks = []
109
+ this.count = 0
110
+ this.finishChunk = null
111
+ }
112
+
113
+ addChunk(payload) {
114
+ if (payload.opCode === MessagePayloadOpCode.Finished) {
115
+ this.count = payload.seqId
116
+ this.finishChunk = payload
117
+ }
118
+
119
+ if (payload.payloadLength !== payload.payload.byteLength) {
120
+ logger.error('receive chunk data length error, expect %d but %d', payload.payloadLength, payload.payload.byteLength)
121
+ this.emit('error', Error(`receive chunk data length error, expect ${payload.payloadLength} but ${payload.payload.byteLength}`))
122
+ return
123
+ }
124
+
125
+ this.chunks.push(payload)
126
+ this.checkIfReceiveAllChunks()
127
+ }
128
+
129
+ checkIfReceiveAllChunks() {
130
+ if (this.count !== this.chunks.length) return
131
+
132
+ for (let i = 1; i <= this.count; i++) {
133
+ const chunk = this.chunks.find((c) => c.seqId === i)
134
+
135
+ if (!chunk) {
136
+ this.releaseBuf()
137
+ this.emit('error', Error('receive data error'))
138
+ return
139
+ }
140
+
141
+ const buf = chunk.payload
142
+ this.tempBuf = this.tempBuf ? Buffer.concat([this.tempBuf, buf]) : buf
143
+ }
144
+
145
+ if (!this.finishChunk) return
146
+
147
+ this.finishChunk.payload = this.tempBuf
148
+ this.finishChunk.payloadLength = this.finishChunk.payload.byteLength
149
+
150
+ if (this.finishChunk.totalLength !== this.finishChunk.payloadLength) {
151
+ logger.error('receive full data length error, expect %d but %d', this.finishChunk.payloadLength, this.finishChunk.payload.byteLength)
152
+ this.emit('error', Error(`receive full data length error, expect ${this.finishChunk.payloadLength} but ${this.finishChunk.payload.byteLength}`))
153
+ return
154
+ }
155
+
156
+ this.emit('data', this.finishChunk)
157
+ }
158
+
159
+ getLength() {
160
+ return this.tempBufLength
161
+ }
162
+ releaseBuf() {
163
+ this.tempBuf = null
164
+ this.chunks = []
165
+ this.finishChunk = null
166
+ this.count = 0
167
+ }
168
+ }
169
+
170
+ class SessionMgr {
171
+ constructor() {
172
+ this.sessions = new Map()
173
+ }
174
+
175
+ key(session) {
176
+ return `${session.id}:${session.type}`
177
+ }
178
+
179
+ newSession(id, type, ctx) {
180
+ const newSession = new Session(id, type, ctx)
181
+ this.sessions.set(this.key(newSession), newSession)
182
+ return newSession
183
+ }
184
+
185
+ destroy(session) {
186
+ session.releaseBuf()
187
+ this.sessions.delete(this.key(session))
188
+ }
189
+
190
+ has(id, type) {
191
+ return this.sessions.has(
192
+ this.key({
193
+ id,
194
+ type
195
+ })
196
+ )
197
+ }
198
+
199
+ getById(id, type) {
200
+ return this.sessions.get(
201
+ this.key({
202
+ id,
203
+ type
204
+ })
205
+ )
206
+ }
207
+
208
+ clear() {
209
+ this.sessions.clear()
210
+ }
211
+ }
212
+
213
+ export class MessageBuilder extends EventBus {
214
+ constructor(
215
+ { appId = 0, appDevicePort = 20, appSidePort = 0, ble = undefined } = {
216
+ appId: 0,
217
+ appDevicePort: 20,
218
+ appSidePort: 0,
219
+ ble: undefined
220
+ }
221
+ ) {
222
+ super()
223
+ initLogger()
224
+ this.isDevice = typeof __ZEPPOS__ !== 'undefined'
225
+ this.isSide = !this.isDevice
226
+
227
+ this.appId = appId
228
+ this.appDevicePort = appDevicePort
229
+ this.appSidePort = appSidePort
230
+ this.ble = ble
231
+ this.sendMsg = this.getSafeSend()
232
+ this.chunkSize = MESSAGE_PAYLOAD
233
+ this.tempBuf = null
234
+ this.shakeTask = Deferred()
235
+ this.waitingShakePromise = this.shakeTask.promise
236
+ this.sessionMgr = new SessionMgr()
237
+ }
238
+
239
+ getMessageSize() {
240
+ return MESSAGE_SIZE
241
+ }
242
+
243
+ getMessagePayloadSize() {
244
+ return MESSAGE_PAYLOAD
245
+ }
246
+
247
+ getMessageHeaderSize() {
248
+ return MESSAGE_HEADER
249
+ }
250
+
251
+ buf2Json(buf) {
252
+ return buf2json(buf)
253
+ }
254
+
255
+ json2Buf(json) {
256
+ return json2buf(json)
257
+ }
258
+
259
+ now(t = Date.now()) {
260
+ return getTimestamp(t)
261
+ }
262
+
263
+ connect(cb) {
264
+ this.on('message', (message) => {
265
+ this.onMessage(message)
266
+ })
267
+
268
+ this.ble &&
269
+ this.ble.createConnect((index, data, size) => {
270
+ DEBUG && logger.warn('[RAW] [R] receive index=>%d size=>%d bin=>%s', index, size, bin2hex(data))
271
+ this.onFragmentData(data)
272
+ })
273
+
274
+ this.sendShake()
275
+ cb && cb(this)
276
+ }
277
+
278
+ disConnect(cb) {
279
+ logger.debug('app ble disconnect')
280
+ this.sendClose()
281
+ this.off('message')
282
+ this.ble && this.ble.disConnect()
283
+
284
+ cb && cb(this)
285
+ }
286
+
287
+ listen(cb) {
288
+ if (typeof messaging === 'undefined') {
289
+ return
290
+ }
291
+
292
+ messaging &&
293
+ messaging.peerSocket.addListener('message', (message) => {
294
+ DEBUG && logger.warn('[RAW] [R] receive size=>%d bin=>%s', message.byteLength, bin2hex(message))
295
+ this.onMessage(message)
296
+ })
297
+
298
+ this.waitingShakePromise = Promise.resolve()
299
+ cb && cb(this)
300
+ }
301
+
302
+ buildBin(data) {
303
+ if (data.payload.byteLength > this.chunkSize) {
304
+ throw new Error(`${data.payload.byteLength} greater than max size of ${this.chunkSize}`)
305
+ }
306
+
307
+ const size = this.getMessageHeaderSize() + data.payload.byteLength
308
+ let buf = Buffer.alloc(size)
309
+ let offset = 0
310
+
311
+ buf.writeUInt8(data.flag, offset)
312
+ offset += 1
313
+
314
+ buf.writeUInt8(data.version, offset)
315
+ offset += 1
316
+
317
+ buf.writeUInt16LE(data.type, offset)
318
+ offset += 2
319
+
320
+ buf.writeUInt16LE(data.port1, offset)
321
+ offset += 2
322
+
323
+ buf.writeUInt16LE(data.port2, offset)
324
+ offset += 2
325
+
326
+ buf.writeUInt32LE(data.appId, offset)
327
+ offset += 4
328
+
329
+ buf.writeUInt32LE(data.extra, offset)
330
+ offset += 4
331
+
332
+ buf.fill(data.payload, offset, data.payload.byteLength + offset)
333
+
334
+ return buf
335
+ }
336
+
337
+ buildShake() {
338
+ return this.buildBin({
339
+ flag: MessageFlag.App,
340
+ version: MessageVersion.Version1,
341
+ type: MessageType.Shake,
342
+ port1: this.appDevicePort,
343
+ port2: this.appSidePort,
344
+ appId: this.appId,
345
+ extra: 0,
346
+ payload: Buffer.from([this.appId])
347
+ })
348
+ }
349
+
350
+ sendShake() {
351
+ if (this.appSidePort === 0) {
352
+ const shake = this.buildShake()
353
+ this.sendMsg(shake)
354
+ }
355
+ }
356
+
357
+ buildClose() {
358
+ return this.buildBin({
359
+ flag: MessageFlag.App,
360
+ version: MessageVersion.Version1,
361
+ type: MessageType.Close,
362
+ port1: this.appDevicePort,
363
+ port2: this.appSidePort,
364
+ appId: this.appId,
365
+ extra: 0,
366
+ payload: Buffer.from([this.appId])
367
+ })
368
+ }
369
+
370
+ sendClose() {
371
+ if (this.appSidePort !== 0) {
372
+ const close = this.buildClose()
373
+
374
+ this.sendMsg(close)
375
+ }
376
+ }
377
+
378
+ readBin(arrayBuf) {
379
+ const buf = Buffer.from(arrayBuf)
380
+ let offset = 0
381
+
382
+ const flag = buf.readUInt8(offset)
383
+ offset += 1
384
+
385
+ const version = buf.readUInt8(offset)
386
+ offset += 1
387
+
388
+ const type = buf.readUInt16LE(offset)
389
+ offset += 2
390
+
391
+ const port1 = buf.readUInt16LE(offset)
392
+ offset += 2
393
+
394
+ const port2 = buf.readUInt16LE(offset)
395
+ offset += 2
396
+
397
+ const appId = buf.readUInt32LE(offset)
398
+ offset += 4
399
+
400
+ const extra = buf.readUInt32LE(offset)
401
+ offset += 4
402
+
403
+ const payload = buf.subarray(offset)
404
+
405
+ return {
406
+ flag,
407
+ version,
408
+ type,
409
+ port1,
410
+ port2,
411
+ appId,
412
+ extra,
413
+ payload
414
+ }
415
+ }
416
+
417
+ // opts 覆盖头部选项
418
+ buildData(payload, opts = {}) {
419
+ return this.buildBin({
420
+ flag: MessageFlag.App,
421
+ version: MessageVersion.Version1,
422
+ type: MessageType.Data,
423
+ port1: this.appDevicePort,
424
+ port2: this.appSidePort,
425
+ appId: this.appId,
426
+ extra: 0,
427
+ ...opts,
428
+ payload
429
+ })
430
+ }
431
+
432
+ sendBin(buf, debug = DEBUG) {
433
+ // ble 发送消息
434
+ debug && logger.warn('[RAW] [S] send size=%d bin=%s', buf.byteLength, bin2hex(buf.buffer))
435
+ const result = this.ble.send(buf.buffer, buf.byteLength)
436
+
437
+ if (!result) {
438
+ throw Error('send message error')
439
+ }
440
+ }
441
+
442
+ sendBinBySide(buf, debug = DEBUG) {
443
+ // side 发送消息
444
+ debug && logger.warn('[RAW] [S] send size=%d bin=%s', buf.byteLength, bin2hex(buf.buffer))
445
+ messaging.peerSocket.send(buf.buffer)
446
+ }
447
+
448
+ // 通用获取逻辑
449
+ getSafeSend() {
450
+ if (this.isDevice) {
451
+ return this.sendBin.bind(this)
452
+ } else {
453
+ return this.sendBinBySide.bind(this)
454
+ }
455
+ }
456
+
457
+ _logSend(buf) {
458
+ this.sendMsg(buf, false)
459
+ }
460
+
461
+ // 大数据的复杂头部分包协议
462
+ sendHmProtocol({ requestId, dataBin, type, contentType, dataType }, { messageType = MessageType.Data } = {}) {
463
+ const headerSize = 0
464
+ const hmDataSize = HM_MESSAGE_PROTO_PAYLOAD
465
+ const userDataLength = dataBin.byteLength
466
+
467
+ let offset = 0
468
+ const _buf = Buffer.alloc(hmDataSize)
469
+ const traceId = requestId ? requestId : genTraceId()
470
+ const spanId = genSpanId()
471
+ let seqId = 1
472
+
473
+ const count = Math.ceil(userDataLength / hmDataSize)
474
+
475
+ function genSeqId() {
476
+ return seqId++
477
+ }
478
+
479
+ for (let i = 1; i <= count; i++) {
480
+ this.errorIfBleDisconnect()
481
+ if (i === count) {
482
+ // last
483
+ const tailSize = userDataLength - offset
484
+ const tailBuf = Buffer.alloc(headerSize + tailSize)
485
+
486
+ dataBin.copy(tailBuf, headerSize, offset, offset + tailSize)
487
+ offset += tailSize
488
+ this.sendDataWithSession(
489
+ {
490
+ traceId,
491
+ spanId: spanId,
492
+ seqId: genSeqId(),
493
+ payload: tailBuf,
494
+ type,
495
+ opCode: MessagePayloadOpCode.Finished,
496
+ totalLength: userDataLength,
497
+ contentType,
498
+ dataType
499
+ },
500
+ {
501
+ messageType
502
+ }
503
+ )
504
+
505
+ break
506
+ }
507
+
508
+ dataBin.copy(_buf, headerSize, offset, offset + hmDataSize)
509
+ offset += hmDataSize
510
+
511
+ this.sendDataWithSession(
512
+ {
513
+ traceId,
514
+ spanId: spanId,
515
+ seqId: genSeqId(),
516
+ payload: _buf,
517
+ type,
518
+ opCode: MessagePayloadOpCode.Continued,
519
+ totalLength: userDataLength,
520
+ contentType,
521
+ dataType
522
+ },
523
+ {
524
+ messageType
525
+ }
526
+ )
527
+ }
528
+
529
+ if (offset === userDataLength) {
530
+ DEBUG && logger.debug('HmProtocol send ok msgSize=> %d dataSize=> %d', offset, userDataLength)
531
+ } else {
532
+ DEBUG && logger.error('HmProtocol send error msgSize=> %d dataSize=> %d', offset, userDataLength)
533
+ }
534
+ }
535
+
536
+ // 大数据的简单分包协议
537
+ sendSimpleProtocol({ dataBin }, { messageType = MessageType.Data } = {}) {
538
+ const dataSize = this.chunkSize
539
+ const headerSize = 0
540
+ const userDataLength = dataBin.byteLength
541
+
542
+ let offset = 0
543
+ const _buf = Buffer.alloc(dataSize)
544
+
545
+ const count = Math.ceil(userDataLength / dataSize)
546
+
547
+ for (let i = 1; i <= count; i++) {
548
+ if (i === count) {
549
+ // last
550
+ const tailSize = userDataLength - offset
551
+ const tailBuf = Buffer.alloc(headerSize + tailSize)
552
+
553
+ dataBin.copy(tailBuf, headerSize, offset, offset + tailSize)
554
+ offset += tailSize
555
+ this.sendSimpleData(
556
+ {
557
+ payload: tailBuf
558
+ },
559
+ {
560
+ messageType
561
+ }
562
+ )
563
+
564
+ break
565
+ }
566
+
567
+ dataBin.copy(_buf, headerSize, offset, offset + dataSize)
568
+ offset += dataSize
569
+
570
+ this.sendSimpleData(
571
+ {
572
+ payload: _buf
573
+ },
574
+ {
575
+ messageType
576
+ }
577
+ )
578
+ }
579
+
580
+ if (offset === userDataLength) {
581
+ // logger.debug('SimpleProtocol send ok msgSize=> %d dataSize=> %d', offset, userDataLength)
582
+ } else {
583
+ // logger.error('SimpleProtocol send error msgSize=> %d dataSize=> %d', offset, userDataLength)
584
+ }
585
+ }
586
+
587
+ sendJson({ requestId = 0, json, type = MessagePayloadType.Request, contentType, dataType }) {
588
+ const packageBin = json2buf(json)
589
+ const traceId = requestId ? requestId : genTraceId()
590
+
591
+ this.sendHmProtocol({
592
+ requestId: traceId,
593
+ dataBin: packageBin,
594
+ type,
595
+ contentType,
596
+ dataType
597
+ })
598
+ }
599
+
600
+ sendBuf({ requestId = 0, buf, type = MessagePayloadType.Request, contentType, dataType }) {
601
+ const traceId = requestId ? requestId : genTraceId()
602
+
603
+ return this.sendHmProtocol({
604
+ requestId: traceId,
605
+ dataBin: buf,
606
+ type,
607
+ contentType,
608
+ dataType
609
+ })
610
+ }
611
+
612
+ sendLog(str) {
613
+ const packageBuf = str2buf(str)
614
+ this.sendSimpleProtocol(
615
+ {
616
+ dataBin: packageBuf
617
+ },
618
+ {
619
+ messageType: MessageType.Log
620
+ }
621
+ )
622
+ }
623
+
624
+ sendDataWithSession({ traceId, spanId, seqId, payload, type, opCode, totalLength, contentType, dataType }, { messageType }) {
625
+ const payloadBin = this.buildPayload({
626
+ traceId,
627
+ spanId,
628
+ seqId,
629
+ totalLength,
630
+ type,
631
+ opCode,
632
+ payload,
633
+ contentType,
634
+ dataType
635
+ })
636
+
637
+ let data = this.isDevice
638
+ ? this.buildData(payloadBin, {
639
+ type: messageType
640
+ })
641
+ : payloadBin
642
+
643
+ this.sendMsg(data)
644
+ }
645
+
646
+ sendSimpleData({ payload }, { messageType }) {
647
+ let data = this.isDevice
648
+ ? this.buildData(payload, {
649
+ type: messageType
650
+ })
651
+ : payload
652
+
653
+ this._logSend(data)
654
+ }
655
+
656
+ buildPayload(data) {
657
+ const size = HM_MESSAGE_PROTO_HEADER + data.payload.byteLength
658
+ let buf = Buffer.alloc(size)
659
+ let offset = 0
660
+
661
+ // header
662
+ // traceId
663
+ buf.writeUInt32LE(data.traceId, offset)
664
+ offset += 4
665
+
666
+ // parentId
667
+ buf.writeUInt32LE(0, offset)
668
+ offset += 4
669
+
670
+ // spanId
671
+ buf.writeUInt32LE(data.spanId, offset)
672
+ offset += 4
673
+
674
+ // seqId // 顺序 id,消息部分顺序序列号
675
+ buf.writeUInt32LE(data.seqId, offset)
676
+ offset += 4
677
+
678
+ // message total length
679
+ buf.writeUInt32LE(data.totalLength, offset)
680
+ offset += 4
681
+
682
+ // payload length 当前
683
+ buf.writeUInt32LE(data.payload.byteLength, offset)
684
+ offset += 4
685
+
686
+ // payload type
687
+ buf.writeUInt8(data.type, offset)
688
+ offset += 1
689
+
690
+ // opCode
691
+ buf.writeUInt8(data.opCode, offset)
692
+ offset += 1
693
+
694
+ // timestamp1
695
+ buf.writeUInt32LE(this.now(), offset)
696
+ offset += 4
697
+
698
+ // timestamp2
699
+ buf.writeUInt32LE(0, offset)
700
+ offset += 4
701
+
702
+ // timestamp3
703
+ buf.writeUInt32LE(0, offset)
704
+ offset += 4
705
+
706
+ // timestamp4
707
+ buf.writeUInt32LE(0, offset)
708
+ offset += 4
709
+
710
+ // timestamp5
711
+ buf.writeUInt32LE(0, offset)
712
+ offset += 4
713
+
714
+ // timestamp6
715
+ buf.writeUInt32LE(0, offset)
716
+ offset += 4
717
+
718
+ // timestamp7
719
+ buf.writeUInt32LE(0, offset)
720
+ offset += 4
721
+
722
+ // request content data type
723
+ buf.writeUInt8(data.contentType, offset)
724
+ offset += 1
725
+
726
+ // response data type
727
+ buf.writeUInt8(data.dataType, offset)
728
+ offset += 1
729
+
730
+ buf.writeUInt16LE(0, offset)
731
+ offset += 2
732
+
733
+ // extra1
734
+ buf.writeUInt32LE(0, offset)
735
+ offset += 4
736
+
737
+ // extra2
738
+ buf.writeUInt32LE(0, offset)
739
+ offset += 4
740
+
741
+ // payload
742
+ buf.fill(data.payload, offset, data.payload.byteLength + offset)
743
+
744
+ return buf
745
+ }
746
+
747
+ readPayload(arrayBuf) {
748
+ const buf = Buffer.from(arrayBuf)
749
+ let offset = 0
750
+
751
+ const traceId = buf.readUInt32LE(offset)
752
+ offset += 4
753
+
754
+ const parentId = buf.readUInt32LE(offset)
755
+ offset += 4
756
+
757
+ const spanId = buf.readUInt32LE(offset)
758
+ offset += 4
759
+
760
+ const seqId = buf.readUInt32LE(offset)
761
+ offset += 4
762
+
763
+ const totalLength = buf.readUInt32LE(offset)
764
+ offset += 4
765
+
766
+ const payloadLength = buf.readUInt32LE(offset)
767
+ offset += 4
768
+
769
+ const payloadType = buf.readUInt8(offset)
770
+ offset += 1
771
+
772
+ const opCode = buf.readUInt8(offset)
773
+ offset += 1
774
+
775
+ const timestamp1 = buf.readUInt32LE(offset)
776
+ offset += 4
777
+
778
+ const timestamp2 = buf.readUInt32LE(offset)
779
+ offset += 4
780
+
781
+ const timestamp3 = buf.readUInt32LE(offset)
782
+ offset += 4
783
+
784
+ const timestamp4 = buf.readUInt32LE(offset)
785
+ offset += 4
786
+
787
+ const timestamp5 = buf.readUInt32LE(offset)
788
+ offset += 4
789
+
790
+ const timestamp6 = buf.readUInt32LE(offset)
791
+ offset += 4
792
+
793
+ const timestamp7 = buf.readUInt32LE(offset)
794
+ offset += 4
795
+
796
+ // request data type
797
+ const contentType = buf.readUInt8(offset)
798
+ offset += 1
799
+
800
+ // response data type
801
+ const dataType = buf.readUInt8(offset)
802
+ offset += 1
803
+
804
+ const extra1 = buf.readUInt16LE(offset)
805
+ offset += 2
806
+
807
+ const extra2 = buf.readUInt32LE(offset)
808
+ offset += 4
809
+
810
+ const extra3 = buf.readUInt32LE(offset)
811
+ offset += 4
812
+
813
+ const payload = buf.subarray(offset)
814
+
815
+ return {
816
+ traceId,
817
+ parentId,
818
+ spanId,
819
+ seqId,
820
+ totalLength,
821
+ payloadLength,
822
+ payloadType,
823
+ opCode,
824
+ contentType,
825
+ dataType,
826
+ timestamp1,
827
+ timestamp2,
828
+ timestamp3,
829
+ timestamp4,
830
+ timestamp5,
831
+ timestamp6,
832
+ timestamp7,
833
+ extra1,
834
+ extra2,
835
+ extra3,
836
+ payload
837
+ }
838
+ }
839
+
840
+ onFragmentData(bin) {
841
+ const data = this.readBin(bin)
842
+ this.emit('raw', bin)
843
+
844
+ DEBUG && logger.debug('receive data=>', JSON.stringify(data))
845
+ if (data.flag === MessageFlag.App && data.type === MessageType.Shake) {
846
+ this.appSidePort = data.port2
847
+ logger.debug('appSidePort=>', data.port2)
848
+ this.shakeTask.resolve()
849
+ } else if (data.flag === MessageFlag.App && data.type === MessageType.Data && data.port2 === this.appSidePort) {
850
+ this.emit('message', data.payload)
851
+ this.emit('read', data)
852
+ } else if (data.flag === MessageFlag.App && data.type === MessageType.DataWithSystemTool && data.port2 === this.appSidePort) {
853
+ this.emit('message', data.payload)
854
+ this.emit('read', data)
855
+ } else if (data.flag === MessageFlag.App && data.type === MessageType.Log && data.port2 === this.appSidePort) {
856
+ this.emit('log', data.payload)
857
+ } else {
858
+ logger.error('error appSidePort=>%d data=>%j', this.appSidePort, data)
859
+ }
860
+ }
861
+
862
+ errorIfBleDisconnect() { }
863
+
864
+ onMessage(messagePayload) {
865
+ const payload = this.readPayload(messagePayload)
866
+ let session = this.sessionMgr.getById(payload.traceId, payload.payloadType)
867
+
868
+ if (!session) {
869
+ session = this.sessionMgr.newSession(payload.traceId, payload.payloadType, this)
870
+
871
+ // TODO: 需要考虑缓冲,监听回调要放到启动之前,或者没有增加监听就缓存请求
872
+ session.on('data', (fullPayload) => {
873
+ if (fullPayload.opCode === MessagePayloadOpCode.Finished) {
874
+ if (fullPayload.payloadType === MessagePayloadType.Request) {
875
+ this.emit('request', {
876
+ request: fullPayload,
877
+ response: ({ data }) => {
878
+ this.response({
879
+ requestId: fullPayload.traceId,
880
+ contentType: fullPayload.contentType,
881
+ dataType: fullPayload.dataType,
882
+ data
883
+ })
884
+ }
885
+ })
886
+ } else if (fullPayload.payloadType === MessagePayloadType.Response) {
887
+ this.emit('response', fullPayload)
888
+ } else if (fullPayload.payloadType === MessagePayloadType.Notify) {
889
+ this.emit('call', fullPayload)
890
+ }
891
+
892
+ this.emit('data', fullPayload)
893
+ this.sessionMgr.destroy(session)
894
+ }
895
+ })
896
+
897
+ session.on('error', (error) => {
898
+ this.sessionMgr.destroy(session)
899
+ this.emit('error', error)
900
+ })
901
+ }
902
+
903
+ session.addChunk(payload)
904
+ }
905
+
906
+ /**
907
+ * 发送请求
908
+ * @param {object buffer arraybuffer arraybuffer like} data 传输的数据
909
+ * @param {*} opts
910
+ * @returns
911
+ */
912
+ request(data, opts) {
913
+ const _request = () => {
914
+ const defaultOpts = {
915
+ timeout: 60000,
916
+ contentType: 'json',
917
+ dataType: 'json'
918
+ }
919
+ const requestId = genTraceId()
920
+ const defer = Deferred()
921
+ opts = Object.assign(defaultOpts, opts)
922
+
923
+ const error = (error) => {
924
+ this.off('error', error)
925
+ defer.reject(error)
926
+ }
927
+
928
+ const transact = ({ traceId, payload, dataType }) => {
929
+ this.errorIfBleDisconnect()
930
+ DEBUG && logger.debug('traceId=>%d payload=>%s', traceId, payload.toString('hex'))
931
+ if (traceId === requestId) {
932
+ let result
933
+ switch (dataType) {
934
+ case MessagePayloadDataTypeOp.TEXT:
935
+ result = buf2str(payload)
936
+ break
937
+ case MessagePayloadDataTypeOp.BIN:
938
+ result = payload
939
+ break
940
+ case MessagePayloadDataTypeOp.JSON:
941
+ result = buf2json(payload)
942
+ break
943
+ default: // text
944
+ result = buf2str(payload)
945
+ break
946
+ }
947
+ DEBUG && logger.debug('request id=>%d payload=>%j', requestId, data)
948
+ DEBUG && logger.debug('response id=>%d payload=>%j', requestId, result)
949
+
950
+ this.off('response', transact)
951
+ this.off('error', error)
952
+ defer.resolve(result)
953
+ }
954
+ }
955
+
956
+ this.on('response', transact)
957
+ this.on('error', error)
958
+ if (Buffer.isBuffer(data)) {
959
+ this.sendBuf({
960
+ requestId,
961
+ buf: data,
962
+ type: MessagePayloadType.Request,
963
+ contentType: MessagePayloadDataTypeOp.BIN,
964
+ dataType: getDataType(opts.dataType)
965
+ })
966
+ } else if (data instanceof ArrayBuffer || ArrayBuffer.isView(data)) {
967
+ this.sendBuf({
968
+ requestId,
969
+ buf: Buffer.from(data),
970
+ type: MessagePayloadType.Request,
971
+ contentType: MessagePayloadDataTypeOp.BIN,
972
+ dataType: getDataType(opts.dataType)
973
+ })
974
+ } else {
975
+ this.sendJson({
976
+ requestId,
977
+ json: data,
978
+ type: MessagePayloadType.Request,
979
+ contentType: MessagePayloadDataTypeOp.JSON,
980
+ dataType: getDataType(opts.dataType)
981
+ })
982
+ }
983
+
984
+ let hasReturned = false
985
+
986
+ return Promise.race([
987
+ timeout(opts.timeout, (resolve, reject) => {
988
+ if (hasReturned) {
989
+ return resolve()
990
+ }
991
+
992
+ DEBUG && logger.error(`request timeout in ${opts.timeout}ms error=> %d data=> %j`, requestId, data)
993
+ this.off('response', transact)
994
+
995
+ reject(Error(`Timed out in ${opts.timeout}ms.`))
996
+ }),
997
+ defer.promise.finally(() => {
998
+ hasReturned = true
999
+ })
1000
+ ])
1001
+ }
1002
+
1003
+ return this.waitingShakePromise.then(_request)
1004
+ }
1005
+
1006
+ requestCb(data, opts, cb) {
1007
+ const _requestCb = () => {
1008
+ const defaultOpts = {
1009
+ timeout: 60000,
1010
+ contentType: 'json',
1011
+ dataType: 'json'
1012
+ }
1013
+
1014
+ if (typeof opts === 'function') {
1015
+ cb = opts
1016
+ opts = defaultOpts
1017
+ } else {
1018
+ opts = Object.assign(defaultOpts, opts)
1019
+ }
1020
+
1021
+ const requestId = genTraceId()
1022
+ let timer1 = null
1023
+ let hasReturned = false
1024
+
1025
+ const transact = ({ traceId, payload, dataType }) => {
1026
+ DEBUG && logger.debug('traceId=>%d payload=>%s', traceId, payload.toString('hex'))
1027
+ if (traceId === requestId) {
1028
+ let result
1029
+ switch (dataType) {
1030
+ case MessagePayloadDataTypeOp.TEXT:
1031
+ result = buf2str(payload)
1032
+ break
1033
+ case MessagePayloadDataTypeOp.BIN:
1034
+ result = payload
1035
+ break
1036
+ case MessagePayloadDataTypeOp.JSON:
1037
+ result = buf2json(payload)
1038
+ break
1039
+ default: // text
1040
+ result = buf2str(payload)
1041
+ break
1042
+ }
1043
+ DEBUG && logger.debug('request id=>%d payload=>%j', requestId, data)
1044
+ DEBUG && logger.debug('response id=>%d payload=>%j', requestId, result)
1045
+
1046
+ timer1 && clearTimeout(timer1)
1047
+ timer1 = null
1048
+ this.off('response', transact)
1049
+ hasReturned = true
1050
+ cb(null, result)
1051
+ }
1052
+ }
1053
+
1054
+ this.on('response', transact)
1055
+ if (Buffer.isBuffer(data)) {
1056
+ this.sendBuf({
1057
+ requestId,
1058
+ buf: data,
1059
+ type: MessagePayloadType.Request,
1060
+ contentType: MessagePayloadDataTypeOp.BIN,
1061
+ dataType: getDataType(opts.dataType)
1062
+ })
1063
+ } else if (data instanceof ArrayBuffer || ArrayBuffer.isView(data)) {
1064
+ this.sendBuf({
1065
+ requestId,
1066
+ buf: Buffer.from(data),
1067
+ type: MessagePayloadType.Request,
1068
+ contentType: MessagePayloadDataTypeOp.BIN,
1069
+ dataType: getDataType(opts.dataType)
1070
+ })
1071
+ } else {
1072
+ this.sendJson({
1073
+ requestId,
1074
+ json: data,
1075
+ type: MessagePayloadType.Request,
1076
+ contentType: MessagePayloadDataTypeOp.JSON,
1077
+ dataType: getDataType(opts.dataType)
1078
+ })
1079
+ }
1080
+
1081
+ timer1 = setTimeout(() => {
1082
+ timer1 = null
1083
+ if (hasReturned) {
1084
+ return
1085
+ }
1086
+
1087
+ DEBUG && logger.error(`request time out in ${opts.timeout}ms error=>%d data=>%j`, requestId, data)
1088
+ this.off('response', transact)
1089
+ cb(Error(`Timed out in ${opts.timeout}ms.`))
1090
+ }, opts.timeout)
1091
+ }
1092
+
1093
+ return this.waitingShakePromise.then(_requestCb)
1094
+ }
1095
+
1096
+ /**
1097
+ * 相应接口给当前请求
1098
+ * @param {obj} param0
1099
+ */
1100
+ response({ requestId, contentType, dataType, data }) {
1101
+ if (MessagePayloadDataTypeOp.BIN === dataType) {
1102
+ this.sendBuf({
1103
+ requestId,
1104
+ buf: data,
1105
+ type: MessagePayloadType.Response,
1106
+ contentType,
1107
+ dataType
1108
+ })
1109
+ } else {
1110
+ this.sendJson({
1111
+ requestId,
1112
+ json: data,
1113
+ type: MessagePayloadType.Response,
1114
+ contentType,
1115
+ dataType
1116
+ })
1117
+ }
1118
+ }
1119
+
1120
+ /**
1121
+ * call 模式调用接口到伴生服务
1122
+ * @param {json | buffer} data
1123
+ * @returns
1124
+ */
1125
+ call(data) {
1126
+ return this.waitingShakePromise.then(() => {
1127
+ if (Buffer.isBuffer(data)) {
1128
+ return this.sendBuf({
1129
+ buf: data,
1130
+ type: MessagePayloadType.Notify,
1131
+ contentType: MessagePayloadDataTypeOp.BIN,
1132
+ dataType: MessagePayloadDataTypeOp.EMPTY
1133
+ })
1134
+ } else if (data instanceof ArrayBuffer || ArrayBuffer.isView(data)) {
1135
+ return this.sendBuf({
1136
+ buf: Buffer.from(data),
1137
+ type: MessagePayloadType.Notify,
1138
+ contentType: MessagePayloadDataTypeOp.BIN,
1139
+ dataType: MessagePayloadDataTypeOp.EMPTY
1140
+ })
1141
+ } else {
1142
+ return this.sendJson({
1143
+ json: data,
1144
+ type: MessagePayloadType.Notify,
1145
+ contentType: MessagePayloadDataTypeOp.JSON,
1146
+ dataType: MessagePayloadDataTypeOp.EMPTY
1147
+ })
1148
+ }
1149
+ })
1150
+ }
1151
+ }