akanjs 3.0.0-beta.20 → 3.0.0-beta.21

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 (731) hide show
  1. package/README.ko.md +0 -1
  2. package/README.md +0 -1
  3. package/base/baseEnv.ts +40 -3
  4. package/client/cookie.ts +56 -20
  5. package/client/device.ts +47 -95
  6. package/client/frameConfig.ts +2 -2
  7. package/client/native.ts +44 -0
  8. package/client/router.ts +11 -1
  9. package/client/rscNavigation.ts +5 -0
  10. package/client/storage.ts +68 -39
  11. package/fetch/client/fetchClient.ts +13 -4
  12. package/index.ts +47 -46
  13. package/package.json +6 -87
  14. package/server/devtools/signalSerializer.ts +1 -2
  15. package/server/hmr/devHmrController.ts +29 -11
  16. package/server/resolver/signal.resolver.ts +1 -10
  17. package/server/routeTreeBuilder.ts +8 -11
  18. package/server/routing/apiRouter.ts +15 -2
  19. package/server/rscClient.tsx +1 -2
  20. package/server/ssrFromRscRenderer.tsx +2 -0
  21. package/server/webRouter.ts +1 -0
  22. package/signal/CrossSiteGuard.ts +34 -2
  23. package/signal/endpoint.ts +12 -7
  24. package/signal/endpointInfo.ts +13 -0
  25. package/signal/internal.ts +9 -5
  26. package/signal/serializer/fetch.serializer.ts +6 -3
  27. package/signal/slice.ts +34 -24
  28. package/store/baseSt.ts +0 -1
  29. package/store/storeInstance.ts +29 -17
  30. package/types/client/cookie.d.ts +6 -4
  31. package/types/client/device.d.ts +7 -10
  32. package/types/client/native.d.ts +26 -0
  33. package/types/client/rscNavigation.d.ts +4 -0
  34. package/types/client/storage.d.ts +8 -1
  35. package/types/index.d.ts +48 -44
  36. package/types/server/hmr/devHmrController.d.ts +2 -1
  37. package/types/server/resolver/signal.resolver.d.ts +0 -1
  38. package/types/server/rscClient.d.ts +0 -3
  39. package/types/signal/CrossSiteGuard.d.ts +7 -2
  40. package/types/signal/endpoint.d.ts +1 -1
  41. package/types/signal/endpointInfo.d.ts +3 -0
  42. package/types/signal/slice.d.ts +3 -2
  43. package/types/store/baseSt.d.ts +0 -13
  44. package/types/vendor/@akanjs/native/packages/cli/src/api.d.ts +182 -0
  45. package/types/vendor/@akanjs/native/packages/cli/src/commands/build.d.ts +28 -0
  46. package/types/vendor/@akanjs/native/packages/cli/src/commands/compat.d.ts +2 -0
  47. package/types/vendor/@akanjs/native/packages/cli/src/commands/dev.d.ts +2 -0
  48. package/types/vendor/@akanjs/native/packages/cli/src/commands/doctor.d.ts +37 -0
  49. package/types/vendor/@akanjs/native/packages/cli/src/commands/plugin.d.ts +2 -0
  50. package/types/vendor/@akanjs/native/packages/cli/src/commands/signing.d.ts +2 -0
  51. package/types/vendor/@akanjs/native/packages/cli/src/commands/test.d.ts +2 -0
  52. package/types/vendor/@akanjs/native/packages/cli/src/commands/toolchain.d.ts +2 -0
  53. package/types/vendor/@akanjs/native/packages/cli/src/commands/update.d.ts +2 -0
  54. package/types/vendor/@akanjs/native/packages/cli/src/config.d.ts +278 -0
  55. package/types/vendor/@akanjs/native/packages/cli/src/index.d.ts +2 -0
  56. package/types/vendor/@akanjs/native/packages/cli/src/lib/acl.d.ts +21 -0
  57. package/types/vendor/@akanjs/native/packages/cli/src/lib/apilevel.d.ts +40 -0
  58. package/types/vendor/@akanjs/native/packages/cli/src/lib/apk.d.ts +36 -0
  59. package/types/vendor/@akanjs/native/packages/cli/src/lib/args.d.ts +9 -0
  60. package/types/vendor/@akanjs/native/packages/cli/src/lib/boot.d.ts +32 -0
  61. package/types/vendor/@akanjs/native/packages/cli/src/lib/chrome.d.ts +6 -0
  62. package/types/vendor/@akanjs/native/packages/cli/src/lib/codegen.d.ts +94 -0
  63. package/types/vendor/@akanjs/native/packages/cli/src/lib/compat.d.ts +49 -0
  64. package/types/vendor/@akanjs/native/packages/cli/src/lib/configkeys.d.ts +2 -0
  65. package/types/vendor/@akanjs/native/packages/cli/src/lib/csp.d.ts +51 -0
  66. package/types/vendor/@akanjs/native/packages/cli/src/lib/env.d.ts +44 -0
  67. package/types/vendor/@akanjs/native/packages/cli/src/lib/exec.d.ts +31 -0
  68. package/types/vendor/@akanjs/native/packages/cli/src/lib/googleservices.d.ts +2 -0
  69. package/types/vendor/@akanjs/native/packages/cli/src/lib/hmr.d.ts +120 -0
  70. package/types/vendor/@akanjs/native/packages/cli/src/lib/html.d.ts +20 -0
  71. package/types/vendor/@akanjs/native/packages/cli/src/lib/icons.d.ts +44 -0
  72. package/types/vendor/@akanjs/native/packages/cli/src/lib/image.d.ts +21 -0
  73. package/types/vendor/@akanjs/native/packages/cli/src/lib/iossigning.d.ts +81 -0
  74. package/types/vendor/@akanjs/native/packages/cli/src/lib/launch.d.ts +51 -0
  75. package/types/vendor/@akanjs/native/packages/cli/src/lib/log.d.ts +42 -0
  76. package/types/vendor/@akanjs/native/packages/cli/src/lib/manifestmerge.d.ts +18 -0
  77. package/types/vendor/@akanjs/native/packages/cli/src/lib/maven.d.ts +97 -0
  78. package/types/vendor/@akanjs/native/packages/cli/src/lib/names.d.ts +45 -0
  79. package/types/vendor/@akanjs/native/packages/cli/src/lib/native-plugins.d.ts +67 -0
  80. package/types/vendor/@akanjs/native/packages/cli/src/lib/nativeconfig.d.ts +11 -0
  81. package/types/vendor/@akanjs/native/packages/cli/src/lib/permissions.d.ts +10 -0
  82. package/types/vendor/@akanjs/native/packages/cli/src/lib/plist.d.ts +11 -0
  83. package/types/vendor/@akanjs/native/packages/cli/src/lib/png.d.ts +11 -0
  84. package/types/vendor/@akanjs/native/packages/cli/src/lib/prepare.d.ts +138 -0
  85. package/types/vendor/@akanjs/native/packages/cli/src/lib/privacy.d.ts +13 -0
  86. package/types/vendor/@akanjs/native/packages/cli/src/lib/project.d.ts +208 -0
  87. package/types/vendor/@akanjs/native/packages/cli/src/lib/root.d.ts +1 -0
  88. package/types/vendor/@akanjs/native/packages/cli/src/lib/routes.d.ts +1 -0
  89. package/types/vendor/@akanjs/native/packages/cli/src/lib/serve.d.ts +17 -0
  90. package/types/vendor/@akanjs/native/packages/cli/src/lib/signing.d.ts +14 -0
  91. package/types/vendor/@akanjs/native/packages/cli/src/lib/spec.d.ts +96 -0
  92. package/types/vendor/@akanjs/native/packages/cli/src/lib/toolchains.d.ts +150 -0
  93. package/types/vendor/@akanjs/native/packages/cli/src/lib/updates.d.ts +77 -0
  94. package/types/vendor/@akanjs/native/packages/cli/src/lib/vectors.d.ts +13 -0
  95. package/types/vendor/@akanjs/native/packages/cli/src/lib/xml.d.ts +13 -0
  96. package/types/vendor/@akanjs/native/packages/cli/src/platforms/android.d.ts +57 -0
  97. package/types/vendor/@akanjs/native/packages/cli/src/platforms/desktop-update.d.ts +4 -0
  98. package/types/vendor/@akanjs/native/packages/cli/src/platforms/desktop.d.ts +40 -0
  99. package/types/vendor/@akanjs/native/packages/cli/src/platforms/index.d.ts +14 -0
  100. package/types/vendor/@akanjs/native/packages/cli/src/platforms/ios.d.ts +44 -0
  101. package/types/vendor/@akanjs/native/packages/cli/src/platforms/linux.d.ts +6 -0
  102. package/types/vendor/@akanjs/native/packages/cli/src/platforms/macos.d.ts +7 -0
  103. package/types/vendor/@akanjs/native/packages/cli/src/platforms/targets.d.ts +4 -0
  104. package/types/vendor/@akanjs/native/packages/cli/src/platforms/web-run.d.ts +15 -0
  105. package/types/vendor/@akanjs/native/packages/cli/src/platforms/web.d.ts +2 -0
  106. package/types/vendor/@akanjs/native/packages/cli/src/platforms/windows.d.ts +8 -0
  107. package/types/vendor/@akanjs/native/packages/cli/src/platforms.d.ts +1 -0
  108. package/types/vendor/@akanjs/native/packages/cli/src.d.ts +1 -0
  109. package/types/vendor/@akanjs/native/packages/core/src/acl.d.ts +97 -0
  110. package/types/vendor/@akanjs/native/packages/core/src/boot.d.ts +66 -0
  111. package/types/vendor/@akanjs/native/packages/core/src/contract.d.ts +35 -0
  112. package/types/vendor/@akanjs/native/packages/core/src/errors.d.ts +27 -0
  113. package/types/vendor/@akanjs/native/packages/core/src/files.d.ts +23 -0
  114. package/types/vendor/@akanjs/native/packages/core/src/index.d.ts +14 -0
  115. package/types/vendor/@akanjs/native/packages/core/src/kernel.d.ts +112 -0
  116. package/types/vendor/@akanjs/native/packages/core/src/live.d.ts +12 -0
  117. package/types/vendor/@akanjs/native/packages/core/src/mime.d.ts +2 -0
  118. package/types/vendor/@akanjs/native/packages/core/src/plugin.d.ts +71 -0
  119. package/types/vendor/@akanjs/native/packages/core/src/protocol.d.ts +109 -0
  120. package/types/vendor/@akanjs/native/packages/core/src/runtime.d.ts +66 -0
  121. package/types/vendor/@akanjs/native/packages/core/src/state.d.ts +28 -0
  122. package/types/vendor/@akanjs/native/packages/core/src/testing.d.ts +41 -0
  123. package/types/vendor/@akanjs/native/packages/core/src/version.d.ts +2 -0
  124. package/types/vendor/@akanjs/native/packages/core/src/veto.d.ts +17 -0
  125. package/types/vendor/@akanjs/native/packages/core/src.d.ts +1 -0
  126. package/types/vendor/@akanjs/native/packages/desktop/src/deeplinks.d.ts +24 -0
  127. package/types/vendor/@akanjs/native/packages/desktop/src/delta.d.ts +2 -0
  128. package/types/vendor/@akanjs/native/packages/desktop/src/dispatcher.d.ts +95 -0
  129. package/types/vendor/@akanjs/native/packages/desktop/src/ffi.d.ts +144 -0
  130. package/types/vendor/@akanjs/native/packages/desktop/src/host.d.ts +11 -0
  131. package/types/vendor/@akanjs/native/packages/desktop/src/lifecycle.d.ts +40 -0
  132. package/types/vendor/@akanjs/native/packages/desktop/src/main.d.ts +4 -0
  133. package/types/vendor/@akanjs/native/packages/desktop/src/page-veto.d.ts +17 -0
  134. package/types/vendor/@akanjs/native/packages/desktop/src/paths.d.ts +25 -0
  135. package/types/vendor/@akanjs/native/packages/desktop/src/plugin.d.ts +179 -0
  136. package/types/vendor/@akanjs/native/packages/react/src/index.d.ts +8 -0
  137. package/types/vendor/@akanjs/native/packages/react/src.d.ts +1 -0
  138. package/types/vendor/@akanjs/native/plugins/accessibility/src/announce.d.ts +8 -0
  139. package/types/vendor/@akanjs/native/plugins/accessibility/src/index.d.ts +47 -0
  140. package/types/vendor/@akanjs/native/plugins/accessibility/src/web.d.ts +4 -0
  141. package/types/vendor/@akanjs/native/plugins/accessibility/src.d.ts +1 -0
  142. package/types/vendor/@akanjs/native/plugins/app/src/desktop.d.ts +3 -0
  143. package/types/vendor/@akanjs/native/plugins/app/src/index.d.ts +66 -0
  144. package/types/vendor/@akanjs/native/plugins/app/src/web.d.ts +2 -0
  145. package/types/vendor/@akanjs/native/plugins/app/src.d.ts +1 -0
  146. package/types/vendor/@akanjs/native/plugins/app-state/src/index.d.ts +19 -0
  147. package/types/vendor/@akanjs/native/plugins/app-state/src/web.d.ts +2 -0
  148. package/types/vendor/@akanjs/native/plugins/app-state/src.d.ts +1 -0
  149. package/types/vendor/@akanjs/native/plugins/appearance/src/desktop.d.ts +9 -0
  150. package/types/vendor/@akanjs/native/plugins/appearance/src/index.d.ts +32 -0
  151. package/types/vendor/@akanjs/native/plugins/appearance/src/setting.d.ts +6 -0
  152. package/types/vendor/@akanjs/native/plugins/appearance/src/web.d.ts +3 -0
  153. package/types/vendor/@akanjs/native/plugins/appearance/src.d.ts +1 -0
  154. package/types/vendor/@akanjs/native/plugins/auth-session/src/args.d.ts +18 -0
  155. package/types/vendor/@akanjs/native/plugins/auth-session/src/desktop.d.ts +17 -0
  156. package/types/vendor/@akanjs/native/plugins/auth-session/src/index.d.ts +41 -0
  157. package/types/vendor/@akanjs/native/plugins/auth-session/src.d.ts +1 -0
  158. package/types/vendor/@akanjs/native/plugins/autostart/src/desktop.d.ts +44 -0
  159. package/types/vendor/@akanjs/native/plugins/autostart/src/index.d.ts +44 -0
  160. package/types/vendor/@akanjs/native/plugins/autostart/src.d.ts +1 -0
  161. package/types/vendor/@akanjs/native/plugins/badge/src/count.d.ts +4 -0
  162. package/types/vendor/@akanjs/native/plugins/badge/src/desktop.d.ts +3 -0
  163. package/types/vendor/@akanjs/native/plugins/badge/src/index.d.ts +37 -0
  164. package/types/vendor/@akanjs/native/plugins/badge/src/web.d.ts +2 -0
  165. package/types/vendor/@akanjs/native/plugins/badge/src.d.ts +1 -0
  166. package/types/vendor/@akanjs/native/plugins/biometric/src/index.d.ts +53 -0
  167. package/types/vendor/@akanjs/native/plugins/biometric/src.d.ts +1 -0
  168. package/types/vendor/@akanjs/native/plugins/browser/src/args.d.ts +8 -0
  169. package/types/vendor/@akanjs/native/plugins/browser/src/desktop.d.ts +9 -0
  170. package/types/vendor/@akanjs/native/plugins/browser/src/index.d.ts +36 -0
  171. package/types/vendor/@akanjs/native/plugins/browser/src/web.d.ts +2 -0
  172. package/types/vendor/@akanjs/native/plugins/browser/src.d.ts +1 -0
  173. package/types/vendor/@akanjs/native/plugins/camera/src/desktop.d.ts +5 -0
  174. package/types/vendor/@akanjs/native/plugins/camera/src/index.d.ts +55 -0
  175. package/types/vendor/@akanjs/native/plugins/camera/src/web.d.ts +2 -0
  176. package/types/vendor/@akanjs/native/plugins/camera/src.d.ts +1 -0
  177. package/types/vendor/@akanjs/native/plugins/clipboard/src/desktop.d.ts +8 -0
  178. package/types/vendor/@akanjs/native/plugins/clipboard/src/index.d.ts +40 -0
  179. package/types/vendor/@akanjs/native/plugins/clipboard/src/web.d.ts +2 -0
  180. package/types/vendor/@akanjs/native/plugins/clipboard/src.d.ts +1 -0
  181. package/types/vendor/@akanjs/native/plugins/device/src/desktop.d.ts +33 -0
  182. package/types/vendor/@akanjs/native/plugins/device/src/index.d.ts +55 -0
  183. package/types/vendor/@akanjs/native/plugins/device/src/web.d.ts +22 -0
  184. package/types/vendor/@akanjs/native/plugins/device/src.d.ts +1 -0
  185. package/types/vendor/@akanjs/native/plugins/dialog/src/desktop.d.ts +3 -0
  186. package/types/vendor/@akanjs/native/plugins/dialog/src/index.d.ts +60 -0
  187. package/types/vendor/@akanjs/native/plugins/dialog/src/options.d.ts +29 -0
  188. package/types/vendor/@akanjs/native/plugins/dialog/src/web.d.ts +2 -0
  189. package/types/vendor/@akanjs/native/plugins/dialog/src.d.ts +1 -0
  190. package/types/vendor/@akanjs/native/plugins/dock/src/desktop.d.ts +3 -0
  191. package/types/vendor/@akanjs/native/plugins/dock/src/index.d.ts +46 -0
  192. package/types/vendor/@akanjs/native/plugins/dock/src.d.ts +1 -0
  193. package/types/vendor/@akanjs/native/plugins/file-picker/src/common.d.ts +33 -0
  194. package/types/vendor/@akanjs/native/plugins/file-picker/src/desktop.d.ts +9 -0
  195. package/types/vendor/@akanjs/native/plugins/file-picker/src/index.d.ts +84 -0
  196. package/types/vendor/@akanjs/native/plugins/file-picker/src/web.d.ts +6 -0
  197. package/types/vendor/@akanjs/native/plugins/file-picker/src.d.ts +1 -0
  198. package/types/vendor/@akanjs/native/plugins/filesystem/src/common.d.ts +49 -0
  199. package/types/vendor/@akanjs/native/plugins/filesystem/src/desktop.d.ts +8 -0
  200. package/types/vendor/@akanjs/native/plugins/filesystem/src/index.d.ts +123 -0
  201. package/types/vendor/@akanjs/native/plugins/filesystem/src/web.d.ts +2 -0
  202. package/types/vendor/@akanjs/native/plugins/filesystem/src.d.ts +1 -0
  203. package/types/vendor/@akanjs/native/plugins/geolocation/src/index.d.ts +93 -0
  204. package/types/vendor/@akanjs/native/plugins/geolocation/src/web.d.ts +11 -0
  205. package/types/vendor/@akanjs/native/plugins/geolocation/src.d.ts +1 -0
  206. package/types/vendor/@akanjs/native/plugins/global-shortcut/src/desktop.d.ts +3 -0
  207. package/types/vendor/@akanjs/native/plugins/global-shortcut/src/index.d.ts +52 -0
  208. package/types/vendor/@akanjs/native/plugins/global-shortcut/src.d.ts +1 -0
  209. package/types/vendor/@akanjs/native/plugins/haptics/src/index.d.ts +31 -0
  210. package/types/vendor/@akanjs/native/plugins/haptics/src/web.d.ts +2 -0
  211. package/types/vendor/@akanjs/native/plugins/haptics/src.d.ts +1 -0
  212. package/types/vendor/@akanjs/native/plugins/http/src/common.d.ts +71 -0
  213. package/types/vendor/@akanjs/native/plugins/http/src/desktop.d.ts +5 -0
  214. package/types/vendor/@akanjs/native/plugins/http/src/index.d.ts +104 -0
  215. package/types/vendor/@akanjs/native/plugins/http/src/web.d.ts +2 -0
  216. package/types/vendor/@akanjs/native/plugins/http/src.d.ts +1 -0
  217. package/types/vendor/@akanjs/native/plugins/iap/src/index.d.ts +171 -0
  218. package/types/vendor/@akanjs/native/plugins/iap/src.d.ts +1 -0
  219. package/types/vendor/@akanjs/native/plugins/keep-awake/src/desktop.d.ts +15 -0
  220. package/types/vendor/@akanjs/native/plugins/keep-awake/src/index.d.ts +33 -0
  221. package/types/vendor/@akanjs/native/plugins/keep-awake/src/web.d.ts +2 -0
  222. package/types/vendor/@akanjs/native/plugins/keep-awake/src.d.ts +1 -0
  223. package/types/vendor/@akanjs/native/plugins/keyboard/src/index.d.ts +42 -0
  224. package/types/vendor/@akanjs/native/plugins/keyboard/src/web.d.ts +2 -0
  225. package/types/vendor/@akanjs/native/plugins/keyboard/src.d.ts +1 -0
  226. package/types/vendor/@akanjs/native/plugins/local-notifications/src/desktop.d.ts +29 -0
  227. package/types/vendor/@akanjs/native/plugins/local-notifications/src/index.d.ts +126 -0
  228. package/types/vendor/@akanjs/native/plugins/local-notifications/src/schedule.d.ts +38 -0
  229. package/types/vendor/@akanjs/native/plugins/local-notifications/src/timers.d.ts +25 -0
  230. package/types/vendor/@akanjs/native/plugins/local-notifications/src/web.d.ts +4 -0
  231. package/types/vendor/@akanjs/native/plugins/local-notifications/src.d.ts +1 -0
  232. package/types/vendor/@akanjs/native/plugins/menu/src/desktop.d.ts +3 -0
  233. package/types/vendor/@akanjs/native/plugins/menu/src/index.d.ts +85 -0
  234. package/types/vendor/@akanjs/native/plugins/menu/src.d.ts +1 -0
  235. package/types/vendor/@akanjs/native/plugins/network/src/index.d.ts +22 -0
  236. package/types/vendor/@akanjs/native/plugins/network/src/web.d.ts +3 -0
  237. package/types/vendor/@akanjs/native/plugins/network/src.d.ts +1 -0
  238. package/types/vendor/@akanjs/native/plugins/opener/src/desktop.d.ts +14 -0
  239. package/types/vendor/@akanjs/native/plugins/opener/src/index.d.ts +33 -0
  240. package/types/vendor/@akanjs/native/plugins/opener/src/url.d.ts +16 -0
  241. package/types/vendor/@akanjs/native/plugins/opener/src/web.d.ts +2 -0
  242. package/types/vendor/@akanjs/native/plugins/opener/src.d.ts +1 -0
  243. package/types/vendor/@akanjs/native/plugins/preferences/src/desktop.d.ts +3 -0
  244. package/types/vendor/@akanjs/native/plugins/preferences/src/index.d.ts +26 -0
  245. package/types/vendor/@akanjs/native/plugins/preferences/src/web.d.ts +2 -0
  246. package/types/vendor/@akanjs/native/plugins/preferences/src.d.ts +1 -0
  247. package/types/vendor/@akanjs/native/plugins/push/src/index.d.ts +57 -0
  248. package/types/vendor/@akanjs/native/plugins/push/src.d.ts +1 -0
  249. package/types/vendor/@akanjs/native/plugins/screen/src/desktop.d.ts +3 -0
  250. package/types/vendor/@akanjs/native/plugins/screen/src/index.d.ts +70 -0
  251. package/types/vendor/@akanjs/native/plugins/screen/src/web.d.ts +18 -0
  252. package/types/vendor/@akanjs/native/plugins/screen/src.d.ts +1 -0
  253. package/types/vendor/@akanjs/native/plugins/screen-orientation/src/index.d.ts +32 -0
  254. package/types/vendor/@akanjs/native/plugins/screen-orientation/src/types.d.ts +8 -0
  255. package/types/vendor/@akanjs/native/plugins/screen-orientation/src/web.d.ts +3 -0
  256. package/types/vendor/@akanjs/native/plugins/screen-orientation/src.d.ts +1 -0
  257. package/types/vendor/@akanjs/native/plugins/secure-storage/src/desktop.d.ts +16 -0
  258. package/types/vendor/@akanjs/native/plugins/secure-storage/src/index.d.ts +39 -0
  259. package/types/vendor/@akanjs/native/plugins/secure-storage/src.d.ts +1 -0
  260. package/types/vendor/@akanjs/native/plugins/share/src/index.d.ts +55 -0
  261. package/types/vendor/@akanjs/native/plugins/share/src/options.d.ts +6 -0
  262. package/types/vendor/@akanjs/native/plugins/share/src/web.d.ts +5 -0
  263. package/types/vendor/@akanjs/native/plugins/share/src.d.ts +1 -0
  264. package/types/vendor/@akanjs/native/plugins/single-instance/src/desktop.d.ts +8 -0
  265. package/types/vendor/@akanjs/native/plugins/single-instance/src/index.d.ts +25 -0
  266. package/types/vendor/@akanjs/native/plugins/single-instance/src/socket.d.ts +46 -0
  267. package/types/vendor/@akanjs/native/plugins/single-instance/src.d.ts +1 -0
  268. package/types/vendor/@akanjs/native/plugins/splash-screen/src/index.d.ts +19 -0
  269. package/types/vendor/@akanjs/native/plugins/splash-screen/src/web.d.ts +4 -0
  270. package/types/vendor/@akanjs/native/plugins/splash-screen/src.d.ts +1 -0
  271. package/types/vendor/@akanjs/native/plugins/sqlite/src/common.d.ts +34 -0
  272. package/types/vendor/@akanjs/native/plugins/sqlite/src/desktop.d.ts +6 -0
  273. package/types/vendor/@akanjs/native/plugins/sqlite/src/index.d.ts +115 -0
  274. package/types/vendor/@akanjs/native/plugins/sqlite/src.d.ts +1 -0
  275. package/types/vendor/@akanjs/native/plugins/toast/src/index.d.ts +30 -0
  276. package/types/vendor/@akanjs/native/plugins/toast/src/queue.d.ts +23 -0
  277. package/types/vendor/@akanjs/native/plugins/toast/src/web.d.ts +2 -0
  278. package/types/vendor/@akanjs/native/plugins/toast/src.d.ts +1 -0
  279. package/types/vendor/@akanjs/native/plugins/tray/src/desktop.d.ts +3 -0
  280. package/types/vendor/@akanjs/native/plugins/tray/src/index.d.ts +113 -0
  281. package/types/vendor/@akanjs/native/plugins/tray/src.d.ts +1 -0
  282. package/types/vendor/@akanjs/native/plugins/updates/src/desktop.d.ts +4 -0
  283. package/types/vendor/@akanjs/native/plugins/updates/src/index.d.ts +68 -0
  284. package/types/vendor/@akanjs/native/plugins/updates/src.d.ts +1 -0
  285. package/types/vendor/@akanjs/native/plugins/window/src/desktop.d.ts +6 -0
  286. package/types/vendor/@akanjs/native/plugins/window/src/index.d.ts +185 -0
  287. package/types/vendor/@akanjs/native/plugins/window/src/web.d.ts +2 -0
  288. package/types/vendor/@akanjs/native/plugins/window/src.d.ts +1 -0
  289. package/types/vendor/@akanjs/native/plugins/window-state/src/desktop.d.ts +7 -0
  290. package/types/vendor/@akanjs/native/plugins/window-state/src/index.d.ts +33 -0
  291. package/types/vendor/@akanjs/native/plugins/window-state/src/state.d.ts +39 -0
  292. package/types/vendor/@akanjs/native/plugins/window-state/src.d.ts +1 -0
  293. package/types/webkit/index.d.ts +0 -2
  294. package/types/webkit/nativeNavigation.d.ts +25 -0
  295. package/types/webkit/nativePurchase.d.ts +37 -0
  296. package/types/webkit/useCamera.d.ts +13 -15
  297. package/types/webkit/useGeoLocation.d.ts +4 -5
  298. package/types/webkit/usePurchase.d.ts +12 -16
  299. package/ui/Link/Anchor.tsx +2 -5
  300. package/ui/System/Client.tsx +2 -6
  301. package/vendor/@akanjs/native/LICENSE +21 -0
  302. package/vendor/@akanjs/native/README.ko.md +88 -0
  303. package/vendor/@akanjs/native/README.md +93 -0
  304. package/vendor/@akanjs/native/THIRD_PARTY_NOTICES.md +237 -0
  305. package/vendor/@akanjs/native/native/android/maven.lock.json +1751 -0
  306. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeAcl.kt +243 -0
  307. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeActivity.kt +936 -0
  308. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeApplication.kt +189 -0
  309. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeAssetServer.kt +225 -0
  310. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeBridge.kt +444 -0
  311. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeCompat.kt +55 -0
  312. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeContract.kt +99 -0
  313. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeEd25519.kt +100 -0
  314. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeFileProvider.kt +71 -0
  315. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeKernel.kt +324 -0
  316. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativePlugin.kt +361 -0
  317. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeSpec.kt +100 -0
  318. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeUpdates.kt +305 -0
  319. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeVectors.kt +132 -0
  320. package/vendor/@akanjs/native/native/desktop/Cargo.lock +2565 -0
  321. package/vendor/@akanjs/native/native/desktop/Cargo.toml +49 -0
  322. package/vendor/@akanjs/native/native/desktop/build.rs +19 -0
  323. package/vendor/@akanjs/native/native/desktop/rust-toolchain.toml +7 -0
  324. package/vendor/@akanjs/native/native/desktop/src/accelerator.rs +466 -0
  325. package/vendor/@akanjs/native/native/desktop/src/autostart.rs +158 -0
  326. package/vendor/@akanjs/native/native/desktop/src/camera.rs +53 -0
  327. package/vendor/@akanjs/native/native/desktop/src/chrome.rs +710 -0
  328. package/vendor/@akanjs/native/native/desktop/src/contract.rs +105 -0
  329. package/vendor/@akanjs/native/native/desktop/src/devproxy.rs +234 -0
  330. package/vendor/@akanjs/native/native/desktop/src/dialog_args.rs +189 -0
  331. package/vendor/@akanjs/native/native/desktop/src/dock.rs +209 -0
  332. package/vendor/@akanjs/native/native/desktop/src/hotkey.rs +209 -0
  333. package/vendor/@akanjs/native/native/desktop/src/js_panels.rs +125 -0
  334. package/vendor/@akanjs/native/native/desktop/src/json.rs +272 -0
  335. package/vendor/@akanjs/native/native/desktop/src/keychain.rs +151 -0
  336. package/vendor/@akanjs/native/native/desktop/src/lib.rs +2185 -0
  337. package/vendor/@akanjs/native/native/desktop/src/linux/appearance.rs +177 -0
  338. package/vendor/@akanjs/native/native/desktop/src/linux/camera.rs +11 -0
  339. package/vendor/@akanjs/native/native/desktop/src/linux/clipboard.rs +48 -0
  340. package/vendor/@akanjs/native/native/desktop/src/linux/device.rs +9 -0
  341. package/vendor/@akanjs/native/native/desktop/src/linux/dialogs.rs +348 -0
  342. package/vendor/@akanjs/native/native/desktop/src/linux/dock.rs +146 -0
  343. package/vendor/@akanjs/native/native/desktop/src/linux/hotkey.rs +228 -0
  344. package/vendor/@akanjs/native/native/desktop/src/linux/keychain.rs +243 -0
  345. package/vendor/@akanjs/native/native/desktop/src/linux/menu.rs +445 -0
  346. package/vendor/@akanjs/native/native/desktop/src/linux/mod.rs +116 -0
  347. package/vendor/@akanjs/native/native/desktop/src/linux/notify.rs +211 -0
  348. package/vendor/@akanjs/native/native/desktop/src/linux/open.rs +79 -0
  349. package/vendor/@akanjs/native/native/desktop/src/linux/power.rs +155 -0
  350. package/vendor/@akanjs/native/native/desktop/src/linux/screen.rs +158 -0
  351. package/vendor/@akanjs/native/native/desktop/src/linux/tray.rs +604 -0
  352. package/vendor/@akanjs/native/native/desktop/src/menu.rs +517 -0
  353. package/vendor/@akanjs/native/native/desktop/src/navigation.rs +381 -0
  354. package/vendor/@akanjs/native/native/desktop/src/notify.rs +411 -0
  355. package/vendor/@akanjs/native/native/desktop/src/notify_schedule.rs +382 -0
  356. package/vendor/@akanjs/native/native/desktop/src/page_menu.rs +287 -0
  357. package/vendor/@akanjs/native/native/desktop/src/panels.rs +333 -0
  358. package/vendor/@akanjs/native/native/desktop/src/placement.rs +92 -0
  359. package/vendor/@akanjs/native/native/desktop/src/routes.rs +153 -0
  360. package/vendor/@akanjs/native/native/desktop/src/screen.rs +190 -0
  361. package/vendor/@akanjs/native/native/desktop/src/tray.rs +279 -0
  362. package/vendor/@akanjs/native/native/desktop/src/vectors.rs +126 -0
  363. package/vendor/@akanjs/native/native/desktop/src/win/appearance.rs +51 -0
  364. package/vendor/@akanjs/native/native/desktop/src/win/autostart.rs +77 -0
  365. package/vendor/@akanjs/native/native/desktop/src/win/camera.rs +34 -0
  366. package/vendor/@akanjs/native/native/desktop/src/win/clipboard.rs +106 -0
  367. package/vendor/@akanjs/native/native/desktop/src/win/device.rs +80 -0
  368. package/vendor/@akanjs/native/native/desktop/src/win/dialogs.rs +917 -0
  369. package/vendor/@akanjs/native/native/desktop/src/win/dock.rs +228 -0
  370. package/vendor/@akanjs/native/native/desktop/src/win/hotkey.rs +110 -0
  371. package/vendor/@akanjs/native/native/desktop/src/win/keychain.rs +103 -0
  372. package/vendor/@akanjs/native/native/desktop/src/win/menu.rs +500 -0
  373. package/vendor/@akanjs/native/native/desktop/src/win/mod.rs +100 -0
  374. package/vendor/@akanjs/native/native/desktop/src/win/msgwin.rs +86 -0
  375. package/vendor/@akanjs/native/native/desktop/src/win/notify.rs +334 -0
  376. package/vendor/@akanjs/native/native/desktop/src/win/open.rs +127 -0
  377. package/vendor/@akanjs/native/native/desktop/src/win/power.rs +64 -0
  378. package/vendor/@akanjs/native/native/desktop/src/win/registry.rs +87 -0
  379. package/vendor/@akanjs/native/native/desktop/src/win/screen.rs +127 -0
  380. package/vendor/@akanjs/native/native/desktop/src/win/tray.rs +280 -0
  381. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeAcl.swift +241 -0
  382. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeApp.swift +285 -0
  383. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeBridge.swift +407 -0
  384. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeContract.swift +106 -0
  385. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeKernel.swift +317 -0
  386. package/vendor/@akanjs/native/native/ios/Sources/AkanNativePlugin.swift +250 -0
  387. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeSchemeHandler.swift +209 -0
  388. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeShell.swift +161 -0
  389. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeSpec.swift +143 -0
  390. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeUpdates.swift +270 -0
  391. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeVectors.swift +155 -0
  392. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeViewController.swift +371 -0
  393. package/vendor/@akanjs/native/packages/cli/src/api.ts +600 -0
  394. package/vendor/@akanjs/native/packages/cli/src/commands/build.ts +101 -0
  395. package/vendor/@akanjs/native/packages/cli/src/commands/compat.ts +53 -0
  396. package/vendor/@akanjs/native/packages/cli/src/commands/dev.ts +249 -0
  397. package/vendor/@akanjs/native/packages/cli/src/commands/doctor.ts +536 -0
  398. package/vendor/@akanjs/native/packages/cli/src/commands/plugin.ts +164 -0
  399. package/vendor/@akanjs/native/packages/cli/src/commands/signing.ts +32 -0
  400. package/vendor/@akanjs/native/packages/cli/src/commands/test.ts +130 -0
  401. package/vendor/@akanjs/native/packages/cli/src/commands/toolchain.ts +143 -0
  402. package/vendor/@akanjs/native/packages/cli/src/commands/update.ts +168 -0
  403. package/vendor/@akanjs/native/packages/cli/src/config.ts +257 -0
  404. package/vendor/@akanjs/native/packages/cli/src/index.ts +77 -0
  405. package/vendor/@akanjs/native/packages/cli/src/lib/acl.ts +420 -0
  406. package/vendor/@akanjs/native/packages/cli/src/lib/apilevel.ts +245 -0
  407. package/vendor/@akanjs/native/packages/cli/src/lib/apk.ts +203 -0
  408. package/vendor/@akanjs/native/packages/cli/src/lib/args.ts +44 -0
  409. package/vendor/@akanjs/native/packages/cli/src/lib/boot.ts +73 -0
  410. package/vendor/@akanjs/native/packages/cli/src/lib/chrome.ts +89 -0
  411. package/vendor/@akanjs/native/packages/cli/src/lib/codegen.ts +1128 -0
  412. package/vendor/@akanjs/native/packages/cli/src/lib/compat.ts +185 -0
  413. package/vendor/@akanjs/native/packages/cli/src/lib/configkeys.ts +91 -0
  414. package/vendor/@akanjs/native/packages/cli/src/lib/csp.ts +198 -0
  415. package/vendor/@akanjs/native/packages/cli/src/lib/env.ts +257 -0
  416. package/vendor/@akanjs/native/packages/cli/src/lib/exec.ts +104 -0
  417. package/vendor/@akanjs/native/packages/cli/src/lib/googleservices.ts +53 -0
  418. package/vendor/@akanjs/native/packages/cli/src/lib/hmr.ts +534 -0
  419. package/vendor/@akanjs/native/packages/cli/src/lib/html.ts +63 -0
  420. package/vendor/@akanjs/native/packages/cli/src/lib/icons.ts +316 -0
  421. package/vendor/@akanjs/native/packages/cli/src/lib/image.ts +175 -0
  422. package/vendor/@akanjs/native/packages/cli/src/lib/iossigning.ts +295 -0
  423. package/vendor/@akanjs/native/packages/cli/src/lib/launch.ts +98 -0
  424. package/vendor/@akanjs/native/packages/cli/src/lib/log.ts +105 -0
  425. package/vendor/@akanjs/native/packages/cli/src/lib/manifestmerge.ts +107 -0
  426. package/vendor/@akanjs/native/packages/cli/src/lib/maven.ts +244 -0
  427. package/vendor/@akanjs/native/packages/cli/src/lib/names.ts +202 -0
  428. package/vendor/@akanjs/native/packages/cli/src/lib/native-plugins.ts +326 -0
  429. package/vendor/@akanjs/native/packages/cli/src/lib/nativeconfig.ts +68 -0
  430. package/vendor/@akanjs/native/packages/cli/src/lib/permissions.ts +80 -0
  431. package/vendor/@akanjs/native/packages/cli/src/lib/plist.ts +139 -0
  432. package/vendor/@akanjs/native/packages/cli/src/lib/png.ts +240 -0
  433. package/vendor/@akanjs/native/packages/cli/src/lib/prepare.ts +290 -0
  434. package/vendor/@akanjs/native/packages/cli/src/lib/privacy.ts +64 -0
  435. package/vendor/@akanjs/native/packages/cli/src/lib/project.ts +710 -0
  436. package/vendor/@akanjs/native/packages/cli/src/lib/root.ts +18 -0
  437. package/vendor/@akanjs/native/packages/cli/src/lib/routes.ts +3 -0
  438. package/vendor/@akanjs/native/packages/cli/src/lib/serve.ts +83 -0
  439. package/vendor/@akanjs/native/packages/cli/src/lib/signing.ts +117 -0
  440. package/vendor/@akanjs/native/packages/cli/src/lib/spec.ts +521 -0
  441. package/vendor/@akanjs/native/packages/cli/src/lib/toolchains.ts +579 -0
  442. package/vendor/@akanjs/native/packages/cli/src/lib/updates.ts +160 -0
  443. package/vendor/@akanjs/native/packages/cli/src/lib/vectors.ts +121 -0
  444. package/vendor/@akanjs/native/packages/cli/src/lib/xml.ts +72 -0
  445. package/vendor/@akanjs/native/packages/cli/src/platforms/android.ts +1320 -0
  446. package/vendor/@akanjs/native/packages/cli/src/platforms/desktop-update.ts +78 -0
  447. package/vendor/@akanjs/native/packages/cli/src/platforms/desktop.ts +279 -0
  448. package/vendor/@akanjs/native/packages/cli/src/platforms/index.ts +31 -0
  449. package/vendor/@akanjs/native/packages/cli/src/platforms/ios.ts +801 -0
  450. package/vendor/@akanjs/native/packages/cli/src/platforms/linux.ts +52 -0
  451. package/vendor/@akanjs/native/packages/cli/src/platforms/macos.ts +97 -0
  452. package/vendor/@akanjs/native/packages/cli/src/platforms/targets.ts +12 -0
  453. package/vendor/@akanjs/native/packages/cli/src/platforms/web-run.ts +69 -0
  454. package/vendor/@akanjs/native/packages/cli/src/platforms/web.ts +28 -0
  455. package/vendor/@akanjs/native/packages/cli/src/platforms/windows.ts +82 -0
  456. package/vendor/@akanjs/native/packages/core/contract.json +96 -0
  457. package/vendor/@akanjs/native/packages/core/src/acl.ts +272 -0
  458. package/vendor/@akanjs/native/packages/core/src/boot.ts +97 -0
  459. package/vendor/@akanjs/native/packages/core/src/contract.ts +100 -0
  460. package/vendor/@akanjs/native/packages/core/src/errors.ts +95 -0
  461. package/vendor/@akanjs/native/packages/core/src/files.ts +105 -0
  462. package/vendor/@akanjs/native/packages/core/src/index.ts +35 -0
  463. package/vendor/@akanjs/native/packages/core/src/kernel.ts +281 -0
  464. package/vendor/@akanjs/native/packages/core/src/live.ts +62 -0
  465. package/vendor/@akanjs/native/packages/core/src/mime.ts +8 -0
  466. package/vendor/@akanjs/native/packages/core/src/plugin.ts +358 -0
  467. package/vendor/@akanjs/native/packages/core/src/protocol.ts +194 -0
  468. package/vendor/@akanjs/native/packages/core/src/runtime.ts +520 -0
  469. package/vendor/@akanjs/native/packages/core/src/state.ts +46 -0
  470. package/vendor/@akanjs/native/packages/core/src/testing.ts +176 -0
  471. package/vendor/@akanjs/native/packages/core/src/version.ts +2 -0
  472. package/vendor/@akanjs/native/packages/core/src/veto.ts +55 -0
  473. package/vendor/@akanjs/native/packages/core/vectors/acl.json +57 -0
  474. package/vendor/@akanjs/native/packages/core/vectors/bridge.json +76 -0
  475. package/vendor/@akanjs/native/packages/core/vectors/ed25519.json +29 -0
  476. package/vendor/@akanjs/native/packages/core/vectors/ids.json +73 -0
  477. package/vendor/@akanjs/native/packages/core/vectors/navigation.json +75 -0
  478. package/vendor/@akanjs/native/packages/core/vectors/ranges.json +39 -0
  479. package/vendor/@akanjs/native/packages/core/vectors/retained.json +17 -0
  480. package/vendor/@akanjs/native/packages/core/vectors/routes.json +66 -0
  481. package/vendor/@akanjs/native/packages/core/vectors/scope.json +143 -0
  482. package/vendor/@akanjs/native/packages/desktop/src/deeplinks.ts +143 -0
  483. package/vendor/@akanjs/native/packages/desktop/src/delta.ts +174 -0
  484. package/vendor/@akanjs/native/packages/desktop/src/dispatcher.ts +679 -0
  485. package/vendor/@akanjs/native/packages/desktop/src/ffi.ts +76 -0
  486. package/vendor/@akanjs/native/packages/desktop/src/host.ts +355 -0
  487. package/vendor/@akanjs/native/packages/desktop/src/lifecycle.ts +142 -0
  488. package/vendor/@akanjs/native/packages/desktop/src/main.ts +133 -0
  489. package/vendor/@akanjs/native/packages/desktop/src/page-veto.ts +103 -0
  490. package/vendor/@akanjs/native/packages/desktop/src/paths.ts +59 -0
  491. package/vendor/@akanjs/native/packages/desktop/src/plugin.ts +232 -0
  492. package/vendor/@akanjs/native/packages/react/src/index.ts +23 -0
  493. package/vendor/@akanjs/native/plugins/accessibility/android/AccessibilityPlugin.kt +96 -0
  494. package/vendor/@akanjs/native/plugins/accessibility/ios/AccessibilityPlugin.swift +92 -0
  495. package/vendor/@akanjs/native/plugins/accessibility/native-plugin.json +21 -0
  496. package/vendor/@akanjs/native/plugins/accessibility/src/announce.ts +71 -0
  497. package/vendor/@akanjs/native/plugins/accessibility/src/index.ts +77 -0
  498. package/vendor/@akanjs/native/plugins/accessibility/src/web.ts +52 -0
  499. package/vendor/@akanjs/native/plugins/app/android/AppPlugin.kt +72 -0
  500. package/vendor/@akanjs/native/plugins/app/ios/AppPlugin.swift +52 -0
  501. package/vendor/@akanjs/native/plugins/app/native-plugin.json +21 -0
  502. package/vendor/@akanjs/native/plugins/app/src/desktop.ts +64 -0
  503. package/vendor/@akanjs/native/plugins/app/src/index.ts +77 -0
  504. package/vendor/@akanjs/native/plugins/app/src/web.ts +12 -0
  505. package/vendor/@akanjs/native/plugins/app-state/android/AppStatePlugin.kt +54 -0
  506. package/vendor/@akanjs/native/plugins/app-state/ios/AppStatePlugin.swift +58 -0
  507. package/vendor/@akanjs/native/plugins/app-state/native-plugin.json +17 -0
  508. package/vendor/@akanjs/native/plugins/app-state/src/index.ts +42 -0
  509. package/vendor/@akanjs/native/plugins/app-state/src/web.ts +33 -0
  510. package/vendor/@akanjs/native/plugins/appearance/android/AppearancePlugin.kt +133 -0
  511. package/vendor/@akanjs/native/plugins/appearance/ios/AppearancePlugin.swift +109 -0
  512. package/vendor/@akanjs/native/plugins/appearance/native-plugin.json +18 -0
  513. package/vendor/@akanjs/native/plugins/appearance/src/desktop.ts +133 -0
  514. package/vendor/@akanjs/native/plugins/appearance/src/index.ts +62 -0
  515. package/vendor/@akanjs/native/plugins/appearance/src/setting.ts +18 -0
  516. package/vendor/@akanjs/native/plugins/appearance/src/web.ts +25 -0
  517. package/vendor/@akanjs/native/plugins/auth-session/android/AuthSessionPlugin.kt +171 -0
  518. package/vendor/@akanjs/native/plugins/auth-session/ios/AuthSessionPlugin.swift +112 -0
  519. package/vendor/@akanjs/native/plugins/auth-session/native-plugin.json +19 -0
  520. package/vendor/@akanjs/native/plugins/auth-session/src/args.ts +62 -0
  521. package/vendor/@akanjs/native/plugins/auth-session/src/desktop.ts +133 -0
  522. package/vendor/@akanjs/native/plugins/auth-session/src/index.ts +39 -0
  523. package/vendor/@akanjs/native/plugins/autostart/native-plugin.json +10 -0
  524. package/vendor/@akanjs/native/plugins/autostart/src/desktop.ts +189 -0
  525. package/vendor/@akanjs/native/plugins/autostart/src/index.ts +51 -0
  526. package/vendor/@akanjs/native/plugins/badge/ios/BadgePlugin.swift +92 -0
  527. package/vendor/@akanjs/native/plugins/badge/native-plugin.json +15 -0
  528. package/vendor/@akanjs/native/plugins/badge/src/count.ts +12 -0
  529. package/vendor/@akanjs/native/plugins/badge/src/desktop.ts +24 -0
  530. package/vendor/@akanjs/native/plugins/badge/src/index.ts +40 -0
  531. package/vendor/@akanjs/native/plugins/badge/src/web.ts +37 -0
  532. package/vendor/@akanjs/native/plugins/biometric/android/BiometricPlugin.kt +179 -0
  533. package/vendor/@akanjs/native/plugins/biometric/ios/BiometricPlugin.swift +129 -0
  534. package/vendor/@akanjs/native/plugins/biometric/native-plugin.json +22 -0
  535. package/vendor/@akanjs/native/plugins/biometric/src/index.ts +100 -0
  536. package/vendor/@akanjs/native/plugins/browser/android/BrowserPlugin.kt +178 -0
  537. package/vendor/@akanjs/native/plugins/browser/ios/BrowserPlugin.swift +63 -0
  538. package/vendor/@akanjs/native/plugins/browser/native-plugin.json +22 -0
  539. package/vendor/@akanjs/native/plugins/browser/src/args.ts +34 -0
  540. package/vendor/@akanjs/native/plugins/browser/src/desktop.ts +40 -0
  541. package/vendor/@akanjs/native/plugins/browser/src/index.ts +47 -0
  542. package/vendor/@akanjs/native/plugins/browser/src/web.ts +60 -0
  543. package/vendor/@akanjs/native/plugins/camera/android/CameraPlugin.kt +365 -0
  544. package/vendor/@akanjs/native/plugins/camera/ios/CameraPlugin.swift +296 -0
  545. package/vendor/@akanjs/native/plugins/camera/native-plugin.json +32 -0
  546. package/vendor/@akanjs/native/plugins/camera/src/desktop.ts +27 -0
  547. package/vendor/@akanjs/native/plugins/camera/src/index.ts +85 -0
  548. package/vendor/@akanjs/native/plugins/camera/src/web.ts +267 -0
  549. package/vendor/@akanjs/native/plugins/clipboard/android/ClipboardPlugin.kt +51 -0
  550. package/vendor/@akanjs/native/plugins/clipboard/ios/ClipboardPlugin.swift +35 -0
  551. package/vendor/@akanjs/native/plugins/clipboard/native-plugin.json +17 -0
  552. package/vendor/@akanjs/native/plugins/clipboard/src/desktop.ts +66 -0
  553. package/vendor/@akanjs/native/plugins/clipboard/src/index.ts +72 -0
  554. package/vendor/@akanjs/native/plugins/clipboard/src/web.ts +69 -0
  555. package/vendor/@akanjs/native/plugins/device/android/DevicePlugin.kt +70 -0
  556. package/vendor/@akanjs/native/plugins/device/ios/DevicePlugin.swift +80 -0
  557. package/vendor/@akanjs/native/plugins/device/native-plugin.json +18 -0
  558. package/vendor/@akanjs/native/plugins/device/src/desktop.ts +276 -0
  559. package/vendor/@akanjs/native/plugins/device/src/index.ts +72 -0
  560. package/vendor/@akanjs/native/plugins/device/src/web.ts +162 -0
  561. package/vendor/@akanjs/native/plugins/dialog/android/DialogPlugin.kt +260 -0
  562. package/vendor/@akanjs/native/plugins/dialog/ios/DialogPlugin.swift +198 -0
  563. package/vendor/@akanjs/native/plugins/dialog/native-plugin.json +18 -0
  564. package/vendor/@akanjs/native/plugins/dialog/src/desktop.ts +80 -0
  565. package/vendor/@akanjs/native/plugins/dialog/src/index.ts +87 -0
  566. package/vendor/@akanjs/native/plugins/dialog/src/options.ts +111 -0
  567. package/vendor/@akanjs/native/plugins/dialog/src/web.ts +296 -0
  568. package/vendor/@akanjs/native/plugins/dock/native-plugin.json +10 -0
  569. package/vendor/@akanjs/native/plugins/dock/src/desktop.ts +34 -0
  570. package/vendor/@akanjs/native/plugins/dock/src/index.ts +46 -0
  571. package/vendor/@akanjs/native/plugins/file-picker/android/FilePickerPlugin.kt +316 -0
  572. package/vendor/@akanjs/native/plugins/file-picker/ios/FilePickerPlugin.swift +366 -0
  573. package/vendor/@akanjs/native/plugins/file-picker/native-plugin.json +18 -0
  574. package/vendor/@akanjs/native/plugins/file-picker/src/common.ts +125 -0
  575. package/vendor/@akanjs/native/plugins/file-picker/src/desktop.ts +164 -0
  576. package/vendor/@akanjs/native/plugins/file-picker/src/index.ts +187 -0
  577. package/vendor/@akanjs/native/plugins/file-picker/src/web.ts +158 -0
  578. package/vendor/@akanjs/native/plugins/filesystem/android/FilesystemPlugin.kt +561 -0
  579. package/vendor/@akanjs/native/plugins/filesystem/ios/FilesystemPlugin.swift +596 -0
  580. package/vendor/@akanjs/native/plugins/filesystem/native-plugin.json +45 -0
  581. package/vendor/@akanjs/native/plugins/filesystem/src/common.ts +150 -0
  582. package/vendor/@akanjs/native/plugins/filesystem/src/desktop.ts +438 -0
  583. package/vendor/@akanjs/native/plugins/filesystem/src/index.ts +179 -0
  584. package/vendor/@akanjs/native/plugins/filesystem/src/web.ts +334 -0
  585. package/vendor/@akanjs/native/plugins/geolocation/android/GeolocationPlugin.kt +360 -0
  586. package/vendor/@akanjs/native/plugins/geolocation/ios/GeolocationPlugin.swift +284 -0
  587. package/vendor/@akanjs/native/plugins/geolocation/native-plugin.json +23 -0
  588. package/vendor/@akanjs/native/plugins/geolocation/src/index.ts +155 -0
  589. package/vendor/@akanjs/native/plugins/geolocation/src/web.ts +132 -0
  590. package/vendor/@akanjs/native/plugins/global-shortcut/native-plugin.json +10 -0
  591. package/vendor/@akanjs/native/plugins/global-shortcut/src/desktop.ts +36 -0
  592. package/vendor/@akanjs/native/plugins/global-shortcut/src/index.ts +55 -0
  593. package/vendor/@akanjs/native/plugins/haptics/android/HapticsPlugin.kt +127 -0
  594. package/vendor/@akanjs/native/plugins/haptics/ios/HapticsPlugin.swift +127 -0
  595. package/vendor/@akanjs/native/plugins/haptics/native-plugin.json +19 -0
  596. package/vendor/@akanjs/native/plugins/haptics/src/index.ts +34 -0
  597. package/vendor/@akanjs/native/plugins/haptics/src/web.ts +53 -0
  598. package/vendor/@akanjs/native/plugins/http/android/HttpPlugin.kt +234 -0
  599. package/vendor/@akanjs/native/plugins/http/android/HttpUrl.kt +182 -0
  600. package/vendor/@akanjs/native/plugins/http/ios/HttpPlugin.swift +228 -0
  601. package/vendor/@akanjs/native/plugins/http/ios/HttpUrl.swift +166 -0
  602. package/vendor/@akanjs/native/plugins/http/native-plugin.json +27 -0
  603. package/vendor/@akanjs/native/plugins/http/src/common.ts +294 -0
  604. package/vendor/@akanjs/native/plugins/http/src/desktop.ts +69 -0
  605. package/vendor/@akanjs/native/plugins/http/src/index.ts +181 -0
  606. package/vendor/@akanjs/native/plugins/http/src/web.ts +40 -0
  607. package/vendor/@akanjs/native/plugins/iap/android/IapPlugin.kt +358 -0
  608. package/vendor/@akanjs/native/plugins/iap/ios/IapPlugin.swift +306 -0
  609. package/vendor/@akanjs/native/plugins/iap/native-plugin.json +28 -0
  610. package/vendor/@akanjs/native/plugins/iap/src/index.ts +206 -0
  611. package/vendor/@akanjs/native/plugins/keep-awake/android/KeepAwakePlugin.kt +48 -0
  612. package/vendor/@akanjs/native/plugins/keep-awake/ios/KeepAwakePlugin.swift +36 -0
  613. package/vendor/@akanjs/native/plugins/keep-awake/native-plugin.json +17 -0
  614. package/vendor/@akanjs/native/plugins/keep-awake/src/desktop.ts +127 -0
  615. package/vendor/@akanjs/native/plugins/keep-awake/src/index.ts +79 -0
  616. package/vendor/@akanjs/native/plugins/keep-awake/src/web.ts +78 -0
  617. package/vendor/@akanjs/native/plugins/keyboard/android/KeyboardPlugin.kt +77 -0
  618. package/vendor/@akanjs/native/plugins/keyboard/ios/KeyboardPlugin.swift +93 -0
  619. package/vendor/@akanjs/native/plugins/keyboard/native-plugin.json +18 -0
  620. package/vendor/@akanjs/native/plugins/keyboard/src/index.ts +78 -0
  621. package/vendor/@akanjs/native/plugins/keyboard/src/web.ts +57 -0
  622. package/vendor/@akanjs/native/plugins/local-notifications/android/LocalNotificationReceiver.kt +38 -0
  623. package/vendor/@akanjs/native/plugins/local-notifications/android/LocalNotifications.kt +284 -0
  624. package/vendor/@akanjs/native/plugins/local-notifications/android/LocalNotificationsPlugin.kt +248 -0
  625. package/vendor/@akanjs/native/plugins/local-notifications/ios/LocalNotificationsPlugin.swift +279 -0
  626. package/vendor/@akanjs/native/plugins/local-notifications/native-plugin.json +35 -0
  627. package/vendor/@akanjs/native/plugins/local-notifications/src/desktop.ts +196 -0
  628. package/vendor/@akanjs/native/plugins/local-notifications/src/index.ts +174 -0
  629. package/vendor/@akanjs/native/plugins/local-notifications/src/schedule.ts +164 -0
  630. package/vendor/@akanjs/native/plugins/local-notifications/src/timers.ts +72 -0
  631. package/vendor/@akanjs/native/plugins/local-notifications/src/web.ts +158 -0
  632. package/vendor/@akanjs/native/plugins/menu/native-plugin.json +10 -0
  633. package/vendor/@akanjs/native/plugins/menu/src/desktop.ts +52 -0
  634. package/vendor/@akanjs/native/plugins/menu/src/index.ts +107 -0
  635. package/vendor/@akanjs/native/plugins/network/android/NetworkPlugin.kt +124 -0
  636. package/vendor/@akanjs/native/plugins/network/ios/NetworkPlugin.swift +82 -0
  637. package/vendor/@akanjs/native/plugins/network/native-plugin.json +19 -0
  638. package/vendor/@akanjs/native/plugins/network/src/index.ts +59 -0
  639. package/vendor/@akanjs/native/plugins/network/src/web.ts +43 -0
  640. package/vendor/@akanjs/native/plugins/opener/android/OpenerPlugin.kt +81 -0
  641. package/vendor/@akanjs/native/plugins/opener/ios/OpenerPlugin.swift +83 -0
  642. package/vendor/@akanjs/native/plugins/opener/native-plugin.json +25 -0
  643. package/vendor/@akanjs/native/plugins/opener/src/desktop.ts +88 -0
  644. package/vendor/@akanjs/native/plugins/opener/src/index.ts +35 -0
  645. package/vendor/@akanjs/native/plugins/opener/src/url.ts +39 -0
  646. package/vendor/@akanjs/native/plugins/opener/src/web.ts +33 -0
  647. package/vendor/@akanjs/native/plugins/preferences/android/PreferencesPlugin.kt +44 -0
  648. package/vendor/@akanjs/native/plugins/preferences/ios/PreferencesPlugin.swift +47 -0
  649. package/vendor/@akanjs/native/plugins/preferences/native-plugin.json +18 -0
  650. package/vendor/@akanjs/native/plugins/preferences/src/desktop.ts +59 -0
  651. package/vendor/@akanjs/native/plugins/preferences/src/index.ts +75 -0
  652. package/vendor/@akanjs/native/plugins/preferences/src/web.ts +55 -0
  653. package/vendor/@akanjs/native/plugins/push/android/AkanNativeMessagingService.kt +17 -0
  654. package/vendor/@akanjs/native/plugins/push/android/PushPlugin.kt +257 -0
  655. package/vendor/@akanjs/native/plugins/push/ios/PushPlugin.swift +169 -0
  656. package/vendor/@akanjs/native/plugins/push/native-plugin.json +23 -0
  657. package/vendor/@akanjs/native/plugins/push/src/index.ts +73 -0
  658. package/vendor/@akanjs/native/plugins/screen/native-plugin.json +10 -0
  659. package/vendor/@akanjs/native/plugins/screen/src/desktop.ts +50 -0
  660. package/vendor/@akanjs/native/plugins/screen/src/index.ts +107 -0
  661. package/vendor/@akanjs/native/plugins/screen/src/web.ts +92 -0
  662. package/vendor/@akanjs/native/plugins/screen-orientation/android/ScreenOrientationPlugin.kt +113 -0
  663. package/vendor/@akanjs/native/plugins/screen-orientation/ios/ScreenOrientationPlugin.swift +150 -0
  664. package/vendor/@akanjs/native/plugins/screen-orientation/native-plugin.json +17 -0
  665. package/vendor/@akanjs/native/plugins/screen-orientation/src/index.ts +69 -0
  666. package/vendor/@akanjs/native/plugins/screen-orientation/src/types.ts +26 -0
  667. package/vendor/@akanjs/native/plugins/screen-orientation/src/web.ts +67 -0
  668. package/vendor/@akanjs/native/plugins/secure-storage/android/SecureStoragePlugin.kt +184 -0
  669. package/vendor/@akanjs/native/plugins/secure-storage/ios/SecureStoragePlugin.swift +145 -0
  670. package/vendor/@akanjs/native/plugins/secure-storage/native-plugin.json +18 -0
  671. package/vendor/@akanjs/native/plugins/secure-storage/src/desktop.ts +332 -0
  672. package/vendor/@akanjs/native/plugins/secure-storage/src/index.ts +33 -0
  673. package/vendor/@akanjs/native/plugins/share/android/SharePlugin.kt +218 -0
  674. package/vendor/@akanjs/native/plugins/share/ios/SharePlugin.swift +142 -0
  675. package/vendor/@akanjs/native/plugins/share/native-plugin.json +18 -0
  676. package/vendor/@akanjs/native/plugins/share/src/index.ts +87 -0
  677. package/vendor/@akanjs/native/plugins/share/src/options.ts +43 -0
  678. package/vendor/@akanjs/native/plugins/share/src/web.ts +116 -0
  679. package/vendor/@akanjs/native/plugins/single-instance/native-plugin.json +10 -0
  680. package/vendor/@akanjs/native/plugins/single-instance/src/desktop.ts +63 -0
  681. package/vendor/@akanjs/native/plugins/single-instance/src/index.ts +32 -0
  682. package/vendor/@akanjs/native/plugins/single-instance/src/socket.ts +248 -0
  683. package/vendor/@akanjs/native/plugins/splash-screen/android/SplashScreenPlugin.kt +19 -0
  684. package/vendor/@akanjs/native/plugins/splash-screen/ios/SplashScreenPlugin.swift +20 -0
  685. package/vendor/@akanjs/native/plugins/splash-screen/native-plugin.json +17 -0
  686. package/vendor/@akanjs/native/plugins/splash-screen/src/index.ts +24 -0
  687. package/vendor/@akanjs/native/plugins/splash-screen/src/web.ts +17 -0
  688. package/vendor/@akanjs/native/plugins/sqlite/android/SqlStatements.kt +121 -0
  689. package/vendor/@akanjs/native/plugins/sqlite/android/SqlitePlugin.kt +327 -0
  690. package/vendor/@akanjs/native/plugins/sqlite/ios/SqlitePlugin.swift +361 -0
  691. package/vendor/@akanjs/native/plugins/sqlite/native-plugin.json +18 -0
  692. package/vendor/@akanjs/native/plugins/sqlite/src/common.ts +221 -0
  693. package/vendor/@akanjs/native/plugins/sqlite/src/desktop.ts +140 -0
  694. package/vendor/@akanjs/native/plugins/sqlite/src/index.ts +114 -0
  695. package/vendor/@akanjs/native/plugins/toast/android/ToastPlugin.kt +27 -0
  696. package/vendor/@akanjs/native/plugins/toast/native-plugin.json +14 -0
  697. package/vendor/@akanjs/native/plugins/toast/src/index.ts +41 -0
  698. package/vendor/@akanjs/native/plugins/toast/src/queue.ts +77 -0
  699. package/vendor/@akanjs/native/plugins/toast/src/web.ts +130 -0
  700. package/vendor/@akanjs/native/plugins/tray/native-plugin.json +10 -0
  701. package/vendor/@akanjs/native/plugins/tray/src/desktop.ts +73 -0
  702. package/vendor/@akanjs/native/plugins/tray/src/index.ts +111 -0
  703. package/vendor/@akanjs/native/plugins/updates/android/UpdatesPlugin.kt +290 -0
  704. package/vendor/@akanjs/native/plugins/updates/ios/UpdatesPlugin.swift +292 -0
  705. package/vendor/@akanjs/native/plugins/updates/native-plugin.json +19 -0
  706. package/vendor/@akanjs/native/plugins/updates/src/desktop.ts +558 -0
  707. package/vendor/@akanjs/native/plugins/updates/src/index.ts +95 -0
  708. package/vendor/@akanjs/native/plugins/window/native-plugin.json +32 -0
  709. package/vendor/@akanjs/native/plugins/window/src/desktop.ts +170 -0
  710. package/vendor/@akanjs/native/plugins/window/src/index.ts +342 -0
  711. package/vendor/@akanjs/native/plugins/window/src/web.ts +43 -0
  712. package/vendor/@akanjs/native/plugins/window-state/native-plugin.json +10 -0
  713. package/vendor/@akanjs/native/plugins/window-state/src/desktop.ts +73 -0
  714. package/vendor/@akanjs/native/plugins/window-state/src/index.ts +35 -0
  715. package/vendor/@akanjs/native/plugins/window-state/src/state.ts +146 -0
  716. package/webkit/bootCsr.tsx +26 -14
  717. package/webkit/index.ts +0 -2
  718. package/webkit/nativeNavigation.ts +116 -0
  719. package/webkit/nativePurchase.ts +93 -0
  720. package/webkit/useCamera.tsx +76 -71
  721. package/webkit/useCsrValues.ts +10 -124
  722. package/webkit/useGeoLocation.tsx +11 -13
  723. package/webkit/usePurchase.tsx +68 -123
  724. package/capacitor.base.config.ts +0 -140
  725. package/client/capacitor.ts +0 -252
  726. package/types/capacitor.base.config.d.ts +0 -3
  727. package/types/client/capacitor.d.ts +0 -290
  728. package/types/webkit/useCodepush.d.ts +0 -16
  729. package/types/webkit/useContact.d.ts +0 -11
  730. package/webkit/useCodepush.tsx +0 -76
  731. package/webkit/useContact.tsx +0 -45
@@ -0,0 +1,55 @@
1
+ import { AkanNativeError, defineWebPlugin } from "../../../packages/core/src/index.ts";
2
+ import type { PreferencesApi } from "./index.ts";
3
+
4
+ const PREFIX = "akan-native.preferences.";
5
+
6
+ function storage(): Storage {
7
+ try {
8
+ return window.localStorage;
9
+ } catch (error) {
10
+
11
+ throw new AkanNativeError("UNSUPPORTED", "localStorage is not available", { cause: error });
12
+ }
13
+ }
14
+
15
+ function checkKey(key: unknown): string {
16
+ if (typeof key !== "string" || key.length === 0)
17
+ throw new AkanNativeError("INVALID_ARGS", "key must be a non-empty string");
18
+ return key;
19
+ }
20
+
21
+ function ownKeys(store: Storage): string[] {
22
+ const keys: string[] = [];
23
+ for (let i = 0; i < store.length; i++) {
24
+ const key = store.key(i);
25
+ if (key?.startsWith(PREFIX)) keys.push(key);
26
+ }
27
+ return keys;
28
+ }
29
+
30
+ export const web = defineWebPlugin<PreferencesApi>({
31
+ methods: {
32
+ async get(args) {
33
+ return { value: storage().getItem(PREFIX + checkKey(args?.key)) };
34
+ },
35
+ async set(args) {
36
+ const key = checkKey(args?.key);
37
+ if (typeof args.value !== "string") throw new AkanNativeError("INVALID_ARGS", "value must be a string");
38
+ try {
39
+ storage().setItem(PREFIX + key, args.value);
40
+ } catch (error) {
41
+ throw new AkanNativeError("INTERNAL", `could not store ${key}: ${String(error)}`, { cause: error });
42
+ }
43
+ },
44
+ async remove(args) {
45
+ storage().removeItem(PREFIX + checkKey(args?.key));
46
+ },
47
+ async keys() {
48
+ return { keys: ownKeys(storage()).map((k) => k.slice(PREFIX.length)) };
49
+ },
50
+ async clear() {
51
+ const store = storage();
52
+ for (const key of ownKeys(store)) store.removeItem(key);
53
+ },
54
+ },
55
+ });
@@ -0,0 +1,17 @@
1
+ package com.akanjs.plugins.push
2
+
3
+ import com.google.firebase.messaging.FirebaseMessagingService
4
+ import com.google.firebase.messaging.RemoteMessage
5
+
6
+ /**
7
+ * FCM's entry point for this app (declared in the push plugin's manifest; the library's own service has
8
+ * a lower priority). Firebase calls it on its own thread, also when no activity runs; the plugin gets
9
+ * the token and the messages when it exists (PushPlugin.Router).
10
+ */
11
+ class AkanNativeMessagingService : FirebaseMessagingService() {
12
+ @Suppress("OVERRIDE_DEPRECATION")
13
+ override fun onNewToken(token: String) = PushPlugin.Router.token(token)
14
+
15
+ /** Data messages always; notification messages only while the app is in front (Firebase shows them otherwise). */
16
+ override fun onMessageReceived(message: RemoteMessage) = PushPlugin.Router.message(this, message)
17
+ }
@@ -0,0 +1,257 @@
1
+ package com.akanjs.plugins.push
2
+
3
+ import android.Manifest
4
+ import android.app.NotificationChannel
5
+ import android.app.NotificationManager
6
+ import android.app.PendingIntent
7
+ import android.content.Context
8
+ import android.content.Intent
9
+ import android.content.pm.PackageManager
10
+ import android.os.Build
11
+ import android.os.Bundle
12
+ import android.os.Handler
13
+ import android.os.Looper
14
+ import android.util.Log
15
+ import com.google.firebase.FirebaseApp
16
+ import com.google.firebase.messaging.FirebaseMessaging
17
+ import com.google.firebase.messaging.RemoteMessage
18
+ import com.akanjs.runtime.AkanNativeErrorCode
19
+ import com.akanjs.runtime.AkanNativePermission
20
+ import com.akanjs.runtime.AkanNativePluginContext
21
+ import com.akanjs.runtime.AkanNativeReply
22
+ import com.akanjs.runtime.AkanNativeVoidReply
23
+ import java.lang.ref.WeakReference
24
+
25
+ /**
26
+ * Remote notifications through Firebase Cloud Messaging (akanjs readiness O6-2), the opt-in module:
27
+ * its closure (native/android/maven.lock.json) goes only into apps with this plugin, and the app's
28
+ * google-services.json becomes the string resources Firebase initializes from (android.googleServices).
29
+ * - register(): FirebaseMessaging.token; AkanNativeMessagingService.onNewToken reports later changes.
30
+ * - A notification message is shown by Firebase while the app is in the background; its tap starts
31
+ * the activity with the message in the intent extras (google.message_id), which is an "action"
32
+ * (capacitor-plugins-next PushNotificationsPlugin.java handleOnNewIntent). The launch tap waits for
33
+ * the first listener (C2).
34
+ * - In front, onMessageReceived gets every message: "received", and with setForegroundPresentation a
35
+ * notification of our own whose tap works the same way.
36
+ * - POST_NOTIFICATIONS is asked for on Android 13+; before, notifications are allowed unless turned off.
37
+ */
38
+ class PushPlugin(private val context: AkanNativePluginContext) : PushPluginSpec {
39
+ private val app = context.activity.applicationContext
40
+ private val events = PushEvents(context)
41
+ private val manager = app.getSystemService(NotificationManager::class.java)
42
+ private val listening = HashSet<String>()
43
+
44
+ /** push.android from the app config (N13), as the build put it into the manifest's meta-data. */
45
+ @Suppress("DEPRECATION") // getApplicationInfo(String, ApplicationInfoFlags) is API 33+
46
+ private val meta: Bundle = try {
47
+ app.packageManager.getApplicationInfo(app.packageName, PackageManager.GET_META_DATA).metaData ?: Bundle()
48
+ } catch (e: PackageManager.NameNotFoundException) {
49
+ Bundle()
50
+ }
51
+ private val channelId: String = meta.getString("com.google.firebase.messaging.default_notification_channel_id") ?: CHANNEL
52
+ private val smallIcon: Int = meta.getInt("com.google.firebase.messaging.default_notification_icon").takeIf { it != 0 }
53
+ ?: app.applicationInfo.icon.takeIf { it != 0 } ?: android.R.drawable.ic_dialog_info
54
+ private val color: Int? = meta.getInt("com.google.firebase.messaging.default_notification_color").takeIf { it != 0 }?.let { runCatching { app.getColor(it) }.getOrNull() }
55
+
56
+ init {
57
+ Router.plugin = WeakReference(this)
58
+ tapOf(context.activity.intent)?.let(Router.pendingActions::add)
59
+ createConfiguredChannel()
60
+ }
61
+
62
+ /**
63
+ * The app's channel, made at startup: Firebase posts background notifications into the default
64
+ * channel only when it exists (else into its own "Miscellaneous" one). Settings users changed stay.
65
+ */
66
+ private fun createConfiguredChannel() {
67
+ val name = meta.getString("com.akanjs.push.channel_name") ?: return
68
+ val importance = when (meta.getString("com.akanjs.push.channel_importance")) {
69
+ "min" -> NotificationManager.IMPORTANCE_MIN
70
+ "low" -> NotificationManager.IMPORTANCE_LOW
71
+ "high" -> NotificationManager.IMPORTANCE_HIGH
72
+ else -> NotificationManager.IMPORTANCE_DEFAULT
73
+ }
74
+ val channel = NotificationChannel(channelId, name, importance)
75
+ meta.getString("com.akanjs.push.channel_description")?.let { channel.description = it }
76
+ manager.createNotificationChannel(channel) // renames an existing one; its importance stays the user's
77
+ }
78
+
79
+ override fun destroy() {
80
+ if (Router.plugin?.get() === this) Router.plugin = null
81
+ }
82
+
83
+ // ------------------------------------------------------------ permission
84
+
85
+ override fun checkPermission(reply: AkanNativeReply<PushCheckPermissionResult>) = reply.resolve(PushCheckPermissionResult(display = display()))
86
+
87
+ override fun requestPermission(reply: AkanNativeReply<PushRequestPermissionResult>) {
88
+ val state = display()
89
+ if (Build.VERSION.SDK_INT < 33 || state == PushPermissionState.GRANTED || state == PushPermissionState.DENIED) {
90
+ return reply.resolve(PushRequestPermissionResult(display = state))
91
+ }
92
+ context.requestPermissions(arrayOf(Manifest.permission.POST_NOTIFICATIONS)) { reply.resolve(PushRequestPermissionResult(display = display())) }
93
+ }
94
+
95
+ private fun display(): PushPermissionState {
96
+ if (manager.areNotificationsEnabled()) return PushPermissionState.GRANTED
97
+ if (Build.VERSION.SDK_INT < 33) return PushPermissionState.DENIED // turned off in the settings
98
+ val state = context.permissionState(Manifest.permission.POST_NOTIFICATIONS)
99
+ if (state == AkanNativePermission.GRANTED) return PushPermissionState.DENIED
100
+ return PushPermissionState.entries.first { it.json == state }
101
+ }
102
+
103
+ // ------------------------------------------------------------ registration
104
+
105
+ private fun messaging(reply: AkanNativeReply<*>): FirebaseMessaging? {
106
+ if (FirebaseApp.getApps(app).isEmpty()) {
107
+ reply.reject(AkanNativeErrorCode.UNSUPPORTED, "Firebase is not set up: add the Firebase project's google-services.json as android.googleServices in akan-native.config")
108
+ return null
109
+ }
110
+ return FirebaseMessaging.getInstance()
111
+ }
112
+
113
+ override fun register(reply: AkanNativeReply<PushToken>) {
114
+ val messaging = messaging(reply) ?: return
115
+ messaging.isAutoInitEnabled = true
116
+ @Suppress("DEPRECATION") // the Task API; the suspending one is in kotlinx-coroutines-play-services
117
+ messaging.token.addOnCompleteListener { task ->
118
+ // task.result throws when the task failed (an invalid API key is an IllegalArgumentException).
119
+ val token = if (task.isSuccessful) task.result else null
120
+ if (token == null) {
121
+ val error = task.exception
122
+ // A bad google-services.json or a device without Play services cannot register at all;
123
+ // anything else (SERVICE_NOT_AVAILABLE: offline, throttled) may work later.
124
+ val permanent = error is IllegalArgumentException || error?.message?.contains("MISSING_INSTANCEID_SERVICE") == true
125
+ return@addOnCompleteListener reply.reject(if (permanent) AkanNativeErrorCode.UNSUPPORTED else AkanNativeErrorCode.INTERNAL, "FCM registration failed: ${error?.message ?: "no token"}")
126
+ }
127
+ Router.lastToken = token
128
+ reply.resolve(PushToken(token = token, provider = PushProvider.FCM, platform = PushTokenPlatform.ANDROID))
129
+ }
130
+ }
131
+
132
+ override fun unregister(reply: AkanNativeVoidReply) {
133
+ val messaging = messaging(reply) ?: return
134
+ messaging.isAutoInitEnabled = false
135
+ @Suppress("DEPRECATION")
136
+ messaging.deleteToken().addOnCompleteListener { task ->
137
+ Router.lastToken = null
138
+ if (task.isSuccessful) reply.resolve() else reply.reject(AkanNativeErrorCode.INTERNAL, task.exception?.message ?: "deleteToken failed")
139
+ }
140
+ }
141
+
142
+ override fun setForegroundPresentation(args: PushPresentation, reply: AkanNativeVoidReply) {
143
+ Router.showInFront = args.banner == true || args.list == true
144
+ Router.soundInFront = args.sound == true
145
+ reply.resolve()
146
+ }
147
+
148
+ // ------------------------------------------------------------ events
149
+
150
+ override fun onNewIntent(intent: Intent) {
151
+ val action = tapOf(intent) ?: return
152
+ if ("action" in listening) events.action(action) else Router.pendingActions.add(action)
153
+ }
154
+
155
+ override fun startListening(event: String) {
156
+ listening.add(event)
157
+ if (event == "action") {
158
+ for (action in Router.pendingActions) events.action(action)
159
+ Router.pendingActions.clear()
160
+ }
161
+ // A token that changed while no page listened goes to the first listener (C2), the latest only.
162
+ if (event == "token") Router.pendingToken?.let { Router.pendingToken = null; tokenChanged(it) }
163
+ }
164
+
165
+ override fun stopListening(event: String) {
166
+ listening.remove(event)
167
+ }
168
+
169
+ private fun tokenChanged(token: String) {
170
+ if ("token" in listening) events.token(PushToken(token = token, provider = PushProvider.FCM, platform = PushTokenPlatform.ANDROID))
171
+ else Router.pendingToken = token
172
+ }
173
+
174
+ private fun received(message: RemoteMessage) {
175
+ val notification = message.notification
176
+ if ("received" in listening) events.received(PushMessage(id = message.messageId, title = notification?.title, body = notification?.body, data = message.data))
177
+ if (notification != null && Router.showInFront) showInFront(message, notification)
178
+ }
179
+
180
+ /** A notification for a message that arrived in front, when the page asked for one; its tap is an "action". */
181
+ private fun showInFront(message: RemoteMessage, notification: RemoteMessage.Notification) {
182
+ val channel = notification.channelId ?: channelId
183
+ if (manager.getNotificationChannel(channel) == null) {
184
+ manager.createNotificationChannel(NotificationChannel(channel, "Notifications", if (Router.soundInFront) NotificationManager.IMPORTANCE_DEFAULT else NotificationManager.IMPORTANCE_LOW))
185
+ }
186
+ val tap = app.packageManager.getLaunchIntentForPackage(app.packageName)?.apply {
187
+ addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
188
+ putExtra(MESSAGE_ID, message.messageId ?: "")
189
+ for ((key, value) in message.data) putExtra(key, value)
190
+ notification.title?.let { putExtra(TITLE, it) }
191
+ notification.body?.let { putExtra(BODY, it) }
192
+ } ?: return
193
+ val pending = PendingIntent.getActivity(app, (message.messageId ?: "").hashCode(), tap, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
194
+ val builder = android.app.Notification.Builder(app, channel)
195
+ .setContentTitle(notification.title)
196
+ .setContentText(notification.body)
197
+ .setSmallIcon(smallIcon)
198
+ .setAutoCancel(true)
199
+ .setContentIntent(pending)
200
+ color?.let(builder::setColor)
201
+ val built = builder.build()
202
+ try {
203
+ manager.notify((message.messageId ?: System.currentTimeMillis().toString()).hashCode(), built)
204
+ } catch (e: SecurityException) { // POST_NOTIFICATIONS was taken back
205
+ Log.w("AkanNative", "push: cannot show a notification", e)
206
+ }
207
+ }
208
+
209
+ /** The message a notification tap carries in the activity's intent, or null. */
210
+ private fun tapOf(intent: Intent?): PushAction? {
211
+ val extras: Bundle = intent?.extras ?: return null
212
+ if (!extras.containsKey(MESSAGE_ID)) return null
213
+ val data = HashMap<String, Any>()
214
+ for (key in extras.keySet()) {
215
+ if (key == MESSAGE_ID || key == TITLE || key == BODY || key.startsWith("google.") || key.startsWith("gcm.") || key == "from" || key == "collapse_key") continue
216
+ @Suppress("DEPRECATION") val value = extras.get(key) ?: continue
217
+ data[key] = value as? String ?: value.toString()
218
+ }
219
+ val message = PushMessage(id = extras.getString(MESSAGE_ID), title = extras.getString(TITLE), body = extras.getString(BODY), data = data)
220
+ intent.removeExtra(MESSAGE_ID) // an activity made again from the same intent brings no second tap
221
+ return PushAction(actionId = "tap", message = message)
222
+ }
223
+
224
+ /** What the FCM service and the plugin share: the service runs without an activity. Main thread. */
225
+ object Router {
226
+ var plugin: WeakReference<PushPlugin>? = null
227
+ /** Taps before the page listened (C2), the process's. */
228
+ val pendingActions = ArrayList<PushAction>()
229
+ var lastToken: String? = null
230
+ /** A token change no page heard yet (delivered on the first "token" listener). */
231
+ var pendingToken: String? = null
232
+ var showInFront = false
233
+ var soundInFront = false
234
+ private val main = Handler(Looper.getMainLooper())
235
+
236
+ fun token(token: String) {
237
+ main.post {
238
+ if (token != lastToken) plugin?.get()?.tokenChanged(token) ?: run { if (lastToken != null) pendingToken = token }
239
+ lastToken = token
240
+ }
241
+ }
242
+
243
+ fun message(context: Context, message: RemoteMessage) {
244
+ main.post {
245
+ val target = plugin?.get()
246
+ if (target != null) target.received(message) else Log.i("AkanNative", "push: message ${message.messageId} arrived without a page")
247
+ }
248
+ }
249
+ }
250
+
251
+ private companion object {
252
+ const val MESSAGE_ID = "google.message_id"
253
+ const val TITLE = "akan-native.push.title"
254
+ const val BODY = "akan-native.push.body"
255
+ const val CHANNEL = "akan_native_push"
256
+ }
257
+ }
@@ -0,0 +1,169 @@
1
+ import UIKit
2
+ import UserNotifications
3
+
4
+ /// Remote notifications through APNs directly (akanjs readiness O6-2), no Firebase SDK.
5
+ /// - register(): UIApplication.registerForRemoteNotifications; the app delegate hands the result to
6
+ /// AkanNativeRemoteNotifications, and the device token goes to the page as hex (what APNs senders take,
7
+ /// capacitor-plugins-next PushNotificationsPlugin.swift). A later, different token is a "token" event.
8
+ /// - Taps and foreground deliveries come through the shell's notification router (AkanNativeNotifications,
9
+ /// plugins.md C5): a remote notification is one whose trigger is UNPushNotificationTrigger, so the
10
+ /// local-notifications plugin keeps its own. The tap that launched the app waits in the router until
11
+ /// the page listens for "action" (C2).
12
+ /// - Foreground presentation follows setForegroundPresentation (default: not shown, like iOS without a
13
+ /// delegate); the page always gets "received".
14
+ /// - Silent pushes (content-available) reach the page as "received" while it listens.
15
+ /// - aps-environment comes from the manifest ("development"); an iPhone build takes the provisioning
16
+ /// profile's value (ios.ts), so App Store builds say "production".
17
+ final class PushPlugin: PushPluginSpec {
18
+ static let id = "push"
19
+ private let context: AkanNativePluginContext
20
+ private lazy var events = PushEvents(context)
21
+ private var presentation: UNNotificationPresentationOptions = []
22
+ private var waiting: [AkanNativeReply<PushToken>] = []
23
+ private var lastToken: String?
24
+ /// A token change no page heard yet: delivered to the first "token" listener (C2), the latest only.
25
+ private var pendingToken: PushToken?
26
+ private var listening: Set<String> = []
27
+
28
+ init(context: AkanNativePluginContext) {
29
+ self.context = context
30
+ if case .success(let data) = AkanNativeRemoteNotifications.shared.lastRegistration { lastToken = Self.hex(data) }
31
+ AkanNativeRemoteNotifications.shared.listen(owner: context.owner, registration: { [weak self] result in self?.registered(result) }) { [weak self] userInfo in
32
+ guard let self, self.listening.contains("received") else { return false }
33
+ self.events.received(PushMessage(id: nil, title: nil, body: nil, data: Self.data(userInfo)))
34
+ return true
35
+ }
36
+ AkanNativeNotifications.shared.register(Self.id, owner: context.owner, AkanNativeNotifications.Handler(
37
+ claims: { $0.trigger is UNPushNotificationTrigger },
38
+ willPresent: { [weak self] notification in
39
+ guard let self else { return [] }
40
+ self.events.received(Self.message(notification.request))
41
+ return self.presentation
42
+ },
43
+ didReceive: { [weak self] response in
44
+ guard let self, self.listening.contains("action") else { return false }
45
+ let id = response.actionIdentifier
46
+ let actionId = id == UNNotificationDefaultActionIdentifier ? "tap" : id == UNNotificationDismissActionIdentifier ? "dismiss" : id
47
+ self.events.action(PushAction(actionId: actionId, message: Self.message(response.notification.request)))
48
+ return true
49
+ }
50
+ ))
51
+ }
52
+
53
+ // MARK: permission
54
+
55
+ func checkPermission(_ reply: AkanNativeReply<PushCheckPermissionResult>) {
56
+ UNUserNotificationCenter.current().getNotificationSettings { settings in
57
+ let state = Self.state(settings.authorizationStatus)
58
+ DispatchQueue.main.async { reply.resolve(PushCheckPermissionResult(display: state)) }
59
+ }
60
+ }
61
+
62
+ func requestPermission(_ reply: AkanNativeReply<PushRequestPermissionResult>) {
63
+ UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { _, error in
64
+ UNUserNotificationCenter.current().getNotificationSettings { settings in
65
+ let state = Self.state(settings.authorizationStatus)
66
+ DispatchQueue.main.async {
67
+ if let error, state != .granted { return reply.reject(.internalError, error.localizedDescription) }
68
+ reply.resolve(PushRequestPermissionResult(display: state))
69
+ }
70
+ }
71
+ }
72
+ }
73
+
74
+ nonisolated private static func state(_ status: UNAuthorizationStatus) -> PushPermissionState {
75
+ switch status {
76
+ case .authorized, .provisional, .ephemeral: .granted
77
+ case .denied: .denied
78
+ default: .prompt
79
+ }
80
+ }
81
+
82
+ // MARK: registration
83
+
84
+ func register(_ reply: AkanNativeReply<PushToken>) {
85
+ waiting.append(reply)
86
+ // Every call asks again: iOS answers with the current token (and a new one after a restore).
87
+ UIApplication.shared.registerForRemoteNotifications()
88
+ }
89
+
90
+ func unregister(_ reply: AkanNativeReply<Void>) {
91
+ UIApplication.shared.unregisterForRemoteNotifications()
92
+ lastToken = nil
93
+ reply.resolve()
94
+ }
95
+
96
+ private func registered(_ result: Result<Data, any Error>) {
97
+ let replies = waiting
98
+ waiting = []
99
+ switch result {
100
+ case .success(let data):
101
+ let token = PushToken(token: Self.hex(data), provider: .apns, platform: .ios)
102
+ for reply in replies { reply.resolve(token) }
103
+ if let previous = lastToken, previous != token.token {
104
+ if listening.contains("token") { events.token(token) } else { pendingToken = token }
105
+ }
106
+ lastToken = token.token
107
+ case .failure(let error):
108
+ // The simulator and a missing aps-environment entitlement end here.
109
+ for reply in replies { reply.reject(.unsupported, "APNs registration failed: \(error.localizedDescription)") }
110
+ }
111
+ }
112
+
113
+ func setForegroundPresentation(_ args: PushPresentation, _ reply: AkanNativeReply<Void>) {
114
+ var options: UNNotificationPresentationOptions = []
115
+ if args.banner == true { options.insert(.banner) }
116
+ if args.list == true { options.insert(.list) }
117
+ if args.sound == true { options.insert(.sound) }
118
+ if args.badge == true { options.insert(.badge) }
119
+ presentation = options
120
+ reply.resolve()
121
+ }
122
+
123
+ // MARK: events
124
+
125
+ func startListening(_ event: String) {
126
+ listening.insert(event)
127
+ if event == "action" { AkanNativeNotifications.shared.replay(Self.id) }
128
+ if event == "token", let token = pendingToken {
129
+ pendingToken = nil
130
+ events.token(token)
131
+ }
132
+ }
133
+
134
+ func stopListening(_ event: String) {
135
+ listening.remove(event)
136
+ }
137
+
138
+ // MARK: JSON
139
+
140
+ nonisolated private static func hex(_ data: Data) -> String {
141
+ data.map { String(format: "%02x", $0) }.joined()
142
+ }
143
+
144
+ private static func message(_ request: UNNotificationRequest) -> PushMessage {
145
+ let content = request.content
146
+ return PushMessage(id: request.identifier, title: content.title.isEmpty ? nil : content.title, body: content.body.isEmpty ? nil : content.body, data: data(content.userInfo))
147
+ }
148
+
149
+ /// The payload's own keys (not "aps"), as JSON values.
150
+ private static func data(_ userInfo: [AnyHashable: Any]) -> [String: Any] {
151
+ var out: [String: Any] = [:]
152
+ for (key, value) in userInfo {
153
+ guard let key = key as? String, key != "aps" else { continue }
154
+ out[key] = json(value)
155
+ }
156
+ return out
157
+ }
158
+
159
+ private static func json(_ value: Any) -> Any {
160
+ switch value {
161
+ case let v as String: v
162
+ case let v as NSNumber: v
163
+ case let v as [Any]: v.map(json)
164
+ case let v as [AnyHashable: Any]: Dictionary(uniqueKeysWithValues: v.compactMap { k, x in (k as? String).map { ($0, json(x)) } })
165
+ case is NSNull: NSNull()
166
+ default: String(describing: value)
167
+ }
168
+ }
169
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "id": "push",
3
+ "apiVersion": 1,
4
+ "methods": ["checkPermission", "requestPermission", "register", "unregister", "setForegroundPresentation"],
5
+ "events": ["token", "received", "action"],
6
+ "codegen": true,
7
+ "web": null,
8
+ "desktop": null,
9
+ "ios": {
10
+ "sources": ["ios/*.swift"],
11
+ "class": "PushPlugin",
12
+ "frameworks": ["UserNotifications"],
13
+ "infoPlist": { "UIBackgroundModes": ["remote-notification"] },
14
+ "entitlements": { "aps-environment": "development" }
15
+ },
16
+ "android": {
17
+ "sources": ["android/*.kt"],
18
+ "class": "com.akanjs.plugins.push.PushPlugin",
19
+ "maven": ["com.google.firebase:firebase-messaging:25.1.3", "androidx.core:core:1.10.0"],
20
+ "permissions": ["android.permission.POST_NOTIFICATIONS"],
21
+ "applicationXml": "<service android:name=\"com.akanjs.plugins.push.AkanNativeMessagingService\" android:exported=\"false\"><intent-filter><action android:name=\"com.google.firebase.MESSAGING_EVENT\" /></intent-filter></service>"
22
+ }
23
+ }
@@ -0,0 +1,73 @@
1
+ import { definePlugin } from "../../../packages/core/src/index.ts";
2
+ import { usePluginEvent } from "../../../packages/react/src/index.ts";
3
+
4
+ /** C1 permission states. Android reports "prompt-with-rationale" after one refusal. */
5
+ export type PushPermissionState = "granted" | "denied" | "prompt" | "prompt-with-rationale";
6
+
7
+ export type PushProvider = "apns" | "fcm";
8
+
9
+ /** Where the server sends: an APNs device token (hex) or an FCM registration token. */
10
+ export interface PushToken {
11
+ token: string;
12
+ provider: PushProvider;
13
+ platform: "ios" | "android";
14
+ }
15
+
16
+ export interface PushMessage {
17
+ /** APNs: the notification's request identifier. FCM: the message id. */
18
+ id?: string;
19
+ title?: string;
20
+ body?: string;
21
+ /** The payload's own keys: APNs userInfo without "aps", FCM data. */
22
+ data: Record<string, unknown>;
23
+ }
24
+
25
+ export interface PushAction {
26
+ /** "tap" for the notification itself, else the action's identifier. */
27
+ actionId: string;
28
+ message: PushMessage;
29
+ }
30
+
31
+ /** How a push that arrives while the app is in front is shown. Default: not shown (the page gets "received"). */
32
+ export interface PushPresentation {
33
+ banner?: boolean;
34
+ list?: boolean;
35
+ sound?: boolean;
36
+ badge?: boolean;
37
+ }
38
+
39
+ export interface PushApi {
40
+ checkPermission(): Promise<{ display: PushPermissionState }>;
41
+ /** Asks for permission to show notifications (Android 13+ and iOS; granted earlier on older Android). */
42
+ requestPermission(): Promise<{ display: PushPermissionState }>;
43
+ /** Registers with APNs or FCM; resolves with the token. A later change arrives as "token". */
44
+ register(): Promise<PushToken>;
45
+ /** Stops pushes to this installation (APNs unregister; FCM deletes the token). */
46
+ unregister(): Promise<void>;
47
+ setForegroundPresentation(args: PushPresentation): Promise<void>;
48
+ }
49
+
50
+ export interface PushEvents {
51
+ /**
52
+ * The token changed (FCM refreshes it; APNs after a restore). Send it to the server again. A change
53
+ * while no page listened is kept (the latest) and goes to the first listener.
54
+ */
55
+ token: PushToken;
56
+ /** A push arrived while the app runs (shown or not, per setForegroundPresentation). */
57
+ received: PushMessage;
58
+ /** The user tapped a push. The tap that launched the app is kept until the first listener. */
59
+ action: PushAction;
60
+ }
61
+
62
+ export const push = definePlugin<PushApi, PushEvents>("push", {
63
+ methods: ["checkPermission", "requestPermission", "register", "unregister", "setForegroundPresentation"],
64
+ events: ["token", "received", "action"],
65
+ });
66
+
67
+ /** Subscribes to a push event for the component's lifetime. */
68
+ export function usePushEvent<E extends keyof PushEvents & string>(
69
+ event: E,
70
+ handler: (data: PushEvents[E]) => void,
71
+ ): void {
72
+ usePluginEvent(push, event, handler);
73
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "screen",
3
+ "apiVersion": 1,
4
+ "methods": ["getDisplays", "getCursorPoint"],
5
+ "events": ["change"],
6
+ "web": "./src/web.ts",
7
+ "desktop": "./src/desktop.ts",
8
+ "ios": null,
9
+ "android": null
10
+ }
@@ -0,0 +1,50 @@
1
+
2
+
3
+ import { defineDesktopPlugin } from "../../../packages/desktop/src/plugin.ts";
4
+ import type { Display, ScreenApi, ScreenEvents } from "./index.ts";
5
+ import { sameDisplays } from "./web.ts";
6
+
7
+ export default defineDesktopPlugin<ScreenApi, ScreenEvents>({
8
+ id: "screen",
9
+ methods: {
10
+ getDisplays: (_args, ctx) => ctx.shell("screen.displays") as Promise<Display[]>,
11
+ getCursorPoint: (_args, ctx) => ctx.shell("screen.cursor") as Promise<{ x: number; y: number }>,
12
+ },
13
+ events: {
14
+ change(emit, ctx) {
15
+ let active = true;
16
+ let last: Display[] | null = null;
17
+ let reading = false;
18
+ let again = false;
19
+
20
+ const refresh = async () => {
21
+ if (reading) {
22
+ again = true;
23
+ return;
24
+ }
25
+ reading = true;
26
+ try {
27
+ do {
28
+ again = false;
29
+ const displays = (await ctx.shell("screen.displays")) as Display[];
30
+ if (!active) return;
31
+ if (last && !sameDisplays(last, displays)) emit({ displays });
32
+ last = displays;
33
+ } while (again && active);
34
+ } catch (error) {
35
+ console.warn("[akan-native] screen: reading the displays failed", error);
36
+ } finally {
37
+ reading = false;
38
+ }
39
+ };
40
+ const stop = ctx.onNativeEvent("screen", () => void refresh());
41
+ ctx
42
+ .shell("screen.watch")
43
+ .then(refresh, (error) => console.warn("[akan-native] screen: cannot watch display changes", error));
44
+ return () => {
45
+ active = false;
46
+ stop();
47
+ };
48
+ },
49
+ },
50
+ });