@symbiote-native/web-browser 0.1.0 → 0.3.0

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.md CHANGED
@@ -25,12 +25,12 @@ Unlike a plain RN native module, `expo-web-browser`'s native code is discovered
25
25
  `expo-modules-autolinking` — this needs wiring into the native host app **once**, covering this
26
26
  package and every other `expo-modules-core` package with zero further changes:
27
27
 
28
- | Platform | Touches |
29
- |---|---|
30
- | iOS | `ios/Podfile` — add `use_expo_modules!` |
31
- | iOS | `AppDelegate.swift` — Expo's runtime-bootstrap hook |
32
- | Android | `settings.gradle` / `app/build.gradle` — resolve and include the Expo Gradle projects |
33
- | Android | `MainApplication.kt` — Expo's bootstrap hook, plus a native-module name map |
28
+ | Platform | Touches |
29
+ | -------- | ------------------------------------------------------------------------------------- |
30
+ | iOS | `ios/Podfile` — add `use_expo_modules!` |
31
+ | iOS | `AppDelegate.swift` — Expo's runtime-bootstrap hook |
32
+ | Android | `settings.gradle` / `app/build.gradle` — resolve and include the Expo Gradle projects |
33
+ | Android | `MainApplication.kt` — Expo's bootstrap hook, plus a native-module name map |
34
34
 
35
35
  Full mechanics live in the `symbiote-expo-native-module` skill. The per-package half of that table
36
36
  — the Gradle dependency and the module map entry — is generated by
@@ -45,18 +45,18 @@ your app automatically.
45
45
  src/core/ the whole API: open/dismiss, the auth session, and the Custom Tabs
46
46
  service functions. native-module.ts resolves ExpoWebBrowser through
47
47
  expo-modules-core's requireNativeModule.
48
- src/react/ @symbiote-native/web-browser/react
49
- src/vue/ @symbiote-native/web-browser/vue
50
48
  src/angular/ @symbiote-native/web-browser/angular
51
49
  ```
52
50
 
53
- All three adapter entries are plain re-exports of `core/`. Every export is a stateless free
54
- function; the one piece of live state — the Android auth-session polyfill's redirect subscription —
55
- belongs to a single in-flight promise inside the core and never surfaces as something a caller
56
- subscribes to or tears down. So there is nothing for a hook, composable, or service to wrap, the
57
- same reason [`@symbiote-native/secure-store`](../secure-store) re-exports rather than wraps. Import
58
- from `@symbiote-native/web-browser` directly if you don't care which adapter you're on; the
59
- per-adapter subpaths exist so every wrapper package has the same import surface.
51
+ `./react`, `./vue`, and `./svelte` are `exports`-map aliases straight onto `src/core/` — no
52
+ physical per-framework file. Every export is a stateless free function; the one piece of live
53
+ state — the Android auth-session polyfill's redirect subscription — belongs to a single in-flight
54
+ promise inside the core and never surfaces as something a caller subscribes to or tears down. So
55
+ there is nothing for a hook, composable, or service to wrap, the same reason
56
+ [`@symbiote-native/secure-store`](../secure-store) does the same. `./angular` stays a physical
57
+ file/subpath since Angular ships through a separate `ngc`/AOT build (`build-ngc/`). Import from
58
+ `@symbiote-native/web-browser` directly if you don't care which adapter you're on; the per-adapter
59
+ subpaths exist so every wrapper package has the same import surface.
60
60
 
61
61
  ## Use it
62
62
 
@@ -101,18 +101,18 @@ await WebBrowser.coolDownAsync(servicePackage);
101
101
 
102
102
  ## API
103
103
 
104
- | Export | Signature | Notes |
105
- |---|---|---|
106
- | `openBrowserAsync` | `(url, options?) => Promise<IWebBrowserResult>` | Opens the in-app browser. |
107
- | `dismissBrowser` | `() => Promise<IWebBrowserDismissResult>` | iOS only — throws elsewhere, since a Custom Tab cannot be closed programmatically. |
108
- | `openAuthSessionAsync` | `(url, redirectUrl?, options?) => Promise<IWebBrowserAuthSessionResult>` | Resolves `{ type: 'success', url }` on the redirect. |
109
- | `dismissAuthSession` | `() => void` | iOS only, for the same reason as `dismissBrowser`. |
110
- | `warmUpAsync` | `(browserPackage?) => Promise<IWebBrowserWarmUpResult>` | Android. Resolves `{}` elsewhere. |
111
- | `mayInitWithUrlAsync` | `(url, browserPackage?) => Promise<IWebBrowserMayInitWithUrlResult>` | Android. Resolves `{}` elsewhere. |
112
- | `coolDownAsync` | `(browserPackage?) => Promise<IWebBrowserCoolDownResult>` | Android. Resolves `{}` elsewhere. |
113
- | `getCustomTabsSupportingBrowsersAsync` | `() => Promise<IWebBrowserCustomTabsResults>` | Android. Throws on iOS — see the note below. |
114
- | `WebBrowserResultType` | `enum` | `CANCEL`, `DISMISS`, `OPENED`, `LOCKED`. |
115
- | `WebBrowserPresentationStyle` | `enum` | iOS modal presentation styles for `options.presentationStyle`. |
104
+ | Export | Signature | Notes |
105
+ | -------------------------------------- | ------------------------------------------------------------------------ | ---------------------------------------------------------------------------------- |
106
+ | `openBrowserAsync` | `(url, options?) => Promise<IWebBrowserResult>` | Opens the in-app browser. |
107
+ | `dismissBrowser` | `() => Promise<IWebBrowserDismissResult>` | iOS only — throws elsewhere, since a Custom Tab cannot be closed programmatically. |
108
+ | `openAuthSessionAsync` | `(url, redirectUrl?, options?) => Promise<IWebBrowserAuthSessionResult>` | Resolves `{ type: 'success', url }` on the redirect. |
109
+ | `dismissAuthSession` | `() => void` | iOS only, for the same reason as `dismissBrowser`. |
110
+ | `warmUpAsync` | `(browserPackage?) => Promise<IWebBrowserWarmUpResult>` | Android. Resolves `{}` elsewhere. |
111
+ | `mayInitWithUrlAsync` | `(url, browserPackage?) => Promise<IWebBrowserMayInitWithUrlResult>` | Android. Resolves `{}` elsewhere. |
112
+ | `coolDownAsync` | `(browserPackage?) => Promise<IWebBrowserCoolDownResult>` | Android. Resolves `{}` elsewhere. |
113
+ | `getCustomTabsSupportingBrowsersAsync` | `() => Promise<IWebBrowserCustomTabsResults>` | Android. Throws on iOS — see the note below. |
114
+ | `WebBrowserResultType` | `enum` | `CANCEL`, `DISMISS`, `OPENED`, `LOCKED`. |
115
+ | `WebBrowserPresentationStyle` | `enum` | iOS modal presentation styles for `options.presentationStyle`. |
116
116
 
117
117
  `IWebBrowserOpenOptions`: `toolbarColor`, `enableBarCollapsing`; Android's `browserPackage`,
118
118
  `secondaryToolbarColor`, `showTitle`, `enableDefaultShareMenuItem`, `showInRecents`, `createTask`,
@@ -1 +1 @@
1
- {"version":3,"file":"native-module.js","sourceRoot":"","sources":["../../src/core/native-module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAYxD,MAAM,4BAA4B,GAAG,gBAAgB,CAAC;AA4BtD,MAAM,CAAC,MAAM,cAAc,GAAG,mBAAmB,CAC/C,4BAA4B,CAC7B,CAAC"}
1
+ {"version":3,"file":"native-module.js","sourceRoot":"","sources":["../../src/core/native-module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAYxD,MAAM,4BAA4B,GAAG,gBAAgB,CAAC;AA+BtD,MAAM,CAAC,MAAM,cAAc,GAAG,mBAAmB,CAC/C,4BAA4B,CAC7B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"web-browser.js","sourceRoot":"","sources":["../../src/core/web-browser.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,sFAAsF;AACtF,gGAAgG;AAChG,4FAA4F;AAC5F,gDAAgD;AAChD,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAElE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EACL,oBAAoB,GAarB,MAAM,SAAS,CAAC;AAEjB,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;AAE9C,MAAM,0BAA0B,GAAiC;IAC/D,qBAAqB,EAAE,SAAS;IAChC,uBAAuB,EAAE,SAAS;IAClC,eAAe,EAAE,EAAE;IACnB,eAAe,EAAE,EAAE;CACpB,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oCAAoC;IACxD,yFAAyF;IACzF,yFAAyF;IACzF,iDAAiD;IACjD,IAAI,CAAC,cAAc,CAAC,oCAAoC,EAAE,CAAC;QACzD,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,EAAE,sCAAsC,CAAC,CAAC;IAC5F,CAAC;IACD,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,0BAA0B,CAAC;IACpC,CAAC;IACD,OAAO,cAAc,CAAC,oCAAoC,EAAE,CAAC;AAC/D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,cAAuB;IACvD,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;QAChC,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,EAAE,aAAa,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,cAAc,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,GAAW,EACX,cAAuB;IAEvB,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE,CAAC;QACxC,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,cAAc,CAAC,mBAAmB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;AACjE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,cAAuB;IACzD,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;QAClC,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,cAAc,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAW,EACX,gBAAwC,EAAE;IAE1C,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC;QACrC,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,cAAc,CAAC,gBAAgB,CAAC,GAAG,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC;QACnC,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,cAAc,CAAC,cAAc,EAAE,CAAC;AACzC,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,GAAW,EACX,WAA2B,EAC3B,UAAmC,EAAE;IAErC,IAAI,CAAC,8BAA8B,EAAE,EAAE,CAAC;QACtC,OAAO,4BAA4B,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC;QACzC,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,cAAc,CAAC,oBAAoB,CAAC,GAAG,EAAE,WAAW,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;AACxF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB;IAChC,IAAI,8BAA8B,EAAE,EAAE,CAAC;QACrC,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC;YACvC,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC;QAC1E,CAAC;QACD,cAAc,CAAC,kBAAkB,EAAE,CAAC;QACpC,OAAO;IACT,CAAC;IACD,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC;QACnC,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;IACtE,CAAC;IACD,KAAK,cAAc,CAAC,cAAc,EAAE,CAAC;AACvC,CAAC;AAED,SAAS,cAAc,CAAC,OAAgC;IACtD,OAAO;QACL,GAAG,OAAO;QACV,aAAa,EAAE,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC;QAClD,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC;QAChD,qBAAqB,EAAE,YAAY,CAAC,OAAO,CAAC,qBAAqB,CAAC;KACnE,CAAC;AACJ,CAAC;AAED,8DAA8D;AAE9D,SAAS,8BAA8B;IACrC,OAAO,QAAQ,CAAC,EAAE,KAAK,SAAS,CAAC;AACnC,CAAC;AAED,IAAI,oBAAoB,GAA+B,IAAI,CAAC;AAE5D,+FAA+F;AAC/F,4FAA4F;AAC5F,iEAAiE;AACjE,IAAI,wBAAwB,GAAwB,IAAI,CAAC;AAEzD,gGAAgG;AAChG,kGAAkG;AAClG,qFAAqF;AACrF,IAAI,mBAAmB,GAAY,QAAQ,CAAC,YAAY,KAAK,IAAI,CAAC;AAElE,SAAS,uBAAuB,CAAC,KAAqB;IACpD,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,mBAAmB,GAAG,IAAI,CAAC;QAC3B,OAAO;IACT,CAAC;IACD,IAAI,KAAK,KAAK,QAAQ,IAAI,wBAAwB,EAAE,CAAC;QACnD,wBAAwB,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,8BAA8B,CAC3C,QAAgB,EAChB,gBAAwC,EAAE;IAE1C,MAAM,uBAAuB,GAAG,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;QAC1D,wBAAwB,GAAG,OAAO,CAAC;IACrC,CAAC,CAAC,CAAC;IACH,MAAM,uBAAuB,GAAG,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC;IAE7F,IAAI,QAA2B,CAAC;IAChC,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,uBAAuB,CAAC,MAAM,EAAE,CAAC;QACjC,wBAAwB,GAAG,IAAI,CAAC;QAChC,MAAM,KAAK,CAAC;IACd,CAAC;IAED,IAAI,MAAM,GAAsB,EAAE,IAAI,EAAE,oBAAoB,CAAC,MAAM,EAAE,CAAC;IACtE,IAAI,QAAQ,CAAC,IAAI,KAAK,oBAAoB,CAAC,MAAM,EAAE,CAAC;QAClD,MAAM,uBAAuB,CAAC;QAC9B,MAAM,GAAG,EAAE,IAAI,EAAE,oBAAoB,CAAC,OAAO,EAAE,CAAC;IAClD,CAAC;IAED,uBAAuB,CAAC,MAAM,EAAE,CAAC;IACjC,wBAAwB,GAAG,IAAI,CAAC;IAChC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,4BAA4B,CACzC,QAAgB,EAChB,SAAyB,EACzB,gBAAwC,EAAE;IAE1C,IAAI,oBAAoB,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,wGAAwG,CACzG,CAAC;IACJ,CAAC;IACD,IAAI,wBAAwB,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IAED,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;YACxB,8BAA8B,CAAC,QAAQ,EAAE,aAAa,CAAC;YACvD,oBAAoB,CAAC,SAAS,CAAC;SAChC,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,yFAAyF;QACzF,mCAAmC;QACnC,IAAI,cAAc,CAAC,cAAc,EAAE,CAAC;YAClC,KAAK,cAAc,CAAC,cAAc,EAAE,CAAC;QACvC,CAAC;QACD,sBAAsB,EAAE,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB;IAC7B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,oGAAoG,CACrG,CAAC;IACJ,CAAC;IACD,oBAAoB,CAAC,MAAM,EAAE,CAAC;IAC9B,oBAAoB,GAAG,IAAI,CAAC;AAC9B,CAAC;AAED,SAAS,oBAAoB,CAAC,SAAyB;IACrD,2FAA2F;IAC3F,8DAA8D;IAC9D,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,KAAqB,EAAE,EAAE;YAC/E,IAAI,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACjD,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"web-browser.js","sourceRoot":"","sources":["../../src/core/web-browser.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@symbiote-native/web-browser",
3
- "version": "0.1.0",
4
- "description": "expo-web-browser wrapped for SymbioteNative — one framework-agnostic core, built once and reachable from the React, Vue, and Angular adapters. In-app browser (SFSafariViewController / Android Custom Tabs) and the OAuth auth-session flow.",
3
+ "version": "0.3.0",
4
+ "description": "expo-web-browser wrapped for SymbioteNative — one framework-agnostic core, built once and reachable from the React, Vue, Svelte, Solid, and Angular adapters. In-app browser (SFSafariViewController / Android Custom Tabs) and the OAuth auth-session flow.",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -23,12 +23,20 @@
23
23
  "default": "./build/core/index.js"
24
24
  },
25
25
  "./vue": {
26
- "types": "./build/vue/index.d.ts",
27
- "default": "./build/vue/index.js"
26
+ "types": "./build/core/index.d.ts",
27
+ "default": "./build/core/index.js"
28
28
  },
29
29
  "./react": {
30
- "types": "./build/react/index.d.ts",
31
- "default": "./build/react/index.js"
30
+ "types": "./build/core/index.d.ts",
31
+ "default": "./build/core/index.js"
32
+ },
33
+ "./svelte": {
34
+ "types": "./build/core/index.d.ts",
35
+ "default": "./build/core/index.js"
36
+ },
37
+ "./solid": {
38
+ "types": "./build/core/index.d.ts",
39
+ "default": "./build/core/index.js"
32
40
  },
33
41
  "./angular": {
34
42
  "types": "./build-ngc/angular/index.d.ts",
@@ -53,15 +61,19 @@
53
61
  "expo-modules-core": "57.0.5"
54
62
  },
55
63
  "peerDependencies": {
64
+ "@symbiote-native/angular": ">=0.6.2",
56
65
  "@symbiote-native/engine": ">=0.1.7",
66
+ "@symbiote-native/react": ">=0.2.8",
67
+ "@symbiote-native/solid": ">=0.0.1",
68
+ "@symbiote-native/svelte": ">=0.1.0",
69
+ "@symbiote-native/vue": ">=0.3.8",
57
70
  "@angular/core": ">=20",
58
71
  "@vue/runtime-core": "^3.5.13",
59
72
  "react": ">=19.0.0",
60
73
  "react-native": ">=0.86",
61
- "vue": ">=3.5.0",
62
- "@symbiote-native/react": "0.2.8",
63
- "@symbiote-native/vue": "0.3.8",
64
- "@symbiote-native/angular": "0.6.2"
74
+ "solid-js": ">=1.9.0",
75
+ "svelte": ">=5.56.0",
76
+ "vue": ">=3.5.0"
65
77
  },
66
78
  "peerDependenciesMeta": {
67
79
  "@symbiote-native/angular": {
@@ -70,6 +82,12 @@
70
82
  "@symbiote-native/react": {
71
83
  "optional": true
72
84
  },
85
+ "@symbiote-native/solid": {
86
+ "optional": true
87
+ },
88
+ "@symbiote-native/svelte": {
89
+ "optional": true
90
+ },
73
91
  "@symbiote-native/vue": {
74
92
  "optional": true
75
93
  },
@@ -82,24 +100,34 @@
82
100
  "react": {
83
101
  "optional": true
84
102
  },
103
+ "solid-js": {
104
+ "optional": true
105
+ },
106
+ "svelte": {
107
+ "optional": true
108
+ },
85
109
  "vue": {
86
110
  "optional": true
87
111
  }
88
112
  },
89
113
  "devDependencies": {
90
- "@angular/compiler": "^22",
91
- "@angular/compiler-cli": "^22",
92
- "@angular/core": "^22",
114
+ "@angular/compiler": "~22.0.8",
115
+ "@angular/compiler-cli": "~22.0.8",
116
+ "@angular/core": "~22.0.8",
93
117
  "@types/node": "^26.0.0",
94
118
  "@types/react": "^19.2.0",
95
119
  "@vue/runtime-core": "^3.5.13",
96
120
  "react": "19.2.3",
121
+ "solid-js": "^1.9.14",
122
+ "svelte": "^5.56.0",
97
123
  "typescript": "~6.0.0",
98
- "@symbiote-native/angular": "0.6.2",
99
- "@symbiote-native/react": "0.2.8",
100
- "@symbiote-native/test-utils": "0.1.6",
101
- "@symbiote-native/engine": "0.1.7",
102
- "@symbiote-native/vue": "0.3.8"
124
+ "@symbiote-native/angular": "0.8.0",
125
+ "@symbiote-native/engine": "0.3.0",
126
+ "@symbiote-native/solid": "0.1.0",
127
+ "@symbiote-native/react": "0.4.0",
128
+ "@symbiote-native/svelte": "0.3.0",
129
+ "@symbiote-native/test-utils": "0.2.0",
130
+ "@symbiote-native/vue": "0.5.0"
103
131
  },
104
132
  "scripts": {
105
133
  "typecheck": "tsc --build",
@@ -21,7 +21,10 @@ const EXPO_WEB_BROWSER_MODULE_NAME = 'ExpoWebBrowser';
21
21
  // getCustomTabsSupportingBrowsersAsync. There is no way to dismiss a Custom Tab and no
22
22
  // native auth session; the user has to press the tab's own close button.
23
23
  export type INativeWebBrowserModule = {
24
- openBrowserAsync?(url: string, options: IProcessedOpenOptions): Promise<IWebBrowserResult>;
24
+ openBrowserAsync?(
25
+ url: string,
26
+ options: IProcessedOpenOptions,
27
+ ): Promise<IWebBrowserResult>;
25
28
  dismissBrowser?(): Promise<IWebBrowserDismissResult>;
26
29
  openAuthSessionAsync?(
27
30
  url: string,
package/src/core/types.ts CHANGED
@@ -202,7 +202,8 @@ export type IServiceActionResult = {
202
202
  servicePackage?: string;
203
203
  };
204
204
 
205
- export type IWebBrowserAuthSessionResult = IWebBrowserRedirectResult | IWebBrowserResult;
205
+ export type IWebBrowserAuthSessionResult =
206
+ IWebBrowserRedirectResult | IWebBrowserResult;
206
207
  export type IWebBrowserMayInitWithUrlResult = IServiceActionResult;
207
208
  export type IWebBrowserWarmUpResult = IServiceActionResult;
208
209
  export type IWebBrowserCoolDownResult = IServiceActionResult;
@@ -45,7 +45,10 @@ export async function getCustomTabsSupportingBrowsersAsync(): Promise<IWebBrowse
45
45
  // suffix, so this guard — kept in upstream's order deliberately — fires there before the
46
46
  // non-Android early return below can be reached.
47
47
  if (!expoWebBrowser.getCustomTabsSupportingBrowsersAsync) {
48
- throw new UnavailabilityError(NATIVE_MODULE_NAME, 'getCustomTabsSupportingBrowsersAsync');
48
+ throw new UnavailabilityError(
49
+ NATIVE_MODULE_NAME,
50
+ 'getCustomTabsSupportingBrowsersAsync',
51
+ );
49
52
  }
50
53
  if (Platform.OS !== 'android') {
51
54
  return EMPTY_CUSTOM_TABS_PACKAGES;
@@ -60,7 +63,9 @@ export async function getCustomTabsSupportingBrowsersAsync(): Promise<IWebBrowse
60
63
  * @param browserPackage Browser to warm up. Defaults to the preferred one.
61
64
  * @platform android
62
65
  */
63
- export async function warmUpAsync(browserPackage?: string): Promise<IWebBrowserWarmUpResult> {
66
+ export async function warmUpAsync(
67
+ browserPackage?: string,
68
+ ): Promise<IWebBrowserWarmUpResult> {
64
69
  if (!expoWebBrowser.warmUpAsync) {
65
70
  throw new UnavailabilityError(NATIVE_MODULE_NAME, 'warmUpAsync');
66
71
  }
@@ -100,7 +105,9 @@ export async function mayInitWithUrlAsync(
100
105
  * @returns The cooled service, or an empty object when there was no connection to dismiss.
101
106
  * @platform android
102
107
  */
103
- export async function coolDownAsync(browserPackage?: string): Promise<IWebBrowserCoolDownResult> {
108
+ export async function coolDownAsync(
109
+ browserPackage?: string,
110
+ ): Promise<IWebBrowserCoolDownResult> {
104
111
  if (!expoWebBrowser.coolDownAsync) {
105
112
  throw new UnavailabilityError(NATIVE_MODULE_NAME, 'coolDownAsync');
106
113
  }
@@ -174,7 +181,11 @@ export async function openAuthSessionAsync(
174
181
  if (!expoWebBrowser.openAuthSessionAsync) {
175
182
  throw new UnavailabilityError(NATIVE_MODULE_NAME, 'openAuthSessionAsync');
176
183
  }
177
- return expoWebBrowser.openAuthSessionAsync(url, redirectUrl, processOptions(options));
184
+ return expoWebBrowser.openAuthSessionAsync(
185
+ url,
186
+ redirectUrl,
187
+ processOptions(options),
188
+ );
178
189
  }
179
190
 
180
191
  /**
@@ -198,7 +209,9 @@ export function dismissAuthSession(): void {
198
209
  void expoWebBrowser.dismissBrowser();
199
210
  }
200
211
 
201
- function processOptions(options: IAuthSessionOpenOptions): IProcessedOpenOptions {
212
+ function processOptions(
213
+ options: IAuthSessionOpenOptions,
214
+ ): IProcessedOpenOptions {
202
215
  return {
203
216
  ...options,
204
217
  controlsColor: processColor(options.controlsColor),
@@ -242,7 +255,10 @@ async function openBrowserAndWaitAndroidAsync(
242
255
  const appStateChangedToActive = new Promise<void>(resolve => {
243
256
  onWebBrowserCloseAndroid = resolve;
244
257
  });
245
- const stateChangeSubscription = AppState.addEventListener('change', onAppStateChangeAndroid);
258
+ const stateChangeSubscription = AppState.addEventListener(
259
+ 'change',
260
+ onAppStateChangeAndroid,
261
+ );
246
262
 
247
263
  let launched: IWebBrowserResult;
248
264
  try {
@@ -275,7 +291,9 @@ async function openAuthSessionPolyfillAsync(
275
291
  );
276
292
  }
277
293
  if (onWebBrowserCloseAndroid) {
278
- throw new Error('WebBrowser is already open, only one can be open at a time');
294
+ throw new Error(
295
+ 'WebBrowser is already open, only one can be open at a time',
296
+ );
279
297
  }
280
298
 
281
299
  try {
@@ -303,14 +321,19 @@ function stopWaitingForRedirect(): void {
303
321
  redirectSubscription = null;
304
322
  }
305
323
 
306
- function waitForRedirectAsync(returnUrl?: string | null): Promise<IWebBrowserRedirectResult> {
324
+ function waitForRedirectAsync(
325
+ returnUrl?: string | null,
326
+ ): Promise<IWebBrowserRedirectResult> {
307
327
  // Deliberately never resolves when `returnUrl` is nullish: the browser promise it is raced
308
328
  // against is then the only thing that can settle the session.
309
329
  return new Promise(resolve => {
310
- redirectSubscription = Linking.addEventListener('url', (event: IRedirectEvent) => {
311
- if (returnUrl && event.url.startsWith(returnUrl)) {
312
- resolve({ url: event.url, type: 'success' });
313
- }
314
- });
330
+ redirectSubscription = Linking.addEventListener(
331
+ 'url',
332
+ (event: IRedirectEvent) => {
333
+ if (returnUrl && event.url.startsWith(returnUrl)) {
334
+ resolve({ url: event.url, type: 'success' });
335
+ }
336
+ },
337
+ );
315
338
  });
316
339
  }
@@ -1 +0,0 @@
1
- export * from '../core';
@@ -1,7 +0,0 @@
1
- // @symbiote-native/web-browser/react: the React entry over the framework-agnostic core.
2
- // Every export is a stateless free function. The one piece of live state — the Android
3
- // auth-session polyfill's redirect subscription — belongs to a single in-flight promise inside the
4
- // core and never surfaces as something a caller subscribes to or tears down, so there is nothing
5
- // for a hook to wrap. Hence a plain re-export, the same shape packages/secure-store's React entry
6
- // has for the same reason.
7
- export * from '../core/index.js';
@@ -1 +0,0 @@
1
- export * from '../core';
@@ -1,4 +0,0 @@
1
- // @symbiote-native/web-browser/vue: the Vue entry over the framework-agnostic core.
2
- // Nothing here holds per-instance state or hands back a subscription, so there is no lifecycle for
3
- // a composable to own — see the React entry for the full reasoning.
4
- export * from '../core/index.js';
@@ -1,7 +0,0 @@
1
- // @symbiote-native/web-browser/react: the React entry over the framework-agnostic core.
2
- // Every export is a stateless free function. The one piece of live state — the Android
3
- // auth-session polyfill's redirect subscription — belongs to a single in-flight promise inside the
4
- // core and never surfaces as something a caller subscribes to or tears down, so there is nothing
5
- // for a hook to wrap. Hence a plain re-export, the same shape packages/secure-store's React entry
6
- // has for the same reason.
7
- export * from '../core';
package/src/vue/index.ts DELETED
@@ -1,4 +0,0 @@
1
- // @symbiote-native/web-browser/vue: the Vue entry over the framework-agnostic core.
2
- // Nothing here holds per-instance state or hands back a subscription, so there is no lifecycle for
3
- // a composable to own — see the React entry for the full reasoning.
4
- export * from '../core';