@criipto/verify-react 4.1.4 → 5.0.1

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 (51) hide show
  1. package/README.md +20 -13
  2. package/deploy-preview.sh +19 -0
  3. package/dist/index.css +223 -0
  4. package/dist/index.d.ts +267 -14
  5. package/dist/index.js +1946 -0
  6. package/dist/index.js.map +1 -0
  7. package/package.json +26 -33
  8. package/tsconfig.json +8 -99
  9. package/tsdown.config.ts +23 -0
  10. package/dist/__tests__/provider.test.d.ts +0 -1
  11. package/dist/__tests__/utils.test.d.ts +0 -1
  12. package/dist/components/AuthButtonGroup.d.ts +0 -10
  13. package/dist/components/AuthMethodButton/Logo.d.ts +0 -10
  14. package/dist/components/AuthMethodButton.d.ts +0 -45
  15. package/dist/components/AuthMethodSelector.d.ts +0 -17
  16. package/dist/components/Button.d.ts +0 -12
  17. package/dist/components/QRCode.d.ts +0 -29
  18. package/dist/components/SEBankIDQRCode/SEBankIDQRCode.test.d.ts +0 -1
  19. package/dist/components/SEBankIDQRCode.d.ts +0 -53
  20. package/dist/components/SEBankIDSameDeviceButton/Foreground.d.ts +0 -12
  21. package/dist/components/SEBankIDSameDeviceButton/Poll.d.ts +0 -12
  22. package/dist/components/SEBankIDSameDeviceButton/Reload.d.ts +0 -15
  23. package/dist/components/SEBankIDSameDeviceButton/__tests__/Foreground.test.d.ts +0 -1
  24. package/dist/components/SEBankIDSameDeviceButton/__tests__/Reload.test.d.ts +0 -1
  25. package/dist/components/SEBankIDSameDeviceButton/__tests__/strategy.test.d.ts +0 -1
  26. package/dist/components/SEBankIDSameDeviceButton/__tests__/usePoll.test.d.ts +0 -1
  27. package/dist/components/SEBankIDSameDeviceButton/shared.d.ts +0 -19
  28. package/dist/components/SEBankIDSameDeviceButton/usePoll.d.ts +0 -7
  29. package/dist/components/SEBankIDSameDeviceButton.d.ts +0 -21
  30. package/dist/context.d.ts +0 -61
  31. package/dist/criipto-verify-react.cjs.js +0 -2
  32. package/dist/criipto-verify-react.cjs.js.map +0 -1
  33. package/dist/criipto-verify-react.css +0 -298
  34. package/dist/criipto-verify-react.esm.js +0 -2
  35. package/dist/criipto-verify-react.esm.js.map +0 -1
  36. package/dist/device.d.ts +0 -7
  37. package/dist/hooks/useNow.d.ts +0 -1
  38. package/dist/hooks/usePageVisibility.d.ts +0 -2
  39. package/dist/i18n/da.d.ts +0 -19
  40. package/dist/i18n/de.d.ts +0 -19
  41. package/dist/i18n/en.d.ts +0 -19
  42. package/dist/i18n/fi.d.ts +0 -19
  43. package/dist/i18n/index.d.ts +0 -4
  44. package/dist/i18n/nb.d.ts +0 -19
  45. package/dist/i18n/nl.d.ts +0 -19
  46. package/dist/i18n/sv.d.ts +0 -19
  47. package/dist/memory-storage.d.ts +0 -1
  48. package/dist/provider.d.ts +0 -66
  49. package/dist/stories/StoryResponseRenderer.d.ts +0 -6
  50. package/dist/use-criipto-verify.d.ts +0 -30
  51. package/dist/utils.d.ts +0 -25
package/dist/index.js ADDED
@@ -0,0 +1,1946 @@
1
+ import React, { createContext, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
2
+ import CriiptoAuth, { OAuth2Error, OAuth2Error as OAuth2Error$1, UserCancelledError, clearPKCEState, generatePKCE, parseAuthorizeResponseFromLocation, savePKCEState } from "@criipto/auth-js";
3
+ import jwtDecode from "jwt-decode";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { UAParser } from "@ua-parser-js/pro-enterprise";
6
+ import QRCode$1 from "qrcode";
7
+ import classNames from "classnames";
8
+ //#region src/context.ts
9
+ const actions = [
10
+ "confirm",
11
+ "accept",
12
+ "approve",
13
+ "sign",
14
+ "login"
15
+ ];
16
+ /**
17
+ * @ignore
18
+ */
19
+ const stub = () => {
20
+ throw new Error("You forgot to wrap your component in <CriiptoVerifyProvider>.");
21
+ };
22
+ const CriiptoVerifyContext = createContext({
23
+ loginWithRedirect: stub,
24
+ loginWithPopup: stub,
25
+ checkSession: stub,
26
+ logout: stub,
27
+ fetchOpenIDConfiguration: stub,
28
+ buildAuthorizeUrl: stub,
29
+ initializePAR: stub,
30
+ generatePKCE: stub,
31
+ buildOptions: stub,
32
+ handleResponse: stub,
33
+ responseType: "token",
34
+ completionStrategy: "client",
35
+ result: null,
36
+ claims: null,
37
+ domain: "",
38
+ action: "login",
39
+ pkce: void 0,
40
+ store: null,
41
+ isLoading: false,
42
+ isInitializing: true,
43
+ client: null,
44
+ loginHint: void 0
45
+ });
46
+ //#endregion
47
+ //#region src/i18n/en.ts
48
+ const en = {
49
+ loginWith: "Login with",
50
+ approveWith: "Approve with",
51
+ signWith: "Sign with",
52
+ confirmWith: "Confirm with",
53
+ acceptWith: "Accept with",
54
+ sameDevice: "On this device",
55
+ anotherDevice: "With your SSN",
56
+ anotherDeviceQR: "On another device",
57
+ mitidBusiness: "MitID Business",
58
+ finnishMobileID: "Finnish Mobile Certificate",
59
+ finnishBankID: "Finnish Bank ID",
60
+ swedishBankID: "Swedish BankID",
61
+ norwegianBankID: "Norwegian BankID",
62
+ biometrics: "Biometrics",
63
+ openAndScan: "Open the BankID app on your mobile device and scan the QR code.",
64
+ thisIsTheQR: "This is a BankID QR Code. You can click it to view it in full screen.",
65
+ completingLogin: "Completing your login."
66
+ };
67
+ //#endregion
68
+ //#region src/i18n/da.ts
69
+ const da = {
70
+ loginWith: "Login med",
71
+ approveWith: "Godkend med",
72
+ signWith: "Underskriv med",
73
+ confirmWith: "Bekræft med",
74
+ acceptWith: "Accepter med",
75
+ sameDevice: "På denne enhed",
76
+ anotherDevice: "Med dit personnummer",
77
+ anotherDeviceQR: "På anden enhed",
78
+ mitidBusiness: "MitID Erhverv",
79
+ finnishMobileID: "Finsk Mobilcertifikat",
80
+ finnishBankID: "Finsk Bank ID",
81
+ swedishBankID: "Svensk BankID",
82
+ norwegianBankID: "Norsk BankID",
83
+ biometrics: "Biometri",
84
+ openAndScan: "Åbn BankID appen på din telefon og scan QR koden.",
85
+ thisIsTheQR: "Dette er en BankID QR-kode. Du kan klikke på den for at se den i fuld skærm.",
86
+ completingLogin: "Fuldfører dit login."
87
+ };
88
+ //#endregion
89
+ //#region src/i18n/sv.ts
90
+ const sv = {
91
+ loginWith: "Logga in med",
92
+ approveWith: "Godkänn med",
93
+ signWith: "Signera med",
94
+ confirmWith: "Bekräfta med",
95
+ acceptWith: "Acceptera med",
96
+ sameDevice: "På denna enhet",
97
+ anotherDevice: "Med ditt personnummer",
98
+ anotherDeviceQR: "På annan enhet",
99
+ mitidBusiness: "MitID Erhverv",
100
+ finnishMobileID: "Finskt Mobilcertifikat",
101
+ finnishBankID: "Finskt Bank ID",
102
+ swedishBankID: "Svenskt BankID",
103
+ norwegianBankID: "Norska BankID",
104
+ biometrics: "Biometri",
105
+ openAndScan: "Öppna BankID-appen på din mobila enhet och skanna QR-koden.",
106
+ thisIsTheQR: "Detta är en QR-kod från BankID. Du kan klicka på den för att visa den i fullskärm.",
107
+ completingLogin: "Slutför din inloggning."
108
+ };
109
+ //#endregion
110
+ //#region src/i18n/nb.ts
111
+ const nb = {
112
+ loginWith: "Logg inn med",
113
+ approveWith: "Godkjenne med",
114
+ signWith: "Signer med",
115
+ confirmWith: "Bekreft med",
116
+ acceptWith: "Aksepterer med",
117
+ sameDevice: "På denne enhet",
118
+ anotherDevice: "Med personnummeret ditt",
119
+ anotherDeviceQR: "På annan enhet",
120
+ mitidBusiness: "MitID Erhverv",
121
+ finnishMobileID: "Finsk Mobilsertifikat",
122
+ finnishBankID: "Finsk Bank ID",
123
+ swedishBankID: "Svensk BankID",
124
+ norwegianBankID: "Norsk BankID",
125
+ biometrics: "Biometri",
126
+ openAndScan: "Åpne BankID-appen på mobilenheten din og skann QR-koden.",
127
+ thisIsTheQR: "Dette er en BankID QR-kode. Du kan klikke på den for å se den i fullskjerm.",
128
+ completingLogin: "Fullfører påloggingen."
129
+ };
130
+ //#endregion
131
+ //#region src/i18n/fi.ts
132
+ const fi = {
133
+ loginWith: "Kirjaudu sisään",
134
+ approveWith: "Hyväksy",
135
+ signWith: "Allekirjoita",
136
+ confirmWith: "Vahvista",
137
+ acceptWith: "Hyväksy",
138
+ sameDevice: "Tällä laitteella",
139
+ anotherDevice: "Henkilötunnuksellasi",
140
+ anotherDeviceQR: "Toisella laitteella",
141
+ mitidBusiness: "MitID Businessilla",
142
+ finnishMobileID: "Suomalaisella Mobiilivarmenteella",
143
+ finnishBankID: "Suomalaisella BankID:llä",
144
+ swedishBankID: "Ruotsalaisella BankID:llä",
145
+ norwegianBankID: "Norjalaisella BankID:llä",
146
+ biometrics: "Biometrisella tunnistautumisella",
147
+ openAndScan: "Avaa BankID-sovellus mobiililaitteellasi ja skannaa QR-koodi.",
148
+ thisIsTheQR: "Tämä on BankID-QR-koodi. Voit napsauttaa sitä nähdäksesi sen koko näytöllä",
149
+ completingLogin: "Sisäänkirjautumista viimeistellään."
150
+ };
151
+ //#endregion
152
+ //#region src/i18n/de.ts
153
+ const de = {
154
+ loginWith: "Anmelden mit",
155
+ approveWith: "Genehmigen mit",
156
+ signWith: "Unterschreiben mit",
157
+ confirmWith: "Bestätigen mit",
158
+ acceptWith: "Akzeptieren mit",
159
+ sameDevice: "Auf diesem Gerät",
160
+ anotherDevice: "Mit Ihrer Sozialversicherungsnummer",
161
+ anotherDeviceQR: "Auf einem anderen Gerät",
162
+ mitidBusiness: "MitID Business",
163
+ finnishMobileID: "Finnischem Mobilfunkzertifikat",
164
+ finnishBankID: "Finnische BankID",
165
+ swedishBankID: "Schwedische BankID",
166
+ norwegianBankID: "Norwegische BankID",
167
+ biometrics: "Biometrie",
168
+ openAndScan: "Öffnen Sie die BankID-App auf Ihrem mobilen Endgerät und scannen Sie den QR-Code.",
169
+ thisIsTheQR: "Dies ist ein BankID QR-Code. Sie können darauf klicken, um ihn im Vollbildmodus anzuzeigen",
170
+ completingLogin: "Ihre Anmeldung wird abgeschlossen."
171
+ };
172
+ //#endregion
173
+ //#region src/i18n/nl.ts
174
+ const nl = {
175
+ loginWith: "Inloggen met",
176
+ approveWith: "Goedkeuren met",
177
+ signWith: "Ondertekenen met",
178
+ confirmWith: "Bevestigen met",
179
+ acceptWith: "Accepteren met",
180
+ sameDevice: "Op dit apparaat",
181
+ anotherDevice: "Met uw SSN",
182
+ anotherDeviceQR: "Op een ander apparaat",
183
+ mitidBusiness: "MitID Business",
184
+ finnishMobileID: "Finse mobiel certificaat",
185
+ finnishBankID: "Finse BankID",
186
+ swedishBankID: "Zweedse BankID",
187
+ norwegianBankID: "Noorse BankID",
188
+ biometrics: "Biometrie",
189
+ openAndScan: "Open de BankID-app op uw mobiele apparaat en scan de QR-code.",
190
+ thisIsTheQR: "Dit is een BankID QR-code. U kunt erop klikken om het in een volledig scherm te bekijken",
191
+ completingLogin: "Uw login voltooien."
192
+ };
193
+ //#endregion
194
+ //#region src/i18n/index.ts
195
+ function getI18n(language) {
196
+ switch (language) {
197
+ case "en": return en;
198
+ case "da": return da;
199
+ case "sv": return sv;
200
+ case "nb": return nb;
201
+ case "fi": return fi;
202
+ case "de": return de;
203
+ case "nl": return nl;
204
+ default: assertUnreachable(language);
205
+ }
206
+ }
207
+ //#endregion
208
+ //#region src/utils.ts
209
+ const VERSION = typeof __VERSION__ === "undefined" ? "N/A" : __VERSION__;
210
+ const DKMITID_PREFIX = "urn:grn:authn:dk:mitid";
211
+ const FTN_PREFIX = "urn:grn:authn:fi";
212
+ function lowestMitIDValue(input) {
213
+ let dkmitidMethod = null;
214
+ input.forEach((s) => {
215
+ if (s.startsWith("urn:grn:authn:dk:mitid") && s !== "urn:grn:authn:dk:mitid:business") if (!dkmitidMethod) dkmitidMethod = s;
216
+ else {
217
+ let newLevel = s.replace(DKMITID_PREFIX, "");
218
+ let oldLevel = dkmitidMethod.replace(DKMITID_PREFIX, "");
219
+ if (newLevel === ":low" && [":substantial", ":high"].includes(oldLevel)) dkmitidMethod = s;
220
+ else if (newLevel === ":substantial" && oldLevel === ":high") dkmitidMethod = s;
221
+ }
222
+ });
223
+ return dkmitidMethod;
224
+ }
225
+ function autoTitleCase(input) {
226
+ return input.split(/:|-/).map((segment) => {
227
+ segment = segment.replace(/id(\s|$)/, "ID");
228
+ if (segment.length === 2) return segment.toUpperCase();
229
+ return segment.substr(0, 1).toUpperCase() + segment.substr(1);
230
+ }).join(" ");
231
+ }
232
+ function assertUnreachable(x) {
233
+ throw new Error("Didn't expect to get here");
234
+ }
235
+ function stringifyAction(language, action) {
236
+ const i18n = getI18n(language);
237
+ switch (action) {
238
+ case "login": return i18n.loginWith;
239
+ case "approve": return i18n.approveWith;
240
+ case "sign": return i18n.signWith;
241
+ case "confirm": return i18n.confirmWith;
242
+ case "accept": return i18n.acceptWith;
243
+ default: assertUnreachable(action);
244
+ }
245
+ }
246
+ function acrValueToProviderPrefix(value) {
247
+ value = value.replace("urn:grn:authn:", "");
248
+ if (value.startsWith("fi")) return "fi";
249
+ else if (value.startsWith("itsme")) return "itsme";
250
+ else return value.split(":").slice(0, 2).join(":");
251
+ }
252
+ function acrValueToTitle(language, value, { disambiguate }) {
253
+ const i18n = getI18n(language);
254
+ value = value.replace("urn:grn:authn:", "");
255
+ const provider = acrValueToProviderPrefix(value);
256
+ if (provider === "dk:mitid") {
257
+ if (value.replace("dk:mitid:", "") === "business") return { title: i18n.mitidBusiness };
258
+ return { title: "MitID" };
259
+ }
260
+ if (value === "fi:mobile-id") return { title: i18n.finnishMobileID };
261
+ if (value === "fi:bank-id") return { title: i18n.finnishBankID };
262
+ if (provider === "fi") return { title: autoTitleCase(value).replace("FI", "FTN") };
263
+ if (provider === "itsme") return { title: autoTitleCase(value).replace("me", "ME") };
264
+ if (provider === "se:bankid") {
265
+ let subtitle = void 0;
266
+ let suffix = value.replace("se:bankid:", "");
267
+ let title = "BankID";
268
+ if (suffix === "same-device") subtitle = i18n.sameDevice;
269
+ if (suffix === "another-device") subtitle = i18n.anotherDevice;
270
+ if (suffix === "another-device:qr") subtitle = i18n.anotherDeviceQR;
271
+ if (disambiguate) title = i18n.swedishBankID;
272
+ return {
273
+ title,
274
+ subtitle
275
+ };
276
+ }
277
+ if (provider === "no:bankid") {
278
+ let subtitle = void 0;
279
+ let title = "BankID";
280
+ if (value.endsWith(":substantial")) subtitle = i18n.biometrics;
281
+ if (disambiguate) title = i18n.norwegianBankID;
282
+ return {
283
+ title,
284
+ subtitle
285
+ };
286
+ }
287
+ if (provider === "no:vipps") return { title: autoTitleCase(value).replace("NO ", "") };
288
+ if (provider === "se:frejaid") return { title: "FrejaID" };
289
+ if (provider === "uk:oneid") return { title: "OneID" };
290
+ if (provider === "de:personalausweis") return { title: "Personalausweis" };
291
+ return { title: autoTitleCase(value) };
292
+ }
293
+ function filterAcrValues(input) {
294
+ let original = input.slice();
295
+ let dkmitidMethod = lowestMitIDValue(input);
296
+ let reduced = input.slice();
297
+ if (dkmitidMethod) reduced = input.filter((s) => !s.startsWith("urn:grn:authn:dk:mitid") || s === "urn:grn:authn:dk:mitid:business").concat([dkmitidMethod]).sort((a, b) => original.indexOf(a) - original.indexOf(b));
298
+ if (input.includes(`urn:grn:authn:fi:all`)) {
299
+ if (!reduced.includes(`urn:grn:authn:fi:bank-id`)) reduced.push(`${FTN_PREFIX}:bank-id`);
300
+ if (!reduced.includes(`urn:grn:authn:fi:mobile-id`)) reduced.push(`${FTN_PREFIX}:mobile-id`);
301
+ reduced = reduced.filter((s) => s !== `${FTN_PREFIX}:all`);
302
+ }
303
+ return reduced;
304
+ }
305
+ function isSingle(acrValue, acrValues) {
306
+ const provider = acrValueToProviderPrefix(acrValue);
307
+ return acrValues.reduce((memo, acrValue) => memo + (acrValueToProviderPrefix(acrValue) === provider ? 1 : 0), 0) === 1;
308
+ }
309
+ const ambigousProviders = ["se:bankid", "no:bankid"];
310
+ /**
311
+ * A provider is considered ambiguous iff:
312
+ * 1. It is in the list of ambiguous providers
313
+ * 2. There is another ambiguous provider in the arc values list
314
+ */
315
+ function isAmbiguous(acrValue, acrValues) {
316
+ const provider = acrValueToProviderPrefix(acrValue);
317
+ const isProviderAmbiguous = ambigousProviders.includes(provider);
318
+ const otherAmbiguousProvider = acrValues.find((otherAcrValue) => {
319
+ const otherProvider = acrValueToProviderPrefix(otherAcrValue);
320
+ return provider != otherProvider && ambigousProviders.includes(otherProvider);
321
+ }) != null;
322
+ return isProviderAmbiguous && otherAmbiguousProvider;
323
+ }
324
+ function trySessionStorage() {
325
+ try {
326
+ if (typeof sessionStorage === "undefined") return null;
327
+ return sessionStorage;
328
+ } catch (err) {
329
+ /**
330
+ * Failed to read the 'sessionStorage' property from 'Window': Access is denied for this document.
331
+ * (if storage is disabled in the browser)
332
+ */
333
+ return null;
334
+ }
335
+ }
336
+ //#endregion
337
+ //#region src/memory-storage.ts
338
+ function createMemoryStorage() {
339
+ let store = {};
340
+ return {
341
+ getItem(key) {
342
+ return store[key] || null;
343
+ },
344
+ setItem(key, value) {
345
+ store[key] = value.toString();
346
+ },
347
+ removeItem(key) {
348
+ delete store[key];
349
+ },
350
+ clear() {
351
+ store = {};
352
+ },
353
+ key(index) {
354
+ return Object.keys(store)[index];
355
+ },
356
+ get length() {
357
+ return Object.keys(store).length;
358
+ }
359
+ };
360
+ }
361
+ //#endregion
362
+ //#region \0@oxc-project+runtime@0.115.0/helpers/asyncToGenerator.js
363
+ function asyncGeneratorStep(n, t, e, r, o, a, c) {
364
+ try {
365
+ var i = n[a](c), u = i.value;
366
+ } catch (n) {
367
+ e(n);
368
+ return;
369
+ }
370
+ i.done ? t(u) : Promise.resolve(u).then(r, o);
371
+ }
372
+ function _asyncToGenerator(n) {
373
+ return function() {
374
+ var t = this, e = arguments;
375
+ return new Promise(function(r, o) {
376
+ var a = n.apply(t, e);
377
+ function _next(n) {
378
+ asyncGeneratorStep(a, r, o, _next, _throw, "next", n);
379
+ }
380
+ function _throw(n) {
381
+ asyncGeneratorStep(a, r, o, _next, _throw, "throw", n);
382
+ }
383
+ _next(void 0);
384
+ });
385
+ };
386
+ }
387
+ //#endregion
388
+ //#region \0@oxc-project+runtime@0.115.0/helpers/typeof.js
389
+ function _typeof(o) {
390
+ "@babel/helpers - typeof";
391
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
392
+ return typeof o;
393
+ } : function(o) {
394
+ return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
395
+ }, _typeof(o);
396
+ }
397
+ //#endregion
398
+ //#region \0@oxc-project+runtime@0.115.0/helpers/toPrimitive.js
399
+ function toPrimitive(t, r) {
400
+ if ("object" != _typeof(t) || !t) return t;
401
+ var e = t[Symbol.toPrimitive];
402
+ if (void 0 !== e) {
403
+ var i = e.call(t, r || "default");
404
+ if ("object" != _typeof(i)) return i;
405
+ throw new TypeError("@@toPrimitive must return a primitive value.");
406
+ }
407
+ return ("string" === r ? String : Number)(t);
408
+ }
409
+ //#endregion
410
+ //#region \0@oxc-project+runtime@0.115.0/helpers/toPropertyKey.js
411
+ function toPropertyKey(t) {
412
+ var i = toPrimitive(t, "string");
413
+ return "symbol" == _typeof(i) ? i : i + "";
414
+ }
415
+ //#endregion
416
+ //#region \0@oxc-project+runtime@0.115.0/helpers/defineProperty.js
417
+ function _defineProperty(e, r, t) {
418
+ return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
419
+ value: t,
420
+ enumerable: !0,
421
+ configurable: !0,
422
+ writable: !0
423
+ }) : e[r] = t, e;
424
+ }
425
+ //#endregion
426
+ //#region \0@oxc-project+runtime@0.115.0/helpers/objectSpread2.js
427
+ function ownKeys(e, r) {
428
+ var t = Object.keys(e);
429
+ if (Object.getOwnPropertySymbols) {
430
+ var o = Object.getOwnPropertySymbols(e);
431
+ r && (o = o.filter(function(r) {
432
+ return Object.getOwnPropertyDescriptor(e, r).enumerable;
433
+ })), t.push.apply(t, o);
434
+ }
435
+ return t;
436
+ }
437
+ function _objectSpread2(e) {
438
+ for (var r = 1; r < arguments.length; r++) {
439
+ var t = null != arguments[r] ? arguments[r] : {};
440
+ r % 2 ? ownKeys(Object(t), !0).forEach(function(r) {
441
+ _defineProperty(e, r, t[r]);
442
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r) {
443
+ Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
444
+ });
445
+ }
446
+ return e;
447
+ }
448
+ //#endregion
449
+ //#region src/provider.tsx
450
+ const SESSION_KEY = `@criipto-verify-react/session`;
451
+ const ACTION_SUPPORTING_ACR_VALUES = [
452
+ "urn:grn:authn:dk:mitid:low",
453
+ "urn:grn:authn:dk:mitid:substantial",
454
+ "urn:grn:authn:dk:mitid:high",
455
+ "urn:grn:authn:se:bankid:same-device",
456
+ "urn:grn:authn:se:bankid:another-device:qr"
457
+ ];
458
+ const MESSAGE_SUPPORTING_ACR_VALUES = [
459
+ "urn:grn:authn:dk:mitid:low",
460
+ "urn:grn:authn:dk:mitid:substantial",
461
+ "urn:grn:authn:dk:mitid:high",
462
+ "urn:grn:authn:se:bankid:same-device",
463
+ "urn:grn:authn:se:bankid:another-device:qr"
464
+ ];
465
+ function buildLoginHint(loginHint, params) {
466
+ const { options, action, message } = params;
467
+ const acrValues = (options === null || options === void 0 ? void 0 : options.acrValues) ? Array.isArray(options === null || options === void 0 ? void 0 : options.acrValues) ? options === null || options === void 0 ? void 0 : options.acrValues : [options === null || options === void 0 ? void 0 : options.acrValues] : [];
468
+ let hints = (loginHint ? loginHint.split(" ") : []).concat((options === null || options === void 0 ? void 0 : options.loginHint) ? options === null || options === void 0 ? void 0 : options.loginHint.split(" ") : []).filter((hint) => !hint.startsWith("message:") && !hint.startsWith("action:"));
469
+ if (action) {
470
+ hints = hints.filter((h) => !h.startsWith("action:"));
471
+ if (acrValues.length === 1) {
472
+ if (ACTION_SUPPORTING_ACR_VALUES.includes(acrValues[0])) hints.push(`action:${action}`);
473
+ } else if (acrValues.length >= 2) {
474
+ if (acrValues.some((v) => ACTION_SUPPORTING_ACR_VALUES.includes(v))) hints.push(`action:${action}`);
475
+ } else hints.push(`action:${action}`);
476
+ }
477
+ if (message) if (acrValues.length === 1) {
478
+ if (MESSAGE_SUPPORTING_ACR_VALUES.includes(acrValues[0])) hints.push(`message:${btoa(message)}`);
479
+ } else if (acrValues.length >= 2) {
480
+ if (acrValues.some((v) => MESSAGE_SUPPORTING_ACR_VALUES.includes(v))) hints.push(`message:${btoa(message)}`);
481
+ } else hints.push(`message:${btoa(message)}`);
482
+ return hints.length ? hints.join(" ") : void 0;
483
+ }
484
+ function parseAction(input) {
485
+ if (!input) return;
486
+ const actionCandidate = input.split(" ").find((s) => s.startsWith("action:"));
487
+ if (!actionCandidate) return;
488
+ const action = actionCandidate.replace("action:", "");
489
+ if (actions.includes(action)) return action;
490
+ }
491
+ function tryBase64Decode(input) {
492
+ try {
493
+ return atob(input);
494
+ } catch (_unused) {
495
+ return null;
496
+ }
497
+ }
498
+ function parseMessage(input) {
499
+ var _tryBase64Decode;
500
+ if (!input) return;
501
+ const messageCandidate = input.split(" ").find((s) => s.startsWith("message:"));
502
+ if (!messageCandidate) return;
503
+ const message = messageCandidate.replace("message:", "");
504
+ return (_tryBase64Decode = tryBase64Decode(message)) !== null && _tryBase64Decode !== void 0 ? _tryBase64Decode : message;
505
+ }
506
+ function defaultRedirectUri(input) {
507
+ if (input) return input;
508
+ if (typeof window !== "undefined" && typeof window.location !== "undefined") return window.location.origin + window.location.pathname;
509
+ throw new Error("Unable to determine default redirect uri, please provide a redirectUri");
510
+ }
511
+ const pkceStore = (() => {
512
+ const sessionStorage = trySessionStorage();
513
+ if (sessionStorage === null) {
514
+ console.warn("Creating memory store for PKCE values as no sessionStorage is available. Authentication may be broken.");
515
+ return createMemoryStorage();
516
+ }
517
+ return sessionStorage;
518
+ })();
519
+ const CriiptoVerifyProvider = (props) => {
520
+ var _ref, _props$action, _props$message;
521
+ const client = useMemo(() => new CriiptoAuth({
522
+ domain: props.domain,
523
+ clientID: props.clientID,
524
+ store: pkceStore,
525
+ redirectUri: defaultRedirectUri(props.redirectUri),
526
+ protocol: props.protocol
527
+ }), [
528
+ props.domain,
529
+ props.clientID,
530
+ props.redirectUri,
531
+ props.protocol
532
+ ]);
533
+ const [configuration, setConfiguration] = useState(null);
534
+ useEffect(() => {
535
+ let isSubscribed = true;
536
+ _asyncToGenerator(function* () {
537
+ const configuration = yield client.fetchOpenIDConfiguration();
538
+ if (isSubscribed) setConfiguration(configuration);
539
+ })();
540
+ return () => {
541
+ isSubscribed = false;
542
+ };
543
+ }, [client]);
544
+ const [result, setResult] = useState(null);
545
+ useEffect(() => {
546
+ let isSubscribed = true;
547
+ _asyncToGenerator(function* () {
548
+ try {
549
+ yield client.fetchCriiptoConfiguration();
550
+ } catch (error) {
551
+ if (!isSubscribed) return;
552
+ const err = error instanceof Error ? error : new Error(String(error));
553
+ setResult((prev) => prev !== null && prev !== void 0 ? prev : err);
554
+ }
555
+ })();
556
+ return () => {
557
+ isSubscribed = false;
558
+ };
559
+ }, [client]);
560
+ const claims = useMemo(() => {
561
+ if (!result) return null;
562
+ if (!("id_token" in result)) return null;
563
+ return jwtDecode(result.id_token);
564
+ }, [result]);
565
+ const [isLoading, setIsLoading] = useState(false);
566
+ const [isInitializing, setIsInitializing] = useState(true);
567
+ const [pkce, setPKCE] = useState(props.pkce);
568
+ const responseType = props.response || "token";
569
+ const completionStrategy = props.completionStrategy || "client";
570
+ const uiLocales = props.uiLocales;
571
+ const loginHint = props.loginHint;
572
+ const action = (_ref = (_props$action = props.action) !== null && _props$action !== void 0 ? _props$action : parseAction(loginHint)) !== null && _ref !== void 0 ? _ref : "login";
573
+ const message = (_props$message = props.message) !== null && _props$message !== void 0 ? _props$message : parseMessage(loginHint);
574
+ const sessionStore = props.sessionStore;
575
+ const refreshPKCE = function() {
576
+ var _ref2 = _asyncToGenerator(function* () {
577
+ if (props.pkce) return props.pkce;
578
+ if (responseType !== "token" || completionStrategy !== "client") {
579
+ clearPKCEState(pkceStore);
580
+ setPKCE(void 0);
581
+ return;
582
+ }
583
+ clearPKCEState(pkceStore);
584
+ const pkce = yield generatePKCE();
585
+ setPKCE(pkce);
586
+ return pkce;
587
+ });
588
+ return function refreshPKCE() {
589
+ return _ref2.apply(this, arguments);
590
+ };
591
+ }();
592
+ const buildOptions = useCallback((options) => {
593
+ var _props$responseType, _props$state, _props$nonce, _props$prompt, _props$scope, _options$pkce;
594
+ return _objectSpread2(_objectSpread2({
595
+ redirectUri: defaultRedirectUri(props.redirectUri),
596
+ responseType: (_props$responseType = props.responseType) !== null && _props$responseType !== void 0 ? _props$responseType : "code",
597
+ responseMode: props.responseMode
598
+ }, options || {}), {}, {
599
+ state: (_props$state = props.state) !== null && _props$state !== void 0 ? _props$state : options === null || options === void 0 ? void 0 : options.state,
600
+ nonce: (_props$nonce = props.nonce) !== null && _props$nonce !== void 0 ? _props$nonce : options === null || options === void 0 ? void 0 : options.nonce,
601
+ prompt: (_props$prompt = props.prompt) !== null && _props$prompt !== void 0 ? _props$prompt : options === null || options === void 0 ? void 0 : options.prompt,
602
+ scope: (_props$scope = props.scope) !== null && _props$scope !== void 0 ? _props$scope : options === null || options === void 0 ? void 0 : options.scope,
603
+ uiLocales: uiLocales !== null && uiLocales !== void 0 ? uiLocales : options === null || options === void 0 ? void 0 : options.uiLocales,
604
+ pkce: (_options$pkce = options === null || options === void 0 ? void 0 : options.pkce) !== null && _options$pkce !== void 0 ? _options$pkce : pkce,
605
+ loginHint: buildLoginHint(props.loginHint, {
606
+ options,
607
+ action,
608
+ message
609
+ }),
610
+ extraUrlParams: props.criiptoSdk !== void 0 ? { criipto_sdk: props.criiptoSdk } : { criipto_sdk: `@criipto/verify-react@${VERSION}` }
611
+ });
612
+ }, [
613
+ pkce,
614
+ props.state,
615
+ props.nonce,
616
+ props.prompt,
617
+ props.scope,
618
+ uiLocales,
619
+ action,
620
+ message,
621
+ props.redirectUri,
622
+ props.criiptoSdk,
623
+ props.loginHint,
624
+ props.responseMode,
625
+ props.responseType
626
+ ]);
627
+ const buildAuthorizeUrl = useCallback(function() {
628
+ var _ref3 = _asyncToGenerator(function* (options) {
629
+ return yield client.buildAuthorizeUrl(client.buildAuthorizeParams(buildOptions(options)));
630
+ });
631
+ return function(_x) {
632
+ return _ref3.apply(this, arguments);
633
+ };
634
+ }(), [client, buildOptions]);
635
+ const initializePAR = useCallback(function() {
636
+ var _ref4 = _asyncToGenerator(function* (options) {
637
+ return (yield client.pushAuthorizationRequest(client.buildAuthorizeParams(buildOptions(options)))).authorizeUrl;
638
+ });
639
+ return function(_x2) {
640
+ return _ref4.apply(this, arguments);
641
+ };
642
+ }(), [client, buildOptions]);
643
+ const handleResponse = useCallback(function() {
644
+ var _ref5 = _asyncToGenerator(function* (response, params = {}) {
645
+ if (response instanceof OAuth2Error$1) setResult(response);
646
+ else if (response instanceof Error) setResult(response);
647
+ else if (params.pkce && responseType === "token") {
648
+ let _redirectUri = params.redirectUri || defaultRedirectUri(props.redirectUri);
649
+ if (!_redirectUri) throw new Error("redirectUri must be configured globally or per authentication component");
650
+ yield client.processResponse(response, {
651
+ code_verifier: params.pkce.code_verifier,
652
+ redirect_uri: _redirectUri
653
+ }).then((response) => {
654
+ if (response === null || response === void 0 ? void 0 : response.code) setResult({
655
+ code: response.code,
656
+ state: response.state,
657
+ source: params.source
658
+ });
659
+ else if (response === null || response === void 0 ? void 0 : response.id_token) {
660
+ setResult({
661
+ id_token: response.id_token,
662
+ state: response.state,
663
+ source: params.source
664
+ });
665
+ sessionStore === null || sessionStore === void 0 || sessionStore.setItem(SESSION_KEY, response.id_token);
666
+ } else setResult(null);
667
+ }).catch((err) => {
668
+ setResult(err);
669
+ });
670
+ } else if (response === null || response === void 0 ? void 0 : response.code) setResult({
671
+ code: response.code,
672
+ state: response.state,
673
+ source: params.source
674
+ });
675
+ else if (response === null || response === void 0 ? void 0 : response.id_token) {
676
+ setResult({
677
+ id_token: response.id_token,
678
+ state: response.state,
679
+ source: params.source
680
+ });
681
+ sessionStore === null || sessionStore === void 0 || sessionStore.setItem(SESSION_KEY, response.id_token);
682
+ } else if (response === null || response === void 0 ? void 0 : response.error) setResult(new OAuth2Error$1(response.error, response.error_description, response.state));
683
+ else setResult(null);
684
+ refreshPKCE();
685
+ });
686
+ return function(_x3) {
687
+ return _ref5.apply(this, arguments);
688
+ };
689
+ }(), [
690
+ refreshPKCE,
691
+ responseType,
692
+ setResult,
693
+ client,
694
+ sessionStore,
695
+ props.redirectUri
696
+ ]);
697
+ const checkSession = useCallback(_asyncToGenerator(function* () {
698
+ return client.checkSession({ redirectUri: defaultRedirectUri(props.redirectUri) }).then((response) => {
699
+ if (response === null || response === void 0 ? void 0 : response.code) setResult({ code: response.code });
700
+ else if (response === null || response === void 0 ? void 0 : response.id_token) {
701
+ setResult({ id_token: response.id_token });
702
+ sessionStore === null || sessionStore === void 0 || sessionStore.setItem(SESSION_KEY, response.id_token);
703
+ } else setResult(null);
704
+ });
705
+ }), [
706
+ sessionStore,
707
+ client,
708
+ props.redirectUri
709
+ ]);
710
+ const logout = useCallback(function() {
711
+ var _ref6 = _asyncToGenerator(function* (params) {
712
+ var _params$redirectUri;
713
+ sessionStore === null || sessionStore === void 0 || sessionStore.removeItem(SESSION_KEY);
714
+ yield client.logout({
715
+ redirectUri: (_params$redirectUri = params === null || params === void 0 ? void 0 : params.redirectUri) !== null && _params$redirectUri !== void 0 ? _params$redirectUri : defaultRedirectUri(props.redirectUri),
716
+ state: params === null || params === void 0 ? void 0 : params.state
717
+ });
718
+ });
719
+ return function(_x4) {
720
+ return _ref6.apply(this, arguments);
721
+ };
722
+ }(), [
723
+ sessionStore,
724
+ client,
725
+ props.redirectUri
726
+ ]);
727
+ const context = useMemo(() => {
728
+ return {
729
+ loginWithRedirect: function() {
730
+ var _ref7 = _asyncToGenerator(function* (params) {
731
+ const pkce = yield refreshPKCE();
732
+ yield client.redirect.authorize(buildOptions(_objectSpread2(_objectSpread2({}, params), {}, { pkce })));
733
+ });
734
+ return function loginWithRedirect(_x5) {
735
+ return _ref7.apply(this, arguments);
736
+ };
737
+ }(),
738
+ loginWithPopup: function() {
739
+ var _ref8 = _asyncToGenerator(function* (params) {
740
+ return client.popup.authorize(buildOptions(params)).then((response) => {
741
+ if (response === null || response === void 0 ? void 0 : response.code) setResult({
742
+ code: response.code,
743
+ state: response.state,
744
+ source: "popup"
745
+ });
746
+ else if (response === null || response === void 0 ? void 0 : response.id_token) setResult({
747
+ id_token: response.id_token,
748
+ state: response.state,
749
+ source: "popup"
750
+ });
751
+ else setResult(null);
752
+ }).catch((err) => {
753
+ setResult(err);
754
+ });
755
+ });
756
+ return function loginWithPopup(_x6) {
757
+ return _ref8.apply(this, arguments);
758
+ };
759
+ }(),
760
+ checkSession,
761
+ logout,
762
+ fetchOpenIDConfiguration: () => client.fetchOpenIDConfiguration(),
763
+ buildAuthorizeUrl,
764
+ initializePAR,
765
+ generatePKCE: function() {
766
+ var _ref9 = _asyncToGenerator(function* () {
767
+ if (responseType !== "token" || completionStrategy !== "client") return;
768
+ return yield generatePKCE();
769
+ });
770
+ return function generatePKCE() {
771
+ return _ref9.apply(this, arguments);
772
+ };
773
+ }(),
774
+ buildOptions,
775
+ handleResponse,
776
+ responseType,
777
+ completionStrategy,
778
+ result,
779
+ claims,
780
+ domain: client.domain,
781
+ redirectUri: defaultRedirectUri(props.redirectUri),
782
+ action,
783
+ message,
784
+ pkce,
785
+ store: pkceStore,
786
+ isLoading,
787
+ isInitializing,
788
+ acrValues: configuration ? filterAcrValues(configuration.acr_values_supported) : void 0,
789
+ client,
790
+ uiLocales,
791
+ loginHint
792
+ };
793
+ }, [
794
+ client,
795
+ props.redirectUri,
796
+ responseType,
797
+ completionStrategy,
798
+ result,
799
+ claims,
800
+ action,
801
+ message,
802
+ pkce,
803
+ props.state,
804
+ props.prompt,
805
+ isLoading,
806
+ isInitializing,
807
+ handleResponse,
808
+ logout,
809
+ configuration,
810
+ uiLocales,
811
+ checkSession,
812
+ loginHint
813
+ ]);
814
+ useEffect(() => {
815
+ setIsInitializing(false);
816
+ if (!client.redirect.hasMatch()) {
817
+ refreshPKCE();
818
+ return;
819
+ }
820
+ let isSubscribed = true;
821
+ setIsLoading(true);
822
+ const params = parseAuthorizeResponseFromLocation(window.location);
823
+ if (params.code && responseType === "code") {
824
+ setIsLoading(false);
825
+ setResult({
826
+ code: params.code,
827
+ source: "redirect",
828
+ state: params.state
829
+ });
830
+ refreshPKCE();
831
+ return;
832
+ }
833
+ _asyncToGenerator(function* () {
834
+ yield Promise.resolve();
835
+ if (!isSubscribed) return;
836
+ try {
837
+ const response = yield client.redirect.match();
838
+ if (!isSubscribed) return;
839
+ if (response === null || response === void 0 ? void 0 : response.code) setResult({
840
+ code: response.code,
841
+ source: "redirect",
842
+ state: response.state
843
+ });
844
+ else if (response === null || response === void 0 ? void 0 : response.id_token) {
845
+ setResult({
846
+ id_token: response.id_token,
847
+ source: "redirect",
848
+ state: response.state
849
+ });
850
+ sessionStore === null || sessionStore === void 0 || sessionStore.setItem(SESSION_KEY, response.id_token);
851
+ resetRedirectState(window);
852
+ } else setResult(null);
853
+ } catch (err) {
854
+ if (!isSubscribed) return;
855
+ if (err instanceof OAuth2Error$1) setResult(err);
856
+ else if (err instanceof Error) setResult(err);
857
+ else {
858
+ var _err$toString;
859
+ setResult(new Error((_err$toString = err === null || err === void 0 ? void 0 : err.toString()) !== null && _err$toString !== void 0 ? _err$toString : "Unknown error ocurred"));
860
+ }
861
+ } finally {
862
+ if (!isSubscribed) return;
863
+ setIsLoading(false);
864
+ refreshPKCE();
865
+ }
866
+ })();
867
+ return () => {
868
+ isSubscribed = false;
869
+ };
870
+ }, [props.pkce, responseType]);
871
+ useEffect(() => {
872
+ if (!sessionStore || claims) return;
873
+ if (!claims) {
874
+ const token = sessionStore.getItem(SESSION_KEY);
875
+ if (!token) return;
876
+ setResult({ id_token: token });
877
+ return;
878
+ }
879
+ }, [sessionStore, claims]);
880
+ useEffect(() => {
881
+ if (!claims) return;
882
+ if (!sessionStore) return;
883
+ const interval = setInterval(() => {
884
+ const now = Date.now();
885
+ if (claims.exp < now / 1e3) {
886
+ setResult(null);
887
+ sessionStore === null || sessionStore === void 0 || sessionStore.removeItem(SESSION_KEY);
888
+ return;
889
+ }
890
+ }, 5e3);
891
+ return () => clearInterval(interval);
892
+ }, [
893
+ sessionStore,
894
+ claims,
895
+ result
896
+ ]);
897
+ /**
898
+ * Fresh page load SSO check
899
+ */
900
+ useEffect(() => {
901
+ setIsInitializing(false);
902
+ if (!sessionStore) return;
903
+ if (client.redirect.hasMatch()) return;
904
+ if (sessionStore.getItem(SESSION_KEY)) return;
905
+ let isSubscribed = true;
906
+ setIsLoading(true);
907
+ checkSession().catch((err) => {
908
+ console.error("session silent check error", err);
909
+ }).finally(() => {
910
+ if (isSubscribed) setIsLoading(false);
911
+ });
912
+ return () => {
913
+ isSubscribed = false;
914
+ };
915
+ }, [sessionStore, client]);
916
+ return /* @__PURE__ */ jsx(CriiptoVerifyContext.Provider, {
917
+ value: context,
918
+ children: props.children
919
+ });
920
+ };
921
+ function resetRedirectState(window) {
922
+ const url = new URL(window.location.href);
923
+ url.searchParams.delete("code");
924
+ url.searchParams.delete("state");
925
+ window.history.replaceState({}, window.document.title, url.pathname + url.search);
926
+ }
927
+ //#endregion
928
+ //#region src/device.ts
929
+ function getUserAgent(userAgent) {
930
+ if (!userAgent) return null;
931
+ return UAParser(userAgent);
932
+ }
933
+ //#endregion
934
+ //#region src/components/SEBankIDSameDeviceButton/usePoll.ts
935
+ function usePoll$1({ shouldPoll, pollUrl, onComplete, onError }) {
936
+ useEffect(() => {
937
+ if (!shouldPoll) return;
938
+ let isSubscribed = true;
939
+ const poll = function() {
940
+ var _ref = _asyncToGenerator(function* () {
941
+ if (!isSubscribed) return;
942
+ const response = yield fetch(pollUrl);
943
+ if (response.status === 202) {
944
+ setTimeout(poll, 1e3);
945
+ return;
946
+ } else if (response.status >= 400) {
947
+ if (!isSubscribed) return;
948
+ onError(yield response.text());
949
+ return;
950
+ } else {
951
+ if (!isSubscribed) return;
952
+ const { targetUrl } = yield response.json();
953
+ onComplete(targetUrl);
954
+ return;
955
+ }
956
+ });
957
+ return function poll() {
958
+ return _ref.apply(this, arguments);
959
+ };
960
+ }();
961
+ setTimeout(poll, 1e3);
962
+ return () => {
963
+ isSubscribed = false;
964
+ };
965
+ }, [shouldPoll, pollUrl]);
966
+ }
967
+ //#endregion
968
+ //#region src/components/SEBankIDSameDeviceButton/Poll.tsx
969
+ function SEBankIDSameDevicePoll(props) {
970
+ const { links, onError, onComplete, onInitiate } = props;
971
+ const [initiated, setInitiated] = useState(false);
972
+ const { domain } = useContext(CriiptoVerifyContext);
973
+ usePoll$1(_objectSpread2(_objectSpread2({}, props), {}, {
974
+ shouldPoll: initiated,
975
+ pollUrl: links.pollUrl
976
+ }));
977
+ const handleInitiate = () => {
978
+ onInitiate();
979
+ setInitiated(true);
980
+ };
981
+ return React.cloneElement(props.children, _objectSpread2(_objectSpread2({}, props.children.props), {}, { onClick: handleInitiate }));
982
+ }
983
+ //#endregion
984
+ //#region src/hooks/usePageVisibility.ts
985
+ function usePageVisibility(onVisible, deps = []) {
986
+ const visibilityState = useRef(document.visibilityState);
987
+ const [state, setState] = useState(visibilityState.current);
988
+ useEffect(() => {
989
+ document.addEventListener("visibilitychange", _handleVisibilityChange);
990
+ return () => {
991
+ document.removeEventListener("visibilitychange", _handleVisibilityChange);
992
+ };
993
+ }, deps);
994
+ const _handleVisibilityChange = () => {
995
+ const nextState = document.visibilityState;
996
+ if (visibilityState.current === "hidden" && nextState === "visible") {
997
+ if (onVisible) onVisible();
998
+ }
999
+ visibilityState.current = nextState;
1000
+ setState(visibilityState.current);
1001
+ };
1002
+ return state;
1003
+ }
1004
+ //#endregion
1005
+ //#region src/components/SEBankIDSameDeviceButton/Foreground.tsx
1006
+ function SEBankIDSameDeviceForeground(props) {
1007
+ const { links, onInitiate, onLog } = props;
1008
+ const [initiated, setInitiated] = useState(false);
1009
+ const [result, setResult] = useState(null);
1010
+ const onComplete = useCallback((completeUrl) => setResult({ result: completeUrl }), []);
1011
+ const onError = useCallback((error) => setResult({ error }), []);
1012
+ const visibility = usePageVisibility(() => {
1013
+ onLog("ForegroundStrategy", "onForeground", initiated.toString());
1014
+ }, [initiated]);
1015
+ useEffect(() => {
1016
+ if (result && visibility === "visible") {
1017
+ if ("result" in result) props.onComplete(result.result);
1018
+ else if ("error" in result) props.onError(result.error);
1019
+ setResult(null);
1020
+ }
1021
+ }, [result, visibility]);
1022
+ usePoll$1({
1023
+ shouldPoll: initiated,
1024
+ pollUrl: links.pollUrl,
1025
+ onComplete,
1026
+ onError
1027
+ });
1028
+ const handleInitiate = () => {
1029
+ onLog("ForegroundStrategy", "handleInitiate");
1030
+ onInitiate();
1031
+ setInitiated(true);
1032
+ };
1033
+ return React.cloneElement(props.children, _objectSpread2(_objectSpread2({}, props.children.props), {}, { onClick: handleInitiate }));
1034
+ }
1035
+ //#endregion
1036
+ //#region src/components/SEBankIDSameDeviceButton/shared.ts
1037
+ const STATE_KEY = "@criipto/verify-react:sebankid:state";
1038
+ const stateStore = (() => {
1039
+ const sessionStorage = trySessionStorage();
1040
+ if (sessionStorage === null) {
1041
+ console.warn("Creating memory store for PKCE values as no sessionStorage is available. Authentication may be broken.");
1042
+ return createMemoryStorage();
1043
+ }
1044
+ return sessionStorage;
1045
+ })();
1046
+ function hydrateState() {
1047
+ const rawState = stateStore.getItem(STATE_KEY);
1048
+ if (rawState) return JSON.parse(rawState);
1049
+ }
1050
+ const autoHydratedState = hydrateState();
1051
+ function clearState() {
1052
+ stateStore.removeItem(STATE_KEY);
1053
+ }
1054
+ function saveState(input) {
1055
+ stateStore.setItem(STATE_KEY, JSON.stringify(input));
1056
+ }
1057
+ //#endregion
1058
+ //#region src/components/SEBankIDSameDeviceButton/Reload.tsx
1059
+ function SEBankIDSameDeviceReload(props) {
1060
+ const { links, onError, onComplete, onInitiate, onLog, pkce, redirectUri } = props;
1061
+ const handleInitiate = () => {
1062
+ onLog("ReloadStrategy", "handleInitiate");
1063
+ saveState({
1064
+ links,
1065
+ redirectUri,
1066
+ pkce
1067
+ });
1068
+ onInitiate();
1069
+ };
1070
+ useEffect(() => {
1071
+ const hydratedState = hydrateState();
1072
+ if (!hydratedState) return;
1073
+ clearState();
1074
+ onComplete(hydratedState.links.completeUrl);
1075
+ }, []);
1076
+ return React.cloneElement(props.children, _objectSpread2(_objectSpread2({}, props.children.props), {}, { onClick: handleInitiate }));
1077
+ }
1078
+ //#endregion
1079
+ //#region src/components/SEBankIDQRCode/logo@2x.png
1080
+ var logo_2x_default = "data:image/png;base64,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";
1081
+ //#endregion
1082
+ //#region src/components/SEBankIDQRCode.tsx
1083
+ function searchParamsToPOJO$1(input) {
1084
+ return Array.from(input.keys()).reduce((memo, key) => {
1085
+ memo[key] = input.get(key);
1086
+ return memo;
1087
+ }, {});
1088
+ }
1089
+ function SEBankIDQrCode(props) {
1090
+ var _ref, _props$language, _window$innerHeight, _wrapperRef$current, _wrapperRef$current2, _props$qrMargin;
1091
+ const wrapperRef = useRef(null);
1092
+ const { buildAuthorizeUrl, completionStrategy, handleResponse, generatePKCE, redirectUri: defaultRedirectURi, uiLocales } = useContext(CriiptoVerifyContext);
1093
+ const language = (_ref = (_props$language = props.language) !== null && _props$language !== void 0 ? _props$language : uiLocales) !== null && _ref !== void 0 ? _ref : "en";
1094
+ const redirectUri = props.redirectUri || defaultRedirectURi;
1095
+ const [qrCode, setQrCode] = useState(null);
1096
+ const [pollUrl, setPollUrl] = useState(null);
1097
+ const [error, setError] = useState(null);
1098
+ const [pkce, setPKCE] = useState(void 0);
1099
+ const [isCompleting, setCompleting] = useState(false);
1100
+ const [fullscreen, setFullscreen] = useState(false);
1101
+ const refresh = useCallback(_asyncToGenerator(function* () {
1102
+ setError(null);
1103
+ setQrCode(null);
1104
+ setPollUrl(null);
1105
+ setPKCE(void 0);
1106
+ const pkce = yield generatePKCE();
1107
+ buildAuthorizeUrl({
1108
+ acrValues: "urn:grn:authn:se:bankid:another-device:qr",
1109
+ responseMode: "json",
1110
+ pkce,
1111
+ redirectUri,
1112
+ prompt: "login"
1113
+ }).then((url) => {
1114
+ return fetch(url).then((response) => response.json());
1115
+ }).then((response) => {
1116
+ setPKCE(pkce);
1117
+ setQrCode(response.initialQrCode);
1118
+ setPollUrl(response.pollUrl);
1119
+ }).catch(console.error);
1120
+ }), [buildAuthorizeUrl, redirectUri]);
1121
+ useEffect(() => {
1122
+ refresh();
1123
+ }, [refresh]);
1124
+ const handleRetry = () => {
1125
+ setCompleting(false);
1126
+ refresh();
1127
+ };
1128
+ const handleError = useCallback((error) => {
1129
+ if (error === "Collect failed: startFailed" || error === "\"Collect failed: startFailed\"") {
1130
+ handleRetry();
1131
+ return;
1132
+ }
1133
+ setError(new Error(error));
1134
+ handleResponse(new Error(error), {
1135
+ pkce,
1136
+ redirectUri,
1137
+ source: "SEBankIDQrCode"
1138
+ });
1139
+ }, [pkce, redirectUri]);
1140
+ const handleComplete = useCallback(function() {
1141
+ var _ref2 = _asyncToGenerator(function* (completeUrl) {
1142
+ setCompleting(true);
1143
+ const required = { pkce };
1144
+ const parsed = yield parseCompleteUrl(completeUrl);
1145
+ if (parsed instanceof Error) return handleError(parsed.message);
1146
+ const { location, response } = parsed;
1147
+ if (completionStrategy === "openidprovider") {
1148
+ window.location.href = location;
1149
+ return;
1150
+ }
1151
+ yield handleResponse(response, {
1152
+ pkce: required.pkce,
1153
+ redirectUri,
1154
+ source: "SEBankIDQrCode"
1155
+ });
1156
+ });
1157
+ return function(_x) {
1158
+ return _ref2.apply(this, arguments);
1159
+ };
1160
+ }(), [completionStrategy, pkce]);
1161
+ /**
1162
+ * Render QR codes
1163
+ */
1164
+ const qrDataURL = useDraw(qrCode, {
1165
+ width: fullscreen ? (_window$innerHeight = window.innerHeight) !== null && _window$innerHeight !== void 0 ? _window$innerHeight : (_wrapperRef$current = wrapperRef.current) === null || _wrapperRef$current === void 0 ? void 0 : _wrapperRef$current.offsetWidth : (_wrapperRef$current2 = wrapperRef.current) === null || _wrapperRef$current2 === void 0 ? void 0 : _wrapperRef$current2.offsetWidth,
1166
+ qrMargin: (_props$qrMargin = props.qrMargin) !== null && _props$qrMargin !== void 0 ? _props$qrMargin : fullscreen ? 2 : void 0
1167
+ });
1168
+ /**
1169
+ * Poll for response
1170
+ */
1171
+ usePoll(pollUrl, {
1172
+ enabled: !isCompleting,
1173
+ onQrCode: setQrCode,
1174
+ onComplete: handleComplete,
1175
+ onError: handleError
1176
+ });
1177
+ const i18n = getI18n(language);
1178
+ const imageElement = /* @__PURE__ */ jsx("button", {
1179
+ "aria-label": i18n.thisIsTheQR,
1180
+ ref: wrapperRef,
1181
+ className: "criipto-se-bankid-qr-canvas",
1182
+ onClick: () => setFullscreen((val) => !val),
1183
+ children: qrDataURL ? /* @__PURE__ */ jsx("img", { src: qrDataURL }) : null
1184
+ });
1185
+ const qrElement = /* @__PURE__ */ jsxs("div", {
1186
+ className: "criipto-se-bankid-qr",
1187
+ children: [/* @__PURE__ */ jsxs("aside", {
1188
+ className: "criipto-se-bankid-qr--help-text",
1189
+ children: [isCompleting ? i18n.completingLogin : i18n.openAndScan, /* @__PURE__ */ jsx("img", { src: logo_2x_default })]
1190
+ }), imageElement]
1191
+ });
1192
+ if (!qrCode && props.fallback) return props.fallback;
1193
+ if (props.children) return props.children({
1194
+ qrElement,
1195
+ imageElement,
1196
+ error,
1197
+ isCompleting,
1198
+ retry: () => handleRetry(),
1199
+ fullscreen
1200
+ });
1201
+ if (fullscreen) return /* @__PURE__ */ jsx("dialog", {
1202
+ className: "criipto-se-bankid-qr-fullscreen",
1203
+ open: true,
1204
+ children: imageElement
1205
+ });
1206
+ return qrElement;
1207
+ }
1208
+ SEBankIDQrCode.acr_values = "urn:grn:authn:se:bankid:another-device:qr";
1209
+ function useDraw(qrCode, options) {
1210
+ const { width, qrMargin } = options;
1211
+ const [dataURL, setDataURL] = useState(null);
1212
+ useEffect(() => {
1213
+ if (!qrCode) return;
1214
+ let isSubscribed = true;
1215
+ _asyncToGenerator(function* () {
1216
+ const qrImage = yield QRCode$1.toDataURL(qrCode, {
1217
+ errorCorrectionLevel: "low",
1218
+ scale: 10,
1219
+ width,
1220
+ margin: qrMargin !== null && qrMargin !== void 0 ? qrMargin : 4
1221
+ });
1222
+ if (!isSubscribed) return;
1223
+ setDataURL(qrImage);
1224
+ })();
1225
+ return () => {
1226
+ isSubscribed = false;
1227
+ };
1228
+ }, [
1229
+ qrCode,
1230
+ qrMargin,
1231
+ width
1232
+ ]);
1233
+ return dataURL;
1234
+ }
1235
+ function usePoll(pollUrl, options) {
1236
+ const { onQrCode, onComplete, onError, enabled } = options;
1237
+ useEffect(() => {
1238
+ if (!pollUrl) return;
1239
+ if (!enabled) return;
1240
+ const delay = 2500;
1241
+ let timeout;
1242
+ let isSubscribed = true;
1243
+ const poll = function() {
1244
+ var _ref3 = _asyncToGenerator(function* () {
1245
+ if (!isSubscribed) return;
1246
+ const response = yield fetch(pollUrl);
1247
+ if (!isSubscribed) return;
1248
+ if (response.status < 400) {
1249
+ const payload = yield response.json();
1250
+ if (payload.qrCode) onQrCode(payload.qrCode);
1251
+ if (payload.targetUrl) {
1252
+ onComplete(payload.targetUrl);
1253
+ return;
1254
+ }
1255
+ } else onError(yield response.text());
1256
+ if (response.status === 202) timeout = setTimeout(poll, delay);
1257
+ });
1258
+ return function poll() {
1259
+ return _ref3.apply(this, arguments);
1260
+ };
1261
+ }();
1262
+ timeout = setTimeout(poll, delay);
1263
+ return () => {
1264
+ isSubscribed = false;
1265
+ clearTimeout(timeout);
1266
+ };
1267
+ }, [
1268
+ pollUrl,
1269
+ onQrCode,
1270
+ onComplete,
1271
+ onError,
1272
+ enabled
1273
+ ]);
1274
+ }
1275
+ function parseCompleteUrl(_x2) {
1276
+ return _parseCompleteUrl.apply(this, arguments);
1277
+ }
1278
+ function _parseCompleteUrl() {
1279
+ _parseCompleteUrl = _asyncToGenerator(function* (completeUrl) {
1280
+ /**
1281
+ * Handle verify response inconsistencies
1282
+ */
1283
+ if (completeUrl.includes("error=")) return {
1284
+ location: completeUrl,
1285
+ response: searchParamsToPOJO$1(new URL(completeUrl).searchParams)
1286
+ };
1287
+ const completeResponse = yield fetch(completeUrl);
1288
+ if (completeResponse.status >= 400) return new Error(yield completeResponse.text());
1289
+ const { location } = yield completeResponse.json();
1290
+ return {
1291
+ location,
1292
+ response: searchParamsToPOJO$1(new URL(location).searchParams)
1293
+ };
1294
+ });
1295
+ return _parseCompleteUrl.apply(this, arguments);
1296
+ }
1297
+ const AuthButtonGroupContext = createContext({
1298
+ multiple: false,
1299
+ acrValues: [],
1300
+ disabled: false,
1301
+ setDisabled: () => {}
1302
+ });
1303
+ function AuthButtonGroup(props) {
1304
+ const acrValues = React.Children.toArray(props.children).flatMap((child) => {
1305
+ if (!child || typeof child !== "object") return [];
1306
+ if ("type" in child) {
1307
+ if (child.type === AuthMethodButtonContainer) {
1308
+ const props = child.props;
1309
+ return props.acrValue ? [props.acrValue] : [];
1310
+ }
1311
+ if (child.type === AuthMethodButtonComponent) {
1312
+ const props = child.props;
1313
+ return props.acrValue ? [props.acrValue] : [];
1314
+ }
1315
+ if (child.type === SEBankIDQrCode) return ["urn:grn:authn:se:bankid:another-device:qr"];
1316
+ }
1317
+ return [];
1318
+ });
1319
+ const [disabled, setDisabled] = useState(false);
1320
+ const context = {
1321
+ multiple: acrValues.length > 1,
1322
+ acrValues,
1323
+ disabled,
1324
+ setDisabled
1325
+ };
1326
+ return /* @__PURE__ */ jsx(AuthButtonGroupContext.Provider, {
1327
+ value: context,
1328
+ children: props.children
1329
+ });
1330
+ }
1331
+ //#endregion
1332
+ //#region src/components/Spinner/Spinner.tsx
1333
+ function Spinner() {
1334
+ return /* @__PURE__ */ jsx("div", { className: "criipto-eid-loader" });
1335
+ }
1336
+ //#endregion
1337
+ //#region src/components/SEBankIDSameDeviceButton.tsx
1338
+ function searchParamsToPOJO(input) {
1339
+ return Array.from(input.keys()).reduce((memo, key) => {
1340
+ memo[key] = input.get(key);
1341
+ return memo;
1342
+ }, {});
1343
+ }
1344
+ function determineStrategy(input, loginHint) {
1345
+ var _userAgent$browser$na;
1346
+ const userAgent = getUserAgent(input);
1347
+ const mobileOS = (userAgent === null || userAgent === void 0 ? void 0 : userAgent.os.name) === "iOS" ? "iOS" : (userAgent === null || userAgent === void 0 ? void 0 : userAgent.os.name) === "Android" ? "android" : (userAgent === null || userAgent === void 0 ? void 0 : userAgent.browser.name) === "Samsung Internet" ? "android" : null;
1348
+ const iOSSafari = mobileOS === "iOS" && (userAgent === null || userAgent === void 0 || (_userAgent$browser$na = userAgent.browser.name) === null || _userAgent$browser$na === void 0 ? void 0 : _userAgent$browser$na.includes("Safari")) ? true : false;
1349
+ const androidChrome = mobileOS === "android" && (userAgent === null || userAgent === void 0 ? void 0 : userAgent.browser.name) === "Mobile Chrome" ? true : false;
1350
+ const redirect = iOSSafari && !(loginHint === null || loginHint === void 0 ? void 0 : loginHint.includes("appswitch:resumeUrl:disable"));
1351
+ return {
1352
+ resume: mobileOS ? iOSSafari && redirect ? "Reload" : "Foreground" : "Poll",
1353
+ linkType: mobileOS === "iOS" || androidChrome ? "universal" : "scheme",
1354
+ redirect
1355
+ };
1356
+ }
1357
+ var NotDoneError = class extends Error {
1358
+ constructor(message) {
1359
+ super(message);
1360
+ this.name = "NotDoneError";
1361
+ }
1362
+ };
1363
+ function fetchComplete(_x) {
1364
+ return _fetchComplete.apply(this, arguments);
1365
+ }
1366
+ function _fetchComplete() {
1367
+ _fetchComplete = _asyncToGenerator(function* (completeUrl) {
1368
+ const completeResponse = yield fetch(completeUrl);
1369
+ if (completeResponse.status >= 400) {
1370
+ const errorMessage = yield completeResponse.text();
1371
+ if (errorMessage.includes("Native-app driven authentication is not done")) return new NotDoneError(errorMessage);
1372
+ return new Error(errorMessage);
1373
+ }
1374
+ const { location } = yield completeResponse.json();
1375
+ return { location };
1376
+ });
1377
+ return _fetchComplete.apply(this, arguments);
1378
+ }
1379
+ function SEBankIDSameDeviceButton(props) {
1380
+ var _autoHydratedState$li, _autoHydratedState$pk;
1381
+ const { loginHint } = useContext(CriiptoVerifyContext);
1382
+ const group = useContext(AuthButtonGroupContext);
1383
+ const rawUserAgent = typeof navigator !== "undefined" ? navigator.userAgent : props.userAgent;
1384
+ const strategy = useMemo(() => determineStrategy(rawUserAgent, loginHint), [rawUserAgent, loginHint]);
1385
+ const [href, setHref] = useState();
1386
+ const [links, setLinks] = useState((_autoHydratedState$li = autoHydratedState === null || autoHydratedState === void 0 ? void 0 : autoHydratedState.links) !== null && _autoHydratedState$li !== void 0 ? _autoHydratedState$li : null);
1387
+ const [pkce, setPKCE] = useState((_autoHydratedState$pk = autoHydratedState === null || autoHydratedState === void 0 ? void 0 : autoHydratedState.pkce) !== null && _autoHydratedState$pk !== void 0 ? _autoHydratedState$pk : void 0);
1388
+ const [error, setError] = useState(null);
1389
+ const [log, setLog] = useState([]);
1390
+ const [initiated, setInitiated] = useState(autoHydratedState ? true : false);
1391
+ const { buildAuthorizeUrl, completionStrategy, generatePKCE, handleResponse, redirectUri: defaultRedirectURi, domain } = useContext(CriiptoVerifyContext);
1392
+ const redirectUri = props.redirectUri || defaultRedirectURi;
1393
+ const disabled = props.disabled || group.disabled || initiated;
1394
+ const reset = () => {
1395
+ setPKCE(void 0);
1396
+ setLinks(null);
1397
+ };
1398
+ const handleLog = (...statements) => {
1399
+ setLog((logs) => logs.concat([statements]));
1400
+ };
1401
+ const handleComplete = useCallback(function() {
1402
+ var _ref = _asyncToGenerator(function* (completeUrl) {
1403
+ const required = { pkce };
1404
+ reset();
1405
+ const result = completeUrl.startsWith(`https://${domain}`) || completeUrl.startsWith(`http://${domain}`) ? yield fetchComplete(completeUrl) : { location: completeUrl };
1406
+ if (result instanceof NotDoneError && strategy.resume === "Reload") {
1407
+ yield handleResponse({ error: "access_denied" }, {
1408
+ pkce: required.pkce,
1409
+ redirectUri,
1410
+ source: "SEBankIDSameDeviceButton"
1411
+ });
1412
+ return;
1413
+ }
1414
+ if (result instanceof Error) {
1415
+ setError(result.message);
1416
+ return;
1417
+ }
1418
+ const { location } = result;
1419
+ if (completionStrategy === "openidprovider") {
1420
+ window.location.href = location;
1421
+ return;
1422
+ }
1423
+ yield handleResponse(searchParamsToPOJO(new URL(location).searchParams), {
1424
+ pkce: required.pkce,
1425
+ redirectUri,
1426
+ source: "SEBankIDSameDeviceButton"
1427
+ });
1428
+ });
1429
+ return function(_x2) {
1430
+ return _ref.apply(this, arguments);
1431
+ };
1432
+ }(), [
1433
+ completionStrategy,
1434
+ pkce,
1435
+ domain,
1436
+ strategy
1437
+ ]);
1438
+ const refresh = useCallback(_asyncToGenerator(function* () {
1439
+ handleLog("SEBankID: Refresh authorize url");
1440
+ const pkce = yield generatePKCE();
1441
+ buildAuthorizeUrl({
1442
+ acrValues: "urn:grn:authn:se:bankid:same-device",
1443
+ loginHint: (loginHint === null || loginHint === void 0 ? void 0 : loginHint.includes("appswitch:")) ? void 0 : "appswitch:browser",
1444
+ responseMode: "json",
1445
+ pkce,
1446
+ redirectUri,
1447
+ prompt: "login"
1448
+ }).then((url) => {
1449
+ return fetch(url).then((response) => response.json());
1450
+ }).then((links) => {
1451
+ setPKCE(pkce || void 0);
1452
+ setLinks(links);
1453
+ const redirect = strategy.redirect ? window.location.href : "null";
1454
+ const newUrl = new URL(strategy.linkType === "universal" ? links.launchLinks.universalLink : links.launchLinks.customFileHandlerUrl);
1455
+ newUrl.searchParams.set("redirect", redirect);
1456
+ const newHref = newUrl.href;
1457
+ handleLog(window.location.href);
1458
+ handleLog(newHref);
1459
+ setHref(newHref);
1460
+ }).catch((err) => {
1461
+ setInitiated(false);
1462
+ });
1463
+ }), [
1464
+ buildAuthorizeUrl,
1465
+ redirectUri,
1466
+ strategy
1467
+ ]);
1468
+ useEffect(() => {
1469
+ if (initiated) return;
1470
+ refresh();
1471
+ }, [refresh, initiated]);
1472
+ useEffect(() => {
1473
+ if (initiated) return;
1474
+ const interval = setInterval(() => {
1475
+ if (initiated) return;
1476
+ refresh();
1477
+ }, 25e3);
1478
+ return () => clearInterval(interval);
1479
+ }, [refresh, initiated]);
1480
+ const handleInitiate = () => {
1481
+ group.setDisabled(true);
1482
+ handleLog("Initiated");
1483
+ setInitiated(true);
1484
+ setError(null);
1485
+ };
1486
+ const handleError = function() {
1487
+ var _ref2 = _asyncToGenerator(function* (error) {
1488
+ group.setDisabled(false);
1489
+ setInitiated(false);
1490
+ setError(error);
1491
+ if (error === "access_denied" || error === "\"access_denied\"") yield handleResponse({ error: "access_denied" }, {
1492
+ pkce,
1493
+ redirectUri,
1494
+ source: "SEBankIDSameDeviceButton"
1495
+ });
1496
+ });
1497
+ return function handleError(_x3) {
1498
+ return _ref2.apply(this, arguments);
1499
+ };
1500
+ }();
1501
+ const element = href ? /* @__PURE__ */ jsxs("a", {
1502
+ className: classNames(props.className, { "criipto-eid-btn--disabled": disabled }),
1503
+ href,
1504
+ onClick: handleInitiate,
1505
+ children: [initiated ? /* @__PURE__ */ jsx("div", {
1506
+ className: "criipto-eid-logo",
1507
+ children: /* @__PURE__ */ jsx(Spinner, {})
1508
+ }) : props.logo, props.children]
1509
+ }) : props.fallback;
1510
+ return /* @__PURE__ */ jsxs(React.Fragment, { children: [links ? /* @__PURE__ */ jsx(React.Fragment, { children: strategy.resume === "Poll" ? /* @__PURE__ */ jsx(SEBankIDSameDevicePoll, {
1511
+ links,
1512
+ onError: handleError,
1513
+ onComplete: handleComplete,
1514
+ onInitiate: handleInitiate,
1515
+ onLog: handleLog,
1516
+ children: element
1517
+ }) : strategy.resume === "Foreground" ? /* @__PURE__ */ jsx(SEBankIDSameDeviceForeground, {
1518
+ links,
1519
+ onError: handleError,
1520
+ onComplete: handleComplete,
1521
+ onInitiate: handleInitiate,
1522
+ onLog: handleLog,
1523
+ children: element
1524
+ }) : strategy.resume === "Reload" ? /* @__PURE__ */ jsx(SEBankIDSameDeviceReload, {
1525
+ links,
1526
+ onError: handleError,
1527
+ onComplete: handleComplete,
1528
+ onInitiate: handleInitiate,
1529
+ onLog: handleLog,
1530
+ redirectUri,
1531
+ pkce,
1532
+ children: element
1533
+ }) : element }) : element, error && /* @__PURE__ */ jsx("p", { children: error })] });
1534
+ }
1535
+ //#endregion
1536
+ //#region src/components/AuthMethodButton/logos/dkmitid.png
1537
+ var dkmitid_default = "data:image/png;base64,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";
1538
+ //#endregion
1539
+ //#region src/components/AuthMethodButton/logos/dkmitiderhverv.png
1540
+ var dkmitiderhverv_default = "data:image/png;base64,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";
1541
+ //#endregion
1542
+ //#region src/components/AuthMethodButton/logos/ftnmobile.png
1543
+ var ftnmobile_default = "data:image/png;base64,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";
1544
+ //#endregion
1545
+ //#region src/components/AuthMethodButton/logos/itsme.png
1546
+ var itsme_default = "data:image/png;base64,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";
1547
+ //#endregion
1548
+ //#region src/components/AuthMethodButton/logos/nobankid.png
1549
+ var nobankid_default = "data:image/png;base64,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";
1550
+ //#endregion
1551
+ //#region src/components/AuthMethodButton/logos/novipps.png
1552
+ var novipps_default = "data:image/png;base64,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";
1553
+ //#endregion
1554
+ //#region src/components/AuthMethodButton/logos/sebankid.png
1555
+ var sebankid_default = "data:image/png;base64,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";
1556
+ //#endregion
1557
+ //#region src/components/AuthMethodButton/logos/sefrejaid.png
1558
+ var sefrejaid_default = "data:image/png;base64,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";
1559
+ //#endregion
1560
+ //#region src/components/AuthMethodButton/logos/depersonalausweis.png
1561
+ var depersonalausweis_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALAAAABICAYAAABWdn8qAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAsKADAAQAAAABAAAASAAAAACoGQzqAAAHkUlEQVR4Ae2cjXXaSBSF463AJaiDdTpQKohTgUkFcQc4FdipAFJBshXgrcDZCsZbQdwB+12Q9nAk0DwJSejnvXMeSDN33u9lLAmSd+9cvAJeAa+AV8Ar4BXwCngFvALzqsDVvNLdZ7vdblOOPqK36HWmvI1SXola+v3q6mrN+6xkVgTOiLuiw0mhy6+F87GcFj98yuPrHIk8loY1jhPyLtFcfnPwgN40NjiQheSQoAs0oLncDyQ8D6ONCtBVNTiXJw60c01OyEsfylzSySU4x4TopnaokHX1Yeo1IE99QCWbqec6i/xoZL77hjkkTL7XqC6RJOkccp50jjRxo04ii0knepAcueaXEk8Hw344xgrQzHw3muR177GekHOKSl6OzfvYiCqw7+P2d58h4zMp+js2VsS0dY4vXUZIes27rfjdzkEF9n3cdnb9i32RRTveI/qCSkr+NKYJRJgVensQZuuH2A/otnXDbrDfCqiJSIlQ50aBzZy0+SXKzlH2UvKnGA4B2bHWrtDk3HiK67EZUCdwsTBjO1cTkRKhmuaBrRt0g1ZJyR/gULWAuRWaNI2ruA5bAXUCFwsztnM1ESkRqm4e2NClwqOMGaTkjzXBsE6QZd3YjuGxE2Ts2JyPjagCaiJSIlSdFFifyAZqlZI/Fgbr4gyb1ImxiM39Fcendv7H1BJqOx+IkGJTj6MStC9JcKSbvbQvh2P14wSu6BwEumN6g17iGbJ8brIYKqKc95QT+ET/s91vfWK6z+F1FkufPkfjywl8pFUQJmH4x5GpqqE3JtfoZ/QDWpRPDGjue3HCcP4ji8kAdcikKkDjJaWbqqokhdcio+hZ7gNqvswAq5tCrQmoVQLAOj6E31bl6XMjqICaiJgJDHapBUbRzmgmVbFcrBWR10Zfgj0WbZw6Bxu04NS8j4+kAmoiYiIwOBHKKvdtlQCH2o2tklj8YizIoAXrmAFXQE1ErARe7dDxl0XbKeNyEXe7Q2wsvkEGoS1Yxwy4AmoiEiUwGOvu+9BVusRg3YnTWAzKGXUCxwo19Hk1EbEQeLVDVr+sus4X95vqEHazT7E4QAUhYzifH3gF1ETEQuCwQ1a/JF2ni3v9JdCTjSqJ/s6XxUEGuo730vb9OTAdoM8pbwlaJWv+v4XXKkAbc5mPbxFbu98gRzCzmHYC79t8a+j2VwOmLUj0EgFHlpjbimewdpzA+9b8GenQcx+7bx4Dvt44fs7PT7zHYj6xbFrDTuB9P28ibf07Mt/F9F8Ro7GYI8unMT17AnP9e00rpVXyXDXZ0dxrxK6ug2NxR0yMf3r2BKaFFhK8XaDVvww+LbEbzIwX4gSOP31Qdy9BYAurnMCWKk0cM1RyWsruBLZUaeKYMRP4deK9iabnlxC2y4ObaCXbByQGk2P+8BnSi0NmT+DsmWuMCBYyxatdDxH70LxlsdezOjH07Amc9fNXpK8fI/NdTMd8xmLuIqbB2XQC71vyT6QzaZ/PXPGVEE8aiSkWc2T5NKadwPs+/jS0896AaQvyxWDIErPBjEMGXQF2M0nlzymZ17da0Z8wCtd1svjwn1PWKLLvwBQruxmK/XN3kXdVo7ZNoUsWxj4ovvs2re7Y1rGjSSp3YOUERte5FrnvqgY4X1oCAJPEYgATZCuG8/mBV0BNRKIEVhrgNgIb5K7ttPF5Z/AryMriG1wQ2IJ1zIAroCYiVgJbd2HZbG0nxtYXGTRKYik3toLsWbCOGXAF1ETERGClAfZpt8L2sgKWNE2ftbp5fESt8mT1hcEgo1a84wZaATURqUNgkSpokVECuEWd9MHLxxKNPfkA8r8Ejq6tfsAK7wS2FmyoODURMRNYeYBP0Drk2vngZYXeokmxHhrL5rTj1rUtfMlm0cfhOfiAOoEPizLGYzURqUVg5cmaxW5ls5eSP8XQzNRu1W3d2uf+6q4bG96fA5/oGM+G10x9PjHd5/BnYvnZp8Mx+XICV3QrI/EnIG8VsK6m5FPkXXflYAp2ncCRLma733tgrxFom9Py9cHJGy+pEzheI33VLEKJxN8M8HMh8vEen7/ONeTrJ1CB7MapdFPVNDXs6WnCJrN76q3kD2A4Bc7GN7ynTeMqrsNWQLfFcT8fWQXURKREqHPTwGaKrmX8iJT8gQlHcHo89gNNz42nuB6bAXUCFwsztnM1ESkRqq08sK0vJfTITWR+QSUlfxrTBBLQFao1123FUbSD7YA6gYuFGdu5moj87itufInQSdEfYzeaK453dY6vnXRl3+32VAG6GPatLJOqpxB6d0O+SZbzS+/Oe3Y4h6cQ+X/Mt+i5tpd0l2bO/71kEO67hQqwE6XZbqQbpt7+hLcQemMT5BmynBeNjfjC4VTgoKGPw4mqm0jIdZmRt3Qj2Y1Ht9p5BWhovgurt8vOHV7AAXnp5vFRCWayuEAY7rKrCtDUh7yzvAd0gSZd+evLLjnow7lEdYmUy31f/i/t5+rSAfTpn+4u8KcdOEFzeeNAOkZJCkE/c/6Vr6H1PguZFYHVUUic8Jaid+gNeo2OVfIP318k8HNOxB1rwzxur4BXwCvgFfAKeAW8Al4Br8C5FfgPpwkrxUTsg5UAAAAASUVORK5CYII=";
1562
+ //#endregion
1563
+ //#region src/components/AuthMethodButton/logos/ukoneid.png
1564
+ var ukoneid_default = "data:image/png;base64,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";
1565
+ //#endregion
1566
+ //#region src/components/AuthMethodButton/logos/idin.png
1567
+ var idin_default = "data:image/png;base64,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";
1568
+ //#endregion
1569
+ //#region src/components/AuthMethodButton/logos/ftn.png
1570
+ var ftn_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALAAAABICAYAAABWdn8qAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAsKADAAQAAAABAAAASAAAAACoGQzqAAADbUlEQVR4Ae2agVHbMBSGSa8DMIJH6Ab1BmWEdgLSCWImgE4AjNAJmhE6gkdgg/R/xXAc957tEMeWrE93hvCkSL8+/XlIdi4uKBCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCJxG4HA4NLrWUupTaAjC9wBEc0q/qb33U2qC0PNKYPf6ihchAQwcolm8olYG3S6uInEBGDjtBdrJxJdpS1xWHQZelv/Q6GZethI9lD731K2p6q8m83viCZm5roM+b4L4+/AYc26VhR83m43NgbJmAlro6C7E/dTz1liVLreMHct9sx/8M7bPl3bqhrsQLzD4vTgBO9BdLa4iQQHsgRNclEDSrUxs2xbKGwIY+A2MRF620vHoaKkU2zrxokMYOM3lbyTryZF2rSxcOfFiQxg4waXXHYdWsn450mwLMfmB1BknmxAGTnep7iTNy8J2oKvTlT2vMgw8L+/RoykLm3m9LGx93HOge0aJgZ85pPozysKVBG9TFT2nLgw8J+0jxxrIwhzoxLMUA0dPpfSfeFSpj/TelM2jLHypQW6nHCjHvkoxcI5r819zl4Wj71Zc6eNXZzu5CYRj4AkgnrsLmdiy8D4Yp+gsjIEDVyQYjrLwF2XhYg90GDhBp3qSlIX3inuPmK35Tia2PXFxhe8Dj1vydlyzs7eyTPtN13uz2t9W1+gqqhRjYGWwJveVtQOdMq093PC+CG+31R7Ups19nsfoZwtxDK0E2nYfxNaRYlnYM7bTdD0hDJznWv4IZNv97iqoW2UYA2e4rMrCe8m2yytF3VbDwJ4F8ohZFn5ypBb1cAMDOw7IIdQd1qJvqxWzF8bAObg11ninqtaprhX76sRXF8LAGS+psrBtIcIDXcZTGy0dA49GlWbDgQNdmqInVIWBJ4S5YFdRFl5Q0jxDY+B5OJ91lO5Ad3PWQRLtHAMnujAfkGUHOu+22ge6yuctGDiftepV2h3ofvY2WmElBl7RosrED5rOfkVTGpwKBh5ElF2DovbCGDg7f/YL7m6rRU/o+t9MLQQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAuMI/AMbHRP0yohB0QAAAABJRU5ErkJggg==";
1571
+ //#endregion
1572
+ //#region src/components/AuthMethodButton/Logo.tsx
1573
+ function AuthMethodButtonLogo(props) {
1574
+ var _props$logo;
1575
+ const logo = typeof props.logo === "string" ? /* @__PURE__ */ jsx("img", {
1576
+ src: props.logo,
1577
+ alt: ""
1578
+ }) : (_props$logo = props.logo) !== null && _props$logo !== void 0 ? _props$logo : acrValueToLogo(props.acrValue) ? /* @__PURE__ */ jsx("img", {
1579
+ src: acrValueToLogo(props.acrValue),
1580
+ alt: ""
1581
+ }) : /* @__PURE__ */ jsx("span", { children: "\xA0" });
1582
+ if (logo) return /* @__PURE__ */ jsx("div", {
1583
+ className: "criipto-eid-logo",
1584
+ children: logo
1585
+ });
1586
+ return null;
1587
+ }
1588
+ function acrValueToLogo(value) {
1589
+ if (value.startsWith("urn:grn:authn:dk:mitid:business")) return dkmitiderhverv_default;
1590
+ if (value.startsWith("urn:grn:authn:dk:mitid")) return dkmitid_default;
1591
+ if (value.startsWith("urn:grn:authn:fi:mobile")) return ftnmobile_default;
1592
+ if (value.startsWith("urn:grn:authn:fi")) return ftn_default;
1593
+ if (value.startsWith("urn:grn:authn:itsme")) return itsme_default;
1594
+ if (value.startsWith("urn:grn:authn:se:bankid")) return sebankid_default;
1595
+ if (value.startsWith("urn:grn:authn:no:bankid")) return nobankid_default;
1596
+ if (value.startsWith("urn:grn:authn:no:vipps")) return novipps_default;
1597
+ if (value.startsWith("urn:grn:authn:se:frejaid")) return sefrejaid_default;
1598
+ if (value.startsWith("urn:grn:authn:uk:oneid")) return ukoneid_default;
1599
+ if (value.startsWith("urn:grn:authn:de:personalausweis")) return depersonalausweis_default;
1600
+ if (value.startsWith("urn:grn:authn:nl:idin")) return idin_default;
1601
+ }
1602
+ //#endregion
1603
+ //#region src/components/Button.tsx
1604
+ function AnchorButton(props) {
1605
+ return /* @__PURE__ */ jsx("a", {
1606
+ className: classNames(`criipto-verify-button`, props.className),
1607
+ href: props.href,
1608
+ "aria-disabled": props.disabled,
1609
+ onClick: props.onClick,
1610
+ children: props.children
1611
+ });
1612
+ }
1613
+ function Button(props) {
1614
+ return /* @__PURE__ */ jsx("button", {
1615
+ className: classNames(`criipto-verify-button`, props.className),
1616
+ type: "button",
1617
+ disabled: props.disabled,
1618
+ onClick: props.onClick,
1619
+ children: props.children
1620
+ });
1621
+ }
1622
+ //#endregion
1623
+ //#region src/components/AuthMethodButton.tsx
1624
+ /**
1625
+ * Display only components, does no state management and triggers no login flows on it's own
1626
+ */
1627
+ function AuthMethodButtonComponent(props) {
1628
+ var _props$language, _props$action, _props$children;
1629
+ const { acrValue, href } = props;
1630
+ const group = useContext(AuthButtonGroupContext);
1631
+ const standalone = !group.multiple || isSingle(props.acrValue, group.acrValues);
1632
+ const language = (_props$language = props.language) !== null && _props$language !== void 0 ? _props$language : "en";
1633
+ const action = (_props$action = props.action) !== null && _props$action !== void 0 ? _props$action : "login";
1634
+ const disabled = (props.disabled || group.disabled) && !props.loading;
1635
+ const className = classNames(`criipto-eid-btn`, acrValueToClassName(acrValue), props.className, {
1636
+ "criipto-eid-btn--disabled": disabled,
1637
+ "criipto-eid-btn--loading": props.loading
1638
+ });
1639
+ const { title, subtitle } = acrValueToTitle(language, acrValue, { disambiguate: isAmbiguous(acrValue, group.acrValues) });
1640
+ const contents = (_props$children = props.children) !== null && _props$children !== void 0 ? _props$children : /* @__PURE__ */ jsxs(React.Fragment, { children: [
1641
+ stringifyAction(language, action) ? `${stringifyAction(language, action)} ` : "",
1642
+ title,
1643
+ "\xA0",
1644
+ standalone ? null : lowercaseFirst(subtitle)
1645
+ ] });
1646
+ const inner = /* @__PURE__ */ jsxs(React.Fragment, { children: [/* @__PURE__ */ jsx(AuthMethodButtonLogo, {
1647
+ acrValue,
1648
+ logo: props.loading ? /* @__PURE__ */ jsx(Spinner, {}) : props.logo
1649
+ }), /* @__PURE__ */ jsx("span", { children: contents })] });
1650
+ const commonProps = _objectSpread2(_objectSpread2({}, props), {}, {
1651
+ className,
1652
+ disabled
1653
+ });
1654
+ return href ? /* @__PURE__ */ jsx(React.Fragment, { children: /* @__PURE__ */ jsx(AnchorButton, _objectSpread2(_objectSpread2({}, commonProps), {}, {
1655
+ href,
1656
+ children: inner
1657
+ })) }) : /* @__PURE__ */ jsx(React.Fragment, { children: /* @__PURE__ */ jsx(Button, _objectSpread2(_objectSpread2({}, commonProps), {}, { children: inner })) });
1658
+ }
1659
+ function AuthMethodButtonContainer(props) {
1660
+ var _ref, _props$language2, _ref2, _props$action2, _props$loading, _props$children2;
1661
+ const { acrValue } = props;
1662
+ const group = useContext(AuthButtonGroupContext);
1663
+ const standalone = !group.multiple || isSingle(props.acrValue, group.acrValues);
1664
+ const context = useContext(CriiptoVerifyContext);
1665
+ const { initializePAR } = context;
1666
+ const language = (_ref = (_props$language2 = props.language) !== null && _props$language2 !== void 0 ? _props$language2 : context.uiLocales) !== null && _ref !== void 0 ? _ref : "en";
1667
+ const action = (_ref2 = (_props$action2 = props.action) !== null && _props$action2 !== void 0 ? _props$action2 : context.action) !== null && _ref2 !== void 0 ? _ref2 : "login";
1668
+ const className = `criipto-eid-btn ${acrValueToClassName(acrValue)}${props.className ? ` ${props.className}` : ""}`;
1669
+ const [backdrop, setBackdrop] = useState(null);
1670
+ const [loading, setLoading] = useState((_props$loading = props.loading) !== null && _props$loading !== void 0 ? _props$loading : false);
1671
+ useEffect(() => {
1672
+ var _props$loading2;
1673
+ setLoading((_props$loading2 = props.loading) !== null && _props$loading2 !== void 0 ? _props$loading2 : false);
1674
+ }, [props.loading]);
1675
+ const redirectUri = props.redirectUri || context.redirectUri;
1676
+ const handleClick = (event) => {
1677
+ if (props.href) return;
1678
+ if (context.pkce && "code_verifier" in context.pkce) savePKCEState(context.store, {
1679
+ response_type: "id_token",
1680
+ pkce_code_verifier: context.pkce.code_verifier,
1681
+ redirect_uri: redirectUri
1682
+ });
1683
+ if (props.popup) {
1684
+ let willPopup = typeof props.popup === "function" ? props.popup({
1685
+ acrValue,
1686
+ onHide: () => setBackdrop(null)
1687
+ }) : props.popup === true;
1688
+ if (willPopup !== false) {
1689
+ event.preventDefault();
1690
+ if (typeof willPopup === "boolean") context.loginWithPopup({
1691
+ acrValues: [acrValue],
1692
+ redirectUri,
1693
+ backdrop: true
1694
+ });
1695
+ else {
1696
+ setBackdrop(willPopup);
1697
+ context.loginWithPopup({
1698
+ acrValues: [acrValue],
1699
+ redirectUri,
1700
+ backdrop: false
1701
+ });
1702
+ }
1703
+ }
1704
+ }
1705
+ if (props.onClick) props.onClick(event);
1706
+ if (!event.isDefaultPrevented()) {
1707
+ setLoading(true);
1708
+ group.setDisabled(true);
1709
+ initializePAR({
1710
+ redirectUri,
1711
+ acrValues: acrValue,
1712
+ loginHint: ""
1713
+ }).then((authorizeUrl) => {
1714
+ window.location.href = authorizeUrl.toString();
1715
+ }).catch((error) => {
1716
+ setLoading(false);
1717
+ group.setDisabled(false);
1718
+ context.handleResponse(error);
1719
+ });
1720
+ }
1721
+ };
1722
+ const { title, subtitle } = acrValueToTitle(language, acrValue, { disambiguate: isAmbiguous(acrValue, group.acrValues) });
1723
+ const contents = (_props$children2 = props.children) !== null && _props$children2 !== void 0 ? _props$children2 : /* @__PURE__ */ jsxs(React.Fragment, { children: [
1724
+ stringifyAction(language, action) ? `${stringifyAction(language, action)} ` : "",
1725
+ title,
1726
+ "\xA0",
1727
+ standalone ? null : lowercaseFirst(subtitle)
1728
+ ] });
1729
+ const button = /* @__PURE__ */ jsxs(React.Fragment, { children: [/* @__PURE__ */ jsx(AuthMethodButtonComponent, _objectSpread2(_objectSpread2({}, props), {}, {
1730
+ className,
1731
+ onClick: handleClick,
1732
+ loading
1733
+ })), backdrop] });
1734
+ if (!props.href && acrValue === "urn:grn:authn:se:bankid:same-device") return /* @__PURE__ */ jsx(SEBankIDSameDeviceButton, {
1735
+ redirectUri: props.redirectUri,
1736
+ fallback: button,
1737
+ className,
1738
+ userAgent: props.userAgent,
1739
+ logo: /* @__PURE__ */ jsx(AuthMethodButtonLogo, {
1740
+ acrValue,
1741
+ logo: props.logo
1742
+ }),
1743
+ disabled: props.disabled,
1744
+ children: /* @__PURE__ */ jsx("span", { children: contents })
1745
+ });
1746
+ return button;
1747
+ }
1748
+ function acrValueToClassName(value) {
1749
+ value = value.replace("urn:grn:authn:", "");
1750
+ return value.split(":").reduce((memo, segment) => {
1751
+ if (memo.length) return memo.concat([`${memo[memo.length - 1]}-${segment}`]);
1752
+ else return memo.concat([segment]);
1753
+ }, []).map((className) => `criipto-eid-btn--${className}`).join(" ");
1754
+ }
1755
+ function lowercaseFirst(input) {
1756
+ if (!input) return input;
1757
+ return input.substring(0, 1).toLowerCase() + input.substr(1, input.length);
1758
+ }
1759
+ //#endregion
1760
+ //#region src/components/AuthMethodSelector.tsx
1761
+ function AuthMethodSelector(props) {
1762
+ var _ref, _props$acrValues;
1763
+ const { action, uiLocales, acrValues: configurationAcrValues } = useContext(CriiptoVerifyContext);
1764
+ const language = props.language || uiLocales || "en";
1765
+ const acrValues = filterAcrValues((_ref = (_props$acrValues = props.acrValues) !== null && _props$acrValues !== void 0 ? _props$acrValues : configurationAcrValues) !== null && _ref !== void 0 ? _ref : []);
1766
+ if (!!acrValues.length && acrValues.every((s) => s.startsWith("urn:grn:authn:se:bankid:"))) return /* @__PURE__ */ jsx(Sweden, _objectSpread2(_objectSpread2({}, props), {}, { acrValues }));
1767
+ return /* @__PURE__ */ jsx("div", {
1768
+ className: "criipto-eid-selector",
1769
+ children: /* @__PURE__ */ jsx(AuthButtonGroup, { children: acrValues.map((acrValue) => /* @__PURE__ */ jsx(AuthMethodButtonContainer, {
1770
+ acrValue,
1771
+ onClick: props.onSelect ? () => props.onSelect(acrValue) : void 0,
1772
+ redirectUri: props.redirectUri,
1773
+ popup: props.popup,
1774
+ language,
1775
+ action,
1776
+ userAgent: props.userAgent
1777
+ }, acrValue)) })
1778
+ });
1779
+ }
1780
+ function Sweden(props) {
1781
+ const { acrValues } = props;
1782
+ const { action, uiLocales } = useContext(CriiptoVerifyContext);
1783
+ const language = props.language || uiLocales || "en";
1784
+ const hasQR = acrValues.includes(SEBankIDQrCode.acr_values);
1785
+ const filteredAcrValues = acrValues.filter((s) => s !== SEBankIDQrCode.acr_values);
1786
+ const userAgent = getUserAgent(typeof navigator !== "undefined" ? navigator.userAgent : props.userAgent);
1787
+ const mobileOS = (userAgent === null || userAgent === void 0 ? void 0 : userAgent.os.name) === "iOS" ? "iOS" : (userAgent === null || userAgent === void 0 ? void 0 : userAgent.os.name) === "Android" ? "android" : null;
1788
+ const showQR = hasQR && !mobileOS;
1789
+ return /* @__PURE__ */ jsx("div", {
1790
+ className: "criipto-eid-selector",
1791
+ children: /* @__PURE__ */ jsxs(AuthButtonGroup, { children: [filteredAcrValues.map((acrValue) => /* @__PURE__ */ jsx(AuthMethodButtonContainer, {
1792
+ acrValue,
1793
+ onClick: props.onSelect ? () => props.onSelect(acrValue) : void 0,
1794
+ redirectUri: props.redirectUri,
1795
+ popup: props.popup,
1796
+ language,
1797
+ action,
1798
+ userAgent: props.userAgent
1799
+ }, acrValue)), showQR ? /* @__PURE__ */ jsx(SEBankIDQrCode, {
1800
+ language,
1801
+ redirectUri: props.redirectUri,
1802
+ fallback: /* @__PURE__ */ jsx(AuthMethodButtonContainer, {
1803
+ acrValue: SEBankIDQrCode.acr_values,
1804
+ popup: props.popup,
1805
+ language,
1806
+ action,
1807
+ userAgent: props.userAgent
1808
+ })
1809
+ }) : hasQR && mobileOS ? /* @__PURE__ */ jsx(AuthMethodButtonContainer, {
1810
+ acrValue: SEBankIDQrCode.acr_values,
1811
+ redirectUri: props.redirectUri,
1812
+ popup: props.popup,
1813
+ language,
1814
+ action,
1815
+ userAgent: props.userAgent
1816
+ }) : null] })
1817
+ });
1818
+ }
1819
+ //#endregion
1820
+ //#region src/components/QRCode.tsx
1821
+ const QRCode = (props) => {
1822
+ var _ref, _props$acrValues;
1823
+ const { children, margin, className } = props;
1824
+ const elementRef = useRef(null);
1825
+ const { client, buildOptions, buildAuthorizeUrl, handleResponse, pkce, store, acrValues: configurationAcrValues } = useContext(CriiptoVerifyContext);
1826
+ const [requestId, setRequestId] = useState(() => Math.random().toString());
1827
+ const [isAcknowledged, setAcknowledged] = useState(false);
1828
+ const [isCancelled, setCancelled] = useState(false);
1829
+ const [error, setError] = useState(null);
1830
+ const [criiptoConfiguration, setCriiptoConfiguration] = useState(null);
1831
+ const isEnabled = criiptoConfiguration === null || criiptoConfiguration === void 0 ? void 0 : criiptoConfiguration.client.qr_enabled;
1832
+ const acrValues = (_ref = (_props$acrValues = props.acrValues) !== null && _props$acrValues !== void 0 ? _props$acrValues : configurationAcrValues) !== null && _ref !== void 0 ? _ref : [];
1833
+ useEffect(() => {
1834
+ let isSubsribed = true;
1835
+ client.fetchCriiptoConfiguration().then((c) => {
1836
+ if (!isSubsribed) return;
1837
+ setCriiptoConfiguration(c);
1838
+ });
1839
+ return () => {
1840
+ isSubsribed = false;
1841
+ };
1842
+ }, [client]);
1843
+ const redirect = useCallback(_asyncToGenerator(function* () {
1844
+ var _criiptoConfiguration;
1845
+ if (!criiptoConfiguration) return;
1846
+ const intermediaryUrl = ((_criiptoConfiguration = criiptoConfiguration.client.qr_intermediary_url) !== null && _criiptoConfiguration !== void 0 ? _criiptoConfiguration : criiptoConfiguration.qr_intermediary_url).replace("/{id}", "").replace("{id}", "");
1847
+ const authorizeUrl = new URL(yield buildAuthorizeUrl({ acrValues }));
1848
+ const authorizeParams = new URLSearchParams(authorizeUrl.search);
1849
+ authorizeParams.set("domain", authorizeUrl.host);
1850
+ authorizeUrl.host = new URL(intermediaryUrl).host;
1851
+ authorizeUrl.port = new URL(intermediaryUrl).port;
1852
+ authorizeUrl.pathname = new URL(intermediaryUrl).pathname + "/authorize";
1853
+ authorizeUrl.search = authorizeParams.toString();
1854
+ if (pkce && "code_verifier" in pkce) savePKCEState(store, {
1855
+ response_type: "id_token",
1856
+ pkce_code_verifier: pkce.code_verifier,
1857
+ redirect_uri: authorizeParams.get("redirect_uri")
1858
+ });
1859
+ window.location.href = authorizeUrl.toString();
1860
+ }), [
1861
+ buildAuthorizeUrl,
1862
+ criiptoConfiguration,
1863
+ acrValues
1864
+ ]);
1865
+ const authorize = useCallback(() => {
1866
+ return client.qr.authorize(elementRef.current, _objectSpread2(_objectSpread2({}, buildOptions({ acrValues })), {}, { margin }));
1867
+ }, [
1868
+ client,
1869
+ buildOptions,
1870
+ margin,
1871
+ acrValues
1872
+ ]);
1873
+ useLayoutEffect(() => {
1874
+ if (!elementRef.current) return;
1875
+ if (error) return;
1876
+ if (!isEnabled) return;
1877
+ const promise = authorize();
1878
+ promise.onAcknowledged = () => {
1879
+ setAcknowledged(true);
1880
+ };
1881
+ promise.then((response) => {
1882
+ if (promise.cancelled) return;
1883
+ handleResponse(response, {
1884
+ pkce: pkce && "code_verifier" in pkce ? pkce : void 0,
1885
+ source: "QRCode"
1886
+ });
1887
+ }).catch((err) => {
1888
+ if (err instanceof UserCancelledError) {
1889
+ setCancelled(true);
1890
+ return;
1891
+ }
1892
+ if (promise.cancelled) return;
1893
+ setError(err);
1894
+ handleResponse(err, { source: "QRCode" });
1895
+ });
1896
+ return () => {
1897
+ promise.cancel();
1898
+ };
1899
+ }, [
1900
+ authorize,
1901
+ pkce,
1902
+ handleResponse,
1903
+ requestId,
1904
+ error,
1905
+ isEnabled
1906
+ ]);
1907
+ const handleRetry = () => {
1908
+ setAcknowledged(false);
1909
+ setCancelled(false);
1910
+ setError(null);
1911
+ setRequestId(Math.random().toString());
1912
+ };
1913
+ return children({
1914
+ qrElement: /* @__PURE__ */ jsx("div", {
1915
+ ref: elementRef,
1916
+ className
1917
+ }),
1918
+ isAcknowledged,
1919
+ isCancelled,
1920
+ isEnabled: criiptoConfiguration === null || criiptoConfiguration === void 0 ? void 0 : criiptoConfiguration.client.qr_enabled,
1921
+ error,
1922
+ retry: handleRetry,
1923
+ redirect
1924
+ });
1925
+ };
1926
+ //#endregion
1927
+ //#region src/use-criipto-verify.ts
1928
+ function useCriiptoVerify() {
1929
+ const { result, claims, loginWithRedirect, loginWithPopup, acrValues, isLoading, isInitializing, logout, checkSession } = useContext(CriiptoVerifyContext);
1930
+ return {
1931
+ result,
1932
+ claims,
1933
+ error: result && ("error" in result || result instanceof Error) ? result : null,
1934
+ loginWithRedirect,
1935
+ loginWithPopup,
1936
+ acrValues,
1937
+ isLoading,
1938
+ isInitializing,
1939
+ checkSession,
1940
+ logout
1941
+ };
1942
+ }
1943
+ //#endregion
1944
+ export { AuthMethodButtonContainer as AuthButton, AuthMethodButtonContainer as AuthMethodButton, AuthMethodButtonComponent as AuthButtonComponent, AuthButtonGroup, AuthMethodSelector, Sweden as AuthMethodSelectorSweden, CriiptoVerifyProvider, OAuth2Error, QRCode, SEBankIDQrCode as SEBankIDQRCode, actions, filterAcrValues, useCriiptoVerify };
1945
+
1946
+ //# sourceMappingURL=index.js.map