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.
- package/README.ko.md +0 -1
- package/README.md +0 -1
- package/base/baseEnv.ts +40 -3
- package/client/cookie.ts +56 -20
- package/client/device.ts +47 -95
- package/client/frameConfig.ts +2 -2
- package/client/native.ts +44 -0
- package/client/router.ts +11 -1
- package/client/rscNavigation.ts +5 -0
- package/client/storage.ts +68 -39
- package/fetch/client/fetchClient.ts +13 -4
- package/index.ts +47 -46
- package/package.json +6 -87
- package/server/devtools/signalSerializer.ts +1 -2
- package/server/hmr/devHmrController.ts +29 -11
- package/server/resolver/signal.resolver.ts +1 -10
- package/server/routeTreeBuilder.ts +8 -11
- package/server/routing/apiRouter.ts +15 -2
- package/server/rscClient.tsx +1 -2
- package/server/ssrFromRscRenderer.tsx +2 -0
- package/server/webRouter.ts +1 -0
- package/signal/CrossSiteGuard.ts +34 -2
- package/signal/endpoint.ts +12 -7
- package/signal/endpointInfo.ts +13 -0
- package/signal/internal.ts +9 -5
- package/signal/serializer/fetch.serializer.ts +6 -3
- package/signal/slice.ts +34 -24
- package/store/baseSt.ts +0 -1
- package/store/storeInstance.ts +29 -17
- package/types/client/cookie.d.ts +6 -4
- package/types/client/device.d.ts +7 -10
- package/types/client/native.d.ts +26 -0
- package/types/client/rscNavigation.d.ts +4 -0
- package/types/client/storage.d.ts +8 -1
- package/types/index.d.ts +48 -44
- package/types/server/hmr/devHmrController.d.ts +2 -1
- package/types/server/resolver/signal.resolver.d.ts +0 -1
- package/types/server/rscClient.d.ts +0 -3
- package/types/signal/CrossSiteGuard.d.ts +7 -2
- package/types/signal/endpoint.d.ts +1 -1
- package/types/signal/endpointInfo.d.ts +3 -0
- package/types/signal/slice.d.ts +3 -2
- package/types/store/baseSt.d.ts +0 -13
- package/types/vendor/@akanjs/native/packages/cli/src/api.d.ts +182 -0
- package/types/vendor/@akanjs/native/packages/cli/src/commands/build.d.ts +28 -0
- package/types/vendor/@akanjs/native/packages/cli/src/commands/compat.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/cli/src/commands/dev.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/cli/src/commands/doctor.d.ts +37 -0
- package/types/vendor/@akanjs/native/packages/cli/src/commands/plugin.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/cli/src/commands/signing.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/cli/src/commands/test.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/cli/src/commands/toolchain.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/cli/src/commands/update.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/cli/src/config.d.ts +278 -0
- package/types/vendor/@akanjs/native/packages/cli/src/index.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/acl.d.ts +21 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/apilevel.d.ts +40 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/apk.d.ts +36 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/args.d.ts +9 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/boot.d.ts +32 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/chrome.d.ts +6 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/codegen.d.ts +94 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/compat.d.ts +49 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/configkeys.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/csp.d.ts +51 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/env.d.ts +44 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/exec.d.ts +31 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/googleservices.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/hmr.d.ts +120 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/html.d.ts +20 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/icons.d.ts +44 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/image.d.ts +21 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/iossigning.d.ts +81 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/launch.d.ts +51 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/log.d.ts +42 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/manifestmerge.d.ts +18 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/maven.d.ts +97 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/names.d.ts +45 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/native-plugins.d.ts +67 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/nativeconfig.d.ts +11 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/permissions.d.ts +10 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/plist.d.ts +11 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/png.d.ts +11 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/prepare.d.ts +138 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/privacy.d.ts +13 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/project.d.ts +208 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/root.d.ts +1 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/routes.d.ts +1 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/serve.d.ts +17 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/signing.d.ts +14 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/spec.d.ts +96 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/toolchains.d.ts +150 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/updates.d.ts +77 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/vectors.d.ts +13 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/xml.d.ts +13 -0
- package/types/vendor/@akanjs/native/packages/cli/src/platforms/android.d.ts +57 -0
- package/types/vendor/@akanjs/native/packages/cli/src/platforms/desktop-update.d.ts +4 -0
- package/types/vendor/@akanjs/native/packages/cli/src/platforms/desktop.d.ts +40 -0
- package/types/vendor/@akanjs/native/packages/cli/src/platforms/index.d.ts +14 -0
- package/types/vendor/@akanjs/native/packages/cli/src/platforms/ios.d.ts +44 -0
- package/types/vendor/@akanjs/native/packages/cli/src/platforms/linux.d.ts +6 -0
- package/types/vendor/@akanjs/native/packages/cli/src/platforms/macos.d.ts +7 -0
- package/types/vendor/@akanjs/native/packages/cli/src/platforms/targets.d.ts +4 -0
- package/types/vendor/@akanjs/native/packages/cli/src/platforms/web-run.d.ts +15 -0
- package/types/vendor/@akanjs/native/packages/cli/src/platforms/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/cli/src/platforms/windows.d.ts +8 -0
- package/types/vendor/@akanjs/native/packages/cli/src/platforms.d.ts +1 -0
- package/types/vendor/@akanjs/native/packages/cli/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/packages/core/src/acl.d.ts +97 -0
- package/types/vendor/@akanjs/native/packages/core/src/boot.d.ts +66 -0
- package/types/vendor/@akanjs/native/packages/core/src/contract.d.ts +35 -0
- package/types/vendor/@akanjs/native/packages/core/src/errors.d.ts +27 -0
- package/types/vendor/@akanjs/native/packages/core/src/files.d.ts +23 -0
- package/types/vendor/@akanjs/native/packages/core/src/index.d.ts +14 -0
- package/types/vendor/@akanjs/native/packages/core/src/kernel.d.ts +112 -0
- package/types/vendor/@akanjs/native/packages/core/src/live.d.ts +12 -0
- package/types/vendor/@akanjs/native/packages/core/src/mime.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/core/src/plugin.d.ts +71 -0
- package/types/vendor/@akanjs/native/packages/core/src/protocol.d.ts +109 -0
- package/types/vendor/@akanjs/native/packages/core/src/runtime.d.ts +66 -0
- package/types/vendor/@akanjs/native/packages/core/src/state.d.ts +28 -0
- package/types/vendor/@akanjs/native/packages/core/src/testing.d.ts +41 -0
- package/types/vendor/@akanjs/native/packages/core/src/version.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/core/src/veto.d.ts +17 -0
- package/types/vendor/@akanjs/native/packages/core/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/packages/desktop/src/deeplinks.d.ts +24 -0
- package/types/vendor/@akanjs/native/packages/desktop/src/delta.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/desktop/src/dispatcher.d.ts +95 -0
- package/types/vendor/@akanjs/native/packages/desktop/src/ffi.d.ts +144 -0
- package/types/vendor/@akanjs/native/packages/desktop/src/host.d.ts +11 -0
- package/types/vendor/@akanjs/native/packages/desktop/src/lifecycle.d.ts +40 -0
- package/types/vendor/@akanjs/native/packages/desktop/src/main.d.ts +4 -0
- package/types/vendor/@akanjs/native/packages/desktop/src/page-veto.d.ts +17 -0
- package/types/vendor/@akanjs/native/packages/desktop/src/paths.d.ts +25 -0
- package/types/vendor/@akanjs/native/packages/desktop/src/plugin.d.ts +179 -0
- package/types/vendor/@akanjs/native/packages/react/src/index.d.ts +8 -0
- package/types/vendor/@akanjs/native/packages/react/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/accessibility/src/announce.d.ts +8 -0
- package/types/vendor/@akanjs/native/plugins/accessibility/src/index.d.ts +47 -0
- package/types/vendor/@akanjs/native/plugins/accessibility/src/web.d.ts +4 -0
- package/types/vendor/@akanjs/native/plugins/accessibility/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/app/src/desktop.d.ts +3 -0
- package/types/vendor/@akanjs/native/plugins/app/src/index.d.ts +66 -0
- package/types/vendor/@akanjs/native/plugins/app/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/app/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/app-state/src/index.d.ts +19 -0
- package/types/vendor/@akanjs/native/plugins/app-state/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/app-state/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/appearance/src/desktop.d.ts +9 -0
- package/types/vendor/@akanjs/native/plugins/appearance/src/index.d.ts +32 -0
- package/types/vendor/@akanjs/native/plugins/appearance/src/setting.d.ts +6 -0
- package/types/vendor/@akanjs/native/plugins/appearance/src/web.d.ts +3 -0
- package/types/vendor/@akanjs/native/plugins/appearance/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/auth-session/src/args.d.ts +18 -0
- package/types/vendor/@akanjs/native/plugins/auth-session/src/desktop.d.ts +17 -0
- package/types/vendor/@akanjs/native/plugins/auth-session/src/index.d.ts +41 -0
- package/types/vendor/@akanjs/native/plugins/auth-session/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/autostart/src/desktop.d.ts +44 -0
- package/types/vendor/@akanjs/native/plugins/autostart/src/index.d.ts +44 -0
- package/types/vendor/@akanjs/native/plugins/autostart/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/badge/src/count.d.ts +4 -0
- package/types/vendor/@akanjs/native/plugins/badge/src/desktop.d.ts +3 -0
- package/types/vendor/@akanjs/native/plugins/badge/src/index.d.ts +37 -0
- package/types/vendor/@akanjs/native/plugins/badge/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/badge/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/biometric/src/index.d.ts +53 -0
- package/types/vendor/@akanjs/native/plugins/biometric/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/browser/src/args.d.ts +8 -0
- package/types/vendor/@akanjs/native/plugins/browser/src/desktop.d.ts +9 -0
- package/types/vendor/@akanjs/native/plugins/browser/src/index.d.ts +36 -0
- package/types/vendor/@akanjs/native/plugins/browser/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/browser/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/camera/src/desktop.d.ts +5 -0
- package/types/vendor/@akanjs/native/plugins/camera/src/index.d.ts +55 -0
- package/types/vendor/@akanjs/native/plugins/camera/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/camera/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/clipboard/src/desktop.d.ts +8 -0
- package/types/vendor/@akanjs/native/plugins/clipboard/src/index.d.ts +40 -0
- package/types/vendor/@akanjs/native/plugins/clipboard/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/clipboard/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/device/src/desktop.d.ts +33 -0
- package/types/vendor/@akanjs/native/plugins/device/src/index.d.ts +55 -0
- package/types/vendor/@akanjs/native/plugins/device/src/web.d.ts +22 -0
- package/types/vendor/@akanjs/native/plugins/device/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/dialog/src/desktop.d.ts +3 -0
- package/types/vendor/@akanjs/native/plugins/dialog/src/index.d.ts +60 -0
- package/types/vendor/@akanjs/native/plugins/dialog/src/options.d.ts +29 -0
- package/types/vendor/@akanjs/native/plugins/dialog/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/dialog/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/dock/src/desktop.d.ts +3 -0
- package/types/vendor/@akanjs/native/plugins/dock/src/index.d.ts +46 -0
- package/types/vendor/@akanjs/native/plugins/dock/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/file-picker/src/common.d.ts +33 -0
- package/types/vendor/@akanjs/native/plugins/file-picker/src/desktop.d.ts +9 -0
- package/types/vendor/@akanjs/native/plugins/file-picker/src/index.d.ts +84 -0
- package/types/vendor/@akanjs/native/plugins/file-picker/src/web.d.ts +6 -0
- package/types/vendor/@akanjs/native/plugins/file-picker/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/filesystem/src/common.d.ts +49 -0
- package/types/vendor/@akanjs/native/plugins/filesystem/src/desktop.d.ts +8 -0
- package/types/vendor/@akanjs/native/plugins/filesystem/src/index.d.ts +123 -0
- package/types/vendor/@akanjs/native/plugins/filesystem/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/filesystem/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/geolocation/src/index.d.ts +93 -0
- package/types/vendor/@akanjs/native/plugins/geolocation/src/web.d.ts +11 -0
- package/types/vendor/@akanjs/native/plugins/geolocation/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/global-shortcut/src/desktop.d.ts +3 -0
- package/types/vendor/@akanjs/native/plugins/global-shortcut/src/index.d.ts +52 -0
- package/types/vendor/@akanjs/native/plugins/global-shortcut/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/haptics/src/index.d.ts +31 -0
- package/types/vendor/@akanjs/native/plugins/haptics/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/haptics/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/http/src/common.d.ts +71 -0
- package/types/vendor/@akanjs/native/plugins/http/src/desktop.d.ts +5 -0
- package/types/vendor/@akanjs/native/plugins/http/src/index.d.ts +104 -0
- package/types/vendor/@akanjs/native/plugins/http/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/http/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/iap/src/index.d.ts +171 -0
- package/types/vendor/@akanjs/native/plugins/iap/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/keep-awake/src/desktop.d.ts +15 -0
- package/types/vendor/@akanjs/native/plugins/keep-awake/src/index.d.ts +33 -0
- package/types/vendor/@akanjs/native/plugins/keep-awake/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/keep-awake/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/keyboard/src/index.d.ts +42 -0
- package/types/vendor/@akanjs/native/plugins/keyboard/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/keyboard/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/local-notifications/src/desktop.d.ts +29 -0
- package/types/vendor/@akanjs/native/plugins/local-notifications/src/index.d.ts +126 -0
- package/types/vendor/@akanjs/native/plugins/local-notifications/src/schedule.d.ts +38 -0
- package/types/vendor/@akanjs/native/plugins/local-notifications/src/timers.d.ts +25 -0
- package/types/vendor/@akanjs/native/plugins/local-notifications/src/web.d.ts +4 -0
- package/types/vendor/@akanjs/native/plugins/local-notifications/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/menu/src/desktop.d.ts +3 -0
- package/types/vendor/@akanjs/native/plugins/menu/src/index.d.ts +85 -0
- package/types/vendor/@akanjs/native/plugins/menu/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/network/src/index.d.ts +22 -0
- package/types/vendor/@akanjs/native/plugins/network/src/web.d.ts +3 -0
- package/types/vendor/@akanjs/native/plugins/network/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/opener/src/desktop.d.ts +14 -0
- package/types/vendor/@akanjs/native/plugins/opener/src/index.d.ts +33 -0
- package/types/vendor/@akanjs/native/plugins/opener/src/url.d.ts +16 -0
- package/types/vendor/@akanjs/native/plugins/opener/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/opener/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/preferences/src/desktop.d.ts +3 -0
- package/types/vendor/@akanjs/native/plugins/preferences/src/index.d.ts +26 -0
- package/types/vendor/@akanjs/native/plugins/preferences/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/preferences/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/push/src/index.d.ts +57 -0
- package/types/vendor/@akanjs/native/plugins/push/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/screen/src/desktop.d.ts +3 -0
- package/types/vendor/@akanjs/native/plugins/screen/src/index.d.ts +70 -0
- package/types/vendor/@akanjs/native/plugins/screen/src/web.d.ts +18 -0
- package/types/vendor/@akanjs/native/plugins/screen/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/screen-orientation/src/index.d.ts +32 -0
- package/types/vendor/@akanjs/native/plugins/screen-orientation/src/types.d.ts +8 -0
- package/types/vendor/@akanjs/native/plugins/screen-orientation/src/web.d.ts +3 -0
- package/types/vendor/@akanjs/native/plugins/screen-orientation/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/secure-storage/src/desktop.d.ts +16 -0
- package/types/vendor/@akanjs/native/plugins/secure-storage/src/index.d.ts +39 -0
- package/types/vendor/@akanjs/native/plugins/secure-storage/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/share/src/index.d.ts +55 -0
- package/types/vendor/@akanjs/native/plugins/share/src/options.d.ts +6 -0
- package/types/vendor/@akanjs/native/plugins/share/src/web.d.ts +5 -0
- package/types/vendor/@akanjs/native/plugins/share/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/single-instance/src/desktop.d.ts +8 -0
- package/types/vendor/@akanjs/native/plugins/single-instance/src/index.d.ts +25 -0
- package/types/vendor/@akanjs/native/plugins/single-instance/src/socket.d.ts +46 -0
- package/types/vendor/@akanjs/native/plugins/single-instance/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/splash-screen/src/index.d.ts +19 -0
- package/types/vendor/@akanjs/native/plugins/splash-screen/src/web.d.ts +4 -0
- package/types/vendor/@akanjs/native/plugins/splash-screen/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/sqlite/src/common.d.ts +34 -0
- package/types/vendor/@akanjs/native/plugins/sqlite/src/desktop.d.ts +6 -0
- package/types/vendor/@akanjs/native/plugins/sqlite/src/index.d.ts +115 -0
- package/types/vendor/@akanjs/native/plugins/sqlite/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/toast/src/index.d.ts +30 -0
- package/types/vendor/@akanjs/native/plugins/toast/src/queue.d.ts +23 -0
- package/types/vendor/@akanjs/native/plugins/toast/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/toast/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/tray/src/desktop.d.ts +3 -0
- package/types/vendor/@akanjs/native/plugins/tray/src/index.d.ts +113 -0
- package/types/vendor/@akanjs/native/plugins/tray/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/updates/src/desktop.d.ts +4 -0
- package/types/vendor/@akanjs/native/plugins/updates/src/index.d.ts +68 -0
- package/types/vendor/@akanjs/native/plugins/updates/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/window/src/desktop.d.ts +6 -0
- package/types/vendor/@akanjs/native/plugins/window/src/index.d.ts +185 -0
- package/types/vendor/@akanjs/native/plugins/window/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/window/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/window-state/src/desktop.d.ts +7 -0
- package/types/vendor/@akanjs/native/plugins/window-state/src/index.d.ts +33 -0
- package/types/vendor/@akanjs/native/plugins/window-state/src/state.d.ts +39 -0
- package/types/vendor/@akanjs/native/plugins/window-state/src.d.ts +1 -0
- package/types/webkit/index.d.ts +0 -2
- package/types/webkit/nativeNavigation.d.ts +25 -0
- package/types/webkit/nativePurchase.d.ts +37 -0
- package/types/webkit/useCamera.d.ts +13 -15
- package/types/webkit/useGeoLocation.d.ts +4 -5
- package/types/webkit/usePurchase.d.ts +12 -16
- package/ui/Link/Anchor.tsx +2 -5
- package/ui/System/Client.tsx +2 -6
- package/vendor/@akanjs/native/LICENSE +21 -0
- package/vendor/@akanjs/native/README.ko.md +88 -0
- package/vendor/@akanjs/native/README.md +93 -0
- package/vendor/@akanjs/native/THIRD_PARTY_NOTICES.md +237 -0
- package/vendor/@akanjs/native/native/android/maven.lock.json +1751 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeAcl.kt +243 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeActivity.kt +936 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeApplication.kt +189 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeAssetServer.kt +225 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeBridge.kt +444 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeCompat.kt +55 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeContract.kt +99 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeEd25519.kt +100 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeFileProvider.kt +71 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeKernel.kt +324 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativePlugin.kt +361 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeSpec.kt +100 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeUpdates.kt +305 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeVectors.kt +132 -0
- package/vendor/@akanjs/native/native/desktop/Cargo.lock +2565 -0
- package/vendor/@akanjs/native/native/desktop/Cargo.toml +49 -0
- package/vendor/@akanjs/native/native/desktop/build.rs +19 -0
- package/vendor/@akanjs/native/native/desktop/rust-toolchain.toml +7 -0
- package/vendor/@akanjs/native/native/desktop/src/accelerator.rs +466 -0
- package/vendor/@akanjs/native/native/desktop/src/autostart.rs +158 -0
- package/vendor/@akanjs/native/native/desktop/src/camera.rs +53 -0
- package/vendor/@akanjs/native/native/desktop/src/chrome.rs +710 -0
- package/vendor/@akanjs/native/native/desktop/src/contract.rs +105 -0
- package/vendor/@akanjs/native/native/desktop/src/devproxy.rs +234 -0
- package/vendor/@akanjs/native/native/desktop/src/dialog_args.rs +189 -0
- package/vendor/@akanjs/native/native/desktop/src/dock.rs +209 -0
- package/vendor/@akanjs/native/native/desktop/src/hotkey.rs +209 -0
- package/vendor/@akanjs/native/native/desktop/src/js_panels.rs +125 -0
- package/vendor/@akanjs/native/native/desktop/src/json.rs +272 -0
- package/vendor/@akanjs/native/native/desktop/src/keychain.rs +151 -0
- package/vendor/@akanjs/native/native/desktop/src/lib.rs +2185 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/appearance.rs +177 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/camera.rs +11 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/clipboard.rs +48 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/device.rs +9 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/dialogs.rs +348 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/dock.rs +146 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/hotkey.rs +228 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/keychain.rs +243 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/menu.rs +445 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/mod.rs +116 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/notify.rs +211 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/open.rs +79 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/power.rs +155 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/screen.rs +158 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/tray.rs +604 -0
- package/vendor/@akanjs/native/native/desktop/src/menu.rs +517 -0
- package/vendor/@akanjs/native/native/desktop/src/navigation.rs +381 -0
- package/vendor/@akanjs/native/native/desktop/src/notify.rs +411 -0
- package/vendor/@akanjs/native/native/desktop/src/notify_schedule.rs +382 -0
- package/vendor/@akanjs/native/native/desktop/src/page_menu.rs +287 -0
- package/vendor/@akanjs/native/native/desktop/src/panels.rs +333 -0
- package/vendor/@akanjs/native/native/desktop/src/placement.rs +92 -0
- package/vendor/@akanjs/native/native/desktop/src/routes.rs +153 -0
- package/vendor/@akanjs/native/native/desktop/src/screen.rs +190 -0
- package/vendor/@akanjs/native/native/desktop/src/tray.rs +279 -0
- package/vendor/@akanjs/native/native/desktop/src/vectors.rs +126 -0
- package/vendor/@akanjs/native/native/desktop/src/win/appearance.rs +51 -0
- package/vendor/@akanjs/native/native/desktop/src/win/autostart.rs +77 -0
- package/vendor/@akanjs/native/native/desktop/src/win/camera.rs +34 -0
- package/vendor/@akanjs/native/native/desktop/src/win/clipboard.rs +106 -0
- package/vendor/@akanjs/native/native/desktop/src/win/device.rs +80 -0
- package/vendor/@akanjs/native/native/desktop/src/win/dialogs.rs +917 -0
- package/vendor/@akanjs/native/native/desktop/src/win/dock.rs +228 -0
- package/vendor/@akanjs/native/native/desktop/src/win/hotkey.rs +110 -0
- package/vendor/@akanjs/native/native/desktop/src/win/keychain.rs +103 -0
- package/vendor/@akanjs/native/native/desktop/src/win/menu.rs +500 -0
- package/vendor/@akanjs/native/native/desktop/src/win/mod.rs +100 -0
- package/vendor/@akanjs/native/native/desktop/src/win/msgwin.rs +86 -0
- package/vendor/@akanjs/native/native/desktop/src/win/notify.rs +334 -0
- package/vendor/@akanjs/native/native/desktop/src/win/open.rs +127 -0
- package/vendor/@akanjs/native/native/desktop/src/win/power.rs +64 -0
- package/vendor/@akanjs/native/native/desktop/src/win/registry.rs +87 -0
- package/vendor/@akanjs/native/native/desktop/src/win/screen.rs +127 -0
- package/vendor/@akanjs/native/native/desktop/src/win/tray.rs +280 -0
- package/vendor/@akanjs/native/native/ios/Sources/AkanNativeAcl.swift +241 -0
- package/vendor/@akanjs/native/native/ios/Sources/AkanNativeApp.swift +285 -0
- package/vendor/@akanjs/native/native/ios/Sources/AkanNativeBridge.swift +407 -0
- package/vendor/@akanjs/native/native/ios/Sources/AkanNativeContract.swift +106 -0
- package/vendor/@akanjs/native/native/ios/Sources/AkanNativeKernel.swift +317 -0
- package/vendor/@akanjs/native/native/ios/Sources/AkanNativePlugin.swift +250 -0
- package/vendor/@akanjs/native/native/ios/Sources/AkanNativeSchemeHandler.swift +209 -0
- package/vendor/@akanjs/native/native/ios/Sources/AkanNativeShell.swift +161 -0
- package/vendor/@akanjs/native/native/ios/Sources/AkanNativeSpec.swift +143 -0
- package/vendor/@akanjs/native/native/ios/Sources/AkanNativeUpdates.swift +270 -0
- package/vendor/@akanjs/native/native/ios/Sources/AkanNativeVectors.swift +155 -0
- package/vendor/@akanjs/native/native/ios/Sources/AkanNativeViewController.swift +371 -0
- package/vendor/@akanjs/native/packages/cli/src/api.ts +600 -0
- package/vendor/@akanjs/native/packages/cli/src/commands/build.ts +101 -0
- package/vendor/@akanjs/native/packages/cli/src/commands/compat.ts +53 -0
- package/vendor/@akanjs/native/packages/cli/src/commands/dev.ts +249 -0
- package/vendor/@akanjs/native/packages/cli/src/commands/doctor.ts +536 -0
- package/vendor/@akanjs/native/packages/cli/src/commands/plugin.ts +164 -0
- package/vendor/@akanjs/native/packages/cli/src/commands/signing.ts +32 -0
- package/vendor/@akanjs/native/packages/cli/src/commands/test.ts +130 -0
- package/vendor/@akanjs/native/packages/cli/src/commands/toolchain.ts +143 -0
- package/vendor/@akanjs/native/packages/cli/src/commands/update.ts +168 -0
- package/vendor/@akanjs/native/packages/cli/src/config.ts +257 -0
- package/vendor/@akanjs/native/packages/cli/src/index.ts +77 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/acl.ts +420 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/apilevel.ts +245 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/apk.ts +203 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/args.ts +44 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/boot.ts +73 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/chrome.ts +89 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/codegen.ts +1128 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/compat.ts +185 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/configkeys.ts +91 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/csp.ts +198 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/env.ts +257 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/exec.ts +104 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/googleservices.ts +53 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/hmr.ts +534 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/html.ts +63 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/icons.ts +316 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/image.ts +175 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/iossigning.ts +295 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/launch.ts +98 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/log.ts +105 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/manifestmerge.ts +107 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/maven.ts +244 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/names.ts +202 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/native-plugins.ts +326 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/nativeconfig.ts +68 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/permissions.ts +80 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/plist.ts +139 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/png.ts +240 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/prepare.ts +290 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/privacy.ts +64 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/project.ts +710 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/root.ts +18 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/routes.ts +3 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/serve.ts +83 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/signing.ts +117 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/spec.ts +521 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/toolchains.ts +579 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/updates.ts +160 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/vectors.ts +121 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/xml.ts +72 -0
- package/vendor/@akanjs/native/packages/cli/src/platforms/android.ts +1320 -0
- package/vendor/@akanjs/native/packages/cli/src/platforms/desktop-update.ts +78 -0
- package/vendor/@akanjs/native/packages/cli/src/platforms/desktop.ts +279 -0
- package/vendor/@akanjs/native/packages/cli/src/platforms/index.ts +31 -0
- package/vendor/@akanjs/native/packages/cli/src/platforms/ios.ts +801 -0
- package/vendor/@akanjs/native/packages/cli/src/platforms/linux.ts +52 -0
- package/vendor/@akanjs/native/packages/cli/src/platforms/macos.ts +97 -0
- package/vendor/@akanjs/native/packages/cli/src/platforms/targets.ts +12 -0
- package/vendor/@akanjs/native/packages/cli/src/platforms/web-run.ts +69 -0
- package/vendor/@akanjs/native/packages/cli/src/platforms/web.ts +28 -0
- package/vendor/@akanjs/native/packages/cli/src/platforms/windows.ts +82 -0
- package/vendor/@akanjs/native/packages/core/contract.json +96 -0
- package/vendor/@akanjs/native/packages/core/src/acl.ts +272 -0
- package/vendor/@akanjs/native/packages/core/src/boot.ts +97 -0
- package/vendor/@akanjs/native/packages/core/src/contract.ts +100 -0
- package/vendor/@akanjs/native/packages/core/src/errors.ts +95 -0
- package/vendor/@akanjs/native/packages/core/src/files.ts +105 -0
- package/vendor/@akanjs/native/packages/core/src/index.ts +35 -0
- package/vendor/@akanjs/native/packages/core/src/kernel.ts +281 -0
- package/vendor/@akanjs/native/packages/core/src/live.ts +62 -0
- package/vendor/@akanjs/native/packages/core/src/mime.ts +8 -0
- package/vendor/@akanjs/native/packages/core/src/plugin.ts +358 -0
- package/vendor/@akanjs/native/packages/core/src/protocol.ts +194 -0
- package/vendor/@akanjs/native/packages/core/src/runtime.ts +520 -0
- package/vendor/@akanjs/native/packages/core/src/state.ts +46 -0
- package/vendor/@akanjs/native/packages/core/src/testing.ts +176 -0
- package/vendor/@akanjs/native/packages/core/src/version.ts +2 -0
- package/vendor/@akanjs/native/packages/core/src/veto.ts +55 -0
- package/vendor/@akanjs/native/packages/core/vectors/acl.json +57 -0
- package/vendor/@akanjs/native/packages/core/vectors/bridge.json +76 -0
- package/vendor/@akanjs/native/packages/core/vectors/ed25519.json +29 -0
- package/vendor/@akanjs/native/packages/core/vectors/ids.json +73 -0
- package/vendor/@akanjs/native/packages/core/vectors/navigation.json +75 -0
- package/vendor/@akanjs/native/packages/core/vectors/ranges.json +39 -0
- package/vendor/@akanjs/native/packages/core/vectors/retained.json +17 -0
- package/vendor/@akanjs/native/packages/core/vectors/routes.json +66 -0
- package/vendor/@akanjs/native/packages/core/vectors/scope.json +143 -0
- package/vendor/@akanjs/native/packages/desktop/src/deeplinks.ts +143 -0
- package/vendor/@akanjs/native/packages/desktop/src/delta.ts +174 -0
- package/vendor/@akanjs/native/packages/desktop/src/dispatcher.ts +679 -0
- package/vendor/@akanjs/native/packages/desktop/src/ffi.ts +76 -0
- package/vendor/@akanjs/native/packages/desktop/src/host.ts +355 -0
- package/vendor/@akanjs/native/packages/desktop/src/lifecycle.ts +142 -0
- package/vendor/@akanjs/native/packages/desktop/src/main.ts +133 -0
- package/vendor/@akanjs/native/packages/desktop/src/page-veto.ts +103 -0
- package/vendor/@akanjs/native/packages/desktop/src/paths.ts +59 -0
- package/vendor/@akanjs/native/packages/desktop/src/plugin.ts +232 -0
- package/vendor/@akanjs/native/packages/react/src/index.ts +23 -0
- package/vendor/@akanjs/native/plugins/accessibility/android/AccessibilityPlugin.kt +96 -0
- package/vendor/@akanjs/native/plugins/accessibility/ios/AccessibilityPlugin.swift +92 -0
- package/vendor/@akanjs/native/plugins/accessibility/native-plugin.json +21 -0
- package/vendor/@akanjs/native/plugins/accessibility/src/announce.ts +71 -0
- package/vendor/@akanjs/native/plugins/accessibility/src/index.ts +77 -0
- package/vendor/@akanjs/native/plugins/accessibility/src/web.ts +52 -0
- package/vendor/@akanjs/native/plugins/app/android/AppPlugin.kt +72 -0
- package/vendor/@akanjs/native/plugins/app/ios/AppPlugin.swift +52 -0
- package/vendor/@akanjs/native/plugins/app/native-plugin.json +21 -0
- package/vendor/@akanjs/native/plugins/app/src/desktop.ts +64 -0
- package/vendor/@akanjs/native/plugins/app/src/index.ts +77 -0
- package/vendor/@akanjs/native/plugins/app/src/web.ts +12 -0
- package/vendor/@akanjs/native/plugins/app-state/android/AppStatePlugin.kt +54 -0
- package/vendor/@akanjs/native/plugins/app-state/ios/AppStatePlugin.swift +58 -0
- package/vendor/@akanjs/native/plugins/app-state/native-plugin.json +17 -0
- package/vendor/@akanjs/native/plugins/app-state/src/index.ts +42 -0
- package/vendor/@akanjs/native/plugins/app-state/src/web.ts +33 -0
- package/vendor/@akanjs/native/plugins/appearance/android/AppearancePlugin.kt +133 -0
- package/vendor/@akanjs/native/plugins/appearance/ios/AppearancePlugin.swift +109 -0
- package/vendor/@akanjs/native/plugins/appearance/native-plugin.json +18 -0
- package/vendor/@akanjs/native/plugins/appearance/src/desktop.ts +133 -0
- package/vendor/@akanjs/native/plugins/appearance/src/index.ts +62 -0
- package/vendor/@akanjs/native/plugins/appearance/src/setting.ts +18 -0
- package/vendor/@akanjs/native/plugins/appearance/src/web.ts +25 -0
- package/vendor/@akanjs/native/plugins/auth-session/android/AuthSessionPlugin.kt +171 -0
- package/vendor/@akanjs/native/plugins/auth-session/ios/AuthSessionPlugin.swift +112 -0
- package/vendor/@akanjs/native/plugins/auth-session/native-plugin.json +19 -0
- package/vendor/@akanjs/native/plugins/auth-session/src/args.ts +62 -0
- package/vendor/@akanjs/native/plugins/auth-session/src/desktop.ts +133 -0
- package/vendor/@akanjs/native/plugins/auth-session/src/index.ts +39 -0
- package/vendor/@akanjs/native/plugins/autostart/native-plugin.json +10 -0
- package/vendor/@akanjs/native/plugins/autostart/src/desktop.ts +189 -0
- package/vendor/@akanjs/native/plugins/autostart/src/index.ts +51 -0
- package/vendor/@akanjs/native/plugins/badge/ios/BadgePlugin.swift +92 -0
- package/vendor/@akanjs/native/plugins/badge/native-plugin.json +15 -0
- package/vendor/@akanjs/native/plugins/badge/src/count.ts +12 -0
- package/vendor/@akanjs/native/plugins/badge/src/desktop.ts +24 -0
- package/vendor/@akanjs/native/plugins/badge/src/index.ts +40 -0
- package/vendor/@akanjs/native/plugins/badge/src/web.ts +37 -0
- package/vendor/@akanjs/native/plugins/biometric/android/BiometricPlugin.kt +179 -0
- package/vendor/@akanjs/native/plugins/biometric/ios/BiometricPlugin.swift +129 -0
- package/vendor/@akanjs/native/plugins/biometric/native-plugin.json +22 -0
- package/vendor/@akanjs/native/plugins/biometric/src/index.ts +100 -0
- package/vendor/@akanjs/native/plugins/browser/android/BrowserPlugin.kt +178 -0
- package/vendor/@akanjs/native/plugins/browser/ios/BrowserPlugin.swift +63 -0
- package/vendor/@akanjs/native/plugins/browser/native-plugin.json +22 -0
- package/vendor/@akanjs/native/plugins/browser/src/args.ts +34 -0
- package/vendor/@akanjs/native/plugins/browser/src/desktop.ts +40 -0
- package/vendor/@akanjs/native/plugins/browser/src/index.ts +47 -0
- package/vendor/@akanjs/native/plugins/browser/src/web.ts +60 -0
- package/vendor/@akanjs/native/plugins/camera/android/CameraPlugin.kt +365 -0
- package/vendor/@akanjs/native/plugins/camera/ios/CameraPlugin.swift +296 -0
- package/vendor/@akanjs/native/plugins/camera/native-plugin.json +32 -0
- package/vendor/@akanjs/native/plugins/camera/src/desktop.ts +27 -0
- package/vendor/@akanjs/native/plugins/camera/src/index.ts +85 -0
- package/vendor/@akanjs/native/plugins/camera/src/web.ts +267 -0
- package/vendor/@akanjs/native/plugins/clipboard/android/ClipboardPlugin.kt +51 -0
- package/vendor/@akanjs/native/plugins/clipboard/ios/ClipboardPlugin.swift +35 -0
- package/vendor/@akanjs/native/plugins/clipboard/native-plugin.json +17 -0
- package/vendor/@akanjs/native/plugins/clipboard/src/desktop.ts +66 -0
- package/vendor/@akanjs/native/plugins/clipboard/src/index.ts +72 -0
- package/vendor/@akanjs/native/plugins/clipboard/src/web.ts +69 -0
- package/vendor/@akanjs/native/plugins/device/android/DevicePlugin.kt +70 -0
- package/vendor/@akanjs/native/plugins/device/ios/DevicePlugin.swift +80 -0
- package/vendor/@akanjs/native/plugins/device/native-plugin.json +18 -0
- package/vendor/@akanjs/native/plugins/device/src/desktop.ts +276 -0
- package/vendor/@akanjs/native/plugins/device/src/index.ts +72 -0
- package/vendor/@akanjs/native/plugins/device/src/web.ts +162 -0
- package/vendor/@akanjs/native/plugins/dialog/android/DialogPlugin.kt +260 -0
- package/vendor/@akanjs/native/plugins/dialog/ios/DialogPlugin.swift +198 -0
- package/vendor/@akanjs/native/plugins/dialog/native-plugin.json +18 -0
- package/vendor/@akanjs/native/plugins/dialog/src/desktop.ts +80 -0
- package/vendor/@akanjs/native/plugins/dialog/src/index.ts +87 -0
- package/vendor/@akanjs/native/plugins/dialog/src/options.ts +111 -0
- package/vendor/@akanjs/native/plugins/dialog/src/web.ts +296 -0
- package/vendor/@akanjs/native/plugins/dock/native-plugin.json +10 -0
- package/vendor/@akanjs/native/plugins/dock/src/desktop.ts +34 -0
- package/vendor/@akanjs/native/plugins/dock/src/index.ts +46 -0
- package/vendor/@akanjs/native/plugins/file-picker/android/FilePickerPlugin.kt +316 -0
- package/vendor/@akanjs/native/plugins/file-picker/ios/FilePickerPlugin.swift +366 -0
- package/vendor/@akanjs/native/plugins/file-picker/native-plugin.json +18 -0
- package/vendor/@akanjs/native/plugins/file-picker/src/common.ts +125 -0
- package/vendor/@akanjs/native/plugins/file-picker/src/desktop.ts +164 -0
- package/vendor/@akanjs/native/plugins/file-picker/src/index.ts +187 -0
- package/vendor/@akanjs/native/plugins/file-picker/src/web.ts +158 -0
- package/vendor/@akanjs/native/plugins/filesystem/android/FilesystemPlugin.kt +561 -0
- package/vendor/@akanjs/native/plugins/filesystem/ios/FilesystemPlugin.swift +596 -0
- package/vendor/@akanjs/native/plugins/filesystem/native-plugin.json +45 -0
- package/vendor/@akanjs/native/plugins/filesystem/src/common.ts +150 -0
- package/vendor/@akanjs/native/plugins/filesystem/src/desktop.ts +438 -0
- package/vendor/@akanjs/native/plugins/filesystem/src/index.ts +179 -0
- package/vendor/@akanjs/native/plugins/filesystem/src/web.ts +334 -0
- package/vendor/@akanjs/native/plugins/geolocation/android/GeolocationPlugin.kt +360 -0
- package/vendor/@akanjs/native/plugins/geolocation/ios/GeolocationPlugin.swift +284 -0
- package/vendor/@akanjs/native/plugins/geolocation/native-plugin.json +23 -0
- package/vendor/@akanjs/native/plugins/geolocation/src/index.ts +155 -0
- package/vendor/@akanjs/native/plugins/geolocation/src/web.ts +132 -0
- package/vendor/@akanjs/native/plugins/global-shortcut/native-plugin.json +10 -0
- package/vendor/@akanjs/native/plugins/global-shortcut/src/desktop.ts +36 -0
- package/vendor/@akanjs/native/plugins/global-shortcut/src/index.ts +55 -0
- package/vendor/@akanjs/native/plugins/haptics/android/HapticsPlugin.kt +127 -0
- package/vendor/@akanjs/native/plugins/haptics/ios/HapticsPlugin.swift +127 -0
- package/vendor/@akanjs/native/plugins/haptics/native-plugin.json +19 -0
- package/vendor/@akanjs/native/plugins/haptics/src/index.ts +34 -0
- package/vendor/@akanjs/native/plugins/haptics/src/web.ts +53 -0
- package/vendor/@akanjs/native/plugins/http/android/HttpPlugin.kt +234 -0
- package/vendor/@akanjs/native/plugins/http/android/HttpUrl.kt +182 -0
- package/vendor/@akanjs/native/plugins/http/ios/HttpPlugin.swift +228 -0
- package/vendor/@akanjs/native/plugins/http/ios/HttpUrl.swift +166 -0
- package/vendor/@akanjs/native/plugins/http/native-plugin.json +27 -0
- package/vendor/@akanjs/native/plugins/http/src/common.ts +294 -0
- package/vendor/@akanjs/native/plugins/http/src/desktop.ts +69 -0
- package/vendor/@akanjs/native/plugins/http/src/index.ts +181 -0
- package/vendor/@akanjs/native/plugins/http/src/web.ts +40 -0
- package/vendor/@akanjs/native/plugins/iap/android/IapPlugin.kt +358 -0
- package/vendor/@akanjs/native/plugins/iap/ios/IapPlugin.swift +306 -0
- package/vendor/@akanjs/native/plugins/iap/native-plugin.json +28 -0
- package/vendor/@akanjs/native/plugins/iap/src/index.ts +206 -0
- package/vendor/@akanjs/native/plugins/keep-awake/android/KeepAwakePlugin.kt +48 -0
- package/vendor/@akanjs/native/plugins/keep-awake/ios/KeepAwakePlugin.swift +36 -0
- package/vendor/@akanjs/native/plugins/keep-awake/native-plugin.json +17 -0
- package/vendor/@akanjs/native/plugins/keep-awake/src/desktop.ts +127 -0
- package/vendor/@akanjs/native/plugins/keep-awake/src/index.ts +79 -0
- package/vendor/@akanjs/native/plugins/keep-awake/src/web.ts +78 -0
- package/vendor/@akanjs/native/plugins/keyboard/android/KeyboardPlugin.kt +77 -0
- package/vendor/@akanjs/native/plugins/keyboard/ios/KeyboardPlugin.swift +93 -0
- package/vendor/@akanjs/native/plugins/keyboard/native-plugin.json +18 -0
- package/vendor/@akanjs/native/plugins/keyboard/src/index.ts +78 -0
- package/vendor/@akanjs/native/plugins/keyboard/src/web.ts +57 -0
- package/vendor/@akanjs/native/plugins/local-notifications/android/LocalNotificationReceiver.kt +38 -0
- package/vendor/@akanjs/native/plugins/local-notifications/android/LocalNotifications.kt +284 -0
- package/vendor/@akanjs/native/plugins/local-notifications/android/LocalNotificationsPlugin.kt +248 -0
- package/vendor/@akanjs/native/plugins/local-notifications/ios/LocalNotificationsPlugin.swift +279 -0
- package/vendor/@akanjs/native/plugins/local-notifications/native-plugin.json +35 -0
- package/vendor/@akanjs/native/plugins/local-notifications/src/desktop.ts +196 -0
- package/vendor/@akanjs/native/plugins/local-notifications/src/index.ts +174 -0
- package/vendor/@akanjs/native/plugins/local-notifications/src/schedule.ts +164 -0
- package/vendor/@akanjs/native/plugins/local-notifications/src/timers.ts +72 -0
- package/vendor/@akanjs/native/plugins/local-notifications/src/web.ts +158 -0
- package/vendor/@akanjs/native/plugins/menu/native-plugin.json +10 -0
- package/vendor/@akanjs/native/plugins/menu/src/desktop.ts +52 -0
- package/vendor/@akanjs/native/plugins/menu/src/index.ts +107 -0
- package/vendor/@akanjs/native/plugins/network/android/NetworkPlugin.kt +124 -0
- package/vendor/@akanjs/native/plugins/network/ios/NetworkPlugin.swift +82 -0
- package/vendor/@akanjs/native/plugins/network/native-plugin.json +19 -0
- package/vendor/@akanjs/native/plugins/network/src/index.ts +59 -0
- package/vendor/@akanjs/native/plugins/network/src/web.ts +43 -0
- package/vendor/@akanjs/native/plugins/opener/android/OpenerPlugin.kt +81 -0
- package/vendor/@akanjs/native/plugins/opener/ios/OpenerPlugin.swift +83 -0
- package/vendor/@akanjs/native/plugins/opener/native-plugin.json +25 -0
- package/vendor/@akanjs/native/plugins/opener/src/desktop.ts +88 -0
- package/vendor/@akanjs/native/plugins/opener/src/index.ts +35 -0
- package/vendor/@akanjs/native/plugins/opener/src/url.ts +39 -0
- package/vendor/@akanjs/native/plugins/opener/src/web.ts +33 -0
- package/vendor/@akanjs/native/plugins/preferences/android/PreferencesPlugin.kt +44 -0
- package/vendor/@akanjs/native/plugins/preferences/ios/PreferencesPlugin.swift +47 -0
- package/vendor/@akanjs/native/plugins/preferences/native-plugin.json +18 -0
- package/vendor/@akanjs/native/plugins/preferences/src/desktop.ts +59 -0
- package/vendor/@akanjs/native/plugins/preferences/src/index.ts +75 -0
- package/vendor/@akanjs/native/plugins/preferences/src/web.ts +55 -0
- package/vendor/@akanjs/native/plugins/push/android/AkanNativeMessagingService.kt +17 -0
- package/vendor/@akanjs/native/plugins/push/android/PushPlugin.kt +257 -0
- package/vendor/@akanjs/native/plugins/push/ios/PushPlugin.swift +169 -0
- package/vendor/@akanjs/native/plugins/push/native-plugin.json +23 -0
- package/vendor/@akanjs/native/plugins/push/src/index.ts +73 -0
- package/vendor/@akanjs/native/plugins/screen/native-plugin.json +10 -0
- package/vendor/@akanjs/native/plugins/screen/src/desktop.ts +50 -0
- package/vendor/@akanjs/native/plugins/screen/src/index.ts +107 -0
- package/vendor/@akanjs/native/plugins/screen/src/web.ts +92 -0
- package/vendor/@akanjs/native/plugins/screen-orientation/android/ScreenOrientationPlugin.kt +113 -0
- package/vendor/@akanjs/native/plugins/screen-orientation/ios/ScreenOrientationPlugin.swift +150 -0
- package/vendor/@akanjs/native/plugins/screen-orientation/native-plugin.json +17 -0
- package/vendor/@akanjs/native/plugins/screen-orientation/src/index.ts +69 -0
- package/vendor/@akanjs/native/plugins/screen-orientation/src/types.ts +26 -0
- package/vendor/@akanjs/native/plugins/screen-orientation/src/web.ts +67 -0
- package/vendor/@akanjs/native/plugins/secure-storage/android/SecureStoragePlugin.kt +184 -0
- package/vendor/@akanjs/native/plugins/secure-storage/ios/SecureStoragePlugin.swift +145 -0
- package/vendor/@akanjs/native/plugins/secure-storage/native-plugin.json +18 -0
- package/vendor/@akanjs/native/plugins/secure-storage/src/desktop.ts +332 -0
- package/vendor/@akanjs/native/plugins/secure-storage/src/index.ts +33 -0
- package/vendor/@akanjs/native/plugins/share/android/SharePlugin.kt +218 -0
- package/vendor/@akanjs/native/plugins/share/ios/SharePlugin.swift +142 -0
- package/vendor/@akanjs/native/plugins/share/native-plugin.json +18 -0
- package/vendor/@akanjs/native/plugins/share/src/index.ts +87 -0
- package/vendor/@akanjs/native/plugins/share/src/options.ts +43 -0
- package/vendor/@akanjs/native/plugins/share/src/web.ts +116 -0
- package/vendor/@akanjs/native/plugins/single-instance/native-plugin.json +10 -0
- package/vendor/@akanjs/native/plugins/single-instance/src/desktop.ts +63 -0
- package/vendor/@akanjs/native/plugins/single-instance/src/index.ts +32 -0
- package/vendor/@akanjs/native/plugins/single-instance/src/socket.ts +248 -0
- package/vendor/@akanjs/native/plugins/splash-screen/android/SplashScreenPlugin.kt +19 -0
- package/vendor/@akanjs/native/plugins/splash-screen/ios/SplashScreenPlugin.swift +20 -0
- package/vendor/@akanjs/native/plugins/splash-screen/native-plugin.json +17 -0
- package/vendor/@akanjs/native/plugins/splash-screen/src/index.ts +24 -0
- package/vendor/@akanjs/native/plugins/splash-screen/src/web.ts +17 -0
- package/vendor/@akanjs/native/plugins/sqlite/android/SqlStatements.kt +121 -0
- package/vendor/@akanjs/native/plugins/sqlite/android/SqlitePlugin.kt +327 -0
- package/vendor/@akanjs/native/plugins/sqlite/ios/SqlitePlugin.swift +361 -0
- package/vendor/@akanjs/native/plugins/sqlite/native-plugin.json +18 -0
- package/vendor/@akanjs/native/plugins/sqlite/src/common.ts +221 -0
- package/vendor/@akanjs/native/plugins/sqlite/src/desktop.ts +140 -0
- package/vendor/@akanjs/native/plugins/sqlite/src/index.ts +114 -0
- package/vendor/@akanjs/native/plugins/toast/android/ToastPlugin.kt +27 -0
- package/vendor/@akanjs/native/plugins/toast/native-plugin.json +14 -0
- package/vendor/@akanjs/native/plugins/toast/src/index.ts +41 -0
- package/vendor/@akanjs/native/plugins/toast/src/queue.ts +77 -0
- package/vendor/@akanjs/native/plugins/toast/src/web.ts +130 -0
- package/vendor/@akanjs/native/plugins/tray/native-plugin.json +10 -0
- package/vendor/@akanjs/native/plugins/tray/src/desktop.ts +73 -0
- package/vendor/@akanjs/native/plugins/tray/src/index.ts +111 -0
- package/vendor/@akanjs/native/plugins/updates/android/UpdatesPlugin.kt +290 -0
- package/vendor/@akanjs/native/plugins/updates/ios/UpdatesPlugin.swift +292 -0
- package/vendor/@akanjs/native/plugins/updates/native-plugin.json +19 -0
- package/vendor/@akanjs/native/plugins/updates/src/desktop.ts +558 -0
- package/vendor/@akanjs/native/plugins/updates/src/index.ts +95 -0
- package/vendor/@akanjs/native/plugins/window/native-plugin.json +32 -0
- package/vendor/@akanjs/native/plugins/window/src/desktop.ts +170 -0
- package/vendor/@akanjs/native/plugins/window/src/index.ts +342 -0
- package/vendor/@akanjs/native/plugins/window/src/web.ts +43 -0
- package/vendor/@akanjs/native/plugins/window-state/native-plugin.json +10 -0
- package/vendor/@akanjs/native/plugins/window-state/src/desktop.ts +73 -0
- package/vendor/@akanjs/native/plugins/window-state/src/index.ts +35 -0
- package/vendor/@akanjs/native/plugins/window-state/src/state.ts +146 -0
- package/webkit/bootCsr.tsx +26 -14
- package/webkit/index.ts +0 -2
- package/webkit/nativeNavigation.ts +116 -0
- package/webkit/nativePurchase.ts +93 -0
- package/webkit/useCamera.tsx +76 -71
- package/webkit/useCsrValues.ts +10 -124
- package/webkit/useGeoLocation.tsx +11 -13
- package/webkit/usePurchase.tsx +68 -123
- package/capacitor.base.config.ts +0 -140
- package/client/capacitor.ts +0 -252
- package/types/capacitor.base.config.d.ts +0 -3
- package/types/client/capacitor.d.ts +0 -290
- package/types/webkit/useCodepush.d.ts +0 -16
- package/types/webkit/useContact.d.ts +0 -11
- package/webkit/useCodepush.tsx +0 -76
- package/webkit/useContact.tsx +0 -45
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
package com.akanjs.runtime
|
|
2
|
+
|
|
3
|
+
import android.net.Uri
|
|
4
|
+
import android.os.Handler
|
|
5
|
+
import android.os.Looper
|
|
6
|
+
import android.util.Log
|
|
7
|
+
import android.webkit.WebMessage
|
|
8
|
+
import android.webkit.WebMessagePort
|
|
9
|
+
import android.webkit.WebView
|
|
10
|
+
import java.io.File
|
|
11
|
+
import org.json.JSONArray
|
|
12
|
+
import org.json.JSONException
|
|
13
|
+
import org.json.JSONObject
|
|
14
|
+
import org.json.JSONTokener
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Bridge over a framework MessagePort (docs/research/android.md §4.1):
|
|
18
|
+
* page: listens for "message", then fetch("/__akan_native/hello")
|
|
19
|
+
* shell: createWebMessageChannel() and postWebMessage(port, targetOrigin = app origin)
|
|
20
|
+
* Only the app-origin main frame receives the port. A JavascriptInterface would be injected
|
|
21
|
+
* into every frame, cross-origin iframes included, so none is registered.
|
|
22
|
+
* All dispatch happens on the main thread (the port callback is bound to the main Handler).
|
|
23
|
+
*
|
|
24
|
+
* Bridge v1.1: requests name their document (one page load, one port). A claim or a request with a
|
|
25
|
+
* new id ends the current document, and calls of ended documents are refused. Responses and events
|
|
26
|
+
* of the current document are numbered (`seq`) on the main thread just before they are posted.
|
|
27
|
+
*/
|
|
28
|
+
class AkanNativeBridge(private val webView: WebView) {
|
|
29
|
+
private val main = Handler(Looper.getMainLooper())
|
|
30
|
+
private val plugins = LinkedHashMap<String, AkanNativePlugin>()
|
|
31
|
+
private val listeners = HashMap<String, Int>() // "plugin\u0000event" → count
|
|
32
|
+
|
|
33
|
+
private var port: WebMessagePort? = null
|
|
34
|
+
private var document: AkanNativeDocument? = null
|
|
35
|
+
/** Ended documents, so their late calls are refused. */
|
|
36
|
+
private val ended = ArrayDeque<String>()
|
|
37
|
+
|
|
38
|
+
/** The app's capabilities from boot.json (PL-11); null for builds without an ACL (everything allowed). */
|
|
39
|
+
var acl: AkanNativeAcl? = null
|
|
40
|
+
|
|
41
|
+
/** boot.json `plugins`: what each plugin declares natively on Android (the L2 declaration gate). */
|
|
42
|
+
var declarations: Map<*, *> = emptyMap<String, Any?>()
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* "plugin\u0000event" of events whose payload is a snapshot (plugins[].coalesce): only the latest of
|
|
46
|
+
* a burst is sent (architecture review stage 4). Read once the declarations are set.
|
|
47
|
+
*/
|
|
48
|
+
private val coalescing: Set<String> by lazy {
|
|
49
|
+
val keys = mutableSetOf("\$host\u0000tick")
|
|
50
|
+
for ((plugin, decl) in declarations) ((decl as? Map<*, *>)?.get("coalesce") as? List<*>)?.forEach { keys.add("$plugin\u0000$it") }
|
|
51
|
+
keys
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** Dev builds: the self-test's \$host methods. */
|
|
55
|
+
var dev = false
|
|
56
|
+
|
|
57
|
+
/** Dev builds: \$host.hang calls still open, and how many were cancelled. */
|
|
58
|
+
private val hanging = ArrayList<AkanNativeCall>()
|
|
59
|
+
private var hangCancels = 0
|
|
60
|
+
|
|
61
|
+
fun register(id: String, plugin: AkanNativePlugin) {
|
|
62
|
+
plugins[id] = plugin
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
fun plugins(): Collection<AkanNativePlugin> = plugins.values
|
|
66
|
+
|
|
67
|
+
fun plugin(id: String): AkanNativePlugin? = plugins[id]
|
|
68
|
+
|
|
69
|
+
/** FileRefs are the process's (AkanNativeApp): a page of another activity may still show one. */
|
|
70
|
+
fun file(id: String): Pair<File, String>? = AkanNativeApp.file(id)
|
|
71
|
+
|
|
72
|
+
fun registerFile(file: File, mime: String): JSONObject = AkanNativeApp.registerFile(file, mime)
|
|
73
|
+
|
|
74
|
+
/** Ports handed out and not claimed yet, with their ring nonce (a few; the oldest is closed). */
|
|
75
|
+
private val offers = ArrayList<Pair<String, WebMessagePort>>()
|
|
76
|
+
|
|
77
|
+
/** The nonce of the current port's ring: the page has its port, so rings with it are late retries. */
|
|
78
|
+
private var claimed: String? = null
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* The doorbell (/__akan_native/hello?n=<nonce>) rang. The shell posts a new port with that nonce to
|
|
83
|
+
* the app-origin main frame, but keeps the current one until the page claims the new port
|
|
84
|
+
* ("akan-native:claim", its first message). Only the page that rang knows its nonce, so a ring from a
|
|
85
|
+
* frame (any frame can ring: a sandboxed frame's fetch carries the app origin as Referer) posts a
|
|
86
|
+
* port the page ignores, and nothing changes (SEC-4; before, every ring reset the page's bridge).
|
|
87
|
+
* A claim means a new document: the previous port and its subscriptions belong to a page that is
|
|
88
|
+
* gone. This is decided on claim and not in onPageStarted because a small page can ring before
|
|
89
|
+
* onPageStarted runs (reproduced on cold starts).
|
|
90
|
+
*
|
|
91
|
+
* The page rings again when no port came within 3 s (the first may have been posted before its
|
|
92
|
+
* listener existed). Every offer for that ring stays open until the page claims one: it takes
|
|
93
|
+
* the first port that reaches it and closes the others, and the shell closes the rest on claim.
|
|
94
|
+
* Rings for the nonce the page already claimed are ignored.
|
|
95
|
+
*/
|
|
96
|
+
fun offerPort(nonce: String) = main.post {
|
|
97
|
+
if (nonce == claimed) return@post
|
|
98
|
+
while (offers.size >= MAX_OFFERS) offers.removeAt(0).second.close()
|
|
99
|
+
val (native, page) = webView.createWebMessageChannel()
|
|
100
|
+
native.setWebMessageCallback(object : WebMessagePort.WebMessageCallback() {
|
|
101
|
+
override fun onMessage(p: WebMessagePort, message: WebMessage) {
|
|
102
|
+
if (port !== native) {
|
|
103
|
+
if (offers.none { it.second === native }) return // closed on another claim
|
|
104
|
+
claim(nonce, native)
|
|
105
|
+
}
|
|
106
|
+
val text = message.data ?: return
|
|
107
|
+
if (text == CLAIM) return
|
|
108
|
+
dispatch(text, p)
|
|
109
|
+
}
|
|
110
|
+
}, main)
|
|
111
|
+
offers.add(nonce to native)
|
|
112
|
+
webView.postWebMessage(WebMessage("akan-native:port:$nonce", arrayOf(page)), Uri.parse(AkanNativeAssetServer.ORIGIN))
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
private fun claim(nonce: String, native: WebMessagePort) {
|
|
116
|
+
for ((_, other) in offers) if (other !== native) other.close() // retries, rings of frames, or of the page that is gone
|
|
117
|
+
offers.clear()
|
|
118
|
+
port?.close()
|
|
119
|
+
endDocument()
|
|
120
|
+
port = native
|
|
121
|
+
claimed = nonce
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* The page's document ended (a new one claimed a port or called, or the activity is gone). In
|
|
126
|
+
* this order, each step guarded, done by the host without asking the page: its calls end (their
|
|
127
|
+
* plugins' onCancel handlers run), its subscriptions stop, what its calls own is closed (last
|
|
128
|
+
* first), then the plugins' documentEnded hooks run. Calling it again does nothing.
|
|
129
|
+
*/
|
|
130
|
+
fun endDocument() {
|
|
131
|
+
val doc = document ?: return
|
|
132
|
+
document = null
|
|
133
|
+
if (doc.id.isNotEmpty()) {
|
|
134
|
+
ended.addLast(doc.id)
|
|
135
|
+
while (ended.size > 16) ended.removeFirst()
|
|
136
|
+
}
|
|
137
|
+
val running = doc.running.values.mapNotNull { it.get() }
|
|
138
|
+
doc.running.clear()
|
|
139
|
+
for (call in running) safely("bridge") { call.cancel(AkanNativeErrorCode.CANCELLED, "the page that made this call is gone") }
|
|
140
|
+
for ((key, count) in listeners) {
|
|
141
|
+
if (count <= 0) continue
|
|
142
|
+
val (plugin, event) = key.split('\u0000', limit = 2)
|
|
143
|
+
safely(plugin) { plugins[plugin]?.stopListening(event) }
|
|
144
|
+
}
|
|
145
|
+
listeners.clear()
|
|
146
|
+
for (dispose in doc.end()) safely("bridge") { dispose() }
|
|
147
|
+
for ((id, plugin) in plugins) safely(id) { plugin.documentEnded(doc.id) }
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/** The window (activity) is gone: its document ends and the App services forget its plugins' listeners. */
|
|
151
|
+
fun windowEnded(owner: Any) {
|
|
152
|
+
endDocument()
|
|
153
|
+
AkanNativeLinks.removeAll(owner)
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/** Table sizes for the document churn check (K13, dev \$host.info). */
|
|
157
|
+
private fun stats(): JSONObject = JSONObject()
|
|
158
|
+
.put("documents", if (document == null) 0 else 1)
|
|
159
|
+
.put("ended", ended.size)
|
|
160
|
+
.put("subscriptions", listeners.values.sum())
|
|
161
|
+
.put("running", document?.running?.size ?: 0)
|
|
162
|
+
.put("resources", document?.resourceCount ?: 0)
|
|
163
|
+
.put("files", AkanNativeApp.fileCount)
|
|
164
|
+
.put("linkListeners", AkanNativeLinks.listenerCount)
|
|
165
|
+
|
|
166
|
+
/** The document of a request: a new id ends the current one, an ended one gets null. */
|
|
167
|
+
private fun dispatch(text: String, port: WebMessagePort) {
|
|
168
|
+
val raw = try {
|
|
169
|
+
JSONTokener(text).nextValue()
|
|
170
|
+
} catch (e: JSONException) {
|
|
171
|
+
return post(port, error(0, AkanNativeErrorCode.INVALID_ARGS, "request is not JSON"), AkanNativeDocument(""))
|
|
172
|
+
}
|
|
173
|
+
val parsed = AkanNativeAcl.plain(raw)
|
|
174
|
+
// SEC-3: the shape of the request, checked like every host does (AkanNativeKernel, shared vectors).
|
|
175
|
+
AkanNativeKernel.validateRequest(parsed)?.let { problem ->
|
|
176
|
+
val id = ((parsed as? Map<*, *>)?.get("id") as? Number)?.toDouble()?.takeIf { it == Math.floor(it) }?.toLong() ?: 0
|
|
177
|
+
return post(port, error(id, AkanNativeErrorCode.INVALID_ARGS, problem), AkanNativeDocument(""))
|
|
178
|
+
}
|
|
179
|
+
val req = parsed as Map<*, *>
|
|
180
|
+
val id = (req["id"] as Number).toLong()
|
|
181
|
+
val pluginId = req["plugin"] as String
|
|
182
|
+
val method = req["method"] as String
|
|
183
|
+
// Bridge v1.1: which document the request belongs to (AkanNativeKernel.admitDocument).
|
|
184
|
+
val docId = req["doc"] as String?
|
|
185
|
+
val doc = when (AkanNativeKernel.admitDocument(document?.id, ended, docId)) {
|
|
186
|
+
AkanNativeAdmission.CURRENT -> document!!
|
|
187
|
+
AkanNativeAdmission.NEW -> {
|
|
188
|
+
endDocument()
|
|
189
|
+
AkanNativeDocument(docId ?: "").also { document = it }
|
|
190
|
+
}
|
|
191
|
+
AkanNativeAdmission.ENDED -> return post(port, error(id, AkanNativeErrorCode.INTERNAL, "the page that made this call is gone"), AkanNativeDocument(""))
|
|
192
|
+
// Its answer would take a number the page runtime never sees, and its id would be spent
|
|
193
|
+
// for the runtime's own request with that id.
|
|
194
|
+
AkanNativeAdmission.NO_DOC -> return post(port, error(id, AkanNativeErrorCode.INVALID_ARGS, "request has no document id"), AkanNativeDocument(""))
|
|
195
|
+
}
|
|
196
|
+
// v1.1 `once`, before any AkanNativeCall exists: a dropped one would be answered by its safety net.
|
|
197
|
+
if (doc.id.isNotEmpty() && !doc.ids.accept(id)) {
|
|
198
|
+
Log.w(TAG, "dropping a repeated request $id")
|
|
199
|
+
return
|
|
200
|
+
}
|
|
201
|
+
val args = (raw as JSONObject).optJSONObject("args") ?: JSONObject()
|
|
202
|
+
val call = AkanNativeCall(method, args) { body ->
|
|
203
|
+
onMain { doc.running.remove(id) }
|
|
204
|
+
body.put("v", 1).put("id", id)
|
|
205
|
+
post(port, body, doc)
|
|
206
|
+
}
|
|
207
|
+
if (pluginId == "\$bridge") return bridgeOp(call, doc)
|
|
208
|
+
doc.running[id] = java.lang.ref.WeakReference(call)
|
|
209
|
+
call.document = doc
|
|
210
|
+
if (pluginId == "\$host") return host(call)
|
|
211
|
+
val plugin = plugins[pluginId] ?: return call.reject(AkanNativeErrorCode.NOT_FOUND, "plugin $pluginId is not registered")
|
|
212
|
+
// L2: an undeclared method or event never reaches the plugin, whatever its code handles.
|
|
213
|
+
val subscription = method == "\$listen" || method == "\$unlisten"
|
|
214
|
+
if (!AkanNativeKernel.declares(declarations[pluginId], method, if (subscription) call.string("event") else null)) {
|
|
215
|
+
return call.reject(AkanNativeErrorCode.NOT_FOUND, if (subscription) "event $pluginId.${call.string("event")} is not declared" else "method $pluginId.$method is not declared")
|
|
216
|
+
}
|
|
217
|
+
// PL-11 / plugins.md C7: checked before the plugin sees the call. $unlisten always passes.
|
|
218
|
+
val rules = acl
|
|
219
|
+
if (method != "\$unlisten" && rules != null) {
|
|
220
|
+
val event = call.string("event") ?: ""
|
|
221
|
+
val (allowed, scope) = rules.check(pluginId, if (method == "\$listen") "listen:$event" else method)
|
|
222
|
+
if (!allowed) {
|
|
223
|
+
val what = if (method == "\$listen") "$event events" else "$method()"
|
|
224
|
+
return call.reject(AkanNativeErrorCode.NOT_ALLOWED, "$pluginId.$what is not allowed by the app's capabilities")
|
|
225
|
+
}
|
|
226
|
+
call.scope = scope
|
|
227
|
+
}
|
|
228
|
+
if (method == "\$listen" || method == "\$unlisten") {
|
|
229
|
+
val event = call.string("event") ?: return call.reject(AkanNativeErrorCode.INVALID_ARGS, "$method requires args.event")
|
|
230
|
+
val key = "$pluginId\u0000$event"
|
|
231
|
+
val before = listeners[key] ?: 0
|
|
232
|
+
val after = maxOf(0, before + if (method == "\$listen") 1 else -1)
|
|
233
|
+
listeners[key] = after
|
|
234
|
+
if (before == 0 && after == 1) safely(pluginId) { plugin.startListening(event) }
|
|
235
|
+
if (before > 0 && after == 0) safely(pluginId) { plugin.stopListening(event) }
|
|
236
|
+
return call.resolve()
|
|
237
|
+
}
|
|
238
|
+
try {
|
|
239
|
+
plugin.handle(call)
|
|
240
|
+
} catch (e: Exception) {
|
|
241
|
+
Log.e(TAG, "$pluginId.$method failed", e)
|
|
242
|
+
call.reject(AkanNativeErrorCode.INTERNAL, e.toString())
|
|
243
|
+
} catch (e: LinkageError) { // an API this Android lacks, reached without a version check
|
|
244
|
+
Log.e(TAG, "$pluginId.$method needs an API this Android version does not have", e)
|
|
245
|
+
call.reject(AkanNativeErrorCode.UNSUPPORTED, "$pluginId.$method is not available on this Android version")
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* \$bridge operations (v1.1 `cancel`): follow-ups on what this document's own calls handed out,
|
|
251
|
+
* so they need no ACL entry. Messages come in order over the port, so a cancel never overtakes its call.
|
|
252
|
+
*/
|
|
253
|
+
private fun bridgeOp(call: AkanNativeCall, doc: AkanNativeDocument) {
|
|
254
|
+
if (call.method == "cancel") {
|
|
255
|
+
val target = call.args.getLong("id")
|
|
256
|
+
val running = doc.running.remove(target)?.get() ?: return call.resolve(JSONObject().put("cancelled", false))
|
|
257
|
+
val timeout = call.string("reason") == "timeout"
|
|
258
|
+
running.cancel(if (timeout) AkanNativeErrorCode.TIMEOUT else AkanNativeErrorCode.CANCELLED, if (timeout) "the page's time limit for this call ran out" else "cancelled by the page")
|
|
259
|
+
return call.resolve(JSONObject().put("cancelled", true))
|
|
260
|
+
}
|
|
261
|
+
// release
|
|
262
|
+
val url = call.string("url") ?: ""
|
|
263
|
+
val path = url.removePrefix(AkanNativeAssetServer.ORIGIN)
|
|
264
|
+
val released = path.startsWith("/__akan_native/file/") && AkanNativeApp.releaseFile(path.removePrefix("/__akan_native/file/"))
|
|
265
|
+
call.resolve(JSONObject().put("released", released))
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
private fun onMain(block: () -> Unit) {
|
|
269
|
+
if (Looper.myLooper() == Looper.getMainLooper()) block() else main.post(block)
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
fun emit(plugin: String, event: String, data: Any?) {
|
|
273
|
+
if ((listeners["$plugin\u0000$event"] ?: 0) == 0) return
|
|
274
|
+
send(plugin, event, data)
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/** An event for the current document. */
|
|
278
|
+
private fun send(plugin: String, event: String, data: Any?) = onMain {
|
|
279
|
+
val message = JSONObject().put("v", 1).put("plugin", plugin).put("event", event)
|
|
280
|
+
if (data != null) message.put("data", data)
|
|
281
|
+
val target = port ?: return@onMain
|
|
282
|
+
val doc = document ?: return@onMain
|
|
283
|
+
val key = "$plugin\u0000$event"
|
|
284
|
+
if (key !in coalescing) return@onMain post(target, message, doc)
|
|
285
|
+
// The last waiting entry is replaced when it is the same event; otherwise it queues behind.
|
|
286
|
+
if (doc.outbox.lastOrNull()?.first == key) doc.outbox[doc.outbox.size - 1] = key to message else doc.outbox.add(key to message)
|
|
287
|
+
if (!doc.outboxScheduled) {
|
|
288
|
+
doc.outboxScheduled = true
|
|
289
|
+
main.postDelayed({ flushOutbox(doc) }, 100)
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/** Sends the document's waiting coalesced events, in order (numbered now, when they go). Main thread. */
|
|
294
|
+
private fun flushOutbox(doc: AkanNativeDocument) {
|
|
295
|
+
doc.outboxScheduled = false
|
|
296
|
+
if (doc.outbox.isEmpty()) return
|
|
297
|
+
val target = port
|
|
298
|
+
val waiting = doc.outbox.toList()
|
|
299
|
+
doc.outbox.clear()
|
|
300
|
+
if (document !== doc || target == null) return
|
|
301
|
+
for ((_, message) in waiting) deliver(target, message, doc)
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* Numbers the message (on the main thread, where everything is sent from) and posts it. A plugin
|
|
306
|
+
* may answer after the page reloaded (camera after an activity result, a dialog left open): its
|
|
307
|
+
* port is closed by then and postMessage throws IllegalStateException. The page that asked is
|
|
308
|
+
* gone, so the answer is dropped. Posting also happens from plugin threads: hop to main.
|
|
309
|
+
*/
|
|
310
|
+
private fun post(port: WebMessagePort, message: JSONObject, doc: AkanNativeDocument) {
|
|
311
|
+
val send = Runnable {
|
|
312
|
+
flushOutbox(doc) // what waits goes first, so the page sees it in order
|
|
313
|
+
deliver(port, message, doc)
|
|
314
|
+
}
|
|
315
|
+
if (Looper.myLooper() == Looper.getMainLooper()) send.run() else main.post(send)
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/** Numbers a message of `doc` while it is the current document and posts it. Main thread. */
|
|
319
|
+
private fun deliver(port: WebMessagePort, message: JSONObject, doc: AkanNativeDocument) {
|
|
320
|
+
if (doc.id.isNotEmpty()) {
|
|
321
|
+
message.put("doc", doc.id)
|
|
322
|
+
if (document === doc) message.put("seq", ++doc.seq)
|
|
323
|
+
}
|
|
324
|
+
try {
|
|
325
|
+
port.postMessage(WebMessage(jsSafe(message.toString())))
|
|
326
|
+
} catch (e: IllegalStateException) {
|
|
327
|
+
Log.i(TAG, "dropping a bridge message for a page that is gone")
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/** A response for a request that never becomes an AkanNativeCall (not numbered). */
|
|
332
|
+
private fun error(id: Long, code: String, message: String): JSONObject =
|
|
333
|
+
JSONObject().put("v", 1).put("id", id).put("ok", false).put("error", JSONObject().put("code", code).put("message", message))
|
|
334
|
+
|
|
335
|
+
/** Shell built-ins the page runtime calls. Dev builds only: the self-test's bridge checks. */
|
|
336
|
+
private fun host(call: AkanNativeCall) {
|
|
337
|
+
// AkanNativeFeatures.DEV is a constant: release builds (false) lose these methods and what only they
|
|
338
|
+
// reach (AkanNativeVectors) in R8 (architecture review stage 6).
|
|
339
|
+
if (!AkanNativeFeatures.DEV || !dev) return call.reject(AkanNativeErrorCode.NOT_FOUND, "unknown host method ${call.method}")
|
|
340
|
+
when (call.method) {
|
|
341
|
+
"echo" -> { // answers, then sends an event right after the answer (the order check)
|
|
342
|
+
call.resolve(call.args)
|
|
343
|
+
send("\$host", "echo", call.args)
|
|
344
|
+
}
|
|
345
|
+
"info" -> call.resolve(JSONObject().put("instance", AkanNativeApp.instance).put("bundleSelections", AkanNativeApp.bundleSelections).put("windows", AkanNativeApp.windows).put("stats", stats()).put("cancels", hangCancels))
|
|
346
|
+
"burst" -> { // coalescing \$host.tick events, then the answer (the coalesce check)
|
|
347
|
+
val count = call.int("count") ?: 0
|
|
348
|
+
for (n in 0 until count) send("\$host", "tick", JSONObject().put("n", n))
|
|
349
|
+
call.resolve(JSONObject().put("sent", count))
|
|
350
|
+
}
|
|
351
|
+
"hang" -> { // never answers by itself; counts its cancellation (v1.1 cancel check)
|
|
352
|
+
hanging.add(call)
|
|
353
|
+
call.onCancel {
|
|
354
|
+
hangCancels++
|
|
355
|
+
hanging.remove(call)
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
"vectors" -> { // the shared vectors against this device's kernel (AkanNativeVectors), off the main thread
|
|
359
|
+
Thread {
|
|
360
|
+
val result = AkanNativeVectors.run()
|
|
361
|
+
call.resolve(JSONObject().put("passed", result.passed).put("expected", AkanNativeVectors.expected).put("failures", JSONArray(result.failures.take(20))))
|
|
362
|
+
}.start()
|
|
363
|
+
}
|
|
364
|
+
"recreate" -> { // a new activity in this process
|
|
365
|
+
call.resolve()
|
|
366
|
+
main.postDelayed({ (webView.context as? android.app.Activity)?.recreate() }, 200)
|
|
367
|
+
}
|
|
368
|
+
else -> call.reject(AkanNativeErrorCode.NOT_FOUND, "unknown host method ${call.method}")
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
private inline fun safely(plugin: String, block: () -> Unit) {
|
|
373
|
+
try {
|
|
374
|
+
block()
|
|
375
|
+
} catch (e: Exception) {
|
|
376
|
+
Log.e(TAG, "plugin $plugin failed", e)
|
|
377
|
+
} catch (e: LinkageError) {
|
|
378
|
+
Log.e(TAG, "plugin $plugin needs an API this Android version does not have", e)
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
companion object {
|
|
383
|
+
private const val CLAIM = "akan-native:claim"
|
|
384
|
+
private const val MAX_OFFERS = 4
|
|
385
|
+
/** org.json output is valid JS; escape the two line terminators older engines choke on. */
|
|
386
|
+
fun jsSafe(json: String): String = json.replace("\u2028", "\\u2028").replace("\u2029", "\\u2029")
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/** One page load (bridge v1.1 `doc`): the numbering of what it is sent, and its request ids. Main thread only. */
|
|
391
|
+
internal class AkanNativeDocument(override val id: String) : AkanNativeDocumentScope {
|
|
392
|
+
var seq = 0
|
|
393
|
+
val ids = AkanNativeCallIds()
|
|
394
|
+
/** Calls not answered yet (v1.1 `cancel`). Weak: a call a plugin drops must still be collected, which answers it. */
|
|
395
|
+
val running = HashMap<Long, java.lang.ref.WeakReference<AkanNativeCall>>()
|
|
396
|
+
/** Coalescing events not sent yet, in order (AkanNativeBridge.send). Main thread. */
|
|
397
|
+
val outbox = ArrayList<Pair<String, JSONObject>>()
|
|
398
|
+
var outboxScheduled = false
|
|
399
|
+
override var ended = false
|
|
400
|
+
private set
|
|
401
|
+
private val resources = LinkedHashMap<Long, () -> Unit>()
|
|
402
|
+
private var nextToken = 0L
|
|
403
|
+
|
|
404
|
+
override fun own(dispose: () -> Unit): Long {
|
|
405
|
+
if (ended) {
|
|
406
|
+
dispose()
|
|
407
|
+
return 0
|
|
408
|
+
}
|
|
409
|
+
resources[++nextToken] = dispose
|
|
410
|
+
return nextToken
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
override fun disown(token: Long) {
|
|
414
|
+
resources.remove(token)
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
val resourceCount: Int get() = resources.size
|
|
418
|
+
|
|
419
|
+
/** Marks it ended and hands over its disposers, last owned first. */
|
|
420
|
+
fun end(): List<() -> Unit> {
|
|
421
|
+
ended = true
|
|
422
|
+
return resources.values.reversed().also { resources.clear() }
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
/**
|
|
427
|
+
* A document's request ids (v1.1 `once`): each is accepted once. Ids grow within a document; recent
|
|
428
|
+
* ones are kept in a set and older ones covered by a floor (CallIds in @akanjs/native/desktop).
|
|
429
|
+
*/
|
|
430
|
+
internal class AkanNativeCallIds {
|
|
431
|
+
private var floor = Long.MIN_VALUE
|
|
432
|
+
private val seen = HashSet<Long>()
|
|
433
|
+
|
|
434
|
+
fun accept(id: Long): Boolean {
|
|
435
|
+
if (id <= floor || id in seen) return false
|
|
436
|
+
seen.add(id)
|
|
437
|
+
if (seen.size > 1024) {
|
|
438
|
+
val oldest = seen.sorted().take(512)
|
|
439
|
+
seen.removeAll(oldest.toSet())
|
|
440
|
+
floor = oldest.last()
|
|
441
|
+
}
|
|
442
|
+
return true
|
|
443
|
+
}
|
|
444
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// Framework APIs that changed after Android 10 (API 29, the app's minSdk), in one place for the shell
|
|
2
|
+
// and the plugins. Code that needs API N lives in an ApiN object and runs only under
|
|
3
|
+
// `Build.VERSION.SDK_INT >= N`; the build checks this (packages/cli/src/lib/apilevel.ts).
|
|
4
|
+
package com.akanjs.runtime
|
|
5
|
+
|
|
6
|
+
import android.app.Activity
|
|
7
|
+
import android.content.Context
|
|
8
|
+
import android.content.Intent
|
|
9
|
+
import android.os.Build
|
|
10
|
+
import android.os.Parcelable
|
|
11
|
+
import android.view.Display
|
|
12
|
+
|
|
13
|
+
object AkanNativeCompat {
|
|
14
|
+
/** The display the activity is on. Activity.getDisplay is API 30. */
|
|
15
|
+
fun display(activity: Activity): Display? =
|
|
16
|
+
if (Build.VERSION.SDK_INT >= 30) Api30.display(activity) else @Suppress("DEPRECATION") activity.windowManager.defaultDisplay
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* A typed Parcelable extra. The typed getParcelableExtra is API 33, with a bug in 13 that androidx
|
|
20
|
+
* IntentCompat avoids by using it from 34 on; the untyped one is deprecated there.
|
|
21
|
+
*/
|
|
22
|
+
fun <T : Parcelable> parcelableExtra(intent: Intent, name: String, type: Class<T>): T? {
|
|
23
|
+
if (Build.VERSION.SDK_INT >= 34) return Api33.parcelableExtra(intent, name, type)
|
|
24
|
+
@Suppress("DEPRECATION") val value: Parcelable? = intent.getParcelableExtra(name)
|
|
25
|
+
return if (type.isInstance(value)) type.cast(value) else null
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The app's own light or dark setting below API 31, which has no per-app night mode
|
|
30
|
+
* (UiModeManager.setApplicationNightMode): AkanNativeActivity applies it as an override configuration
|
|
31
|
+
* when it starts. null: follow the system.
|
|
32
|
+
*/
|
|
33
|
+
fun storedNightMode(context: Context): Boolean? {
|
|
34
|
+
val prefs = context.getSharedPreferences(NIGHT_PREFS, Context.MODE_PRIVATE)
|
|
35
|
+
return if (prefs.contains(NIGHT_KEY)) prefs.getBoolean(NIGHT_KEY, false) else null
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Stores the setting for the next activity start (commit: the recreated activity reads it at once). */
|
|
39
|
+
fun storeNightMode(context: Context, night: Boolean?) {
|
|
40
|
+
val edit = context.getSharedPreferences(NIGHT_PREFS, Context.MODE_PRIVATE).edit()
|
|
41
|
+
if (night == null) edit.remove(NIGHT_KEY) else edit.putBoolean(NIGHT_KEY, night)
|
|
42
|
+
edit.commit()
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
private const val NIGHT_PREFS = "akan-native.nightmode"
|
|
46
|
+
private const val NIGHT_KEY = "night"
|
|
47
|
+
|
|
48
|
+
private object Api30 {
|
|
49
|
+
fun display(activity: Activity): Display? = activity.display
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
private object Api33 {
|
|
53
|
+
fun <T : Parcelable> parcelableExtra(intent: Intent, name: String, type: Class<T>): T? = intent.getParcelableExtra(name, type)
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// Generated by scripts/contract.ts from packages/core/contract.json. Do not edit.
|
|
2
|
+
package com.akanjs.runtime
|
|
3
|
+
|
|
4
|
+
/** An id grammar: allowed characters, length, and an optional extension after the first dot. */
|
|
5
|
+
class AkanNativeIdSpec(val chars: String, val first: String, val notFirst: String, val min: Int, val max: Int, val extChars: String, val extMax: Int)
|
|
6
|
+
|
|
7
|
+
object AkanNativeContract {
|
|
8
|
+
val ERROR_CODES = listOf("UNSUPPORTED", "PERMISSION_DENIED", "CANCELLED", "TIMEOUT", "INVALID_ARGS", "NOT_FOUND", "NOT_ALLOWED", "INTERNAL")
|
|
9
|
+
|
|
10
|
+
/** File name extension → MIME type (assets and FileRefs). */
|
|
11
|
+
val MIME = mapOf(
|
|
12
|
+
"html" to "text/html",
|
|
13
|
+
"htm" to "text/html",
|
|
14
|
+
"js" to "text/javascript",
|
|
15
|
+
"mjs" to "text/javascript",
|
|
16
|
+
"css" to "text/css",
|
|
17
|
+
"json" to "application/json",
|
|
18
|
+
"map" to "application/json",
|
|
19
|
+
"webmanifest" to "application/manifest+json",
|
|
20
|
+
"txt" to "text/plain",
|
|
21
|
+
"text" to "text/plain",
|
|
22
|
+
"log" to "text/plain",
|
|
23
|
+
"md" to "text/markdown",
|
|
24
|
+
"csv" to "text/csv",
|
|
25
|
+
"tsv" to "text/tab-separated-values",
|
|
26
|
+
"xml" to "application/xml",
|
|
27
|
+
"yaml" to "application/yaml",
|
|
28
|
+
"yml" to "application/yaml",
|
|
29
|
+
"ics" to "text/calendar",
|
|
30
|
+
"vcf" to "text/vcard",
|
|
31
|
+
"pdf" to "application/pdf",
|
|
32
|
+
"rtf" to "application/rtf",
|
|
33
|
+
"zip" to "application/zip",
|
|
34
|
+
"gz" to "application/gzip",
|
|
35
|
+
"tar" to "application/x-tar",
|
|
36
|
+
"wasm" to "application/wasm",
|
|
37
|
+
"epub" to "application/epub+zip",
|
|
38
|
+
"doc" to "application/msword",
|
|
39
|
+
"docx" to "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
40
|
+
"xls" to "application/vnd.ms-excel",
|
|
41
|
+
"xlsx" to "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
42
|
+
"ppt" to "application/vnd.ms-powerpoint",
|
|
43
|
+
"pptx" to "application/vnd.openxmlformats-officedocument.presentationml.presentation",
|
|
44
|
+
"png" to "image/png",
|
|
45
|
+
"jpg" to "image/jpeg",
|
|
46
|
+
"jpeg" to "image/jpeg",
|
|
47
|
+
"gif" to "image/gif",
|
|
48
|
+
"webp" to "image/webp",
|
|
49
|
+
"avif" to "image/avif",
|
|
50
|
+
"heic" to "image/heic",
|
|
51
|
+
"heif" to "image/heif",
|
|
52
|
+
"bmp" to "image/bmp",
|
|
53
|
+
"svg" to "image/svg+xml",
|
|
54
|
+
"ico" to "image/x-icon",
|
|
55
|
+
"tif" to "image/tiff",
|
|
56
|
+
"tiff" to "image/tiff",
|
|
57
|
+
"mp3" to "audio/mpeg",
|
|
58
|
+
"m4a" to "audio/mp4",
|
|
59
|
+
"aac" to "audio/aac",
|
|
60
|
+
"wav" to "audio/wav",
|
|
61
|
+
"ogg" to "audio/ogg",
|
|
62
|
+
"flac" to "audio/flac",
|
|
63
|
+
"mp4" to "video/mp4",
|
|
64
|
+
"m4v" to "video/mp4",
|
|
65
|
+
"mov" to "video/quicktime",
|
|
66
|
+
"webm" to "video/webm",
|
|
67
|
+
"ttf" to "font/ttf",
|
|
68
|
+
"otf" to "font/otf",
|
|
69
|
+
"woff" to "font/woff",
|
|
70
|
+
"woff2" to "font/woff2",
|
|
71
|
+
"glb" to "model/gltf-binary",
|
|
72
|
+
"gltf" to "model/gltf+json",
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
/** Besides the text types, the asset types served with charset=utf-8. */
|
|
76
|
+
val MIME_UTF8 = setOf("application/json", "application/manifest+json", "application/xml", "application/yaml", "image/svg+xml", "model/gltf+json")
|
|
77
|
+
|
|
78
|
+
val ID_FILE_REF = AkanNativeIdSpec("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-", "", "", 1, 128, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", 8)
|
|
79
|
+
val ID_BUNDLE = AkanNativeIdSpec("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_.-", "", ".", 1, 80, "", 0)
|
|
80
|
+
val ID_DOCUMENT = AkanNativeIdSpec("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-", "", "", 8, 64, "", 0)
|
|
81
|
+
val ID_NAME = AkanNativeIdSpec("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_.-", "\$ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", "", 1, 64, "", 0)
|
|
82
|
+
|
|
83
|
+
val EXTERNAL_SCHEMES = listOf("http", "https", "mailto", "tel")
|
|
84
|
+
val FRAME_SCHEMES = listOf("http", "https", "data", "blob", "about")
|
|
85
|
+
/** Schemes an app can never add to the external list. */
|
|
86
|
+
val NEVER_EXTERNAL_SCHEMES = listOf("javascript", "vbscript", "file", "data", "blob", "about", "content", "intent", "app")
|
|
87
|
+
|
|
88
|
+
const val ROUTE_ROOT = "__akan_native"
|
|
89
|
+
const val ROUTE_INIT = "init.js"
|
|
90
|
+
const val ROUTE_IPC = "ipc"
|
|
91
|
+
const val ROUTE_HELLO = "hello"
|
|
92
|
+
const val ROUTE_FILE = "file"
|
|
93
|
+
|
|
94
|
+
const val 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__||{},"
|
|
95
|
+
const val INIT_SUFFIX = ");\n"
|
|
96
|
+
const val MAX_RANGE_BYTES = 1024000
|
|
97
|
+
const val EXTERNAL_OPENS_PER_SECOND = 1
|
|
98
|
+
const val MAX_RETAINED_EVENTS = 16
|
|
99
|
+
}
|