@multiplatform.one/wallet 7.7.2

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 (155) hide show
  1. package/README.md +8 -0
  2. package/dist/cjs/SiweKeycloakProvider.cjs +273 -0
  3. package/dist/cjs/SiweKeycloakProvider.native.js +309 -0
  4. package/dist/cjs/SiweKeycloakProvider.native.js.map +1 -0
  5. package/dist/cjs/base64.cjs +51 -0
  6. package/dist/cjs/base64.native.js +55 -0
  7. package/dist/cjs/base64.native.js.map +1 -0
  8. package/dist/cjs/base64.spec.cjs +57 -0
  9. package/dist/cjs/base64.spec.native.js +79 -0
  10. package/dist/cjs/base64.spec.native.js.map +1 -0
  11. package/dist/cjs/context.cjs +29 -0
  12. package/dist/cjs/context.native.js +32 -0
  13. package/dist/cjs/context.native.js.map +1 -0
  14. package/dist/cjs/hooks/context.cjs +29 -0
  15. package/dist/cjs/hooks/context.native.js +32 -0
  16. package/dist/cjs/hooks/context.native.js.map +1 -0
  17. package/dist/cjs/hooks/index.cjs +20 -0
  18. package/dist/cjs/hooks/index.native.js +23 -0
  19. package/dist/cjs/hooks/index.native.js.map +1 -0
  20. package/dist/cjs/hooks/useSiweKeycloak.cjs +61 -0
  21. package/dist/cjs/hooks/useSiweKeycloak.native.js +64 -0
  22. package/dist/cjs/hooks/useSiweKeycloak.native.js.map +1 -0
  23. package/dist/cjs/index.cjs +133 -0
  24. package/dist/cjs/index.native.js +189 -0
  25. package/dist/cjs/index.native.js.map +1 -0
  26. package/dist/cjs/render.cjs +78 -0
  27. package/dist/cjs/render.native.js +82 -0
  28. package/dist/cjs/render.native.js.map +1 -0
  29. package/dist/cjs/siwe.cjs +76 -0
  30. package/dist/cjs/siwe.native.js +94 -0
  31. package/dist/cjs/siwe.native.js.map +1 -0
  32. package/dist/cjs/types.cjs +18 -0
  33. package/dist/cjs/types.native.js +21 -0
  34. package/dist/cjs/types.native.js.map +1 -0
  35. package/dist/cjs/util.cjs +53 -0
  36. package/dist/cjs/util.native.js +56 -0
  37. package/dist/cjs/util.native.js.map +1 -0
  38. package/dist/cjs/util.spec.cjs +53 -0
  39. package/dist/cjs/util.spec.native.js +62 -0
  40. package/dist/cjs/util.spec.native.js.map +1 -0
  41. package/dist/esm/SiweKeycloakProvider.mjs +237 -0
  42. package/dist/esm/SiweKeycloakProvider.mjs.map +1 -0
  43. package/dist/esm/SiweKeycloakProvider.native.js +270 -0
  44. package/dist/esm/SiweKeycloakProvider.native.js.map +1 -0
  45. package/dist/esm/base64.mjs +26 -0
  46. package/dist/esm/base64.mjs.map +1 -0
  47. package/dist/esm/base64.native.js +27 -0
  48. package/dist/esm/base64.native.js.map +1 -0
  49. package/dist/esm/base64.spec.mjs +58 -0
  50. package/dist/esm/base64.spec.mjs.map +1 -0
  51. package/dist/esm/base64.spec.native.js +77 -0
  52. package/dist/esm/base64.spec.native.js.map +1 -0
  53. package/dist/esm/context.mjs +4 -0
  54. package/dist/esm/context.mjs.map +1 -0
  55. package/dist/esm/context.native.js +4 -0
  56. package/dist/esm/context.native.js.map +1 -0
  57. package/dist/esm/hooks/context.mjs +4 -0
  58. package/dist/esm/hooks/context.mjs.map +1 -0
  59. package/dist/esm/hooks/context.native.js +4 -0
  60. package/dist/esm/hooks/context.native.js.map +1 -0
  61. package/dist/esm/hooks/index.mjs +2 -0
  62. package/dist/esm/hooks/index.mjs.map +1 -0
  63. package/dist/esm/hooks/index.native.js +2 -0
  64. package/dist/esm/hooks/index.native.js.map +1 -0
  65. package/dist/esm/hooks/useSiweKeycloak.mjs +36 -0
  66. package/dist/esm/hooks/useSiweKeycloak.mjs.map +1 -0
  67. package/dist/esm/hooks/useSiweKeycloak.native.js +36 -0
  68. package/dist/esm/hooks/useSiweKeycloak.native.js.map +1 -0
  69. package/dist/esm/index.mjs +107 -0
  70. package/dist/esm/index.mjs.map +1 -0
  71. package/dist/esm/index.native.js +160 -0
  72. package/dist/esm/index.native.js.map +1 -0
  73. package/dist/esm/render.mjs +42 -0
  74. package/dist/esm/render.mjs.map +1 -0
  75. package/dist/esm/render.native.js +43 -0
  76. package/dist/esm/render.native.js.map +1 -0
  77. package/dist/esm/siwe.mjs +51 -0
  78. package/dist/esm/siwe.mjs.map +1 -0
  79. package/dist/esm/siwe.native.js +66 -0
  80. package/dist/esm/siwe.native.js.map +1 -0
  81. package/dist/esm/types.mjs +2 -0
  82. package/dist/esm/types.mjs.map +1 -0
  83. package/dist/esm/types.native.js +2 -0
  84. package/dist/esm/types.native.js.map +1 -0
  85. package/dist/esm/util.mjs +27 -0
  86. package/dist/esm/util.mjs.map +1 -0
  87. package/dist/esm/util.native.js +27 -0
  88. package/dist/esm/util.native.js.map +1 -0
  89. package/dist/esm/util.spec.mjs +54 -0
  90. package/dist/esm/util.spec.mjs.map +1 -0
  91. package/dist/esm/util.spec.native.js +60 -0
  92. package/dist/esm/util.spec.native.js.map +1 -0
  93. package/package.json +81 -0
  94. package/src/SiweKeycloakProvider.tsx +297 -0
  95. package/src/base64.spec.ts +65 -0
  96. package/src/base64.ts +26 -0
  97. package/src/context.ts +10 -0
  98. package/src/hooks/context.ts +10 -0
  99. package/src/hooks/index.ts +1 -0
  100. package/src/hooks/useSiweKeycloak.ts +23 -0
  101. package/src/index.ts +127 -0
  102. package/src/main/java/com/bitspur/keycloak/siwe/Errors.java +21 -0
  103. package/src/main/java/com/bitspur/keycloak/siwe/LiteAuthenticationService.java +167 -0
  104. package/src/main/java/com/bitspur/keycloak/siwe/SiweCredentials.java +36 -0
  105. package/src/main/java/com/bitspur/keycloak/siwe/SiweSession.java +36 -0
  106. package/src/main/java/com/bitspur/keycloak/siwe/SiweUtil.java +599 -0
  107. package/src/main/java/com/bitspur/keycloak/siwe/Token.java +85 -0
  108. package/src/main/java/com/bitspur/keycloak/siwe/authenticators/browser/SiweBrowserAuthenticator.java +109 -0
  109. package/src/main/java/com/bitspur/keycloak/siwe/authenticators/browser/SiweBrowserAuthenticatorFactory.java +93 -0
  110. package/src/main/java/com/bitspur/keycloak/siwe/authenticators/directgrant/SiweDirectGrantAuthenticator.java +153 -0
  111. package/src/main/java/com/bitspur/keycloak/siwe/authenticators/directgrant/SiweDirectGrantAuthenticatorFactory.java +93 -0
  112. package/src/main/java/com/bitspur/keycloak/siwe/jpa/nonce/SiweNonce.java +95 -0
  113. package/src/main/java/com/bitspur/keycloak/siwe/jpa/nonce/SiweNonceJpaEntityProvider.java +82 -0
  114. package/src/main/java/com/bitspur/keycloak/siwe/jpa/nonce/SiweNonceJpaEntityProviderFactory.java +46 -0
  115. package/src/main/java/com/bitspur/keycloak/siwe/jpa/wallet/SiweWalletAddress.java +103 -0
  116. package/src/main/java/com/bitspur/keycloak/siwe/jpa/wallet/SiweWalletJpaEntityProvider.java +43 -0
  117. package/src/main/java/com/bitspur/keycloak/siwe/jpa/wallet/SiweWalletJpaEntityProviderFactory.java +46 -0
  118. package/src/main/java/com/bitspur/keycloak/siwe/protocol/SiweWalletProtocolMapper.java +85 -0
  119. package/src/main/java/com/bitspur/keycloak/siwe/resource/SiweResource.java +210 -0
  120. package/src/main/java/com/bitspur/keycloak/siwe/resource/SiweResourceProvider.java +34 -0
  121. package/src/main/java/com/bitspur/keycloak/siwe/resource/SiweResourceProviderFactory.java +46 -0
  122. package/src/main/java/com/bitspur/keycloak/siwe/siu/SiuCredentials.java +52 -0
  123. package/src/main/java/com/bitspur/keycloak/siwe/siu/SiuMessage.java +362 -0
  124. package/src/main/java/com/bitspur/keycloak/siwe/siu/SiuParseException.java +23 -0
  125. package/src/main/java/com/bitspur/keycloak/siwe/siu/SiuUtil.java +547 -0
  126. package/src/main/java/com/bitspur/keycloak/siwe/siu/authenticators/browser/SiuBrowserAuthenticator.java +112 -0
  127. package/src/main/java/com/bitspur/keycloak/siwe/siu/authenticators/browser/SiuBrowserAuthenticatorFactory.java +96 -0
  128. package/src/main/java/com/bitspur/keycloak/siwe/siu/authenticators/directgrant/SiuDirectGrantAuthenticator.java +169 -0
  129. package/src/main/java/com/bitspur/keycloak/siwe/siu/authenticators/directgrant/SiuDirectGrantAuthenticatorFactory.java +96 -0
  130. package/src/main/java/com/bitspur/keycloak/siwe/siu/resource/SiuResource.java +244 -0
  131. package/src/main/java/com/bitspur/keycloak/siwe/siu/resource/SiuResourceProvider.java +34 -0
  132. package/src/main/java/com/bitspur/keycloak/siwe/siu/resource/SiuResourceProviderFactory.java +48 -0
  133. package/src/main/java/com/bitspur/keycloak/siwe/siws/SiwsCredentials.java +52 -0
  134. package/src/main/java/com/bitspur/keycloak/siwe/siws/SiwsMessage.java +362 -0
  135. package/src/main/java/com/bitspur/keycloak/siwe/siws/SiwsParseException.java +23 -0
  136. package/src/main/java/com/bitspur/keycloak/siwe/siws/SiwsUtil.java +564 -0
  137. package/src/main/java/com/bitspur/keycloak/siwe/siws/authenticators/browser/SiwsBrowserAuthenticator.java +112 -0
  138. package/src/main/java/com/bitspur/keycloak/siwe/siws/authenticators/browser/SiwsBrowserAuthenticatorFactory.java +96 -0
  139. package/src/main/java/com/bitspur/keycloak/siwe/siws/authenticators/directgrant/SiwsDirectGrantAuthenticator.java +169 -0
  140. package/src/main/java/com/bitspur/keycloak/siwe/siws/authenticators/directgrant/SiwsDirectGrantAuthenticatorFactory.java +96 -0
  141. package/src/main/java/com/bitspur/keycloak/siwe/siws/resource/SiwsResource.java +244 -0
  142. package/src/main/java/com/bitspur/keycloak/siwe/siws/resource/SiwsResourceProvider.java +34 -0
  143. package/src/main/java/com/bitspur/keycloak/siwe/siws/resource/SiwsResourceProviderFactory.java +48 -0
  144. package/src/main/resources/META-INF/keycloak-themes.json +8 -0
  145. package/src/main/resources/META-INF/services/org.keycloak.authentication.AuthenticatorFactory +6 -0
  146. package/src/main/resources/META-INF/services/org.keycloak.connections.jpa.entityprovider.JpaEntityProviderFactory +2 -0
  147. package/src/main/resources/META-INF/services/org.keycloak.protocol.ProtocolMapper +1 -0
  148. package/src/main/resources/META-INF/services/org.keycloak.services.resource.RealmResourceProviderFactory +3 -0
  149. package/src/main/resources/META-INF/siwe-nonce-changelog.xml +29 -0
  150. package/src/main/resources/META-INF/siwe-wallet-changelog.xml +46 -0
  151. package/src/render.tsx +47 -0
  152. package/src/siwe.tsx +57 -0
  153. package/src/types.ts +6 -0
  154. package/src/util.spec.ts +72 -0
  155. package/src/util.ts +28 -0
package/README.md ADDED
@@ -0,0 +1,8 @@
1
+ # @multiplatform.one/wallet
2
+
3
+ erc-4361 sign-in with ethereum plugin for keycloak
4
+
5
+ JS client exports (`SiweKeycloakProvider`, `useSiweKeycloak`, …) keep those
6
+ names; import them from `@multiplatform.one/wallet`. The Keycloak SPI JAR is
7
+ still `siwe-keycloak` (`com.bitspur.keycloak.siwe`) because realm.json depends
8
+ on those authenticator IDs.
@@ -0,0 +1,273 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all) __defProp(target, name, {
9
+ get: all[name],
10
+ enumerable: true
11
+ });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
16
+ get: () => from[key],
17
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
18
+ });
19
+ }
20
+ return to;
21
+ };
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
23
+ // If the importer is in node compatibility mode or this is not an ESM
24
+ // file that has been converted to a CommonJS file using a Babel-
25
+ // compatible transform (i.e. "__esModule" has not been set), then set
26
+ // "default" to the CommonJS "module.exports" for node compatibility.
27
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
28
+ value: mod,
29
+ enumerable: true
30
+ }) : target, mod));
31
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
32
+ value: true
33
+ }), mod);
34
+ var SiweKeycloakProvider_exports = {};
35
+ __export(SiweKeycloakProvider_exports, {
36
+ SiweKeycloakProvider: () => SiweKeycloakProvider
37
+ });
38
+ module.exports = __toCommonJS(SiweKeycloakProvider_exports);
39
+ var import_keycloak_js = __toESM(require("@multiplatform.one/keycloak-js"));
40
+ var import_react_query = require("@tanstack/react-query");
41
+ var import_connectkit = require("@multiplatform.one/web3/connectkit");
42
+ var import_react = require("react");
43
+ var import_wagmi = require("wagmi");
44
+ var import_chains = require("wagmi/chains");
45
+ var import_store = require("@multiplatform.one/store");
46
+ var import_context = require("./hooks/context.cjs");
47
+ var import_base64 = require("./base64.cjs");
48
+ var import_util = require("./util.cjs");
49
+ var import_jsx_runtime = require("react/jsx-runtime");
50
+ const queryClient = new import_react_query.QueryClient();
51
+ const logger = console;
52
+ const ACCESS_TOKEN_KEY = "KEYCLOAK_TOKEN";
53
+ const ID_TOKEN_KEY = "KEYCLOAK_ID_TOKEN";
54
+ const REFRESH_TOKEN_KEY = "KEYCLOAK_REFRESH_TOKEN";
55
+ function SiweKeycloakProvider({
56
+ children,
57
+ clearTokens: clearTokensProp,
58
+ debug,
59
+ getTokens: getTokensProp,
60
+ keycloak: keycloakProp,
61
+ siwe,
62
+ setTokens: setTokensProp,
63
+ wagmi: wagmiProp,
64
+ onSignedIn,
65
+ onSignedInFailed,
66
+ ...props
67
+ }) {
68
+ const keycloakConfig = (0, import_react.useMemo)(() => ({
69
+ ...keycloakProp,
70
+ ...(typeof keycloakProp?.baseUrl !== "undefined" ? {
71
+ baseUrl: keycloakProp.baseUrl
72
+ } : {
73
+ baseUrl: "http://localhost:8080"
74
+ }),
75
+ ...(typeof keycloakProp?.clientId !== "undefined" ? {
76
+ clientId: keycloakProp.clientId
77
+ } : {
78
+ clientId: "app"
79
+ }),
80
+ ...(typeof keycloakProp?.realm !== "undefined" ? {
81
+ realm: keycloakProp.realm
82
+ } : {
83
+ realm: "main"
84
+ }),
85
+ ...(typeof keycloakProp?.scope !== "undefined" ? {
86
+ scope: keycloakProp.scope
87
+ } : {
88
+ scope: []
89
+ })
90
+ }), [keycloakProp]);
91
+ const keycloak = (0, import_react.useMemo)(() => typeof window !== "undefined" ? new import_keycloak_js.default({
92
+ clientId: keycloakConfig.clientId,
93
+ realm: keycloakConfig.realm,
94
+ url: keycloakConfig.baseUrl
95
+ }) : void 0, [keycloakConfig]);
96
+ const clearTokens = (0, import_react.useMemo)(() => clearTokensProp || (async () => {
97
+ await Promise.resolve(import_store.storage.removeItem(ID_TOKEN_KEY));
98
+ await Promise.resolve(import_store.storage.removeItem(REFRESH_TOKEN_KEY));
99
+ await Promise.resolve(import_store.storage.removeItem(ACCESS_TOKEN_KEY));
100
+ }), [clearTokensProp]);
101
+ const setTokens = (0, import_react.useMemo)(() => setTokensProp || (async ({
102
+ accessToken,
103
+ refreshToken,
104
+ idToken
105
+ }) => {
106
+ await Promise.resolve(import_store.storage.setItem(ID_TOKEN_KEY, idToken));
107
+ await Promise.resolve(import_store.storage.setItem(REFRESH_TOKEN_KEY, refreshToken));
108
+ await Promise.resolve(import_store.storage.setItem(ACCESS_TOKEN_KEY, accessToken));
109
+ }), [setTokensProp]);
110
+ const getTokens = (0, import_react.useMemo)(() => getTokensProp || (async () => ({
111
+ accessToken: (await Promise.resolve(import_store.storage.getItem(ACCESS_TOKEN_KEY))) || "",
112
+ idToken: (await Promise.resolve(import_store.storage.getItem(ID_TOKEN_KEY))) || "",
113
+ refreshToken: (await Promise.resolve(import_store.storage.getItem(REFRESH_TOKEN_KEY))) || ""
114
+ })), [getTokensProp]);
115
+ const keycloakRealmUrl = (0, import_react.useMemo)(() => `${keycloakConfig.baseUrl}/realms/${keycloakConfig.realm || "main"}`, [keycloakConfig]);
116
+ const keycloakSiweUrl = (0, import_react.useMemo)(() => `${keycloakRealmUrl}/siwe`, [keycloakRealmUrl]);
117
+ const config = (0, import_react.useMemo)(() => (0, import_wagmi.createConfig)((0, import_connectkit.getDefaultConfig)({
118
+ appName: "Example",
119
+ chains: [import_chains.mainnet, import_chains.polygon, import_chains.optimism, import_chains.arbitrum],
120
+ walletConnectProjectId: props.appName || "Example",
121
+ ...props,
122
+ ...wagmiProp
123
+ })), [props, wagmiProp]);
124
+ const siweConfig = (0, import_react.useMemo)(() => {
125
+ const siweConfig2 = {
126
+ getNonce: async () => (0, import_util.getNonce)(keycloakSiweUrl),
127
+ // Chain-agnostic: derives the signer family from the active connector's
128
+ // (possibly synthetic) chainId and builds the matching SIWx message, so EVM
129
+ // and Solana/Sui/Bitcoin all sign in through ConnectKit's one signIn().
130
+ createMessage({
131
+ nonce,
132
+ address,
133
+ chainId
134
+ }) {
135
+ return (0, import_connectkit.createWalletMessage)({
136
+ address,
137
+ chainId,
138
+ nonce
139
+ });
140
+ },
141
+ async verifyMessage({
142
+ message,
143
+ signature
144
+ }) {
145
+ const formData = new URLSearchParams({
146
+ client_id: keycloakConfig.clientId,
147
+ grant_type: "password",
148
+ password: (0, import_base64.encodeBase64)(message),
149
+ username: signature,
150
+ scope: ["openid", [...(Array.isArray(keycloakConfig.scope) ? keycloakConfig.scope : keycloakConfig.scope ? [keycloakConfig.scope] : [])]].join(" ")
151
+ });
152
+ const res = await fetch(`${keycloakRealmUrl}/protocol/openid-connect/token`, {
153
+ method: "POST",
154
+ credentials: "include",
155
+ headers: {
156
+ "Content-Type": "application/x-www-form-urlencoded"
157
+ },
158
+ body: formData
159
+ });
160
+ if (!res.ok) {
161
+ const error = new Error(`sign in failed with status ${res.status}`);
162
+ logger.warn(error);
163
+ onSignedInFailed?.(error);
164
+ return false;
165
+ }
166
+ const data = await res.json();
167
+ if (!data.access_token || !data.id_token || !data.refresh_token) {
168
+ const error = new Error(`missing tokens ${[!data.access_token && "access_token", !data.id_token && "id_token", !data.refresh_token && "refresh_token"].filter(Boolean).reduce((acc, curr, i, arr) => {
169
+ if (i === 0) return curr;
170
+ if (i === arr.length - 1) return `${acc} and ${curr}`;
171
+ return `${acc}, ${curr}`;
172
+ }, "")}`);
173
+ logger.warn(error);
174
+ onSignedInFailed?.(error);
175
+ return false;
176
+ }
177
+ await Promise.resolve(setTokens({
178
+ accessToken: data.access_token,
179
+ idToken: data.id_token,
180
+ refreshToken: data.refresh_token
181
+ }));
182
+ onSignedIn?.();
183
+ return true;
184
+ },
185
+ async getSession() {
186
+ if (!keycloak) return null;
187
+ const {
188
+ accessToken,
189
+ refreshToken,
190
+ idToken
191
+ } = await Promise.resolve(getTokens());
192
+ await keycloak.init({
193
+ checkLoginIframe: false,
194
+ flow: "implicit",
195
+ idToken,
196
+ onLoad: void 0,
197
+ refreshToken,
198
+ timeSkew: 0,
199
+ token: accessToken
200
+ });
201
+ if (keycloak.token !== accessToken || keycloak.refreshToken !== refreshToken || keycloak.idToken !== idToken) {
202
+ await Promise.resolve(setTokens({
203
+ accessToken: keycloak.token || accessToken,
204
+ idToken: keycloak.idToken || idToken,
205
+ refreshToken: keycloak.refreshToken || refreshToken
206
+ }));
207
+ }
208
+ try {
209
+ const res = await fetch(`${keycloakSiweUrl}/session`, {
210
+ headers: {
211
+ Authorization: `Bearer ${keycloak.token}`
212
+ }
213
+ });
214
+ if (res.ok) return res.json();
215
+ if (res.status === 401) return null;
216
+ throw new Error("Failed to get session");
217
+ } catch (err) {
218
+ if (err instanceof Error && err.message === "Failed to get session") {
219
+ return null;
220
+ }
221
+ throw err;
222
+ }
223
+ },
224
+ async signOut() {
225
+ if (!keycloak) return false;
226
+ keycloak.idToken = void 0;
227
+ keycloak.refreshToken = void 0;
228
+ keycloak.token = void 0;
229
+ await Promise.resolve(clearTokens());
230
+ return true;
231
+ }
232
+ };
233
+ return siweConfig2;
234
+ }, [keycloakRealmUrl, keycloakSiweUrl, keycloakConfig]);
235
+ if (siwe) {
236
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_wagmi.WagmiProvider, {
237
+ config,
238
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react_query.QueryClientProvider, {
239
+ client: queryClient,
240
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_connectkit.SIWEProvider, {
241
+ signOutOnAccountChange: false,
242
+ signOutOnDisconnect: false,
243
+ signOutOnNetworkChange: false,
244
+ ...siweConfig,
245
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_connectkit.ConnectKitProvider, {
246
+ debugMode: debug,
247
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_context.SiweKeycloakContext.Provider, {
248
+ value: {
249
+ keycloak
250
+ },
251
+ children
252
+ })
253
+ })
254
+ })
255
+ })
256
+ });
257
+ }
258
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_wagmi.WagmiProvider, {
259
+ config,
260
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react_query.QueryClientProvider, {
261
+ client: queryClient,
262
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_connectkit.ConnectKitProvider, {
263
+ debugMode: debug,
264
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_context.SiweKeycloakContext.Provider, {
265
+ value: {
266
+ keycloak
267
+ },
268
+ children
269
+ })
270
+ })
271
+ })
272
+ });
273
+ }
@@ -0,0 +1,309 @@
1
+ "use strict";
2
+
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all) __defProp(target, name, {
11
+ get: all[name],
12
+ enumerable: true
13
+ });
14
+ };
15
+ var __copyProps = (to, from, except, desc) => {
16
+ if (from && typeof from === "object" || typeof from === "function") {
17
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
18
+ get: () => from[key],
19
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
20
+ });
21
+ }
22
+ return to;
23
+ };
24
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
25
+ // If the importer is in node compatibility mode or this is not an ESM
26
+ // file that has been converted to a CommonJS file using a Babel-
27
+ // compatible transform (i.e. "__esModule" has not been set), then set
28
+ // "default" to the CommonJS "module.exports" for node compatibility.
29
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
30
+ value: mod,
31
+ enumerable: true
32
+ }) : target, mod));
33
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
34
+ value: true
35
+ }), mod);
36
+ var SiweKeycloakProvider_exports = {};
37
+ __export(SiweKeycloakProvider_exports, {
38
+ SiweKeycloakProvider: () => SiweKeycloakProvider
39
+ });
40
+ module.exports = __toCommonJS(SiweKeycloakProvider_exports);
41
+ var import_jsx_runtime = require("react/jsx-runtime");
42
+ var import_keycloak_js = __toESM(require("@multiplatform.one/keycloak-js"));
43
+ var import_react_query = require("@tanstack/react-query");
44
+ var import_connectkit = require("@multiplatform.one/web3/connectkit");
45
+ var import_react = require("react");
46
+ var import_wagmi = require("wagmi");
47
+ var import_chains = require("wagmi/chains");
48
+ var import_store = require("@multiplatform.one/store");
49
+ var import_context = require("./hooks/context.native.js");
50
+ var import_base64 = require("./base64.native.js");
51
+ var import_util = require("./util.native.js");
52
+ function _instanceof(left, right) {
53
+ "@swc/helpers - instanceof";
54
+
55
+ if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
56
+ return !!right[Symbol.hasInstance](left);
57
+ } else {
58
+ return left instanceof right;
59
+ }
60
+ }
61
+ var queryClient = new import_react_query.QueryClient();
62
+ var logger = console;
63
+ var ACCESS_TOKEN_KEY = "KEYCLOAK_TOKEN";
64
+ var ID_TOKEN_KEY = "KEYCLOAK_ID_TOKEN";
65
+ var REFRESH_TOKEN_KEY = "KEYCLOAK_REFRESH_TOKEN";
66
+ function SiweKeycloakProvider(param) {
67
+ var {
68
+ children,
69
+ clearTokens: clearTokensProp,
70
+ debug,
71
+ getTokens: getTokensProp,
72
+ keycloak: keycloakProp,
73
+ siwe,
74
+ setTokens: setTokensProp,
75
+ wagmi: wagmiProp,
76
+ onSignedIn,
77
+ onSignedInFailed,
78
+ ...props
79
+ } = param;
80
+ var keycloakConfig = (0, import_react.useMemo)(function () {
81
+ return {
82
+ ...keycloakProp,
83
+ ...(typeof (keycloakProp === null || keycloakProp === void 0 ? void 0 : keycloakProp.baseUrl) !== "undefined" ? {
84
+ baseUrl: keycloakProp.baseUrl
85
+ } : {
86
+ baseUrl: "http://localhost:8080"
87
+ }),
88
+ ...(typeof (keycloakProp === null || keycloakProp === void 0 ? void 0 : keycloakProp.clientId) !== "undefined" ? {
89
+ clientId: keycloakProp.clientId
90
+ } : {
91
+ clientId: "app"
92
+ }),
93
+ ...(typeof (keycloakProp === null || keycloakProp === void 0 ? void 0 : keycloakProp.realm) !== "undefined" ? {
94
+ realm: keycloakProp.realm
95
+ } : {
96
+ realm: "main"
97
+ }),
98
+ ...(typeof (keycloakProp === null || keycloakProp === void 0 ? void 0 : keycloakProp.scope) !== "undefined" ? {
99
+ scope: keycloakProp.scope
100
+ } : {
101
+ scope: []
102
+ })
103
+ };
104
+ }, [keycloakProp]);
105
+ var keycloak = (0, import_react.useMemo)(function () {
106
+ return typeof window !== "undefined" ? new import_keycloak_js.default({
107
+ clientId: keycloakConfig.clientId,
108
+ realm: keycloakConfig.realm,
109
+ url: keycloakConfig.baseUrl
110
+ }) : void 0;
111
+ }, [keycloakConfig]);
112
+ var clearTokens = (0, import_react.useMemo)(function () {
113
+ return clearTokensProp || async function () {
114
+ await Promise.resolve(import_store.storage.removeItem(ID_TOKEN_KEY));
115
+ await Promise.resolve(import_store.storage.removeItem(REFRESH_TOKEN_KEY));
116
+ await Promise.resolve(import_store.storage.removeItem(ACCESS_TOKEN_KEY));
117
+ };
118
+ }, [clearTokensProp]);
119
+ var setTokens = (0, import_react.useMemo)(function () {
120
+ return setTokensProp || async function (param2) {
121
+ var {
122
+ accessToken,
123
+ refreshToken,
124
+ idToken
125
+ } = param2;
126
+ await Promise.resolve(import_store.storage.setItem(ID_TOKEN_KEY, idToken));
127
+ await Promise.resolve(import_store.storage.setItem(REFRESH_TOKEN_KEY, refreshToken));
128
+ await Promise.resolve(import_store.storage.setItem(ACCESS_TOKEN_KEY, accessToken));
129
+ };
130
+ }, [setTokensProp]);
131
+ var getTokens = (0, import_react.useMemo)(function () {
132
+ return getTokensProp || async function () {
133
+ return {
134
+ accessToken: (await Promise.resolve(import_store.storage.getItem(ACCESS_TOKEN_KEY))) || "",
135
+ idToken: (await Promise.resolve(import_store.storage.getItem(ID_TOKEN_KEY))) || "",
136
+ refreshToken: (await Promise.resolve(import_store.storage.getItem(REFRESH_TOKEN_KEY))) || ""
137
+ };
138
+ };
139
+ }, [getTokensProp]);
140
+ var keycloakRealmUrl = (0, import_react.useMemo)(function () {
141
+ return `${keycloakConfig.baseUrl}/realms/${keycloakConfig.realm || "main"}`;
142
+ }, [keycloakConfig]);
143
+ var keycloakSiweUrl = (0, import_react.useMemo)(function () {
144
+ return `${keycloakRealmUrl}/siwe`;
145
+ }, [keycloakRealmUrl]);
146
+ var config = (0, import_react.useMemo)(function () {
147
+ return (0, import_wagmi.createConfig)((0, import_connectkit.getDefaultConfig)({
148
+ appName: "Example",
149
+ chains: [import_chains.mainnet, import_chains.polygon, import_chains.optimism, import_chains.arbitrum],
150
+ walletConnectProjectId: props.appName || "Example",
151
+ ...props,
152
+ ...wagmiProp
153
+ }));
154
+ }, [props, wagmiProp]);
155
+ var siweConfig = (0, import_react.useMemo)(function () {
156
+ var siweConfig2 = {
157
+ getNonce: async function getNonce1() {
158
+ return (0, import_util.getNonce)(keycloakSiweUrl);
159
+ },
160
+ // Chain-agnostic: derives the signer family from the active connector's
161
+ // (possibly synthetic) chainId and builds the matching SIWx message, so EVM
162
+ // and Solana/Sui/Bitcoin all sign in through ConnectKit's one signIn().
163
+ createMessage(param2) {
164
+ var {
165
+ nonce,
166
+ address,
167
+ chainId
168
+ } = param2;
169
+ return (0, import_connectkit.createWalletMessage)({
170
+ address,
171
+ chainId,
172
+ nonce
173
+ });
174
+ },
175
+ async verifyMessage(param2) {
176
+ var {
177
+ message,
178
+ signature
179
+ } = param2;
180
+ var formData = new URLSearchParams({
181
+ client_id: keycloakConfig.clientId,
182
+ grant_type: "password",
183
+ password: (0, import_base64.encodeBase64)(message),
184
+ username: signature,
185
+ scope: ["openid", [...(Array.isArray(keycloakConfig.scope) ? keycloakConfig.scope : keycloakConfig.scope ? [keycloakConfig.scope] : [])]].join(" ")
186
+ });
187
+ var res = await fetch(`${keycloakRealmUrl}/protocol/openid-connect/token`, {
188
+ method: "POST",
189
+ credentials: "include",
190
+ headers: {
191
+ "Content-Type": "application/x-www-form-urlencoded"
192
+ },
193
+ body: formData
194
+ });
195
+ if (!res.ok) {
196
+ var error = new Error(`sign in failed with status ${res.status}`);
197
+ logger.warn(error);
198
+ onSignedInFailed === null || onSignedInFailed === void 0 ? void 0 : onSignedInFailed(error);
199
+ return false;
200
+ }
201
+ var data = await res.json();
202
+ if (!data.access_token || !data.id_token || !data.refresh_token) {
203
+ var error1 = new Error(`missing tokens ${[!data.access_token && "access_token", !data.id_token && "id_token", !data.refresh_token && "refresh_token"].filter(Boolean).reduce(function (acc, curr, i, arr) {
204
+ if (i === 0) return curr;
205
+ if (i === arr.length - 1) return `${acc} and ${curr}`;
206
+ return `${acc}, ${curr}`;
207
+ }, "")}`);
208
+ logger.warn(error1);
209
+ onSignedInFailed === null || onSignedInFailed === void 0 ? void 0 : onSignedInFailed(error1);
210
+ return false;
211
+ }
212
+ await Promise.resolve(setTokens({
213
+ accessToken: data.access_token,
214
+ idToken: data.id_token,
215
+ refreshToken: data.refresh_token
216
+ }));
217
+ onSignedIn === null || onSignedIn === void 0 ? void 0 : onSignedIn();
218
+ return true;
219
+ },
220
+ async getSession() {
221
+ if (!keycloak) return null;
222
+ var {
223
+ accessToken,
224
+ refreshToken,
225
+ idToken
226
+ } = await Promise.resolve(getTokens());
227
+ await keycloak.init({
228
+ checkLoginIframe: false,
229
+ flow: "implicit",
230
+ idToken,
231
+ onLoad: void 0,
232
+ refreshToken,
233
+ timeSkew: 0,
234
+ token: accessToken
235
+ });
236
+ if (keycloak.token !== accessToken || keycloak.refreshToken !== refreshToken || keycloak.idToken !== idToken) {
237
+ await Promise.resolve(setTokens({
238
+ accessToken: keycloak.token || accessToken,
239
+ idToken: keycloak.idToken || idToken,
240
+ refreshToken: keycloak.refreshToken || refreshToken
241
+ }));
242
+ }
243
+ try {
244
+ var res = await fetch(`${keycloakSiweUrl}/session`, {
245
+ headers: {
246
+ Authorization: `Bearer ${keycloak.token}`
247
+ }
248
+ });
249
+ if (res.ok) return res.json();
250
+ if (res.status === 401) return null;
251
+ throw new Error("Failed to get session");
252
+ } catch (err) {
253
+ if (_instanceof(err, Error) && err.message === "Failed to get session") {
254
+ return null;
255
+ }
256
+ throw err;
257
+ }
258
+ },
259
+ async signOut() {
260
+ if (!keycloak) return false;
261
+ keycloak.idToken = void 0;
262
+ keycloak.refreshToken = void 0;
263
+ keycloak.token = void 0;
264
+ await Promise.resolve(clearTokens());
265
+ return true;
266
+ }
267
+ };
268
+ return siweConfig2;
269
+ }, [keycloakRealmUrl, keycloakSiweUrl, keycloakConfig]);
270
+ if (siwe) {
271
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_wagmi.WagmiProvider, {
272
+ config,
273
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react_query.QueryClientProvider, {
274
+ client: queryClient,
275
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_connectkit.SIWEProvider, {
276
+ signOutOnAccountChange: false,
277
+ signOutOnDisconnect: false,
278
+ signOutOnNetworkChange: false,
279
+ ...siweConfig,
280
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_connectkit.ConnectKitProvider, {
281
+ debugMode: debug,
282
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_context.SiweKeycloakContext.Provider, {
283
+ value: {
284
+ keycloak
285
+ },
286
+ children
287
+ })
288
+ })
289
+ })
290
+ })
291
+ });
292
+ }
293
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_wagmi.WagmiProvider, {
294
+ config,
295
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react_query.QueryClientProvider, {
296
+ client: queryClient,
297
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_connectkit.ConnectKitProvider, {
298
+ debugMode: debug,
299
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_context.SiweKeycloakContext.Provider, {
300
+ value: {
301
+ keycloak
302
+ },
303
+ children
304
+ })
305
+ })
306
+ })
307
+ });
308
+ }
309
+ //# sourceMappingURL=SiweKeycloakProvider.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["__toCommonJS","mod","__copyProps","__defProp","value","SiweKeycloakProvider_exports","__export","SiweKeycloakProvider","module","exports","import_jsx_runtime","require","import_keycloak_js","__toESM","import_react_query","import_connectkit","import_react","import_wagmi","import_chains","import_store","import_context","import_base64","import_util","_instanceof","left","right","Symbol","hasInstance","queryClient","QueryClient","logger","console","ACCESS_TOKEN_KEY","ID_TOKEN_KEY","REFRESH_TOKEN_KEY","param","children","clearTokens","clearTokensProp","debug","getTokens","getTokensProp","keycloak","keycloakProp","siwe","setTokens","setTokensProp","wagmi","wagmiProp","onSignedIn","onSignedInFailed","props","keycloakConfig","useMemo","baseUrl","clientId","realm","scope","window","default","url","Promise","resolve","storage","removeItem","param2","accessToken","refreshToken","idToken","setItem","getItem","keycloakRealmUrl","keycloakSiweUrl","config","createConfig","getDefaultConfig","appName","chains","mainnet","polygon","optimism","arbitrum","walletConnectProjectId","siweConfig","siweConfig2","getNonce","getNonce1","createMessage","nonce","address","chainId","createWalletMessage","verifyMessage","message","signature","formData","URLSearchParams","client_id","grant_type","password","encodeBase64","username","Array","isArray","join","res","fetch","method","credentials","headers","body","ok","error","Error","status","warn","data","json","access_token","id_token","refresh_token","error1","filter","Boolean","reduce","acc","curr","i","arr","length","getSession","init","checkLoginIframe","flow","onLoad","timeSkew","token","Authorization"],"sources":["../../src/SiweKeycloakProvider.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,51 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all) __defProp(target, name, {
7
+ get: all[name],
8
+ enumerable: true
9
+ });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
14
+ get: () => from[key],
15
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
+ });
17
+ }
18
+ return to;
19
+ };
20
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
21
+ value: true
22
+ }), mod);
23
+ var base64_exports = {};
24
+ __export(base64_exports, {
25
+ encodeBase64: () => encodeBase64
26
+ });
27
+ module.exports = __toCommonJS(base64_exports);
28
+ const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
29
+ function encodeBytes(bytes) {
30
+ let output = "";
31
+ for (let i = 0; i < bytes.length; i += 3) {
32
+ const a = bytes[i] ?? 0;
33
+ const b = bytes[i + 1] ?? 0;
34
+ const c = bytes[i + 2] ?? 0;
35
+ const triple = a << 16 | b << 8 | c;
36
+ output += alphabet[triple >> 18 & 63];
37
+ output += alphabet[triple >> 12 & 63];
38
+ output += i + 1 < bytes.length ? alphabet[triple >> 6 & 63] : "=";
39
+ output += i + 2 < bytes.length ? alphabet[triple & 63] : "=";
40
+ }
41
+ return output;
42
+ }
43
+ function encodeBase64(input) {
44
+ if (typeof globalThis.btoa === "function") {
45
+ return globalThis.btoa(input);
46
+ }
47
+ if (typeof Buffer !== "undefined") {
48
+ return Buffer.from(input, "utf-8").toString("base64");
49
+ }
50
+ return encodeBytes(new TextEncoder().encode(input));
51
+ }