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,171 @@
|
|
|
1
|
+
package com.akanjs.plugins.authsession
|
|
2
|
+
|
|
3
|
+
import android.app.Activity
|
|
4
|
+
import android.app.Application
|
|
5
|
+
import android.content.Intent
|
|
6
|
+
import android.content.pm.PackageManager
|
|
7
|
+
import android.net.Uri
|
|
8
|
+
import android.os.Bundle
|
|
9
|
+
import android.os.Handler
|
|
10
|
+
import android.os.Looper
|
|
11
|
+
import com.akanjs.runtime.AkanNativeErrorCode
|
|
12
|
+
import com.akanjs.runtime.AkanNativePluginContext
|
|
13
|
+
import com.akanjs.runtime.AkanNativeReply
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Custom Tab + the app's deep link, the AppAuth pattern (plugins.md §4.5, S4).
|
|
17
|
+
* - The provider redirects to <callbackScheme>://…; the app's VIEW intent-filter for the scheme
|
|
18
|
+
* (akan-native.config.ts deepLinks.schemes) brings the singleTask shell activity back, which clears the
|
|
19
|
+
* tab above it, and the URL arrives through onNewIntent. The scheme is checked against the app's
|
|
20
|
+
* own intent filters first, so a missing entry fails at once instead of never calling back.
|
|
21
|
+
* ACTION_VIEW only, matching plugins/app; tauri-plugins-workspace/plugins/deep-link/android/.../
|
|
22
|
+
* DeepLinkPlugin.kt:51-53 also accepts ChromeOS's org.chromium.arc.intent.action.VIEW.
|
|
23
|
+
* - Cancel: the tab is started for a result, which arrives when the tab is gone: after the
|
|
24
|
+
* redirect (the deep link comes with it, in either order) or when the user closed the tab or
|
|
25
|
+
* returned to the app another way. No deep link within GRACE_MS of that → CANCELLED.
|
|
26
|
+
* - No Custom Tabs browser: the plain browser in its own task; returning to the app (onResume)
|
|
27
|
+
* without the redirect → CANCELLED after GRACE_MS.
|
|
28
|
+
* - Custom Tab extras as in the browser plugin (EXTRA_SESSION null binder makes it a Custom Tab),
|
|
29
|
+
* without androidx.browser; the <queries> in native-plugin.json make the browsers visible.
|
|
30
|
+
* - start() needs the app in front (PERMISSION_DENIED otherwise): Android 15+ blocks activity
|
|
31
|
+
* starts from the background for apps targeting 35+ (seen in the browser plugin's close()).
|
|
32
|
+
* - A new start() rejects the running one with CANCELLED. If the process dies while the tab is up,
|
|
33
|
+
* the redirect starts a fresh app: the URL is then app.getLaunchUrl().
|
|
34
|
+
* Arguments arrive decoded and type-checked by the generated AuthSessionPluginSpec (PL-10).
|
|
35
|
+
*/
|
|
36
|
+
class AuthSessionPlugin(private val context: AkanNativePluginContext) : AuthSessionPluginSpec {
|
|
37
|
+
private val main = Handler(Looper.getMainLooper())
|
|
38
|
+
private var pending: AkanNativeReply<AuthSessionStartResult>? = null
|
|
39
|
+
private var scheme: String? = null
|
|
40
|
+
/** The start URL's OAuth `state`: only a callback with the same one answers (src/args.ts isAnswer). */
|
|
41
|
+
private var state: String? = null
|
|
42
|
+
private var left = false // the app went to the background since start() (plain browser)
|
|
43
|
+
private var plainBrowser = false
|
|
44
|
+
private var resumed = false
|
|
45
|
+
private val cancel = Runnable { finish(null) }
|
|
46
|
+
|
|
47
|
+
private val lifecycle = object : Application.ActivityLifecycleCallbacks {
|
|
48
|
+
override fun onActivityPaused(activity: Activity) {
|
|
49
|
+
resumed = false
|
|
50
|
+
left = true
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
override fun onActivityResumed(activity: Activity) {
|
|
54
|
+
resumed = true
|
|
55
|
+
if (plainBrowser && left && pending != null) main.postDelayed(cancel, GRACE_MS)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
override fun onActivityStarted(activity: Activity) {}
|
|
59
|
+
override fun onActivityStopped(activity: Activity) {}
|
|
60
|
+
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {}
|
|
61
|
+
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
|
|
62
|
+
override fun onActivityDestroyed(activity: Activity) {}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
init {
|
|
66
|
+
// Created in the shell's onCreate: the first onResume is still to come.
|
|
67
|
+
context.activity.registerActivityLifecycleCallbacks(lifecycle)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
override fun start(args: AuthSessionStartArgs, reply: AkanNativeReply<AuthSessionStartResult>) {
|
|
71
|
+
val activity = context.activity
|
|
72
|
+
val uri = if (args.url.isEmpty()) null else Uri.parse(args.url).normalizeScheme()
|
|
73
|
+
if (uri == null || (uri.scheme != "http" && uri.scheme != "https") || uri.host.isNullOrEmpty()) {
|
|
74
|
+
return reply.reject(AkanNativeErrorCode.INVALID_ARGS, "the sign-in page must be an http or https URL")
|
|
75
|
+
}
|
|
76
|
+
val callbackScheme = args.callbackScheme
|
|
77
|
+
if (!SCHEME.matches(callbackScheme) || callbackScheme in RESERVED) {
|
|
78
|
+
return reply.reject(AkanNativeErrorCode.INVALID_ARGS, "callbackScheme must be a lowercase custom scheme such as \"myapp\"")
|
|
79
|
+
}
|
|
80
|
+
val callback = Intent(Intent.ACTION_VIEW, Uri.parse("$callbackScheme://callback"))
|
|
81
|
+
.addCategory(Intent.CATEGORY_BROWSABLE)
|
|
82
|
+
.setPackage(activity.packageName)
|
|
83
|
+
if (activity.packageManager.queryIntentActivities(callback, 0).isEmpty()) {
|
|
84
|
+
return reply.reject(AkanNativeErrorCode.INVALID_ARGS, "the app does not handle $callbackScheme: links; add it to deepLinks.schemes in akan-native.config.ts")
|
|
85
|
+
}
|
|
86
|
+
// From the background the start would be a blocked background activity launch (Android 15+).
|
|
87
|
+
if (!resumed) return reply.reject(AkanNativeErrorCode.PERMISSION_DENIED, "sign-in can only start while the app is in front")
|
|
88
|
+
|
|
89
|
+
pending?.reject(AkanNativeErrorCode.CANCELLED, "replaced by a newer start()")
|
|
90
|
+
main.removeCallbacks(cancel)
|
|
91
|
+
pending = reply
|
|
92
|
+
scheme = callbackScheme
|
|
93
|
+
state = uri.getQueryParameter("state")
|
|
94
|
+
left = false
|
|
95
|
+
|
|
96
|
+
val provider = customTabsPackage(activity)
|
|
97
|
+
plainBrowser = provider == null
|
|
98
|
+
try {
|
|
99
|
+
if (provider != null) {
|
|
100
|
+
val intent = Intent(Intent.ACTION_VIEW, uri).setPackage(provider)
|
|
101
|
+
intent.putExtras(Bundle().apply { putBinder(EXTRA_SESSION, null) })
|
|
102
|
+
intent.putExtra(Intent.EXTRA_REFERRER, Uri.parse("android-app://${activity.packageName}"))
|
|
103
|
+
context.startActivityForResult("auth", intent) { _, _ ->
|
|
104
|
+
// The tab is gone; the redirect's onNewIntent may come just before or after.
|
|
105
|
+
if (pending === reply) main.postDelayed(cancel, GRACE_MS)
|
|
106
|
+
}
|
|
107
|
+
} else {
|
|
108
|
+
activity.startActivity(Intent(Intent.ACTION_VIEW, uri).addCategory(Intent.CATEGORY_BROWSABLE).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK))
|
|
109
|
+
}
|
|
110
|
+
} catch (e: RuntimeException) { // ActivityNotFoundException, SecurityException
|
|
111
|
+
finish(null, AkanNativeErrorCode.NOT_FOUND, "no browser can show the sign-in page: ${e.message}")
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/** The redirect that answers the running start(), or null. */
|
|
116
|
+
private fun answer(intent: Intent): String? {
|
|
117
|
+
val expected = scheme ?: return null
|
|
118
|
+
if (pending == null || intent.action != Intent.ACTION_VIEW) return null
|
|
119
|
+
val url = intent.dataString ?: return null
|
|
120
|
+
if (!url.substringBefore(':').equals(expected, ignoreCase = true)) return null
|
|
121
|
+
// Another app can send a link of the scheme too: with a state, it must be ours.
|
|
122
|
+
val want = state
|
|
123
|
+
if (want != null && stateOf(Uri.parse(url)) != want) return null
|
|
124
|
+
return url
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/** The answer ends start() and does not also reach app.urlOpen (R10), as on iOS. */
|
|
128
|
+
override fun claimsLink(intent: Intent): Boolean = answer(intent) != null
|
|
129
|
+
|
|
130
|
+
override fun onNewIntent(intent: Intent) {
|
|
131
|
+
answer(intent)?.let { finish(it) }
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/** `state` from the query, or from the fragment (implicit flows). */
|
|
135
|
+
private fun stateOf(uri: Uri): String? =
|
|
136
|
+
uri.getQueryParameter("state") ?: uri.fragment?.let { Uri.parse("x://fragment?$it").getQueryParameter("state") }
|
|
137
|
+
|
|
138
|
+
override fun onRestoredActivityResult(key: String, resultCode: Int, data: Intent?) {}
|
|
139
|
+
|
|
140
|
+
override fun destroy() {
|
|
141
|
+
main.removeCallbacks(cancel)
|
|
142
|
+
context.activity.unregisterActivityLifecycleCallbacks(lifecycle)
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
private fun finish(url: String?, code: String = AkanNativeErrorCode.CANCELLED, message: String = "the sign-in page was closed without a callback") {
|
|
146
|
+
val reply = pending ?: return
|
|
147
|
+
pending = null
|
|
148
|
+
scheme = null
|
|
149
|
+
state = null
|
|
150
|
+
main.removeCallbacks(cancel)
|
|
151
|
+
if (url != null) reply.resolve(AuthSessionStartResult(url = url)) else reply.reject(code, message)
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
private companion object {
|
|
155
|
+
const val ACTION_CUSTOM_TABS_SERVICE = "android.support.customtabs.action.CustomTabsService"
|
|
156
|
+
const val EXTRA_SESSION = "android.support.customtabs.extra.SESSION"
|
|
157
|
+
const val GRACE_MS = 1000L
|
|
158
|
+
val SCHEME = Regex("^[a-z][a-z0-9+.-]*$")
|
|
159
|
+
val RESERVED = setOf("http", "https", "file", "app", "javascript", "data", "about", "blob")
|
|
160
|
+
|
|
161
|
+
/** Like CustomTabsClient.getPackageName: the default browser if it has a Custom Tabs service, else the first that has. */
|
|
162
|
+
fun customTabsPackage(activity: Activity): String? {
|
|
163
|
+
val pm = activity.packageManager
|
|
164
|
+
val providers = pm.queryIntentServices(Intent(ACTION_CUSTOM_TABS_SERVICE), 0).mapNotNull { it.serviceInfo?.packageName }
|
|
165
|
+
if (providers.isEmpty()) return null
|
|
166
|
+
val browse = Intent(Intent.ACTION_VIEW, Uri.parse("https://")).addCategory(Intent.CATEGORY_BROWSABLE)
|
|
167
|
+
val default = pm.resolveActivity(browse, PackageManager.MATCH_DEFAULT_ONLY)?.activityInfo?.packageName
|
|
168
|
+
return if (default != null && default in providers) default else providers.first()
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import AuthenticationServices
|
|
2
|
+
import UIKit
|
|
3
|
+
|
|
4
|
+
/// ASWebAuthenticationSession (plugins.md §4.5). The session catches the redirect to the callback
|
|
5
|
+
/// scheme itself, so the scheme needs no CFBundleURLTypes entry on iOS and the app's urlOpen
|
|
6
|
+
/// listeners do not see it.
|
|
7
|
+
/// - init(url:callback:completionHandler:) with .customScheme (iOS 17.4); the scheme-string
|
|
8
|
+
/// initializer is deprecated.
|
|
9
|
+
/// - The presentation anchor is the web view's window at start(), held by a small provider object
|
|
10
|
+
/// (the session keeps its provider weakly). Without one start() fails with presentationContextNotProvided.
|
|
11
|
+
/// - One session at a time: a new start() cancels the running one, whose call rejects CANCELLED.
|
|
12
|
+
/// - The completion handler runs on the main queue in practice; it hops there anyway.
|
|
13
|
+
/// Arguments arrive decoded and type-checked by the generated AuthSessionPluginSpec (PL-10).
|
|
14
|
+
final class AuthSessionPlugin: AuthSessionPluginSpec {
|
|
15
|
+
static let id = "auth-session"
|
|
16
|
+
private static let reserved: Set<String> = ["http", "https", "file", "app", "javascript", "data", "about", "blob"]
|
|
17
|
+
|
|
18
|
+
private let context: AkanNativePluginContext
|
|
19
|
+
private var session: ASWebAuthenticationSession?
|
|
20
|
+
private var anchor: Anchor?
|
|
21
|
+
private var token: UUID?
|
|
22
|
+
private var pending: AkanNativeReply<AuthSessionStartResult>?
|
|
23
|
+
|
|
24
|
+
init(context: AkanNativePluginContext) {
|
|
25
|
+
self.context = context
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
func start(_ args: AuthSessionStartArgs, _ reply: AkanNativeReply<AuthSessionStartResult>) {
|
|
29
|
+
guard let parts = URLComponents(string: args.url),
|
|
30
|
+
let scheme = parts.scheme?.lowercased(), scheme == "http" || scheme == "https",
|
|
31
|
+
!(parts.host ?? "").isEmpty, let url = parts.url
|
|
32
|
+
else {
|
|
33
|
+
return reply.reject(.invalidArgs, "the sign-in page must be an http or https URL")
|
|
34
|
+
}
|
|
35
|
+
let callbackScheme = args.callbackScheme
|
|
36
|
+
guard Self.valid(callbackScheme) else {
|
|
37
|
+
return reply.reject(.invalidArgs, "callbackScheme must be a lowercase custom scheme such as \"myapp\"")
|
|
38
|
+
}
|
|
39
|
+
guard let window = context.webView?.window else {
|
|
40
|
+
return reply.reject(.internalError, "no window to present the sign-in page from")
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if let running = session {
|
|
44
|
+
let replaced = pending
|
|
45
|
+
clear()
|
|
46
|
+
replaced?.reject(.cancelled, "replaced by a newer start()")
|
|
47
|
+
running.cancel()
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
let id = UUID()
|
|
51
|
+
let completion: ASWebAuthenticationSession.CompletionHandler = { [weak self] callbackURL, error in
|
|
52
|
+
let result = UncheckedBox((callbackURL, error))
|
|
53
|
+
DispatchQueue.main.async {
|
|
54
|
+
MainActor.assumeIsolated { self?.finish(id, result.value.0, result.value.1) }
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// The same custom-scheme callback; `callback:` (iOS 17.4) is only needed for https callbacks.
|
|
58
|
+
let next = if #available(iOS 17.4, *) {
|
|
59
|
+
ASWebAuthenticationSession(url: url, callback: .customScheme(callbackScheme), completionHandler: completion)
|
|
60
|
+
} else {
|
|
61
|
+
ASWebAuthenticationSession(url: url, callbackURLScheme: callbackScheme, completionHandler: completion)
|
|
62
|
+
}
|
|
63
|
+
let provider = Anchor(window)
|
|
64
|
+
next.presentationContextProvider = provider
|
|
65
|
+
next.prefersEphemeralWebBrowserSession = args.ephemeral ?? false
|
|
66
|
+
session = next
|
|
67
|
+
anchor = provider
|
|
68
|
+
token = id
|
|
69
|
+
pending = reply
|
|
70
|
+
guard next.start() else {
|
|
71
|
+
clear()
|
|
72
|
+
return reply.reject(.internalError, "the sign-in session could not start")
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
private func clear() {
|
|
77
|
+
session = nil
|
|
78
|
+
anchor = nil
|
|
79
|
+
token = nil
|
|
80
|
+
pending = nil
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
private func finish(_ id: UUID, _ callbackURL: URL?, _ error: (any Error)?) {
|
|
84
|
+
guard id == token, let reply = pending else { return } // replaced meanwhile
|
|
85
|
+
clear()
|
|
86
|
+
if let callbackURL {
|
|
87
|
+
return reply.resolve(AuthSessionStartResult(url: callbackURL.absoluteString))
|
|
88
|
+
}
|
|
89
|
+
let nsError = error as NSError?
|
|
90
|
+
if nsError?.domain == ASWebAuthenticationSessionErrorDomain,
|
|
91
|
+
nsError?.code == ASWebAuthenticationSessionError.canceledLogin.rawValue {
|
|
92
|
+
return reply.reject(.cancelled, "the user closed the sign-in page")
|
|
93
|
+
}
|
|
94
|
+
reply.reject(.internalError, "sign-in failed: \(nsError?.localizedDescription ?? "no callback URL")")
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
private static func valid(_ scheme: String) -> Bool {
|
|
98
|
+
guard let first = scheme.unicodeScalars.first, ("a"..."z").contains(first), !reserved.contains(scheme) else { return false }
|
|
99
|
+
return scheme.unicodeScalars.allSatisfy { ("a"..."z").contains($0) || ("0"..."9").contains($0) || $0 == "+" || $0 == "-" || $0 == "." }
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
@MainActor
|
|
104
|
+
private final class Anchor: NSObject, ASWebAuthenticationPresentationContextProviding {
|
|
105
|
+
private let window: UIWindow
|
|
106
|
+
|
|
107
|
+
init(_ window: UIWindow) {
|
|
108
|
+
self.window = window
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor { window }
|
|
112
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "auth-session",
|
|
3
|
+
"apiVersion": 1,
|
|
4
|
+
"methods": ["start"],
|
|
5
|
+
"events": [],
|
|
6
|
+
"codegen": true,
|
|
7
|
+
"web": null,
|
|
8
|
+
"desktop": "./src/desktop.ts",
|
|
9
|
+
"ios": {
|
|
10
|
+
"sources": ["ios/*.swift"],
|
|
11
|
+
"class": "AuthSessionPlugin",
|
|
12
|
+
"frameworks": ["AuthenticationServices"]
|
|
13
|
+
},
|
|
14
|
+
"android": {
|
|
15
|
+
"sources": ["android/*.kt"],
|
|
16
|
+
"class": "com.akanjs.plugins.authsession.AuthSessionPlugin",
|
|
17
|
+
"manifestXml": "<queries><intent><action android:name=\"android.support.customtabs.action.CustomTabsService\" /></intent><intent><action android:name=\"android.intent.action.VIEW\" /><category android:name=\"android.intent.category.BROWSABLE\" /><data android:scheme=\"https\" /></intent></queries>"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { AkanNativeError } from "../../../packages/core/src/index.ts";
|
|
2
|
+
|
|
3
|
+
export interface StartArgs {
|
|
4
|
+
url: URL;
|
|
5
|
+
callbackScheme: string;
|
|
6
|
+
ephemeral: boolean;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const SCHEME = /^[a-z][a-z0-9+.-]*$/;
|
|
10
|
+
const RESERVED = ["http", "https", "file", "app", "javascript", "data", "about", "blob"];
|
|
11
|
+
|
|
12
|
+
/** Checks start()'s arguments; the native implementations check the same rules. */
|
|
13
|
+
export function checkStart(args: unknown): StartArgs {
|
|
14
|
+
const a = (args ?? {}) as { url?: unknown; callbackScheme?: unknown; ephemeral?: unknown };
|
|
15
|
+
if (typeof a.url !== "string" || a.url.length === 0)
|
|
16
|
+
throw new AkanNativeError("INVALID_ARGS", "url must be a non-empty string");
|
|
17
|
+
let url: URL;
|
|
18
|
+
try {
|
|
19
|
+
url = new URL(a.url);
|
|
20
|
+
} catch {
|
|
21
|
+
throw new AkanNativeError("INVALID_ARGS", `${a.url} is not an absolute URL`);
|
|
22
|
+
}
|
|
23
|
+
if ((url.protocol !== "https:" && url.protocol !== "http:") || !url.hostname) {
|
|
24
|
+
throw new AkanNativeError("INVALID_ARGS", `the sign-in page must be an http or https URL (got ${a.url})`);
|
|
25
|
+
}
|
|
26
|
+
const scheme = a.callbackScheme;
|
|
27
|
+
if (typeof scheme !== "string" || !SCHEME.test(scheme) || RESERVED.includes(scheme)) {
|
|
28
|
+
throw new AkanNativeError(
|
|
29
|
+
"INVALID_ARGS",
|
|
30
|
+
`callbackScheme must be a lowercase custom scheme such as "myapp", as listed in deepLinks.schemes (got ${JSON.stringify(scheme)})`,
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
if (a.ephemeral !== undefined && typeof a.ephemeral !== "boolean")
|
|
34
|
+
throw new AkanNativeError("INVALID_ARGS", "ephemeral must be a boolean");
|
|
35
|
+
return { url, callbackScheme: scheme, ephemeral: a.ephemeral ?? false };
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Whether `url` is a callback for `scheme` (schemes compare case-insensitively). */
|
|
39
|
+
export function isCallback(url: string, scheme: string): boolean {
|
|
40
|
+
const colon = url.indexOf(":");
|
|
41
|
+
return colon > 0 && url.slice(0, colon).toLowerCase() === scheme;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** The `state` parameter of a URL's query, or of its fragment (implicit flows), or null. */
|
|
45
|
+
export function stateOf(url: string): string | null {
|
|
46
|
+
try {
|
|
47
|
+
const u = new URL(url);
|
|
48
|
+
return u.searchParams.get("state") ?? new URLSearchParams(u.hash.slice(1)).get("state");
|
|
49
|
+
} catch {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Whether a link is the answer to this sign-in. Any app, or a web page linking to the scheme, can
|
|
56
|
+
* send a link of the callback scheme while start() waits; when the start URL carries OAuth's
|
|
57
|
+
* `state`, only a callback with the same `state` is taken (RFC 6749 §10.12) and others are left
|
|
58
|
+
* to the app plugin. PKCE is still the app's (RFC 8252 §8.1).
|
|
59
|
+
*/
|
|
60
|
+
export function isAnswer(url: string, scheme: string, state: string | null): boolean {
|
|
61
|
+
return isCallback(url, scheme) && (state === null || stateOf(url) === state);
|
|
62
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import { readFileSync } from "node:fs";
|
|
4
|
+
import { dirname, join } from "node:path";
|
|
5
|
+
import { AkanNativeError } from "../../../packages/core/src/index.ts";
|
|
6
|
+
import { claimLinks, defineDesktopPlugin, externalOpenAllowed } from "../../../packages/desktop/src/plugin.ts";
|
|
7
|
+
import { checkStart, isAnswer } from "./args.ts";
|
|
8
|
+
import type { AuthSessionApi } from "./index.ts";
|
|
9
|
+
|
|
10
|
+
export const TIMEOUT_MS = 10 * 60 * 1000;
|
|
11
|
+
|
|
12
|
+
export type Runner = (argv: string[]) => Promise<{ code: number; stderr: string }>;
|
|
13
|
+
|
|
14
|
+
const spawnRunner: Runner = async (argv) => {
|
|
15
|
+
const proc = Bun.spawn(argv, { stdin: "ignore", stdout: "ignore", stderr: "pipe" });
|
|
16
|
+
const [stderr, code] = await Promise.all([new Response(proc.stderr).text(), proc.exited]);
|
|
17
|
+
return { code, stderr };
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
/** CFBundleURLSchemes of an XML Info.plist (the CLI writes XML), or null if there is none to read. */
|
|
21
|
+
export function registeredSchemes(plist: string | null): string[] | null {
|
|
22
|
+
if (plist === null) return null;
|
|
23
|
+
|
|
24
|
+
const schemes: string[] = [];
|
|
25
|
+
for (const block of plist.matchAll(/<key>CFBundleURLSchemes<\/key>\s*<array>([\s\S]*?)<\/array>/g)) {
|
|
26
|
+
for (const s of block[1]!.matchAll(/<string>([^<]*)<\/string>/g)) schemes.push(s[1]!.toLowerCase());
|
|
27
|
+
}
|
|
28
|
+
return schemes;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function bundlePlist(): string | null {
|
|
32
|
+
try {
|
|
33
|
+
|
|
34
|
+
return readFileSync(join(dirname(process.execPath), "..", "Info.plist"), "utf8");
|
|
35
|
+
} catch {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
interface Pending {
|
|
41
|
+
scheme: string;
|
|
42
|
+
/** The start URL's OAuth `state`: the callback must carry it (args.ts isAnswer). */
|
|
43
|
+
state: string | null;
|
|
44
|
+
resolve(result: { url: string }): void;
|
|
45
|
+
reject(error: AkanNativeError): void;
|
|
46
|
+
timer: ReturnType<typeof setTimeout>;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** Replaceable parts for tests: the command runner, the Info.plist text, the OS and the timeout. */
|
|
50
|
+
export function createDesktopAuthSession(
|
|
51
|
+
options: { run?: Runner; plist?: () => string | null; timeoutMs?: number; platform?: NodeJS.Platform } = {},
|
|
52
|
+
) {
|
|
53
|
+
const run = options.run ?? spawnRunner;
|
|
54
|
+
const plist = options.plist ?? bundlePlist;
|
|
55
|
+
const platform = options.platform ?? process.platform;
|
|
56
|
+
const timeoutMs = options.timeoutMs ?? TIMEOUT_MS;
|
|
57
|
+
let pending: Pending | null = null;
|
|
58
|
+
|
|
59
|
+
const settle = (fn: (p: Pending) => void) => {
|
|
60
|
+
const p = pending;
|
|
61
|
+
if (!p) return;
|
|
62
|
+
pending = null;
|
|
63
|
+
clearTimeout(p.timer);
|
|
64
|
+
fn(p);
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
const answered = new Set<string>();
|
|
68
|
+
const claim = (url: string): boolean => {
|
|
69
|
+
if (answered.has(url)) return true;
|
|
70
|
+
if (!pending || !isAnswer(url, pending.scheme, pending.state)) return false;
|
|
71
|
+
settle((p) => p.resolve({ url }));
|
|
72
|
+
answered.add(url);
|
|
73
|
+
setTimeout(() => answered.delete(url), 10_000).unref?.();
|
|
74
|
+
return true;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
return defineDesktopPlugin<AuthSessionApi>({
|
|
78
|
+
id: "auth-session",
|
|
79
|
+
setup(ctx) {
|
|
80
|
+
|
|
81
|
+
claimLinks(claim);
|
|
82
|
+
ctx.onNativeEvent("opened", (event) => {
|
|
83
|
+
for (const url of (event.urls as string[] | undefined) ?? []) claim(url);
|
|
84
|
+
});
|
|
85
|
+
},
|
|
86
|
+
methods: {
|
|
87
|
+
async start(args, ctx) {
|
|
88
|
+
const { url, callbackScheme } = checkStart(args);
|
|
89
|
+
const mac = platform === "darwin";
|
|
90
|
+
if (!mac && platform !== "win32" && platform !== "linux")
|
|
91
|
+
throw new AkanNativeError("UNSUPPORTED", `auth-session is not implemented on ${platform}`);
|
|
92
|
+
const schemes = mac ? registeredSchemes(plist()) : [...ctx.deepLinkSchemes];
|
|
93
|
+
if (schemes && !schemes.includes(callbackScheme)) {
|
|
94
|
+
throw new AkanNativeError(
|
|
95
|
+
"INVALID_ARGS",
|
|
96
|
+
`the app does not handle ${callbackScheme}: links; add it to deepLinks.schemes in akan-native.config.ts`,
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
if (!externalOpenAllowed())
|
|
100
|
+
throw new AkanNativeError("NOT_ALLOWED", "at most one URL per second leaves the app; try again later");
|
|
101
|
+
settle((p) => p.reject(new AkanNativeError("CANCELLED", "replaced by a newer start()")));
|
|
102
|
+
const result = new Promise<{ url: string }>((resolve, reject) => {
|
|
103
|
+
const timer = setTimeout(
|
|
104
|
+
() => settle((p) => p.reject(new AkanNativeError("CANCELLED", "no sign-in callback arrived in time"))),
|
|
105
|
+
timeoutMs,
|
|
106
|
+
);
|
|
107
|
+
pending = { scheme: callbackScheme, state: url.searchParams.get("state"), resolve, reject, timer };
|
|
108
|
+
});
|
|
109
|
+
const mine = pending;
|
|
110
|
+
if (mac) {
|
|
111
|
+
const opened = await run(["/usr/bin/open", "-u", url.href]);
|
|
112
|
+
if (opened.code !== 0 && pending === mine) {
|
|
113
|
+
settle((p) =>
|
|
114
|
+
p.reject(new AkanNativeError("INTERNAL", `open failed (${opened.code}): ${opened.stderr.trim()}`)),
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
} else {
|
|
118
|
+
await ctx.shell("shell.open", { url: url.href }).catch((error: unknown) => {
|
|
119
|
+
if (pending === mine)
|
|
120
|
+
settle((p) =>
|
|
121
|
+
p.reject(
|
|
122
|
+
new AkanNativeError("INTERNAL", `cannot open the browser: ${(error as Error)?.message ?? error}`),
|
|
123
|
+
),
|
|
124
|
+
);
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
return result;
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export default createDesktopAuthSession();
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { definePlugin } from "../../../packages/core/src/index.ts";
|
|
2
|
+
|
|
3
|
+
export { checkStart, isCallback } from "./args.ts";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* OAuth / OpenID sign-in in the system browser (plugins.md §4.5, like Expo's
|
|
7
|
+
* WebBrowser.openAuthSessionAsync): shows the provider's page and returns the redirect to
|
|
8
|
+
* `callbackScheme` with the result (code, state, error) in its query or fragment. The app then
|
|
9
|
+
* exchanges the code itself (PKCE); this plugin does not parse or validate the result.
|
|
10
|
+
*
|
|
11
|
+
* The callback scheme must be one of the app's deep link schemes (akan-native.config.ts
|
|
12
|
+
* `deepLinks.schemes`): Android and macOS receive the redirect as a deep link, so the app's
|
|
13
|
+
* `urlOpen` listeners see it too there. iOS catches it inside the session.
|
|
14
|
+
*
|
|
15
|
+
* | host | how | cancel detection |
|
|
16
|
+
* |---------|--------------------------------------------------|------------------------------------------|
|
|
17
|
+
* | iOS | ASWebAuthenticationSession | the user closed the sheet |
|
|
18
|
+
* | Android | Custom Tab + deep link (plain browser if none) | back in the app without the redirect |
|
|
19
|
+
* | macOS | default browser + deep link (TAO Event::Opened) | none: a new start() or 10 minutes |
|
|
20
|
+
* | web | UNSUPPORTED | |
|
|
21
|
+
*
|
|
22
|
+
* The web has no custom-scheme callback to catch: web apps register an https redirect on their
|
|
23
|
+
* own origin and read the result on that route (full-page redirect, or a popup posting to its
|
|
24
|
+
* opener), which depends on the app's routing and is left to the app.
|
|
25
|
+
*/
|
|
26
|
+
export interface AuthSessionApi {
|
|
27
|
+
/**
|
|
28
|
+
* Resolves with the callback URL. Rejects CANCELLED when the user dismissed the page, came back
|
|
29
|
+
* without finishing (Android), or a newer start() replaced this one; INVALID_ARGS for a bad URL
|
|
30
|
+
* or scheme (Android also when the app does not handle the scheme). `ephemeral` (iOS) signs in
|
|
31
|
+
* without the browser's cookies and skips the "wants to use … to sign in" prompt.
|
|
32
|
+
* The callback that ends a start() is its result only: it does not also reach app.urlOpen, on any
|
|
33
|
+
* platform. A link of the scheme that arrives with no start() waiting (or with another state) is
|
|
34
|
+
* an ordinary deep link.
|
|
35
|
+
*/
|
|
36
|
+
start(args: { url: string; callbackScheme: string; ephemeral?: boolean }): Promise<{ url: string }>;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export const authSession = definePlugin<AuthSessionApi>("auth-session", { methods: ["start"] });
|