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,33 @@
1
+ import { definePlugin } from "../../../packages/core/src/index.ts";
2
+
3
+ /**
4
+ * Small secrets (tokens, keys, passwords) kept by the OS credential store, encrypted at rest.
5
+ * Same shape as @akanjs/native/plugins/preferences; store JSON yourself for structured data.
6
+ *
7
+ * - iOS: Keychain generic passwords, readable after the first unlock, never synced or restored
8
+ * to another device. Keychain items survive uninstalling the app.
9
+ * - Android: values encrypted with an AES-256-GCM key that never leaves AndroidKeyStore.
10
+ * Uninstalling deletes them; values whose key is gone (device transfer) read as null.
11
+ * - macOS: values encrypted with a key kept in the login Keychain (see src/desktop.ts for
12
+ * what that protects against).
13
+ * - Windows: the same, with the key in the Credential Manager (a generic credential).
14
+ * - Linux: the same, with the key in the Secret Service (the login keyring of gnome-keyring,
15
+ * KWallet or KeePassXC). UNSUPPORTED in a session without one.
16
+ * - Web: UNSUPPORTED. A browser has no secret store; do not fall back to localStorage.
17
+ *
18
+ * No hook on purpose: secrets are read where they are used (an API client), not rendered.
19
+ */
20
+ export interface SecureStorageApi {
21
+ /** `{ value: null }` when the key is not stored. */
22
+ get(args: { key: string }): Promise<{ value: string | null }>;
23
+ set(args: { key: string; value: string }): Promise<void>;
24
+ remove(args: { key: string }): Promise<void>;
25
+ /** Stored keys, sorted. */
26
+ keys(): Promise<{ keys: string[] }>;
27
+ /** Removes every key of this app. */
28
+ clear(): Promise<void>;
29
+ }
30
+
31
+ export const secureStorage = definePlugin<SecureStorageApi>("secure-storage", {
32
+ methods: ["get", "set", "remove", "keys", "clear"],
33
+ });
@@ -0,0 +1,218 @@
1
+ package com.akanjs.plugins.share
2
+
3
+ import android.app.Activity
4
+ import android.app.Application
5
+ import android.app.PendingIntent
6
+ import android.content.ActivityNotFoundException
7
+ import android.content.BroadcastReceiver
8
+ import android.content.ClipData
9
+ import android.content.ComponentName
10
+ import android.content.Context
11
+ import android.content.Intent
12
+ import android.content.IntentFilter
13
+ import android.net.Uri
14
+ import android.os.Build
15
+ import android.os.Bundle
16
+ import android.util.Log
17
+ import com.akanjs.runtime.AkanNativeCall
18
+ import com.akanjs.runtime.AkanNativeCompat
19
+ import com.akanjs.runtime.AkanNativeErrorCode
20
+ import com.akanjs.runtime.AkanNativePluginContext
21
+ import com.akanjs.runtime.AkanNativeReply
22
+ import java.io.File
23
+ import java.util.UUID
24
+ import org.json.JSONObject
25
+
26
+ /**
27
+ * ACTION_SEND / ACTION_SEND_MULTIPLE through Intent.createChooser.
28
+ * - Which app was chosen comes back through the chooser's IntentSender
29
+ * (capacitor-plugins/share/…/SharePlugin.java:141-161). Capacitor registers an exported receiver
30
+ * and checks a nonce; here the PendingIntent is explicit (setPackage) and the receiver is
31
+ * RECEIVER_NOT_EXPORTED, so only broadcasts sent as this app arrive. FLAG_MUTABLE lets the chooser
32
+ * fill in EXTRA_CHOSEN_COMPONENT; Android 14 allows that because the intent is explicit.
33
+ * - Targets often answer RESULT_CANCELED even after sharing, so completed = a target was chosen, or
34
+ * the activity went through onStop (the target covered it), or RESULT_OK (:76-87, :215-219).
35
+ * react-native ShareModule.kt:37-54 cannot tell a closed sheet at all.
36
+ * - title → EXTRA_SUBJECT (mail) and EXTRA_TITLE (the sheet's preview title). The intent has one text
37
+ * field, so url is appended to text (Capacitor :117-126).
38
+ * - Files need a content:// URI in the shell's own provider (plugins.md C4), a read grant, and
39
+ * ClipData even for a single file: the grant only reaches the target through ClipData (:192-200).
40
+ * Arguments arrive decoded and type-checked by the generated SharePluginSpec (PL-10).
41
+ */
42
+ class SharePlugin(private val context: AkanNativePluginContext) : SharePluginSpec {
43
+ /**
44
+ * canShare answers false for options it cannot decode instead of rejecting (src/index.ts, as
45
+ * navigator.canShare does); everything else goes through the generated dispatch.
46
+ */
47
+ override fun handle(call: AkanNativeCall) {
48
+ if (call.method == "canShare" && runCatching { ShareOptions.fromAkanNative(call.args, "") }.isFailure) {
49
+ return call.resolve(JSONObject().put("value", false))
50
+ }
51
+ akanNativeDispatch(call)
52
+ }
53
+
54
+ private class Pending(val reply: AkanNativeReply<ShareResult>, val nonce: String) {
55
+ var target: String? = null
56
+ var stopped = false
57
+ }
58
+
59
+ private val activity: Activity get() = context.activity
60
+ private val action = context.activity.packageName + ".akan-native.share.CHOSEN"
61
+ private var pending: Pending? = null
62
+
63
+ private val receiver = object : BroadcastReceiver() {
64
+ override fun onReceive(c: Context, intent: Intent) {
65
+ val p = pending ?: return
66
+ if (intent.getStringExtra(EXTRA_NONCE) != p.nonce) return // a late broadcast from an earlier share
67
+ val chosen = AkanNativeCompat.parcelableExtra(intent, Intent.EXTRA_CHOSEN_COMPONENT, ComponentName::class.java) ?: return
68
+ p.target = chosen.packageName
69
+ }
70
+ }
71
+
72
+ private val lifecycle = object : Application.ActivityLifecycleCallbacks {
73
+ override fun onActivityStopped(a: Activity) {
74
+ pending?.stopped = true
75
+ }
76
+ override fun onActivityCreated(a: Activity, state: Bundle?) {}
77
+ override fun onActivityStarted(a: Activity) {}
78
+ override fun onActivityResumed(a: Activity) {}
79
+ override fun onActivityPaused(a: Activity) {}
80
+ override fun onActivitySaveInstanceState(a: Activity, state: Bundle) {}
81
+ override fun onActivityDestroyed(a: Activity) {}
82
+ }
83
+
84
+ init {
85
+ // Before API 33 RECEIVER_NOT_EXPORTED is ignored and a runtime receiver is exported, so there the
86
+ // sender must hold this app's signature permission (what androidx ContextCompat does); the
87
+ // per-share nonce stays as the second check. The PendingIntent is sent as this app.
88
+ if (Build.VERSION.SDK_INT >= 33) Api33.register(activity, receiver, IntentFilter(action))
89
+ else activity.registerReceiver(receiver, IntentFilter(action), activity.packageName + ".AKAN_NATIVE_INTERNAL_BROADCAST", null)
90
+ activity.registerActivityLifecycleCallbacks(lifecycle) // this activity only (API 29)
91
+ }
92
+
93
+ override fun destroy() {
94
+ runCatching { activity.unregisterReceiver(receiver) }
95
+ activity.unregisterActivityLifecycleCallbacks(lifecycle)
96
+ }
97
+
98
+ private class Problem(val code: String, message: String) : Exception(message)
99
+
100
+ private class Content(val title: String?, val body: String?, val files: List<Pair<File, String>>)
101
+
102
+ // Invalid options are "cannot share", as navigator.canShare answers.
103
+ override fun canShare(args: ShareOptions, reply: AkanNativeReply<ShareCanShareResult>) =
104
+ reply.resolve(ShareCanShareResult(value = reply.call.args.length() == 0 || runCatching { content(args) }.isSuccess))
105
+
106
+ private fun content(args: ShareOptions): Content {
107
+ val title = args.title?.ifEmpty { null }
108
+ val text = args.text?.ifEmpty { null }
109
+ val url = args.url?.ifEmpty { null }
110
+ if (url != null) {
111
+ val scheme = Uri.parse(url).scheme?.lowercase()
112
+ if (scheme == null || scheme in NOT_LINKS) throw Problem(AkanNativeErrorCode.INVALID_ARGS, "url must be an absolute URL (got $url)")
113
+ }
114
+ val files = (args.files ?: emptyList()).map { ref ->
115
+ localFile(ref) ?: throw Problem(AkanNativeErrorCode.NOT_FOUND, "$ref is not a file of this session")
116
+ }
117
+ val body = listOfNotNull(text, url).joinToString(" ").ifEmpty { null }
118
+ if (body == null && files.isEmpty()) throw Problem(AkanNativeErrorCode.INVALID_ARGS, "share needs text, url or files")
119
+ return Content(title, body, files)
120
+ }
121
+
122
+ /** The file and MIME type behind a /__akan_native/file/<id> URL. */
123
+ private fun localFile(ref: String): Pair<File, String>? = context.file(ref)
124
+
125
+ override fun share(args: ShareOptions, reply: AkanNativeReply<ShareResult>) {
126
+ if (pending != null) return reply.reject(AkanNativeErrorCode.CANCELLED, "a share sheet is already open")
127
+ val content = try {
128
+ content(args)
129
+ } catch (e: Problem) {
130
+ return reply.reject(e.code, e.message ?: "invalid share options")
131
+ }
132
+ if (content.files.isEmpty()) return launch(reply, content, emptyList())
133
+ // Copying can take a while for videos: off the main thread.
134
+ Thread {
135
+ try {
136
+ val uris = content.files.mapIndexed { i, (file, mime) -> stage(file, i) to mime }
137
+ context.runOnMain { launch(reply, content, uris) }
138
+ } catch (e: Exception) {
139
+ Log.e("AkanNative", "share: staging files failed", e)
140
+ reply.reject(AkanNativeErrorCode.INTERNAL, "could not prepare the files: $e")
141
+ }
142
+ }.start()
143
+ }
144
+
145
+ /** A content:// URI for [file]: its own if it is already in the provider's folder (camera photos), else a copy. */
146
+ private fun stage(file: File, index: Int): Uri {
147
+ if (NAME.matches(file.name)) {
148
+ val (inPlace, uri) = context.captureTarget(file.name)
149
+ if (inPlace.canonicalPath == file.canonicalPath) return uri
150
+ }
151
+ val safe = file.name.replace(Regex("[^A-Za-z0-9._-]"), "_").takeLast(100)
152
+ val (copy, uri) = context.captureTarget("share-${System.currentTimeMillis()}-$index-$safe")
153
+ file.copyTo(copy, overwrite = true)
154
+ return uri
155
+ }
156
+
157
+ private fun launch(reply: AkanNativeReply<ShareResult>, content: Content, files: List<Pair<Uri, String>>) {
158
+ if (pending != null) return reply.reject(AkanNativeErrorCode.CANCELLED, "a share sheet is already open")
159
+ val send = Intent(if (files.size > 1) Intent.ACTION_SEND_MULTIPLE else Intent.ACTION_SEND)
160
+ content.body?.let { send.putExtra(Intent.EXTRA_TEXT, it) }
161
+ content.title?.let { send.putExtra(Intent.EXTRA_SUBJECT, it).putExtra(Intent.EXTRA_TITLE, it) }
162
+ if (files.isEmpty()) {
163
+ send.type = "text/plain"
164
+ } else {
165
+ send.type = commonType(files.map { it.second })
166
+ val uris = ArrayList(files.map { it.first })
167
+ if (uris.size == 1) send.putExtra(Intent.EXTRA_STREAM, uris[0]) else send.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris)
168
+ val clip = ClipData.newRawUri(null, uris[0])
169
+ for (uri in uris.drop(1)) clip.addItem(ClipData.Item(uri))
170
+ send.clipData = clip
171
+ send.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
172
+ }
173
+
174
+ val nonce = UUID.randomUUID().toString()
175
+ val chosen = Intent(action).setPackage(activity.packageName).putExtra(EXTRA_NONCE, nonce)
176
+ // Mutable so the chooser can add EXTRA_CHOSEN_COMPONENT; below API 31 every PendingIntent is.
177
+ val mutable = if (Build.VERSION.SDK_INT >= 31) PendingIntent.FLAG_MUTABLE else 0
178
+ val sender = PendingIntent.getBroadcast(activity, 0, chosen, PendingIntent.FLAG_UPDATE_CURRENT or mutable).intentSender
179
+ val chooser = Intent.createChooser(send, null, sender)
180
+ val p = Pending(reply, nonce)
181
+ pending = p
182
+ try {
183
+ context.startActivityForResult("share", chooser) { code, _ ->
184
+ pending = null
185
+ reply.resolve(ShareResult(completed = p.target != null || p.stopped || code == Activity.RESULT_OK, target = p.target))
186
+ }
187
+ } catch (e: ActivityNotFoundException) {
188
+ pending = null
189
+ reply.reject(AkanNativeErrorCode.UNSUPPORTED, "no share sheet on this device")
190
+ }
191
+ }
192
+
193
+ override fun onRestoredActivityResult(key: String, resultCode: Int, data: Intent?) {
194
+ // The process died while the sheet was open; the page that asked is gone (plugins.md C6).
195
+ Log.i("AkanNative", "share result after process restart dropped (result=$resultCode)")
196
+ }
197
+
198
+ private companion object {
199
+ const val EXTRA_NONCE = "com.akanjs.share.nonce"
200
+ val NOT_LINKS = setOf("javascript", "data", "blob", "file")
201
+ val NAME = Regex("[A-Za-z0-9_-][A-Za-z0-9._-]{0,127}")
202
+
203
+ // One type → that type; one major type → e.g. image/*; otherwise */*
204
+ // (Capacitor sends */* for every multi-file share).
205
+ fun commonType(types: List<String>): String {
206
+ val distinct = types.map { it.lowercase() }.distinct()
207
+ if (distinct.size == 1) return distinct[0]
208
+ val majors = distinct.map { it.substringBefore('/') }.distinct()
209
+ return if (majors.size == 1) "${majors[0]}/*" else "*/*"
210
+ }
211
+ }
212
+
213
+ private object Api33 {
214
+ fun register(activity: Activity, receiver: BroadcastReceiver, filter: IntentFilter) {
215
+ activity.registerReceiver(receiver, filter, Context.RECEIVER_NOT_EXPORTED)
216
+ }
217
+ }
218
+ }
@@ -0,0 +1,142 @@
1
+ import UIKit
2
+
3
+ /// UIActivityViewController.
4
+ /// - Presented from the topmost view controller; while a share sheet is already up (this plugin's or
5
+ /// the WebView's own navigator.share) the call is CANCELLED
6
+ /// (capacitor-plugins/share/ios/Sources/SharePlugin/SharePlugin.swift:67-78).
7
+ /// - iPad shows the sheet as a popover, which needs an anchor: centered in the presenter, no arrow (:79-87).
8
+ /// - The title becomes the subject (Mail) through UIActivityItemSource, the public API for it;
9
+ /// Capacitor and react-native set the private "subject" key with KVC.
10
+ /// - completionWithItemsHandler: (nil, false) means the sheet was closed. (type, false) means the user
11
+ /// backed out of one activity, and the sheet usually stays up for another choice, so the call waits
12
+ /// (react-native RCTActionSheetManager.mm:287-294); if the sheet did go away it resolves not completed.
13
+ /// - files: /__akan_native/file/<id> URLs of this session, shared as the files themselves.
14
+ /// Arguments arrive decoded and type-checked by the generated SharePluginSpec (PL-10).
15
+ final class SharePlugin: SharePluginSpec {
16
+ static let id = "share"
17
+ private static let notLinks: Set<String> = ["javascript", "data", "blob", "file"]
18
+ private static let filePrefix = "/__akan_native/file/"
19
+ private let context: AkanNativePluginContext
20
+
21
+ /// canShare answers false for options it cannot decode instead of rejecting (src/index.ts, as
22
+ /// navigator.canShare does); everything else goes through the generated dispatch.
23
+ func handle(_ call: AkanNativeCall) {
24
+ if call.method == "canShare", (try? ShareOptions(akanNative: call.args, at: "")) == nil {
25
+ return call.resolve(["value": false])
26
+ }
27
+ akanNativeDispatch(call)
28
+ }
29
+
30
+ init(context: AkanNativePluginContext) {
31
+ self.context = context
32
+ }
33
+
34
+ func canShare(_ args: ShareOptions, _ reply: AkanNativeReply<ShareCanShareResult>) {
35
+ // Invalid options are "cannot share", as navigator.canShare answers.
36
+ reply.resolve(ShareCanShareResult(value: reply.call.args.isEmpty || (try? content(args)) != nil))
37
+ }
38
+
39
+ private struct Content {
40
+ var subject: String?
41
+ var items: [Any]
42
+ }
43
+
44
+ private struct Problem: Error {
45
+ let code: AkanNativeErrorCode
46
+ let message: String
47
+ }
48
+
49
+ private func content(_ args: ShareOptions) throws(Problem) -> Content {
50
+ func text(_ value: String?) -> String? {
51
+ value?.isEmpty == false ? value : nil
52
+ }
53
+ let subject = text(args.title)
54
+ var items: [Any] = []
55
+ if let body = text(args.text) { items.append(body) }
56
+ if let link = text(args.url) {
57
+ guard let url = URL(string: link), let scheme = url.scheme?.lowercased(), !Self.notLinks.contains(scheme) else {
58
+ throw Problem(code: .invalidArgs, message: "url must be an absolute URL (got \(link))")
59
+ }
60
+ items.append(url)
61
+ }
62
+ for ref in args.files ?? [] {
63
+ guard let id = Self.fileId(ref) else {
64
+ throw Problem(code: .invalidArgs, message: "files must be /__akan_native/file/ URLs")
65
+ }
66
+ guard let local = localFile(id) else { throw Problem(code: .notFound, message: "\(ref) is not a file of this session") }
67
+ items.append(local)
68
+ }
69
+ guard !items.isEmpty else { throw Problem(code: .invalidArgs, message: "share needs text, url or files") }
70
+ return Content(subject: subject, items: items)
71
+ }
72
+
73
+ /// "/__akan_native/file/<id>" or its absolute form "app://localhost/__akan_native/file/<id>".
74
+ private static func fileId(_ ref: String) -> String? {
75
+ var path = ref
76
+ if !ref.hasPrefix("/") {
77
+ guard let url = URL(string: ref), url.scheme == "app", url.host == "localhost" else { return nil }
78
+ path = url.path
79
+ }
80
+ guard path.hasPrefix(filePrefix) else { return nil }
81
+ let id = String(path.dropFirst(filePrefix.count))
82
+ return id.isEmpty || id.contains("/") ? nil : id
83
+ }
84
+
85
+ /// The file behind a FileRef id. AkanNativePluginContext has no lookup for this yet, so this reads the
86
+ /// shell's registry (same module); switch to the context once it offers one.
87
+ private func localFile(_ id: String) -> URL? {
88
+ context.file("/__akan_native/file/\(id)")?.url
89
+ }
90
+
91
+ func share(_ args: ShareOptions, _ reply: AkanNativeReply<ShareResult>) {
92
+ let content: Content
93
+ do {
94
+ content = try self.content(args)
95
+ } catch {
96
+ return reply.reject(error.code, error.message)
97
+ }
98
+ guard var presenter = context.viewController else { return reply.reject(.internalError, "no view controller to present from") }
99
+ while let next = presenter.presentedViewController {
100
+ if next is UIActivityViewController { return reply.reject(.cancelled, "a share sheet is already open") }
101
+ presenter = next
102
+ }
103
+ let view = presenter.view!
104
+
105
+ var items = content.items
106
+ if let subject = content.subject, let first = items.first { items[0] = SubjectItem(first, subject: subject) }
107
+ let sheet = UIActivityViewController(activityItems: items, applicationActivities: nil)
108
+ sheet.completionWithItemsHandler = { [weak sheet] type, completed, _, error in
109
+ if let error { return reply.reject(.internalError, "sharing failed: \(error.localizedDescription)") }
110
+ if completed { return reply.resolve(ShareResult(completed: true, target: type?.rawValue)) }
111
+ if type == nil { return reply.resolve(ShareResult(completed: false)) }
112
+ DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { [weak sheet] in
113
+ MainActor.assumeIsolated {
114
+ if sheet?.presentingViewController == nil { reply.resolve(ShareResult(completed: false)) }
115
+ }
116
+ }
117
+ }
118
+ if let popover = sheet.popoverPresentationController {
119
+ popover.sourceView = view
120
+ popover.sourceRect = CGRect(x: view.bounds.midX, y: view.bounds.midY, width: 0, height: 0)
121
+ popover.permittedArrowDirections = []
122
+ }
123
+ context.present(sheet) { reply.reject(.internalError, "nothing to present the share sheet from") }
124
+ }
125
+ }
126
+
127
+ /// Wraps the first item to give activities a subject line.
128
+ private final class SubjectItem: NSObject, UIActivityItemSource {
129
+ private let item: Any
130
+ private let subject: String
131
+
132
+ init(_ item: Any, subject: String) {
133
+ self.item = item
134
+ self.subject = subject
135
+ }
136
+
137
+ func activityViewControllerPlaceholderItem(_ controller: UIActivityViewController) -> Any { item }
138
+
139
+ func activityViewController(_ controller: UIActivityViewController, itemForActivityType type: UIActivity.ActivityType?) -> Any? { item }
140
+
141
+ func activityViewController(_ controller: UIActivityViewController, subjectForActivityType type: UIActivity.ActivityType?) -> String { subject }
142
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "id": "share",
3
+ "apiVersion": 1,
4
+ "methods": ["share", "canShare"],
5
+ "events": [],
6
+ "codegen": true,
7
+ "web": "./src/web.ts",
8
+ "desktop": "web",
9
+ "ios": {
10
+ "sources": ["ios/*.swift"],
11
+ "class": "SharePlugin"
12
+ },
13
+ "android": {
14
+ "sources": ["android/*.kt"],
15
+ "class": "com.akanjs.plugins.share.SharePlugin",
16
+ "manifestXml": "<permission android:name=\"${applicationId}.AKAN_NATIVE_INTERNAL_BROADCAST\" android:protectionLevel=\"signature\" />\n <uses-permission android:name=\"${applicationId}.AKAN_NATIVE_INTERNAL_BROADCAST\" />"
17
+ }
18
+ }
@@ -0,0 +1,87 @@
1
+
2
+
3
+ import * as React from "react";
4
+ import { AkanNativeError, definePlugin } from "../../../packages/core/src/index.ts";
5
+ import { web, webShareAvailable } from "./web.ts";
6
+
7
+ export interface ShareOptions {
8
+ /** Subject line for mail-like targets, preview title on Android. */
9
+ title?: string;
10
+ text?: string;
11
+ /** An absolute URL. On Android it is appended to the text (the intent has one text field). */
12
+ url?: string;
13
+ /**
14
+ * Files as FileRef URLs (`/__akan_native/file/<id>`) returned by other plugins, e.g. camera.takePhoto().
15
+ * On the web also blob: and same-origin URLs. Not yet on Android (see canShare).
16
+ */
17
+ files?: string[];
18
+ }
19
+
20
+ export interface ShareResult {
21
+ /** False when the user closed the share sheet without choosing a target. */
22
+ completed: boolean;
23
+ /**
24
+ * What received the share, when the platform tells: the package name on Android, the activity type
25
+ * on iOS (com.apple.UIKit.activity.Mail, …). Missing on the web and when unknown.
26
+ */
27
+ target?: string;
28
+ }
29
+
30
+ /**
31
+ * The system share sheet: UIActivityViewController (iOS), the Android chooser, navigator.share
32
+ * (web, and the desktop WebView: WKWebView on macOS, WebView2 on Windows). Linux has no share
33
+ * sheet (WebKitGTK has no navigator.share): canShare() answers false and share() rejects
34
+ * UNSUPPORTED. Closing the sheet resolves `{ completed: false }` rather than rejecting, as
35
+ * react-native Share does ("dismissedAction").
36
+ */
37
+ export interface ShareApi {
38
+ /**
39
+ * Opens the share sheet. Needs a user gesture on the web (call it from a click, before any await).
40
+ * Rejects INVALID_ARGS without text, url or files, CANCELLED while another share sheet is open,
41
+ * UNSUPPORTED where sharing (or sharing these files) is not available.
42
+ */
43
+ share(options: ShareOptions): Promise<ShareResult>;
44
+ /**
45
+ * Whether share() would work for these options; without options (or with {}) whether a share sheet
46
+ * exists at all. Invalid options answer false instead of rejecting, as navigator.canShare does.
47
+ */
48
+ canShare(options?: ShareOptions): Promise<{ value: boolean }>;
49
+ }
50
+
51
+ export const share = definePlugin<ShareApi>("share", {
52
+ methods: ["share", "canShare"],
53
+ web,
54
+ });
55
+
56
+ export interface UseShare {
57
+ /** False where no share sheet exists (desktop Firefox, insecure origins): hide the share button. */
58
+ supported: boolean;
59
+ pending: boolean;
60
+ /** Last failure. Closing the sheet is not a failure. */
61
+ error: AkanNativeError | null;
62
+ /** Resolves null on failure (see `error`). */
63
+ share(options: ShareOptions): Promise<ShareResult | null>;
64
+ }
65
+
66
+ export function useShare(): UseShare {
67
+ const [pending, setPending] = React.useState(false);
68
+ const [error, setError] = React.useState<AkanNativeError | null>(null);
69
+
70
+ const run = React.useCallback(async (options: ShareOptions) => {
71
+ setPending(true);
72
+ setError(null);
73
+ try {
74
+
75
+ return await share.share(options);
76
+ } catch (e) {
77
+ const err = AkanNativeError.from(e);
78
+ if (err.code !== "CANCELLED") setError(err);
79
+ return null;
80
+ } finally {
81
+ setPending(false);
82
+ }
83
+ }, []);
84
+
85
+ const where = share.implementation("share");
86
+ return { supported: where === "native" || (where === "web" && webShareAvailable()), pending, error, share: run };
87
+ }
@@ -0,0 +1,43 @@
1
+ import { AkanNativeError } from "../../../packages/core/src/index.ts";
2
+ import type { ShareOptions } from "./index.ts";
3
+
4
+ const NOT_LINKS = ["javascript:", "data:", "blob:", "file:"];
5
+
6
+ const invalid = (message: string) => new AkanNativeError("INVALID_ARGS", message);
7
+
8
+ /**
9
+ * Normalizes share() options the way the native implementations read them: empty strings and
10
+ * null count as missing, at least one of text, url or files is required, url is absolute.
11
+ */
12
+ export function checkOptions(options: unknown): ShareOptions {
13
+ if (!options || typeof options !== "object" || Array.isArray(options))
14
+ throw invalid("share options must be an object");
15
+ const { title, text, url, files } = options as Record<string, unknown>;
16
+ const out: ShareOptions = {};
17
+ for (const [key, value] of [
18
+ ["title", title],
19
+ ["text", text],
20
+ ["url", url],
21
+ ] as const) {
22
+ if (value === undefined || value === null || value === "") continue;
23
+ if (typeof value !== "string") throw invalid(`${key} must be a string`);
24
+ out[key] = value;
25
+ }
26
+ if (files !== undefined && files !== null) {
27
+ if (!Array.isArray(files) || files.some((f) => typeof f !== "string" || f.length === 0))
28
+ throw invalid("files must be an array of file URLs");
29
+ if (files.length > 0) out.files = files as string[];
30
+ }
31
+ if (!out.text && !out.url && !out.files) throw invalid("share needs text, url or files");
32
+ if (out.url) {
33
+ let parsed: URL;
34
+ try {
35
+ parsed = new URL(out.url);
36
+ } catch {
37
+ throw invalid(`url must be an absolute URL (got ${out.url})`);
38
+ }
39
+ if (NOT_LINKS.includes(parsed.protocol))
40
+ throw invalid(`${parsed.protocol} URLs cannot be shared as links; use files`);
41
+ }
42
+ return out;
43
+ }
@@ -0,0 +1,116 @@
1
+ import { AkanNativeError, defineWebPlugin } from "../../../packages/core/src/index.ts";
2
+ import type { ShareApi, ShareOptions, ShareResult } from "./index.ts";
3
+ import { checkOptions } from "./options.ts";
4
+
5
+ export function webShareAvailable(): boolean {
6
+ return typeof navigator !== "undefined" && typeof navigator.share === "function";
7
+ }
8
+
9
+ const EXTENSIONS: Record<string, string> = {
10
+ "image/jpeg": "jpg",
11
+ "image/png": "png",
12
+ "image/gif": "gif",
13
+ "image/webp": "webp",
14
+ "image/heic": "heic",
15
+ "application/pdf": "pdf",
16
+ "text/plain": "txt",
17
+ "video/mp4": "mp4",
18
+ "video/quicktime": "mov",
19
+ "audio/mpeg": "mp3",
20
+ };
21
+
22
+ /** A file name for the share target: the URL's last path segment if it has an extension. */
23
+ export function fileName(url: string, mime: string, index: number, base?: string): string {
24
+ if (!url.startsWith("blob:") && !url.startsWith("data:")) {
25
+ try {
26
+ const last = new URL(url, base ?? globalThis.location?.href).pathname.split("/").pop();
27
+ if (last && /\.[A-Za-z0-9]{1,8}$/.test(last)) return decodeURIComponent(last);
28
+ } catch {
29
+ }
30
+ }
31
+ const type = mime.split(";")[0]!.trim().toLowerCase();
32
+ const ext = EXTENSIONS[type] ?? (type.split("/")[1]?.replace(/[^a-z0-9]/g, "") || "bin");
33
+ return `file${index + 1}.${ext}`;
34
+ }
35
+
36
+ async function loadFiles(urls: string[]): Promise<File[]> {
37
+ return Promise.all(
38
+ urls.map(async (url, i) => {
39
+ let response: Response;
40
+ try {
41
+ response = await fetch(url);
42
+ } catch (error) {
43
+ throw new AkanNativeError("NOT_FOUND", `could not read ${url}`, { cause: error });
44
+ }
45
+ if (!response.ok) throw new AkanNativeError("NOT_FOUND", `could not read ${url} (${response.status})`);
46
+ const blob = await response.blob();
47
+ return new File([blob], fileName(url, blob.type, i), { type: blob.type });
48
+ }),
49
+ );
50
+ }
51
+
52
+ function toData(options: ShareOptions): ShareData {
53
+ const data: ShareData = {};
54
+ if (options.title) data.title = options.title;
55
+ if (options.text) data.text = options.text;
56
+ if (options.url) data.url = options.url;
57
+ return data;
58
+ }
59
+
60
+ function run(data: ShareData): Promise<ShareResult> {
61
+ return navigator.share(data).then(
62
+ () => ({ completed: true }),
63
+ (error: unknown) => {
64
+ const name = (error as { name?: string })?.name;
65
+ if (name === "AbortError") return { completed: false };
66
+ if (name === "InvalidStateError") throw new AkanNativeError("CANCELLED", "a share sheet is already open");
67
+ if (name === "TypeError" || name === "DataError")
68
+ throw new AkanNativeError("INVALID_ARGS", String((error as Error).message));
69
+ throw AkanNativeError.from(error);
70
+ },
71
+ );
72
+ }
73
+
74
+ export const web = defineWebPlugin<ShareApi>({
75
+ methods: {
76
+ share(options) {
77
+ const checked = checkOptions(options);
78
+ if (!webShareAvailable()) {
79
+ throw new AkanNativeError(
80
+ "UNSUPPORTED",
81
+ "the Web Share API is not available here (desktop Firefox, insecure context)",
82
+ );
83
+ }
84
+ const data = toData(checked);
85
+ if (!checked.files) return run(data);
86
+ return loadFiles(checked.files).then((files) => {
87
+ const withFiles: ShareData = { ...data, files };
88
+ if (typeof navigator.canShare === "function" && !navigator.canShare(withFiles)) {
89
+ throw new AkanNativeError("UNSUPPORTED", "this browser cannot share these files");
90
+ }
91
+ return run(withFiles);
92
+ });
93
+ },
94
+ async canShare(options) {
95
+ if (!webShareAvailable()) return { value: false };
96
+
97
+ if (!options || Object.keys(options).length === 0) return { value: true };
98
+ let checked: ShareOptions;
99
+ try {
100
+ checked = checkOptions(options);
101
+ } catch {
102
+ return { value: false };
103
+ }
104
+ const data = toData(checked);
105
+ if (typeof navigator.canShare !== "function") return { value: !checked.files };
106
+ if (checked.files) {
107
+ try {
108
+ data.files = await loadFiles(checked.files);
109
+ } catch {
110
+ return { value: false };
111
+ }
112
+ }
113
+ return { value: navigator.canShare(data) };
114
+ },
115
+ },
116
+ });
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "single-instance",
3
+ "apiVersion": 1,
4
+ "methods": [],
5
+ "events": ["secondInstance"],
6
+ "web": null,
7
+ "desktop": "./src/desktop.ts",
8
+ "ios": null,
9
+ "android": null
10
+ }