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,360 @@
1
+ package com.akanjs.plugins.geolocation
2
+
3
+ import android.Manifest
4
+ import android.app.Activity
5
+ import android.app.Application
6
+ import android.content.pm.PackageManager
7
+ import android.location.Location
8
+ import android.location.LocationListener
9
+ import android.location.LocationManager
10
+ import android.location.LocationRequest
11
+ import android.os.Build
12
+ import android.os.Bundle
13
+ import android.os.CancellationSignal
14
+ import android.os.Handler
15
+ import android.os.Looper
16
+ import android.os.SystemClock
17
+ import android.util.Log
18
+ import java.util.concurrent.Executor
19
+ import java.util.function.Consumer
20
+ import com.akanjs.runtime.AkanNativeErrorCode
21
+ import com.akanjs.runtime.AkanNativePluginContext
22
+ import com.akanjs.runtime.AkanNativeReply
23
+
24
+ /**
25
+ * Framework LocationManager instead of Play Services FusedLocationProviderClient (plugins.md §2),
26
+ * following tauri-plugins-workspace/plugins/geolocation/android/src/main/java/Geolocation.kt:
27
+ * - Provider: LocationManager.FUSED_PROVIDER (API 31; implemented by Play services where present,
28
+ * by the AOSP FusedLocation otherwise), else GPS for high accuracy with fine permission, else
29
+ * NETWORK. GPS is never used with coarse permission only.
30
+ * - Both ACCESS_FINE_LOCATION and ACCESS_COARSE_LOCATION are requested together: on Android 12+
31
+ * the dialog offers precise or approximate, and the user may grant coarse only (precise: false,
32
+ * the system then coarsens every fix; a high-accuracy request quietly gets the approximate one).
33
+ * Balanced and coarse-only requests do not turn on GPS: where there is no network location
34
+ * (the emulator, verified) they only get a fix another request produced recently, or time out.
35
+ * capacitor/android/.../BridgeWebChromeClient.java:246-273 treats coarse as enough in the same way.
36
+ * - getCurrentPosition: newest getLastKnownLocation within maximumAge (Tauri's getLastLocation),
37
+ * else getCurrentLocation (API 31 LocationRequest overload) with a CancellationSignal for the
38
+ * timeout. The platform ends a single request after at most 30 s with null (NOT_FOUND).
39
+ * - Watches stop on pause and resume on resume (Tauri onPause/onResume): background delivery would
40
+ * need ACCESS_BACKGROUND_LOCATION or a foreground service.
41
+ * - Location turned off is NOT_FOUND for getCurrentPosition and an "error" event for a watch, whose
42
+ * registration stays so updates resume when it is turned on (Tauri rejects checkPermissions instead).
43
+ * Emulator: `adb emu geo fix <lon> <lat>`, `adb shell pm grant <app id> android.permission.ACCESS_FINE_LOCATION`.
44
+ * Arguments arrive decoded and checked by the generated GeolocationPluginSpec (PL-10); the ranges
45
+ * of timeout and maximumAge are checked here.
46
+ */
47
+ class GeolocationPlugin(private val context: AkanNativePluginContext) : GeolocationPluginSpec {
48
+ private class Watch(val provider: String, val high: Boolean, val listener: LocationListener)
49
+
50
+ private val activity = context.activity
51
+ private val events = GeolocationEvents(context)
52
+ private val manager: LocationManager? = activity.getSystemService(LocationManager::class.java)
53
+ private val main = Handler(Looper.getMainLooper())
54
+ private val listening = LinkedHashSet<String>()
55
+ private var watch: Watch? = null
56
+ private var resumed = true
57
+ private var askedForWatch = false
58
+ private var lastReport: String? = null
59
+
60
+ private val lifecycle = object : Application.ActivityLifecycleCallbacks {
61
+ override fun onActivityResumed(activity: Activity) {
62
+ resumed = true
63
+ updateWatch() // also picks up a permission granted in Settings meanwhile
64
+ }
65
+
66
+ override fun onActivityPaused(activity: Activity) {
67
+ resumed = false
68
+ updateWatch()
69
+ }
70
+
71
+ override fun onActivityStarted(activity: Activity) {}
72
+ override fun onActivityStopped(activity: Activity) {}
73
+ override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {}
74
+ override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
75
+ override fun onActivityDestroyed(activity: Activity) {}
76
+ }
77
+
78
+ override fun checkPermission(reply: AkanNativeReply<GeolocationLocationPermission>) = reply.resolve(permission())
79
+
80
+ override fun requestPermission(reply: AkanNativeReply<GeolocationLocationPermission>) =
81
+ context.requestPermissions(PERMISSIONS) { reply.resolve(permission()) }
82
+
83
+ override fun startListening(event: String) {
84
+ if (event !in EVENTS) return
85
+ if (listening.isEmpty()) {
86
+ askedForWatch = false
87
+ lastReport = null
88
+ activity.registerActivityLifecycleCallbacks(lifecycle)
89
+ }
90
+ listening.add(event)
91
+ updateWatch()
92
+ }
93
+
94
+ override fun stopListening(event: String) {
95
+ if (!listening.remove(event)) return
96
+ if (listening.isEmpty()) activity.unregisterActivityLifecycleCallbacks(lifecycle)
97
+ updateWatch()
98
+ }
99
+
100
+ override fun destroy() {
101
+ if (listening.isNotEmpty()) activity.unregisterActivityLifecycleCallbacks(lifecycle)
102
+ listening.clear()
103
+ stopWatch()
104
+ }
105
+
106
+ // ------------------------------------------------------------ permission
107
+
108
+ private fun granted(permission: String) = activity.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED
109
+ private fun fine() = granted(Manifest.permission.ACCESS_FINE_LOCATION)
110
+ private fun anyLocation() = fine() || granted(Manifest.permission.ACCESS_COARSE_LOCATION)
111
+
112
+ private fun permission(): GeolocationLocationPermission =
113
+ if (anyLocation()) GeolocationLocationPermission(location = GeolocationPermissionState.GRANTED, precise = fine())
114
+ // Both are always requested together, so the coarse history stands for the pair.
115
+ else GeolocationLocationPermission(location = permissionState(Manifest.permission.ACCESS_COARSE_LOCATION), precise = null)
116
+
117
+ /** context.permissionState answers with one of the four AkanNativePermission strings. */
118
+ private fun permissionState(permission: String): GeolocationPermissionState {
119
+ val state = context.permissionState(permission)
120
+ return GeolocationPermissionState.entries.first { it.json == state }
121
+ }
122
+
123
+ // ------------------------------------------------------------ getCurrentPosition
124
+
125
+ /** A non-negative number of ms, or [fallback] when absent. JSON has no Infinity: it arrives as null. */
126
+ private fun milliseconds(value: Double?, name: String, fallback: Long, reply: AkanNativeReply<*>): Long? {
127
+ if (value == null) return fallback
128
+ if (value < 0) {
129
+ reply.reject(AkanNativeErrorCode.INVALID_ARGS, "$name must be a number of ms >= 0")
130
+ return null
131
+ }
132
+ return value.coerceAtMost(Long.MAX_VALUE.toDouble()).toLong()
133
+ }
134
+
135
+ override fun getCurrentPosition(args: GeolocationPositionOptions, reply: AkanNativeReply<GeolocationPosition>) {
136
+ val timeout = milliseconds(args.timeout, "timeout", 30_000, reply) ?: return
137
+ val maximumAge = milliseconds(args.maximumAge, "maximumAge", 0, reply) ?: return
138
+ val high = args.enableHighAccuracy == true
139
+ if (anyLocation()) return locate(reply, high, timeout, maximumAge)
140
+ // Like W3C getCurrentPosition, ask first. After "don't ask again" this answers at once.
141
+ context.requestPermissions(PERMISSIONS) {
142
+ if (anyLocation()) locate(reply, high, timeout, maximumAge)
143
+ else reply.reject(AkanNativeErrorCode.PERMISSION_DENIED, "location access was denied")
144
+ }
145
+ }
146
+
147
+ private fun locate(reply: AkanNativeReply<GeolocationPosition>, high: Boolean, timeout: Long, maximumAge: Long) {
148
+ val lm = manager ?: return reply.reject(AkanNativeErrorCode.UNSUPPORTED, "no location service")
149
+ if (!lm.isLocationEnabled) return reply.reject(AkanNativeErrorCode.NOT_FOUND, "location is turned off")
150
+ val fine = fine()
151
+ if (maximumAge > 0) cached(lm, maximumAge)?.let { return reply.resolve(position(it)) }
152
+ if (timeout == 0L) return reply.reject(AkanNativeErrorCode.NOT_FOUND, "no position within 0 ms")
153
+ val provider = provider(lm, high, fine, enabledOnly = true)
154
+ ?: return reply.reject(AkanNativeErrorCode.NOT_FOUND, "no location provider is enabled")
155
+ val signal = CancellationSignal()
156
+ var done = false
157
+ val timer = Runnable {
158
+ if (!done) {
159
+ done = true
160
+ signal.cancel()
161
+ reply.reject(AkanNativeErrorCode.NOT_FOUND, "no position within $timeout ms")
162
+ }
163
+ }
164
+ main.postDelayed(timer, timeout)
165
+ val settle = { settleReply: AkanNativeReply<GeolocationPosition>.() -> Unit ->
166
+ if (!done) {
167
+ done = true
168
+ main.removeCallbacks(timer)
169
+ reply.settleReply()
170
+ }
171
+ }
172
+ val deliver: (Location?) -> Unit = { location ->
173
+ settle { if (location == null) reject(AkanNativeErrorCode.NOT_FOUND, "no position from $provider") else resolve(position(location)) }
174
+ }
175
+ try {
176
+ when {
177
+ Build.VERSION.SDK_INT >= 31 -> Api31.currentLocation(lm, provider, high && fine, timeout, signal, activity.mainExecutor, deliver)
178
+ Build.VERSION.SDK_INT >= 30 -> Api30.currentLocation(lm, provider, signal, activity.mainExecutor, deliver)
179
+ else -> oneShot(lm, provider, signal, deliver)
180
+ }
181
+ } catch (e: SecurityException) { // permission revoked in between
182
+ settle { reject(AkanNativeErrorCode.PERMISSION_DENIED, e.message ?: "location access was denied") }
183
+ } catch (e: IllegalArgumentException) { // provider vanished
184
+ settle { reject(AkanNativeErrorCode.NOT_FOUND, e.message ?: "no provider $provider") }
185
+ }
186
+ }
187
+
188
+ /**
189
+ * API 29 has no getCurrentLocation: updates from the provider, removed after the first fix or when
190
+ * the provider is turned off (androidx LocationManagerCompat). The caller's timer still applies.
191
+ */
192
+ private fun oneShot(lm: LocationManager, provider: String, signal: CancellationSignal, done: (Location?) -> Unit) {
193
+ var finished = false
194
+ lateinit var listener: LocationListener
195
+ val finish = { location: Location? ->
196
+ if (!finished) {
197
+ finished = true
198
+ lm.removeUpdates(listener)
199
+ done(location)
200
+ }
201
+ }
202
+ listener = object : LocationListener {
203
+ override fun onLocationChanged(location: Location) = finish(location)
204
+ override fun onProviderDisabled(provider: String) = finish(null)
205
+ override fun onProviderEnabled(provider: String) {}
206
+ @Deprecated("abstract before API 30, never called from 29 on")
207
+ override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {}
208
+ }
209
+ signal.setOnCancelListener {
210
+ if (!finished) {
211
+ finished = true
212
+ lm.removeUpdates(listener)
213
+ }
214
+ }
215
+ lm.requestLocationUpdates(provider, 0L, 0f, listener, Looper.getMainLooper())
216
+ }
217
+
218
+ /** Whether the provider exists. hasProvider is API 31; before it the fused provider is hidden. */
219
+ private fun has(lm: LocationManager, provider: String): Boolean = when {
220
+ Build.VERSION.SDK_INT >= 31 -> Api31.hasProvider(lm, provider)
221
+ provider == LocationManager.FUSED_PROVIDER -> false
222
+ else -> provider in lm.allProviders
223
+ }
224
+
225
+ /** The newest last known fix of any provider, if it is at most [maximumAge] ms old. */
226
+ private fun cached(lm: LocationManager, maximumAge: Long): Location? {
227
+ val now = SystemClock.elapsedRealtimeNanos()
228
+ return PROVIDERS.asSequence()
229
+ .filter { has(lm, it) }
230
+ .mapNotNull { runCatching { lm.getLastKnownLocation(it) }.getOrNull() }
231
+ .filter { (now - it.elapsedRealtimeNanos) / 1_000_000 <= maximumAge }
232
+ .maxByOrNull { it.elapsedRealtimeNanos }
233
+ }
234
+
235
+ private fun provider(lm: LocationManager, high: Boolean, fine: Boolean, enabledOnly: Boolean): String? {
236
+ fun usable(p: String) = has(lm, p) && (!enabledOnly || lm.isProviderEnabled(p))
237
+ return when {
238
+ usable(LocationManager.FUSED_PROVIDER) -> LocationManager.FUSED_PROVIDER
239
+ high && fine && usable(LocationManager.GPS_PROVIDER) -> LocationManager.GPS_PROVIDER
240
+ usable(LocationManager.NETWORK_PROVIDER) -> LocationManager.NETWORK_PROVIDER
241
+ fine && usable(LocationManager.GPS_PROVIDER) -> LocationManager.GPS_PROVIDER
242
+ else -> null
243
+ }
244
+ }
245
+
246
+ // ------------------------------------------------------------ watch
247
+
248
+ private fun updateWatch() {
249
+ if (listening.isEmpty() || !resumed) return stopWatch()
250
+ val lm = manager ?: return report(GeolocationErrorCode.UNSUPPORTED, "no location service")
251
+ if (!anyLocation()) {
252
+ stopWatch()
253
+ if (askedForWatch) return report(GeolocationErrorCode.PERMISSION_DENIED, "location access was denied")
254
+ askedForWatch = true
255
+ // The dialog pauses the activity; the watch starts on the following resume.
256
+ context.requestPermissions(PERMISSIONS) { if (!anyLocation()) report(GeolocationErrorCode.PERMISSION_DENIED, "location access was denied") }
257
+ return
258
+ }
259
+ val fine = fine()
260
+ val high = "highAccuracyPosition" in listening && fine
261
+ // Registered even while location is off: updates start when it is turned on.
262
+ val provider = provider(lm, high, fine, enabledOnly = false) ?: return report(GeolocationErrorCode.NOT_FOUND, "no location provider")
263
+ val current = watch
264
+ if (current != null && current.provider == provider && current.high == high) return
265
+ stopWatch()
266
+ val listener = object : LocationListener {
267
+ override fun onLocationChanged(location: Location) {
268
+ lastReport = null
269
+ val fix = position(location)
270
+ for (event in listening.toList()) if (event == "highAccuracyPosition") events.highAccuracyPosition(fix) else events.position(fix)
271
+ }
272
+
273
+ override fun onProviderDisabled(provider: String) = report(GeolocationErrorCode.NOT_FOUND, "location is turned off")
274
+
275
+ override fun onProviderEnabled(provider: String) {
276
+ lastReport = null
277
+ }
278
+
279
+ @Deprecated("abstract before API 30, never called from 29 on")
280
+ override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {}
281
+ }
282
+ try {
283
+ val interval = if (high) 1_000L else 5_000L
284
+ when {
285
+ Build.VERSION.SDK_INT >= 31 -> Api31.requestUpdates(lm, provider, high, activity.mainExecutor, listener)
286
+ Build.VERSION.SDK_INT >= 30 -> Api30.requestUpdates(lm, provider, interval, activity.mainExecutor, listener)
287
+ else -> lm.requestLocationUpdates(provider, interval, 0f, listener, Looper.getMainLooper())
288
+ }
289
+ watch = Watch(provider, high, listener)
290
+ } catch (e: RuntimeException) { // SecurityException, IllegalArgumentException
291
+ Log.w("AkanNative", "geolocation: cannot watch $provider", e)
292
+ return report(if (e is SecurityException) GeolocationErrorCode.PERMISSION_DENIED else GeolocationErrorCode.NOT_FOUND, e.message ?: "cannot watch $provider")
293
+ }
294
+ if (!lm.isLocationEnabled) report(GeolocationErrorCode.NOT_FOUND, "location is turned off")
295
+ }
296
+
297
+ private fun stopWatch() {
298
+ val current = watch ?: return
299
+ manager?.removeUpdates(current.listener)
300
+ watch = null
301
+ }
302
+
303
+ /** Sends an "error" event, once per distinct problem until the next fix. */
304
+ private fun report(code: GeolocationErrorCode, message: String) {
305
+ val key = "${code.json} $message"
306
+ if (lastReport == key) return
307
+ lastReport = key
308
+ events.error(GeolocationError(code = code, message = message))
309
+ }
310
+
311
+ // ------------------------------------------------------------ Location → Position
312
+
313
+ /** Float → Double through its shortest decimal form: 3.9f stays 3.9, not 3.9000000953674316. */
314
+ private fun num(value: Float): Double = value.toString().toDouble()
315
+
316
+ private fun position(l: Location) = GeolocationPosition(
317
+ latitude = l.latitude,
318
+ longitude = l.longitude,
319
+ accuracy = num(l.accuracy),
320
+ altitude = if (l.hasAltitude()) l.altitude else null, // WGS84 ellipsoid, as W3C
321
+ altitudeAccuracy = if (l.hasVerticalAccuracy()) num(l.verticalAccuracyMeters) else null,
322
+ heading = if (l.hasBearing() && l.hasSpeed() && l.speed > 0f) num(l.bearing) else null,
323
+ speed = if (l.hasSpeed()) num(l.speed) else null,
324
+ timestamp = l.time.toDouble(), // epoch ms: exact in a Double, and written without a fraction
325
+ )
326
+
327
+ private object Api30 {
328
+ fun currentLocation(lm: LocationManager, provider: String, signal: CancellationSignal, executor: Executor, done: (Location?) -> Unit) =
329
+ lm.getCurrentLocation(provider, signal, executor, Consumer { done(it) })
330
+
331
+ fun requestUpdates(lm: LocationManager, provider: String, interval: Long, executor: Executor, listener: LocationListener) =
332
+ lm.requestLocationUpdates(provider, interval, 0f, executor, listener)
333
+ }
334
+
335
+ private object Api31 {
336
+ fun hasProvider(lm: LocationManager, provider: String): Boolean = lm.hasProvider(provider)
337
+
338
+ fun currentLocation(lm: LocationManager, provider: String, high: Boolean, timeout: Long, signal: CancellationSignal, executor: Executor, done: (Location?) -> Unit) {
339
+ val request = LocationRequest.Builder(0)
340
+ .setQuality(if (high) LocationRequest.QUALITY_HIGH_ACCURACY else LocationRequest.QUALITY_BALANCED_POWER_ACCURACY)
341
+ .setDurationMillis(timeout)
342
+ .build()
343
+ lm.getCurrentLocation(provider, request, signal, executor, Consumer { done(it) })
344
+ }
345
+
346
+ fun requestUpdates(lm: LocationManager, provider: String, high: Boolean, executor: Executor, listener: LocationListener) {
347
+ val request = LocationRequest.Builder(if (high) 1_000 else 5_000)
348
+ .setQuality(if (high) LocationRequest.QUALITY_HIGH_ACCURACY else LocationRequest.QUALITY_BALANCED_POWER_ACCURACY)
349
+ .setMinUpdateIntervalMillis(if (high) 500 else 2_000)
350
+ .build()
351
+ lm.requestLocationUpdates(provider, request, executor, listener)
352
+ }
353
+ }
354
+
355
+ private companion object {
356
+ val PERMISSIONS = arrayOf(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION)
357
+ val EVENTS = setOf("position", "highAccuracyPosition")
358
+ val PROVIDERS = listOf(LocationManager.FUSED_PROVIDER, LocationManager.GPS_PROVIDER, LocationManager.NETWORK_PROVIDER, LocationManager.PASSIVE_PROVIDER)
359
+ }
360
+ }
@@ -0,0 +1,284 @@
1
+ import CoreLocation
2
+ import Foundation
3
+
4
+ /// CoreLocation, when-in-use authorization only.
5
+ /// Compared with tauri-plugins-workspace/plugins/geolocation/ios/Sources/GeolocationPlugin.swift:
6
+ /// - Two managers: `single` answers getCurrentPosition with requestLocation(), `watcher` runs
7
+ /// startUpdatingLocation() while the page listens. requestLocation() and startUpdatingLocation()
8
+ /// on one manager interfere (a running update makes the one-shot request moot, and
9
+ /// stopUpdatingLocation() is also how a pending requestLocation() is cancelled).
10
+ /// - Instance authorizationStatus / accuracyAuthorization and locationManagerDidChangeAuthorization
11
+ /// (iOS 14+); Tauri still uses the deprecated class method (its own TODO).
12
+ /// - timeout and maximumAge are honored (Tauri ignores both on iOS); balanced accuracy is 100 m
13
+ /// (Tauri: 1 km, which in a city is often just the cell tower).
14
+ /// - Invalid CLLocation fields (negative accuracy, course, speed) become null instead of -1, and
15
+ /// altitude is ellipsoidalAltitude (iOS 15+) so it means the same as on Android and in W3C.
16
+ /// - kCLErrorLocationUnknown during a watch is transient (Apple: "keeps trying"), so it is not
17
+ /// reported; for a one-shot request it ends the request with NOT_FOUND.
18
+ /// - Asking without NSLocationWhenInUseUsageDescription does nothing (the prompt never appears), so
19
+ /// it is checked first. Location services off system-wide reads as .denied.
20
+ /// - Reduced accuracy (Precise Location off) is reported as precise: false; asking for temporary
21
+ /// full accuracy needs NSLocationTemporaryUsageDescriptionDictionary and is not offered yet.
22
+ /// Simulator: `xcrun simctl location <udid> set <lat>,<lon>`, `xcrun simctl privacy <udid> grant location <bundle id>`.
23
+ /// Arguments arrive decoded and checked by the generated GeolocationPluginSpec (PL-10); the ranges
24
+ /// of timeout and maximumAge are checked here.
25
+ final class GeolocationPlugin: NSObject, GeolocationPluginSpec, CLLocationManagerDelegate {
26
+ static let id = "geolocation"
27
+
28
+ private final class Request {
29
+ let reply: AkanNativeReply<GeolocationPosition>
30
+ let high: Bool
31
+ let timeout: Double
32
+ let timer: DispatchWorkItem
33
+ var started = false
34
+
35
+ init(reply: AkanNativeReply<GeolocationPosition>, high: Bool, timeout: Double, timer: DispatchWorkItem) {
36
+ (self.reply, self.high, self.timeout, self.timer) = (reply, high, timeout, timer)
37
+ }
38
+ }
39
+
40
+ private static let watchEvents: Set<String> = ["position", "highAccuracyPosition"]
41
+ private let events: GeolocationEvents
42
+ private let single = CLLocationManager()
43
+ private let watcher = CLLocationManager()
44
+ private var requests: [Int: Request] = [:]
45
+ private var nextRequest = 0
46
+ private var singleRunning = false
47
+ private var singleHigh = false
48
+ private var permissionReplies: [AkanNativeReply<GeolocationLocationPermission>] = []
49
+ private var listening: Set<String> = []
50
+ private var watchRunning = false
51
+ private var reportedDenied = false
52
+
53
+ init(context: AkanNativePluginContext) {
54
+ events = GeolocationEvents(context)
55
+ super.init()
56
+ single.delegate = self // created on the main thread: delegate calls arrive on the main run loop
57
+ watcher.delegate = self
58
+ }
59
+
60
+ func checkPermission(_ reply: AkanNativeReply<GeolocationLocationPermission>) {
61
+ reply.resolve(permission())
62
+ }
63
+
64
+ func requestPermission(_ reply: AkanNativeReply<GeolocationLocationPermission>) {
65
+ guard single.authorizationStatus == .notDetermined else { return reply.resolve(permission()) }
66
+ guard Self.hasUsageDescription else { return reply.reject(.internalError, Self.missingUsage) }
67
+ permissionReplies.append(reply)
68
+ single.requestWhenInUseAuthorization() // answered in locationManagerDidChangeAuthorization
69
+ }
70
+
71
+ func startListening(_ event: String) {
72
+ guard Self.watchEvents.contains(event) else { return }
73
+ listening.insert(event)
74
+ updateWatch()
75
+ }
76
+
77
+ func stopListening(_ event: String) {
78
+ guard Self.watchEvents.contains(event) else { return }
79
+ listening.remove(event)
80
+ updateWatch()
81
+ }
82
+
83
+ // MARK: permission
84
+
85
+ private static let missingUsage = "Info.plist has no NSLocationWhenInUseUsageDescription"
86
+
87
+ private static var hasUsageDescription: Bool {
88
+ Bundle.main.object(forInfoDictionaryKey: "NSLocationWhenInUseUsageDescription") != nil
89
+ }
90
+
91
+ private var authorized: Bool {
92
+ let status = single.authorizationStatus
93
+ return status == .authorizedWhenInUse || status == .authorizedAlways
94
+ }
95
+
96
+ private func permission() -> GeolocationLocationPermission {
97
+ let state: GeolocationPermissionState =
98
+ switch single.authorizationStatus {
99
+ case .notDetermined: .prompt
100
+ case .denied, .restricted: .denied
101
+ default: .granted
102
+ }
103
+ return GeolocationLocationPermission(location: state, precise: authorized ? single.accuracyAuthorization == .fullAccuracy : nil)
104
+ }
105
+
106
+ private func authorizationChanged() {
107
+ if single.authorizationStatus == .notDetermined { return } // the initial callback, or still asking
108
+ let replies = permissionReplies
109
+ permissionReplies.removeAll()
110
+ let state = permission()
111
+ for reply in replies { reply.resolve(state) }
112
+ if authorized { reportedDenied = false }
113
+ startSingle()
114
+ updateWatch()
115
+ }
116
+
117
+ // MARK: getCurrentPosition
118
+
119
+ /// A non-negative number of ms, or the fallback when absent. JSON has no Infinity: it arrives as null.
120
+ private static func milliseconds<T>(_ value: Double?, _ name: String, _ fallback: Double, _ reply: AkanNativeReply<T>) -> Double? {
121
+ guard let value else { return fallback }
122
+ guard value >= 0 else {
123
+ reply.reject(.invalidArgs, "\(name) must be a number of ms >= 0")
124
+ return nil
125
+ }
126
+ return value
127
+ }
128
+
129
+ func getCurrentPosition(_ args: GeolocationPositionOptions, _ reply: AkanNativeReply<GeolocationPosition>) {
130
+ guard let timeout = Self.milliseconds(args.timeout, "timeout", 30_000, reply),
131
+ let maximumAge = Self.milliseconds(args.maximumAge, "maximumAge", 0, reply) else { return }
132
+ let high = args.enableHighAccuracy ?? false
133
+ if maximumAge > 0, authorized, let cached = watcher.location ?? single.location,
134
+ cached.horizontalAccuracy >= 0, -cached.timestamp.timeIntervalSinceNow * 1000 <= maximumAge
135
+ {
136
+ return reply.resolve(GeolocationPosition(cached))
137
+ }
138
+ let id = nextRequest
139
+ nextRequest += 1
140
+ let timer = DispatchWorkItem { [weak self] in MainActor.assumeIsolated { self?.timedOut(id) } }
141
+ requests[id] = Request(reply: reply, high: high, timeout: timeout, timer: timer)
142
+ startSingle()
143
+ }
144
+
145
+ private func startSingle() {
146
+ guard !requests.isEmpty else { return stopSingle() }
147
+ switch single.authorizationStatus {
148
+ case .notDetermined:
149
+ guard Self.hasUsageDescription else { return finishAll(.internalError, Self.missingUsage) }
150
+ single.requestWhenInUseAuthorization() // continues in authorizationChanged
151
+ case .denied, .restricted:
152
+ finishAll(.permissionDenied, "location access was denied")
153
+ default:
154
+ // Like W3C, the timeout runs from here: time spent on the permission prompt does not count.
155
+ for request in requests.values where !request.started {
156
+ request.started = true
157
+ DispatchQueue.main.asyncAfter(deadline: .now() + min(request.timeout, 86_400_000) / 1000, execute: request.timer)
158
+ }
159
+ let high = requests.values.contains { $0.high }
160
+ if singleRunning, singleHigh || !high { return } // the running request is good enough
161
+ if singleRunning { single.stopUpdatingLocation() } // restart with the better accuracy
162
+ single.desiredAccuracy = high ? kCLLocationAccuracyBest : kCLLocationAccuracyHundredMeters
163
+ singleHigh = high
164
+ singleRunning = true
165
+ single.requestLocation()
166
+ }
167
+ }
168
+
169
+ private func stopSingle() {
170
+ if singleRunning { single.stopUpdatingLocation() } // also cancels a pending requestLocation()
171
+ singleRunning = false
172
+ }
173
+
174
+ private func timedOut(_ id: Int) {
175
+ guard let request = requests.removeValue(forKey: id) else { return }
176
+ request.reply.reject(.notFound, "no position within \(Int(request.timeout)) ms")
177
+ if requests.isEmpty { stopSingle() }
178
+ }
179
+
180
+ private func finishAll(_ code: AkanNativeErrorCode?, _ message: String, fix: GeolocationPosition? = nil) {
181
+ let pending = requests.values
182
+ requests.removeAll()
183
+ singleRunning = false
184
+ for request in pending {
185
+ request.timer.cancel()
186
+ if let fix { request.reply.resolve(fix) } else if let code { request.reply.reject(code, message) }
187
+ }
188
+ }
189
+
190
+ // MARK: watch
191
+
192
+ private func updateWatch() {
193
+ guard !listening.isEmpty else {
194
+ if watchRunning { watcher.stopUpdatingLocation() }
195
+ watchRunning = false
196
+ reportedDenied = false
197
+ return
198
+ }
199
+ switch watcher.authorizationStatus {
200
+ case .notDetermined:
201
+ guard Self.hasUsageDescription else { return reportOnce(.internal, Self.missingUsage) }
202
+ watcher.requestWhenInUseAuthorization()
203
+ case .denied, .restricted:
204
+ if watchRunning { watcher.stopUpdatingLocation() }
205
+ watchRunning = false
206
+ reportOnce(.permissionDenied, "location access was denied")
207
+ default:
208
+ // Changing desiredAccuracy on a running manager applies right away.
209
+ watcher.desiredAccuracy = listening.contains("highAccuracyPosition") ? kCLLocationAccuracyBest : kCLLocationAccuracyHundredMeters
210
+ if !watchRunning { watcher.startUpdatingLocation() }
211
+ watchRunning = true
212
+ }
213
+ }
214
+
215
+ private func reportOnce(_ code: GeolocationErrorCode, _ message: String) {
216
+ guard !reportedDenied else { return }
217
+ reportedDenied = true
218
+ events.error(GeolocationError(code: code, message: message))
219
+ }
220
+
221
+ // MARK: CLLocationManagerDelegate (main thread, see init)
222
+
223
+ private func received(_ fix: GeolocationPosition, from manager: ObjectIdentifier) {
224
+ if manager == ObjectIdentifier(single) {
225
+ finishAll(nil, "", fix: fix)
226
+ } else if watchRunning {
227
+ for event in listening {
228
+ if event == "highAccuracyPosition" { events.highAccuracyPosition(fix) } else { events.position(fix) }
229
+ }
230
+ }
231
+ }
232
+
233
+ private func failed(_ code: Int, _ message: String, from manager: ObjectIdentifier) {
234
+ let denied = code == CLError.Code.denied.rawValue
235
+ if manager == ObjectIdentifier(single) {
236
+ finishAll(denied ? .permissionDenied : .notFound, denied ? "location access was denied" : "no position: \(message)")
237
+ } else if denied {
238
+ if watchRunning { watcher.stopUpdatingLocation() }
239
+ watchRunning = false
240
+ reportOnce(.permissionDenied, "location access was denied")
241
+ } else if code != CLError.Code.locationUnknown.rawValue {
242
+ events.error(GeolocationError(code: .notFound, message: "no position: \(message)"))
243
+ }
244
+ }
245
+
246
+ nonisolated func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
247
+ let id = ObjectIdentifier(manager)
248
+ MainActor.assumeIsolated {
249
+ if id == ObjectIdentifier(single) { authorizationChanged() } // both managers report the same app-wide change
250
+ }
251
+ }
252
+
253
+ nonisolated func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
254
+ // The last one is the newest (Tauri's comment on capacitor using .first).
255
+ guard let location = locations.last, location.horizontalAccuracy >= 0 else { return }
256
+ let fix = GeolocationPosition(location)
257
+ let id = ObjectIdentifier(manager)
258
+ MainActor.assumeIsolated { received(fix, from: id) }
259
+ }
260
+
261
+ nonisolated func locationManager(_ manager: CLLocationManager, didFailWithError error: any Error) {
262
+ let code = (error as? CLError)?.code.rawValue ?? -1
263
+ let message = error.localizedDescription
264
+ let id = ObjectIdentifier(manager)
265
+ MainActor.assumeIsolated { failed(code, message, from: id) }
266
+ }
267
+ }
268
+
269
+ private extension GeolocationPosition {
270
+ /// A CLLocation reduced to Sendable values where the delegate call arrives.
271
+ init(_ location: CLLocation) {
272
+ let vertical = location.verticalAccuracy > 0
273
+ self.init(
274
+ latitude: location.coordinate.latitude,
275
+ longitude: location.coordinate.longitude,
276
+ accuracy: location.horizontalAccuracy,
277
+ altitude: vertical ? location.ellipsoidalAltitude : nil,
278
+ altitudeAccuracy: vertical ? location.verticalAccuracy : nil,
279
+ heading: location.course >= 0 ? location.course : nil,
280
+ speed: location.speed >= 0 ? location.speed : nil,
281
+ timestamp: (location.timestamp.timeIntervalSince1970 * 1000).rounded()
282
+ )
283
+ }
284
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "id": "geolocation",
3
+ "apiVersion": 1,
4
+ "methods": ["getCurrentPosition", "checkPermission", "requestPermission"],
5
+ "events": ["position", "highAccuracyPosition", "error"],
6
+ "coalesce": ["position", "highAccuracyPosition"],
7
+ "codegen": true,
8
+ "web": "./src/web.ts",
9
+ "desktop": null,
10
+ "ios": {
11
+ "sources": ["ios/*.swift"],
12
+ "class": "GeolocationPlugin",
13
+ "frameworks": ["CoreLocation"],
14
+ "infoPlist": {
15
+ "NSLocationWhenInUseUsageDescription": "Show where you are."
16
+ }
17
+ },
18
+ "android": {
19
+ "sources": ["android/*.kt"],
20
+ "class": "com.akanjs.plugins.geolocation.GeolocationPlugin",
21
+ "permissions": ["android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION"]
22
+ }
23
+ }