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,189 @@
1
+
2
+
3
+ import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
4
+ import { homedir } from "node:os";
5
+ import { join } from "node:path";
6
+ import { AkanNativeError } from "../../../packages/core/src/index.ts";
7
+ import { type DesktopContext, defineDesktopPlugin } from "../../../packages/desktop/src/plugin.ts";
8
+ import type { AutostartApi, AutostartState, AutostartStatus } from "./index.ts";
9
+
10
+ export interface ShellError {
11
+ reason: "alreadyRegistered" | "notRegistered" | "deniedByUser" | "invalidSignature" | "other";
12
+ code: number;
13
+ domain: string;
14
+ message: string;
15
+ }
16
+
17
+ export interface ShellAnswer {
18
+ status: AutostartStatus;
19
+ error?: ShellError | null;
20
+ }
21
+
22
+ const state = (status: AutostartStatus): AutostartState => ({ enabled: status === "enabled", status });
23
+
24
+ /** Where the user switches login items on and off. */
25
+ const SETTINGS_PAGE: Partial<Record<NodeJS.Platform, string>> = {
26
+ darwin: "System Settings › General › Login Items",
27
+ win32: "Settings › Apps › Startup",
28
+ };
29
+
30
+ /** The error an enable/disable answer stands for, or null when the app is where it was asked to be. */
31
+ export function failure(
32
+ op: "enable" | "disable",
33
+ answer: ShellAnswer,
34
+ platform: NodeJS.Platform = process.platform,
35
+ ): AkanNativeError | null {
36
+ const { status, error } = answer;
37
+ const page = SETTINGS_PAGE[platform] ?? SETTINGS_PAGE.darwin!;
38
+ if (op === "enable" && status === "requiresApproval") {
39
+ return new AkanNativeError(
40
+ "PERMISSION_DENIED",
41
+ `the app is switched off in ${page}; openSettings() opens that page`,
42
+ );
43
+ }
44
+ if (op === "enable" ? status === "enabled" : status === "notRegistered" || status === "notFound") return null;
45
+ if (!error) return new AkanNativeError("INTERNAL", `${op} did not change the login item (status ${status})`);
46
+ const detail = `${error.message} (${error.domain} ${error.code})`;
47
+ switch (error.reason) {
48
+ case "deniedByUser":
49
+ return new AkanNativeError("PERMISSION_DENIED", `the user switched the app off in ${page}: ${detail}`);
50
+ case "invalidSignature":
51
+ return new AkanNativeError("INTERNAL", `macOS did not accept the app's code signature: ${detail}`);
52
+ default:
53
+ return new AkanNativeError("INTERNAL", `${op} failed: ${detail}`);
54
+ }
55
+ }
56
+
57
+ type Env = Record<string, string | undefined>;
58
+
59
+ /** $XDG_CONFIG_HOME/autostart; the base directory must be absolute (XDG Base Directory spec). */
60
+ export function autostartDir(env: Env = process.env, home = homedir()): string {
61
+ const config = env.XDG_CONFIG_HOME?.startsWith("/") ? env.XDG_CONFIG_HOME : join(home, ".config");
62
+ return join(config, "autostart");
63
+ }
64
+
65
+ /**
66
+ * The Exec= value that runs `path`: one quoted argument (Desktop Entry spec, "The Exec key").
67
+ * Inside quotes `"`, `` ` ``, `$` and `\` take a backslash; then the string escaping of values
68
+ * doubles every backslash, and a literal `%` is `%%` (field codes).
69
+ */
70
+ export function desktopExec(path: string): string {
71
+ const quoted = `"${path.replace(/["`$\\]/g, (c) => `\\${c}`)}"`;
72
+ return quoted.replace(/\\/g, "\\\\").replace(/%/g, "%%");
73
+ }
74
+
75
+ /** Values of the Desktop Entry spec's string type: no line breaks. */
76
+ const oneLine = (value: string) => value.replace(/[\r\n]+/g, " ");
77
+
78
+ export function desktopEntry(name: string, exec: string): string {
79
+ return [
80
+ "[Desktop Entry]",
81
+ "Type=Application",
82
+ "Version=1.5",
83
+ `Name=${oneLine(name)}`,
84
+ `Exec=${desktopExec(exec)}`,
85
+ "Terminal=false",
86
+ "X-GNOME-Autostart-enabled=true",
87
+ "",
88
+ ].join("\n");
89
+ }
90
+
91
+ /**
92
+ * The state an entry stands for. Hidden=true (the spec's "deleted") or
93
+ * X-GNOME-Autostart-enabled=false (GNOME's startup settings) is an entry the user switched off.
94
+ */
95
+ export function entryStatus(text: string | null): AutostartStatus {
96
+ if (text === null) return "notRegistered";
97
+ let group = "";
98
+ const keys = new Map<string, string>();
99
+ for (const raw of text.split(/\r?\n/)) {
100
+ const line = raw.trim();
101
+ if (line.startsWith("[")) group = line;
102
+ else if (group === "[Desktop Entry]" && line.includes("=") && !line.startsWith("#")) {
103
+ const at = line.indexOf("=");
104
+ keys.set(line.slice(0, at).trim(), line.slice(at + 1).trim());
105
+ }
106
+ }
107
+ if (keys.get("Hidden") === "true" || keys.get("X-GNOME-Autostart-enabled") === "false") return "requiresApproval";
108
+ return "enabled";
109
+ }
110
+
111
+ /** `executable`: the file the entry starts; an AppImage's mount point changes at every start, $APPIMAGE does not. */
112
+ export function linuxAutostart(
113
+ dir: () => string = () => autostartDir(),
114
+ executable: () => string = () => process.env.APPIMAGE || process.execPath,
115
+ ) {
116
+ const file = (ctx: DesktopContext) => join(dir(), `${ctx.app.id}.desktop`);
117
+ const read = (ctx: DesktopContext) => (existsSync(file(ctx)) ? readFileSync(file(ctx), "utf8") : null);
118
+ const answer = (status: AutostartStatus, error?: unknown): ShellAnswer => ({
119
+ status,
120
+ error: error
121
+ ? { reason: "other", code: 0, domain: "filesystem", message: (error as Error).message ?? String(error) }
122
+ : null,
123
+ });
124
+ return {
125
+ status: (ctx: DesktopContext): ShellAnswer => ({ status: entryStatus(read(ctx)) }),
126
+
127
+ enable(ctx: DesktopContext): ShellAnswer {
128
+ try {
129
+ mkdirSync(dir(), { recursive: true });
130
+ writeFileSync(`${file(ctx)}.tmp`, desktopEntry(ctx.app.name, executable()));
131
+ renameSync(`${file(ctx)}.tmp`, file(ctx));
132
+ } catch (error) {
133
+ return answer(entryStatus(read(ctx)), error);
134
+ }
135
+ return answer(entryStatus(read(ctx)));
136
+ },
137
+ disable(ctx: DesktopContext): ShellAnswer {
138
+ try {
139
+ rmSync(file(ctx), { force: true });
140
+ } catch (error) {
141
+ return answer(entryStatus(read(ctx)), error);
142
+ }
143
+ return answer(entryStatus(read(ctx)));
144
+ },
145
+ };
146
+ }
147
+
148
+ type Backend = {
149
+ status(ctx: DesktopContext): Promise<ShellAnswer>;
150
+ change(op: "enable" | "disable", ctx: DesktopContext): Promise<ShellAnswer>;
151
+ };
152
+
153
+ /** The shell's autostart.* ops (macOS, Windows); `id` names the Windows Run value. */
154
+ const shellBackend: Backend = {
155
+ status: async (ctx) => (await ctx.shell("autostart.status", { id: ctx.app.id })) as ShellAnswer,
156
+ change: async (op, ctx) => (await ctx.shell(`autostart.${op}`, { id: ctx.app.id })) as ShellAnswer,
157
+ };
158
+
159
+ /** `platform` and `linux` are replaceable so tests can check every OS's path on any OS. */
160
+ export function createDesktopAutostart(platform: NodeJS.Platform = process.platform, linux = linuxAutostart()) {
161
+ const backend: Backend =
162
+ platform === "linux"
163
+ ? {
164
+ status: async (ctx) => linux.status(ctx),
165
+ change: async (op, ctx) => (op === "enable" ? linux.enable(ctx) : linux.disable(ctx)),
166
+ }
167
+ : shellBackend;
168
+ const change = async (op: "enable" | "disable", ctx: DesktopContext): Promise<AutostartState> => {
169
+ const answer = await backend.change(op, ctx);
170
+ const error = failure(op, answer, platform);
171
+ if (error) throw error;
172
+ return state(answer.status);
173
+ };
174
+ return defineDesktopPlugin<AutostartApi>({
175
+ id: "autostart",
176
+ methods: {
177
+ enable: (_args, ctx) => change("enable", ctx),
178
+ disable: (_args, ctx) => change("disable", ctx),
179
+ isEnabled: async (_args, ctx) => state((await backend.status(ctx)).status),
180
+ openSettings: async (_args, ctx) => {
181
+ if (platform === "linux")
182
+ throw new AkanNativeError("UNSUPPORTED", "Linux desktops have no common settings page for startup apps");
183
+ await ctx.shell("autostart.openSettings");
184
+ },
185
+ },
186
+ });
187
+ }
188
+
189
+ export default createDesktopAutostart();
@@ -0,0 +1,51 @@
1
+ import { definePlugin } from "../../../packages/core/src/index.ts";
2
+
3
+ /**
4
+ * Launch the app when the user logs in (plugins.md §5).
5
+ *
6
+ * - macOS 13+: SMAppService.mainApp. The app itself becomes a login item under System Settings ›
7
+ * General › Login Items › "Open at Login"; no permission prompt, but macOS shows a "Login Item
8
+ * Added" notification. The user can switch it off there: then `status` is "requiresApproval"
9
+ * and enable() rejects with PERMISSION_DENIED; openSettings() takes the user to that page.
10
+ * - `status` is macOS's own (SMAppService.Status):
11
+ * "enabled": registered and will launch at login.
12
+ * "notRegistered": not registered (typically after disable()).
13
+ * "requiresApproval": registered, but switched off by the user in System Settings.
14
+ * "notFound": macOS has no login item record for this app, e.g. it never called enable().
15
+ * Seen on macOS 26 for an ad-hoc signed bundle that never registered; not an error.
16
+ * `enabled` is `status === "enabled"`.
17
+ * - The registration belongs to the app bundle: enable() it from the copy users run, normally
18
+ * the one in /Applications. A bundle whose signature macOS does not accept is refused
19
+ * (INTERNAL, "invalid signature").
20
+ * - enable() when enabled and disable() when not are no-ops that resolve.
21
+ * - Windows: a value named after the app id under HKCU\Software\Microsoft\Windows\CurrentVersion\Run
22
+ * that starts this .exe. The user can switch it off in Settings › Apps › Startup or Task Manager:
23
+ * then `status` is "requiresApproval" and enable() rejects with PERMISSION_DENIED; openSettings()
24
+ * opens that page. disable() removes the value and that switch. Never "notFound".
25
+ * - Linux: an XDG autostart entry, ~/.config/autostart/<app id>.desktop, that starts this
26
+ * executable ($APPIMAGE for an AppImage). An entry the user switched off (Hidden=true,
27
+ * X-GNOME-Autostart-enabled=false) reads "requiresApproval", and enable() switches it on again:
28
+ * Linux has no approval system. openSettings() is UNSUPPORTED (no common settings page). Never "notFound".
29
+ * - Web, iOS and Android: UNSUPPORTED.
30
+ */
31
+ export type AutostartStatus = "enabled" | "notRegistered" | "requiresApproval" | "notFound";
32
+
33
+ export interface AutostartState {
34
+ enabled: boolean;
35
+ status: AutostartStatus;
36
+ }
37
+
38
+ export interface AutostartApi {
39
+ /** Registers the app to open at login. */
40
+ enable(): Promise<AutostartState>;
41
+ /** Stops opening at login. The running app keeps running. */
42
+ disable(): Promise<AutostartState>;
43
+ /** Reads the state without changing it. */
44
+ isEnabled(): Promise<AutostartState>;
45
+ /** Opens System Settings at Login Items, or Settings › Apps › Startup on Windows (to switch a "requiresApproval" item back on). */
46
+ openSettings(): Promise<void>;
47
+ }
48
+
49
+ export const autostart = definePlugin<AutostartApi>("autostart", {
50
+ methods: ["enable", "disable", "isEnabled", "openSettings"],
51
+ });
@@ -0,0 +1,92 @@
1
+ import UserNotifications
2
+
3
+ /// The app icon badge through UNUserNotificationCenter.setBadgeCount (iOS 16), plugins.md §4.6.
4
+ /// - Not UIApplication.applicationIconBadgeNumber, which tao/src/platform_impl/ios/badge.rs:8-15 and
5
+ /// capacitor-plugins/local-notifications/.../LocalNotificationsPlugin.swift:635 set: it is
6
+ /// deprecated since iOS 17 and has no replacement getter, which is why there is no get().
7
+ /// - Badges belong to the notification permission. tao sets the number without looking and the
8
+ /// badge silently never appears; here set() checks the settings first and rejects
9
+ /// PERMISSION_DENIED, the way plugins/local-notifications answers schedule() without permission.
10
+ /// "granted" needs an authorization that shows badges: provisional authorization delivers quietly
11
+ /// without badges, so it counts as "prompt" (requestPermission asks for the full one).
12
+ /// - requestPermission asks for alerts, sounds and badges together, the set of
13
+ /// plugins/local-notifications and capacitor-plugins/push-notifications/.../PushNotificationsHandler.swift:9.
14
+ /// iOS prompts once per app, and the options of that first request are what the user grants, so a
15
+ /// badge-only request would leave a later notifications prompt without alerts.
16
+ /// - clear() resolves without the permission: no badge can be showing then.
17
+ /// Arguments arrive decoded by the generated BadgePluginSpec (PL-10); the range is checked here.
18
+ final class BadgePlugin: BadgePluginSpec {
19
+ static let id = "badge"
20
+ private static let maxCount = 2_147_483_647.0
21
+
22
+ init(context: AkanNativePluginContext) {}
23
+
24
+ func set(_ args: BadgeSetArgs, _ reply: AkanNativeReply<Void>) {
25
+ let value = args.count
26
+ guard value.rounded() == value, value >= 0, value <= Self.maxCount else {
27
+ return reply.reject(.invalidArgs, "count must be an integer from 0 to 2147483647")
28
+ }
29
+ let count = Int(value)
30
+ Task {
31
+ let center = UNUserNotificationCenter.current()
32
+ guard Self.state(await center.notificationSettings()) == .granted else {
33
+ return reply.reject(.permissionDenied, "badge permission is not granted (call requestPermission)")
34
+ }
35
+ do {
36
+ try await center.setBadgeCount(count)
37
+ reply.resolve()
38
+ } catch {
39
+ reply.reject(Self.code(error), "setting the badge failed: \(error.localizedDescription)")
40
+ }
41
+ }
42
+ }
43
+
44
+ func clear(_ reply: AkanNativeReply<Void>) {
45
+ Task {
46
+ let center = UNUserNotificationCenter.current()
47
+ guard Self.state(await center.notificationSettings()) == .granted else { return reply.resolve() }
48
+ do {
49
+ try await center.setBadgeCount(0)
50
+ reply.resolve()
51
+ } catch {
52
+ reply.reject(Self.code(error), "clearing the badge failed: \(error.localizedDescription)")
53
+ }
54
+ }
55
+ }
56
+
57
+ func checkPermission(_ reply: AkanNativeReply<BadgeCheckPermissionResult>) {
58
+ Task {
59
+ reply.resolve(BadgeCheckPermissionResult(badge: Self.state(await UNUserNotificationCenter.current().notificationSettings())))
60
+ }
61
+ }
62
+
63
+ func requestPermission(_ reply: AkanNativeReply<BadgeRequestPermissionResult>) {
64
+ Task {
65
+ let center = UNUserNotificationCenter.current()
66
+ let status = await center.notificationSettings().authorizationStatus
67
+ if status == .notDetermined || status == .provisional {
68
+ do {
69
+ _ = try await center.requestAuthorization(options: [.alert, .sound, .badge])
70
+ } catch {
71
+ return reply.reject(.internalError, "requestAuthorization failed: \(error.localizedDescription)")
72
+ }
73
+ }
74
+ reply.resolve(BadgeRequestPermissionResult(badge: Self.state(await center.notificationSettings())))
75
+ }
76
+ }
77
+
78
+ nonisolated private static func state(_ settings: UNNotificationSettings) -> BadgePermissionState {
79
+ switch settings.authorizationStatus {
80
+ case .notDetermined, .provisional:
81
+ return settings.badgeSetting == .enabled ? .granted : .prompt
82
+ case .denied:
83
+ return .denied
84
+ default: // authorized, ephemeral
85
+ return settings.badgeSetting == .enabled ? .granted : .denied // badges switched off in Settings
86
+ }
87
+ }
88
+
89
+ nonisolated private static func code(_ error: any Error) -> AkanNativeErrorCode {
90
+ (error as? UNError)?.code == .notificationsNotAllowed ? .permissionDenied : .internalError
91
+ }
92
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "id": "badge",
3
+ "apiVersion": 1,
4
+ "methods": ["set", "clear", "checkPermission", "requestPermission"],
5
+ "events": [],
6
+ "codegen": true,
7
+ "web": "./src/web.ts",
8
+ "desktop": "./src/desktop.ts",
9
+ "ios": {
10
+ "sources": ["ios/*.swift"],
11
+ "class": "BadgePlugin",
12
+ "frameworks": ["UserNotifications"]
13
+ },
14
+ "android": null
15
+ }
@@ -0,0 +1,12 @@
1
+ import { AkanNativeError } from "../../../packages/core/src/index.ts";
2
+
3
+ /** The largest count: badges are 32-bit integers on iOS (UNUserNotificationCenter.setBadgeCount takes an NSInteger, tauri clamps to i32). */
4
+ export const MAX_BADGE_COUNT = 2147483647;
5
+
6
+ /** Checks set()'s count; the native implementation checks the same range. */
7
+ export function checkCount(count: unknown): number {
8
+ if (typeof count !== "number" || !Number.isInteger(count) || count < 0 || count > MAX_BADGE_COUNT) {
9
+ throw new AkanNativeError("INVALID_ARGS", `count must be an integer from 0 to ${MAX_BADGE_COUNT}`);
10
+ }
11
+ return count;
12
+ }
@@ -0,0 +1,24 @@
1
+
2
+
3
+ import { defineDesktopPlugin } from "../../../packages/desktop/src/plugin.ts";
4
+ import { checkCount } from "./count.ts";
5
+ import type { BadgeApi } from "./index.ts";
6
+
7
+ export default defineDesktopPlugin<BadgeApi>({
8
+ id: "badge",
9
+ methods: {
10
+ async set(options, ctx) {
11
+ const count = checkCount(options?.count);
12
+ await ctx.shell("dock.setBadge", { label: count === 0 ? null : String(count) });
13
+ },
14
+ async clear(_args, ctx) {
15
+ await ctx.shell("dock.setBadge", { label: null });
16
+ },
17
+ async checkPermission() {
18
+ return { badge: "granted" as const };
19
+ },
20
+ async requestPermission() {
21
+ return { badge: "granted" as const };
22
+ },
23
+ },
24
+ });
@@ -0,0 +1,40 @@
1
+ import { definePlugin } from "../../../packages/core/src/index.ts";
2
+ import { web } from "./web.ts";
3
+
4
+ export { checkCount, MAX_BADGE_COUNT } from "./count.ts";
5
+
6
+ export type PermissionState = "granted" | "denied" | "prompt";
7
+
8
+ /**
9
+ * The number on the app icon (plugins.md §4.6).
10
+ *
11
+ * - iOS: UNUserNotificationCenter.setBadgeCount. Badges are part of the notification permission:
12
+ * set() rejects PERMISSION_DENIED until requestPermission() was granted, or when the user
13
+ * switched badges off for the app. The prompt asks for alerts, sounds and badges together
14
+ * (one prompt per app), the same set as @akanjs/native/plugins/local-notifications.
15
+ * - Web: the Badging API (navigator.setAppBadge), shown for installed web apps (Chromium PWAs;
16
+ * Safari home screen / Dock web apps, which also need the notification permission). Browsers
17
+ * without it reject UNSUPPORTED. The API has no permission of its own, so the permission
18
+ * methods answer "granted" there.
19
+ * - Desktop, through the dock plugin's badge (no permission, "granted"): the Dock tile's label on
20
+ * macOS; on Windows the taskbar buttons' overlay icon (counts over 99 as "99+"); on Linux the
21
+ * launcher entry's count, shown by docks that support it once the app is installed with its
22
+ * desktop file (@akanjs/native/plugins/dock).
23
+ * - Android has no badge API (launchers draw dots for notifications): every method rejects
24
+ * UNSUPPORTED there.
25
+ */
26
+ export interface BadgeApi {
27
+ /** Shows `count` (an integer from 0 to 2147483647) on the app icon; 0 removes the badge. */
28
+ set(options: { count: number }): Promise<void>;
29
+ /** Removes the badge. Resolves without the permission as well (no badge can be shown then). */
30
+ clear(): Promise<void>;
31
+ /** Never prompts. */
32
+ checkPermission(): Promise<{ badge: PermissionState }>;
33
+ /** Prompts when the state is "prompt"; otherwise answers like checkPermission. */
34
+ requestPermission(): Promise<{ badge: PermissionState }>;
35
+ }
36
+
37
+ export const badge = definePlugin<BadgeApi>("badge", {
38
+ methods: ["set", "clear", "checkPermission", "requestPermission"],
39
+ web,
40
+ });
@@ -0,0 +1,37 @@
1
+ import { AkanNativeError, defineWebPlugin } from "../../../packages/core/src/index.ts";
2
+ import { checkCount } from "./count.ts";
3
+ import type { BadgeApi } from "./index.ts";
4
+
5
+ interface BadgingNavigator {
6
+ setAppBadge?: (count?: number) => Promise<void>;
7
+ clearAppBadge?: () => Promise<void>;
8
+ }
9
+
10
+ function badging(): Required<BadgingNavigator> {
11
+ const nav = (typeof navigator === "undefined" ? undefined : navigator) as BadgingNavigator | undefined;
12
+ if (typeof nav?.setAppBadge !== "function" || typeof nav.clearAppBadge !== "function") {
13
+ throw new AkanNativeError("UNSUPPORTED", "this browser has no Badging API (navigator.setAppBadge)");
14
+ }
15
+ return { setAppBadge: nav.setAppBadge.bind(nav), clearAppBadge: nav.clearAppBadge.bind(nav) };
16
+ }
17
+
18
+ export const web = defineWebPlugin<BadgeApi>({
19
+ methods: {
20
+ async set(options) {
21
+ const count = checkCount(options?.count);
22
+ const api = badging();
23
+ await (count === 0 ? api.clearAppBadge() : api.setAppBadge(count));
24
+ },
25
+ async clear() {
26
+ await badging().clearAppBadge();
27
+ },
28
+ async checkPermission() {
29
+ badging();
30
+ return { badge: "granted" };
31
+ },
32
+ async requestPermission() {
33
+ badging();
34
+ return { badge: "granted" };
35
+ },
36
+ },
37
+ });
@@ -0,0 +1,179 @@
1
+ package com.akanjs.plugins.biometric
2
+
3
+ import android.app.Activity
4
+ import android.app.KeyguardManager
5
+ import android.content.pm.PackageManager
6
+ import android.hardware.biometrics.BiometricManager
7
+ import android.hardware.biometrics.BiometricManager.Authenticators.BIOMETRIC_WEAK
8
+ import android.hardware.biometrics.BiometricManager.Authenticators.DEVICE_CREDENTIAL
9
+ import android.hardware.biometrics.BiometricPrompt
10
+ import android.os.Build
11
+ import android.os.CancellationSignal
12
+ import com.akanjs.runtime.AkanNativeErrorCode
13
+ import com.akanjs.runtime.AkanNativePluginContext
14
+ import com.akanjs.runtime.AkanNativeReply
15
+ import com.akanjs.runtime.AkanNativeVoidReply
16
+
17
+ /**
18
+ * Framework android.hardware.biometrics.BiometricPrompt instead of androidx.biometric (plugins.md §2).
19
+ * tauri-plugins-workspace/plugins/biometric/android needs a separate AppCompat BiometricActivity
20
+ * because the androidx prompt is a Fragment; the framework prompt is system UI started from any
21
+ * Context, so it runs straight from the shell's Activity. Kept from Tauri:
22
+ * - BIOMETRIC_WEAK (Class 2) like Tauri's status(): plain presence checks need no Class 3 sensor.
23
+ * BIOMETRIC_STRONG only matters for a CryptoObject-bound key, which this API does not offer.
24
+ * - A negative button cannot be combined with DEVICE_CREDENTIAL (the builder throws).
25
+ * - The sensor kind comes from PackageManager features (first of fingerprint, face, iris).
26
+ * - KeyguardManager.isDeviceSecure tells whether a PIN / pattern / password exists.
27
+ * USE_BIOMETRIC is a normal permission (granted at install).
28
+ * API 29 has one tier and no authenticator types (both 30): canAuthenticate() counts only strong
29
+ * biometrics and never the screen lock, so "credential allowed" is answered with isDeviceSecure, and
30
+ * without a usable biometric the screen lock is asked through KeyguardManager's confirm intent, as
31
+ * androidx.biometric does there (Tauri BiometricPlugin.kt:115-120, BiometricActivity.kt:56-65).
32
+ * Arguments arrive decoded and type-checked by the generated BiometricPluginSpec (PL-10).
33
+ */
34
+ class BiometricPlugin(private val context: AkanNativePluginContext) : BiometricPluginSpec {
35
+ private var pending: CancellationSignal? = null
36
+
37
+ override fun isAvailable(reply: AkanNativeReply<BiometricStatus>) = reply.resolve(status())
38
+
39
+ override fun destroy() {
40
+ pending?.cancel()
41
+ pending = null
42
+ }
43
+
44
+ private val manager: BiometricManager? get() = context.activity.getSystemService(BiometricManager::class.java)
45
+
46
+ private fun sensor(): BiometricBiometryType {
47
+ val pm = context.activity.packageManager
48
+ return when {
49
+ pm.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT) -> BiometricBiometryType.FINGERPRINT
50
+ pm.hasSystemFeature(PackageManager.FEATURE_FACE) -> BiometricBiometryType.FACE
51
+ pm.hasSystemFeature(PackageManager.FEATURE_IRIS) -> BiometricBiometryType.IRIS
52
+ else -> BiometricBiometryType.NONE
53
+ }
54
+ }
55
+
56
+ private fun deviceSecure(): Boolean = context.activity.getSystemService(KeyguardManager::class.java)?.isDeviceSecure == true
57
+
58
+ /** Biometrics only (BIOMETRIC_WEAK on 30+; API 29's single tier). */
59
+ private fun biometricCode(): Int {
60
+ val m = manager ?: return BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE
61
+ return if (Build.VERSION.SDK_INT >= 30) Api30.canAuthenticate(m, BIOMETRIC_WEAK) else @Suppress("DEPRECATION") m.canAuthenticate()
62
+ }
63
+
64
+ private fun status(): BiometricStatus {
65
+ val code = biometricCode()
66
+ val reason = when (code) {
67
+ BiometricManager.BIOMETRIC_SUCCESS -> null
68
+ BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED -> BiometricUnavailableReason.NOT_ENROLLED
69
+ BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE -> BiometricUnavailableReason.NO_HARDWARE
70
+ BiometricManager.BIOMETRIC_ERROR_NOT_ENABLED_FOR_APPS -> BiometricUnavailableReason.DENIED // Settings: "use for apps" off
71
+ else -> BiometricUnavailableReason.UNAVAILABLE // HW_UNAVAILABLE, SECURITY_UPDATE_REQUIRED, IDENTITY_CHECK_NOT_ACTIVE
72
+ }
73
+ return BiometricStatus(
74
+ available = code == BiometricManager.BIOMETRIC_SUCCESS,
75
+ type = if (code == BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE) BiometricBiometryType.NONE else sensor(),
76
+ reason = reason,
77
+ deviceCredential = deviceSecure(),
78
+ )
79
+ }
80
+
81
+ override fun authenticate(args: BiometricAuthenticateOptions, reply: AkanNativeVoidReply) {
82
+ val reason = args.reason
83
+ if (reason.isEmpty()) return reply.reject(AkanNativeErrorCode.INVALID_ARGS, "reason must be a non-empty string")
84
+ if (pending != null) return reply.reject(AkanNativeErrorCode.CANCELLED, "another authentication is in progress")
85
+ val allowCredential = args.allowDeviceCredential == true
86
+ val authenticators = if (allowCredential) BIOMETRIC_WEAK or DEVICE_CREDENTIAL else BIOMETRIC_WEAK
87
+ val activity = context.activity
88
+ val title = args.title?.takeIf { it.isNotEmpty() }
89
+ val code = when {
90
+ Build.VERSION.SDK_INT >= 30 -> manager?.let { Api30.canAuthenticate(it, authenticators) } ?: BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE
91
+ else -> biometricCode()
92
+ }
93
+ if (code != BiometricManager.BIOMETRIC_SUCCESS) {
94
+ // API 29: the screen lock alone, when allowed and set up.
95
+ if (Build.VERSION.SDK_INT < 30 && allowCredential && deviceSecure()) return confirmCredential(activity, title, reason, reply)
96
+ val (error, message) = unavailable(code, allowCredential)
97
+ return reply.reject(error, message)
98
+ }
99
+
100
+ val builder = BiometricPrompt.Builder(activity)
101
+ .setTitle(title ?: reason) // required: build() throws without a title
102
+ if (Build.VERSION.SDK_INT >= 30) Api30.allow(builder, authenticators)
103
+ else @Suppress("DEPRECATION") builder.setDeviceCredentialAllowed(allowCredential)
104
+ if (title != null) builder.setSubtitle(reason)
105
+ val signal = CancellationSignal()
106
+ var done = false
107
+ val finish = { settle: AkanNativeVoidReply.() -> Unit ->
108
+ if (!done) {
109
+ done = true
110
+ if (pending === signal) pending = null
111
+ reply.settle()
112
+ }
113
+ }
114
+ if (!allowCredential) {
115
+ val cancel = args.cancelTitle?.takeIf { it.isNotEmpty() } ?: activity.getString(android.R.string.cancel)
116
+ builder.setNegativeButton(cancel, activity.mainExecutor) { _, _ -> finish { reject(AkanNativeErrorCode.CANCELLED, "authentication was cancelled") } }
117
+ }
118
+ pending = signal
119
+ // The prompt belongs to its call: cancelled (AbortSignal) or with its page gone, it goes away.
120
+ reply.onCancel {
121
+ done = true
122
+ if (pending === signal) pending = null
123
+ signal.cancel()
124
+ }
125
+ try {
126
+ builder.build().authenticate(signal, activity.mainExecutor, object : BiometricPrompt.AuthenticationCallback() {
127
+ override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) = finish { resolve() }
128
+
129
+ override fun onAuthenticationError(errorCode: Int, errString: CharSequence) =
130
+ finish { reject(errorFor(errorCode), errString.toString()) }
131
+
132
+ // onAuthenticationFailed: one attempt did not match; the prompt stays up for another try.
133
+ })
134
+ } catch (e: RuntimeException) { // IllegalArgumentException from the builder, SecurityException without USE_BIOMETRIC
135
+ finish { reject(AkanNativeErrorCode.INTERNAL, e.toString()) }
136
+ }
137
+ }
138
+
139
+ /** API 29 without a usable biometric: the system's screen lock confirmation. */
140
+ private fun confirmCredential(activity: Activity, title: String?, reason: String, reply: AkanNativeVoidReply) {
141
+ @Suppress("DEPRECATION")
142
+ val intent = activity.getSystemService(KeyguardManager::class.java)?.createConfirmDeviceCredentialIntent(title ?: reason, if (title != null) reason else null)
143
+ ?: return reply.reject(AkanNativeErrorCode.PERMISSION_DENIED, "no screen lock is set up")
144
+ try {
145
+ context.startActivityForResult("credential", intent) { result, _ ->
146
+ if (result == Activity.RESULT_OK) reply.resolve() else reply.reject(AkanNativeErrorCode.CANCELLED, "authentication was cancelled")
147
+ }
148
+ } catch (e: RuntimeException) {
149
+ reply.reject(AkanNativeErrorCode.INTERNAL, e.toString())
150
+ }
151
+ }
152
+
153
+ private object Api30 {
154
+ fun canAuthenticate(manager: BiometricManager, authenticators: Int): Int = manager.canAuthenticate(authenticators)
155
+
156
+ fun allow(builder: BiometricPrompt.Builder, authenticators: Int) {
157
+ builder.setAllowedAuthenticators(authenticators)
158
+ }
159
+ }
160
+
161
+ private fun unavailable(code: Int, allowCredential: Boolean): Pair<String, String> = when (code) {
162
+ BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED ->
163
+ AkanNativeErrorCode.PERMISSION_DENIED to if (allowCredential) "no biometrics and no screen lock are set up" else "no biometrics are enrolled"
164
+ BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE -> AkanNativeErrorCode.UNSUPPORTED to "this device has no biometric sensor"
165
+ BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE -> AkanNativeErrorCode.UNSUPPORTED to "the biometric sensor is unavailable"
166
+ BiometricManager.BIOMETRIC_ERROR_NOT_ENABLED_FOR_APPS -> AkanNativeErrorCode.PERMISSION_DENIED to "biometrics are turned off for apps"
167
+ else -> AkanNativeErrorCode.INTERNAL to "biometrics cannot be used (code $code)"
168
+ }
169
+
170
+ private fun errorFor(code: Int): String = when (code) {
171
+ BiometricPrompt.BIOMETRIC_ERROR_USER_CANCELED, BiometricPrompt.BIOMETRIC_ERROR_CANCELED, BiometricPrompt.BIOMETRIC_ERROR_TIMEOUT ->
172
+ AkanNativeErrorCode.CANCELLED
173
+ BiometricPrompt.BIOMETRIC_ERROR_LOCKOUT, BiometricPrompt.BIOMETRIC_ERROR_LOCKOUT_PERMANENT, BiometricPrompt.BIOMETRIC_ERROR_NO_BIOMETRICS,
174
+ BiometricPrompt.BIOMETRIC_ERROR_NO_DEVICE_CREDENTIAL, BiometricPrompt.BIOMETRIC_ERROR_NOT_ENABLED_FOR_APPS ->
175
+ AkanNativeErrorCode.PERMISSION_DENIED
176
+ BiometricPrompt.BIOMETRIC_ERROR_HW_NOT_PRESENT, BiometricPrompt.BIOMETRIC_ERROR_HW_UNAVAILABLE -> AkanNativeErrorCode.UNSUPPORTED
177
+ else -> AkanNativeErrorCode.INTERNAL
178
+ }
179
+ }