@multiplatform.one/keycloak 5.0.26 → 6.0.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/dist/cjs/index.cjs +881 -17
- package/dist/esm/index.js +855 -8
- package/package.json +59 -55
- package/src/@types/expo_keycloak_auth.d.ts +4 -0
- package/src/Authenticated.tsx +1 -25
- package/src/Loading.tsx +0 -21
- package/src/authConfig.ts +0 -21
- package/src/betterAuth/client.ts +22 -0
- package/src/betterAuth/expoClient.ts +35 -0
- package/src/betterAuth/index.ts +2 -0
- package/src/hooks/index.ts +0 -21
- package/src/hooks/useAuthConfig.ts +0 -21
- package/src/hooks/useTokensFromQuery/index.native.ts +0 -21
- package/src/hooks/useTokensFromQuery/index.ts +1 -22
- package/src/hooks/useTokensFromState.ts +0 -22
- package/src/index.ts +1 -42
- package/src/keycloak/base.ts +3 -26
- package/src/keycloak/config.ts +7 -23
- package/src/keycloak/context.ts +0 -21
- package/src/keycloak/index.native.ts +1 -22
- package/src/keycloak/index.ts +29 -97
- package/src/keycloak/index.webext.ts +23 -25
- package/src/one.ts +60 -146
- package/src/provider/AfterAuth.tsx +10 -29
- package/src/provider/KeycloakProvider.tsx +2 -23
- package/src/provider/authProvider/index.native.tsx +116 -0
- package/src/provider/{AuthProvider → authProvider}/index.tsx +26 -57
- package/src/provider/{AuthProvider → authProvider}/index.webext.tsx +36 -86
- package/src/provider/{AuthProvider → authProvider}/shared.ts +5 -20
- package/src/provider/index.ts +1 -22
- package/src/session/index.native.ts +8 -20
- package/src/session/index.ts +46 -44
- package/src/session/index.webext.ts +7 -21
- package/src/state.ts +29 -30
- package/src/token.spec.ts +168 -0
- package/src/token.ts +146 -23
- package/src/types.ts +0 -21
- package/dist/cjs/Authenticated.cjs +0 -83
- package/dist/cjs/Authenticated.js +0 -54
- package/dist/cjs/Authenticated.js.map +0 -6
- package/dist/cjs/Authenticated.native.js +0 -73
- package/dist/cjs/Authenticated.native.js.map +0 -6
- package/dist/cjs/Loading.cjs +0 -39
- package/dist/cjs/Loading.js +0 -25
- package/dist/cjs/Loading.js.map +0 -6
- package/dist/cjs/Loading.native.js +0 -32
- package/dist/cjs/Loading.native.js.map +0 -6
- package/dist/cjs/authConfig.cjs +0 -29
- package/dist/cjs/authConfig.js +0 -23
- package/dist/cjs/authConfig.js.map +0 -6
- package/dist/cjs/authConfig.native.js +0 -28
- package/dist/cjs/authConfig.native.js.map +0 -6
- package/dist/cjs/hooks/index.cjs +0 -20
- package/dist/cjs/hooks/index.js +0 -17
- package/dist/cjs/hooks/index.js.map +0 -6
- package/dist/cjs/hooks/index.native.js +0 -24
- package/dist/cjs/hooks/index.native.js.map +0 -6
- package/dist/cjs/hooks/useAuthConfig.cjs +0 -30
- package/dist/cjs/hooks/useAuthConfig.js +0 -24
- package/dist/cjs/hooks/useAuthConfig.js.map +0 -6
- package/dist/cjs/hooks/useAuthConfig.native.js +0 -29
- package/dist/cjs/hooks/useAuthConfig.native.js.map +0 -6
- package/dist/cjs/hooks/useTokensFromQuery/index.cjs +0 -35
- package/dist/cjs/hooks/useTokensFromQuery/index.js +0 -29
- package/dist/cjs/hooks/useTokensFromQuery/index.js.map +0 -6
- package/dist/cjs/hooks/useTokensFromQuery/index.native.js +0 -28
- package/dist/cjs/hooks/useTokensFromQuery/index.native.js.map +0 -6
- package/dist/cjs/hooks/useTokensFromState.cjs +0 -31
- package/dist/cjs/hooks/useTokensFromState.js +0 -26
- package/dist/cjs/hooks/useTokensFromState.js.map +0 -6
- package/dist/cjs/hooks/useTokensFromState.native.js +0 -31
- package/dist/cjs/hooks/useTokensFromState.native.js.map +0 -6
- package/dist/cjs/index.js +0 -21
- package/dist/cjs/index.js.map +0 -6
- package/dist/cjs/index.native.js +0 -32
- package/dist/cjs/index.native.js.map +0 -6
- package/dist/cjs/keycloak/base.cjs +0 -90
- package/dist/cjs/keycloak/base.js +0 -90
- package/dist/cjs/keycloak/base.js.map +0 -6
- package/dist/cjs/keycloak/base.native.js +0 -135
- package/dist/cjs/keycloak/base.native.js.map +0 -6
- package/dist/cjs/keycloak/config.cjs +0 -31
- package/dist/cjs/keycloak/config.js +0 -26
- package/dist/cjs/keycloak/config.js.map +0 -6
- package/dist/cjs/keycloak/config.native.js +0 -30
- package/dist/cjs/keycloak/config.native.js.map +0 -6
- package/dist/cjs/keycloak/context.cjs +0 -27
- package/dist/cjs/keycloak/context.js +0 -22
- package/dist/cjs/keycloak/context.js.map +0 -6
- package/dist/cjs/keycloak/context.native.js +0 -26
- package/dist/cjs/keycloak/context.native.js.map +0 -6
- package/dist/cjs/keycloak/index.cjs +0 -131
- package/dist/cjs/keycloak/index.electron.cjs +0 -54
- package/dist/cjs/keycloak/index.electron.js +0 -40
- package/dist/cjs/keycloak/index.electron.js.map +0 -6
- package/dist/cjs/keycloak/index.electron.native.js +0 -137
- package/dist/cjs/keycloak/index.electron.native.js.map +0 -6
- package/dist/cjs/keycloak/index.js +0 -100
- package/dist/cjs/keycloak/index.js.map +0 -6
- package/dist/cjs/keycloak/index.native.js +0 -100
- package/dist/cjs/keycloak/index.native.js.map +0 -6
- package/dist/cjs/keycloak/index.webext.cjs +0 -54
- package/dist/cjs/keycloak/index.webext.js +0 -40
- package/dist/cjs/keycloak/index.webext.js.map +0 -6
- package/dist/cjs/keycloak/index.webext.native.js +0 -137
- package/dist/cjs/keycloak/index.webext.native.js.map +0 -6
- package/dist/cjs/one.cjs +0 -121
- package/dist/cjs/one.js +0 -119
- package/dist/cjs/one.js.map +0 -6
- package/dist/cjs/one.native.js +0 -125
- package/dist/cjs/one.native.js.map +0 -6
- package/dist/cjs/provider/AfterAuth.cjs +0 -57
- package/dist/cjs/provider/AfterAuth.js +0 -44
- package/dist/cjs/provider/AfterAuth.js.map +0 -6
- package/dist/cjs/provider/AfterAuth.native.js +0 -68
- package/dist/cjs/provider/AfterAuth.native.js.map +0 -6
- package/dist/cjs/provider/AuthProvider/index.cjs +0 -223
- package/dist/cjs/provider/AuthProvider/index.electron.cjs +0 -223
- package/dist/cjs/provider/AuthProvider/index.electron.js +0 -244
- package/dist/cjs/provider/AuthProvider/index.electron.js.map +0 -6
- package/dist/cjs/provider/AuthProvider/index.electron.native.js +0 -299
- package/dist/cjs/provider/AuthProvider/index.electron.native.js.map +0 -6
- package/dist/cjs/provider/AuthProvider/index.js +0 -241
- package/dist/cjs/provider/AuthProvider/index.js.map +0 -6
- package/dist/cjs/provider/AuthProvider/index.native.js +0 -198
- package/dist/cjs/provider/AuthProvider/index.native.js.map +0 -6
- package/dist/cjs/provider/AuthProvider/index.webext.cjs +0 -223
- package/dist/cjs/provider/AuthProvider/index.webext.js +0 -244
- package/dist/cjs/provider/AuthProvider/index.webext.js.map +0 -6
- package/dist/cjs/provider/AuthProvider/index.webext.native.js +0 -299
- package/dist/cjs/provider/AuthProvider/index.webext.native.js.map +0 -6
- package/dist/cjs/provider/AuthProvider/shared.cjs +0 -36
- package/dist/cjs/provider/AuthProvider/shared.js +0 -30
- package/dist/cjs/provider/AuthProvider/shared.js.map +0 -6
- package/dist/cjs/provider/AuthProvider/shared.native.js +0 -40
- package/dist/cjs/provider/AuthProvider/shared.native.js.map +0 -6
- package/dist/cjs/provider/KeycloakProvider.cjs +0 -60
- package/dist/cjs/provider/KeycloakProvider.js +0 -50
- package/dist/cjs/provider/KeycloakProvider.js.map +0 -6
- package/dist/cjs/provider/KeycloakProvider.native.js +0 -54
- package/dist/cjs/provider/KeycloakProvider.native.js.map +0 -6
- package/dist/cjs/provider/index.cjs +0 -20
- package/dist/cjs/provider/index.js +0 -17
- package/dist/cjs/provider/index.js.map +0 -6
- package/dist/cjs/provider/index.native.js +0 -24
- package/dist/cjs/provider/index.native.js.map +0 -6
- package/dist/cjs/session/index.cjs +0 -36
- package/dist/cjs/session/index.electron.cjs +0 -32
- package/dist/cjs/session/index.electron.js +0 -27
- package/dist/cjs/session/index.electron.js.map +0 -6
- package/dist/cjs/session/index.electron.native.js +0 -33
- package/dist/cjs/session/index.electron.native.js.map +0 -6
- package/dist/cjs/session/index.js +0 -30
- package/dist/cjs/session/index.js.map +0 -6
- package/dist/cjs/session/index.native.js +0 -33
- package/dist/cjs/session/index.native.js.map +0 -6
- package/dist/cjs/session/index.webext.cjs +0 -32
- package/dist/cjs/session/index.webext.js +0 -27
- package/dist/cjs/session/index.webext.js.map +0 -6
- package/dist/cjs/session/index.webext.native.js +0 -33
- package/dist/cjs/session/index.webext.native.js.map +0 -6
- package/dist/cjs/state.cjs +0 -37
- package/dist/cjs/state.js +0 -31
- package/dist/cjs/state.js.map +0 -6
- package/dist/cjs/state.native.js +0 -46
- package/dist/cjs/state.native.js.map +0 -6
- package/dist/cjs/token.cjs +0 -36
- package/dist/cjs/token.js +0 -30
- package/dist/cjs/token.js.map +0 -6
- package/dist/cjs/token.native.js +0 -36
- package/dist/cjs/token.native.js.map +0 -6
- package/dist/cjs/types.cjs +0 -16
- package/dist/cjs/types.js +0 -14
- package/dist/cjs/types.js.map +0 -6
- package/dist/cjs/types.native.js +0 -15
- package/dist/cjs/types.native.js.map +0 -6
- package/dist/esm/Authenticated.js +0 -36
- package/dist/esm/Authenticated.js.map +0 -6
- package/dist/esm/Authenticated.mjs +0 -48
- package/dist/esm/Authenticated.mjs.map +0 -1
- package/dist/esm/Authenticated.native.js +0 -49
- package/dist/esm/Authenticated.native.js.map +0 -6
- package/dist/esm/Loading.js +0 -11
- package/dist/esm/Loading.js.map +0 -6
- package/dist/esm/Loading.mjs +0 -16
- package/dist/esm/Loading.mjs.map +0 -1
- package/dist/esm/Loading.native.js +0 -13
- package/dist/esm/Loading.native.js.map +0 -6
- package/dist/esm/authConfig.js +0 -7
- package/dist/esm/authConfig.js.map +0 -6
- package/dist/esm/authConfig.mjs +0 -5
- package/dist/esm/authConfig.mjs.map +0 -1
- package/dist/esm/authConfig.native.js +0 -7
- package/dist/esm/authConfig.native.js.map +0 -6
- package/dist/esm/hooks/index.js +0 -4
- package/dist/esm/hooks/index.js.map +0 -6
- package/dist/esm/hooks/index.mjs +0 -4
- package/dist/esm/hooks/index.mjs.map +0 -1
- package/dist/esm/hooks/index.native.js +0 -4
- package/dist/esm/hooks/index.native.js.map +0 -6
- package/dist/esm/hooks/useAuthConfig.js +0 -9
- package/dist/esm/hooks/useAuthConfig.js.map +0 -6
- package/dist/esm/hooks/useAuthConfig.mjs +0 -7
- package/dist/esm/hooks/useAuthConfig.mjs.map +0 -1
- package/dist/esm/hooks/useAuthConfig.native.js +0 -9
- package/dist/esm/hooks/useAuthConfig.native.js.map +0 -6
- package/dist/esm/hooks/useTokensFromQuery/index.js +0 -14
- package/dist/esm/hooks/useTokensFromQuery/index.js.map +0 -6
- package/dist/esm/hooks/useTokensFromQuery/index.mjs +0 -12
- package/dist/esm/hooks/useTokensFromQuery/index.mjs.map +0 -1
- package/dist/esm/hooks/useTokensFromQuery/index.native.js +0 -7
- package/dist/esm/hooks/useTokensFromQuery/index.native.js.map +0 -6
- package/dist/esm/hooks/useTokensFromState.js +0 -11
- package/dist/esm/hooks/useTokensFromState.js.map +0 -6
- package/dist/esm/hooks/useTokensFromState.mjs +0 -8
- package/dist/esm/hooks/useTokensFromState.mjs.map +0 -1
- package/dist/esm/hooks/useTokensFromState.native.js +0 -11
- package/dist/esm/hooks/useTokensFromState.native.js.map +0 -6
- package/dist/esm/index.js.map +0 -6
- package/dist/esm/index.mjs +0 -8
- package/dist/esm/index.mjs.map +0 -1
- package/dist/esm/index.native.js +0 -8
- package/dist/esm/index.native.js.map +0 -6
- package/dist/esm/keycloak/base.js +0 -77
- package/dist/esm/keycloak/base.js.map +0 -6
- package/dist/esm/keycloak/base.mjs +0 -66
- package/dist/esm/keycloak/base.mjs.map +0 -1
- package/dist/esm/keycloak/base.native.js +0 -116
- package/dist/esm/keycloak/base.native.js.map +0 -6
- package/dist/esm/keycloak/config.js +0 -10
- package/dist/esm/keycloak/config.js.map +0 -6
- package/dist/esm/keycloak/config.mjs +0 -8
- package/dist/esm/keycloak/config.mjs.map +0 -1
- package/dist/esm/keycloak/config.native.js +0 -10
- package/dist/esm/keycloak/config.native.js.map +0 -6
- package/dist/esm/keycloak/context.js +0 -6
- package/dist/esm/keycloak/context.js.map +0 -6
- package/dist/esm/keycloak/context.mjs +0 -4
- package/dist/esm/keycloak/context.mjs.map +0 -1
- package/dist/esm/keycloak/context.native.js +0 -6
- package/dist/esm/keycloak/context.native.js.map +0 -6
- package/dist/esm/keycloak/index.electron.js +0 -30
- package/dist/esm/keycloak/index.electron.js.map +0 -6
- package/dist/esm/keycloak/index.electron.mjs +0 -29
- package/dist/esm/keycloak/index.electron.mjs.map +0 -1
- package/dist/esm/keycloak/index.electron.native.js +0 -117
- package/dist/esm/keycloak/index.electron.native.js.map +0 -6
- package/dist/esm/keycloak/index.js +0 -98
- package/dist/esm/keycloak/index.js.map +0 -6
- package/dist/esm/keycloak/index.mjs +0 -105
- package/dist/esm/keycloak/index.mjs.map +0 -1
- package/dist/esm/keycloak/index.native.js +0 -81
- package/dist/esm/keycloak/index.native.js.map +0 -6
- package/dist/esm/keycloak/index.webext.js +0 -30
- package/dist/esm/keycloak/index.webext.js.map +0 -6
- package/dist/esm/keycloak/index.webext.mjs +0 -29
- package/dist/esm/keycloak/index.webext.mjs.map +0 -1
- package/dist/esm/keycloak/index.webext.native.js +0 -117
- package/dist/esm/keycloak/index.webext.native.js.map +0 -6
- package/dist/esm/one.js +0 -96
- package/dist/esm/one.js.map +0 -6
- package/dist/esm/one.mjs +0 -87
- package/dist/esm/one.mjs.map +0 -1
- package/dist/esm/one.native.js +0 -98
- package/dist/esm/one.native.js.map +0 -6
- package/dist/esm/provider/AfterAuth.js +0 -34
- package/dist/esm/provider/AfterAuth.js.map +0 -6
- package/dist/esm/provider/AfterAuth.mjs +0 -34
- package/dist/esm/provider/AfterAuth.mjs.map +0 -1
- package/dist/esm/provider/AfterAuth.native.js +0 -53
- package/dist/esm/provider/AfterAuth.native.js.map +0 -6
- package/dist/esm/provider/AuthProvider/index.electron.js +0 -231
- package/dist/esm/provider/AuthProvider/index.electron.js.map +0 -6
- package/dist/esm/provider/AuthProvider/index.electron.mjs +0 -189
- package/dist/esm/provider/AuthProvider/index.electron.mjs.map +0 -1
- package/dist/esm/provider/AuthProvider/index.electron.native.js +0 -281
- package/dist/esm/provider/AuthProvider/index.electron.native.js.map +0 -6
- package/dist/esm/provider/AuthProvider/index.js +0 -229
- package/dist/esm/provider/AuthProvider/index.js.map +0 -6
- package/dist/esm/provider/AuthProvider/index.mjs +0 -189
- package/dist/esm/provider/AuthProvider/index.mjs.map +0 -1
- package/dist/esm/provider/AuthProvider/index.native.js +0 -186
- package/dist/esm/provider/AuthProvider/index.native.js.map +0 -6
- package/dist/esm/provider/AuthProvider/index.webext.js +0 -231
- package/dist/esm/provider/AuthProvider/index.webext.js.map +0 -6
- package/dist/esm/provider/AuthProvider/index.webext.mjs +0 -189
- package/dist/esm/provider/AuthProvider/index.webext.mjs.map +0 -1
- package/dist/esm/provider/AuthProvider/index.webext.native.js +0 -281
- package/dist/esm/provider/AuthProvider/index.webext.native.js.map +0 -6
- package/dist/esm/provider/AuthProvider/shared.js +0 -14
- package/dist/esm/provider/AuthProvider/shared.js.map +0 -6
- package/dist/esm/provider/AuthProvider/shared.mjs +0 -11
- package/dist/esm/provider/AuthProvider/shared.mjs.map +0 -1
- package/dist/esm/provider/AuthProvider/shared.native.js +0 -17
- package/dist/esm/provider/AuthProvider/shared.native.js.map +0 -6
- package/dist/esm/provider/KeycloakProvider.js +0 -37
- package/dist/esm/provider/KeycloakProvider.js.map +0 -6
- package/dist/esm/provider/KeycloakProvider.mjs +0 -37
- package/dist/esm/provider/KeycloakProvider.mjs.map +0 -1
- package/dist/esm/provider/KeycloakProvider.native.js +0 -36
- package/dist/esm/provider/KeycloakProvider.native.js.map +0 -6
- package/dist/esm/provider/index.js +0 -4
- package/dist/esm/provider/index.js.map +0 -6
- package/dist/esm/provider/index.mjs +0 -4
- package/dist/esm/provider/index.mjs.map +0 -1
- package/dist/esm/provider/index.native.js +0 -4
- package/dist/esm/provider/index.native.js.map +0 -6
- package/dist/esm/session/index.electron.js +0 -11
- package/dist/esm/session/index.electron.js.map +0 -6
- package/dist/esm/session/index.electron.mjs +0 -8
- package/dist/esm/session/index.electron.mjs.map +0 -1
- package/dist/esm/session/index.electron.native.js +0 -11
- package/dist/esm/session/index.electron.native.js.map +0 -6
- package/dist/esm/session/index.js +0 -15
- package/dist/esm/session/index.js.map +0 -6
- package/dist/esm/session/index.mjs +0 -13
- package/dist/esm/session/index.mjs.map +0 -1
- package/dist/esm/session/index.native.js +0 -11
- package/dist/esm/session/index.native.js.map +0 -6
- package/dist/esm/session/index.webext.js +0 -11
- package/dist/esm/session/index.webext.js.map +0 -6
- package/dist/esm/session/index.webext.mjs +0 -8
- package/dist/esm/session/index.webext.mjs.map +0 -1
- package/dist/esm/session/index.webext.native.js +0 -11
- package/dist/esm/session/index.webext.native.js.map +0 -6
- package/dist/esm/state.js +0 -16
- package/dist/esm/state.js.map +0 -6
- package/dist/esm/state.mjs +0 -13
- package/dist/esm/state.mjs.map +0 -1
- package/dist/esm/state.native.js +0 -25
- package/dist/esm/state.native.js.map +0 -6
- package/dist/esm/token.js +0 -14
- package/dist/esm/token.js.map +0 -6
- package/dist/esm/token.mjs +0 -12
- package/dist/esm/token.mjs.map +0 -1
- package/dist/esm/token.native.js +0 -14
- package/dist/esm/token.native.js.map +0 -6
- package/dist/esm/types.js +0 -1
- package/dist/esm/types.js.map +0 -6
- package/dist/esm/types.mjs +0 -2
- package/dist/esm/types.mjs.map +0 -1
- package/dist/esm/types.native.js +0 -1
- package/dist/esm/types.native.js.map +0 -6
- package/dist/jsx/Authenticated.js +0 -36
- package/dist/jsx/Authenticated.js.map +0 -6
- package/dist/jsx/Authenticated.mjs +0 -48
- package/dist/jsx/Authenticated.mjs.map +0 -1
- package/dist/jsx/Authenticated.native.js +0 -49
- package/dist/jsx/Authenticated.native.js.map +0 -6
- package/dist/jsx/Loading.js +0 -11
- package/dist/jsx/Loading.js.map +0 -6
- package/dist/jsx/Loading.mjs +0 -16
- package/dist/jsx/Loading.mjs.map +0 -1
- package/dist/jsx/Loading.native.js +0 -13
- package/dist/jsx/Loading.native.js.map +0 -6
- package/dist/jsx/authConfig.js +0 -7
- package/dist/jsx/authConfig.js.map +0 -6
- package/dist/jsx/authConfig.mjs +0 -5
- package/dist/jsx/authConfig.mjs.map +0 -1
- package/dist/jsx/authConfig.native.js +0 -7
- package/dist/jsx/authConfig.native.js.map +0 -6
- package/dist/jsx/hooks/index.js +0 -4
- package/dist/jsx/hooks/index.js.map +0 -6
- package/dist/jsx/hooks/index.mjs +0 -4
- package/dist/jsx/hooks/index.mjs.map +0 -1
- package/dist/jsx/hooks/index.native.js +0 -4
- package/dist/jsx/hooks/index.native.js.map +0 -6
- package/dist/jsx/hooks/useAuthConfig.js +0 -9
- package/dist/jsx/hooks/useAuthConfig.js.map +0 -6
- package/dist/jsx/hooks/useAuthConfig.mjs +0 -7
- package/dist/jsx/hooks/useAuthConfig.mjs.map +0 -1
- package/dist/jsx/hooks/useAuthConfig.native.js +0 -9
- package/dist/jsx/hooks/useAuthConfig.native.js.map +0 -6
- package/dist/jsx/hooks/useTokensFromQuery/index.js +0 -14
- package/dist/jsx/hooks/useTokensFromQuery/index.js.map +0 -6
- package/dist/jsx/hooks/useTokensFromQuery/index.mjs +0 -12
- package/dist/jsx/hooks/useTokensFromQuery/index.mjs.map +0 -1
- package/dist/jsx/hooks/useTokensFromQuery/index.native.js +0 -7
- package/dist/jsx/hooks/useTokensFromQuery/index.native.js.map +0 -6
- package/dist/jsx/hooks/useTokensFromState.js +0 -11
- package/dist/jsx/hooks/useTokensFromState.js.map +0 -6
- package/dist/jsx/hooks/useTokensFromState.mjs +0 -8
- package/dist/jsx/hooks/useTokensFromState.mjs.map +0 -1
- package/dist/jsx/hooks/useTokensFromState.native.js +0 -11
- package/dist/jsx/hooks/useTokensFromState.native.js.map +0 -6
- package/dist/jsx/index.js +0 -8
- package/dist/jsx/index.js.map +0 -6
- package/dist/jsx/index.mjs +0 -8
- package/dist/jsx/index.mjs.map +0 -1
- package/dist/jsx/index.native.js +0 -8
- package/dist/jsx/index.native.js.map +0 -6
- package/dist/jsx/keycloak/base.js +0 -77
- package/dist/jsx/keycloak/base.js.map +0 -6
- package/dist/jsx/keycloak/base.mjs +0 -66
- package/dist/jsx/keycloak/base.mjs.map +0 -1
- package/dist/jsx/keycloak/base.native.js +0 -116
- package/dist/jsx/keycloak/base.native.js.map +0 -6
- package/dist/jsx/keycloak/config.js +0 -10
- package/dist/jsx/keycloak/config.js.map +0 -6
- package/dist/jsx/keycloak/config.mjs +0 -8
- package/dist/jsx/keycloak/config.mjs.map +0 -1
- package/dist/jsx/keycloak/config.native.js +0 -10
- package/dist/jsx/keycloak/config.native.js.map +0 -6
- package/dist/jsx/keycloak/context.js +0 -6
- package/dist/jsx/keycloak/context.js.map +0 -6
- package/dist/jsx/keycloak/context.mjs +0 -4
- package/dist/jsx/keycloak/context.mjs.map +0 -1
- package/dist/jsx/keycloak/context.native.js +0 -6
- package/dist/jsx/keycloak/context.native.js.map +0 -6
- package/dist/jsx/keycloak/index.electron.js +0 -30
- package/dist/jsx/keycloak/index.electron.js.map +0 -6
- package/dist/jsx/keycloak/index.electron.mjs +0 -29
- package/dist/jsx/keycloak/index.electron.mjs.map +0 -1
- package/dist/jsx/keycloak/index.electron.native.js +0 -117
- package/dist/jsx/keycloak/index.electron.native.js.map +0 -6
- package/dist/jsx/keycloak/index.js +0 -98
- package/dist/jsx/keycloak/index.js.map +0 -6
- package/dist/jsx/keycloak/index.mjs +0 -105
- package/dist/jsx/keycloak/index.mjs.map +0 -1
- package/dist/jsx/keycloak/index.native.js +0 -81
- package/dist/jsx/keycloak/index.native.js.map +0 -6
- package/dist/jsx/keycloak/index.webext.js +0 -30
- package/dist/jsx/keycloak/index.webext.js.map +0 -6
- package/dist/jsx/keycloak/index.webext.mjs +0 -29
- package/dist/jsx/keycloak/index.webext.mjs.map +0 -1
- package/dist/jsx/keycloak/index.webext.native.js +0 -117
- package/dist/jsx/keycloak/index.webext.native.js.map +0 -6
- package/dist/jsx/one.js +0 -96
- package/dist/jsx/one.js.map +0 -6
- package/dist/jsx/one.mjs +0 -87
- package/dist/jsx/one.mjs.map +0 -1
- package/dist/jsx/one.native.js +0 -98
- package/dist/jsx/one.native.js.map +0 -6
- package/dist/jsx/provider/AfterAuth.js +0 -34
- package/dist/jsx/provider/AfterAuth.js.map +0 -6
- package/dist/jsx/provider/AfterAuth.mjs +0 -34
- package/dist/jsx/provider/AfterAuth.mjs.map +0 -1
- package/dist/jsx/provider/AfterAuth.native.js +0 -53
- package/dist/jsx/provider/AfterAuth.native.js.map +0 -6
- package/dist/jsx/provider/AuthProvider/index.electron.js +0 -231
- package/dist/jsx/provider/AuthProvider/index.electron.js.map +0 -6
- package/dist/jsx/provider/AuthProvider/index.electron.mjs +0 -189
- package/dist/jsx/provider/AuthProvider/index.electron.mjs.map +0 -1
- package/dist/jsx/provider/AuthProvider/index.electron.native.js +0 -281
- package/dist/jsx/provider/AuthProvider/index.electron.native.js.map +0 -6
- package/dist/jsx/provider/AuthProvider/index.js +0 -229
- package/dist/jsx/provider/AuthProvider/index.js.map +0 -6
- package/dist/jsx/provider/AuthProvider/index.mjs +0 -189
- package/dist/jsx/provider/AuthProvider/index.mjs.map +0 -1
- package/dist/jsx/provider/AuthProvider/index.native.js +0 -186
- package/dist/jsx/provider/AuthProvider/index.native.js.map +0 -6
- package/dist/jsx/provider/AuthProvider/index.webext.js +0 -231
- package/dist/jsx/provider/AuthProvider/index.webext.js.map +0 -6
- package/dist/jsx/provider/AuthProvider/index.webext.mjs +0 -189
- package/dist/jsx/provider/AuthProvider/index.webext.mjs.map +0 -1
- package/dist/jsx/provider/AuthProvider/index.webext.native.js +0 -281
- package/dist/jsx/provider/AuthProvider/index.webext.native.js.map +0 -6
- package/dist/jsx/provider/AuthProvider/shared.js +0 -14
- package/dist/jsx/provider/AuthProvider/shared.js.map +0 -6
- package/dist/jsx/provider/AuthProvider/shared.mjs +0 -11
- package/dist/jsx/provider/AuthProvider/shared.mjs.map +0 -1
- package/dist/jsx/provider/AuthProvider/shared.native.js +0 -17
- package/dist/jsx/provider/AuthProvider/shared.native.js.map +0 -6
- package/dist/jsx/provider/KeycloakProvider.js +0 -37
- package/dist/jsx/provider/KeycloakProvider.js.map +0 -6
- package/dist/jsx/provider/KeycloakProvider.mjs +0 -37
- package/dist/jsx/provider/KeycloakProvider.mjs.map +0 -1
- package/dist/jsx/provider/KeycloakProvider.native.js +0 -36
- package/dist/jsx/provider/KeycloakProvider.native.js.map +0 -6
- package/dist/jsx/provider/index.js +0 -4
- package/dist/jsx/provider/index.js.map +0 -6
- package/dist/jsx/provider/index.mjs +0 -4
- package/dist/jsx/provider/index.mjs.map +0 -1
- package/dist/jsx/provider/index.native.js +0 -4
- package/dist/jsx/provider/index.native.js.map +0 -6
- package/dist/jsx/session/index.electron.js +0 -11
- package/dist/jsx/session/index.electron.js.map +0 -6
- package/dist/jsx/session/index.electron.mjs +0 -8
- package/dist/jsx/session/index.electron.mjs.map +0 -1
- package/dist/jsx/session/index.electron.native.js +0 -11
- package/dist/jsx/session/index.electron.native.js.map +0 -6
- package/dist/jsx/session/index.js +0 -15
- package/dist/jsx/session/index.js.map +0 -6
- package/dist/jsx/session/index.mjs +0 -13
- package/dist/jsx/session/index.mjs.map +0 -1
- package/dist/jsx/session/index.native.js +0 -11
- package/dist/jsx/session/index.native.js.map +0 -6
- package/dist/jsx/session/index.webext.js +0 -11
- package/dist/jsx/session/index.webext.js.map +0 -6
- package/dist/jsx/session/index.webext.mjs +0 -8
- package/dist/jsx/session/index.webext.mjs.map +0 -1
- package/dist/jsx/session/index.webext.native.js +0 -11
- package/dist/jsx/session/index.webext.native.js.map +0 -6
- package/dist/jsx/state.js +0 -16
- package/dist/jsx/state.js.map +0 -6
- package/dist/jsx/state.mjs +0 -13
- package/dist/jsx/state.mjs.map +0 -1
- package/dist/jsx/state.native.js +0 -25
- package/dist/jsx/state.native.js.map +0 -6
- package/dist/jsx/token.js +0 -14
- package/dist/jsx/token.js.map +0 -6
- package/dist/jsx/token.mjs +0 -12
- package/dist/jsx/token.mjs.map +0 -1
- package/dist/jsx/token.native.js +0 -14
- package/dist/jsx/token.native.js.map +0 -6
- package/dist/jsx/types.js +0 -1
- package/dist/jsx/types.js.map +0 -6
- package/dist/jsx/types.mjs +0 -2
- package/dist/jsx/types.mjs.map +0 -1
- package/dist/jsx/types.native.js +0 -1
- package/dist/jsx/types.native.js.map +0 -6
- package/src/@types/expoKeycloakAuth.d.ts +0 -25
- package/src/keycloak/index.electron.ts +0 -72
- package/src/provider/AuthProvider/index.electron.tsx +0 -419
- package/src/provider/AuthProvider/index.native.tsx +0 -308
- package/src/session/index.electron.ts +0 -33
- package/types/Authenticated.d.ts +0 -29
- package/types/Authenticated.d.ts.map +0 -1
- package/types/Loading.d.ts +0 -26
- package/types/Loading.d.ts.map +0 -1
- package/types/authConfig.d.ts +0 -11
- package/types/authConfig.d.ts.map +0 -1
- package/types/hooks/index.d.ts +0 -24
- package/types/hooks/index.d.ts.map +0 -1
- package/types/hooks/useAuthConfig.d.ts +0 -2
- package/types/hooks/useAuthConfig.d.ts.map +0 -1
- package/types/hooks/useTokensFromQuery/index.d.ts +0 -2
- package/types/hooks/useTokensFromQuery/index.d.ts.map +0 -1
- package/types/hooks/useTokensFromQuery/index.native.d.ts +0 -2
- package/types/hooks/useTokensFromQuery/index.native.d.ts.map +0 -1
- package/types/hooks/useTokensFromState.d.ts +0 -2
- package/types/hooks/useTokensFromState.d.ts.map +0 -1
- package/types/index.d.ts +0 -28
- package/types/index.d.ts.map +0 -1
- package/types/keycloak/base.d.ts +0 -51
- package/types/keycloak/base.d.ts.map +0 -1
- package/types/keycloak/config.d.ts +0 -8
- package/types/keycloak/config.d.ts.map +0 -1
- package/types/keycloak/context.d.ts +0 -4
- package/types/keycloak/context.d.ts.map +0 -1
- package/types/keycloak/index.d.ts +0 -15
- package/types/keycloak/index.d.ts.map +0 -1
- package/types/keycloak/index.electron.d.ts +0 -12
- package/types/keycloak/index.electron.d.ts.map +0 -1
- package/types/keycloak/index.native.d.ts +0 -27
- package/types/keycloak/index.native.d.ts.map +0 -1
- package/types/keycloak/index.webext.d.ts +0 -12
- package/types/keycloak/index.webext.d.ts.map +0 -1
- package/types/one.d.ts +0 -27
- package/types/one.d.ts.map +0 -1
- package/types/provider/AfterAuth.d.ts +0 -26
- package/types/provider/AfterAuth.d.ts.map +0 -1
- package/types/provider/AuthProvider/index.d.ts +0 -23
- package/types/provider/AuthProvider/index.d.ts.map +0 -1
- package/types/provider/AuthProvider/index.electron.d.ts +0 -23
- package/types/provider/AuthProvider/index.electron.d.ts.map +0 -1
- package/types/provider/AuthProvider/index.native.d.ts +0 -23
- package/types/provider/AuthProvider/index.native.d.ts.map +0 -1
- package/types/provider/AuthProvider/index.webext.d.ts +0 -23
- package/types/provider/AuthProvider/index.webext.d.ts.map +0 -1
- package/types/provider/AuthProvider/shared.d.ts +0 -53
- package/types/provider/AuthProvider/shared.d.ts.map +0 -1
- package/types/provider/KeycloakProvider.d.ts +0 -30
- package/types/provider/KeycloakProvider.d.ts.map +0 -1
- package/types/provider/index.d.ts +0 -24
- package/types/provider/index.d.ts.map +0 -1
- package/types/session/index.d.ts +0 -16
- package/types/session/index.d.ts.map +0 -1
- package/types/session/index.electron.d.ts +0 -5
- package/types/session/index.electron.d.ts.map +0 -1
- package/types/session/index.native.d.ts +0 -5
- package/types/session/index.native.d.ts.map +0 -1
- package/types/session/index.webext.d.ts +0 -5
- package/types/session/index.webext.d.ts.map +0 -1
- package/types/state.d.ts +0 -9
- package/types/state.d.ts.map +0 -1
- package/types/token.d.ts +0 -16
- package/types/token.d.ts.map +0 -1
- package/types/types.d.ts +0 -19
- package/types/types.d.ts.map +0 -1
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File: /src/provider/auth_provider/index.native.tsx
|
|
3
|
+
* Project: @multiplatform.one/keycloak
|
|
4
|
+
*
|
|
5
|
+
* Native (Expo) AuthProvider using Better Auth Expo client.
|
|
6
|
+
* Replaces the previous expo-auth-session PKCE flow.
|
|
7
|
+
* Auth is handled by the Better Auth server; the Expo client manages
|
|
8
|
+
* the browser redirect flow and stores the session cookie in SecureStore.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { useEffect, useMemo, useState } from "react";
|
|
12
|
+
import { Loading } from "../../Loading";
|
|
13
|
+
import { getExpoAuthClient } from "../../betterAuth/expoClient";
|
|
14
|
+
import { KeycloakConfigContext } from "../../keycloak/config";
|
|
15
|
+
import { Keycloak } from "../../keycloak/index";
|
|
16
|
+
import type { KeycloakLoginOptions, KeycloakLogoutOptions } from "../../keycloak/base";
|
|
17
|
+
import { KeycloakContext } from "../../keycloak/context";
|
|
18
|
+
import { AfterAuth } from "../AfterAuth";
|
|
19
|
+
import type { AuthProviderProps } from "./shared";
|
|
20
|
+
|
|
21
|
+
export function AuthProvider({
|
|
22
|
+
children,
|
|
23
|
+
disabled,
|
|
24
|
+
keycloakConfig,
|
|
25
|
+
loadingComponent,
|
|
26
|
+
}: AuthProviderProps) {
|
|
27
|
+
const [keycloak, setKeycloak] = useState<Keycloak>();
|
|
28
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
29
|
+
|
|
30
|
+
// Resolve the Better Auth server base URL from keycloak config.
|
|
31
|
+
// On native, the keycloakConfig.url is the Keycloak server — the Better Auth
|
|
32
|
+
// server is the app backend. We derive it from env or fall back to a sensible default.
|
|
33
|
+
const serverBaseUrl = useMemo(() => {
|
|
34
|
+
// The Better Auth server URL should come from config or env.
|
|
35
|
+
// For now, derive from keycloakConfig — the app server is typically on the same origin.
|
|
36
|
+
// In production, set BETTER_AUTH_BASE_URL in the app config / env.
|
|
37
|
+
return keycloakConfig.betterAuthBaseUrl || "http://localhost:5000";
|
|
38
|
+
}, [keycloakConfig]);
|
|
39
|
+
|
|
40
|
+
const scheme = useMemo(() => keycloakConfig.expoScheme || "multiplatform-one", [keycloakConfig]);
|
|
41
|
+
|
|
42
|
+
const client = useMemo(
|
|
43
|
+
() => (disabled ? null : getExpoAuthClient(serverBaseUrl, scheme)),
|
|
44
|
+
[disabled, serverBaseUrl, scheme],
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
// Check session on mount
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
if (disabled || !client) {
|
|
50
|
+
setIsLoading(false);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
(async () => {
|
|
54
|
+
try {
|
|
55
|
+
const session = await client.getSession();
|
|
56
|
+
if (session.data?.user) {
|
|
57
|
+
const _keycloak = new Keycloak(
|
|
58
|
+
keycloakConfig,
|
|
59
|
+
undefined, // no raw token
|
|
60
|
+
undefined,
|
|
61
|
+
undefined,
|
|
62
|
+
async (options: KeycloakLoginOptions) => {
|
|
63
|
+
await client.signIn.social({
|
|
64
|
+
provider: "keycloak" as any,
|
|
65
|
+
callbackURL: options.redirectUri,
|
|
66
|
+
});
|
|
67
|
+
},
|
|
68
|
+
async (_options: KeycloakLogoutOptions) => {
|
|
69
|
+
await client.signOut();
|
|
70
|
+
},
|
|
71
|
+
);
|
|
72
|
+
// Set minimal user info from session
|
|
73
|
+
_keycloak.authenticated = true;
|
|
74
|
+
_keycloak.email = session.data.user.email || undefined;
|
|
75
|
+
_keycloak.username = session.data.user.name || undefined;
|
|
76
|
+
_keycloak.subject = session.data.user.id;
|
|
77
|
+
setKeycloak(_keycloak);
|
|
78
|
+
} else {
|
|
79
|
+
setKeycloak(
|
|
80
|
+
new Keycloak(
|
|
81
|
+
keycloakConfig,
|
|
82
|
+
undefined,
|
|
83
|
+
undefined,
|
|
84
|
+
undefined,
|
|
85
|
+
async (options: KeycloakLoginOptions) => {
|
|
86
|
+
await client.signIn.social({
|
|
87
|
+
provider: "keycloak" as any,
|
|
88
|
+
callbackURL: options.redirectUri,
|
|
89
|
+
});
|
|
90
|
+
},
|
|
91
|
+
async (_options: KeycloakLogoutOptions) => {
|
|
92
|
+
await client.signOut();
|
|
93
|
+
},
|
|
94
|
+
),
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
} catch {
|
|
98
|
+
setKeycloak(new Keycloak(keycloakConfig));
|
|
99
|
+
} finally {
|
|
100
|
+
setIsLoading(false);
|
|
101
|
+
}
|
|
102
|
+
})();
|
|
103
|
+
}, [disabled, client, keycloakConfig]);
|
|
104
|
+
|
|
105
|
+
if (disabled) return <>{children}</>;
|
|
106
|
+
if (isLoading || !keycloak) {
|
|
107
|
+
return <Loading loadingComponent={loadingComponent} />;
|
|
108
|
+
}
|
|
109
|
+
return (
|
|
110
|
+
<KeycloakConfigContext.Provider value={keycloakConfig}>
|
|
111
|
+
<KeycloakContext.Provider value={keycloak}>
|
|
112
|
+
<AfterAuth>{children}</AfterAuth>
|
|
113
|
+
</KeycloakContext.Provider>
|
|
114
|
+
</KeycloakConfigContext.Provider>
|
|
115
|
+
);
|
|
116
|
+
}
|
|
@@ -1,28 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* File: /src/provider/
|
|
2
|
+
* File: /src/provider/auth_provider/index.tsx
|
|
3
3
|
* Project: @multiplatform.one/keycloak
|
|
4
|
-
* File Created: 19-11-2024 20:26:31
|
|
5
|
-
* Author: Clay Risser
|
|
6
|
-
* -----
|
|
7
|
-
* BitSpur (c) Copyright 2021 - 2024
|
|
8
4
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
16
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
-
* See the License for the specific language governing permissions and
|
|
19
|
-
* limitations under the License.
|
|
5
|
+
* Web AuthProvider using Better Auth.
|
|
6
|
+
* Replaces the previous next-auth SessionProvider approach.
|
|
7
|
+
* For cookie-based (session) auth, Better Auth manages the session
|
|
8
|
+
* server-side; no client-side SessionProvider wrapper is needed.
|
|
9
|
+
* Patched Keycloak JS client for iframe/direct-token strategies.
|
|
20
10
|
*/
|
|
21
11
|
|
|
22
|
-
import KeycloakClient from "keycloak-js";
|
|
23
|
-
import type { KeycloakInitOptions } from "keycloak-js";
|
|
24
|
-
import { isIframe, isWindowDefined
|
|
25
|
-
import {
|
|
12
|
+
import KeycloakClient from "@multiplatform.one/keycloak-js";
|
|
13
|
+
import type { KeycloakInitOptions } from "@multiplatform.one/keycloak-js";
|
|
14
|
+
import { isIframe, isWindowDefined } from "@multiplatform.one/platform";
|
|
15
|
+
import { logger } from "@multiplatform.one/logger";
|
|
26
16
|
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
27
17
|
import { Loading } from "../../Loading";
|
|
28
18
|
import { useAuthConfig } from "../../hooks";
|
|
@@ -40,12 +30,9 @@ export function AuthProvider({
|
|
|
40
30
|
keycloakConfig,
|
|
41
31
|
keycloakInitOptions,
|
|
42
32
|
loadingComponent,
|
|
43
|
-
sessionProvider,
|
|
44
33
|
}: AuthProviderProps) {
|
|
45
34
|
const { debug, messageHandlerKeys, iframeSso } = useAuthConfig();
|
|
46
|
-
const query = new URLSearchParams(
|
|
47
|
-
isWindowDefined ? window?.location?.search || "" : "",
|
|
48
|
-
);
|
|
35
|
+
const query = new URLSearchParams(isWindowDefined ? window?.location?.search || "" : "");
|
|
49
36
|
const authStore = useAuthStore();
|
|
50
37
|
const [keycloak, setKeycloak] = useState<Keycloak>();
|
|
51
38
|
const idTokenQuery = query.get("idToken");
|
|
@@ -77,11 +64,7 @@ export function AuthProvider({
|
|
|
77
64
|
const initialTokenQuery = useMemo(
|
|
78
65
|
() =>
|
|
79
66
|
validOrRefreshableToken(
|
|
80
|
-
isIframe
|
|
81
|
-
? typeof tokenQuery === "string"
|
|
82
|
-
? tokenQuery || true
|
|
83
|
-
: undefined
|
|
84
|
-
: undefined,
|
|
67
|
+
isIframe ? (typeof tokenQuery === "string" ? tokenQuery || true : undefined) : undefined,
|
|
85
68
|
initialRefreshTokenQuery,
|
|
86
69
|
),
|
|
87
70
|
[tokenQuery, initialRefreshTokenQuery, iframeSso],
|
|
@@ -99,17 +82,16 @@ export function AuthProvider({
|
|
|
99
82
|
return AuthSource.Session;
|
|
100
83
|
}, [initialTokenQuery, iframeSso]);
|
|
101
84
|
const authStrategy = useMemo(() => {
|
|
102
|
-
if (authSource === AuthSource.Session) return AuthStrategy.
|
|
85
|
+
if (authSource === AuthSource.Session) return AuthStrategy.BetterAuth;
|
|
103
86
|
if (authSource === AuthSource.Query) {
|
|
104
87
|
return AuthStrategy.KeycloakClientImplicit;
|
|
105
88
|
}
|
|
106
89
|
if (!persist) return AuthStrategy.KeycloakClientStandard;
|
|
107
|
-
if (typeof authStore === "undefined") return;
|
|
108
90
|
if (authStore.token && typeof tokens.token === "string" && tokens.token) {
|
|
109
91
|
return AuthStrategy.KeycloakClientImplicit;
|
|
110
92
|
}
|
|
111
93
|
return AuthStrategy.KeycloakClientStandard;
|
|
112
|
-
}, [authSource, authStore
|
|
94
|
+
}, [authSource, authStore.token, tokens.token]);
|
|
113
95
|
const isLoading = useMemo(() => {
|
|
114
96
|
if (!authStrategy) return true;
|
|
115
97
|
if (authStrategy === AuthStrategy.KeycloakClientImplicit) {
|
|
@@ -121,16 +103,13 @@ export function AuthProvider({
|
|
|
121
103
|
) {
|
|
122
104
|
return true;
|
|
123
105
|
}
|
|
124
|
-
if (authSource === AuthSource.Store && typeof authStore === "undefined") {
|
|
125
|
-
return true;
|
|
126
|
-
}
|
|
127
106
|
}
|
|
128
107
|
return false;
|
|
129
108
|
}, [
|
|
130
109
|
authSource,
|
|
131
|
-
authStore
|
|
132
|
-
authStore
|
|
133
|
-
authStore
|
|
110
|
+
authStore.idToken,
|
|
111
|
+
authStore.refreshToken,
|
|
112
|
+
authStore.token,
|
|
134
113
|
authStrategy,
|
|
135
114
|
initialIdTokenQuery,
|
|
136
115
|
initialRefreshTokenQuery,
|
|
@@ -138,13 +117,7 @@ export function AuthProvider({
|
|
|
138
117
|
]);
|
|
139
118
|
|
|
140
119
|
useEffect(() => {
|
|
141
|
-
if (
|
|
142
|
-
!persist ||
|
|
143
|
-
authStore === undefined ||
|
|
144
|
-
tokens.idToken ||
|
|
145
|
-
tokens.refreshToken ||
|
|
146
|
-
tokens.token
|
|
147
|
-
) {
|
|
120
|
+
if (!persist || tokens.idToken || tokens.refreshToken || tokens.token) {
|
|
148
121
|
return;
|
|
149
122
|
}
|
|
150
123
|
const refreshToken = validOrRefreshableToken(authStore.refreshToken);
|
|
@@ -171,9 +144,7 @@ export function AuthProvider({
|
|
|
171
144
|
}
|
|
172
145
|
if (debug) logger.debug("post message", JSON.stringify({ type: "LOADED" }));
|
|
173
146
|
(messageHandlerKeys || []).forEach((key: string) => {
|
|
174
|
-
window?.webkit?.messageHandlers?.[key]?.postMessage(
|
|
175
|
-
JSON.stringify({ type: "LOADED" }),
|
|
176
|
-
);
|
|
147
|
+
window?.webkit?.messageHandlers?.[key]?.postMessage(JSON.stringify({ type: "LOADED" }));
|
|
177
148
|
});
|
|
178
149
|
window?.ReactNativeWebView?.postMessage(JSON.stringify({ type: "LOADED" }));
|
|
179
150
|
window?.parent?.postMessage(JSON.stringify({ type: "LOADED" }));
|
|
@@ -190,7 +161,7 @@ export function AuthProvider({
|
|
|
190
161
|
if (typeof data === "string") {
|
|
191
162
|
try {
|
|
192
163
|
data = JSON.parse(data);
|
|
193
|
-
} catch
|
|
164
|
+
} catch {}
|
|
194
165
|
}
|
|
195
166
|
if (debug) logger.debug("received message", JSON.stringify(data));
|
|
196
167
|
const message: MessageSchema = data;
|
|
@@ -228,7 +199,7 @@ export function AuthProvider({
|
|
|
228
199
|
if (typeof data === "string") {
|
|
229
200
|
try {
|
|
230
201
|
data = JSON.parse(data);
|
|
231
|
-
} catch
|
|
202
|
+
} catch {}
|
|
232
203
|
}
|
|
233
204
|
if (debug) logger.debug("received message", JSON.stringify(data));
|
|
234
205
|
const message: MessageSchema = data;
|
|
@@ -266,7 +237,7 @@ export function AuthProvider({
|
|
|
266
237
|
if (typeof data === "string") {
|
|
267
238
|
try {
|
|
268
239
|
data = JSON.parse(data);
|
|
269
|
-
} catch
|
|
240
|
+
} catch {}
|
|
270
241
|
}
|
|
271
242
|
if (debug) logger.debug("received message", JSON.stringify(data));
|
|
272
243
|
const message: MessageSchema = data;
|
|
@@ -275,10 +246,7 @@ export function AuthProvider({
|
|
|
275
246
|
if (debug) logger.debug("setting id token", message.payload);
|
|
276
247
|
setTokens((tokens) => ({
|
|
277
248
|
...tokens,
|
|
278
|
-
idToken: validOrRefreshableToken(
|
|
279
|
-
message.payload,
|
|
280
|
-
tokens.refreshToken,
|
|
281
|
-
),
|
|
249
|
+
idToken: validOrRefreshableToken(message.payload, tokens.refreshToken),
|
|
282
250
|
}));
|
|
283
251
|
window.removeEventListener("message", messageCallback);
|
|
284
252
|
setListeningIdToken(false);
|
|
@@ -418,8 +386,9 @@ export function AuthProvider({
|
|
|
418
386
|
[children, keycloak, keycloakConfig],
|
|
419
387
|
);
|
|
420
388
|
if (disabled) return <>{children}</>;
|
|
421
|
-
|
|
422
|
-
|
|
389
|
+
// Better Auth sessions are cookie-based; no wrapping SessionProvider needed.
|
|
390
|
+
if (authStrategy === AuthStrategy.BetterAuth) {
|
|
391
|
+
return render();
|
|
423
392
|
}
|
|
424
393
|
if (isLoading) return <Loading loadingComponent={loadingComponent} />;
|
|
425
394
|
return render();
|
|
@@ -1,27 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* File: /src/provider/
|
|
2
|
+
* File: /src/provider/auth_provider/index.webext.tsx
|
|
3
3
|
* Project: @multiplatform.one/keycloak
|
|
4
|
-
* File Created: 23-01-2025 16:57:16
|
|
5
|
-
* Author: Clay Risser
|
|
6
|
-
* -----
|
|
7
|
-
* BitSpur (c) Copyright 2021 - 2025
|
|
8
4
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
5
|
+
* WebExt AuthProvider using Better Auth client.
|
|
6
|
+
* Web extensions run in a browser context — Better Auth client
|
|
7
|
+
* works via same-origin cookies. The extension must have host
|
|
8
|
+
* permissions for the Better Auth server origin.
|
|
12
9
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
16
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
-
* See the License for the specific language governing permissions and
|
|
19
|
-
* limitations under the License.
|
|
10
|
+
* Patched Keycloak JS client for direct-token scenarios (iframe, store).
|
|
20
11
|
*/
|
|
21
12
|
|
|
22
|
-
import KeycloakClient from "keycloak-js";
|
|
23
|
-
import type { KeycloakInitOptions } from "keycloak-js";
|
|
24
|
-
import { isIframe, isWindowDefined
|
|
13
|
+
import KeycloakClient from "@multiplatform.one/keycloak-js";
|
|
14
|
+
import type { KeycloakInitOptions } from "@multiplatform.one/keycloak-js";
|
|
15
|
+
import { isIframe, isWindowDefined } from "@multiplatform.one/platform";
|
|
16
|
+
import { logger } from "@multiplatform.one/logger";
|
|
25
17
|
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
26
18
|
import { Loading } from "../../Loading";
|
|
27
19
|
import { useAuthConfig } from "../../hooks";
|
|
@@ -41,9 +33,7 @@ export function AuthProvider({
|
|
|
41
33
|
loadingComponent,
|
|
42
34
|
}: AuthProviderProps) {
|
|
43
35
|
const { debug, messageHandlerKeys, iframeSso } = useAuthConfig();
|
|
44
|
-
const query = new URLSearchParams(
|
|
45
|
-
isWindowDefined ? window?.location?.search || "" : "",
|
|
46
|
-
);
|
|
36
|
+
const query = new URLSearchParams(isWindowDefined ? window?.location?.search || "" : "");
|
|
47
37
|
const authStore = useAuthStore();
|
|
48
38
|
const [keycloak, setKeycloak] = useState<Keycloak>();
|
|
49
39
|
const idTokenQuery = query.get("idToken");
|
|
@@ -57,9 +47,9 @@ export function AuthProvider({
|
|
|
57
47
|
() =>
|
|
58
48
|
validOrRefreshableToken(
|
|
59
49
|
((!iframeSso && isIframe) ||
|
|
60
|
-
(typeof refreshTokenQuery === "string"
|
|
61
|
-
|
|
62
|
-
|
|
50
|
+
(typeof refreshTokenQuery === "string" ? refreshTokenQuery || true : undefined)) as
|
|
51
|
+
| string
|
|
52
|
+
| boolean,
|
|
63
53
|
),
|
|
64
54
|
[refreshTokenQuery, iframeSso],
|
|
65
55
|
);
|
|
@@ -67,9 +57,9 @@ export function AuthProvider({
|
|
|
67
57
|
() =>
|
|
68
58
|
validOrRefreshableToken(
|
|
69
59
|
((!iframeSso && isIframe) ||
|
|
70
|
-
(typeof idTokenQuery === "string"
|
|
71
|
-
|
|
72
|
-
|
|
60
|
+
(typeof idTokenQuery === "string" ? idTokenQuery || true : undefined)) as
|
|
61
|
+
| string
|
|
62
|
+
| boolean,
|
|
73
63
|
initialRefreshTokenQuery,
|
|
74
64
|
),
|
|
75
65
|
[idTokenQuery, initialRefreshTokenQuery, iframeSso],
|
|
@@ -78,9 +68,7 @@ export function AuthProvider({
|
|
|
78
68
|
() =>
|
|
79
69
|
validOrRefreshableToken(
|
|
80
70
|
((!iframeSso && isIframe) ||
|
|
81
|
-
(typeof tokenQuery === "string" ? tokenQuery || true : undefined)) as
|
|
82
|
-
| string
|
|
83
|
-
| boolean,
|
|
71
|
+
(typeof tokenQuery === "string" ? tokenQuery || true : undefined)) as string | boolean,
|
|
84
72
|
initialRefreshTokenQuery,
|
|
85
73
|
),
|
|
86
74
|
[tokenQuery, initialRefreshTokenQuery, iframeSso],
|
|
@@ -92,20 +80,22 @@ export function AuthProvider({
|
|
|
92
80
|
});
|
|
93
81
|
const authSource = useMemo(() => {
|
|
94
82
|
if (!iframeSso && isIframe && initialTokenQuery) return AuthSource.Query;
|
|
95
|
-
return AuthSource.Store;
|
|
83
|
+
if (!iframeSso && isIframe) return AuthSource.Store;
|
|
84
|
+
return AuthSource.Session;
|
|
96
85
|
}, [initialTokenQuery, iframeSso]);
|
|
97
86
|
const authStrategy = useMemo(() => {
|
|
87
|
+
// WebExt: prefer Better Auth for session-based auth (cookie flow)
|
|
88
|
+
if (authSource === AuthSource.Session) return AuthStrategy.BetterAuth;
|
|
98
89
|
if (authSource === AuthSource.Query) {
|
|
99
90
|
return AuthStrategy.KeycloakClientImplicit;
|
|
100
91
|
}
|
|
101
92
|
if (!persist) return AuthStrategy.KeycloakClientStandard;
|
|
102
|
-
if (typeof authStore === "undefined") return;
|
|
103
93
|
if (authStore.token) {
|
|
104
94
|
if (typeof tokens.token === "undefined") return;
|
|
105
95
|
if (tokens.token) return AuthStrategy.KeycloakClientImplicit;
|
|
106
96
|
}
|
|
107
97
|
return AuthStrategy.KeycloakClientStandard;
|
|
108
|
-
}, [authSource, authStore
|
|
98
|
+
}, [authSource, authStore.token, tokens.token]);
|
|
109
99
|
const isLoading = useMemo(() => {
|
|
110
100
|
if (!authStrategy) return true;
|
|
111
101
|
if (authStrategy === AuthStrategy.KeycloakClientImplicit) {
|
|
@@ -117,16 +107,13 @@ export function AuthProvider({
|
|
|
117
107
|
) {
|
|
118
108
|
return true;
|
|
119
109
|
}
|
|
120
|
-
if (authSource === AuthSource.Store && typeof authStore === "undefined") {
|
|
121
|
-
return true;
|
|
122
|
-
}
|
|
123
110
|
}
|
|
124
111
|
return false;
|
|
125
112
|
}, [
|
|
126
113
|
authSource,
|
|
127
|
-
authStore
|
|
128
|
-
authStore
|
|
129
|
-
authStore
|
|
114
|
+
authStore.idToken,
|
|
115
|
+
authStore.refreshToken,
|
|
116
|
+
authStore.token,
|
|
130
117
|
authStrategy,
|
|
131
118
|
initialIdTokenQuery,
|
|
132
119
|
initialRefreshTokenQuery,
|
|
@@ -134,13 +121,7 @@ export function AuthProvider({
|
|
|
134
121
|
]);
|
|
135
122
|
|
|
136
123
|
useEffect(() => {
|
|
137
|
-
if (
|
|
138
|
-
!persist ||
|
|
139
|
-
authStore === undefined ||
|
|
140
|
-
tokens.idToken ||
|
|
141
|
-
tokens.refreshToken ||
|
|
142
|
-
tokens.token
|
|
143
|
-
) {
|
|
124
|
+
if (!persist || tokens.idToken || tokens.refreshToken || tokens.token) {
|
|
144
125
|
return;
|
|
145
126
|
}
|
|
146
127
|
const refreshToken = validOrRefreshableToken(authStore.refreshToken);
|
|
@@ -148,9 +129,9 @@ export function AuthProvider({
|
|
|
148
129
|
const token = validOrRefreshableToken(authStore.token, refreshToken);
|
|
149
130
|
if (!idToken && !refreshToken && !token) return;
|
|
150
131
|
setTokens({
|
|
151
|
-
idToken
|
|
152
|
-
refreshToken
|
|
153
|
-
token
|
|
132
|
+
idToken,
|
|
133
|
+
refreshToken,
|
|
134
|
+
token,
|
|
154
135
|
});
|
|
155
136
|
}, [authStore, persist]);
|
|
156
137
|
|
|
@@ -167,9 +148,7 @@ export function AuthProvider({
|
|
|
167
148
|
}
|
|
168
149
|
if (debug) logger.debug("post message", JSON.stringify({ type: "LOADED" }));
|
|
169
150
|
(messageHandlerKeys || []).forEach((key: string) => {
|
|
170
|
-
window?.webkit?.messageHandlers?.[key]?.postMessage(
|
|
171
|
-
JSON.stringify({ type: "LOADED" }),
|
|
172
|
-
);
|
|
151
|
+
window?.webkit?.messageHandlers?.[key]?.postMessage(JSON.stringify({ type: "LOADED" }));
|
|
173
152
|
});
|
|
174
153
|
window?.ReactNativeWebView?.postMessage(JSON.stringify({ type: "LOADED" }));
|
|
175
154
|
window?.parent?.postMessage(JSON.stringify({ type: "LOADED" }));
|
|
@@ -186,7 +165,7 @@ export function AuthProvider({
|
|
|
186
165
|
if (typeof data === "string") {
|
|
187
166
|
try {
|
|
188
167
|
data = JSON.parse(data);
|
|
189
|
-
} catch
|
|
168
|
+
} catch {}
|
|
190
169
|
}
|
|
191
170
|
if (debug) logger.debug("received message", JSON.stringify(data));
|
|
192
171
|
const message: MessageSchema = data;
|
|
@@ -201,15 +180,6 @@ export function AuthProvider({
|
|
|
201
180
|
setListeningRefreshToken(false);
|
|
202
181
|
}
|
|
203
182
|
}
|
|
204
|
-
if (debug) {
|
|
205
|
-
logger.debug(
|
|
206
|
-
"listening for message",
|
|
207
|
-
JSON.stringify({
|
|
208
|
-
type: "REFRESH_TOKEN",
|
|
209
|
-
payload: "<some_refresh_token>",
|
|
210
|
-
}),
|
|
211
|
-
);
|
|
212
|
-
}
|
|
213
183
|
window.addEventListener("message", messageCallback);
|
|
214
184
|
return () => {
|
|
215
185
|
window.removeEventListener("message", messageCallback);
|
|
@@ -224,7 +194,7 @@ export function AuthProvider({
|
|
|
224
194
|
if (typeof data === "string") {
|
|
225
195
|
try {
|
|
226
196
|
data = JSON.parse(data);
|
|
227
|
-
} catch
|
|
197
|
+
} catch {}
|
|
228
198
|
}
|
|
229
199
|
if (debug) logger.debug("received message", JSON.stringify(data));
|
|
230
200
|
const message: MessageSchema = data;
|
|
@@ -239,15 +209,6 @@ export function AuthProvider({
|
|
|
239
209
|
setListeningToken(false);
|
|
240
210
|
}
|
|
241
211
|
}
|
|
242
|
-
if (debug) {
|
|
243
|
-
logger.debug(
|
|
244
|
-
"listening for message",
|
|
245
|
-
JSON.stringify({
|
|
246
|
-
type: "TOKEN",
|
|
247
|
-
payload: "<some_token>",
|
|
248
|
-
}),
|
|
249
|
-
);
|
|
250
|
-
}
|
|
251
212
|
window.addEventListener("message", messageCallback);
|
|
252
213
|
return () => {
|
|
253
214
|
window.removeEventListener("message", messageCallback);
|
|
@@ -262,7 +223,7 @@ export function AuthProvider({
|
|
|
262
223
|
if (typeof data === "string") {
|
|
263
224
|
try {
|
|
264
225
|
data = JSON.parse(data);
|
|
265
|
-
} catch
|
|
226
|
+
} catch {}
|
|
266
227
|
}
|
|
267
228
|
if (debug) logger.debug("received message", JSON.stringify(data));
|
|
268
229
|
const message: MessageSchema = data;
|
|
@@ -271,24 +232,12 @@ export function AuthProvider({
|
|
|
271
232
|
if (debug) logger.debug("setting id token", message.payload);
|
|
272
233
|
setTokens((tokens) => ({
|
|
273
234
|
...tokens,
|
|
274
|
-
idToken: validOrRefreshableToken(
|
|
275
|
-
message.payload,
|
|
276
|
-
tokens.refreshToken,
|
|
277
|
-
),
|
|
235
|
+
idToken: validOrRefreshableToken(message.payload, tokens.refreshToken),
|
|
278
236
|
}));
|
|
279
237
|
window.removeEventListener("message", messageCallback);
|
|
280
238
|
setListeningIdToken(false);
|
|
281
239
|
}
|
|
282
240
|
}
|
|
283
|
-
if (debug) {
|
|
284
|
-
logger.debug(
|
|
285
|
-
"listening for message",
|
|
286
|
-
JSON.stringify({
|
|
287
|
-
type: "ID_TOKEN",
|
|
288
|
-
payload: "<some_id_token>",
|
|
289
|
-
}),
|
|
290
|
-
);
|
|
291
|
-
}
|
|
292
241
|
window.addEventListener("message", messageCallback);
|
|
293
242
|
return () => {
|
|
294
243
|
window.removeEventListener("message", messageCallback);
|
|
@@ -414,6 +363,7 @@ export function AuthProvider({
|
|
|
414
363
|
[children, keycloak, keycloakConfig],
|
|
415
364
|
);
|
|
416
365
|
if (disabled) return <>{children}</>;
|
|
366
|
+
if (authStrategy === AuthStrategy.BetterAuth) return render();
|
|
417
367
|
if (isLoading) return <Loading loadingComponent={loadingComponent} />;
|
|
418
368
|
return render();
|
|
419
369
|
}
|
|
@@ -1,26 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* File: /src/provider/
|
|
2
|
+
* File: /src/provider/auth_provider/shared.ts
|
|
3
3
|
* Project: @multiplatform.one/keycloak
|
|
4
|
-
* File Created: 23-12-2024 19:30:25
|
|
5
|
-
* Author: Clay Risser
|
|
6
|
-
* -----
|
|
7
|
-
* BitSpur (c) Copyright 2021 - 2024
|
|
8
4
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* You may obtain a copy of the License at
|
|
12
|
-
*
|
|
13
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
-
*
|
|
15
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
16
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
-
* See the License for the specific language governing permissions and
|
|
19
|
-
* limitations under the License.
|
|
5
|
+
* Shared types and constants for AuthProvider.
|
|
6
|
+
* No longer depends on next-auth.
|
|
20
7
|
*/
|
|
21
8
|
|
|
22
|
-
import type { KeycloakInitOptions } from "keycloak-js";
|
|
23
|
-
import type { SessionProviderProps } from "next-auth/react";
|
|
9
|
+
import type { KeycloakInitOptions } from "@multiplatform.one/keycloak-js";
|
|
24
10
|
import type { ComponentType, PropsWithChildren } from "react";
|
|
25
11
|
import type { KeycloakConfig } from "../../keycloak/index";
|
|
26
12
|
|
|
@@ -42,7 +28,6 @@ export interface AuthProviderProps extends PropsWithChildren {
|
|
|
42
28
|
keycloakConfig: KeycloakConfig;
|
|
43
29
|
keycloakInitOptions?: KeycloakInitOptions;
|
|
44
30
|
loadingComponent?: ComponentType;
|
|
45
|
-
sessionProvider?: Omit<SessionProviderProps, "children">;
|
|
46
31
|
}
|
|
47
32
|
|
|
48
33
|
export interface Tokens<B = boolean> {
|
|
@@ -52,7 +37,7 @@ export interface Tokens<B = boolean> {
|
|
|
52
37
|
}
|
|
53
38
|
|
|
54
39
|
export enum AuthStrategy {
|
|
55
|
-
|
|
40
|
+
BetterAuth = "better-auth",
|
|
56
41
|
ExpoAuth = "expo-auth",
|
|
57
42
|
KeycloakClientImplicit = "keycloak-client-implicit",
|
|
58
43
|
KeycloakClientStandard = "keycloak-client-standard",
|
package/src/provider/index.ts
CHANGED
|
@@ -1,24 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* File: /src/provider/index.ts
|
|
3
|
-
* Project: @multiplatform.one/keycloak
|
|
4
|
-
* File Created: 19-11-2024 20:26:31
|
|
5
|
-
* Author: Clay Risser
|
|
6
|
-
* -----
|
|
7
|
-
* BitSpur (c) Copyright 2021 - 2024
|
|
8
|
-
*
|
|
9
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
-
* you may not use this file except in compliance with the License.
|
|
11
|
-
* You may obtain a copy of the License at
|
|
12
|
-
*
|
|
13
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
-
*
|
|
15
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
16
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
-
* See the License for the specific language governing permissions and
|
|
19
|
-
* limitations under the License.
|
|
20
|
-
*/
|
|
21
|
-
|
|
22
1
|
export * from "./AfterAuth";
|
|
23
|
-
export * from "./
|
|
2
|
+
export * from "./authProvider";
|
|
24
3
|
export * from "./KeycloakProvider";
|
|
@@ -1,33 +1,21 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
2
|
* File: /src/session/index.native.ts
|
|
3
3
|
* Project: @multiplatform.one/keycloak
|
|
4
|
-
* File Created: 04-04-2024 15:50:39
|
|
5
|
-
* Author: Clay Risser
|
|
6
|
-
* -----
|
|
7
|
-
* BitSpur (c) Copyright 2021 - 2024
|
|
8
4
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* You may obtain a copy of the License at
|
|
12
|
-
*
|
|
13
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
-
*
|
|
15
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
16
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
-
* See the License for the specific language governing permissions and
|
|
19
|
-
* limitations under the License.
|
|
5
|
+
* Better Auth session hook for React Native / Expo.
|
|
6
|
+
* Uses the Expo auth client when available, otherwise returns empty session.
|
|
20
7
|
*/
|
|
21
8
|
|
|
22
|
-
import type { UseSessionOptions } from "next-auth/react";
|
|
23
9
|
import type { SessionContextValue } from "./index";
|
|
24
10
|
|
|
25
11
|
export async function getSession() {
|
|
26
12
|
return null;
|
|
27
13
|
}
|
|
28
14
|
|
|
29
|
-
export function useSession<R extends boolean>(
|
|
30
|
-
_options?:
|
|
15
|
+
export function useSession<R extends boolean = false>(
|
|
16
|
+
_options?: Record<string, unknown>,
|
|
31
17
|
): SessionContextValue<R> {
|
|
32
|
-
|
|
18
|
+
// On native, session is managed by AuthProvider (Expo auth client).
|
|
19
|
+
// Components consuming useSession outside AuthProvider get empty state.
|
|
20
|
+
return { session: null, status: "unauthenticated" };
|
|
33
21
|
}
|