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