@multiplatform.one/keycloak 0.0.1 → 0.0.3

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.
Files changed (116) hide show
  1. package/esm/Authenticated.js +8 -19
  2. package/esm/Authenticated.js.map +1 -1
  3. package/esm/authConfig.js +2 -2
  4. package/esm/authConfig.js.map +1 -1
  5. package/esm/expo/ExpoKeycloakContext.js +28 -0
  6. package/esm/expo/ExpoKeycloakContext.js.map +1 -0
  7. package/esm/expo/ExpoKeycloakProvider.js +113 -0
  8. package/esm/expo/ExpoKeycloakProvider.js.map +1 -0
  9. package/esm/expo/KeycloakContext.js +28 -0
  10. package/esm/expo/KeycloakContext.js.map +1 -0
  11. package/esm/expo/KeycloakProvider.js +142 -0
  12. package/esm/expo/KeycloakProvider.js.map +1 -0
  13. package/esm/expo/const.js +42 -0
  14. package/esm/expo/const.js.map +1 -0
  15. package/esm/expo/helpers.js +56 -0
  16. package/esm/expo/helpers.js.map +1 -0
  17. package/esm/expo/index.js +28 -0
  18. package/esm/expo/index.js.map +1 -0
  19. package/esm/expo/useExpoKeycloak.js +44 -0
  20. package/esm/expo/useExpoKeycloak.js.map +1 -0
  21. package/esm/expo/useTokenStorage.js +153 -0
  22. package/esm/expo/useTokenStorage.js.map +1 -0
  23. package/esm/hooks/useCurrentRouteName.js +2 -3
  24. package/esm/hooks/useCurrentRouteName.js.map +1 -1
  25. package/esm/hooks/useKeycloak/index.js +1 -1
  26. package/esm/hooks/useKeycloak/index.js.map +1 -1
  27. package/esm/hooks/useKeycloak/useKeycloak.js +17 -24
  28. package/esm/hooks/useKeycloak/useKeycloak.js.map +1 -1
  29. package/esm/hooks/useKeycloak/useKeycloak.native.js +60 -19
  30. package/esm/hooks/useKeycloak/useKeycloak.native.js.map +1 -1
  31. package/esm/hooks/useLogin.js +12 -30
  32. package/esm/hooks/useLogin.js.map +1 -1
  33. package/esm/provider/afterAuth.js +21 -39
  34. package/esm/provider/afterAuth.js.map +1 -1
  35. package/esm/provider/index.js +11 -28
  36. package/esm/provider/index.js.map +1 -1
  37. package/esm/provider/keycloakProvider.js +55 -100
  38. package/esm/provider/keycloakProvider.js.map +1 -1
  39. package/esm/provider/keycloakProvider.native.js +12 -11
  40. package/esm/provider/keycloakProvider.native.js.map +1 -1
  41. package/esm/state/index.js +2 -2
  42. package/esm/state/index.js.map +1 -1
  43. package/lib/Authenticated.js +38 -26
  44. package/lib/Authenticated.js.map +1 -1
  45. package/lib/authConfig.js +2 -4
  46. package/lib/authConfig.js.map +1 -1
  47. package/lib/expo/ExpoKeycloakContext.d.ts +32 -0
  48. package/lib/expo/ExpoKeycloakContext.js +47 -0
  49. package/lib/expo/ExpoKeycloakContext.js.map +1 -0
  50. package/lib/expo/ExpoKeycloakProvider.d.ts +37 -0
  51. package/lib/expo/ExpoKeycloakProvider.js +130 -0
  52. package/lib/expo/ExpoKeycloakProvider.js.map +1 -0
  53. package/lib/expo/KeycloakContext.d.ts +32 -0
  54. package/lib/expo/KeycloakContext.js +49 -0
  55. package/lib/expo/KeycloakContext.js.map +1 -0
  56. package/lib/expo/KeycloakProvider.d.ts +37 -0
  57. package/lib/expo/KeycloakProvider.js +138 -0
  58. package/lib/expo/KeycloakProvider.js.map +1 -0
  59. package/lib/expo/const.d.ts +33 -0
  60. package/lib/expo/const.js +66 -0
  61. package/lib/expo/const.js.map +1 -0
  62. package/lib/expo/helpers.d.ts +41 -0
  63. package/lib/expo/helpers.js +77 -0
  64. package/lib/expo/helpers.js.map +1 -0
  65. package/lib/expo/index.d.ts +26 -0
  66. package/lib/expo/index.js +50 -0
  67. package/lib/expo/index.js.map +1 -0
  68. package/lib/expo/useExpoKeycloak.d.ts +31 -0
  69. package/lib/expo/useExpoKeycloak.js +62 -0
  70. package/lib/expo/useExpoKeycloak.js.map +1 -0
  71. package/lib/expo/useTokenStorage.d.ts +36 -0
  72. package/lib/expo/useTokenStorage.js +166 -0
  73. package/lib/expo/useTokenStorage.js.map +1 -0
  74. package/lib/hooks/index.js +3 -9
  75. package/lib/hooks/index.js.map +1 -1
  76. package/lib/hooks/useAuthConfig.js +0 -2
  77. package/lib/hooks/useAuthConfig.js.map +1 -1
  78. package/lib/hooks/useCurrentRouteName.js +6 -8
  79. package/lib/hooks/useCurrentRouteName.js.map +1 -1
  80. package/lib/hooks/useKeycloak/index.d.ts +7 -4
  81. package/lib/hooks/useKeycloak/index.js +1 -7
  82. package/lib/hooks/useKeycloak/index.js.map +1 -1
  83. package/lib/hooks/useKeycloak/useKeycloak.js +45 -30
  84. package/lib/hooks/useKeycloak/useKeycloak.js.map +1 -1
  85. package/lib/hooks/useKeycloak/useKeycloak.native.d.ts +13 -3
  86. package/lib/hooks/useKeycloak/useKeycloak.native.js +61 -25
  87. package/lib/hooks/useKeycloak/useKeycloak.native.js.map +1 -1
  88. package/lib/hooks/useLogin.js +16 -25
  89. package/lib/hooks/useLogin.js.map +1 -1
  90. package/lib/index.js +4 -10
  91. package/lib/index.js.map +1 -1
  92. package/lib/provider/afterAuth.js +52 -52
  93. package/lib/provider/afterAuth.js.map +1 -1
  94. package/lib/provider/index.js +44 -43
  95. package/lib/provider/index.js.map +1 -1
  96. package/lib/provider/keycloakProvider.js +93 -114
  97. package/lib/provider/keycloakProvider.js.map +1 -1
  98. package/lib/provider/keycloakProvider.native.js +39 -15
  99. package/lib/provider/keycloakProvider.native.js.map +1 -1
  100. package/lib/state/index.js +3 -5
  101. package/lib/state/index.js.map +1 -1
  102. package/lib/tsconfig.build.tsbuildinfo +1 -1
  103. package/lib/types.js +2 -4
  104. package/lib/types.js.map +1 -1
  105. package/package.json +5 -4
  106. package/src/expo/ExpoKeycloakContext.ts +41 -0
  107. package/src/expo/ExpoKeycloakProvider.tsx +139 -0
  108. package/src/expo/NOTES +1 -0
  109. package/src/expo/const.ts +42 -0
  110. package/src/expo/helpers.ts +74 -0
  111. package/src/{@types/expoKeycloakAuth.d.ts → expo/index.ts} +6 -7
  112. package/src/expo/useExpoKeycloak.ts +44 -0
  113. package/src/expo/useTokenStorage.ts +168 -0
  114. package/src/hooks/useKeycloak/index.ts +11 -4
  115. package/src/hooks/useKeycloak/useKeycloak.native.ts +72 -8
  116. package/src/provider/keycloakProvider.native.tsx +8 -4
@@ -4,7 +4,7 @@
4
4
  * File Created: 08-11-2022 14:10:25
5
5
  * Author: Clay Risser
6
6
  * -----
7
- * Last Modified: 25-11-2022 10:21:56
7
+ * Last Modified: 26-11-2022 09:05:23
8
8
  * Modified By: Clay Risser
9
9
  * -----
10
10
  * Risser Labs LLC (c) Copyright 2021 - 2022
@@ -22,27 +22,91 @@
22
22
  * limitations under the License.
23
23
  */
24
24
 
25
- import { useKeycloak as useKeycloakExpo } from "expo-keycloak-auth";
26
- import { MultiPlatform } from "multiplatform.one";
25
+ import "core-js/actual/atob";
26
+ import "core-js/actual/escape";
27
+ import { AuthRequestPromptOptions, AuthSessionResult } from "expo-auth-session";
27
28
  import { IKeycloak } from "./index";
29
+ import {
30
+ KeycloakResourceAccess,
31
+ KeycloakRoles,
32
+ KeycloakTokenParsed,
33
+ } from "keycloak-js";
34
+ import { MultiPlatform } from "multiplatform.one";
35
+ import { useExpoKeycloak } from "../../expo";
28
36
 
29
37
  export function useKeycloak() {
30
38
  if (MultiPlatform.isStorybook()) return { authenticated: true } as IKeycloak;
31
- const { ready, login, isLoggedIn, token, logout } = useKeycloakExpo();
32
- const keycloak = new ExpoKeycloak(ready, isLoggedIn, login, logout, token);
39
+ const { ready, login, isLoggedIn, token, logout, refreshToken } =
40
+ useExpoKeycloak();
41
+ const keycloak = new ExpoKeycloak(
42
+ ready,
43
+ isLoggedIn,
44
+ login,
45
+ logout,
46
+ token || undefined,
47
+ refreshToken || undefined
48
+ );
33
49
  return keycloak as IKeycloak;
34
50
  }
35
51
 
36
52
  export class ExpoKeycloak implements IKeycloak {
37
53
  authenticated?: boolean;
38
54
 
55
+ tokenParsed?: KeycloakTokenParsed;
56
+
57
+ refreshTokenParsed?: KeycloakTokenParsed;
58
+
59
+ subject?: string;
60
+
61
+ realmAccess?: KeycloakRoles;
62
+
63
+ resourceAccess?: KeycloakResourceAccess;
64
+
65
+ login: () => Promise<unknown> | unknown;
66
+
39
67
  constructor(
40
68
  ready: boolean,
41
- isLoggedIn: boolean,
42
- public login: () => unknown,
69
+ isLoggedIn: boolean | undefined,
70
+ login: (
71
+ options?: AuthRequestPromptOptions
72
+ ) => Promise<AuthSessionResult | undefined>,
43
73
  public logout: () => unknown,
44
- public token?: string
74
+ public token?: string,
75
+ public refreshToken?: string
45
76
  ) {
46
77
  if (ready) this.authenticated = isLoggedIn;
78
+ if (this.authenticated) {
79
+ if (this.token) this.tokenParsed = decodeToken(this.token);
80
+ if (this.refreshToken) {
81
+ this.refreshTokenParsed = decodeToken(this.refreshToken);
82
+ }
83
+ if (this.tokenParsed) {
84
+ this.subject = this.tokenParsed.sub;
85
+ this.realmAccess = this.tokenParsed.realm_access;
86
+ this.resourceAccess = this.tokenParsed.resource_access;
87
+ }
88
+ }
89
+ this.login = () => login();
90
+ }
91
+ }
92
+
93
+ function decodeToken(str: string) {
94
+ str = str.split(".")[1];
95
+ str = str.replace(/-/g, "+");
96
+ str = str.replace(/_/g, "/");
97
+ switch (str.length % 4) {
98
+ case 0:
99
+ break;
100
+ case 2:
101
+ str += "==";
102
+ break;
103
+ case 3:
104
+ str += "=";
105
+ break;
106
+ default:
107
+ throw "Invalid token";
47
108
  }
109
+ str = decodeURIComponent(escape(atob(str)));
110
+ str = JSON.parse(str);
111
+ return str as unknown as KeycloakTokenParsed;
48
112
  }
@@ -22,20 +22,24 @@
22
22
  * limitations under the License.
23
23
  */
24
24
 
25
- import { KeycloakProvider as ExpoKeycloakProvider } from "expo-keycloak-auth";
26
25
  import React, { FC } from "react";
27
26
  import type { KeycloakProviderProps } from "./keycloakProvider";
28
27
  import { AfterAuth } from "./afterAuth";
28
+ import { ExpoKeycloakProvider } from "../expo";
29
+ import { KeycloakConfig } from "keycloak-js";
29
30
 
30
31
  export const KeycloakProvider: FC<KeycloakProviderProps> = ({
31
32
  children,
32
33
  keycloakConfig,
33
- }: KeycloakProviderProps & { keycloakConfig: { url?: string } }) => {
34
- keycloakConfig.url = keycloakConfig.baseUrl;
34
+ }: KeycloakProviderProps) => {
35
+ const clonedKeycloakConfig = {
36
+ ...(keycloakConfig as Omit<KeycloakConfig, "baseUrl">),
37
+ url: keycloakConfig.baseUrl,
38
+ };
35
39
  // @ts-ignore
36
40
  delete keycloakConfig.baseUrl;
37
41
  return (
38
- <ExpoKeycloakProvider {...keycloakConfig}>
42
+ <ExpoKeycloakProvider {...clonedKeycloakConfig}>
39
43
  <AfterAuth>{children}</AfterAuth>
40
44
  </ExpoKeycloakProvider>
41
45
  );