@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
@@ -0,0 +1,270 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import Keycloak from "@multiplatform.one/keycloak-js";
3
+ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
4
+ import { ConnectKitProvider, SIWEProvider, createWalletMessage, getDefaultConfig } from "@multiplatform.one/web3/connectkit";
5
+ import { useMemo } from "react";
6
+ import { WagmiProvider, createConfig } from "wagmi";
7
+ import { arbitrum, mainnet, optimism, polygon } from "wagmi/chains";
8
+ import { storage } from "@multiplatform.one/store";
9
+ import { SiweKeycloakContext } from "./hooks/context.native.js";
10
+ import { encodeBase64 } from "./base64.native.js";
11
+ import { getNonce } from "./util.native.js";
12
+ function _instanceof(left, right) {
13
+ "@swc/helpers - instanceof";
14
+
15
+ if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
16
+ return !!right[Symbol.hasInstance](left);
17
+ } else {
18
+ return left instanceof right;
19
+ }
20
+ }
21
+ var queryClient = new QueryClient();
22
+ var logger = console;
23
+ var ACCESS_TOKEN_KEY = "KEYCLOAK_TOKEN";
24
+ var ID_TOKEN_KEY = "KEYCLOAK_ID_TOKEN";
25
+ var REFRESH_TOKEN_KEY = "KEYCLOAK_REFRESH_TOKEN";
26
+ function SiweKeycloakProvider(param) {
27
+ var {
28
+ children,
29
+ clearTokens: clearTokensProp,
30
+ debug,
31
+ getTokens: getTokensProp,
32
+ keycloak: keycloakProp,
33
+ siwe,
34
+ setTokens: setTokensProp,
35
+ wagmi: wagmiProp,
36
+ onSignedIn,
37
+ onSignedInFailed,
38
+ ...props
39
+ } = param;
40
+ var keycloakConfig = useMemo(function () {
41
+ return {
42
+ ...keycloakProp,
43
+ ...(typeof (keycloakProp === null || keycloakProp === void 0 ? void 0 : keycloakProp.baseUrl) !== "undefined" ? {
44
+ baseUrl: keycloakProp.baseUrl
45
+ } : {
46
+ baseUrl: "http://localhost:8080"
47
+ }),
48
+ ...(typeof (keycloakProp === null || keycloakProp === void 0 ? void 0 : keycloakProp.clientId) !== "undefined" ? {
49
+ clientId: keycloakProp.clientId
50
+ } : {
51
+ clientId: "app"
52
+ }),
53
+ ...(typeof (keycloakProp === null || keycloakProp === void 0 ? void 0 : keycloakProp.realm) !== "undefined" ? {
54
+ realm: keycloakProp.realm
55
+ } : {
56
+ realm: "main"
57
+ }),
58
+ ...(typeof (keycloakProp === null || keycloakProp === void 0 ? void 0 : keycloakProp.scope) !== "undefined" ? {
59
+ scope: keycloakProp.scope
60
+ } : {
61
+ scope: []
62
+ })
63
+ };
64
+ }, [keycloakProp]);
65
+ var keycloak = useMemo(function () {
66
+ return typeof window !== "undefined" ? new Keycloak({
67
+ clientId: keycloakConfig.clientId,
68
+ realm: keycloakConfig.realm,
69
+ url: keycloakConfig.baseUrl
70
+ }) : void 0;
71
+ }, [keycloakConfig]);
72
+ var clearTokens = useMemo(function () {
73
+ return clearTokensProp || async function () {
74
+ await Promise.resolve(storage.removeItem(ID_TOKEN_KEY));
75
+ await Promise.resolve(storage.removeItem(REFRESH_TOKEN_KEY));
76
+ await Promise.resolve(storage.removeItem(ACCESS_TOKEN_KEY));
77
+ };
78
+ }, [clearTokensProp]);
79
+ var setTokens = useMemo(function () {
80
+ return setTokensProp || async function (param2) {
81
+ var {
82
+ accessToken,
83
+ refreshToken,
84
+ idToken
85
+ } = param2;
86
+ await Promise.resolve(storage.setItem(ID_TOKEN_KEY, idToken));
87
+ await Promise.resolve(storage.setItem(REFRESH_TOKEN_KEY, refreshToken));
88
+ await Promise.resolve(storage.setItem(ACCESS_TOKEN_KEY, accessToken));
89
+ };
90
+ }, [setTokensProp]);
91
+ var getTokens = useMemo(function () {
92
+ return getTokensProp || async function () {
93
+ return {
94
+ accessToken: (await Promise.resolve(storage.getItem(ACCESS_TOKEN_KEY))) || "",
95
+ idToken: (await Promise.resolve(storage.getItem(ID_TOKEN_KEY))) || "",
96
+ refreshToken: (await Promise.resolve(storage.getItem(REFRESH_TOKEN_KEY))) || ""
97
+ };
98
+ };
99
+ }, [getTokensProp]);
100
+ var keycloakRealmUrl = useMemo(function () {
101
+ return `${keycloakConfig.baseUrl}/realms/${keycloakConfig.realm || "main"}`;
102
+ }, [keycloakConfig]);
103
+ var keycloakSiweUrl = useMemo(function () {
104
+ return `${keycloakRealmUrl}/siwe`;
105
+ }, [keycloakRealmUrl]);
106
+ var config = useMemo(function () {
107
+ return createConfig(getDefaultConfig({
108
+ appName: "Example",
109
+ chains: [mainnet, polygon, optimism, arbitrum],
110
+ walletConnectProjectId: props.appName || "Example",
111
+ ...props,
112
+ ...wagmiProp
113
+ }));
114
+ }, [props, wagmiProp]);
115
+ var siweConfig = useMemo(function () {
116
+ var siweConfig2 = {
117
+ getNonce: async function getNonce1() {
118
+ return getNonce(keycloakSiweUrl);
119
+ },
120
+ // Chain-agnostic: derives the signer family from the active connector's
121
+ // (possibly synthetic) chainId and builds the matching SIWx message, so EVM
122
+ // and Solana/Sui/Bitcoin all sign in through ConnectKit's one signIn().
123
+ createMessage(param2) {
124
+ var {
125
+ nonce,
126
+ address,
127
+ chainId
128
+ } = param2;
129
+ return createWalletMessage({
130
+ address,
131
+ chainId,
132
+ nonce
133
+ });
134
+ },
135
+ async verifyMessage(param2) {
136
+ var {
137
+ message,
138
+ signature
139
+ } = param2;
140
+ var formData = new URLSearchParams({
141
+ client_id: keycloakConfig.clientId,
142
+ grant_type: "password",
143
+ password: encodeBase64(message),
144
+ username: signature,
145
+ scope: ["openid", [...(Array.isArray(keycloakConfig.scope) ? keycloakConfig.scope : keycloakConfig.scope ? [keycloakConfig.scope] : [])]].join(" ")
146
+ });
147
+ var res = await fetch(`${keycloakRealmUrl}/protocol/openid-connect/token`, {
148
+ method: "POST",
149
+ credentials: "include",
150
+ headers: {
151
+ "Content-Type": "application/x-www-form-urlencoded"
152
+ },
153
+ body: formData
154
+ });
155
+ if (!res.ok) {
156
+ var error = new Error(`sign in failed with status ${res.status}`);
157
+ logger.warn(error);
158
+ onSignedInFailed === null || onSignedInFailed === void 0 ? void 0 : onSignedInFailed(error);
159
+ return false;
160
+ }
161
+ var data = await res.json();
162
+ if (!data.access_token || !data.id_token || !data.refresh_token) {
163
+ 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) {
164
+ if (i === 0) return curr;
165
+ if (i === arr.length - 1) return `${acc} and ${curr}`;
166
+ return `${acc}, ${curr}`;
167
+ }, "")}`);
168
+ logger.warn(error1);
169
+ onSignedInFailed === null || onSignedInFailed === void 0 ? void 0 : onSignedInFailed(error1);
170
+ return false;
171
+ }
172
+ await Promise.resolve(setTokens({
173
+ accessToken: data.access_token,
174
+ idToken: data.id_token,
175
+ refreshToken: data.refresh_token
176
+ }));
177
+ onSignedIn === null || onSignedIn === void 0 ? void 0 : onSignedIn();
178
+ return true;
179
+ },
180
+ async getSession() {
181
+ if (!keycloak) return null;
182
+ var {
183
+ accessToken,
184
+ refreshToken,
185
+ idToken
186
+ } = await Promise.resolve(getTokens());
187
+ await keycloak.init({
188
+ checkLoginIframe: false,
189
+ flow: "implicit",
190
+ idToken,
191
+ onLoad: void 0,
192
+ refreshToken,
193
+ timeSkew: 0,
194
+ token: accessToken
195
+ });
196
+ if (keycloak.token !== accessToken || keycloak.refreshToken !== refreshToken || keycloak.idToken !== idToken) {
197
+ await Promise.resolve(setTokens({
198
+ accessToken: keycloak.token || accessToken,
199
+ idToken: keycloak.idToken || idToken,
200
+ refreshToken: keycloak.refreshToken || refreshToken
201
+ }));
202
+ }
203
+ try {
204
+ var res = await fetch(`${keycloakSiweUrl}/session`, {
205
+ headers: {
206
+ Authorization: `Bearer ${keycloak.token}`
207
+ }
208
+ });
209
+ if (res.ok) return res.json();
210
+ if (res.status === 401) return null;
211
+ throw new Error("Failed to get session");
212
+ } catch (err) {
213
+ if (_instanceof(err, Error) && err.message === "Failed to get session") {
214
+ return null;
215
+ }
216
+ throw err;
217
+ }
218
+ },
219
+ async signOut() {
220
+ if (!keycloak) return false;
221
+ keycloak.idToken = void 0;
222
+ keycloak.refreshToken = void 0;
223
+ keycloak.token = void 0;
224
+ await Promise.resolve(clearTokens());
225
+ return true;
226
+ }
227
+ };
228
+ return siweConfig2;
229
+ }, [keycloakRealmUrl, keycloakSiweUrl, keycloakConfig]);
230
+ if (siwe) {
231
+ return /* @__PURE__ */_jsx(WagmiProvider, {
232
+ config,
233
+ children: /* @__PURE__ */_jsx(QueryClientProvider, {
234
+ client: queryClient,
235
+ children: /* @__PURE__ */_jsx(SIWEProvider, {
236
+ signOutOnAccountChange: false,
237
+ signOutOnDisconnect: false,
238
+ signOutOnNetworkChange: false,
239
+ ...siweConfig,
240
+ children: /* @__PURE__ */_jsx(ConnectKitProvider, {
241
+ debugMode: debug,
242
+ children: /* @__PURE__ */_jsx(SiweKeycloakContext.Provider, {
243
+ value: {
244
+ keycloak
245
+ },
246
+ children
247
+ })
248
+ })
249
+ })
250
+ })
251
+ });
252
+ }
253
+ return /* @__PURE__ */_jsx(WagmiProvider, {
254
+ config,
255
+ children: /* @__PURE__ */_jsx(QueryClientProvider, {
256
+ client: queryClient,
257
+ children: /* @__PURE__ */_jsx(ConnectKitProvider, {
258
+ debugMode: debug,
259
+ children: /* @__PURE__ */_jsx(SiweKeycloakContext.Provider, {
260
+ value: {
261
+ keycloak
262
+ },
263
+ children
264
+ })
265
+ })
266
+ })
267
+ });
268
+ }
269
+ export { SiweKeycloakProvider };
270
+ //# sourceMappingURL=SiweKeycloakProvider.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["jsx","_jsx","Keycloak","QueryClient","QueryClientProvider","ConnectKitProvider","SIWEProvider","createWalletMessage","getDefaultConfig","useMemo","WagmiProvider","createConfig","arbitrum","mainnet","optimism","polygon","storage","SiweKeycloakContext","encodeBase64","getNonce","_instanceof","left","right","Symbol","hasInstance","queryClient","logger","console","ACCESS_TOKEN_KEY","ID_TOKEN_KEY","REFRESH_TOKEN_KEY","SiweKeycloakProvider","param","children","clearTokens","clearTokensProp","debug","getTokens","getTokensProp","keycloak","keycloakProp","siwe","setTokens","setTokensProp","wagmi","wagmiProp","onSignedIn","onSignedInFailed","props","keycloakConfig","baseUrl","clientId","realm","scope","window","url","Promise","resolve","removeItem","param2","accessToken","refreshToken","idToken","setItem","getItem","keycloakRealmUrl","keycloakSiweUrl","config","appName","chains","walletConnectProjectId","siweConfig","siweConfig2","getNonce1","createMessage","nonce","address","chainId","verifyMessage","message","signature","formData","URLSearchParams","client_id","grant_type","password","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","err","signOut","client","signOutOnAccountChange","signOutOnDisconnect","signOutOnNetworkChange","debugMode","Provider","value"],"sources":["SiweKeycloakProvider.native.js"],"sourcesContent":["import { jsx as _jsx } from \"react/jsx-runtime\";\nimport Keycloak from \"@multiplatform.one/keycloak-js\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { ConnectKitProvider, SIWEProvider, createWalletMessage, getDefaultConfig } from \"@multiplatform.one/web3/connectkit\";\nimport { useMemo } from \"react\";\nimport { WagmiProvider, createConfig } from \"wagmi\";\nimport { arbitrum, mainnet, optimism, polygon } from \"wagmi/chains\";\nimport { storage } from \"@multiplatform.one/store\";\nimport { SiweKeycloakContext } from \"./hooks/context\";\nimport { encodeBase64 } from \"./base64\";\nimport { getNonce } from \"./util\";\nfunction _instanceof(left, right) {\n \"@swc/helpers - instanceof\";\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n}\nvar queryClient = new QueryClient();\nvar logger = console;\nvar ACCESS_TOKEN_KEY = \"KEYCLOAK_TOKEN\";\nvar ID_TOKEN_KEY = \"KEYCLOAK_ID_TOKEN\";\nvar REFRESH_TOKEN_KEY = \"KEYCLOAK_REFRESH_TOKEN\";\nfunction SiweKeycloakProvider(param) {\n var { children, clearTokens: clearTokensProp, debug, getTokens: getTokensProp, keycloak: keycloakProp, siwe, setTokens: setTokensProp, wagmi: wagmiProp, onSignedIn, onSignedInFailed, ...props } = param;\n var keycloakConfig = useMemo(function() {\n return {\n ...keycloakProp,\n ...typeof (keycloakProp === null || keycloakProp === void 0 ? void 0 : keycloakProp.baseUrl) !== \"undefined\" ? {\n baseUrl: keycloakProp.baseUrl\n } : {\n baseUrl: \"http://localhost:8080\"\n },\n ...typeof (keycloakProp === null || keycloakProp === void 0 ? void 0 : keycloakProp.clientId) !== \"undefined\" ? {\n clientId: keycloakProp.clientId\n } : {\n clientId: \"app\"\n },\n ...typeof (keycloakProp === null || keycloakProp === void 0 ? void 0 : keycloakProp.realm) !== \"undefined\" ? {\n realm: keycloakProp.realm\n } : {\n realm: \"main\"\n },\n ...typeof (keycloakProp === null || keycloakProp === void 0 ? void 0 : keycloakProp.scope) !== \"undefined\" ? {\n scope: keycloakProp.scope\n } : {\n scope: []\n }\n };\n }, [\n keycloakProp\n ]);\n var keycloak = useMemo(function() {\n return typeof window !== \"undefined\" ? new Keycloak({\n clientId: keycloakConfig.clientId,\n realm: keycloakConfig.realm,\n url: keycloakConfig.baseUrl\n }) : void 0;\n }, [\n keycloakConfig\n ]);\n var clearTokens = useMemo(function() {\n return clearTokensProp || async function() {\n await Promise.resolve(storage.removeItem(ID_TOKEN_KEY));\n await Promise.resolve(storage.removeItem(REFRESH_TOKEN_KEY));\n await Promise.resolve(storage.removeItem(ACCESS_TOKEN_KEY));\n };\n }, [\n clearTokensProp\n ]);\n var setTokens = useMemo(function() {\n return setTokensProp || async function(param2) {\n var { accessToken, refreshToken, idToken } = param2;\n await Promise.resolve(storage.setItem(ID_TOKEN_KEY, idToken));\n await Promise.resolve(storage.setItem(REFRESH_TOKEN_KEY, refreshToken));\n await Promise.resolve(storage.setItem(ACCESS_TOKEN_KEY, accessToken));\n };\n }, [\n setTokensProp\n ]);\n var getTokens = useMemo(function() {\n return getTokensProp || async function() {\n return {\n accessToken: await Promise.resolve(storage.getItem(ACCESS_TOKEN_KEY)) || \"\",\n idToken: await Promise.resolve(storage.getItem(ID_TOKEN_KEY)) || \"\",\n refreshToken: await Promise.resolve(storage.getItem(REFRESH_TOKEN_KEY)) || \"\"\n };\n };\n }, [\n getTokensProp\n ]);\n var keycloakRealmUrl = useMemo(function() {\n return `${keycloakConfig.baseUrl}/realms/${keycloakConfig.realm || \"main\"}`;\n }, [\n keycloakConfig\n ]);\n var keycloakSiweUrl = useMemo(function() {\n return `${keycloakRealmUrl}/siwe`;\n }, [\n keycloakRealmUrl\n ]);\n var config = useMemo(function() {\n return createConfig(getDefaultConfig({\n appName: \"Example\",\n chains: [\n mainnet,\n polygon,\n optimism,\n arbitrum\n ],\n walletConnectProjectId: props.appName || \"Example\",\n ...props,\n ...wagmiProp\n }));\n }, [\n props,\n wagmiProp\n ]);\n var siweConfig = useMemo(function() {\n var siweConfig2 = {\n getNonce: async function getNonce1() {\n return getNonce(keycloakSiweUrl);\n },\n // Chain-agnostic: derives the signer family from the active connector's\n // (possibly synthetic) chainId and builds the matching SIWx message, so EVM\n // and Solana/Sui/Bitcoin all sign in through ConnectKit's one signIn().\n createMessage(param2) {\n var { nonce, address, chainId } = param2;\n return createWalletMessage({\n address,\n chainId,\n nonce\n });\n },\n async verifyMessage(param2) {\n var { message, signature } = param2;\n var formData = new URLSearchParams({\n client_id: keycloakConfig.clientId,\n grant_type: \"password\",\n password: encodeBase64(message),\n username: signature,\n scope: [\n \"openid\",\n [\n ...Array.isArray(keycloakConfig.scope) ? keycloakConfig.scope : keycloakConfig.scope ? [\n keycloakConfig.scope\n ] : []\n ]\n ].join(\" \")\n });\n var res = await fetch(`${keycloakRealmUrl}/protocol/openid-connect/token`, {\n method: \"POST\",\n credentials: \"include\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\"\n },\n body: formData\n });\n if (!res.ok) {\n var error = new Error(`sign in failed with status ${res.status}`);\n logger.warn(error);\n onSignedInFailed === null || onSignedInFailed === void 0 ? void 0 : onSignedInFailed(error);\n return false;\n }\n var data = await res.json();\n if (!data.access_token || !data.id_token || !data.refresh_token) {\n var error1 = new Error(`missing tokens ${[\n !data.access_token && \"access_token\",\n !data.id_token && \"id_token\",\n !data.refresh_token && \"refresh_token\"\n ].filter(Boolean).reduce(function(acc, curr, i, arr) {\n if (i === 0) return curr;\n if (i === arr.length - 1) return `${acc} and ${curr}`;\n return `${acc}, ${curr}`;\n }, \"\")}`);\n logger.warn(error1);\n onSignedInFailed === null || onSignedInFailed === void 0 ? void 0 : onSignedInFailed(error1);\n return false;\n }\n await Promise.resolve(setTokens({\n accessToken: data.access_token,\n idToken: data.id_token,\n refreshToken: data.refresh_token\n }));\n onSignedIn === null || onSignedIn === void 0 ? void 0 : onSignedIn();\n return true;\n },\n async getSession() {\n if (!keycloak) return null;\n var { accessToken, refreshToken, idToken } = await Promise.resolve(getTokens());\n await keycloak.init({\n checkLoginIframe: false,\n flow: \"implicit\",\n idToken,\n onLoad: void 0,\n refreshToken,\n timeSkew: 0,\n token: accessToken\n });\n if (keycloak.token !== accessToken || keycloak.refreshToken !== refreshToken || keycloak.idToken !== idToken) {\n await Promise.resolve(setTokens({\n accessToken: keycloak.token || accessToken,\n idToken: keycloak.idToken || idToken,\n refreshToken: keycloak.refreshToken || refreshToken\n }));\n }\n try {\n var res = await fetch(`${keycloakSiweUrl}/session`, {\n headers: {\n Authorization: `Bearer ${keycloak.token}`\n }\n });\n if (res.ok) return res.json();\n if (res.status === 401) return null;\n throw new Error(\"Failed to get session\");\n } catch (err) {\n if (_instanceof(err, Error) && err.message === \"Failed to get session\") {\n return null;\n }\n throw err;\n }\n },\n async signOut() {\n if (!keycloak) return false;\n keycloak.idToken = void 0;\n keycloak.refreshToken = void 0;\n keycloak.token = void 0;\n await Promise.resolve(clearTokens());\n return true;\n }\n };\n return siweConfig2;\n }, [\n keycloakRealmUrl,\n keycloakSiweUrl,\n keycloakConfig\n ]);\n if (siwe) {\n return /* @__PURE__ */ _jsx(WagmiProvider, {\n config,\n children: /* @__PURE__ */ _jsx(QueryClientProvider, {\n client: queryClient,\n children: /* @__PURE__ */ _jsx(SIWEProvider, {\n signOutOnAccountChange: false,\n signOutOnDisconnect: false,\n signOutOnNetworkChange: false,\n ...siweConfig,\n children: /* @__PURE__ */ _jsx(ConnectKitProvider, {\n debugMode: debug,\n children: /* @__PURE__ */ _jsx(SiweKeycloakContext.Provider, {\n value: {\n keycloak\n },\n children\n })\n })\n })\n })\n });\n }\n return /* @__PURE__ */ _jsx(WagmiProvider, {\n config,\n children: /* @__PURE__ */ _jsx(QueryClientProvider, {\n client: queryClient,\n children: /* @__PURE__ */ _jsx(ConnectKitProvider, {\n debugMode: debug,\n children: /* @__PURE__ */ _jsx(SiweKeycloakContext.Provider, {\n value: {\n keycloak\n },\n children\n })\n })\n })\n });\n}\nexport {\n SiweKeycloakProvider\n};\n//# sourceMappingURL=SiweKeycloakProvider.js.map\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,26 @@
1
+ const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
2
+ function encodeBytes(bytes) {
3
+ let output = "";
4
+ for (let i = 0; i < bytes.length; i += 3) {
5
+ const a = bytes[i] ?? 0;
6
+ const b = bytes[i + 1] ?? 0;
7
+ const c = bytes[i + 2] ?? 0;
8
+ const triple = a << 16 | b << 8 | c;
9
+ output += alphabet[triple >> 18 & 63];
10
+ output += alphabet[triple >> 12 & 63];
11
+ output += i + 1 < bytes.length ? alphabet[triple >> 6 & 63] : "=";
12
+ output += i + 2 < bytes.length ? alphabet[triple & 63] : "=";
13
+ }
14
+ return output;
15
+ }
16
+ function encodeBase64(input) {
17
+ if (typeof globalThis.btoa === "function") {
18
+ return globalThis.btoa(input);
19
+ }
20
+ if (typeof Buffer !== "undefined") {
21
+ return Buffer.from(input, "utf-8").toString("base64");
22
+ }
23
+ return encodeBytes(new TextEncoder().encode(input));
24
+ }
25
+ export { encodeBase64 };
26
+ //# sourceMappingURL=base64.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["alphabet","encodeBytes","bytes","output","i","length","a","b","c","triple","encodeBase64","input","globalThis","btoa","Buffer","from","toString","TextEncoder","encode"],"sources":["../../src/base64.ts"],"sourcesContent":[null],"mappings":"AAAA,MAAMA,QAAA,GAAW;AAEjB,SAASC,YAAYC,KAAA,EAA2B;EAC9C,IAAIC,MAAA,GAAS;EACb,SAASC,CAAA,GAAI,GAAGA,CAAA,GAAIF,KAAA,CAAMG,MAAA,EAAQD,CAAA,IAAK,GAAG;IACxC,MAAME,CAAA,GAAIJ,KAAA,CAAME,CAAC,KAAK;IACtB,MAAMG,CAAA,GAAIL,KAAA,CAAME,CAAA,GAAI,CAAC,KAAK;IAC1B,MAAMI,CAAA,GAAIN,KAAA,CAAME,CAAA,GAAI,CAAC,KAAK;IAC1B,MAAMK,MAAA,GAAUH,CAAA,IAAK,KAAOC,CAAA,IAAK,IAAKC,CAAA;IACtCL,MAAA,IAAUH,QAAA,CAAUS,MAAA,IAAU,KAAM,EAAI;IACxCN,MAAA,IAAUH,QAAA,CAAUS,MAAA,IAAU,KAAM,EAAI;IACxCN,MAAA,IAAUC,CAAA,GAAI,IAAIF,KAAA,CAAMG,MAAA,GAASL,QAAA,CAAUS,MAAA,IAAU,IAAK,EAAI,IAAI;IAClEN,MAAA,IAAUC,CAAA,GAAI,IAAIF,KAAA,CAAMG,MAAA,GAASL,QAAA,CAASS,MAAA,GAAS,EAAI,IAAI;EAC7D;EACA,OAAON,MAAA;AACT;AAEO,SAASO,aAAaC,KAAA,EAAuB;EAClD,IAAI,OAAOC,UAAA,CAAWC,IAAA,KAAS,YAAY;IACzC,OAAOD,UAAA,CAAWC,IAAA,CAAKF,KAAK;EAC9B;EACA,IAAI,OAAOG,MAAA,KAAW,aAAa;IACjC,OAAOA,MAAA,CAAOC,IAAA,CAAKJ,KAAA,EAAO,OAAO,EAAEK,QAAA,CAAS,QAAQ;EACtD;EACA,OAAOf,WAAA,CAAY,IAAIgB,WAAA,CAAY,EAAEC,MAAA,CAAOP,KAAK,CAAC;AACpD","ignoreList":[]}
@@ -0,0 +1,27 @@
1
+ var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
2
+ function encodeBytes(bytes) {
3
+ var output = "";
4
+ for (var i = 0; i < bytes.length; i += 3) {
5
+ var _bytes_i, _bytes_, _bytes_1;
6
+ var a = (_bytes_i = bytes[i]) !== null && _bytes_i !== void 0 ? _bytes_i : 0;
7
+ var b = (_bytes_ = bytes[i + 1]) !== null && _bytes_ !== void 0 ? _bytes_ : 0;
8
+ var c = (_bytes_1 = bytes[i + 2]) !== null && _bytes_1 !== void 0 ? _bytes_1 : 0;
9
+ var triple = a << 16 | b << 8 | c;
10
+ output += alphabet[triple >> 18 & 63];
11
+ output += alphabet[triple >> 12 & 63];
12
+ output += i + 1 < bytes.length ? alphabet[triple >> 6 & 63] : "=";
13
+ output += i + 2 < bytes.length ? alphabet[triple & 63] : "=";
14
+ }
15
+ return output;
16
+ }
17
+ function encodeBase64(input) {
18
+ if (typeof globalThis.btoa === "function") {
19
+ return globalThis.btoa(input);
20
+ }
21
+ if (typeof Buffer !== "undefined") {
22
+ return Buffer.from(input, "utf-8").toString("base64");
23
+ }
24
+ return encodeBytes(new TextEncoder().encode(input));
25
+ }
26
+ export { encodeBase64 };
27
+ //# sourceMappingURL=base64.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["alphabet","encodeBytes","bytes","output","i","length","_bytes_i","_bytes_","_bytes_1","a","b","c","triple","encodeBase64","input","globalThis","btoa","Buffer","from","toString","TextEncoder","encode"],"sources":["base64.native.js"],"sourcesContent":["var alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nfunction encodeBytes(bytes) {\n var output = \"\";\n for (var i = 0; i < bytes.length; i += 3) {\n var _bytes_i, _bytes_, _bytes_1;\n var a = (_bytes_i = bytes[i]) !== null && _bytes_i !== void 0 ? _bytes_i : 0;\n var b = (_bytes_ = bytes[i + 1]) !== null && _bytes_ !== void 0 ? _bytes_ : 0;\n var c = (_bytes_1 = bytes[i + 2]) !== null && _bytes_1 !== void 0 ? _bytes_1 : 0;\n var triple = a << 16 | b << 8 | c;\n output += alphabet[triple >> 18 & 63];\n output += alphabet[triple >> 12 & 63];\n output += i + 1 < bytes.length ? alphabet[triple >> 6 & 63] : \"=\";\n output += i + 2 < bytes.length ? alphabet[triple & 63] : \"=\";\n }\n return output;\n}\nfunction encodeBase64(input) {\n if (typeof globalThis.btoa === \"function\") {\n return globalThis.btoa(input);\n }\n if (typeof Buffer !== \"undefined\") {\n return Buffer.from(input, \"utf-8\").toString(\"base64\");\n }\n return encodeBytes(new TextEncoder().encode(input));\n}\nexport {\n encodeBase64\n};\n//# sourceMappingURL=base64.js.map\n"],"mappings":"AAAA,IAAIA,QAAQ,GAAG,kEAAkE;AACjF,SAASC,WAAWA,CAACC,KAAK,EAAE;EAC1B,IAAIC,MAAM,GAAG,EAAE;EACf,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,KAAK,CAACG,MAAM,EAAED,CAAC,IAAI,CAAC,EAAE;IACxC,IAAIE,QAAQ,EAAEC,OAAO,EAAEC,QAAQ;IAC/B,IAAIC,CAAC,GAAG,CAACH,QAAQ,GAAGJ,KAAK,CAACE,CAAC,CAAC,MAAM,IAAI,IAAIE,QAAQ,KAAK,KAAK,CAAC,GAAGA,QAAQ,GAAG,CAAC;IAC5E,IAAII,CAAC,GAAG,CAACH,OAAO,GAAGL,KAAK,CAACE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,IAAIG,OAAO,KAAK,KAAK,CAAC,GAAGA,OAAO,GAAG,CAAC;IAC7E,IAAII,CAAC,GAAG,CAACH,QAAQ,GAAGN,KAAK,CAACE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,IAAII,QAAQ,KAAK,KAAK,CAAC,GAAGA,QAAQ,GAAG,CAAC;IAChF,IAAII,MAAM,GAAGH,CAAC,IAAI,EAAE,GAAGC,CAAC,IAAI,CAAC,GAAGC,CAAC;IACjCR,MAAM,IAAIH,QAAQ,CAACY,MAAM,IAAI,EAAE,GAAG,EAAE,CAAC;IACrCT,MAAM,IAAIH,QAAQ,CAACY,MAAM,IAAI,EAAE,GAAG,EAAE,CAAC;IACrCT,MAAM,IAAIC,CAAC,GAAG,CAAC,GAAGF,KAAK,CAACG,MAAM,GAAGL,QAAQ,CAACY,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG;IACjET,MAAM,IAAIC,CAAC,GAAG,CAAC,GAAGF,KAAK,CAACG,MAAM,GAAGL,QAAQ,CAACY,MAAM,GAAG,EAAE,CAAC,GAAG,GAAG;EAC9D;EACA,OAAOT,MAAM;AACf;AACA,SAASU,YAAYA,CAACC,KAAK,EAAE;EAC3B,IAAI,OAAOC,UAAU,CAACC,IAAI,KAAK,UAAU,EAAE;IACzC,OAAOD,UAAU,CAACC,IAAI,CAACF,KAAK,CAAC;EAC/B;EACA,IAAI,OAAOG,MAAM,KAAK,WAAW,EAAE;IACjC,OAAOA,MAAM,CAACC,IAAI,CAACJ,KAAK,EAAE,OAAO,CAAC,CAACK,QAAQ,CAAC,QAAQ,CAAC;EACvD;EACA,OAAOlB,WAAW,CAAC,IAAImB,WAAW,CAAC,CAAC,CAACC,MAAM,CAACP,KAAK,CAAC,CAAC;AACrD;AACA,SACED,YAAY","ignoreList":[]}
@@ -0,0 +1,58 @@
1
+ import { describe, expect, it, vi, afterEach } from "vitest";
2
+ import { encodeBase64 } from "./base64.mjs";
3
+ describe("encodeBase64", () => {
4
+ afterEach(() => {
5
+ vi.restoreAllMocks();
6
+ });
7
+ it("encodes an empty string", () => {
8
+ expect(encodeBase64("")).toBe("");
9
+ });
10
+ it("encodes a simple ASCII string", () => {
11
+ expect(encodeBase64("Hello")).toBe("SGVsbG8=");
12
+ });
13
+ it("encodes 'Hello, World!'", () => {
14
+ expect(encodeBase64("Hello, World!")).toBe("SGVsbG8sIFdvcmxkIQ==");
15
+ });
16
+ it("encodes a single character", () => {
17
+ expect(encodeBase64("A")).toBe("QQ==");
18
+ });
19
+ it("encodes two characters (padding = 1)", () => {
20
+ expect(encodeBase64("AB")).toBe("QUI=");
21
+ });
22
+ it("encodes three characters (no padding)", () => {
23
+ expect(encodeBase64("ABC")).toBe("QUJD");
24
+ });
25
+ it("encodes strings with special characters", () => {
26
+ expect(encodeBase64("foo:bar")).toBe("Zm9vOmJhcg==");
27
+ });
28
+ it("encodes strings with numbers", () => {
29
+ expect(encodeBase64("12345")).toBe("MTIzNDU=");
30
+ });
31
+ it("produces output matching btoa for ASCII input", () => {
32
+ const inputs = ["test", "a", "ab", "abc", "abcd", "Hello, World!", "base64 encoding test"];
33
+ for (const input of inputs) {
34
+ expect(encodeBase64(input)).toBe(btoa(input));
35
+ }
36
+ });
37
+ it("falls back to manual encoding when btoa is unavailable", () => {
38
+ const originalBtoa = globalThis.btoa;
39
+ vi.spyOn(globalThis, "btoa").mockImplementation(() => {
40
+ throw new Error("btoa not available");
41
+ });
42
+ Object.defineProperty(globalThis, "btoa", {
43
+ value: void 0,
44
+ configurable: true
45
+ });
46
+ try {
47
+ expect(encodeBase64("Hello")).toBe("SGVsbG8=");
48
+ expect(encodeBase64("ABC")).toBe("QUJD");
49
+ expect(encodeBase64("")).toBe("");
50
+ } finally {
51
+ Object.defineProperty(globalThis, "btoa", {
52
+ value: originalBtoa,
53
+ configurable: true
54
+ });
55
+ }
56
+ });
57
+ });
58
+ //# sourceMappingURL=base64.spec.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["describe","expect","it","vi","afterEach","encodeBase64","restoreAllMocks","toBe","inputs","input","btoa","originalBtoa","globalThis","spyOn","mockImplementation","Error","Object","defineProperty","value","configurable"],"sources":["../../src/base64.spec.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,QAAA,EAAUC,MAAA,EAAQC,EAAA,EAAIC,EAAA,EAAIC,SAAA,QAAiB;AACpD,SAASC,YAAA,QAAoB;AAE7BL,QAAA,CAAS,gBAAgB,MAAM;EAC7BI,SAAA,CAAU,MAAM;IACdD,EAAA,CAAGG,eAAA,CAAgB;EACrB,CAAC;EAEDJ,EAAA,CAAG,2BAA2B,MAAM;IAClCD,MAAA,CAAOI,YAAA,CAAa,EAAE,CAAC,EAAEE,IAAA,CAAK,EAAE;EAClC,CAAC;EAEDL,EAAA,CAAG,iCAAiC,MAAM;IACxCD,MAAA,CAAOI,YAAA,CAAa,OAAO,CAAC,EAAEE,IAAA,CAAK,UAAU;EAC/C,CAAC;EAEDL,EAAA,CAAG,2BAA2B,MAAM;IAClCD,MAAA,CAAOI,YAAA,CAAa,eAAe,CAAC,EAAEE,IAAA,CAAK,sBAAsB;EACnE,CAAC;EAEDL,EAAA,CAAG,8BAA8B,MAAM;IACrCD,MAAA,CAAOI,YAAA,CAAa,GAAG,CAAC,EAAEE,IAAA,CAAK,MAAM;EACvC,CAAC;EAEDL,EAAA,CAAG,wCAAwC,MAAM;IAC/CD,MAAA,CAAOI,YAAA,CAAa,IAAI,CAAC,EAAEE,IAAA,CAAK,MAAM;EACxC,CAAC;EAEDL,EAAA,CAAG,yCAAyC,MAAM;IAChDD,MAAA,CAAOI,YAAA,CAAa,KAAK,CAAC,EAAEE,IAAA,CAAK,MAAM;EACzC,CAAC;EAEDL,EAAA,CAAG,2CAA2C,MAAM;IAClDD,MAAA,CAAOI,YAAA,CAAa,SAAS,CAAC,EAAEE,IAAA,CAAK,cAAc;EACrD,CAAC;EAEDL,EAAA,CAAG,gCAAgC,MAAM;IACvCD,MAAA,CAAOI,YAAA,CAAa,OAAO,CAAC,EAAEE,IAAA,CAAK,UAAU;EAC/C,CAAC;EAEDL,EAAA,CAAG,iDAAiD,MAAM;IACxD,MAAMM,MAAA,GAAS,CAAC,QAAQ,KAAK,MAAM,OAAO,QAAQ,iBAAiB,sBAAsB;IACzF,WAAWC,KAAA,IAASD,MAAA,EAAQ;MAC1BP,MAAA,CAAOI,YAAA,CAAaI,KAAK,CAAC,EAAEF,IAAA,CAAKG,IAAA,CAAKD,KAAK,CAAC;IAC9C;EACF,CAAC;EAEDP,EAAA,CAAG,0DAA0D,MAAM;IACjE,MAAMS,YAAA,GAAeC,UAAA,CAAWF,IAAA;IAChCP,EAAA,CAAGU,KAAA,CAAMD,UAAA,EAAY,MAAM,EAAEE,kBAAA,CAAmB,MAAM;MACpD,MAAM,IAAIC,KAAA,CAAM,oBAAoB;IACtC,CAAC;IAGDC,MAAA,CAAOC,cAAA,CAAeL,UAAA,EAAY,QAAQ;MAAEM,KAAA,EAAO;MAAWC,YAAA,EAAc;IAAK,CAAC;IAElF,IAAI;MACFlB,MAAA,CAAOI,YAAA,CAAa,OAAO,CAAC,EAAEE,IAAA,CAAK,UAAU;MAC7CN,MAAA,CAAOI,YAAA,CAAa,KAAK,CAAC,EAAEE,IAAA,CAAK,MAAM;MACvCN,MAAA,CAAOI,YAAA,CAAa,EAAE,CAAC,EAAEE,IAAA,CAAK,EAAE;IAClC,UAAE;MACAS,MAAA,CAAOC,cAAA,CAAeL,UAAA,EAAY,QAAQ;QAAEM,KAAA,EAAOP,YAAA;QAAcQ,YAAA,EAAc;MAAK,CAAC;IACvF;EACF,CAAC;AACH,CAAC","ignoreList":[]}
@@ -0,0 +1,77 @@
1
+ import { describe, expect, it, vi, afterEach } from "vitest";
2
+ import { encodeBase64 } from "./base64.native.js";
3
+ describe("encodeBase64", function () {
4
+ afterEach(function () {
5
+ vi.restoreAllMocks();
6
+ });
7
+ it("encodes an empty string", function () {
8
+ expect(encodeBase64("")).toBe("");
9
+ });
10
+ it("encodes a simple ASCII string", function () {
11
+ expect(encodeBase64("Hello")).toBe("SGVsbG8=");
12
+ });
13
+ it("encodes 'Hello, World!'", function () {
14
+ expect(encodeBase64("Hello, World!")).toBe("SGVsbG8sIFdvcmxkIQ==");
15
+ });
16
+ it("encodes a single character", function () {
17
+ expect(encodeBase64("A")).toBe("QQ==");
18
+ });
19
+ it("encodes two characters (padding = 1)", function () {
20
+ expect(encodeBase64("AB")).toBe("QUI=");
21
+ });
22
+ it("encodes three characters (no padding)", function () {
23
+ expect(encodeBase64("ABC")).toBe("QUJD");
24
+ });
25
+ it("encodes strings with special characters", function () {
26
+ expect(encodeBase64("foo:bar")).toBe("Zm9vOmJhcg==");
27
+ });
28
+ it("encodes strings with numbers", function () {
29
+ expect(encodeBase64("12345")).toBe("MTIzNDU=");
30
+ });
31
+ it("produces output matching btoa for ASCII input", function () {
32
+ var inputs = ["test", "a", "ab", "abc", "abcd", "Hello, World!", "base64 encoding test"];
33
+ var _iteratorNormalCompletion = true,
34
+ _didIteratorError = false,
35
+ _iteratorError = void 0;
36
+ try {
37
+ for (var _iterator = inputs[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
38
+ var input = _step.value;
39
+ expect(encodeBase64(input)).toBe(btoa(input));
40
+ }
41
+ } catch (err) {
42
+ _didIteratorError = true;
43
+ _iteratorError = err;
44
+ } finally {
45
+ try {
46
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
47
+ _iterator.return();
48
+ }
49
+ } finally {
50
+ if (_didIteratorError) {
51
+ throw _iteratorError;
52
+ }
53
+ }
54
+ }
55
+ });
56
+ it("falls back to manual encoding when btoa is unavailable", function () {
57
+ var originalBtoa = globalThis.btoa;
58
+ vi.spyOn(globalThis, "btoa").mockImplementation(function () {
59
+ throw new Error("btoa not available");
60
+ });
61
+ Object.defineProperty(globalThis, "btoa", {
62
+ value: void 0,
63
+ configurable: true
64
+ });
65
+ try {
66
+ expect(encodeBase64("Hello")).toBe("SGVsbG8=");
67
+ expect(encodeBase64("ABC")).toBe("QUJD");
68
+ expect(encodeBase64("")).toBe("");
69
+ } finally {
70
+ Object.defineProperty(globalThis, "btoa", {
71
+ value: originalBtoa,
72
+ configurable: true
73
+ });
74
+ }
75
+ });
76
+ });
77
+ //# sourceMappingURL=base64.spec.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["describe","expect","it","vi","afterEach","encodeBase64","restoreAllMocks","toBe","inputs","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","Symbol","iterator","_step","next","done","input","value","btoa","err","return","originalBtoa","globalThis","spyOn","mockImplementation","Error","Object","defineProperty","configurable"],"sources":["base64.spec.native.js"],"sourcesContent":["import { describe, expect, it, vi, afterEach } from \"vitest\";\nimport { encodeBase64 } from \"./base64\";\ndescribe(\"encodeBase64\", function() {\n afterEach(function() {\n vi.restoreAllMocks();\n });\n it(\"encodes an empty string\", function() {\n expect(encodeBase64(\"\")).toBe(\"\");\n });\n it(\"encodes a simple ASCII string\", function() {\n expect(encodeBase64(\"Hello\")).toBe(\"SGVsbG8=\");\n });\n it(\"encodes 'Hello, World!'\", function() {\n expect(encodeBase64(\"Hello, World!\")).toBe(\"SGVsbG8sIFdvcmxkIQ==\");\n });\n it(\"encodes a single character\", function() {\n expect(encodeBase64(\"A\")).toBe(\"QQ==\");\n });\n it(\"encodes two characters (padding = 1)\", function() {\n expect(encodeBase64(\"AB\")).toBe(\"QUI=\");\n });\n it(\"encodes three characters (no padding)\", function() {\n expect(encodeBase64(\"ABC\")).toBe(\"QUJD\");\n });\n it(\"encodes strings with special characters\", function() {\n expect(encodeBase64(\"foo:bar\")).toBe(\"Zm9vOmJhcg==\");\n });\n it(\"encodes strings with numbers\", function() {\n expect(encodeBase64(\"12345\")).toBe(\"MTIzNDU=\");\n });\n it(\"produces output matching btoa for ASCII input\", function() {\n var inputs = [\n \"test\",\n \"a\",\n \"ab\",\n \"abc\",\n \"abcd\",\n \"Hello, World!\",\n \"base64 encoding test\"\n ];\n var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;\n try {\n for (var _iterator = inputs[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var input = _step.value;\n expect(encodeBase64(input)).toBe(btoa(input));\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return != null) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n });\n it(\"falls back to manual encoding when btoa is unavailable\", function() {\n var originalBtoa = globalThis.btoa;\n vi.spyOn(globalThis, \"btoa\").mockImplementation(function() {\n throw new Error(\"btoa not available\");\n });\n Object.defineProperty(globalThis, \"btoa\", {\n value: void 0,\n configurable: true\n });\n try {\n expect(encodeBase64(\"Hello\")).toBe(\"SGVsbG8=\");\n expect(encodeBase64(\"ABC\")).toBe(\"QUJD\");\n expect(encodeBase64(\"\")).toBe(\"\");\n } finally {\n Object.defineProperty(globalThis, \"btoa\", {\n value: originalBtoa,\n configurable: true\n });\n }\n });\n});\n//# sourceMappingURL=base64.spec.js.map\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ import { createContext } from "react";
2
+ const SiweKeycloakContext = createContext({});
3
+ export { SiweKeycloakContext };
4
+ //# sourceMappingURL=context.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createContext","SiweKeycloakContext"],"sources":["../../src/context.ts"],"sourcesContent":[null],"mappings":"AACA,SAASA,aAAA,QAAqB;AAMvB,MAAMC,mBAAA,GAAsBD,aAAA,CACjC,CAAC,CACH","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ import { createContext } from "react";
2
+ var SiweKeycloakContext = createContext({});
3
+ export { SiweKeycloakContext };
4
+ //# sourceMappingURL=context.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createContext","SiweKeycloakContext"],"sources":["context.native.js"],"sourcesContent":["import { createContext } from \"react\";\nvar SiweKeycloakContext = createContext({});\nexport {\n SiweKeycloakContext\n};\n//# sourceMappingURL=context.js.map\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,OAAO;AACrC,IAAIC,mBAAmB,GAAGD,aAAa,CAAC,CAAC,CAAC,CAAC;AAC3C,SACEC,mBAAmB","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ import { createContext } from "react";
2
+ const SiweKeycloakContext = createContext({});
3
+ export { SiweKeycloakContext };
4
+ //# sourceMappingURL=context.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createContext","SiweKeycloakContext"],"sources":["../../../src/hooks/context.ts"],"sourcesContent":[null],"mappings":"AACA,SAASA,aAAA,QAAqB;AAMvB,MAAMC,mBAAA,GAAsBD,aAAA,CACjC,CAAC,CACH","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ import { createContext } from "react";
2
+ var SiweKeycloakContext = createContext({});
3
+ export { SiweKeycloakContext };
4
+ //# sourceMappingURL=context.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createContext","SiweKeycloakContext"],"sources":["context.native.js"],"sourcesContent":["import { createContext } from \"react\";\nvar SiweKeycloakContext = createContext({});\nexport {\n SiweKeycloakContext\n};\n//# sourceMappingURL=context.js.map\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,OAAO;AACrC,IAAIC,mBAAmB,GAAGD,aAAa,CAAC,CAAC,CAAC,CAAC;AAC3C,SACEC,mBAAmB","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export * from "./useSiweKeycloak.mjs";
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["../../../src/hooks/index.ts"],"sourcesContent":[null],"mappings":"AAAA,cAAc","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export * from "./useSiweKeycloak.native.js";
2
+ //# sourceMappingURL=index.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["index.native.js"],"sourcesContent":["export * from \"./useSiweKeycloak\";\n//# sourceMappingURL=index.js.map\n"],"mappings":"AAAA,cAAc,6BAAmB","ignoreList":[]}
@@ -0,0 +1,36 @@
1
+ import { useModal, useSIWE } from "@multiplatform.one/web3/connectkit";
2
+ import { useContext } from "react";
3
+ import { useAccount } from "wagmi";
4
+ import { SiweKeycloakContext } from "./context.mjs";
5
+ function useSiweKeycloak() {
6
+ const {
7
+ addresses
8
+ } = useAccount();
9
+ const {
10
+ signOut
11
+ } = useSIWE();
12
+ const {
13
+ openSIWE,
14
+ openSwitchNetworks,
15
+ openOnboarding,
16
+ openAbout,
17
+ openProfile
18
+ } = useModal();
19
+ const {
20
+ keycloak
21
+ } = useContext(SiweKeycloakContext);
22
+ return {
23
+ signOut,
24
+ openSIWE,
25
+ openSwitchNetworks,
26
+ openOnboarding,
27
+ openAbout,
28
+ openProfile,
29
+ keycloak,
30
+ connect() {
31
+ if (!addresses?.length) openProfile();
32
+ }
33
+ };
34
+ }
35
+ export { useSiweKeycloak };
36
+ //# sourceMappingURL=useSiweKeycloak.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useModal","useSIWE","useContext","useAccount","SiweKeycloakContext","useSiweKeycloak","addresses","signOut","openSIWE","openSwitchNetworks","openOnboarding","openAbout","openProfile","keycloak","connect","length"],"sources":["../../../src/hooks/useSiweKeycloak.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,QAAA,EAAUC,OAAA,QAAe;AAClC,SAASC,UAAA,QAAkB;AAC3B,SAASC,UAAA,QAAkB;AAC3B,SAASC,mBAAA,QAA2B;AAE7B,SAASC,gBAAA,EAAkB;EAChC,MAAM;IAAEC;EAAU,IAAIH,UAAA,CAAW;EACjC,MAAM;IAAEI;EAAQ,IAAIN,OAAA,CAAQ;EAC5B,MAAM;IAAEO,QAAA;IAAUC,kBAAA;IAAoBC,cAAA;IAAgBC,SAAA;IAAWC;EAAY,IAAIZ,QAAA,CAAS;EAC1F,MAAM;IAAEa;EAAS,IAAIX,UAAA,CAAWE,mBAAmB;EACnD,OAAO;IACLG,OAAA;IACAC,QAAA;IACAC,kBAAA;IACAC,cAAA;IACAC,SAAA;IACAC,WAAA;IACAC,QAAA;IACAC,QAAA,EAAU;MACR,IAAI,CAACR,SAAA,EAAWS,MAAA,EAAQH,WAAA,CAAY;IACtC;EACF;AACF","ignoreList":[]}