@ory/elements-react 1.0.0-pr.5494d7c2 → 1.0.0-pr.6c5e72b6
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.
- package/CHANGELOG.md +23 -0
- package/DEVELOPMENT.md +2 -1
- package/dist/index.js +219 -53
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +217 -51
- package/dist/index.mjs.map +1 -1
- package/dist/theme/default/index.css +9 -0
- package/dist/theme/default/index.css.map +1 -1
- package/dist/theme/default/index.js +623 -481
- package/dist/theme/default/index.js.map +1 -1
- package/dist/theme/default/index.mjs +432 -289
- package/dist/theme/default/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { UiNodeGroupEnum, isUiNodeInputAttributes, isUiNodeAnchorAttributes, isUiNodeImageAttributes, isUiNodeScriptAttributes, FlowType, getNodeId, Configuration, FrontendApi, isUiNodeTextAttributes, UiNodeInputAttributesTypeEnum, handleContinueWith,
|
|
1
|
+
import { UiNodeGroupEnum, isUiNodeInputAttributes, isUiNodeAnchorAttributes, isUiNodeImageAttributes, isUiNodeScriptAttributes, FlowType, getNodeId, Configuration, FrontendApi, isUiNodeTextAttributes, UiNodeInputAttributesTypeEnum, handleContinueWith, isResponseError as isResponseError$1, loginUrl, settingsUrl, registrationUrl, FetchError, ResponseError, recoveryUrl, instanceOfContinueWithRecoveryUi, verificationUrl as verificationUrl$1 } from '@ory/client-fetch';
|
|
2
2
|
import { createContext, useContext, useRef, useState, useMemo, useReducer, useEffect } from 'react';
|
|
3
3
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
4
4
|
import { useIntl, IntlProvider as IntlProvider$1 } from 'react-intl';
|
|
@@ -270,12 +270,25 @@ function useNodeGroupsWithVisibleNodes(nodes) {
|
|
|
270
270
|
}
|
|
271
271
|
|
|
272
272
|
// src/components/card/two-step/utils.ts
|
|
273
|
+
function isScreenSelectionNode(node) {
|
|
274
|
+
if ("name" in node.attributes && node.attributes.name === "screen" && "value" in node.attributes && node.attributes.value === "previous") {
|
|
275
|
+
return true;
|
|
276
|
+
}
|
|
277
|
+
if (node.group === UiNodeGroupEnum.IdentifierFirst && "name" in node.attributes && node.attributes.name === "identifier" && node.attributes.type === "hidden") {
|
|
278
|
+
return true;
|
|
279
|
+
}
|
|
280
|
+
return false;
|
|
281
|
+
}
|
|
273
282
|
function isChoosingMethod(flow) {
|
|
274
|
-
|
|
275
|
-
(
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
283
|
+
if (flow.flowType === FlowType.Login) {
|
|
284
|
+
if (flow.flow.requested_aal === "aal2") {
|
|
285
|
+
return true;
|
|
286
|
+
}
|
|
287
|
+
if (flow.flow.refresh) {
|
|
288
|
+
return true;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
return flow.flow.ui.nodes.some(isScreenSelectionNode);
|
|
279
292
|
}
|
|
280
293
|
function getFinalNodes(uniqueGroups, selectedGroup) {
|
|
281
294
|
var _a, _b, _c, _d;
|
|
@@ -320,16 +333,16 @@ function parseStateFromFlow(flow) {
|
|
|
320
333
|
return { current: "method_active", method: "code" };
|
|
321
334
|
} else if (methodWithMessage) {
|
|
322
335
|
return { current: "method_active", method: methodWithMessage.group };
|
|
336
|
+
} else if ((_a = flow.flow.ui.messages) == null ? void 0 : _a.some((m) => m.id === 1010016)) {
|
|
337
|
+
return { current: "select_method" };
|
|
323
338
|
} else if (flow.flow.active && !["default", "identifier_first"].includes(flow.flow.active)) {
|
|
324
339
|
return { current: "method_active", method: flow.flow.active };
|
|
325
340
|
} else if (isChoosingMethod(flow)) {
|
|
326
341
|
const authMethods = nodesToAuthMethodGroups(flow.flow.ui.nodes);
|
|
327
|
-
if (authMethods.length === 1 && authMethods[0]
|
|
342
|
+
if (authMethods.length === 1 && !["code", "passkey"].includes(authMethods[0])) {
|
|
328
343
|
return { current: "method_active", method: authMethods[0] };
|
|
329
344
|
}
|
|
330
345
|
return { current: "select_method" };
|
|
331
|
-
} else if ((_a = flow.flow.ui.messages) == null ? void 0 : _a.some((m) => m.id === 1010016)) {
|
|
332
|
-
return { current: "select_method" };
|
|
333
346
|
}
|
|
334
347
|
return { current: "provide_identifier" };
|
|
335
348
|
}
|
|
@@ -680,6 +693,134 @@ function replaceWindowFlowId(flow) {
|
|
|
680
693
|
url.searchParams.set("flow", flow);
|
|
681
694
|
window.location.href = url.toString();
|
|
682
695
|
}
|
|
696
|
+
function isGenericErrorResponse(response) {
|
|
697
|
+
return typeof response === "object" && !!response && "error" in response && typeof response.error === "object" && !!response.error && "id" in response.error;
|
|
698
|
+
}
|
|
699
|
+
function isNeedsPrivilegedSessionError(response) {
|
|
700
|
+
return isGenericErrorResponse(response) && response.error.id === "session_refresh_required";
|
|
701
|
+
}
|
|
702
|
+
function isSelfServiceFlowExpiredError(response) {
|
|
703
|
+
return isGenericErrorResponse(response) && response.error.id === "self_service_flow_expired";
|
|
704
|
+
}
|
|
705
|
+
function isBrowserLocationChangeRequired(response) {
|
|
706
|
+
return isGenericErrorResponse(response) && isGenericErrorResponse(response) && response.error.id === "browser_location_change_required";
|
|
707
|
+
}
|
|
708
|
+
function isAddressNotVerified(response) {
|
|
709
|
+
return isGenericErrorResponse(response) && response.error.id === "session_verified_address_required";
|
|
710
|
+
}
|
|
711
|
+
function isCsrfError(response) {
|
|
712
|
+
return isGenericErrorResponse(response) && response.error.id === "security_csrf_violation";
|
|
713
|
+
}
|
|
714
|
+
var isResponseError = (err) => {
|
|
715
|
+
if (err instanceof ResponseError) {
|
|
716
|
+
return true;
|
|
717
|
+
}
|
|
718
|
+
return typeof err === "object" && !!err && "name" in err && err.name === "ResponseError";
|
|
719
|
+
};
|
|
720
|
+
var isFetchError = (err) => {
|
|
721
|
+
return err instanceof FetchError;
|
|
722
|
+
};
|
|
723
|
+
|
|
724
|
+
// src/util/sdk-helpers/urlHelpers.ts
|
|
725
|
+
var verificationUrl = (config) => config.sdk.url + "/self-service/verification/browser";
|
|
726
|
+
var handleFlowError = (opts) => async (err) => {
|
|
727
|
+
var _a;
|
|
728
|
+
if (!isResponseError(err)) {
|
|
729
|
+
if (isFetchError(err)) {
|
|
730
|
+
throw new FetchError(
|
|
731
|
+
err,
|
|
732
|
+
"Unable to call the API endpoint. Ensure that CORS is set up correctly and that you have provided a valid SDK URL to Ory Elements."
|
|
733
|
+
);
|
|
734
|
+
}
|
|
735
|
+
throw err;
|
|
736
|
+
}
|
|
737
|
+
const contentType = err.response.headers.get("content-type") || "";
|
|
738
|
+
if (contentType.includes("application/json")) {
|
|
739
|
+
const body = await toBody(err.response);
|
|
740
|
+
if (isSelfServiceFlowExpiredError(body)) {
|
|
741
|
+
opts.onRestartFlow(body.use_flow_id);
|
|
742
|
+
return;
|
|
743
|
+
} else if (isAddressNotVerified(body)) {
|
|
744
|
+
for (const continueWith of ((_a = body.error.details) == null ? void 0 : _a.continue_with) || []) {
|
|
745
|
+
if (continueWith.action === "show_verification_ui" && continueWith.flow.url) {
|
|
746
|
+
opts.onRedirect(continueWith.flow.url, true);
|
|
747
|
+
return;
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
opts.onRedirect(verificationUrl(opts.config), true);
|
|
751
|
+
return;
|
|
752
|
+
} else if (isBrowserLocationChangeRequired(body) && body.redirect_browser_to) {
|
|
753
|
+
opts.onRedirect(body.redirect_browser_to, true);
|
|
754
|
+
return;
|
|
755
|
+
} else if (isNeedsPrivilegedSessionError(body) && body.redirect_browser_to) {
|
|
756
|
+
opts.onRedirect(body.redirect_browser_to, true);
|
|
757
|
+
return;
|
|
758
|
+
} else if (isCsrfError(body)) {
|
|
759
|
+
opts.onRestartFlow();
|
|
760
|
+
return;
|
|
761
|
+
}
|
|
762
|
+
switch (err.response.status) {
|
|
763
|
+
case 404:
|
|
764
|
+
opts.onRestartFlow();
|
|
765
|
+
return;
|
|
766
|
+
case 410:
|
|
767
|
+
opts.onRestartFlow();
|
|
768
|
+
return;
|
|
769
|
+
case 400:
|
|
770
|
+
return opts.onValidationError(
|
|
771
|
+
await err.response.json()
|
|
772
|
+
);
|
|
773
|
+
case 403:
|
|
774
|
+
opts.onRestartFlow();
|
|
775
|
+
return;
|
|
776
|
+
case 422: {
|
|
777
|
+
throw new ResponseError(
|
|
778
|
+
err.response,
|
|
779
|
+
"The API returned an error code indicating a required redirect, but the SDK is outdated and does not know how to handle the action. Received response: " + await err.response.json()
|
|
780
|
+
);
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
throw new ResponseError(
|
|
784
|
+
err.response,
|
|
785
|
+
"The Ory API endpoint returned a response code the SDK does not know how to handle. Please check the network tab for more information. Received response: " + await err.response.json()
|
|
786
|
+
);
|
|
787
|
+
} else if (
|
|
788
|
+
// Not a JSON response? If it's a text response we will return an error informing the user that the response is not JSON.
|
|
789
|
+
contentType.includes("text/") || contentType.includes("html") || contentType.includes("xml")
|
|
790
|
+
) {
|
|
791
|
+
await logResponseError(err.response, true);
|
|
792
|
+
throw new ResponseError(
|
|
793
|
+
err.response,
|
|
794
|
+
`The Ory API endpoint returned an unexpected HTML or text response. Check your console output for details.`
|
|
795
|
+
);
|
|
796
|
+
}
|
|
797
|
+
await logResponseError(err.response, false);
|
|
798
|
+
throw new ResponseError(
|
|
799
|
+
err.response,
|
|
800
|
+
"The Ory API endpoint returned unexpected content type `" + contentType + "`. Check your console output for details."
|
|
801
|
+
);
|
|
802
|
+
};
|
|
803
|
+
async function toBody(response) {
|
|
804
|
+
try {
|
|
805
|
+
return await response.clone().json();
|
|
806
|
+
} catch (e) {
|
|
807
|
+
await logResponseError(response, true, [e]);
|
|
808
|
+
throw new ResponseError(
|
|
809
|
+
response,
|
|
810
|
+
"Unable to decode API response using JSON."
|
|
811
|
+
);
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
async function logResponseError(response, printBody, wrap) {
|
|
815
|
+
console.error("Unable to decode API response", {
|
|
816
|
+
response: {
|
|
817
|
+
status: response.status,
|
|
818
|
+
headers: Object.fromEntries(response.headers.entries()),
|
|
819
|
+
body: printBody ? await response.clone().text() : void 0
|
|
820
|
+
},
|
|
821
|
+
errors: wrap
|
|
822
|
+
});
|
|
823
|
+
}
|
|
683
824
|
|
|
684
825
|
// src/util/onSubmitLogin.ts
|
|
685
826
|
async function onSubmitLogin({ flow }, config, {
|
|
@@ -715,7 +856,8 @@ async function onSubmitLogin({ flow }, config, {
|
|
|
715
856
|
flowType: FlowType.Login
|
|
716
857
|
});
|
|
717
858
|
},
|
|
718
|
-
onRedirect
|
|
859
|
+
onRedirect,
|
|
860
|
+
config
|
|
719
861
|
})
|
|
720
862
|
);
|
|
721
863
|
}
|
|
@@ -759,7 +901,8 @@ async function onSubmitRecovery({ flow }, config, {
|
|
|
759
901
|
});
|
|
760
902
|
}
|
|
761
903
|
},
|
|
762
|
-
onRedirect
|
|
904
|
+
onRedirect,
|
|
905
|
+
config
|
|
763
906
|
})
|
|
764
907
|
);
|
|
765
908
|
}
|
|
@@ -808,7 +951,8 @@ async function onSubmitRegistration({ flow }, config, {
|
|
|
808
951
|
flowType: FlowType.Registration
|
|
809
952
|
});
|
|
810
953
|
},
|
|
811
|
-
onRedirect
|
|
954
|
+
onRedirect,
|
|
955
|
+
config
|
|
812
956
|
})
|
|
813
957
|
);
|
|
814
958
|
}
|
|
@@ -847,10 +991,11 @@ async function onSubmitSettings({ flow }, config, {
|
|
|
847
991
|
flowType: FlowType.Settings
|
|
848
992
|
});
|
|
849
993
|
},
|
|
850
|
-
onRedirect
|
|
994
|
+
onRedirect,
|
|
995
|
+
config
|
|
851
996
|
})
|
|
852
997
|
).catch((err) => {
|
|
853
|
-
if (isResponseError(err)) {
|
|
998
|
+
if (isResponseError$1(err)) {
|
|
854
999
|
if (err.response.status === 401) {
|
|
855
1000
|
return onRedirect(
|
|
856
1001
|
loginUrl(config) + "?return_to=" + settingsUrl(config),
|
|
@@ -880,7 +1025,7 @@ async function onSubmitVerification({ flow }, config, {
|
|
|
880
1025
|
if (useFlowId) {
|
|
881
1026
|
replaceWindowFlowId(useFlowId);
|
|
882
1027
|
} else {
|
|
883
|
-
onRedirect(verificationUrl(config), true);
|
|
1028
|
+
onRedirect(verificationUrl$1(config), true);
|
|
884
1029
|
}
|
|
885
1030
|
},
|
|
886
1031
|
onValidationError: (body2) => {
|
|
@@ -889,7 +1034,8 @@ async function onSubmitVerification({ flow }, config, {
|
|
|
889
1034
|
flowType: FlowType.Verification
|
|
890
1035
|
});
|
|
891
1036
|
},
|
|
892
|
-
onRedirect
|
|
1037
|
+
onRedirect,
|
|
1038
|
+
config
|
|
893
1039
|
})
|
|
894
1040
|
);
|
|
895
1041
|
}
|
|
@@ -1071,7 +1217,8 @@ var messageIdsToHide = [
|
|
|
1071
1217
|
1010004,
|
|
1072
1218
|
1010014,
|
|
1073
1219
|
1040005,
|
|
1074
|
-
1010016
|
|
1220
|
+
1010016,
|
|
1221
|
+
1010003
|
|
1075
1222
|
];
|
|
1076
1223
|
function OryCardValidationMessages({ ...props }) {
|
|
1077
1224
|
var _a;
|
|
@@ -1102,9 +1249,9 @@ var NodeInput = ({
|
|
|
1102
1249
|
...attrs
|
|
1103
1250
|
} = attributes;
|
|
1104
1251
|
const isResendNode = ((_a = node.meta.label) == null ? void 0 : _a.id) === 1070008;
|
|
1105
|
-
const
|
|
1252
|
+
const isScreenSelectionNode2 = "name" in node.attributes && node.attributes.name === "screen";
|
|
1106
1253
|
const setFormValue = () => {
|
|
1107
|
-
if (attrs.value && !(isResendNode ||
|
|
1254
|
+
if (attrs.value && !(isResendNode || isScreenSelectionNode2 || node.group === UiNodeGroupEnum.Oauth2Consent)) {
|
|
1108
1255
|
setValue(attrs.name, attrs.value);
|
|
1109
1256
|
}
|
|
1110
1257
|
};
|
|
@@ -1161,7 +1308,7 @@ var NodeInput = ({
|
|
|
1161
1308
|
}
|
|
1162
1309
|
);
|
|
1163
1310
|
}
|
|
1164
|
-
if (isResendNode ||
|
|
1311
|
+
if (isResendNode || isScreenSelectionNode2) {
|
|
1165
1312
|
return null;
|
|
1166
1313
|
}
|
|
1167
1314
|
if (node.group === "oauth2_consent") {
|
|
@@ -1243,7 +1390,8 @@ var Node = ({ node, onClick }) => {
|
|
|
1243
1390
|
{
|
|
1244
1391
|
crossOrigin: crossorigin,
|
|
1245
1392
|
referrerPolicy: referrerpolicy,
|
|
1246
|
-
...attributes
|
|
1393
|
+
...attributes,
|
|
1394
|
+
integrity: ""
|
|
1247
1395
|
}
|
|
1248
1396
|
);
|
|
1249
1397
|
}
|
|
@@ -1401,15 +1549,17 @@ function toAuthMethodPickerOptions(visibleGroups) {
|
|
|
1401
1549
|
}
|
|
1402
1550
|
function OryTwoStepCardStateSelectMethod() {
|
|
1403
1551
|
var _a, _b, _c, _d;
|
|
1404
|
-
const { Form, Card
|
|
1552
|
+
const { Form, Card } = useComponents();
|
|
1405
1553
|
const { flow, flowType, dispatchFormState } = useOryFlow();
|
|
1406
1554
|
const { ui } = flow;
|
|
1407
|
-
const intl = useIntl();
|
|
1408
1555
|
const nodeSorter = useNodeSorter();
|
|
1409
1556
|
const sortNodes = (a, b) => nodeSorter(a, b, { flowType });
|
|
1410
1557
|
const visibleGroups = useNodeGroupsWithVisibleNodes(ui.nodes);
|
|
1411
1558
|
const authMethodBlocks = toAuthMethodPickerOptions(visibleGroups);
|
|
1412
1559
|
const authMethodAdditionalNodes = useFunctionalNodes(ui.nodes);
|
|
1560
|
+
const hiddenNodes = ui.nodes.filter(
|
|
1561
|
+
(n) => n.attributes.node_type === "input" && n.attributes.type === "hidden" || isUiNodeScriptAttributes(n.attributes)
|
|
1562
|
+
);
|
|
1413
1563
|
if (UiNodeGroupEnum.Code in authMethodBlocks) {
|
|
1414
1564
|
let identifier = (_b = (_a = findNode(ui.nodes, {
|
|
1415
1565
|
group: "identifier_first",
|
|
@@ -1430,44 +1580,52 @@ function OryTwoStepCardStateSelectMethod() {
|
|
|
1430
1580
|
};
|
|
1431
1581
|
}
|
|
1432
1582
|
}
|
|
1433
|
-
const noMethods = {
|
|
1434
|
-
id: 5000002,
|
|
1435
|
-
text: intl.formatMessage({
|
|
1436
|
-
id: `identities.messages.5000002`,
|
|
1437
|
-
defaultMessage: "No authentication methods are available for this request. Please contact the site or app owner."
|
|
1438
|
-
}),
|
|
1439
|
-
type: "error"
|
|
1440
|
-
};
|
|
1441
1583
|
return /* @__PURE__ */ jsxs(OryCard, { children: [
|
|
1442
1584
|
/* @__PURE__ */ jsx(OryCardHeader, {}),
|
|
1443
1585
|
/* @__PURE__ */ jsxs(OryCardContent, { children: [
|
|
1444
1586
|
/* @__PURE__ */ jsx(OryCardValidationMessages, {}),
|
|
1445
1587
|
/* @__PURE__ */ jsx(OryFormSocialButtonsForm, {}),
|
|
1446
|
-
Object.entries(authMethodBlocks).length > 0 ? /* @__PURE__ */
|
|
1588
|
+
Object.entries(authMethodBlocks).length > 0 ? /* @__PURE__ */ jsxs(
|
|
1447
1589
|
OryForm,
|
|
1448
1590
|
{
|
|
1449
1591
|
"data-testid": `ory/form/methods/local`,
|
|
1450
1592
|
onAfterSubmit: handleAfterFormSubmit(dispatchFormState),
|
|
1451
|
-
children:
|
|
1452
|
-
/* @__PURE__ */
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1593
|
+
children: [
|
|
1594
|
+
/* @__PURE__ */ jsxs(Form.Group, { children: [
|
|
1595
|
+
/* @__PURE__ */ jsx(Card.Divider, {}),
|
|
1596
|
+
/* @__PURE__ */ jsx(
|
|
1597
|
+
AuthMethodList,
|
|
1598
|
+
{
|
|
1599
|
+
options: authMethodBlocks,
|
|
1600
|
+
setSelectedGroup: (group) => dispatchFormState({
|
|
1601
|
+
type: "action_select_method",
|
|
1602
|
+
method: group
|
|
1603
|
+
})
|
|
1604
|
+
}
|
|
1605
|
+
),
|
|
1606
|
+
authMethodAdditionalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k))
|
|
1607
|
+
] }),
|
|
1608
|
+
hiddenNodes.map((node, k) => /* @__PURE__ */ jsx(Node, { node }, k))
|
|
1609
|
+
]
|
|
1465
1610
|
}
|
|
1466
|
-
) : !hasSingleSignOnNodes(ui.nodes) && /* @__PURE__ */ jsx(
|
|
1611
|
+
) : !hasSingleSignOnNodes(ui.nodes) && /* @__PURE__ */ jsx(NoMethodsMessage, {})
|
|
1467
1612
|
] }),
|
|
1468
1613
|
/* @__PURE__ */ jsx(OryCardFooter, {})
|
|
1469
1614
|
] });
|
|
1470
1615
|
}
|
|
1616
|
+
function NoMethodsMessage() {
|
|
1617
|
+
const intl = useIntl();
|
|
1618
|
+
const { Message } = useComponents();
|
|
1619
|
+
const noMethods = {
|
|
1620
|
+
id: 5000002,
|
|
1621
|
+
text: intl.formatMessage({
|
|
1622
|
+
id: `identities.messages.5000002`,
|
|
1623
|
+
defaultMessage: "No authentication methods are available for this request. Please contact the site or app owner."
|
|
1624
|
+
}),
|
|
1625
|
+
type: "error"
|
|
1626
|
+
};
|
|
1627
|
+
return /* @__PURE__ */ jsx("div", { "data-testid": `ory/form/methods/local`, children: /* @__PURE__ */ jsx(Message.Root, { children: /* @__PURE__ */ jsx(Message.Content, { message: noMethods }, noMethods.id) }) });
|
|
1628
|
+
}
|
|
1471
1629
|
function OryTwoStepCard() {
|
|
1472
1630
|
const { formState } = useOryFlow();
|
|
1473
1631
|
switch (formState.current) {
|
|
@@ -2298,6 +2456,7 @@ var en_default = {
|
|
|
2298
2456
|
"two-step.webauthn.description": "Use your security key to authenticate",
|
|
2299
2457
|
"two-step.passkey.title": "Passkey (recommended)",
|
|
2300
2458
|
"two-step.passkey.description": "Use your device's for fingerprint or face recognition",
|
|
2459
|
+
"two-step.passkey.description.error": "Could not load the necessary libraries to use your Passkey. Please try again later.",
|
|
2301
2460
|
"two-step.totp.title": "Use your Authenticator App (TOTP)",
|
|
2302
2461
|
"two-step.totp.description": "Use a 6-digit one-time code from your authenticator app",
|
|
2303
2462
|
"two-step.lookup_secret.title": "Backup recovery code",
|
|
@@ -2523,12 +2682,13 @@ var de_default = {
|
|
|
2523
2682
|
"registration.title": "Konto registrieren",
|
|
2524
2683
|
"verification.registration-button": "Registrieren",
|
|
2525
2684
|
"verification.registration-label": "Sie haben noch kein Konto?",
|
|
2526
|
-
"verification.title": "Verifizieren Sie
|
|
2685
|
+
"verification.title": "Verifizieren Sie Ihr Konto",
|
|
2527
2686
|
"verification.back-button": "Zur\xFCck",
|
|
2528
2687
|
"two-step.code.description": "Ein Best\xE4tigungscode wird an Ihre E-Mail gesendet.",
|
|
2529
2688
|
"two-step.code.title": "E-Mail-Code",
|
|
2530
|
-
"two-step.passkey.description": "Verwenden Sie die Fingerabdruck- oder Gesichtserkennung Ihres Ger\xE4ts",
|
|
2531
2689
|
"two-step.passkey.title": "Passkey (empfohlen)",
|
|
2690
|
+
"two-step.passkey.description": "Verwenden Sie die Fingerabdruck- oder Gesichtserkennung Ihres Ger\xE4ts",
|
|
2691
|
+
"two-step.passkey.description.error": "Konnte die erforderlichen Bibliotheken f\xFCr Passkeys nicht laden. Bitte versuchen Sie es sp\xE4ter erneut.",
|
|
2532
2692
|
"two-step.password.description": "Geben Sie Ihr Passwort ein, das mit Ihrem Konto verkn\xFCpft ist",
|
|
2533
2693
|
"two-step.password.title": "Passwort",
|
|
2534
2694
|
"two-step.webauthn.title": "Sicherheitsschl\xFCssel",
|
|
@@ -2566,14 +2726,14 @@ var de_default = {
|
|
|
2566
2726
|
"card.header.parts.password.login": "Ihrer {identifierLabel} und Ihrem Passwort",
|
|
2567
2727
|
"card.header.parts.password.registration": "Ihrer {identifierLabel} und einem Passwort",
|
|
2568
2728
|
"card.header.parts.webauthn": "ein Sicherheitsschl\xFCssel",
|
|
2569
|
-
"card.header.parts.totp": "
|
|
2729
|
+
"card.header.parts.totp": "Ihre Authentifikator-App",
|
|
2570
2730
|
"card.header.parts.lookup_secret": "ein Backup-Wiederherstellungscode",
|
|
2571
2731
|
"recovery.subtitle": "Geben Sie die mit Ihrem Konto verkn\xFCpfte E-Mail-Adresse ein, um einen einmaligen Zugangscode zu erhalten",
|
|
2572
2732
|
"verification.subtitle": "Geben Sie die mit Ihrem Konto verkn\xFCpfte E-Mail-Adresse ein, um es zu best\xE4tigen",
|
|
2573
2733
|
"card.header.description.login": "Melden Sie sich mit {identifierLabel} an",
|
|
2574
2734
|
"card.header.description.registration": "Registrieren Sie sich mit {identifierLabel}",
|
|
2575
2735
|
"login.subtitle": "Melden Sie sich mit {parts} an",
|
|
2576
|
-
"login.subtitle-refresh": "Best\xE4tigen Sie
|
|
2736
|
+
"login.subtitle-refresh": "Best\xE4tigen Sie Ihre Identit\xE4t mit {parts}",
|
|
2577
2737
|
"misc.or": "oder",
|
|
2578
2738
|
"registration.subtitle": "Registrieren Sie sich mit {parts}",
|
|
2579
2739
|
"forms.label.forgot-password": "Passwort vergessen?",
|
|
@@ -2826,6 +2986,7 @@ var es_default = {
|
|
|
2826
2986
|
"two-step.code.title": "C\xF3digo de correo electr\xF3nico",
|
|
2827
2987
|
"two-step.passkey.description": "Utiliza el reconocimiento de huellas dactilares o facial de tu dispositivo.",
|
|
2828
2988
|
"two-step.passkey.title": "Clave de acceso (recomendada)",
|
|
2989
|
+
"two-step.passkey.description.error": "No se pudieron cargar las bibliotecas necesarias para usar su Passkey. Por favor, int\xE9ntelo de nuevo m\xE1s tarde",
|
|
2829
2990
|
"two-step.password.description": "Ingrese la contrase\xF1a asociada con su cuenta",
|
|
2830
2991
|
"two-step.password.title": "Contrase\xF1a",
|
|
2831
2992
|
"two-step.webauthn.title": "Clave de Seguridad",
|
|
@@ -3114,6 +3275,7 @@ var fr_default = {
|
|
|
3114
3275
|
"two-step.code.title": "Code de courrier \xE9lectronique",
|
|
3115
3276
|
"two-step.passkey.description": "Utilisez l'appareil pour la reconnaissance d'empreintes digitales ou de visage",
|
|
3116
3277
|
"two-step.passkey.title": "Cl\xE9 de passe (recommand\xE9e)",
|
|
3278
|
+
"two-step.passkey.description.error": "Impossible de charger les biblioth\xE8ques n\xE9cessaires pour utiliser votre Passkey. Veuillez r\xE9essayer plus tard.",
|
|
3117
3279
|
"two-step.password.description": "Entrez votre mot de passe associ\xE9 \xE0 votre compte",
|
|
3118
3280
|
"two-step.password.title": "Mot de passe",
|
|
3119
3281
|
"two-step.webauthn.title": "Cl\xE9 de S\xE9curit\xE9",
|
|
@@ -3400,6 +3562,7 @@ var nl_default = {
|
|
|
3400
3562
|
"two-step.code.description": "Een verificatiecode wordt naar uw e-mail gestuurd",
|
|
3401
3563
|
"two-step.code.title": "E-mailcode",
|
|
3402
3564
|
"two-step.passkey.description": "Gebruik de vingerafdruk- of gezichtsherkenning van uw apparaat",
|
|
3565
|
+
"two-step.passkey.description.error": "De benodigde bibliotheken om uw Passkey te gebruiken konden niet worden geladen. Probeer het later opnieuw.",
|
|
3403
3566
|
"two-step.passkey.title": "Toegangscode (aanbevolen)",
|
|
3404
3567
|
"two-step.password.description": "Voer uw wachtwoord in dat is gekoppeld aan uw account",
|
|
3405
3568
|
"two-step.password.title": "Wachtwoord",
|
|
@@ -3687,6 +3850,7 @@ var pl_default = {
|
|
|
3687
3850
|
"two-step.code.description": "Kod weryfikacyjny zostanie wys\u0142any na Tw\xF3j adres email.",
|
|
3688
3851
|
"two-step.code.title": "Kod email",
|
|
3689
3852
|
"two-step.passkey.description": "U\u017Cyj swojego urz\u0105dzenia lub funkcji rozpoznawania twarzy na swoim urz\u0105dzeniu.",
|
|
3853
|
+
"two-step.passkey.description.error": "Nie uda\u0142o si\u0119 za\u0142adowa\u0107 niezb\u0119dnych bibliotek do u\u017Cycia Passkey. Spr\xF3buj ponownie p\xF3\u017Aniej.",
|
|
3690
3854
|
"two-step.passkey.title": "Klucz dost\u0119pu (zalecany)",
|
|
3691
3855
|
"two-step.password.description": "Wprowad\u017A has\u0142o powi\u0105zane z twoim kontem",
|
|
3692
3856
|
"two-step.password.title": "Has\u0142o",
|
|
@@ -3974,6 +4138,7 @@ var pt_default = {
|
|
|
3974
4138
|
"two-step.code.description": "Um c\xF3digo de verifica\xE7\xE3o ser\xE1 enviado para o seu email",
|
|
3975
4139
|
"two-step.code.title": "C\xF3digo de email",
|
|
3976
4140
|
"two-step.passkey.description": "Use o seu dispositivo para reconhecimento de impress\xE3o digital ou facial.",
|
|
4141
|
+
"two-step.passkey.description.error": "N\xE3o foi poss\xEDvel carregar as bibliotecas necess\xE1rias para usar o seu Passkey. Por favor, tente novamente mais tarde.",
|
|
3977
4142
|
"two-step.passkey.title": "Chave de acesso (recomendado)",
|
|
3978
4143
|
"two-step.password.description": "Insira a sua senha associada \xE0 sua conta",
|
|
3979
4144
|
"two-step.password.title": "Senha",
|
|
@@ -4280,6 +4445,7 @@ var sv_default = {
|
|
|
4280
4445
|
"two-step.code.title": "E-postkod",
|
|
4281
4446
|
"two-step.passkey.description": "Anv\xE4nd din enhets fingeravtryck eller ansiktsigenk\xE4nning",
|
|
4282
4447
|
"two-step.passkey.title": "Passerkod (rekommenderad)",
|
|
4448
|
+
"two-step.passkey.description.error": "Det gick inte att ladda de n\xF6dv\xE4ndiga biblioteken f\xF6r att anv\xE4nda din Passkey. F\xF6rs\xF6k igen senare.",
|
|
4283
4449
|
"two-step.password.description": "Ange ditt l\xF6senord kopplat till ditt konto",
|
|
4284
4450
|
"two-step.password.title": "L\xF6senord",
|
|
4285
4451
|
"two-step.webauthn.title": "S\xE4kerhetsnyckel",
|