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,272 @@
1
+
2
+
3
+ /** A scope entry: field → glob. The plugin says which fields it knows (its manifest `scope`). */
4
+ export type ScopeEntry = Record<string, string>;
5
+
6
+ export interface AclGrant {
7
+ plugin: string;
8
+ /** Window ids (1 = the main window), or every window. Mobile and web pages are window 1. */
9
+ windows: "*" | number[];
10
+ /** Methods, `listen:<event>` for subscriptions, or everything. */
11
+ items: "*" | string[];
12
+ /** Absent: no restriction from this grant. */
13
+ allow?: ScopeEntry[];
14
+ deny?: ScopeEntry[];
15
+ }
16
+
17
+ export interface ResolvedAcl {
18
+ grants: AclGrant[];
19
+ /** plugin → items denied everywhere. */
20
+ denied?: Record<string, string[]>;
21
+ }
22
+
23
+ /** What a call may touch. `allow: null`: anything the plugin allows by itself, minus `deny`. */
24
+ export interface CallScope {
25
+ allow: ScopeEntry[] | null;
26
+ deny: ScopeEntry[];
27
+ }
28
+
29
+ export interface Access {
30
+ allowed: boolean;
31
+ /** Only when some matching grant carries scopes. */
32
+ scope?: CallScope;
33
+ }
34
+
35
+ /** What hosts enforce when boot.json's ACL is broken: nothing is allowed (fail-closed). */
36
+ export const DENY_ALL: ResolvedAcl = { grants: [], denied: {} };
37
+
38
+ const isRecord = (v: unknown): v is Record<string, unknown> => typeof v === "object" && v !== null && !Array.isArray(v);
39
+ const isStrings = (v: unknown): v is string[] => Array.isArray(v) && v.every((s) => typeof s === "string");
40
+ const isScopes = (v: unknown) =>
41
+ v === undefined ||
42
+ (Array.isArray(v) && v.every((e) => isRecord(e) && Object.values(e).every((s) => typeof s === "string")));
43
+
44
+ /**
45
+ * Why an ACL from boot.json is not one the hosts can enforce, or null. Every host checks the same
46
+ * shape (Swift AkanNativeAcl.from, Kotlin AkanNativeAcl.from; vectors/acl.json): a malformed part must not
47
+ * loosen the rest, as when one bad denial dropped every denial or one bad grant allowed everything.
48
+ */
49
+ export function aclProblem(value: unknown): string | null {
50
+ if (!isRecord(value) || !Array.isArray(value.grants)) return "acl must be { grants: [...], denied?: {...} }";
51
+ for (const [i, g] of value.grants.entries()) {
52
+ if (!isRecord(g) || typeof g.plugin !== "string" || g.plugin === "") return `grant ${i} has no plugin`;
53
+ if (
54
+ g.windows !== "*" &&
55
+ !(Array.isArray(g.windows) && g.windows.every((w) => Number.isInteger(w) && (w as number) >= 1))
56
+ )
57
+ return `grant ${i}: bad windows`;
58
+ if (g.items !== "*" && !isStrings(g.items)) return `grant ${i}: bad items`;
59
+ if (!isScopes(g.allow) || !isScopes(g.deny)) return `grant ${i}: bad scopes`;
60
+ }
61
+ if (value.denied !== undefined && !(isRecord(value.denied) && Object.values(value.denied).every(isStrings)))
62
+ return "bad denied";
63
+ return null;
64
+ }
65
+
66
+ /**
67
+ * A host's ACL from its boot data. boot.json without one (a build without capabilities, unit
68
+ * tests): null, everything allowed. One that is not well formed: nothing allowed.
69
+ */
70
+ export function loadAcl(boot: { acl?: unknown }): { acl: ResolvedAcl | null; problem: string | null } {
71
+ if (!("acl" in boot) || boot.acl === undefined) return { acl: null, problem: null };
72
+ const problem = aclProblem(boot.acl);
73
+ return problem ? { acl: DENY_ALL, problem } : { acl: boot.acl as ResolvedAcl, problem: null };
74
+ }
75
+
76
+ /** The ACL item of a `$listen` for `event`. */
77
+ export const listenItem = (event: string) => `listen:${event}`;
78
+
79
+ /**
80
+ * The C7 check. Without an ACL (older builds, unit tests) everything is allowed, as before PL-11.
81
+ */
82
+ export function aclCheck(acl: ResolvedAcl | undefined | null, plugin: string, item: string, window = 1): Access {
83
+ if (!acl) return { allowed: true };
84
+ if (acl.denied?.[plugin]?.includes(item)) return { allowed: false };
85
+ const matching = acl.grants.filter(
86
+ (g) =>
87
+ g.plugin === plugin &&
88
+ (g.items === "*" || g.items.includes(item)) &&
89
+ (g.windows === "*" || g.windows.includes(window)),
90
+ );
91
+ if (matching.length === 0) return { allowed: false };
92
+ const allow = matching.some((g) => !g.allow) ? null : matching.flatMap((g) => g.allow!);
93
+ const deny = matching.flatMap((g) => g.deny ?? []);
94
+ return allow === null && deny.length === 0 ? { allowed: true } : { allowed: true, scope: { allow, deny } };
95
+ }
96
+
97
+ const cache = new Map<string, RegExp>();
98
+
99
+ /** The anchored regex for `source`, compiled once. `u`: `?` is one character, not one UTF-16 unit. */
100
+ function compiled(source: string): RegExp {
101
+ let re = cache.get(source);
102
+ if (!re) {
103
+ re = new RegExp(`^(?:${source})$`, "su");
104
+ cache.set(source, re);
105
+ }
106
+ return re;
107
+ }
108
+
109
+ const escape = (c: string) => c.replace(/[\\^$.|+()[\]{}]/g, "\\$&");
110
+
111
+ /**
112
+ * Glob match of the whole `text`. Path mode (`path: true`): `*` and `?` stop at "/", `**` crosses
113
+ * it, `**​/` also matches no folder, and a trailing `/**` also matches the folder itself
114
+ * ("exports/**" covers "exports"). In an allow entry no wildcard matches a name that starts with
115
+ * "." (".env", ".git/"): dot files are allowed only when the pattern names the dot itself
116
+ * (".config/**", "**​/.env"). A deny entry (`deny: true`) covers them too ("private/**" keeps
117
+ * "private/.env" out). Otherwise `*` and `**` match anything (plain values such as a filesystem
118
+ * base; URLs use urlMatch). No other syntax: every other character is literal. Case-sensitive;
119
+ * scopePermits folds case for case-insensitive volumes.
120
+ */
121
+ export function globMatch(pattern: string, text: string, path: boolean, deny = false): boolean {
122
+ return compiled(globSource(pattern, path, deny)).test(text);
123
+ }
124
+
125
+ export function globSource(pattern: string, path: boolean, deny = false): string {
126
+
127
+ const dots = !path || deny;
128
+ const guard = dots ? "" : "(?!\\.)";
129
+ const segment = `${guard}[^/]*`;
130
+ const across = dots ? ".*" : "(?:[^/]|/(?!\\.))*";
131
+ let out = "";
132
+ for (let i = 0; i < pattern.length; i++) {
133
+ const c = pattern[i]!;
134
+ const start = i === 0 || pattern[i - 1] === "/";
135
+ if (c === "*") {
136
+ const double = pattern[i + 1] === "*";
137
+ if (!double) {
138
+ out += path ? (start ? segment : "[^/]*") : ".*";
139
+ continue;
140
+ }
141
+ i++;
142
+ if (!path) out += ".*";
143
+ else if (pattern[i + 1] === "/" && start) {
144
+ out += `(?:${segment}/)*`;
145
+ i++;
146
+ } else if (i === pattern.length - 1 && pattern[i - 2] === "/") {
147
+ out = `${out.slice(0, -1)}(?:/${segment})*`;
148
+ } else out += (start ? guard : "") + across;
149
+ } else if (c === "?") out += path ? (start ? `${guard}[^/]` : "[^/]") : ".";
150
+ else out += escape(c);
151
+ }
152
+ return out;
153
+ }
154
+
155
+ /** `*` (and `**`) → `star`, `?` → one character, everything else literal. */
156
+ function wildcard(pattern: string, text: string, star: string): boolean {
157
+ let out = "";
158
+ for (let i = 0; i < pattern.length; i++) {
159
+ const c = pattern[i]!;
160
+ if (c === "*") {
161
+ while (pattern[i + 1] === "*") i++;
162
+ out += star;
163
+ } else out += c === "?" ? "." : escape(c);
164
+ }
165
+ return compiled(out).test(text);
166
+ }
167
+
168
+ /**
169
+ * A URL split for matching. `rest` is the path of a URL with an authority, or what follows the
170
+ * scheme otherwise (the addresses of mailto:, the number of tel:). Scheme and host are lowercase.
171
+ * A URL's query and fragment are not part of it; in a pattern `?` is a wildcard, so only "/" ends
172
+ * the authority.
173
+ */
174
+ export interface UrlParts {
175
+ scheme: string;
176
+ host: string | null;
177
+ port: string;
178
+ rest: string;
179
+ }
180
+
181
+ export function urlParts(text: string, pattern = false): UrlParts | null {
182
+ const colon = text.indexOf(":");
183
+ if (colon <= 0) return null;
184
+ const scheme = text.slice(0, colon).toLowerCase();
185
+ let rest = text.slice(colon + 1);
186
+ const query = pattern ? -1 : rest.search(/[?#]/);
187
+ if (query >= 0) rest = rest.slice(0, query);
188
+ if (!rest.startsWith("//")) return { scheme, host: null, port: "", rest };
189
+ rest = rest.slice(2);
190
+ const end = rest.indexOf("/");
191
+ let authority = end < 0 ? rest : rest.slice(0, end);
192
+ authority = authority.slice(authority.lastIndexOf("@") + 1);
193
+ const bracket = authority.startsWith("[") ? authority.indexOf("]") + 1 : 0;
194
+ const portColon = authority.indexOf(":", bracket);
195
+ return {
196
+ scheme,
197
+ host: (portColon < 0 ? authority : authority.slice(0, portColon)).toLowerCase(),
198
+ port: portColon < 0 ? "" : authority.slice(portColon + 1),
199
+ rest: end < 0 ? "" : rest.slice(end),
200
+ };
201
+ }
202
+
203
+ const DEFAULT_PORTS: Record<string, string> = { http: "80", https: "443", ws: "80", wss: "443" };
204
+
205
+ /**
206
+ * URL scope match, for the fields a plugin names in scopePermits' `urlFields`: scheme, host, port
207
+ * and the rest are compared separately, so no wildcard reaches from one into another
208
+ * ("https://*.example.com/*" never matches "https://evil.com/x.example.com/"). Scheme and host
209
+ * ignore case, and `*` in the host spans dots (a.b.example.com). A pattern without a port matches
210
+ * only the scheme's default port in an allow entry ("https://api.example.com/*" does not reach a
211
+ * debug server on :8443, as URLPattern strings in Tauri do), but every port in a deny entry (a deny
212
+ * of a host covers all of it); ":*" is any port. A pattern without a path matches any path, and `*`
213
+ * alone every URL; `*` in the path crosses "/". The query and fragment are never compared, and `?`
214
+ * is always a one-character wildcard. A pattern without a scheme matches nothing. `url` is the
215
+ * plugin's normalized URL (percent-encoded, no default port, dot segments resolved).
216
+ */
217
+ export function urlMatch(pattern: string, url: string, deny = false): boolean {
218
+ if (/^\*+$/.test(pattern)) return true;
219
+ const p = urlParts(pattern, true);
220
+ const v = urlParts(url);
221
+ if (!p || !v || (p.host === null) !== (v.host === null)) return false;
222
+ if (!wildcard(p.scheme, v.scheme, "[a-z0-9+.-]*")) return false;
223
+ if (p.host !== null) {
224
+ if (!wildcard(p.host, v.host!, ".*")) return false;
225
+ const port = v.port || DEFAULT_PORTS[v.scheme] || "";
226
+ if (p.port === "" ? !deny && port !== (DEFAULT_PORTS[v.scheme] ?? "") : p.port !== "*" && p.port !== port)
227
+ return false;
228
+ if (p.rest === "") return true;
229
+ }
230
+ return wildcard(p.rest, v.rest, ".*");
231
+ }
232
+
233
+ function entryMatches(
234
+ entry: ScopeEntry,
235
+ value: Record<string, string>,
236
+ pathFields: readonly string[],
237
+ urlFields: readonly string[],
238
+ deny: boolean,
239
+ fold: boolean,
240
+ ): boolean {
241
+ for (const [field, pattern] of Object.entries(entry)) {
242
+ const actual = value[field];
243
+ if (actual === undefined) return false;
244
+ const path = pathFields.includes(field);
245
+ const match = urlFields.includes(field)
246
+ ? urlMatch(pattern, actual, deny)
247
+ : path && fold
248
+ ? globMatch(pattern.toLowerCase(), actual.toLowerCase(), true, deny)
249
+ : globMatch(pattern, actual, path, deny);
250
+ if (!match) return false;
251
+ }
252
+ return true;
253
+ }
254
+
255
+ /**
256
+ * Whether `value` (the fields of what a call touches, e.g. { base, path } or { url }) is inside the
257
+ * call's scope: no deny entry matches, and some allow entry matches unless allow is unrestricted.
258
+ * `fold`: the path fields name files on a case-insensitive volume (macOS and Windows by default,
259
+ * Android's shared storage), so "Secret/x" is compared as "secret/x" and a deny cannot be passed
260
+ * by changing case.
261
+ */
262
+ export function scopePermits(
263
+ scope: CallScope | undefined | null,
264
+ value: Record<string, string>,
265
+ pathFields: readonly string[] = [],
266
+ urlFields: readonly string[] = [],
267
+ fold = false,
268
+ ): boolean {
269
+ if (!scope) return true;
270
+ if (scope.deny.some((e) => entryMatches(e, value, pathFields, urlFields, true, fold))) return false;
271
+ return scope.allow === null || scope.allow.some((e) => entryMatches(e, value, pathFields, urlFields, false, fold));
272
+ }
@@ -0,0 +1,97 @@
1
+
2
+
3
+ import { loadAcl, type ResolvedAcl } from "./acl.ts";
4
+
5
+ export type Platform = "web" | "macos" | "windows" | "linux" | "ios" | "android";
6
+
7
+ /**
8
+ * How a host provides a plugin:
9
+ * - "web": the plugin's web implementation runs inside the WebView
10
+ * - { methods, events }: the host has a native implementation of these
11
+ * A plugin missing from the map is unsupported on that host (web platform excepted).
12
+ */
13
+ /**
14
+ * "web": the page runs the web implementation. An object: the host implements these methods and
15
+ * events; with `web: true` the others fall back to the web implementation (e.g. macOS camera:
16
+ * native permission state, getUserMedia capture).
17
+ */
18
+ /**
19
+ * `coalesce`: events whose payload is a snapshot (progress, sizes, positions): the host sends only the
20
+ * latest of a burst (architecture review stage 4, `coalesce: "latest"`).
21
+ */
22
+ export type PluginDecl = "web" | { methods: string[]; events: string[]; web?: true; coalesce?: string[] };
23
+
24
+ export interface AppInfo {
25
+ id: string;
26
+ name: string;
27
+ version: string;
28
+ build?: number;
29
+ }
30
+
31
+ export interface AkanNativeBoot {
32
+ v: 1;
33
+ platform: Platform;
34
+ runtimeVersion: string;
35
+ dev: boolean;
36
+ app: AppInfo | null;
37
+ env: Record<string, string>;
38
+ plugins: Record<string, PluginDecl>;
39
+ /** Desktop: this page's window (1 = the window the app opened, SH-6). Absent elsewhere. */
40
+ windowId?: number;
41
+ /** The resolved capabilities (PL-11). The host enforces them; the page applies them to web implementations. */
42
+ acl?: ResolvedAcl;
43
+ /** Native hosts: fingerprint of what the binary provides natively; web bundles must match it (UP-3). */
44
+ nativeApi?: string;
45
+ /** Native hosts: bridge v1.1 features (protocol.ts BRIDGE_FEATURES). */
46
+ bridge?: { features: string[] };
47
+ /** The app's origin, set by the shell (the web: the page's): the one value origin checks use. */
48
+ origin?: string;
49
+ /** Native hosts: the page's engine (wkwebview, webview2, webkitgtk, android-webview) and its version. */
50
+ engine?: string;
51
+ engineVersion?: string;
52
+ }
53
+
54
+ /** The global object. init.js fills the boot fields, @akanjs/native/core adds `receive`. */
55
+ export interface AkanNativeGlobal extends Partial<AkanNativeBoot> {
56
+ /** Entry point for host → JS messages (responses on Android, events everywhere). */
57
+ receive?: (message: unknown) => void;
58
+ /** Shared runtime state, so that duplicated copies of @akanjs/native/core in one page agree. */
59
+ __runtime?: unknown;
60
+ }
61
+
62
+ const PLATFORMS: readonly Platform[] = ["web", "macos", "windows", "linux", "ios", "android"];
63
+
64
+ export function akanNativeGlobal(): AkanNativeGlobal {
65
+ const g = globalThis as { __AKAN_NATIVE__?: AkanNativeGlobal };
66
+ g.__AKAN_NATIVE__ ??= {};
67
+ return g.__AKAN_NATIVE__;
68
+ }
69
+
70
+ /**
71
+ * Reads the boot data. Without init.js (plain dev server, unit tests) the page
72
+ * behaves as the web platform with an empty env.
73
+ */
74
+ export function readBoot(): AkanNativeBoot {
75
+ const g = akanNativeGlobal();
76
+ const acl = loadAcl(g).acl;
77
+ return {
78
+ v: 1,
79
+ platform: g.platform && PLATFORMS.includes(g.platform) ? g.platform : "web",
80
+ runtimeVersion: typeof g.runtimeVersion === "string" ? g.runtimeVersion : "0.0.0",
81
+ dev: g.dev === true,
82
+ app: g.app ?? null,
83
+ env: Object.freeze({ ...(g.env ?? {}) }),
84
+ plugins: g.plugins ?? {},
85
+ ...(typeof g.windowId === "number" ? { windowId: g.windowId } : {}),
86
+
87
+ ...(acl ? { acl } : {}),
88
+ ...(typeof g.nativeApi === "string" ? { nativeApi: g.nativeApi } : {}),
89
+ ...(typeof g.origin === "string"
90
+ ? { origin: g.origin }
91
+ : typeof location !== "undefined" && location.origin !== "null"
92
+ ? { origin: location.origin }
93
+ : {}),
94
+ ...(typeof g.engine === "string" ? { engine: g.engine } : {}),
95
+ ...(typeof g.engineVersion === "string" ? { engineVersion: g.engineVersion } : {}),
96
+ };
97
+ }
@@ -0,0 +1,100 @@
1
+
2
+
3
+ export const ERROR_CODES = ["UNSUPPORTED", "PERMISSION_DENIED", "CANCELLED", "TIMEOUT", "INVALID_ARGS", "NOT_FOUND", "NOT_ALLOWED", "INTERNAL"] as const;
4
+
5
+ /** File name extension → MIME type (assets and FileRefs). */
6
+ export const MIME: Readonly<Record<string, string>> = {
7
+ html: "text/html",
8
+ htm: "text/html",
9
+ js: "text/javascript",
10
+ mjs: "text/javascript",
11
+ css: "text/css",
12
+ json: "application/json",
13
+ map: "application/json",
14
+ webmanifest: "application/manifest+json",
15
+ txt: "text/plain",
16
+ text: "text/plain",
17
+ log: "text/plain",
18
+ md: "text/markdown",
19
+ csv: "text/csv",
20
+ tsv: "text/tab-separated-values",
21
+ xml: "application/xml",
22
+ yaml: "application/yaml",
23
+ yml: "application/yaml",
24
+ ics: "text/calendar",
25
+ vcf: "text/vcard",
26
+ pdf: "application/pdf",
27
+ rtf: "application/rtf",
28
+ zip: "application/zip",
29
+ gz: "application/gzip",
30
+ tar: "application/x-tar",
31
+ wasm: "application/wasm",
32
+ epub: "application/epub+zip",
33
+ doc: "application/msword",
34
+ docx: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
35
+ xls: "application/vnd.ms-excel",
36
+ xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
37
+ ppt: "application/vnd.ms-powerpoint",
38
+ pptx: "application/vnd.openxmlformats-officedocument.presentationml.presentation",
39
+ png: "image/png",
40
+ jpg: "image/jpeg",
41
+ jpeg: "image/jpeg",
42
+ gif: "image/gif",
43
+ webp: "image/webp",
44
+ avif: "image/avif",
45
+ heic: "image/heic",
46
+ heif: "image/heif",
47
+ bmp: "image/bmp",
48
+ svg: "image/svg+xml",
49
+ ico: "image/x-icon",
50
+ tif: "image/tiff",
51
+ tiff: "image/tiff",
52
+ mp3: "audio/mpeg",
53
+ m4a: "audio/mp4",
54
+ aac: "audio/aac",
55
+ wav: "audio/wav",
56
+ ogg: "audio/ogg",
57
+ flac: "audio/flac",
58
+ mp4: "video/mp4",
59
+ m4v: "video/mp4",
60
+ mov: "video/quicktime",
61
+ webm: "video/webm",
62
+ ttf: "font/ttf",
63
+ otf: "font/otf",
64
+ woff: "font/woff",
65
+ woff2: "font/woff2",
66
+ glb: "model/gltf-binary",
67
+ gltf: "model/gltf+json",
68
+ };
69
+
70
+ /** Besides text/*, the asset types served with charset=utf-8. */
71
+ export const MIME_UTF8: readonly string[] = ["application/json", "application/manifest+json", "application/xml", "application/yaml", "image/svg+xml", "model/gltf+json"];
72
+
73
+ /** An id grammar: allowed characters, length, and an optional extension after the first dot. */
74
+ export interface IdSpec {
75
+ chars: string;
76
+ first: string;
77
+ notFirst: string;
78
+ min: number;
79
+ max: number;
80
+ extChars: string;
81
+ extMax: number;
82
+ }
83
+
84
+ export const ID_FILE_REF: IdSpec = { chars: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-", first: "", notFirst: "", min: 1, max: 128, extChars: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", extMax: 8 };
85
+ export const ID_BUNDLE: IdSpec = { chars: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_.-", first: "", notFirst: ".", min: 1, max: 80, extChars: "", extMax: 0 };
86
+ export const ID_DOCUMENT: IdSpec = { chars: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-", first: "", notFirst: "", min: 8, max: 64, extChars: "", extMax: 0 };
87
+ export const ID_NAME: IdSpec = { chars: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_.-", first: "$ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", notFirst: "", min: 1, max: 64, extChars: "", extMax: 0 };
88
+
89
+ export const EXTERNAL_SCHEMES: readonly string[] = ["http", "https", "mailto", "tel"];
90
+ export const FRAME_SCHEMES: readonly string[] = ["http", "https", "data", "blob", "about"];
91
+ /** Schemes an app can never add to the external list. */
92
+ export const NEVER_EXTERNAL_SCHEMES: readonly string[] = ["javascript", "vbscript", "file", "data", "blob", "about", "content", "intent", "app"];
93
+
94
+ export const ROUTES = { root: "__akan_native", init: "init.js", ipc: "ipc", hello: "hello", file: "file" } as const;
95
+
96
+ export const INIT_PREFIX = "window.__AKAN_NATIVE__=(function(o,b,e){for(var k in b)o[k]=b[k];o.env=e;return o})(window.__AKAN_NATIVE__||{},";
97
+ export const INIT_SUFFIX = ");\n";
98
+ export const MAX_RANGE_BYTES = 1024000;
99
+ export const EXTERNAL_OPENS_PER_SECOND = 1;
100
+ export const MAX_RETAINED_EVENTS = 16;
@@ -0,0 +1,95 @@
1
+ import { type BridgeErrorBody, ERROR_CODES, type ErrorCode } from "./protocol.ts";
2
+
3
+ /**
4
+ * The web-standard name of each code (bridge v1.1), so `error.name === "AbortError"` works as it does
5
+ * for fetch; `code` stays the akan-native code.
6
+ */
7
+ const ERROR_NAMES: Partial<Record<ErrorCode, string>> = {
8
+ CANCELLED: "AbortError",
9
+ TIMEOUT: "TimeoutError",
10
+ PERMISSION_DENIED: "NotAllowedError",
11
+ NOT_ALLOWED: "NotAllowedError",
12
+ UNSUPPORTED: "NotSupportedError",
13
+ NOT_FOUND: "NotFoundError",
14
+ };
15
+
16
+ export interface AkanNativeErrorOptions {
17
+ cause?: unknown;
18
+ /** Details a caller can act on, e.g. `{ reason: "packageManaged" }`. */
19
+ data?: unknown;
20
+ /** The same call may work later. */
21
+ retryable?: boolean;
22
+ /** Overrides the name derived from the code (DataCloneError for arguments JSON cannot carry). */
23
+ name?: string;
24
+ }
25
+
26
+ export class AkanNativeError extends Error {
27
+ readonly code: ErrorCode;
28
+ readonly data?: unknown;
29
+ readonly retryable: boolean;
30
+
31
+ constructor(code: ErrorCode, message: string, options?: AkanNativeErrorOptions) {
32
+ super(message, options?.cause === undefined ? undefined : { cause: options.cause });
33
+ this.name = options?.name ?? ERROR_NAMES[code] ?? "AkanNativeError";
34
+ this.code = code;
35
+ if (options?.data !== undefined) this.data = options.data;
36
+ this.retryable = options?.retryable === true;
37
+ }
38
+
39
+ /**
40
+ * Builds a real Error from a wire error so callers get a stack trace
41
+ * (Capacitor copies native error fields onto an Error for the same reason:
42
+ * capacitor/core/native-bridge.ts `returnResult`).
43
+ */
44
+ static fromBody(body: BridgeErrorBody | undefined, cause?: unknown): AkanNativeError {
45
+ const code = body && ERROR_CODES.includes(body.code) ? body.code : "INTERNAL";
46
+ return new AkanNativeError(code, body?.message ?? "unknown error", {
47
+ data: body?.data,
48
+ retryable: body?.retryable === true,
49
+ cause,
50
+ });
51
+ }
52
+
53
+ /** Normalizes anything thrown by an implementation into an AkanNativeError. */
54
+ static from(error: unknown): AkanNativeError {
55
+ if (error instanceof AkanNativeError) return error;
56
+ if (error instanceof Error || isDomException(error)) {
57
+ const e = error as Error;
58
+ const code = FROM_NAMES[e.name];
59
+ return new AkanNativeError(code ?? "INTERNAL", e.message, { cause: error });
60
+ }
61
+ return new AkanNativeError("INTERNAL", String(error));
62
+ }
63
+
64
+ /** The error body a host sends for this error. */
65
+ toBody(): BridgeErrorBody {
66
+ const body: BridgeErrorBody = { code: this.code, message: this.message };
67
+ if (this.data !== undefined) body.data = this.data;
68
+ if (this.retryable) body.retryable = true;
69
+ return body;
70
+ }
71
+ }
72
+
73
+ /** Web errors thrown by web implementations and the page's own signals. */
74
+ const FROM_NAMES: Record<string, ErrorCode> = {
75
+ AbortError: "CANCELLED",
76
+ TimeoutError: "TIMEOUT",
77
+ NotAllowedError: "PERMISSION_DENIED",
78
+ SecurityError: "PERMISSION_DENIED",
79
+ NotSupportedError: "UNSUPPORTED",
80
+ NotFoundError: "NOT_FOUND",
81
+ };
82
+
83
+ /** DOMException is not an Error subclass in every engine. */
84
+ function isDomException(value: unknown): boolean {
85
+ return (
86
+ typeof value === "object" &&
87
+ value !== null &&
88
+ typeof (value as { name?: unknown }).name === "string" &&
89
+ typeof (value as { message?: unknown }).message === "string"
90
+ );
91
+ }
92
+
93
+ export function isAkanNativeError(error: unknown, code?: ErrorCode): error is AkanNativeError {
94
+ return error instanceof AkanNativeError && (code === undefined || error.code === code);
95
+ }
@@ -0,0 +1,105 @@
1
+
2
+
3
+ import { AkanNativeError } from "./errors.ts";
4
+ import { BRIDGE_PLUGIN, type FileRef, RELEASE } from "./protocol.ts";
5
+ import { runtime } from "./runtime.ts";
6
+
7
+ /**
8
+ * Stops serving a FileRef. FileRefs live for the app session (architecture review, 2026-09-26), so
9
+ * release the ones the page no longer shows: photos, picked files, downloads. The host forgets the
10
+ * URL and deletes akan-native's own copy of the file; files that belong to the user (a document served in
11
+ * place) stay. Holding the URL is the permission, as for any follow-up on what a call handed out.
12
+ * Resolves whether it was served. On the web, a blob: URL is revoked.
13
+ */
14
+ export async function releaseFile(file: FileRef | string): Promise<boolean> {
15
+ const url = typeof file === "string" ? file : file?.url;
16
+ if (typeof url !== "string") throw new AkanNativeError("INVALID_ARGS", "releaseFile needs a FileRef or its url");
17
+ const rt = runtime();
18
+ if (!rt.transport) {
19
+ if (!url.startsWith("blob:")) return false;
20
+ URL.revokeObjectURL(url);
21
+ return true;
22
+ }
23
+ const response = await rt.transport.send({
24
+ v: 1,
25
+ id: ++rt.nextId,
26
+ plugin: BRIDGE_PLUGIN,
27
+ method: RELEASE,
28
+ args: { url },
29
+ });
30
+ if (!response.ok) throw AkanNativeError.fromBody(response.error);
31
+ return (response.result as { released?: unknown } | undefined)?.released === true;
32
+ }
33
+
34
+ export interface FileReadOptions {
35
+ /** Bytes per Range request. Default 4 MiB. */
36
+ chunkSize?: number;
37
+ signal?: AbortSignal;
38
+ }
39
+
40
+ const CONTENT_RANGE = /^bytes (\d+)-(\d+)\/(\d+|\*)$/;
41
+
42
+ /**
43
+ * Reads a FileRef (or any same-origin URL) in pieces with HTTP Range requests, so a big file never
44
+ * has to be one response: the desktop shell answers without streaming (WRY), reading a whole
45
+ * response into memory (architecture review stage 4). Every host serves FileRefs with
46
+ * `Accept-Ranges: bytes`. A server that ignores Range (200) is streamed as it answers.
47
+ */
48
+ export function fileStream(file: FileRef | string, options: FileReadOptions = {}): ReadableStream<Uint8Array> {
49
+ const url = typeof file === "string" ? file : file.url;
50
+ const chunk = Math.max(1, Math.floor(options.chunkSize ?? 4 << 20));
51
+ let offset = 0;
52
+ let total: number | null = typeof file === "object" && Number.isFinite(file.size) ? file.size : null;
53
+ let whole: ReadableStreamDefaultReader<Uint8Array> | null = null;
54
+ return new ReadableStream<Uint8Array>({
55
+ async pull(controller) {
56
+ try {
57
+ if (whole) {
58
+ const { done, value } = await whole.read();
59
+ if (done) controller.close();
60
+ else controller.enqueue(value);
61
+ return;
62
+ }
63
+ if (total !== null && offset >= total) return controller.close();
64
+ const response = await fetch(url, {
65
+ headers: { range: `bytes=${offset}-${offset + chunk - 1}` },
66
+ ...(options.signal ? { signal: options.signal } : {}),
67
+ });
68
+ if (response.status === 416 && total === null) return controller.close();
69
+ if (response.status === 200) {
70
+
71
+ whole = response.body!.getReader();
72
+ return this.pull!(controller);
73
+ }
74
+ if (response.status !== 206)
75
+ throw new AkanNativeError(
76
+ response.status === 404 ? "NOT_FOUND" : "INTERNAL",
77
+ `${url}: HTTP ${response.status}`,
78
+ );
79
+ const range = CONTENT_RANGE.exec(response.headers.get("content-range") ?? "");
80
+ if (range && range[3] !== "*") total = Number(range[3]);
81
+ const bytes = new Uint8Array(await response.arrayBuffer());
82
+ offset += bytes.length;
83
+ if (bytes.length) controller.enqueue(bytes);
84
+ if (bytes.length === 0 || (total !== null && offset >= total)) controller.close();
85
+ } catch (error) {
86
+ controller.error(AkanNativeError.from(error));
87
+ }
88
+ },
89
+ cancel() {
90
+ void whole?.cancel();
91
+ },
92
+ });
93
+ }
94
+
95
+ /** A FileRef as a Blob, read in Range pieces (see fileStream); `type` is the FileRef's MIME type. */
96
+ export async function fileBlob(file: FileRef | string, options: FileReadOptions = {}): Promise<Blob> {
97
+ const parts: Uint8Array[] = [];
98
+ const reader = fileStream(file, options).getReader();
99
+ for (;;) {
100
+ const { done, value } = await reader.read();
101
+ if (done) break;
102
+ parts.push(value);
103
+ }
104
+ return new Blob(parts as BlobPart[], typeof file === "object" && file.mime ? { type: file.mime } : {});
105
+ }