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,55 @@
|
|
|
1
|
+
import { AkanNativeError, defineWebPlugin } from "../../../packages/core/src/index.ts";
|
|
2
|
+
import type { PreferencesApi } from "./index.ts";
|
|
3
|
+
|
|
4
|
+
const PREFIX = "akan-native.preferences.";
|
|
5
|
+
|
|
6
|
+
function storage(): Storage {
|
|
7
|
+
try {
|
|
8
|
+
return window.localStorage;
|
|
9
|
+
} catch (error) {
|
|
10
|
+
|
|
11
|
+
throw new AkanNativeError("UNSUPPORTED", "localStorage is not available", { cause: error });
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function checkKey(key: unknown): string {
|
|
16
|
+
if (typeof key !== "string" || key.length === 0)
|
|
17
|
+
throw new AkanNativeError("INVALID_ARGS", "key must be a non-empty string");
|
|
18
|
+
return key;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function ownKeys(store: Storage): string[] {
|
|
22
|
+
const keys: string[] = [];
|
|
23
|
+
for (let i = 0; i < store.length; i++) {
|
|
24
|
+
const key = store.key(i);
|
|
25
|
+
if (key?.startsWith(PREFIX)) keys.push(key);
|
|
26
|
+
}
|
|
27
|
+
return keys;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const web = defineWebPlugin<PreferencesApi>({
|
|
31
|
+
methods: {
|
|
32
|
+
async get(args) {
|
|
33
|
+
return { value: storage().getItem(PREFIX + checkKey(args?.key)) };
|
|
34
|
+
},
|
|
35
|
+
async set(args) {
|
|
36
|
+
const key = checkKey(args?.key);
|
|
37
|
+
if (typeof args.value !== "string") throw new AkanNativeError("INVALID_ARGS", "value must be a string");
|
|
38
|
+
try {
|
|
39
|
+
storage().setItem(PREFIX + key, args.value);
|
|
40
|
+
} catch (error) {
|
|
41
|
+
throw new AkanNativeError("INTERNAL", `could not store ${key}: ${String(error)}`, { cause: error });
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
async remove(args) {
|
|
45
|
+
storage().removeItem(PREFIX + checkKey(args?.key));
|
|
46
|
+
},
|
|
47
|
+
async keys() {
|
|
48
|
+
return { keys: ownKeys(storage()).map((k) => k.slice(PREFIX.length)) };
|
|
49
|
+
},
|
|
50
|
+
async clear() {
|
|
51
|
+
const store = storage();
|
|
52
|
+
for (const key of ownKeys(store)) store.removeItem(key);
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
package com.akanjs.plugins.push
|
|
2
|
+
|
|
3
|
+
import com.google.firebase.messaging.FirebaseMessagingService
|
|
4
|
+
import com.google.firebase.messaging.RemoteMessage
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* FCM's entry point for this app (declared in the push plugin's manifest; the library's own service has
|
|
8
|
+
* a lower priority). Firebase calls it on its own thread, also when no activity runs; the plugin gets
|
|
9
|
+
* the token and the messages when it exists (PushPlugin.Router).
|
|
10
|
+
*/
|
|
11
|
+
class AkanNativeMessagingService : FirebaseMessagingService() {
|
|
12
|
+
@Suppress("OVERRIDE_DEPRECATION")
|
|
13
|
+
override fun onNewToken(token: String) = PushPlugin.Router.token(token)
|
|
14
|
+
|
|
15
|
+
/** Data messages always; notification messages only while the app is in front (Firebase shows them otherwise). */
|
|
16
|
+
override fun onMessageReceived(message: RemoteMessage) = PushPlugin.Router.message(this, message)
|
|
17
|
+
}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
package com.akanjs.plugins.push
|
|
2
|
+
|
|
3
|
+
import android.Manifest
|
|
4
|
+
import android.app.NotificationChannel
|
|
5
|
+
import android.app.NotificationManager
|
|
6
|
+
import android.app.PendingIntent
|
|
7
|
+
import android.content.Context
|
|
8
|
+
import android.content.Intent
|
|
9
|
+
import android.content.pm.PackageManager
|
|
10
|
+
import android.os.Build
|
|
11
|
+
import android.os.Bundle
|
|
12
|
+
import android.os.Handler
|
|
13
|
+
import android.os.Looper
|
|
14
|
+
import android.util.Log
|
|
15
|
+
import com.google.firebase.FirebaseApp
|
|
16
|
+
import com.google.firebase.messaging.FirebaseMessaging
|
|
17
|
+
import com.google.firebase.messaging.RemoteMessage
|
|
18
|
+
import com.akanjs.runtime.AkanNativeErrorCode
|
|
19
|
+
import com.akanjs.runtime.AkanNativePermission
|
|
20
|
+
import com.akanjs.runtime.AkanNativePluginContext
|
|
21
|
+
import com.akanjs.runtime.AkanNativeReply
|
|
22
|
+
import com.akanjs.runtime.AkanNativeVoidReply
|
|
23
|
+
import java.lang.ref.WeakReference
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Remote notifications through Firebase Cloud Messaging (akanjs readiness O6-2), the opt-in module:
|
|
27
|
+
* its closure (native/android/maven.lock.json) goes only into apps with this plugin, and the app's
|
|
28
|
+
* google-services.json becomes the string resources Firebase initializes from (android.googleServices).
|
|
29
|
+
* - register(): FirebaseMessaging.token; AkanNativeMessagingService.onNewToken reports later changes.
|
|
30
|
+
* - A notification message is shown by Firebase while the app is in the background; its tap starts
|
|
31
|
+
* the activity with the message in the intent extras (google.message_id), which is an "action"
|
|
32
|
+
* (capacitor-plugins-next PushNotificationsPlugin.java handleOnNewIntent). The launch tap waits for
|
|
33
|
+
* the first listener (C2).
|
|
34
|
+
* - In front, onMessageReceived gets every message: "received", and with setForegroundPresentation a
|
|
35
|
+
* notification of our own whose tap works the same way.
|
|
36
|
+
* - POST_NOTIFICATIONS is asked for on Android 13+; before, notifications are allowed unless turned off.
|
|
37
|
+
*/
|
|
38
|
+
class PushPlugin(private val context: AkanNativePluginContext) : PushPluginSpec {
|
|
39
|
+
private val app = context.activity.applicationContext
|
|
40
|
+
private val events = PushEvents(context)
|
|
41
|
+
private val manager = app.getSystemService(NotificationManager::class.java)
|
|
42
|
+
private val listening = HashSet<String>()
|
|
43
|
+
|
|
44
|
+
/** push.android from the app config (N13), as the build put it into the manifest's meta-data. */
|
|
45
|
+
@Suppress("DEPRECATION") // getApplicationInfo(String, ApplicationInfoFlags) is API 33+
|
|
46
|
+
private val meta: Bundle = try {
|
|
47
|
+
app.packageManager.getApplicationInfo(app.packageName, PackageManager.GET_META_DATA).metaData ?: Bundle()
|
|
48
|
+
} catch (e: PackageManager.NameNotFoundException) {
|
|
49
|
+
Bundle()
|
|
50
|
+
}
|
|
51
|
+
private val channelId: String = meta.getString("com.google.firebase.messaging.default_notification_channel_id") ?: CHANNEL
|
|
52
|
+
private val smallIcon: Int = meta.getInt("com.google.firebase.messaging.default_notification_icon").takeIf { it != 0 }
|
|
53
|
+
?: app.applicationInfo.icon.takeIf { it != 0 } ?: android.R.drawable.ic_dialog_info
|
|
54
|
+
private val color: Int? = meta.getInt("com.google.firebase.messaging.default_notification_color").takeIf { it != 0 }?.let { runCatching { app.getColor(it) }.getOrNull() }
|
|
55
|
+
|
|
56
|
+
init {
|
|
57
|
+
Router.plugin = WeakReference(this)
|
|
58
|
+
tapOf(context.activity.intent)?.let(Router.pendingActions::add)
|
|
59
|
+
createConfiguredChannel()
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* The app's channel, made at startup: Firebase posts background notifications into the default
|
|
64
|
+
* channel only when it exists (else into its own "Miscellaneous" one). Settings users changed stay.
|
|
65
|
+
*/
|
|
66
|
+
private fun createConfiguredChannel() {
|
|
67
|
+
val name = meta.getString("com.akanjs.push.channel_name") ?: return
|
|
68
|
+
val importance = when (meta.getString("com.akanjs.push.channel_importance")) {
|
|
69
|
+
"min" -> NotificationManager.IMPORTANCE_MIN
|
|
70
|
+
"low" -> NotificationManager.IMPORTANCE_LOW
|
|
71
|
+
"high" -> NotificationManager.IMPORTANCE_HIGH
|
|
72
|
+
else -> NotificationManager.IMPORTANCE_DEFAULT
|
|
73
|
+
}
|
|
74
|
+
val channel = NotificationChannel(channelId, name, importance)
|
|
75
|
+
meta.getString("com.akanjs.push.channel_description")?.let { channel.description = it }
|
|
76
|
+
manager.createNotificationChannel(channel) // renames an existing one; its importance stays the user's
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
override fun destroy() {
|
|
80
|
+
if (Router.plugin?.get() === this) Router.plugin = null
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// ------------------------------------------------------------ permission
|
|
84
|
+
|
|
85
|
+
override fun checkPermission(reply: AkanNativeReply<PushCheckPermissionResult>) = reply.resolve(PushCheckPermissionResult(display = display()))
|
|
86
|
+
|
|
87
|
+
override fun requestPermission(reply: AkanNativeReply<PushRequestPermissionResult>) {
|
|
88
|
+
val state = display()
|
|
89
|
+
if (Build.VERSION.SDK_INT < 33 || state == PushPermissionState.GRANTED || state == PushPermissionState.DENIED) {
|
|
90
|
+
return reply.resolve(PushRequestPermissionResult(display = state))
|
|
91
|
+
}
|
|
92
|
+
context.requestPermissions(arrayOf(Manifest.permission.POST_NOTIFICATIONS)) { reply.resolve(PushRequestPermissionResult(display = display())) }
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
private fun display(): PushPermissionState {
|
|
96
|
+
if (manager.areNotificationsEnabled()) return PushPermissionState.GRANTED
|
|
97
|
+
if (Build.VERSION.SDK_INT < 33) return PushPermissionState.DENIED // turned off in the settings
|
|
98
|
+
val state = context.permissionState(Manifest.permission.POST_NOTIFICATIONS)
|
|
99
|
+
if (state == AkanNativePermission.GRANTED) return PushPermissionState.DENIED
|
|
100
|
+
return PushPermissionState.entries.first { it.json == state }
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// ------------------------------------------------------------ registration
|
|
104
|
+
|
|
105
|
+
private fun messaging(reply: AkanNativeReply<*>): FirebaseMessaging? {
|
|
106
|
+
if (FirebaseApp.getApps(app).isEmpty()) {
|
|
107
|
+
reply.reject(AkanNativeErrorCode.UNSUPPORTED, "Firebase is not set up: add the Firebase project's google-services.json as android.googleServices in akan-native.config")
|
|
108
|
+
return null
|
|
109
|
+
}
|
|
110
|
+
return FirebaseMessaging.getInstance()
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
override fun register(reply: AkanNativeReply<PushToken>) {
|
|
114
|
+
val messaging = messaging(reply) ?: return
|
|
115
|
+
messaging.isAutoInitEnabled = true
|
|
116
|
+
@Suppress("DEPRECATION") // the Task API; the suspending one is in kotlinx-coroutines-play-services
|
|
117
|
+
messaging.token.addOnCompleteListener { task ->
|
|
118
|
+
// task.result throws when the task failed (an invalid API key is an IllegalArgumentException).
|
|
119
|
+
val token = if (task.isSuccessful) task.result else null
|
|
120
|
+
if (token == null) {
|
|
121
|
+
val error = task.exception
|
|
122
|
+
// A bad google-services.json or a device without Play services cannot register at all;
|
|
123
|
+
// anything else (SERVICE_NOT_AVAILABLE: offline, throttled) may work later.
|
|
124
|
+
val permanent = error is IllegalArgumentException || error?.message?.contains("MISSING_INSTANCEID_SERVICE") == true
|
|
125
|
+
return@addOnCompleteListener reply.reject(if (permanent) AkanNativeErrorCode.UNSUPPORTED else AkanNativeErrorCode.INTERNAL, "FCM registration failed: ${error?.message ?: "no token"}")
|
|
126
|
+
}
|
|
127
|
+
Router.lastToken = token
|
|
128
|
+
reply.resolve(PushToken(token = token, provider = PushProvider.FCM, platform = PushTokenPlatform.ANDROID))
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
override fun unregister(reply: AkanNativeVoidReply) {
|
|
133
|
+
val messaging = messaging(reply) ?: return
|
|
134
|
+
messaging.isAutoInitEnabled = false
|
|
135
|
+
@Suppress("DEPRECATION")
|
|
136
|
+
messaging.deleteToken().addOnCompleteListener { task ->
|
|
137
|
+
Router.lastToken = null
|
|
138
|
+
if (task.isSuccessful) reply.resolve() else reply.reject(AkanNativeErrorCode.INTERNAL, task.exception?.message ?: "deleteToken failed")
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
override fun setForegroundPresentation(args: PushPresentation, reply: AkanNativeVoidReply) {
|
|
143
|
+
Router.showInFront = args.banner == true || args.list == true
|
|
144
|
+
Router.soundInFront = args.sound == true
|
|
145
|
+
reply.resolve()
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// ------------------------------------------------------------ events
|
|
149
|
+
|
|
150
|
+
override fun onNewIntent(intent: Intent) {
|
|
151
|
+
val action = tapOf(intent) ?: return
|
|
152
|
+
if ("action" in listening) events.action(action) else Router.pendingActions.add(action)
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
override fun startListening(event: String) {
|
|
156
|
+
listening.add(event)
|
|
157
|
+
if (event == "action") {
|
|
158
|
+
for (action in Router.pendingActions) events.action(action)
|
|
159
|
+
Router.pendingActions.clear()
|
|
160
|
+
}
|
|
161
|
+
// A token that changed while no page listened goes to the first listener (C2), the latest only.
|
|
162
|
+
if (event == "token") Router.pendingToken?.let { Router.pendingToken = null; tokenChanged(it) }
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
override fun stopListening(event: String) {
|
|
166
|
+
listening.remove(event)
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
private fun tokenChanged(token: String) {
|
|
170
|
+
if ("token" in listening) events.token(PushToken(token = token, provider = PushProvider.FCM, platform = PushTokenPlatform.ANDROID))
|
|
171
|
+
else Router.pendingToken = token
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
private fun received(message: RemoteMessage) {
|
|
175
|
+
val notification = message.notification
|
|
176
|
+
if ("received" in listening) events.received(PushMessage(id = message.messageId, title = notification?.title, body = notification?.body, data = message.data))
|
|
177
|
+
if (notification != null && Router.showInFront) showInFront(message, notification)
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/** A notification for a message that arrived in front, when the page asked for one; its tap is an "action". */
|
|
181
|
+
private fun showInFront(message: RemoteMessage, notification: RemoteMessage.Notification) {
|
|
182
|
+
val channel = notification.channelId ?: channelId
|
|
183
|
+
if (manager.getNotificationChannel(channel) == null) {
|
|
184
|
+
manager.createNotificationChannel(NotificationChannel(channel, "Notifications", if (Router.soundInFront) NotificationManager.IMPORTANCE_DEFAULT else NotificationManager.IMPORTANCE_LOW))
|
|
185
|
+
}
|
|
186
|
+
val tap = app.packageManager.getLaunchIntentForPackage(app.packageName)?.apply {
|
|
187
|
+
addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
|
|
188
|
+
putExtra(MESSAGE_ID, message.messageId ?: "")
|
|
189
|
+
for ((key, value) in message.data) putExtra(key, value)
|
|
190
|
+
notification.title?.let { putExtra(TITLE, it) }
|
|
191
|
+
notification.body?.let { putExtra(BODY, it) }
|
|
192
|
+
} ?: return
|
|
193
|
+
val pending = PendingIntent.getActivity(app, (message.messageId ?: "").hashCode(), tap, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
|
|
194
|
+
val builder = android.app.Notification.Builder(app, channel)
|
|
195
|
+
.setContentTitle(notification.title)
|
|
196
|
+
.setContentText(notification.body)
|
|
197
|
+
.setSmallIcon(smallIcon)
|
|
198
|
+
.setAutoCancel(true)
|
|
199
|
+
.setContentIntent(pending)
|
|
200
|
+
color?.let(builder::setColor)
|
|
201
|
+
val built = builder.build()
|
|
202
|
+
try {
|
|
203
|
+
manager.notify((message.messageId ?: System.currentTimeMillis().toString()).hashCode(), built)
|
|
204
|
+
} catch (e: SecurityException) { // POST_NOTIFICATIONS was taken back
|
|
205
|
+
Log.w("AkanNative", "push: cannot show a notification", e)
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/** The message a notification tap carries in the activity's intent, or null. */
|
|
210
|
+
private fun tapOf(intent: Intent?): PushAction? {
|
|
211
|
+
val extras: Bundle = intent?.extras ?: return null
|
|
212
|
+
if (!extras.containsKey(MESSAGE_ID)) return null
|
|
213
|
+
val data = HashMap<String, Any>()
|
|
214
|
+
for (key in extras.keySet()) {
|
|
215
|
+
if (key == MESSAGE_ID || key == TITLE || key == BODY || key.startsWith("google.") || key.startsWith("gcm.") || key == "from" || key == "collapse_key") continue
|
|
216
|
+
@Suppress("DEPRECATION") val value = extras.get(key) ?: continue
|
|
217
|
+
data[key] = value as? String ?: value.toString()
|
|
218
|
+
}
|
|
219
|
+
val message = PushMessage(id = extras.getString(MESSAGE_ID), title = extras.getString(TITLE), body = extras.getString(BODY), data = data)
|
|
220
|
+
intent.removeExtra(MESSAGE_ID) // an activity made again from the same intent brings no second tap
|
|
221
|
+
return PushAction(actionId = "tap", message = message)
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/** What the FCM service and the plugin share: the service runs without an activity. Main thread. */
|
|
225
|
+
object Router {
|
|
226
|
+
var plugin: WeakReference<PushPlugin>? = null
|
|
227
|
+
/** Taps before the page listened (C2), the process's. */
|
|
228
|
+
val pendingActions = ArrayList<PushAction>()
|
|
229
|
+
var lastToken: String? = null
|
|
230
|
+
/** A token change no page heard yet (delivered on the first "token" listener). */
|
|
231
|
+
var pendingToken: String? = null
|
|
232
|
+
var showInFront = false
|
|
233
|
+
var soundInFront = false
|
|
234
|
+
private val main = Handler(Looper.getMainLooper())
|
|
235
|
+
|
|
236
|
+
fun token(token: String) {
|
|
237
|
+
main.post {
|
|
238
|
+
if (token != lastToken) plugin?.get()?.tokenChanged(token) ?: run { if (lastToken != null) pendingToken = token }
|
|
239
|
+
lastToken = token
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
fun message(context: Context, message: RemoteMessage) {
|
|
244
|
+
main.post {
|
|
245
|
+
val target = plugin?.get()
|
|
246
|
+
if (target != null) target.received(message) else Log.i("AkanNative", "push: message ${message.messageId} arrived without a page")
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
private companion object {
|
|
252
|
+
const val MESSAGE_ID = "google.message_id"
|
|
253
|
+
const val TITLE = "akan-native.push.title"
|
|
254
|
+
const val BODY = "akan-native.push.body"
|
|
255
|
+
const val CHANNEL = "akan_native_push"
|
|
256
|
+
}
|
|
257
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import UIKit
|
|
2
|
+
import UserNotifications
|
|
3
|
+
|
|
4
|
+
/// Remote notifications through APNs directly (akanjs readiness O6-2), no Firebase SDK.
|
|
5
|
+
/// - register(): UIApplication.registerForRemoteNotifications; the app delegate hands the result to
|
|
6
|
+
/// AkanNativeRemoteNotifications, and the device token goes to the page as hex (what APNs senders take,
|
|
7
|
+
/// capacitor-plugins-next PushNotificationsPlugin.swift). A later, different token is a "token" event.
|
|
8
|
+
/// - Taps and foreground deliveries come through the shell's notification router (AkanNativeNotifications,
|
|
9
|
+
/// plugins.md C5): a remote notification is one whose trigger is UNPushNotificationTrigger, so the
|
|
10
|
+
/// local-notifications plugin keeps its own. The tap that launched the app waits in the router until
|
|
11
|
+
/// the page listens for "action" (C2).
|
|
12
|
+
/// - Foreground presentation follows setForegroundPresentation (default: not shown, like iOS without a
|
|
13
|
+
/// delegate); the page always gets "received".
|
|
14
|
+
/// - Silent pushes (content-available) reach the page as "received" while it listens.
|
|
15
|
+
/// - aps-environment comes from the manifest ("development"); an iPhone build takes the provisioning
|
|
16
|
+
/// profile's value (ios.ts), so App Store builds say "production".
|
|
17
|
+
final class PushPlugin: PushPluginSpec {
|
|
18
|
+
static let id = "push"
|
|
19
|
+
private let context: AkanNativePluginContext
|
|
20
|
+
private lazy var events = PushEvents(context)
|
|
21
|
+
private var presentation: UNNotificationPresentationOptions = []
|
|
22
|
+
private var waiting: [AkanNativeReply<PushToken>] = []
|
|
23
|
+
private var lastToken: String?
|
|
24
|
+
/// A token change no page heard yet: delivered to the first "token" listener (C2), the latest only.
|
|
25
|
+
private var pendingToken: PushToken?
|
|
26
|
+
private var listening: Set<String> = []
|
|
27
|
+
|
|
28
|
+
init(context: AkanNativePluginContext) {
|
|
29
|
+
self.context = context
|
|
30
|
+
if case .success(let data) = AkanNativeRemoteNotifications.shared.lastRegistration { lastToken = Self.hex(data) }
|
|
31
|
+
AkanNativeRemoteNotifications.shared.listen(owner: context.owner, registration: { [weak self] result in self?.registered(result) }) { [weak self] userInfo in
|
|
32
|
+
guard let self, self.listening.contains("received") else { return false }
|
|
33
|
+
self.events.received(PushMessage(id: nil, title: nil, body: nil, data: Self.data(userInfo)))
|
|
34
|
+
return true
|
|
35
|
+
}
|
|
36
|
+
AkanNativeNotifications.shared.register(Self.id, owner: context.owner, AkanNativeNotifications.Handler(
|
|
37
|
+
claims: { $0.trigger is UNPushNotificationTrigger },
|
|
38
|
+
willPresent: { [weak self] notification in
|
|
39
|
+
guard let self else { return [] }
|
|
40
|
+
self.events.received(Self.message(notification.request))
|
|
41
|
+
return self.presentation
|
|
42
|
+
},
|
|
43
|
+
didReceive: { [weak self] response in
|
|
44
|
+
guard let self, self.listening.contains("action") else { return false }
|
|
45
|
+
let id = response.actionIdentifier
|
|
46
|
+
let actionId = id == UNNotificationDefaultActionIdentifier ? "tap" : id == UNNotificationDismissActionIdentifier ? "dismiss" : id
|
|
47
|
+
self.events.action(PushAction(actionId: actionId, message: Self.message(response.notification.request)))
|
|
48
|
+
return true
|
|
49
|
+
}
|
|
50
|
+
))
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// MARK: permission
|
|
54
|
+
|
|
55
|
+
func checkPermission(_ reply: AkanNativeReply<PushCheckPermissionResult>) {
|
|
56
|
+
UNUserNotificationCenter.current().getNotificationSettings { settings in
|
|
57
|
+
let state = Self.state(settings.authorizationStatus)
|
|
58
|
+
DispatchQueue.main.async { reply.resolve(PushCheckPermissionResult(display: state)) }
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
func requestPermission(_ reply: AkanNativeReply<PushRequestPermissionResult>) {
|
|
63
|
+
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { _, error in
|
|
64
|
+
UNUserNotificationCenter.current().getNotificationSettings { settings in
|
|
65
|
+
let state = Self.state(settings.authorizationStatus)
|
|
66
|
+
DispatchQueue.main.async {
|
|
67
|
+
if let error, state != .granted { return reply.reject(.internalError, error.localizedDescription) }
|
|
68
|
+
reply.resolve(PushRequestPermissionResult(display: state))
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
nonisolated private static func state(_ status: UNAuthorizationStatus) -> PushPermissionState {
|
|
75
|
+
switch status {
|
|
76
|
+
case .authorized, .provisional, .ephemeral: .granted
|
|
77
|
+
case .denied: .denied
|
|
78
|
+
default: .prompt
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// MARK: registration
|
|
83
|
+
|
|
84
|
+
func register(_ reply: AkanNativeReply<PushToken>) {
|
|
85
|
+
waiting.append(reply)
|
|
86
|
+
// Every call asks again: iOS answers with the current token (and a new one after a restore).
|
|
87
|
+
UIApplication.shared.registerForRemoteNotifications()
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
func unregister(_ reply: AkanNativeReply<Void>) {
|
|
91
|
+
UIApplication.shared.unregisterForRemoteNotifications()
|
|
92
|
+
lastToken = nil
|
|
93
|
+
reply.resolve()
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
private func registered(_ result: Result<Data, any Error>) {
|
|
97
|
+
let replies = waiting
|
|
98
|
+
waiting = []
|
|
99
|
+
switch result {
|
|
100
|
+
case .success(let data):
|
|
101
|
+
let token = PushToken(token: Self.hex(data), provider: .apns, platform: .ios)
|
|
102
|
+
for reply in replies { reply.resolve(token) }
|
|
103
|
+
if let previous = lastToken, previous != token.token {
|
|
104
|
+
if listening.contains("token") { events.token(token) } else { pendingToken = token }
|
|
105
|
+
}
|
|
106
|
+
lastToken = token.token
|
|
107
|
+
case .failure(let error):
|
|
108
|
+
// The simulator and a missing aps-environment entitlement end here.
|
|
109
|
+
for reply in replies { reply.reject(.unsupported, "APNs registration failed: \(error.localizedDescription)") }
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
func setForegroundPresentation(_ args: PushPresentation, _ reply: AkanNativeReply<Void>) {
|
|
114
|
+
var options: UNNotificationPresentationOptions = []
|
|
115
|
+
if args.banner == true { options.insert(.banner) }
|
|
116
|
+
if args.list == true { options.insert(.list) }
|
|
117
|
+
if args.sound == true { options.insert(.sound) }
|
|
118
|
+
if args.badge == true { options.insert(.badge) }
|
|
119
|
+
presentation = options
|
|
120
|
+
reply.resolve()
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// MARK: events
|
|
124
|
+
|
|
125
|
+
func startListening(_ event: String) {
|
|
126
|
+
listening.insert(event)
|
|
127
|
+
if event == "action" { AkanNativeNotifications.shared.replay(Self.id) }
|
|
128
|
+
if event == "token", let token = pendingToken {
|
|
129
|
+
pendingToken = nil
|
|
130
|
+
events.token(token)
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
func stopListening(_ event: String) {
|
|
135
|
+
listening.remove(event)
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// MARK: JSON
|
|
139
|
+
|
|
140
|
+
nonisolated private static func hex(_ data: Data) -> String {
|
|
141
|
+
data.map { String(format: "%02x", $0) }.joined()
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
private static func message(_ request: UNNotificationRequest) -> PushMessage {
|
|
145
|
+
let content = request.content
|
|
146
|
+
return PushMessage(id: request.identifier, title: content.title.isEmpty ? nil : content.title, body: content.body.isEmpty ? nil : content.body, data: data(content.userInfo))
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/// The payload's own keys (not "aps"), as JSON values.
|
|
150
|
+
private static func data(_ userInfo: [AnyHashable: Any]) -> [String: Any] {
|
|
151
|
+
var out: [String: Any] = [:]
|
|
152
|
+
for (key, value) in userInfo {
|
|
153
|
+
guard let key = key as? String, key != "aps" else { continue }
|
|
154
|
+
out[key] = json(value)
|
|
155
|
+
}
|
|
156
|
+
return out
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
private static func json(_ value: Any) -> Any {
|
|
160
|
+
switch value {
|
|
161
|
+
case let v as String: v
|
|
162
|
+
case let v as NSNumber: v
|
|
163
|
+
case let v as [Any]: v.map(json)
|
|
164
|
+
case let v as [AnyHashable: Any]: Dictionary(uniqueKeysWithValues: v.compactMap { k, x in (k as? String).map { ($0, json(x)) } })
|
|
165
|
+
case is NSNull: NSNull()
|
|
166
|
+
default: String(describing: value)
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "push",
|
|
3
|
+
"apiVersion": 1,
|
|
4
|
+
"methods": ["checkPermission", "requestPermission", "register", "unregister", "setForegroundPresentation"],
|
|
5
|
+
"events": ["token", "received", "action"],
|
|
6
|
+
"codegen": true,
|
|
7
|
+
"web": null,
|
|
8
|
+
"desktop": null,
|
|
9
|
+
"ios": {
|
|
10
|
+
"sources": ["ios/*.swift"],
|
|
11
|
+
"class": "PushPlugin",
|
|
12
|
+
"frameworks": ["UserNotifications"],
|
|
13
|
+
"infoPlist": { "UIBackgroundModes": ["remote-notification"] },
|
|
14
|
+
"entitlements": { "aps-environment": "development" }
|
|
15
|
+
},
|
|
16
|
+
"android": {
|
|
17
|
+
"sources": ["android/*.kt"],
|
|
18
|
+
"class": "com.akanjs.plugins.push.PushPlugin",
|
|
19
|
+
"maven": ["com.google.firebase:firebase-messaging:25.1.3", "androidx.core:core:1.10.0"],
|
|
20
|
+
"permissions": ["android.permission.POST_NOTIFICATIONS"],
|
|
21
|
+
"applicationXml": "<service android:name=\"com.akanjs.plugins.push.AkanNativeMessagingService\" android:exported=\"false\"><intent-filter><action android:name=\"com.google.firebase.MESSAGING_EVENT\" /></intent-filter></service>"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { definePlugin } from "../../../packages/core/src/index.ts";
|
|
2
|
+
import { usePluginEvent } from "../../../packages/react/src/index.ts";
|
|
3
|
+
|
|
4
|
+
/** C1 permission states. Android reports "prompt-with-rationale" after one refusal. */
|
|
5
|
+
export type PushPermissionState = "granted" | "denied" | "prompt" | "prompt-with-rationale";
|
|
6
|
+
|
|
7
|
+
export type PushProvider = "apns" | "fcm";
|
|
8
|
+
|
|
9
|
+
/** Where the server sends: an APNs device token (hex) or an FCM registration token. */
|
|
10
|
+
export interface PushToken {
|
|
11
|
+
token: string;
|
|
12
|
+
provider: PushProvider;
|
|
13
|
+
platform: "ios" | "android";
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface PushMessage {
|
|
17
|
+
/** APNs: the notification's request identifier. FCM: the message id. */
|
|
18
|
+
id?: string;
|
|
19
|
+
title?: string;
|
|
20
|
+
body?: string;
|
|
21
|
+
/** The payload's own keys: APNs userInfo without "aps", FCM data. */
|
|
22
|
+
data: Record<string, unknown>;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface PushAction {
|
|
26
|
+
/** "tap" for the notification itself, else the action's identifier. */
|
|
27
|
+
actionId: string;
|
|
28
|
+
message: PushMessage;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** How a push that arrives while the app is in front is shown. Default: not shown (the page gets "received"). */
|
|
32
|
+
export interface PushPresentation {
|
|
33
|
+
banner?: boolean;
|
|
34
|
+
list?: boolean;
|
|
35
|
+
sound?: boolean;
|
|
36
|
+
badge?: boolean;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface PushApi {
|
|
40
|
+
checkPermission(): Promise<{ display: PushPermissionState }>;
|
|
41
|
+
/** Asks for permission to show notifications (Android 13+ and iOS; granted earlier on older Android). */
|
|
42
|
+
requestPermission(): Promise<{ display: PushPermissionState }>;
|
|
43
|
+
/** Registers with APNs or FCM; resolves with the token. A later change arrives as "token". */
|
|
44
|
+
register(): Promise<PushToken>;
|
|
45
|
+
/** Stops pushes to this installation (APNs unregister; FCM deletes the token). */
|
|
46
|
+
unregister(): Promise<void>;
|
|
47
|
+
setForegroundPresentation(args: PushPresentation): Promise<void>;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface PushEvents {
|
|
51
|
+
/**
|
|
52
|
+
* The token changed (FCM refreshes it; APNs after a restore). Send it to the server again. A change
|
|
53
|
+
* while no page listened is kept (the latest) and goes to the first listener.
|
|
54
|
+
*/
|
|
55
|
+
token: PushToken;
|
|
56
|
+
/** A push arrived while the app runs (shown or not, per setForegroundPresentation). */
|
|
57
|
+
received: PushMessage;
|
|
58
|
+
/** The user tapped a push. The tap that launched the app is kept until the first listener. */
|
|
59
|
+
action: PushAction;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export const push = definePlugin<PushApi, PushEvents>("push", {
|
|
63
|
+
methods: ["checkPermission", "requestPermission", "register", "unregister", "setForegroundPresentation"],
|
|
64
|
+
events: ["token", "received", "action"],
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
/** Subscribes to a push event for the component's lifetime. */
|
|
68
|
+
export function usePushEvent<E extends keyof PushEvents & string>(
|
|
69
|
+
event: E,
|
|
70
|
+
handler: (data: PushEvents[E]) => void,
|
|
71
|
+
): void {
|
|
72
|
+
usePluginEvent(push, event, handler);
|
|
73
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import { defineDesktopPlugin } from "../../../packages/desktop/src/plugin.ts";
|
|
4
|
+
import type { Display, ScreenApi, ScreenEvents } from "./index.ts";
|
|
5
|
+
import { sameDisplays } from "./web.ts";
|
|
6
|
+
|
|
7
|
+
export default defineDesktopPlugin<ScreenApi, ScreenEvents>({
|
|
8
|
+
id: "screen",
|
|
9
|
+
methods: {
|
|
10
|
+
getDisplays: (_args, ctx) => ctx.shell("screen.displays") as Promise<Display[]>,
|
|
11
|
+
getCursorPoint: (_args, ctx) => ctx.shell("screen.cursor") as Promise<{ x: number; y: number }>,
|
|
12
|
+
},
|
|
13
|
+
events: {
|
|
14
|
+
change(emit, ctx) {
|
|
15
|
+
let active = true;
|
|
16
|
+
let last: Display[] | null = null;
|
|
17
|
+
let reading = false;
|
|
18
|
+
let again = false;
|
|
19
|
+
|
|
20
|
+
const refresh = async () => {
|
|
21
|
+
if (reading) {
|
|
22
|
+
again = true;
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
reading = true;
|
|
26
|
+
try {
|
|
27
|
+
do {
|
|
28
|
+
again = false;
|
|
29
|
+
const displays = (await ctx.shell("screen.displays")) as Display[];
|
|
30
|
+
if (!active) return;
|
|
31
|
+
if (last && !sameDisplays(last, displays)) emit({ displays });
|
|
32
|
+
last = displays;
|
|
33
|
+
} while (again && active);
|
|
34
|
+
} catch (error) {
|
|
35
|
+
console.warn("[akan-native] screen: reading the displays failed", error);
|
|
36
|
+
} finally {
|
|
37
|
+
reading = false;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
const stop = ctx.onNativeEvent("screen", () => void refresh());
|
|
41
|
+
ctx
|
|
42
|
+
.shell("screen.watch")
|
|
43
|
+
.then(refresh, (error) => console.warn("[akan-native] screen: cannot watch display changes", error));
|
|
44
|
+
return () => {
|
|
45
|
+
active = false;
|
|
46
|
+
stop();
|
|
47
|
+
};
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
});
|