@ory/elements-react 0.0.0-pr.4a28a8f → 0.0.0-pr.6a36702c
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 +151 -0
- package/README.md +253 -4
- package/dist/client/frontendClient.d.mts +5 -2
- package/dist/client/frontendClient.d.ts +5 -2
- package/dist/client/frontendClient.js +25 -2
- package/dist/client/frontendClient.js.map +1 -1
- package/dist/client/frontendClient.mjs +25 -2
- package/dist/client/frontendClient.mjs.map +1 -1
- package/dist/client/index.js +3 -3
- package/dist/index.d.mts +113 -51
- package/dist/index.d.ts +113 -51
- package/dist/index.js +978 -418
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +975 -418
- package/dist/index.mjs.map +1 -1
- package/dist/theme/default/index.css +60 -10
- package/dist/theme/default/index.css.map +1 -1
- package/dist/theme/default/index.d.mts +15 -3
- package/dist/theme/default/index.d.ts +15 -3
- package/dist/theme/default/index.js +3767 -2963
- package/dist/theme/default/index.js.map +1 -1
- package/dist/theme/default/index.mjs +3800 -2973
- package/dist/theme/default/index.mjs.map +1 -1
- package/package.json +17 -15
- package/tailwind/generated/default-variables.css +1 -1
- package/tsconfig.json +3 -2
package/dist/index.js
CHANGED
|
@@ -50,13 +50,18 @@ var defaultNodeOrder = [
|
|
|
50
50
|
];
|
|
51
51
|
function defaultNodeSorter(a, b) {
|
|
52
52
|
var _a, _b;
|
|
53
|
+
const aIsCaptcha = a.group === "captcha";
|
|
54
|
+
const bIsCaptcha = b.group === "captcha";
|
|
55
|
+
const aIsSubmit = clientFetch.isUiNodeInputAttributes(a.attributes) && a.attributes.type === "submit";
|
|
56
|
+
const bIsSubmit = clientFetch.isUiNodeInputAttributes(b.attributes) && b.attributes.type === "submit";
|
|
57
|
+
if (aIsCaptcha && bIsSubmit) {
|
|
58
|
+
return -1;
|
|
59
|
+
}
|
|
60
|
+
if (bIsCaptcha && aIsSubmit) {
|
|
61
|
+
return 1;
|
|
62
|
+
}
|
|
53
63
|
const aGroupWeight = (_a = defaultNodeOrder.indexOf(a.group)) != null ? _a : 999;
|
|
54
64
|
const bGroupWeight = (_b = defaultNodeOrder.indexOf(b.group)) != null ? _b : 999;
|
|
55
|
-
if (b.group === "captcha" && clientFetch.isUiNodeInputAttributes(a.attributes) && a.attributes.type === "submit") {
|
|
56
|
-
return aGroupWeight - (bGroupWeight - 2);
|
|
57
|
-
} else if (a.group === "captcha" && clientFetch.isUiNodeInputAttributes(b.attributes) && b.attributes.type === "submit") {
|
|
58
|
-
return aGroupWeight - 2 - bGroupWeight;
|
|
59
|
-
}
|
|
60
65
|
return aGroupWeight - bGroupWeight;
|
|
61
66
|
}
|
|
62
67
|
var defaultGroupOrder = [
|
|
@@ -94,28 +99,10 @@ function OryComponentProvider({
|
|
|
94
99
|
}
|
|
95
100
|
);
|
|
96
101
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
(node) => node.group === clientFetch.UiNodeGroupEnum.IdentifierFirst && "name" in node.attributes && node.attributes.name === "identifier" && node.attributes.type === "hidden"
|
|
102
|
-
) || flow.flowType === clientFetch.FlowType.Login && flow.flow.requested_aal === "aal2";
|
|
103
|
-
}
|
|
104
|
-
function removeSsoNodes(nodes) {
|
|
105
|
-
return nodes.filter(
|
|
106
|
-
(node) => !(node.group === clientFetch.UiNodeGroupEnum.Oidc || node.group === clientFetch.UiNodeGroupEnum.Saml)
|
|
107
|
-
);
|
|
108
|
-
}
|
|
109
|
-
function getFinalNodes(uniqueGroups, selectedGroup) {
|
|
110
|
-
var _a, _b, _c, _d;
|
|
111
|
-
const selectedNodes = selectedGroup ? (_a = uniqueGroups[selectedGroup]) != null ? _a : [] : [];
|
|
112
|
-
return [
|
|
113
|
-
...(_b = uniqueGroups == null ? void 0 : uniqueGroups.identifier_first) != null ? _b : [],
|
|
114
|
-
...(_c = uniqueGroups == null ? void 0 : uniqueGroups.default) != null ? _c : [],
|
|
115
|
-
...(_d = uniqueGroups == null ? void 0 : uniqueGroups.captcha) != null ? _d : []
|
|
116
|
-
].flat().filter(
|
|
117
|
-
(node) => "type" in node.attributes && node.attributes.type === "hidden"
|
|
118
|
-
).concat(selectedNodes);
|
|
102
|
+
|
|
103
|
+
// src/theme/default/utils/form.ts
|
|
104
|
+
function isGroupImmediateSubmit(group) {
|
|
105
|
+
return group === "code";
|
|
119
106
|
}
|
|
120
107
|
function triggerToWindowCall(trigger) {
|
|
121
108
|
if (!trigger) {
|
|
@@ -189,21 +176,32 @@ function nodesToAuthMethodGroups(nodes, excludeAuthMethods = []) {
|
|
|
189
176
|
].includes(group)
|
|
190
177
|
);
|
|
191
178
|
}
|
|
192
|
-
function useNodesGroups(nodes) {
|
|
179
|
+
function useNodesGroups(nodes, { omit } = {}) {
|
|
193
180
|
const groupSorter = useGroupSorter();
|
|
194
181
|
const groups = react.useMemo(() => {
|
|
195
|
-
var _a;
|
|
182
|
+
var _a, _b;
|
|
196
183
|
const groups2 = {};
|
|
184
|
+
const groupRetained = {};
|
|
197
185
|
for (const node of nodes) {
|
|
198
|
-
if (node.type === "script") {
|
|
199
|
-
continue;
|
|
200
|
-
}
|
|
201
186
|
const groupNodes = (_a = groups2[node.group]) != null ? _a : [];
|
|
202
187
|
groupNodes.push(node);
|
|
203
188
|
groups2[node.group] = groupNodes;
|
|
189
|
+
if ((omit == null ? void 0 : omit.includes("script")) && clientFetch.isUiNodeScriptAttributes(node.attributes)) {
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
if ((omit == null ? void 0 : omit.includes("input_hidden")) && clientFetch.isUiNodeInputAttributes(node.attributes) && node.attributes.type === "hidden") {
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
groupRetained[node.group] = ((_b = groupRetained[node.group]) != null ? _b : 0) + 1;
|
|
204
196
|
}
|
|
205
|
-
|
|
206
|
-
|
|
197
|
+
const finalGroups = {};
|
|
198
|
+
for (const [group, count] of Object.entries(groupRetained)) {
|
|
199
|
+
if (count > 0) {
|
|
200
|
+
finalGroups[group] = groups2[group];
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return finalGroups;
|
|
204
|
+
}, [nodes, omit]);
|
|
207
205
|
const entries = react.useMemo(
|
|
208
206
|
() => Object.entries(groups).sort(([a], [b]) => groupSorter(a, b)),
|
|
209
207
|
[groups, groupSorter]
|
|
@@ -216,6 +214,93 @@ function useNodesGroups(nodes) {
|
|
|
216
214
|
var findNode = (nodes, opt) => nodes.find((n) => {
|
|
217
215
|
return n.attributes.node_type === opt.node_type && (opt.group instanceof RegExp ? n.group.match(opt.group) : n.group === opt.group) && (opt.name && n.attributes.node_type === "input" ? opt.name instanceof RegExp ? n.attributes.name.match(opt.name) : n.attributes.name === opt.name : !opt.name);
|
|
218
216
|
});
|
|
217
|
+
function useFunctionalNodes(nodes) {
|
|
218
|
+
return nodes.filter(
|
|
219
|
+
({ group }) => [
|
|
220
|
+
clientFetch.UiNodeGroupEnum.Default,
|
|
221
|
+
clientFetch.UiNodeGroupEnum.IdentifierFirst,
|
|
222
|
+
clientFetch.UiNodeGroupEnum.Profile,
|
|
223
|
+
clientFetch.UiNodeGroupEnum.Captcha
|
|
224
|
+
].includes(group)
|
|
225
|
+
);
|
|
226
|
+
}
|
|
227
|
+
function isUiNodeGroupEnum(method) {
|
|
228
|
+
return Object.values(clientFetch.UiNodeGroupEnum).includes(method);
|
|
229
|
+
}
|
|
230
|
+
function isSingleSignOnNode(node) {
|
|
231
|
+
return node.group === clientFetch.UiNodeGroupEnum.Oidc || node.group === clientFetch.UiNodeGroupEnum.Saml;
|
|
232
|
+
}
|
|
233
|
+
function hasSingleSignOnNodes(nodes) {
|
|
234
|
+
return nodes.some(isSingleSignOnNode);
|
|
235
|
+
}
|
|
236
|
+
function withoutSingleSignOnNodes(nodes) {
|
|
237
|
+
return nodes.filter((node) => !isSingleSignOnNode(node));
|
|
238
|
+
}
|
|
239
|
+
function isNodeVisible(node) {
|
|
240
|
+
if (clientFetch.isUiNodeScriptAttributes(node.attributes)) {
|
|
241
|
+
return false;
|
|
242
|
+
} else if (clientFetch.isUiNodeInputAttributes(node.attributes)) {
|
|
243
|
+
if (node.attributes.type === "hidden") {
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return true;
|
|
248
|
+
}
|
|
249
|
+
function useNodeGroupsWithVisibleNodes(nodes) {
|
|
250
|
+
return react.useMemo(() => {
|
|
251
|
+
var _a, _b;
|
|
252
|
+
const groups = {};
|
|
253
|
+
const groupRetained = {};
|
|
254
|
+
for (const node of nodes) {
|
|
255
|
+
const groupNodes = (_a = groups[node.group]) != null ? _a : [];
|
|
256
|
+
const groupCount = (_b = groupRetained[node.group]) != null ? _b : 0;
|
|
257
|
+
groupNodes.push(node);
|
|
258
|
+
groups[node.group] = groupNodes;
|
|
259
|
+
if (!isNodeVisible(node)) {
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
262
|
+
groupRetained[node.group] = groupCount + 1;
|
|
263
|
+
}
|
|
264
|
+
const finalGroups = {};
|
|
265
|
+
for (const [group, count] of Object.entries(groupRetained)) {
|
|
266
|
+
if (count > 0) {
|
|
267
|
+
finalGroups[group] = groups[group];
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return finalGroups;
|
|
271
|
+
}, [nodes]);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// src/components/card/two-step/utils.ts
|
|
275
|
+
function isChoosingMethod(flow) {
|
|
276
|
+
return flow.flow.ui.nodes.some(
|
|
277
|
+
(node) => "name" in node.attributes && node.attributes.name === "screen" && "value" in node.attributes && node.attributes.value === "previous"
|
|
278
|
+
) || flow.flow.ui.nodes.some(
|
|
279
|
+
(node) => node.group === clientFetch.UiNodeGroupEnum.IdentifierFirst && "name" in node.attributes && node.attributes.name === "identifier" && node.attributes.type === "hidden"
|
|
280
|
+
) || flow.flowType === clientFetch.FlowType.Login && flow.flow.requested_aal === "aal2";
|
|
281
|
+
}
|
|
282
|
+
function getFinalNodes(uniqueGroups, selectedGroup) {
|
|
283
|
+
var _a, _b, _c, _d;
|
|
284
|
+
const selectedNodes = selectedGroup ? (_a = uniqueGroups[selectedGroup]) != null ? _a : [] : [];
|
|
285
|
+
return [
|
|
286
|
+
...(_b = uniqueGroups == null ? void 0 : uniqueGroups.identifier_first) != null ? _b : [],
|
|
287
|
+
...(_c = uniqueGroups == null ? void 0 : uniqueGroups.default) != null ? _c : [],
|
|
288
|
+
...(_d = uniqueGroups == null ? void 0 : uniqueGroups.captcha) != null ? _d : []
|
|
289
|
+
].flat().filter(
|
|
290
|
+
(node) => "type" in node.attributes && node.attributes.type === "hidden"
|
|
291
|
+
).concat(selectedNodes);
|
|
292
|
+
}
|
|
293
|
+
var handleAfterFormSubmit = (dispatchFormState) => (method) => {
|
|
294
|
+
if (typeof method !== "string" || !isUiNodeGroupEnum(method)) {
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
if (isGroupImmediateSubmit(method)) {
|
|
298
|
+
dispatchFormState({
|
|
299
|
+
type: "action_select_method",
|
|
300
|
+
method
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
};
|
|
219
304
|
|
|
220
305
|
// src/context/form-state.ts
|
|
221
306
|
function findMethodWithMessage(nodes) {
|
|
@@ -263,6 +348,8 @@ function parseStateFromFlow(flow) {
|
|
|
263
348
|
break;
|
|
264
349
|
case clientFetch.FlowType.Settings:
|
|
265
350
|
return { current: "settings" };
|
|
351
|
+
case clientFetch.FlowType.OAuth2Consent:
|
|
352
|
+
return { current: "method_active", method: "oauth2_consent" };
|
|
266
353
|
}
|
|
267
354
|
console.warn(
|
|
268
355
|
`[Ory/Elements React] Encountered an unknown form state on ${flow.flowType} flow with ID ${flow.flow.id}`
|
|
@@ -275,14 +362,20 @@ function useFormStateReducer(flow) {
|
|
|
275
362
|
const formStateReducer = (state, action2) => {
|
|
276
363
|
switch (action2.type) {
|
|
277
364
|
case "action_flow_update": {
|
|
278
|
-
if (selectedMethod)
|
|
365
|
+
if (selectedMethod) {
|
|
279
366
|
return { current: "method_active", method: selectedMethod };
|
|
367
|
+
}
|
|
280
368
|
return parseStateFromFlow(action2.flow);
|
|
281
369
|
}
|
|
282
370
|
case "action_select_method": {
|
|
283
371
|
setSelectedMethod(action2.method);
|
|
284
372
|
return { current: "method_active", method: action2.method };
|
|
285
373
|
}
|
|
374
|
+
case "action_clear_active_method": {
|
|
375
|
+
return {
|
|
376
|
+
current: "select_method"
|
|
377
|
+
};
|
|
378
|
+
}
|
|
286
379
|
}
|
|
287
380
|
return state;
|
|
288
381
|
};
|
|
@@ -321,6 +414,110 @@ function OryFlowProvider({
|
|
|
321
414
|
}
|
|
322
415
|
);
|
|
323
416
|
}
|
|
417
|
+
|
|
418
|
+
// src/client/config.ts
|
|
419
|
+
function isProduction() {
|
|
420
|
+
var _a, _b;
|
|
421
|
+
return ["production", "prod"].indexOf(
|
|
422
|
+
(_b = (_a = process.env.VERCEL_ENV) != null ? _a : process.env.NODE_ENV) != null ? _b : ""
|
|
423
|
+
) > -1;
|
|
424
|
+
}
|
|
425
|
+
function frontendClient(sdkUrl, opts = {}) {
|
|
426
|
+
const config = new clientFetch.Configuration({
|
|
427
|
+
...opts,
|
|
428
|
+
basePath: sdkUrl,
|
|
429
|
+
credentials: "include",
|
|
430
|
+
headers: {
|
|
431
|
+
Accept: "application/json",
|
|
432
|
+
...opts.headers
|
|
433
|
+
}
|
|
434
|
+
});
|
|
435
|
+
return new clientFetch.FrontendApi(config);
|
|
436
|
+
}
|
|
437
|
+
var defaultProject = {
|
|
438
|
+
name: "Ory",
|
|
439
|
+
registration_enabled: true,
|
|
440
|
+
verification_enabled: true,
|
|
441
|
+
recovery_enabled: true,
|
|
442
|
+
recovery_ui_url: "/ui/recovery",
|
|
443
|
+
registration_ui_url: "/ui/registration",
|
|
444
|
+
verification_ui_url: "/ui/verification",
|
|
445
|
+
login_ui_url: "/ui/login",
|
|
446
|
+
settings_ui_url: "/ui/settings",
|
|
447
|
+
default_redirect_url: "/ui/welcome",
|
|
448
|
+
error_ui_url: "/ui/error",
|
|
449
|
+
default_locale: "en",
|
|
450
|
+
locale_behavior: "force_default"
|
|
451
|
+
};
|
|
452
|
+
function useOryConfiguration() {
|
|
453
|
+
const configCtx = react.useContext(OryConfigurationContext);
|
|
454
|
+
return {
|
|
455
|
+
sdk: {
|
|
456
|
+
...configCtx.sdk,
|
|
457
|
+
frontend: frontendClient(configCtx.sdk.url, configCtx.sdk.options)
|
|
458
|
+
},
|
|
459
|
+
project: {
|
|
460
|
+
...configCtx.project
|
|
461
|
+
}
|
|
462
|
+
};
|
|
463
|
+
}
|
|
464
|
+
var OryConfigurationContext = react.createContext({
|
|
465
|
+
sdk: computeSdkConfig({}),
|
|
466
|
+
project: defaultProject
|
|
467
|
+
});
|
|
468
|
+
function OryConfigurationProvider({
|
|
469
|
+
children,
|
|
470
|
+
sdk: initialConfig,
|
|
471
|
+
project
|
|
472
|
+
}) {
|
|
473
|
+
const configRef = react.useRef({
|
|
474
|
+
sdk: computeSdkConfig(initialConfig),
|
|
475
|
+
project: {
|
|
476
|
+
...defaultProject,
|
|
477
|
+
...project
|
|
478
|
+
}
|
|
479
|
+
});
|
|
480
|
+
return /* @__PURE__ */ jsxRuntime.jsx(OryConfigurationContext.Provider, { value: configRef.current, children });
|
|
481
|
+
}
|
|
482
|
+
function computeSdkConfig(config) {
|
|
483
|
+
if ((config == null ? void 0 : config.url) && typeof config.url === "string") {
|
|
484
|
+
console.debug("Using sdk url from config");
|
|
485
|
+
return {
|
|
486
|
+
url: config.url.replace(/\/$/, ""),
|
|
487
|
+
options: config.options || {}
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
return {
|
|
491
|
+
url: getSDKUrl(),
|
|
492
|
+
options: (config == null ? void 0 : config.options) || {}
|
|
493
|
+
};
|
|
494
|
+
}
|
|
495
|
+
function getSDKUrl() {
|
|
496
|
+
var _a;
|
|
497
|
+
if (typeof process !== "undefined" && process.versions && process.versions.node) {
|
|
498
|
+
if (isProduction()) {
|
|
499
|
+
const sdkUrl = (_a = process.env["NEXT_PUBLIC_ORY_SDK_URL"]) != null ? _a : process.env["ORY_SDK_URL"];
|
|
500
|
+
if (!sdkUrl) {
|
|
501
|
+
throw new Error(
|
|
502
|
+
"Unable to determine SDK URL. Please set NEXT_PUBLIC_ORY_SDK_URL and/or ORY_SDK_URL in production environments."
|
|
503
|
+
);
|
|
504
|
+
}
|
|
505
|
+
return sdkUrl.replace(/\/$/, "");
|
|
506
|
+
} else {
|
|
507
|
+
if (process.env["__NEXT_PRIVATE_ORIGIN"]) {
|
|
508
|
+
return process.env["__NEXT_PRIVATE_ORIGIN"].replace(/\/$/, "");
|
|
509
|
+
} else if (process.env["VERCEL_URL"]) {
|
|
510
|
+
return `https://${process.env["VERCEL_URL"]}`.replace(/\/$/, "");
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
if (typeof window !== "undefined") {
|
|
515
|
+
return window.location.origin;
|
|
516
|
+
}
|
|
517
|
+
throw new Error(
|
|
518
|
+
"Unable to determine SDK URL. Please set NEXT_PUBLIC_ORY_SDK_URL and/or ORY_SDK_URL or supply the sdk.url parameter in the Ory configuration."
|
|
519
|
+
);
|
|
520
|
+
}
|
|
324
521
|
function mergeTranslations(customTranslations) {
|
|
325
522
|
return Object.keys(customTranslations).reduce((acc, key) => {
|
|
326
523
|
acc[key] = { ...OryLocales[key], ...customTranslations[key] };
|
|
@@ -350,17 +547,18 @@ var IntlProvider = ({
|
|
|
350
547
|
function OryProvider({
|
|
351
548
|
children,
|
|
352
549
|
components: Components,
|
|
550
|
+
config,
|
|
353
551
|
...oryFlowProps
|
|
354
552
|
}) {
|
|
355
553
|
var _a, _b, _c;
|
|
356
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
554
|
+
return /* @__PURE__ */ jsxRuntime.jsx(OryConfigurationProvider, { sdk: config.sdk, project: config.project, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
357
555
|
IntlProvider,
|
|
358
556
|
{
|
|
359
|
-
locale: (_b = (_a =
|
|
360
|
-
customTranslations: (_c =
|
|
557
|
+
locale: (_b = (_a = config.intl) == null ? void 0 : _a.locale) != null ? _b : "en",
|
|
558
|
+
customTranslations: (_c = config.intl) == null ? void 0 : _c.customTranslations,
|
|
361
559
|
children: /* @__PURE__ */ jsxRuntime.jsx(OryFlowProvider, { ...oryFlowProps, children: /* @__PURE__ */ jsxRuntime.jsx(OryComponentProvider, { components: Components, children }) })
|
|
362
560
|
}
|
|
363
|
-
);
|
|
561
|
+
) });
|
|
364
562
|
}
|
|
365
563
|
function OryCardHeader() {
|
|
366
564
|
const { Card } = useComponents();
|
|
@@ -376,6 +574,22 @@ function computeDefaultValues(nodes) {
|
|
|
376
574
|
if (attrs.name === "method" || attrs.type === "submit" || typeof attrs.value === "undefined") {
|
|
377
575
|
return acc;
|
|
378
576
|
}
|
|
577
|
+
if (attrs.name.startsWith("grant_scope")) {
|
|
578
|
+
const scope = attrs.value;
|
|
579
|
+
if (Array.isArray(acc.grant_scope)) {
|
|
580
|
+
return {
|
|
581
|
+
...acc,
|
|
582
|
+
// We want to have all scopes accepted by default, so that the user has to actively uncheck them.
|
|
583
|
+
grant_scope: [...acc.grant_scope, scope]
|
|
584
|
+
};
|
|
585
|
+
} else if (!acc.grant_scope) {
|
|
586
|
+
return {
|
|
587
|
+
...acc,
|
|
588
|
+
grant_scope: [scope]
|
|
589
|
+
};
|
|
590
|
+
}
|
|
591
|
+
return acc;
|
|
592
|
+
}
|
|
379
593
|
return unrollTrait(
|
|
380
594
|
{
|
|
381
595
|
name: attrs.name,
|
|
@@ -464,31 +678,143 @@ function OryCardContent({ children }) {
|
|
|
464
678
|
return /* @__PURE__ */ jsxRuntime.jsx(Card.Content, { children });
|
|
465
679
|
}
|
|
466
680
|
|
|
467
|
-
// src/theme/default/utils/form.ts
|
|
468
|
-
function isGroupImmediateSubmit(group) {
|
|
469
|
-
return group === "code";
|
|
470
|
-
}
|
|
471
|
-
function frontendClient(sdkUrl, opts = {}) {
|
|
472
|
-
const config = new clientFetch.Configuration({
|
|
473
|
-
...opts,
|
|
474
|
-
basePath: sdkUrl,
|
|
475
|
-
headers: {
|
|
476
|
-
Accept: "application/json",
|
|
477
|
-
...opts.headers
|
|
478
|
-
}
|
|
479
|
-
});
|
|
480
|
-
return new clientFetch.FrontendApi(config);
|
|
481
|
-
}
|
|
482
|
-
|
|
483
681
|
// src/util/internal.ts
|
|
484
682
|
function replaceWindowFlowId(flow) {
|
|
485
683
|
const url = new URL(window.location.href);
|
|
486
684
|
url.searchParams.set("flow", flow);
|
|
487
685
|
window.location.href = url.toString();
|
|
488
686
|
}
|
|
687
|
+
function isGenericErrorResponse(response) {
|
|
688
|
+
return typeof response === "object" && !!response && "error" in response && typeof response.error === "object" && !!response.error && "id" in response.error;
|
|
689
|
+
}
|
|
690
|
+
function isNeedsPrivilegedSessionError(response) {
|
|
691
|
+
return isGenericErrorResponse(response) && response.error.id === "session_refresh_required";
|
|
692
|
+
}
|
|
693
|
+
function isSelfServiceFlowExpiredError(response) {
|
|
694
|
+
return isGenericErrorResponse(response) && response.error.id === "self_service_flow_expired";
|
|
695
|
+
}
|
|
696
|
+
function isBrowserLocationChangeRequired(response) {
|
|
697
|
+
return isGenericErrorResponse(response) && isGenericErrorResponse(response) && response.error.id === "browser_location_change_required";
|
|
698
|
+
}
|
|
699
|
+
function isAddressNotVerified(response) {
|
|
700
|
+
return isGenericErrorResponse(response) && response.error.id === "session_verified_address_required";
|
|
701
|
+
}
|
|
702
|
+
function isCsrfError(response) {
|
|
703
|
+
return isGenericErrorResponse(response) && response.error.id === "security_csrf_violation";
|
|
704
|
+
}
|
|
705
|
+
var isResponseError = (err) => {
|
|
706
|
+
if (err instanceof clientFetch.ResponseError) {
|
|
707
|
+
return true;
|
|
708
|
+
}
|
|
709
|
+
return typeof err === "object" && !!err && "name" in err && err.name === "ResponseError";
|
|
710
|
+
};
|
|
711
|
+
var isFetchError = (err) => {
|
|
712
|
+
return err instanceof clientFetch.FetchError;
|
|
713
|
+
};
|
|
714
|
+
|
|
715
|
+
// src/util/sdk-helpers/urlHelpers.ts
|
|
716
|
+
var verificationUrl = (config) => config.sdk.url + "/self-service/verification/browser";
|
|
717
|
+
var handleFlowError = (opts) => async (err) => {
|
|
718
|
+
var _a;
|
|
719
|
+
if (!isResponseError(err)) {
|
|
720
|
+
if (isFetchError(err)) {
|
|
721
|
+
throw new clientFetch.FetchError(
|
|
722
|
+
err,
|
|
723
|
+
"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."
|
|
724
|
+
);
|
|
725
|
+
}
|
|
726
|
+
throw err;
|
|
727
|
+
}
|
|
728
|
+
const contentType = err.response.headers.get("content-type") || "";
|
|
729
|
+
if (contentType.includes("application/json")) {
|
|
730
|
+
const body = await toBody(err.response);
|
|
731
|
+
if (isSelfServiceFlowExpiredError(body)) {
|
|
732
|
+
opts.onRestartFlow(body.use_flow_id);
|
|
733
|
+
return;
|
|
734
|
+
} else if (isAddressNotVerified(body)) {
|
|
735
|
+
for (const continueWith of ((_a = body.error.details) == null ? void 0 : _a.continue_with) || []) {
|
|
736
|
+
if (continueWith.action === "show_verification_ui" && continueWith.flow.url) {
|
|
737
|
+
opts.onRedirect(continueWith.flow.url, true);
|
|
738
|
+
return;
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
opts.onRedirect(verificationUrl(opts.config), true);
|
|
742
|
+
return;
|
|
743
|
+
} else if (isBrowserLocationChangeRequired(body) && body.redirect_browser_to) {
|
|
744
|
+
opts.onRedirect(body.redirect_browser_to, true);
|
|
745
|
+
return;
|
|
746
|
+
} else if (isNeedsPrivilegedSessionError(body)) {
|
|
747
|
+
opts.onRedirect(body.redirect_browser_to, true);
|
|
748
|
+
return;
|
|
749
|
+
} else if (isCsrfError(body)) {
|
|
750
|
+
opts.onRestartFlow();
|
|
751
|
+
return;
|
|
752
|
+
}
|
|
753
|
+
switch (err.response.status) {
|
|
754
|
+
case 404:
|
|
755
|
+
opts.onRestartFlow();
|
|
756
|
+
return;
|
|
757
|
+
case 410:
|
|
758
|
+
opts.onRestartFlow();
|
|
759
|
+
return;
|
|
760
|
+
case 400:
|
|
761
|
+
return opts.onValidationError(
|
|
762
|
+
await err.response.json()
|
|
763
|
+
);
|
|
764
|
+
case 403:
|
|
765
|
+
opts.onRestartFlow();
|
|
766
|
+
return;
|
|
767
|
+
case 422: {
|
|
768
|
+
throw new clientFetch.ResponseError(
|
|
769
|
+
err.response,
|
|
770
|
+
"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()
|
|
771
|
+
);
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
throw new clientFetch.ResponseError(
|
|
775
|
+
err.response,
|
|
776
|
+
"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()
|
|
777
|
+
);
|
|
778
|
+
} else if (
|
|
779
|
+
// Not a JSON response? If it's a text response we will return an error informing the user that the response is not JSON.
|
|
780
|
+
contentType.includes("text/") || contentType.includes("html") || contentType.includes("xml")
|
|
781
|
+
) {
|
|
782
|
+
await logResponseError(err.response, true);
|
|
783
|
+
throw new clientFetch.ResponseError(
|
|
784
|
+
err.response,
|
|
785
|
+
`The Ory API endpoint returned an unexpected HTML or text response. Check your console output for details.`
|
|
786
|
+
);
|
|
787
|
+
}
|
|
788
|
+
await logResponseError(err.response, false);
|
|
789
|
+
throw new clientFetch.ResponseError(
|
|
790
|
+
err.response,
|
|
791
|
+
"The Ory API endpoint returned unexpected content type `" + contentType + "`. Check your console output for details."
|
|
792
|
+
);
|
|
793
|
+
};
|
|
794
|
+
async function toBody(response) {
|
|
795
|
+
try {
|
|
796
|
+
return await response.clone().json();
|
|
797
|
+
} catch (e) {
|
|
798
|
+
await logResponseError(response, true, [e]);
|
|
799
|
+
throw new clientFetch.ResponseError(
|
|
800
|
+
response,
|
|
801
|
+
"Unable to decode API response using JSON."
|
|
802
|
+
);
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
async function logResponseError(response, printBody, wrap) {
|
|
806
|
+
console.error("Unable to decode API response", {
|
|
807
|
+
response: {
|
|
808
|
+
status: response.status,
|
|
809
|
+
headers: Object.fromEntries(response.headers.entries()),
|
|
810
|
+
body: printBody ? await response.clone().text() : void 0
|
|
811
|
+
},
|
|
812
|
+
errors: wrap
|
|
813
|
+
});
|
|
814
|
+
}
|
|
489
815
|
|
|
490
816
|
// src/util/onSubmitLogin.ts
|
|
491
|
-
async function onSubmitLogin({
|
|
817
|
+
async function onSubmitLogin({ flow }, config, {
|
|
492
818
|
setFlowContainer,
|
|
493
819
|
body,
|
|
494
820
|
onRedirect
|
|
@@ -507,7 +833,7 @@ async function onSubmitLogin({ config, flow }, {
|
|
|
507
833
|
window.location.href = // eslint-disable-next-line promise/always-return
|
|
508
834
|
(_a2 = flow.return_to) != null ? _a2 : config.sdk.url + "/self-service/login/browser";
|
|
509
835
|
}).catch(
|
|
510
|
-
|
|
836
|
+
handleFlowError({
|
|
511
837
|
onRestartFlow: (useFlowId) => {
|
|
512
838
|
if (useFlowId) {
|
|
513
839
|
replaceWindowFlowId(useFlowId);
|
|
@@ -517,27 +843,21 @@ async function onSubmitLogin({ config, flow }, {
|
|
|
517
843
|
},
|
|
518
844
|
onValidationError: (body2) => {
|
|
519
845
|
setFlowContainer({
|
|
520
|
-
config,
|
|
521
846
|
flow: body2,
|
|
522
847
|
flowType: clientFetch.FlowType.Login
|
|
523
848
|
});
|
|
524
849
|
},
|
|
525
|
-
onRedirect
|
|
850
|
+
onRedirect,
|
|
851
|
+
config
|
|
526
852
|
})
|
|
527
853
|
);
|
|
528
854
|
}
|
|
529
|
-
async function onSubmitRecovery({
|
|
855
|
+
async function onSubmitRecovery({ flow }, config, {
|
|
530
856
|
setFlowContainer,
|
|
531
857
|
body,
|
|
532
858
|
onRedirect
|
|
533
859
|
}) {
|
|
534
|
-
|
|
535
|
-
if (!config.sdk.url) {
|
|
536
|
-
throw new Error(
|
|
537
|
-
`Please supply your Ory Network SDK url to the Ory Elements configuration.`
|
|
538
|
-
);
|
|
539
|
-
}
|
|
540
|
-
await frontendClient(config.sdk.url, (_a = config.sdk.options) != null ? _a : {}).updateRecoveryFlowRaw({
|
|
860
|
+
await config.sdk.frontend.updateRecoveryFlowRaw({
|
|
541
861
|
flow: flow.id,
|
|
542
862
|
updateRecoveryFlowBody: body
|
|
543
863
|
}).then(async (res) => {
|
|
@@ -550,11 +870,10 @@ async function onSubmitRecovery({ config, flow }, {
|
|
|
550
870
|
}
|
|
551
871
|
setFlowContainer({
|
|
552
872
|
flow: flow2,
|
|
553
|
-
flowType: clientFetch.FlowType.Recovery
|
|
554
|
-
config
|
|
873
|
+
flowType: clientFetch.FlowType.Recovery
|
|
555
874
|
});
|
|
556
875
|
}).catch(
|
|
557
|
-
|
|
876
|
+
handleFlowError({
|
|
558
877
|
onRestartFlow: (useFlowId) => {
|
|
559
878
|
if (useFlowId) {
|
|
560
879
|
replaceWindowFlowId(useFlowId);
|
|
@@ -569,12 +888,12 @@ async function onSubmitRecovery({ config, flow }, {
|
|
|
569
888
|
} else {
|
|
570
889
|
setFlowContainer({
|
|
571
890
|
flow: body2,
|
|
572
|
-
flowType: clientFetch.FlowType.Recovery
|
|
573
|
-
config
|
|
891
|
+
flowType: clientFetch.FlowType.Recovery
|
|
574
892
|
});
|
|
575
893
|
}
|
|
576
894
|
},
|
|
577
|
-
onRedirect
|
|
895
|
+
onRedirect,
|
|
896
|
+
config
|
|
578
897
|
})
|
|
579
898
|
);
|
|
580
899
|
}
|
|
@@ -591,19 +910,12 @@ function handleContinueWithRecoveryUIError(error, config, onRedirect) {
|
|
|
591
910
|
}
|
|
592
911
|
onRedirect(clientFetch.recoveryUrl(config), true);
|
|
593
912
|
}
|
|
594
|
-
async function onSubmitRegistration({
|
|
913
|
+
async function onSubmitRegistration({ flow }, config, {
|
|
595
914
|
setFlowContainer,
|
|
596
915
|
body,
|
|
597
916
|
onRedirect
|
|
598
917
|
}) {
|
|
599
|
-
|
|
600
|
-
if (!config.sdk.url) {
|
|
601
|
-
throw new Error(
|
|
602
|
-
`Please supply your Ory Network SDK url to the Ory Elements configuration.`
|
|
603
|
-
);
|
|
604
|
-
}
|
|
605
|
-
const client = frontendClient(config.sdk.url, (_a = config.sdk.options) != null ? _a : {});
|
|
606
|
-
await client.updateRegistrationFlowRaw({
|
|
918
|
+
await config.sdk.frontend.updateRegistrationFlowRaw({
|
|
607
919
|
flow: flow.id,
|
|
608
920
|
updateRegistrationFlowBody: body
|
|
609
921
|
}).then(async (res) => {
|
|
@@ -616,7 +928,7 @@ async function onSubmitRegistration({ config, flow }, {
|
|
|
616
928
|
}
|
|
617
929
|
onRedirect(clientFetch.registrationUrl(config), true);
|
|
618
930
|
}).catch(
|
|
619
|
-
|
|
931
|
+
handleFlowError({
|
|
620
932
|
onRestartFlow: (useFlowId) => {
|
|
621
933
|
if (useFlowId) {
|
|
622
934
|
replaceWindowFlowId(useFlowId);
|
|
@@ -627,27 +939,20 @@ async function onSubmitRegistration({ config, flow }, {
|
|
|
627
939
|
onValidationError: (body2) => {
|
|
628
940
|
setFlowContainer({
|
|
629
941
|
flow: body2,
|
|
630
|
-
flowType: clientFetch.FlowType.Registration
|
|
631
|
-
config
|
|
942
|
+
flowType: clientFetch.FlowType.Registration
|
|
632
943
|
});
|
|
633
944
|
},
|
|
634
|
-
onRedirect
|
|
945
|
+
onRedirect,
|
|
946
|
+
config
|
|
635
947
|
})
|
|
636
948
|
);
|
|
637
949
|
}
|
|
638
|
-
async function onSubmitSettings({
|
|
950
|
+
async function onSubmitSettings({ flow }, config, {
|
|
639
951
|
setFlowContainer,
|
|
640
952
|
body,
|
|
641
953
|
onRedirect
|
|
642
954
|
}) {
|
|
643
|
-
|
|
644
|
-
if (!config.sdk.url) {
|
|
645
|
-
throw new Error(
|
|
646
|
-
`Please supply your Ory Network SDK url to the Ory Elements configuration.`
|
|
647
|
-
);
|
|
648
|
-
}
|
|
649
|
-
const client = frontendClient(config.sdk.url, (_a = config.sdk.options) != null ? _a : {});
|
|
650
|
-
await client.updateSettingsFlowRaw({
|
|
955
|
+
await config.sdk.frontend.updateSettingsFlowRaw({
|
|
651
956
|
flow: flow.id,
|
|
652
957
|
updateSettingsFlowBody: body
|
|
653
958
|
}).then(async (res) => {
|
|
@@ -660,11 +965,10 @@ async function onSubmitSettings({ config, flow }, {
|
|
|
660
965
|
}
|
|
661
966
|
setFlowContainer({
|
|
662
967
|
flow: body2,
|
|
663
|
-
flowType: clientFetch.FlowType.Settings
|
|
664
|
-
config
|
|
968
|
+
flowType: clientFetch.FlowType.Settings
|
|
665
969
|
});
|
|
666
970
|
}).catch(
|
|
667
|
-
|
|
971
|
+
handleFlowError({
|
|
668
972
|
onRestartFlow: (useFlowId) => {
|
|
669
973
|
if (useFlowId) {
|
|
670
974
|
replaceWindowFlowId(useFlowId);
|
|
@@ -675,11 +979,11 @@ async function onSubmitSettings({ config, flow }, {
|
|
|
675
979
|
onValidationError: (body2) => {
|
|
676
980
|
setFlowContainer({
|
|
677
981
|
flow: body2,
|
|
678
|
-
flowType: clientFetch.FlowType.Settings
|
|
679
|
-
config
|
|
982
|
+
flowType: clientFetch.FlowType.Settings
|
|
680
983
|
});
|
|
681
984
|
},
|
|
682
|
-
onRedirect
|
|
985
|
+
onRedirect,
|
|
986
|
+
config
|
|
683
987
|
})
|
|
684
988
|
).catch((err) => {
|
|
685
989
|
if (clientFetch.isResponseError(err)) {
|
|
@@ -693,28 +997,21 @@ async function onSubmitSettings({ config, flow }, {
|
|
|
693
997
|
}
|
|
694
998
|
});
|
|
695
999
|
}
|
|
696
|
-
async function onSubmitVerification({
|
|
1000
|
+
async function onSubmitVerification({ flow }, config, {
|
|
697
1001
|
setFlowContainer,
|
|
698
1002
|
body,
|
|
699
1003
|
onRedirect
|
|
700
1004
|
}) {
|
|
701
|
-
|
|
702
|
-
if (!config.sdk.url) {
|
|
703
|
-
throw new Error(
|
|
704
|
-
`Please supply your Ory Network SDK URL to the Ory Elements configuration.`
|
|
705
|
-
);
|
|
706
|
-
}
|
|
707
|
-
await frontendClient(config.sdk.url, (_a = config.sdk.options) != null ? _a : {}).updateVerificationFlowRaw({
|
|
1005
|
+
await config.sdk.frontend.updateVerificationFlowRaw({
|
|
708
1006
|
flow: flow.id,
|
|
709
1007
|
updateVerificationFlowBody: body
|
|
710
1008
|
}).then(
|
|
711
1009
|
async (res) => setFlowContainer({
|
|
712
1010
|
flow: await res.value(),
|
|
713
|
-
flowType: clientFetch.FlowType.Verification
|
|
714
|
-
config
|
|
1011
|
+
flowType: clientFetch.FlowType.Verification
|
|
715
1012
|
})
|
|
716
1013
|
).catch(
|
|
717
|
-
|
|
1014
|
+
handleFlowError({
|
|
718
1015
|
onRestartFlow: (useFlowId) => {
|
|
719
1016
|
if (useFlowId) {
|
|
720
1017
|
replaceWindowFlowId(useFlowId);
|
|
@@ -725,11 +1022,11 @@ async function onSubmitVerification({ config, flow }, {
|
|
|
725
1022
|
onValidationError: (body2) => {
|
|
726
1023
|
setFlowContainer({
|
|
727
1024
|
flow: body2,
|
|
728
|
-
flowType: clientFetch.FlowType.Verification
|
|
729
|
-
config
|
|
1025
|
+
flowType: clientFetch.FlowType.Verification
|
|
730
1026
|
});
|
|
731
1027
|
},
|
|
732
|
-
onRedirect
|
|
1028
|
+
onRedirect,
|
|
1029
|
+
config
|
|
733
1030
|
})
|
|
734
1031
|
);
|
|
735
1032
|
}
|
|
@@ -739,6 +1036,7 @@ var supportsSelectAccountPrompt = ["google", "github"];
|
|
|
739
1036
|
function useOryFormSubmit(onAfterSubmit) {
|
|
740
1037
|
const flowContainer = useOryFlow();
|
|
741
1038
|
const methods = reactHookForm.useFormContext();
|
|
1039
|
+
const config = useOryConfiguration();
|
|
742
1040
|
const handleSuccess = (flow) => {
|
|
743
1041
|
flowContainer.setFlowContainer(flow);
|
|
744
1042
|
methods.reset(computeDefaultValues(flow.flow.ui.nodes));
|
|
@@ -755,7 +1053,7 @@ function useOryFormSubmit(onAfterSubmit) {
|
|
|
755
1053
|
if (submitData.method === "code" && data.code) {
|
|
756
1054
|
submitData.resend = "";
|
|
757
1055
|
}
|
|
758
|
-
await onSubmitLogin(flowContainer, {
|
|
1056
|
+
await onSubmitLogin(flowContainer, config, {
|
|
759
1057
|
onRedirect,
|
|
760
1058
|
setFlowContainer: handleSuccess,
|
|
761
1059
|
body: submitData
|
|
@@ -769,7 +1067,7 @@ function useOryFormSubmit(onAfterSubmit) {
|
|
|
769
1067
|
if (submitData.method === "code" && submitData.code) {
|
|
770
1068
|
submitData.resend = "";
|
|
771
1069
|
}
|
|
772
|
-
await onSubmitRegistration(flowContainer, {
|
|
1070
|
+
await onSubmitRegistration(flowContainer, config, {
|
|
773
1071
|
onRedirect,
|
|
774
1072
|
setFlowContainer: handleSuccess,
|
|
775
1073
|
body: submitData
|
|
@@ -777,7 +1075,7 @@ function useOryFormSubmit(onAfterSubmit) {
|
|
|
777
1075
|
break;
|
|
778
1076
|
}
|
|
779
1077
|
case clientFetch.FlowType.Verification:
|
|
780
|
-
await onSubmitVerification(flowContainer, {
|
|
1078
|
+
await onSubmitVerification(flowContainer, config, {
|
|
781
1079
|
onRedirect,
|
|
782
1080
|
setFlowContainer: handleSuccess,
|
|
783
1081
|
body: data
|
|
@@ -790,7 +1088,7 @@ function useOryFormSubmit(onAfterSubmit) {
|
|
|
790
1088
|
if (data.code) {
|
|
791
1089
|
submitData.email = "";
|
|
792
1090
|
}
|
|
793
|
-
await onSubmitRecovery(flowContainer, {
|
|
1091
|
+
await onSubmitRecovery(flowContainer, config, {
|
|
794
1092
|
onRedirect,
|
|
795
1093
|
setFlowContainer: handleSuccess,
|
|
796
1094
|
body: submitData
|
|
@@ -818,13 +1116,26 @@ function useOryFormSubmit(onAfterSubmit) {
|
|
|
818
1116
|
if ("passkey_remove" in submitData) {
|
|
819
1117
|
submitData.method = "passkey";
|
|
820
1118
|
}
|
|
821
|
-
await onSubmitSettings(flowContainer, {
|
|
1119
|
+
await onSubmitSettings(flowContainer, config, {
|
|
822
1120
|
onRedirect,
|
|
823
1121
|
setFlowContainer: handleSuccess,
|
|
824
1122
|
body: submitData
|
|
825
1123
|
});
|
|
826
1124
|
break;
|
|
827
1125
|
}
|
|
1126
|
+
case clientFetch.FlowType.OAuth2Consent: {
|
|
1127
|
+
const response = await fetch(flowContainer.flow.ui.action, {
|
|
1128
|
+
method: "POST",
|
|
1129
|
+
body: JSON.stringify(data),
|
|
1130
|
+
headers: {
|
|
1131
|
+
"Content-Type": "application/json"
|
|
1132
|
+
}
|
|
1133
|
+
});
|
|
1134
|
+
const oauth2Success = await response.json();
|
|
1135
|
+
if (oauth2Success.redirect_to && typeof oauth2Success.redirect_to === "string") {
|
|
1136
|
+
onRedirect(oauth2Success.redirect_to);
|
|
1137
|
+
}
|
|
1138
|
+
}
|
|
828
1139
|
}
|
|
829
1140
|
if ("password" in data) {
|
|
830
1141
|
methods.setValue("password", "");
|
|
@@ -839,7 +1150,11 @@ function useOryFormSubmit(onAfterSubmit) {
|
|
|
839
1150
|
};
|
|
840
1151
|
return onSubmit;
|
|
841
1152
|
}
|
|
842
|
-
function OryForm({
|
|
1153
|
+
function OryForm({
|
|
1154
|
+
children,
|
|
1155
|
+
onAfterSubmit,
|
|
1156
|
+
"data-testid": dataTestId
|
|
1157
|
+
}) {
|
|
843
1158
|
const { Form } = useComponents();
|
|
844
1159
|
const flowContainer = useOryFlow();
|
|
845
1160
|
const methods = reactHookForm.useFormContext();
|
|
@@ -848,6 +1163,9 @@ function OryForm({ children, onAfterSubmit }) {
|
|
|
848
1163
|
const onSubmit = useOryFormSubmit(onAfterSubmit);
|
|
849
1164
|
const hasMethods = flowContainer.flow.ui.nodes.some((node) => {
|
|
850
1165
|
if (clientFetch.isUiNodeInputAttributes(node.attributes)) {
|
|
1166
|
+
if (node.attributes.type === "hidden") {
|
|
1167
|
+
return false;
|
|
1168
|
+
}
|
|
851
1169
|
return node.attributes.name !== "csrf_token";
|
|
852
1170
|
} else if (clientFetch.isUiNodeAnchorAttributes(node.attributes)) {
|
|
853
1171
|
return true;
|
|
@@ -867,17 +1185,15 @@ function OryForm({ children, onAfterSubmit }) {
|
|
|
867
1185
|
}),
|
|
868
1186
|
type: "error"
|
|
869
1187
|
};
|
|
870
|
-
return /* @__PURE__ */ jsxRuntime.
|
|
871
|
-
/* @__PURE__ */ jsxRuntime.jsx(Message.Root, { children: /* @__PURE__ */ jsxRuntime.jsx(Message.Content, { message: m }, m.id) }),
|
|
872
|
-
/* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
|
|
873
|
-
] });
|
|
1188
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-testid": dataTestId, children: /* @__PURE__ */ jsxRuntime.jsx(Message.Root, { children: /* @__PURE__ */ jsxRuntime.jsx(Message.Content, { message: m }, m.id) }) });
|
|
874
1189
|
}
|
|
875
|
-
if (flowContainer.flowType === clientFetch.FlowType.Login && flowContainer.formState.current === "method_active" && flowContainer.formState.method === "code") {
|
|
1190
|
+
if ((flowContainer.flowType === clientFetch.FlowType.Login || flowContainer.flowType === clientFetch.FlowType.Registration) && flowContainer.formState.current === "method_active" && flowContainer.formState.method === "code") {
|
|
876
1191
|
methods.setValue("method", "code");
|
|
877
1192
|
}
|
|
878
1193
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
879
1194
|
Form.Root,
|
|
880
1195
|
{
|
|
1196
|
+
"data-testid": dataTestId,
|
|
881
1197
|
action: flowContainer.flow.ui.action,
|
|
882
1198
|
method: flowContainer.flow.ui.method,
|
|
883
1199
|
onSubmit: (e) => void methods.handleSubmit(onSubmit)(e),
|
|
@@ -912,7 +1228,7 @@ var NodeInput = ({
|
|
|
912
1228
|
}) => {
|
|
913
1229
|
var _a;
|
|
914
1230
|
const { Node: Node2 } = useComponents();
|
|
915
|
-
const { setValue } = reactHookForm.useFormContext();
|
|
1231
|
+
const { setValue, watch } = reactHookForm.useFormContext();
|
|
916
1232
|
const {
|
|
917
1233
|
onloadTrigger,
|
|
918
1234
|
onclickTrigger,
|
|
@@ -925,7 +1241,7 @@ var NodeInput = ({
|
|
|
925
1241
|
const isResendNode = ((_a = node.meta.label) == null ? void 0 : _a.id) === 1070008;
|
|
926
1242
|
const isScreenSelectionNode = "name" in node.attributes && node.attributes.name === "screen";
|
|
927
1243
|
const setFormValue = () => {
|
|
928
|
-
if (attrs.value && !(isResendNode || isScreenSelectionNode)) {
|
|
1244
|
+
if (attrs.value && !(isResendNode || isScreenSelectionNode || node.group === clientFetch.UiNodeGroupEnum.Oauth2Consent)) {
|
|
929
1245
|
setValue(attrs.name, attrs.value);
|
|
930
1246
|
}
|
|
931
1247
|
};
|
|
@@ -950,6 +1266,19 @@ var NodeInput = ({
|
|
|
950
1266
|
};
|
|
951
1267
|
const isSocial = (attrs.name === "provider" || attrs.name === "link") && (node.group === clientFetch.UiNodeGroupEnum.Oidc || node.group === clientFetch.UiNodeGroupEnum.Saml);
|
|
952
1268
|
const isPinCodeInput = attrs.name === "code" && node.group === "code" || attrs.name === "totp_code" && node.group === "totp";
|
|
1269
|
+
const handleScopeChange = (checked) => {
|
|
1270
|
+
const scopes = watch("grant_scope");
|
|
1271
|
+
if (Array.isArray(scopes)) {
|
|
1272
|
+
if (checked) {
|
|
1273
|
+
setValue("grant_scope", Array.from(/* @__PURE__ */ new Set([...scopes, attrs.value])));
|
|
1274
|
+
} else {
|
|
1275
|
+
setValue(
|
|
1276
|
+
"grant_scope",
|
|
1277
|
+
scopes.filter((scope) => scope !== attrs.value)
|
|
1278
|
+
);
|
|
1279
|
+
}
|
|
1280
|
+
}
|
|
1281
|
+
};
|
|
953
1282
|
switch (attributes.type) {
|
|
954
1283
|
case clientFetch.UiNodeInputAttributesTypeEnum.Submit:
|
|
955
1284
|
case clientFetch.UiNodeInputAttributesTypeEnum.Button:
|
|
@@ -959,6 +1288,9 @@ var NodeInput = ({
|
|
|
959
1288
|
if (isResendNode || isScreenSelectionNode) {
|
|
960
1289
|
return null;
|
|
961
1290
|
}
|
|
1291
|
+
if (node.group === "oauth2_consent") {
|
|
1292
|
+
return null;
|
|
1293
|
+
}
|
|
962
1294
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
963
1295
|
Node2.Label,
|
|
964
1296
|
{
|
|
@@ -970,6 +1302,21 @@ var NodeInput = ({
|
|
|
970
1302
|
case clientFetch.UiNodeInputAttributesTypeEnum.DatetimeLocal:
|
|
971
1303
|
throw new Error("Not implemented");
|
|
972
1304
|
case clientFetch.UiNodeInputAttributesTypeEnum.Checkbox:
|
|
1305
|
+
if (node.group === "oauth2_consent" && node.attributes.node_type === "input") {
|
|
1306
|
+
switch (node.attributes.name) {
|
|
1307
|
+
case "grant_scope":
|
|
1308
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1309
|
+
Node2.ConsentScopeCheckbox,
|
|
1310
|
+
{
|
|
1311
|
+
attributes: attrs,
|
|
1312
|
+
node,
|
|
1313
|
+
onCheckedChange: handleScopeChange
|
|
1314
|
+
}
|
|
1315
|
+
);
|
|
1316
|
+
default:
|
|
1317
|
+
return null;
|
|
1318
|
+
}
|
|
1319
|
+
}
|
|
973
1320
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
974
1321
|
Node2.Label,
|
|
975
1322
|
{
|
|
@@ -1038,47 +1385,132 @@ function OryFormOidcButtons() {
|
|
|
1038
1385
|
if (filteredNodes.length === 0) {
|
|
1039
1386
|
return null;
|
|
1040
1387
|
}
|
|
1041
|
-
return /* @__PURE__ */ jsxRuntime.jsx(Form.OidcRoot, { nodes: filteredNodes, children: filteredNodes.map((node
|
|
1042
|
-
Node2.OidcButton,
|
|
1043
|
-
{
|
|
1044
|
-
node,
|
|
1045
|
-
attributes: node.attributes,
|
|
1046
|
-
onClick: () => {
|
|
1047
|
-
setValue(
|
|
1048
|
-
"provider",
|
|
1049
|
-
node.attributes.value
|
|
1050
|
-
);
|
|
1051
|
-
setValue("method", node.group);
|
|
1388
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Form.OidcRoot, { nodes: filteredNodes, children: filteredNodes.map((node) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1389
|
+
Node2.OidcButton,
|
|
1390
|
+
{
|
|
1391
|
+
node,
|
|
1392
|
+
attributes: node.attributes,
|
|
1393
|
+
onClick: () => {
|
|
1394
|
+
setValue(
|
|
1395
|
+
"provider",
|
|
1396
|
+
node.attributes.value
|
|
1397
|
+
);
|
|
1398
|
+
setValue("method", node.group);
|
|
1399
|
+
}
|
|
1400
|
+
},
|
|
1401
|
+
clientFetch.getNodeId(node)
|
|
1402
|
+
)) });
|
|
1403
|
+
}
|
|
1404
|
+
function OryFormSocialButtonsForm() {
|
|
1405
|
+
const {
|
|
1406
|
+
flow: { ui }
|
|
1407
|
+
} = useOryFlow();
|
|
1408
|
+
const filteredNodes = ui.nodes.filter(
|
|
1409
|
+
(node) => node.group === clientFetch.UiNodeGroupEnum.Saml || node.group === clientFetch.UiNodeGroupEnum.Oidc
|
|
1410
|
+
);
|
|
1411
|
+
if (filteredNodes.length === 0) {
|
|
1412
|
+
return null;
|
|
1413
|
+
}
|
|
1414
|
+
return /* @__PURE__ */ jsxRuntime.jsx(OryFormProvider, { children: /* @__PURE__ */ jsxRuntime.jsx(OryForm, { "data-testid": `ory/form/methods/oidc-saml`, children: /* @__PURE__ */ jsxRuntime.jsx(OryFormOidcButtons, {}) }) });
|
|
1415
|
+
}
|
|
1416
|
+
function OryTwoStepCardStateMethodActive({
|
|
1417
|
+
formState
|
|
1418
|
+
}) {
|
|
1419
|
+
const { Form } = useComponents();
|
|
1420
|
+
const { flow, flowType, dispatchFormState } = useOryFlow();
|
|
1421
|
+
const { ui } = flow;
|
|
1422
|
+
const nodeSorter = useNodeSorter();
|
|
1423
|
+
const sortNodes = (a, b) => nodeSorter(a, b, { flowType });
|
|
1424
|
+
const groupsToShow = useNodeGroupsWithVisibleNodes(ui.nodes);
|
|
1425
|
+
const finalNodes = getFinalNodes(groupsToShow, formState.method);
|
|
1426
|
+
const selectedMethodIsSocial = formState.method === clientFetch.UiNodeGroupEnum.Oidc || formState.method === clientFetch.UiNodeGroupEnum.Saml;
|
|
1427
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(OryCard, { children: [
|
|
1428
|
+
/* @__PURE__ */ jsxRuntime.jsx(OryCardHeader, {}),
|
|
1429
|
+
/* @__PURE__ */ jsxRuntime.jsxs(OryCardContent, { children: [
|
|
1430
|
+
/* @__PURE__ */ jsxRuntime.jsx(OryCardValidationMessages, {}),
|
|
1431
|
+
selectedMethodIsSocial && /* @__PURE__ */ jsxRuntime.jsx(OryFormSocialButtonsForm, {}),
|
|
1432
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1433
|
+
OryForm,
|
|
1434
|
+
{
|
|
1435
|
+
"data-testid": `ory/form/methods/local`,
|
|
1436
|
+
onAfterSubmit: handleAfterFormSubmit(dispatchFormState),
|
|
1437
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(Form.Group, { children: [
|
|
1438
|
+
ui.nodes.filter(
|
|
1439
|
+
(n) => clientFetch.isUiNodeScriptAttributes(n.attributes) || n.group === clientFetch.UiNodeGroupEnum.Default || n.group === clientFetch.UiNodeGroupEnum.Profile
|
|
1440
|
+
).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k)),
|
|
1441
|
+
finalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
|
|
1442
|
+
] })
|
|
1443
|
+
}
|
|
1444
|
+
)
|
|
1445
|
+
] }),
|
|
1446
|
+
/* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
|
|
1447
|
+
] });
|
|
1448
|
+
}
|
|
1449
|
+
function OryTwoStepCardStateProvideIdentifier() {
|
|
1450
|
+
const { Form, Card } = useComponents();
|
|
1451
|
+
const { flowType, flow, dispatchFormState } = useOryFlow();
|
|
1452
|
+
const nodeSorter = useNodeSorter();
|
|
1453
|
+
const sortNodes = (a, b) => nodeSorter(a, b, { flowType });
|
|
1454
|
+
const nonSsoNodes = withoutSingleSignOnNodes(flow.ui.nodes).sort(sortNodes);
|
|
1455
|
+
const hasSso = flow.ui.nodes.filter(isNodeVisible).some(
|
|
1456
|
+
(node) => node.group === clientFetch.UiNodeGroupEnum.Oidc || node.group === clientFetch.UiNodeGroupEnum.Saml
|
|
1457
|
+
);
|
|
1458
|
+
const showSsoDivider = hasSso && nonSsoNodes.some(isNodeVisible);
|
|
1459
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(OryCard, { children: [
|
|
1460
|
+
/* @__PURE__ */ jsxRuntime.jsx(OryCardHeader, {}),
|
|
1461
|
+
/* @__PURE__ */ jsxRuntime.jsxs(OryCardContent, { children: [
|
|
1462
|
+
/* @__PURE__ */ jsxRuntime.jsx(OryCardValidationMessages, {}),
|
|
1463
|
+
/* @__PURE__ */ jsxRuntime.jsx(OryFormSocialButtonsForm, {}),
|
|
1464
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1465
|
+
OryForm,
|
|
1466
|
+
{
|
|
1467
|
+
"data-testid": `ory/form/methods/local`,
|
|
1468
|
+
onAfterSubmit: handleAfterFormSubmit(dispatchFormState),
|
|
1469
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(Form.Group, { children: [
|
|
1470
|
+
showSsoDivider && /* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
|
|
1471
|
+
nonSsoNodes.map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
|
|
1472
|
+
] })
|
|
1473
|
+
}
|
|
1474
|
+
)
|
|
1475
|
+
] }),
|
|
1476
|
+
/* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
|
|
1477
|
+
] });
|
|
1478
|
+
}
|
|
1479
|
+
function AuthMethodList({
|
|
1480
|
+
options,
|
|
1481
|
+
setSelectedGroup
|
|
1482
|
+
}) {
|
|
1483
|
+
const { Card } = useComponents();
|
|
1484
|
+
const { setValue, getValues } = reactHookForm.useFormContext();
|
|
1485
|
+
if (Object.entries(options).length === 0) {
|
|
1486
|
+
return null;
|
|
1487
|
+
}
|
|
1488
|
+
const handleClick = (group, options2) => {
|
|
1489
|
+
var _a, _b, _c, _d;
|
|
1490
|
+
if (isGroupImmediateSubmit(group)) {
|
|
1491
|
+
if (group === "code" && !getValues("identifier") && ((_b = (_a = options2 == null ? void 0 : options2.title) == null ? void 0 : _a.values) == null ? void 0 : _b.address)) {
|
|
1492
|
+
setValue("identifier", (_d = (_c = options2 == null ? void 0 : options2.title) == null ? void 0 : _c.values) == null ? void 0 : _d.address);
|
|
1052
1493
|
}
|
|
1494
|
+
setValue("method", group);
|
|
1495
|
+
} else {
|
|
1496
|
+
setSelectedGroup(group);
|
|
1497
|
+
}
|
|
1498
|
+
};
|
|
1499
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Card.AuthMethodListContainer, { children: Object.entries(options).map(([group, options2]) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1500
|
+
Card.AuthMethodListItem,
|
|
1501
|
+
{
|
|
1502
|
+
group,
|
|
1503
|
+
title: options2.title,
|
|
1504
|
+
onClick: () => handleClick(group, options2)
|
|
1053
1505
|
},
|
|
1054
|
-
|
|
1506
|
+
group
|
|
1055
1507
|
)) });
|
|
1056
1508
|
}
|
|
1057
|
-
function
|
|
1058
|
-
|
|
1059
|
-
flow: { ui }
|
|
1060
|
-
} = useOryFlow();
|
|
1061
|
-
const filteredNodes = ui.nodes.filter((node) => node.group === clientFetch.UiNodeGroupEnum.Saml || node.group === clientFetch.UiNodeGroupEnum.Oidc);
|
|
1062
|
-
if (filteredNodes.length === 0) {
|
|
1063
|
-
return null;
|
|
1064
|
-
}
|
|
1065
|
-
return /* @__PURE__ */ jsxRuntime.jsx(OryFormProvider, { children: /* @__PURE__ */ jsxRuntime.jsx(OryForm, { children: /* @__PURE__ */ jsxRuntime.jsx(OryFormOidcButtons, {}) }) });
|
|
1066
|
-
}
|
|
1067
|
-
function isUINodeGroupEnum(method) {
|
|
1068
|
-
return Object.values(clientFetch.UiNodeGroupEnum).includes(method);
|
|
1069
|
-
}
|
|
1070
|
-
function OryTwoStepCard() {
|
|
1071
|
-
var _a, _b, _c, _d;
|
|
1072
|
-
const { Form, Card } = useComponents();
|
|
1073
|
-
const { flow, flowType, formState, dispatchFormState } = useOryFlow();
|
|
1074
|
-
const { ui } = flow;
|
|
1075
|
-
const nodeSorter = useNodeSorter();
|
|
1076
|
-
const sortNodes = (a, b) => nodeSorter(a, b, { flowType });
|
|
1077
|
-
const uniqueGroups = useNodesGroups(ui.nodes);
|
|
1078
|
-
const options = Object.fromEntries(
|
|
1509
|
+
function toAuthMethodPickerOptions(visibleGroups) {
|
|
1510
|
+
return Object.fromEntries(
|
|
1079
1511
|
Object.values(clientFetch.UiNodeGroupEnum).filter((group) => {
|
|
1080
|
-
var
|
|
1081
|
-
return (
|
|
1512
|
+
var _a;
|
|
1513
|
+
return (_a = visibleGroups[group]) == null ? void 0 : _a.length;
|
|
1082
1514
|
}).filter(
|
|
1083
1515
|
(group) => ![
|
|
1084
1516
|
clientFetch.UiNodeGroupEnum.Oidc,
|
|
@@ -1090,7 +1522,19 @@ function OryTwoStepCard() {
|
|
|
1090
1522
|
].includes(group)
|
|
1091
1523
|
).map((g) => [g, {}])
|
|
1092
1524
|
);
|
|
1093
|
-
|
|
1525
|
+
}
|
|
1526
|
+
function OryTwoStepCardStateSelectMethod() {
|
|
1527
|
+
var _a, _b, _c, _d;
|
|
1528
|
+
const { Form, Card, Message } = useComponents();
|
|
1529
|
+
const { flow, flowType, dispatchFormState } = useOryFlow();
|
|
1530
|
+
const { ui } = flow;
|
|
1531
|
+
const intl = reactIntl.useIntl();
|
|
1532
|
+
const nodeSorter = useNodeSorter();
|
|
1533
|
+
const sortNodes = (a, b) => nodeSorter(a, b, { flowType });
|
|
1534
|
+
const visibleGroups = useNodeGroupsWithVisibleNodes(ui.nodes);
|
|
1535
|
+
const authMethodBlocks = toAuthMethodPickerOptions(visibleGroups);
|
|
1536
|
+
const authMethodAdditionalNodes = useFunctionalNodes(ui.nodes);
|
|
1537
|
+
if (clientFetch.UiNodeGroupEnum.Code in authMethodBlocks) {
|
|
1094
1538
|
let identifier = (_b = (_a = findNode(ui.nodes, {
|
|
1095
1539
|
group: "identifier_first",
|
|
1096
1540
|
node_type: "input",
|
|
@@ -1102,7 +1546,7 @@ function OryTwoStepCard() {
|
|
|
1102
1546
|
name: "address"
|
|
1103
1547
|
})) == null ? void 0 : _c.attributes) == null ? void 0 : _d.value);
|
|
1104
1548
|
if (identifier) {
|
|
1105
|
-
|
|
1549
|
+
authMethodBlocks[clientFetch.UiNodeGroupEnum.Code] = {
|
|
1106
1550
|
title: {
|
|
1107
1551
|
id: "identities.messages.1010023",
|
|
1108
1552
|
values: { address: identifier }
|
|
@@ -1110,89 +1554,58 @@ function OryTwoStepCard() {
|
|
|
1110
1554
|
};
|
|
1111
1555
|
}
|
|
1112
1556
|
}
|
|
1113
|
-
const
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
}
|
|
1119
|
-
|
|
1120
|
-
dispatchFormState({
|
|
1121
|
-
type: "action_select_method",
|
|
1122
|
-
method
|
|
1123
|
-
});
|
|
1124
|
-
}
|
|
1557
|
+
const noMethods = {
|
|
1558
|
+
id: 5000002,
|
|
1559
|
+
text: intl.formatMessage({
|
|
1560
|
+
id: `identities.messages.5000002`,
|
|
1561
|
+
defaultMessage: "No authentication methods are available for this request. Please contact the site or app owner."
|
|
1562
|
+
}),
|
|
1563
|
+
type: "error"
|
|
1125
1564
|
};
|
|
1126
|
-
const hasSso = ui.nodes.some(
|
|
1127
|
-
(node) => node.group === clientFetch.UiNodeGroupEnum.Oidc || node.group === clientFetch.UiNodeGroupEnum.Saml
|
|
1128
|
-
);
|
|
1129
|
-
const showSso = !(formState.current === "method_active" && !(formState.method === clientFetch.UiNodeGroupEnum.Oidc || formState.method === clientFetch.UiNodeGroupEnum.Saml));
|
|
1130
|
-
const showSsoDivider = hasSso && nonSsoNodes.filter((n) => {
|
|
1131
|
-
if (clientFetch.isUiNodeInputAttributes(n.attributes)) {
|
|
1132
|
-
return n.attributes.type !== clientFetch.UiNodeInputAttributesTypeEnum.Hidden;
|
|
1133
|
-
} else if (clientFetch.isUiNodeScriptAttributes(n.attributes)) {
|
|
1134
|
-
return false;
|
|
1135
|
-
}
|
|
1136
|
-
return true;
|
|
1137
|
-
}).length > 0;
|
|
1138
1565
|
return /* @__PURE__ */ jsxRuntime.jsxs(OryCard, { children: [
|
|
1139
1566
|
/* @__PURE__ */ jsxRuntime.jsx(OryCardHeader, {}),
|
|
1140
1567
|
/* @__PURE__ */ jsxRuntime.jsxs(OryCardContent, { children: [
|
|
1141
1568
|
/* @__PURE__ */ jsxRuntime.jsx(OryCardValidationMessages, {}),
|
|
1142
|
-
|
|
1143
|
-
/* @__PURE__ */ jsxRuntime.
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
formState.current === "select_method" && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1569
|
+
/* @__PURE__ */ jsxRuntime.jsx(OryFormSocialButtonsForm, {}),
|
|
1570
|
+
Object.entries(authMethodBlocks).length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1571
|
+
OryForm,
|
|
1572
|
+
{
|
|
1573
|
+
"data-testid": `ory/form/methods/local`,
|
|
1574
|
+
onAfterSubmit: handleAfterFormSubmit(dispatchFormState),
|
|
1575
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(Form.Group, { children: [
|
|
1150
1576
|
/* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
|
|
1151
1577
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1152
1578
|
AuthMethodList,
|
|
1153
1579
|
{
|
|
1154
|
-
options,
|
|
1580
|
+
options: authMethodBlocks,
|
|
1155
1581
|
setSelectedGroup: (group) => dispatchFormState({
|
|
1156
1582
|
type: "action_select_method",
|
|
1157
1583
|
method: group
|
|
1158
1584
|
})
|
|
1159
1585
|
}
|
|
1160
1586
|
),
|
|
1161
|
-
|
|
1162
|
-
] }),
|
|
1163
|
-
formState.current === "method_active" && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1164
|
-
ui.nodes.filter((n) => n.type === "script").map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k)),
|
|
1165
|
-
finalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
|
|
1587
|
+
authMethodAdditionalNodes.sort(sortNodes).map((node, k) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, k))
|
|
1166
1588
|
] })
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1589
|
+
}
|
|
1590
|
+
) : !hasSingleSignOnNodes(ui.nodes) && /* @__PURE__ */ jsxRuntime.jsx("div", { "data-testid": `ory/form/methods/local`, children: /* @__PURE__ */ jsxRuntime.jsx(Message.Root, { children: /* @__PURE__ */ jsxRuntime.jsx(Message.Content, { message: noMethods }, noMethods.id) }) })
|
|
1591
|
+
] }),
|
|
1592
|
+
/* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
|
|
1171
1593
|
] });
|
|
1172
1594
|
}
|
|
1173
|
-
function
|
|
1174
|
-
const {
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
}
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
};
|
|
1187
|
-
return /* @__PURE__ */ jsxRuntime.jsx(Card.AuthMethodListContainer, { children: Object.entries(options).map(([group, options2]) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
1188
|
-
Card.AuthMethodListItem,
|
|
1189
|
-
{
|
|
1190
|
-
group,
|
|
1191
|
-
title: options2.title,
|
|
1192
|
-
onClick: () => handleClick(group, options2)
|
|
1193
|
-
},
|
|
1194
|
-
group
|
|
1195
|
-
)) });
|
|
1595
|
+
function OryTwoStepCard() {
|
|
1596
|
+
const { formState } = useOryFlow();
|
|
1597
|
+
switch (formState.current) {
|
|
1598
|
+
case "provide_identifier":
|
|
1599
|
+
return /* @__PURE__ */ jsxRuntime.jsx(OryTwoStepCardStateProvideIdentifier, {});
|
|
1600
|
+
case "select_method":
|
|
1601
|
+
return /* @__PURE__ */ jsxRuntime.jsx(OryTwoStepCardStateSelectMethod, {});
|
|
1602
|
+
case "method_active":
|
|
1603
|
+
return /* @__PURE__ */ jsxRuntime.jsx(OryTwoStepCardStateMethodActive, { formState });
|
|
1604
|
+
}
|
|
1605
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1606
|
+
"unknown form state: ",
|
|
1607
|
+
formState.current
|
|
1608
|
+
] });
|
|
1196
1609
|
}
|
|
1197
1610
|
function OryFormGroups({ groups }) {
|
|
1198
1611
|
const {
|
|
@@ -1202,8 +1615,8 @@ function OryFormGroups({ groups }) {
|
|
|
1202
1615
|
const { flowType } = useOryFlow();
|
|
1203
1616
|
const { Form } = useComponents();
|
|
1204
1617
|
const nodes = ui.nodes.filter((node) => groups.indexOf(node.group) > -1).sort((a, b) => nodeSorter(a, b, { flowType }));
|
|
1205
|
-
return /* @__PURE__ */ jsxRuntime.jsx(Form.Group, { children: nodes.map((node
|
|
1206
|
-
return /* @__PURE__ */ jsxRuntime.jsx(Node, { node },
|
|
1618
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Form.Group, { children: nodes.map((node) => {
|
|
1619
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node));
|
|
1207
1620
|
}) });
|
|
1208
1621
|
}
|
|
1209
1622
|
function OryFormSection({
|
|
@@ -1232,6 +1645,19 @@ function OryFormSectionInner({
|
|
|
1232
1645
|
}
|
|
1233
1646
|
);
|
|
1234
1647
|
}
|
|
1648
|
+
function OryConsentCard() {
|
|
1649
|
+
const { Form, Card } = useComponents();
|
|
1650
|
+
const flow = useOryFlow();
|
|
1651
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(OryCard, { children: [
|
|
1652
|
+
/* @__PURE__ */ jsxRuntime.jsx(OryCardHeader, {}),
|
|
1653
|
+
/* @__PURE__ */ jsxRuntime.jsx(OryCardContent, { children: /* @__PURE__ */ jsxRuntime.jsxs(OryForm, { children: [
|
|
1654
|
+
/* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
|
|
1655
|
+
/* @__PURE__ */ jsxRuntime.jsx(Form.Group, { children: flow.flow.ui.nodes.map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node))) }),
|
|
1656
|
+
/* @__PURE__ */ jsxRuntime.jsx(Card.Divider, {}),
|
|
1657
|
+
/* @__PURE__ */ jsxRuntime.jsx(OryCardFooter, {})
|
|
1658
|
+
] }) })
|
|
1659
|
+
] });
|
|
1660
|
+
}
|
|
1235
1661
|
function OryFormGroupDivider() {
|
|
1236
1662
|
const { Card } = useComponents();
|
|
1237
1663
|
const {
|
|
@@ -1585,16 +2011,19 @@ function SettingsSectionContent({ group, nodes }) {
|
|
|
1585
2011
|
const { Card } = useComponents();
|
|
1586
2012
|
const intl = reactIntl.useIntl();
|
|
1587
2013
|
const { flow } = useOryFlow();
|
|
1588
|
-
const
|
|
2014
|
+
const groupedNodes = useNodesGroups(flow.ui.nodes, {
|
|
2015
|
+
// Script nodes are already handled by the parent component.
|
|
2016
|
+
omit: ["script"]
|
|
2017
|
+
});
|
|
1589
2018
|
if (group === clientFetch.UiNodeGroupEnum.Totp) {
|
|
1590
2019
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1591
2020
|
OryFormSection,
|
|
1592
2021
|
{
|
|
1593
|
-
nodes:
|
|
2022
|
+
nodes: groupedNodes.groups.totp,
|
|
1594
2023
|
"data-testid": "ory/screen/settings/group/totp",
|
|
1595
2024
|
children: [
|
|
1596
|
-
/* @__PURE__ */ jsxRuntime.jsx(OrySettingsTotp, { nodes: (_a =
|
|
1597
|
-
(_b =
|
|
2025
|
+
/* @__PURE__ */ jsxRuntime.jsx(OrySettingsTotp, { nodes: (_a = groupedNodes.groups.totp) != null ? _a : [] }),
|
|
2026
|
+
(_b = groupedNodes.groups.default) == null ? void 0 : _b.map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node)))
|
|
1598
2027
|
]
|
|
1599
2028
|
}
|
|
1600
2029
|
);
|
|
@@ -1603,16 +2032,16 @@ function SettingsSectionContent({ group, nodes }) {
|
|
|
1603
2032
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1604
2033
|
OryFormSection,
|
|
1605
2034
|
{
|
|
1606
|
-
nodes:
|
|
2035
|
+
nodes: groupedNodes.groups.lookup_secret,
|
|
1607
2036
|
"data-testid": "ory/screen/settings/group/lookup_secret",
|
|
1608
2037
|
children: [
|
|
1609
2038
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1610
2039
|
OrySettingsRecoveryCodes,
|
|
1611
2040
|
{
|
|
1612
|
-
nodes: (_c =
|
|
2041
|
+
nodes: (_c = groupedNodes.groups.lookup_secret) != null ? _c : []
|
|
1613
2042
|
}
|
|
1614
2043
|
),
|
|
1615
|
-
(_d =
|
|
2044
|
+
(_d = groupedNodes.groups.default) == null ? void 0 : _d.map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node)))
|
|
1616
2045
|
]
|
|
1617
2046
|
}
|
|
1618
2047
|
);
|
|
@@ -1621,11 +2050,11 @@ function SettingsSectionContent({ group, nodes }) {
|
|
|
1621
2050
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1622
2051
|
OryFormSection,
|
|
1623
2052
|
{
|
|
1624
|
-
nodes:
|
|
2053
|
+
nodes: groupedNodes.groups.oidc,
|
|
1625
2054
|
"data-testid": "ory/screen/settings/group/oidc",
|
|
1626
2055
|
children: [
|
|
1627
|
-
/* @__PURE__ */ jsxRuntime.jsx(OrySettingsOidc, { nodes: (_e =
|
|
1628
|
-
(_f =
|
|
2056
|
+
/* @__PURE__ */ jsxRuntime.jsx(OrySettingsOidc, { nodes: (_e = groupedNodes.groups.oidc) != null ? _e : [] }),
|
|
2057
|
+
(_f = groupedNodes.groups.default) == null ? void 0 : _f.map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node)))
|
|
1629
2058
|
]
|
|
1630
2059
|
}
|
|
1631
2060
|
);
|
|
@@ -1634,11 +2063,11 @@ function SettingsSectionContent({ group, nodes }) {
|
|
|
1634
2063
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1635
2064
|
OryFormSection,
|
|
1636
2065
|
{
|
|
1637
|
-
nodes:
|
|
2066
|
+
nodes: groupedNodes.groups.webauthn,
|
|
1638
2067
|
"data-testid": "ory/screen/settings/group/webauthn",
|
|
1639
2068
|
children: [
|
|
1640
|
-
/* @__PURE__ */ jsxRuntime.jsx(OrySettingsWebauthn, { nodes: (_g =
|
|
1641
|
-
(_h =
|
|
2069
|
+
/* @__PURE__ */ jsxRuntime.jsx(OrySettingsWebauthn, { nodes: (_g = groupedNodes.groups.webauthn) != null ? _g : [] }),
|
|
2070
|
+
(_h = groupedNodes.groups.default) == null ? void 0 : _h.map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node)))
|
|
1642
2071
|
]
|
|
1643
2072
|
}
|
|
1644
2073
|
);
|
|
@@ -1647,11 +2076,11 @@ function SettingsSectionContent({ group, nodes }) {
|
|
|
1647
2076
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1648
2077
|
OryFormSection,
|
|
1649
2078
|
{
|
|
1650
|
-
nodes:
|
|
2079
|
+
nodes: groupedNodes.groups.passkey,
|
|
1651
2080
|
"data-testid": "ory/screen/settings/group/passkey",
|
|
1652
2081
|
children: [
|
|
1653
|
-
/* @__PURE__ */ jsxRuntime.jsx(OrySettingsPasskey, { nodes: (_i =
|
|
1654
|
-
(_j =
|
|
2082
|
+
/* @__PURE__ */ jsxRuntime.jsx(OrySettingsPasskey, { nodes: (_i = groupedNodes.groups.passkey) != null ? _i : [] }),
|
|
2083
|
+
(_j = groupedNodes.groups.default) == null ? void 0 : _j.map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node)))
|
|
1655
2084
|
]
|
|
1656
2085
|
}
|
|
1657
2086
|
);
|
|
@@ -1672,30 +2101,30 @@ function SettingsSectionContent({ group, nodes }) {
|
|
|
1672
2101
|
id: `settings.${group}.description`
|
|
1673
2102
|
}),
|
|
1674
2103
|
children: [
|
|
1675
|
-
(_k =
|
|
2104
|
+
(_k = groupedNodes.groups.default) == null ? void 0 : _k.map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node))),
|
|
1676
2105
|
nodes.filter(
|
|
1677
2106
|
(node) => "type" in node.attributes && node.attributes.type !== "submit"
|
|
1678
|
-
).map((node
|
|
2107
|
+
).map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node)))
|
|
1679
2108
|
]
|
|
1680
2109
|
}
|
|
1681
2110
|
),
|
|
1682
2111
|
/* @__PURE__ */ jsxRuntime.jsx(Card.SettingsSectionFooter, { children: nodes.filter(
|
|
1683
2112
|
(node) => "type" in node.attributes && node.attributes.type === "submit"
|
|
1684
|
-
).map((node
|
|
2113
|
+
).map((node) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node }, clientFetch.getNodeId(node))) })
|
|
1685
2114
|
]
|
|
1686
2115
|
}
|
|
1687
2116
|
);
|
|
1688
2117
|
}
|
|
1689
|
-
var
|
|
1690
|
-
(node) =>
|
|
2118
|
+
var onlyScriptNodes = (nodes) => nodes.filter(
|
|
2119
|
+
(node) => clientFetch.isUiNodeScriptAttributes(node.attributes) && node.attributes.id === "webauthn_script"
|
|
1691
2120
|
);
|
|
1692
2121
|
function OrySettingsCard() {
|
|
1693
2122
|
const { flow } = useOryFlow();
|
|
1694
|
-
const uniqueGroups = useNodesGroups(flow.ui.nodes);
|
|
1695
|
-
const
|
|
2123
|
+
const uniqueGroups = useNodesGroups(flow.ui.nodes, { omit: ["script"] });
|
|
2124
|
+
const scriptNodes = onlyScriptNodes(flow.ui.nodes);
|
|
1696
2125
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
1697
2126
|
/* @__PURE__ */ jsxRuntime.jsx(OryCardValidationMessages, {}),
|
|
1698
|
-
|
|
2127
|
+
scriptNodes.map((n) => /* @__PURE__ */ jsxRuntime.jsx(Node, { node: n }, clientFetch.getNodeId(n))),
|
|
1699
2128
|
uniqueGroups.entries.map(([group, nodes]) => {
|
|
1700
2129
|
if (group === clientFetch.UiNodeGroupEnum.Default) {
|
|
1701
2130
|
return null;
|
|
@@ -2002,9 +2431,11 @@ var en_default = {
|
|
|
2002
2431
|
"card.header.parts.oidc": "a social provider",
|
|
2003
2432
|
"card.header.parts.password.registration": "your {identifierLabel} and a password",
|
|
2004
2433
|
"card.header.parts.password.login": "your {identifierLabel} and password",
|
|
2005
|
-
"card.header.parts.code": "a code sent to
|
|
2434
|
+
"card.header.parts.code": "a code sent to you",
|
|
2006
2435
|
"card.header.parts.passkey": "a Passkey",
|
|
2007
2436
|
"card.header.parts.webauthn": "a security key",
|
|
2437
|
+
"card.header.parts.totp": "your authenticator app",
|
|
2438
|
+
"card.header.parts.lookup_secret": "a backup recovery code",
|
|
2008
2439
|
"card.header.parts.identifier-first": "your {identifierLabel}",
|
|
2009
2440
|
"card.header.description.login": "Sign in with {identifierLabel}",
|
|
2010
2441
|
"card.header.description.registration": "Sign up with {identifierLabel}",
|
|
@@ -2031,6 +2462,20 @@ var en_default = {
|
|
|
2031
2462
|
"property.username": "username",
|
|
2032
2463
|
"property.identifier": "identifier",
|
|
2033
2464
|
"property.code": "code",
|
|
2465
|
+
"consent.title": "Authorize {party}",
|
|
2466
|
+
"consent.subtitle": "A third party application wants to access information associated with your account {identifier}.",
|
|
2467
|
+
"consent.scope.openid.title": "Identity",
|
|
2468
|
+
"consent.scope.openid.description": "Allows the application to verify your identity. This is required for authentication and a trusted login experience.",
|
|
2469
|
+
"consent.scope.offline_access.title": "Offline Access",
|
|
2470
|
+
"consent.scope.offline_access.description": "Allows this application to keep you signed in even when you're not actively using it.",
|
|
2471
|
+
"consent.scope.profile.title": "Profile Information",
|
|
2472
|
+
"consent.scope.profile.description": "Allows access to your basic profile details, including your username, first name, and last name.",
|
|
2473
|
+
"consent.scope.email.title": "Email Address",
|
|
2474
|
+
"consent.scope.email.description": "Retrieve your email address and its verification status.",
|
|
2475
|
+
"consent.scope.address.title": "Physical Address",
|
|
2476
|
+
"consent.scope.address.description": "Access your postal address.",
|
|
2477
|
+
"consent.scope.phone.title": "Phone Number",
|
|
2478
|
+
"consent.scope.phone.description": "Retrieve your phone number and its verification status.",
|
|
2034
2479
|
"error.title.what-happened": "What happened?",
|
|
2035
2480
|
"error.title.what-can-i-do": "What can I do?",
|
|
2036
2481
|
"error.instructions": "Please try again in a few minutes or contact the website operator.",
|
|
@@ -2207,7 +2652,7 @@ var de_default = {
|
|
|
2207
2652
|
"two-step.code.description": "Ein Best\xE4tigungscode wird an Ihre E-Mail gesendet.",
|
|
2208
2653
|
"two-step.code.title": "E-Mail-Code",
|
|
2209
2654
|
"two-step.passkey.description": "Verwenden Sie die Fingerabdruck- oder Gesichtserkennung Ihres Ger\xE4ts",
|
|
2210
|
-
"two-step.passkey.title": "
|
|
2655
|
+
"two-step.passkey.title": "Passkey (empfohlen)",
|
|
2211
2656
|
"two-step.password.description": "Geben Sie Ihr Passwort ein, das mit Ihrem Konto verkn\xFCpft ist",
|
|
2212
2657
|
"two-step.password.title": "Passwort",
|
|
2213
2658
|
"two-step.webauthn.title": "Sicherheitsschl\xFCssel",
|
|
@@ -2223,28 +2668,30 @@ var de_default = {
|
|
|
2223
2668
|
"login.cancel-label": "Nicht das richtige Konto?",
|
|
2224
2669
|
"identities.messages.1010023": "Code an {address} senden",
|
|
2225
2670
|
"identities.messages.1010016": "Sie haben versucht, sich mit \u201E{duplicateIdentifier}\u201C anzumelden, aber diese E-Mail-Adresse wird bereits von einem anderen Konto verwendet. \nMelden Sie sich mit einer der folgenden Optionen bei Ihrem Konto an, um Ihr Konto \u201E{duplicateIdentifier}\u201C bei \u201E{provider}\u201C als weitere Anmeldem\xF6glichkeit hinzuzuf\xFCgen.",
|
|
2226
|
-
"identities.messages.1010017": "",
|
|
2227
|
-
"identities.messages.1010018": "",
|
|
2228
|
-
"identities.messages.1010019": "",
|
|
2671
|
+
"identities.messages.1010017": "Anmelden und verbinden",
|
|
2672
|
+
"identities.messages.1010018": "Mit {provider} best\xE4tigen",
|
|
2673
|
+
"identities.messages.1010019": "Code senden um fortzufahren",
|
|
2229
2674
|
"identities.messages.1010020": "",
|
|
2230
|
-
"identities.messages.1010021": "",
|
|
2231
|
-
"identities.messages.1010022": "",
|
|
2232
|
-
"identities.messages.1040007": "",
|
|
2233
|
-
"identities.messages.1040008": "",
|
|
2234
|
-
"identities.messages.1040009": "",
|
|
2675
|
+
"identities.messages.1010021": "Mit Paskey anmelden",
|
|
2676
|
+
"identities.messages.1010022": "Mit Passwort anmelden",
|
|
2677
|
+
"identities.messages.1040007": "Mit Passkey registrieren",
|
|
2678
|
+
"identities.messages.1040008": "Zur\xFCck",
|
|
2679
|
+
"identities.messages.1040009": "Bitte w\xE4hlen Sie eine Authentifizierungsmethode, um fortzufahren.",
|
|
2235
2680
|
"identities.messages.1050019": "Passkey hinzuf\xFCgen",
|
|
2236
|
-
"identities.messages.1050020": "",
|
|
2237
|
-
"identities.messages.4000037": "",
|
|
2238
|
-
"identities.messages.4010009": "",
|
|
2239
|
-
"identities.messages.4010010": "",
|
|
2681
|
+
"identities.messages.1050020": 'Passkey "{display_name}" entfernen',
|
|
2682
|
+
"identities.messages.4000037": "F\xFCr die eingegebenen Daten existiert kein Account",
|
|
2683
|
+
"identities.messages.4010009": "Die Authentifizierungsmethode stimmt nicht mit der vorherigen Authentifizierungsmethode \xFCberein. Bitte versuchen Sie es erneut.",
|
|
2684
|
+
"identities.messages.4010010": "Die eingegebene Adresse stimmt nicht mit der Adresse \xFCberein, die Sie bei der Registrierung angegeben haben. Bitte versuchen Sie es erneut.",
|
|
2240
2685
|
"input.placeholder": "{placeholder} eingeben",
|
|
2241
|
-
"card.header.parts.code": "
|
|
2686
|
+
"card.header.parts.code": "ein an Sie gesendeter Code",
|
|
2242
2687
|
"card.header.parts.identifier-first": "Ihr {identifierLabel}",
|
|
2243
2688
|
"card.header.parts.oidc": "ein sozialer Anbieter",
|
|
2244
2689
|
"card.header.parts.passkey": "ein Passkey",
|
|
2245
2690
|
"card.header.parts.password.login": "Ihrer {identifierLabel} und Ihrem Passwort",
|
|
2246
2691
|
"card.header.parts.password.registration": "Ihrer {identifierLabel} und einem Passwort",
|
|
2247
2692
|
"card.header.parts.webauthn": "ein Sicherheitsschl\xFCssel",
|
|
2693
|
+
"card.header.parts.totp": "deine Authentifikator-App",
|
|
2694
|
+
"card.header.parts.lookup_secret": "ein Backup-Wiederherstellungscode",
|
|
2248
2695
|
"recovery.subtitle": "Geben Sie die mit Ihrem Konto verkn\xFCpfte E-Mail-Adresse ein, um einen einmaligen Zugangscode zu erhalten",
|
|
2249
2696
|
"verification.subtitle": "Geben Sie die mit Ihrem Konto verkn\xFCpfte E-Mail-Adresse ein, um es zu best\xE4tigen",
|
|
2250
2697
|
"card.header.description.login": "Melden Sie sich mit {identifierLabel} an",
|
|
@@ -2302,6 +2749,20 @@ var de_default = {
|
|
|
2302
2749
|
"property.phone": "Telefon",
|
|
2303
2750
|
"property.code": "Code",
|
|
2304
2751
|
"property.username": "Benutzername",
|
|
2752
|
+
"consent.title": "Autorisieren {party}",
|
|
2753
|
+
"consent.subtitle": "Eine Drittanbieteranwendung m\xF6chte auf Informationen zugreifen, die mit Ihrem Konto {identifier} verkn\xFCpft sind.",
|
|
2754
|
+
"consent.scope.openid.title": "Identit\xE4t",
|
|
2755
|
+
"consent.scope.openid.description": "Erm\xF6glicht der Anwendung, Ihre Identit\xE4t zu \xFCberpr\xFCfen. Dies ist f\xFCr die Authentifizierung und eine vertrauensw\xFCrdige Login-Erfahrung erforderlich.",
|
|
2756
|
+
"consent.scope.offline_access.title": "Offline-Zugriff",
|
|
2757
|
+
"consent.scope.offline_access.description": "Erm\xF6glicht dieser Anwendung, Sie angemeldet zu lassen, auch wenn Sie sie nicht aktiv nutzen.",
|
|
2758
|
+
"consent.scope.profile.title": "Profilinformationen",
|
|
2759
|
+
"consent.scope.profile.description": "Erm\xF6glicht den Zugriff auf Ihre grundlegenden Profildetails, einschlie\xDFlich Ihres Benutzernamens, Vornamens und Nachnamens.",
|
|
2760
|
+
"consent.scope.email.title": "E-Mail-Adresse",
|
|
2761
|
+
"consent.scope.email.description": "Erm\xF6glicht den Abruf Ihrer E-Mail-Adresse und deren \xDCberpr\xFCfungsstatus.",
|
|
2762
|
+
"consent.scope.address.title": "Physische Adresse",
|
|
2763
|
+
"consent.scope.address.description": "Erm\xF6glicht den Zugriff auf Ihre Postanschrift.",
|
|
2764
|
+
"consent.scope.phone.title": "Telefonnummer",
|
|
2765
|
+
"consent.scope.phone.description": "Erm\xF6glicht den Abruf Ihrer Telefonnummer und deren \xDCberpr\xFCfungsstatus.",
|
|
2305
2766
|
"error.title.what-happened": "Was ist passiert?",
|
|
2306
2767
|
"error.footer.copy": "Kopieren",
|
|
2307
2768
|
"error.footer.text": "Bitte f\xFCgen Sie bei der Meldung dieses Fehlers die folgenden Informationen hinzu:",
|
|
@@ -2323,7 +2784,6 @@ var es_default = {
|
|
|
2323
2784
|
"error.back-button": "Regresar",
|
|
2324
2785
|
"error.description": "Ocurri\xF3 un error con el siguiente mensaje:",
|
|
2325
2786
|
"error.support-email-link": "Si el problema persiste, por favor contacte a <a>{contactSupportEmail}</a>",
|
|
2326
|
-
"error.title": "",
|
|
2327
2787
|
"error.title-internal-server-error": "Error Interno del Servidor",
|
|
2328
2788
|
"error.title-not-found": "404 - P\xE1gina no encontrada",
|
|
2329
2789
|
"identities.messages.1010001": "Iniciar sesi\xF3n",
|
|
@@ -2498,45 +2958,6 @@ var es_default = {
|
|
|
2498
2958
|
"two-step.totp.description": "Utilice un c\xF3digo de un solo uso de 6 d\xEDgitos de su aplicaci\xF3n de autenticaci\xF3n",
|
|
2499
2959
|
"two-step.lookup_secret.title": "C\xF3digo de recuperaci\xF3n de respaldo",
|
|
2500
2960
|
"two-step.lookup_secret.description": "Utilice uno de sus c\xF3digos de respaldo de 8 d\xEDgitos para autenticarse",
|
|
2501
|
-
"identities.messages.1010016": "",
|
|
2502
|
-
"identities.messages.1010017": "",
|
|
2503
|
-
"identities.messages.1010018": "",
|
|
2504
|
-
"identities.messages.1010019": "",
|
|
2505
|
-
"identities.messages.1010020": "",
|
|
2506
|
-
"identities.messages.1010021": "",
|
|
2507
|
-
"identities.messages.1010022": "",
|
|
2508
|
-
"identities.messages.1010023": "",
|
|
2509
|
-
"identities.messages.1040007": "",
|
|
2510
|
-
"identities.messages.1040008": "",
|
|
2511
|
-
"identities.messages.1040009": "",
|
|
2512
|
-
"identities.messages.1050019": "",
|
|
2513
|
-
"identities.messages.1050020": "",
|
|
2514
|
-
"identities.messages.1070014": "",
|
|
2515
|
-
"identities.messages.1070015": "",
|
|
2516
|
-
"identities.messages.4000037": "",
|
|
2517
|
-
"identities.messages.4000038": "",
|
|
2518
|
-
"identities.messages.4010009": "",
|
|
2519
|
-
"identities.messages.4010010": "",
|
|
2520
|
-
"login.cancel-button": "",
|
|
2521
|
-
"login.cancel-label": "",
|
|
2522
|
-
"input.placeholder": "",
|
|
2523
|
-
"card.header.description.login": "",
|
|
2524
|
-
"card.header.description.registration": "",
|
|
2525
|
-
"card.header.parts.code": "",
|
|
2526
|
-
"card.header.parts.identifier-first": "",
|
|
2527
|
-
"card.header.parts.oidc": "",
|
|
2528
|
-
"card.header.parts.passkey": "",
|
|
2529
|
-
"card.header.parts.password.login": "",
|
|
2530
|
-
"card.header.parts.password.registration": "",
|
|
2531
|
-
"card.header.parts.webauthn": "",
|
|
2532
|
-
"forms.label.forgot-password": "",
|
|
2533
|
-
"login.subtitle": "",
|
|
2534
|
-
"login.subtitle-refresh": "",
|
|
2535
|
-
"misc.or": "",
|
|
2536
|
-
"recovery.subtitle": "",
|
|
2537
|
-
"registration.subtitle": "",
|
|
2538
|
-
"settings.subtitle": "",
|
|
2539
|
-
"verification.subtitle": "",
|
|
2540
2961
|
"settings.totp.info.linked": "Actualmente tienes una aplicaci\xF3n de autenticaci\xF3n conectada.",
|
|
2541
2962
|
"settings.totp.info.not-linked": "Para habilitar, escanea el c\xF3digo QR con tu autenticador e ingresa el c\xF3digo.",
|
|
2542
2963
|
"settings.totp.title": "Aplicaci\xF3n Autenticadora",
|
|
@@ -2554,31 +2975,87 @@ var es_default = {
|
|
|
2554
2975
|
"settings.profile.title": "Configuraci\xF3n de Perfil",
|
|
2555
2976
|
"settings.webauthn.description": "Administra la configuraci\xF3n de tu token de hardware",
|
|
2556
2977
|
"settings.webauthn.title": "Gestionar Tokens de Hardware",
|
|
2557
|
-
"
|
|
2558
|
-
"
|
|
2559
|
-
"
|
|
2560
|
-
"
|
|
2561
|
-
"
|
|
2562
|
-
"
|
|
2563
|
-
"
|
|
2564
|
-
"
|
|
2565
|
-
"
|
|
2566
|
-
"
|
|
2567
|
-
"
|
|
2568
|
-
"
|
|
2569
|
-
"
|
|
2570
|
-
"
|
|
2571
|
-
"
|
|
2572
|
-
"
|
|
2573
|
-
"
|
|
2574
|
-
"
|
|
2575
|
-
"
|
|
2576
|
-
"
|
|
2577
|
-
"
|
|
2578
|
-
"
|
|
2579
|
-
"
|
|
2580
|
-
"
|
|
2581
|
-
"
|
|
2978
|
+
"consent.title": "Autorizar {party}",
|
|
2979
|
+
"consent.subtitle": "Una aplicaci\xF3n de terceros quiere acceder a la informaci\xF3n asociada a su cuenta {identifier}.",
|
|
2980
|
+
"consent.scope.openid.title": "Identidad",
|
|
2981
|
+
"consent.scope.openid.description": "Permite que la aplicaci\xF3n verifique su identidad. Esto es necesario para la autenticaci\xF3n y una experiencia de inicio de sesi\xF3n confiable.",
|
|
2982
|
+
"consent.scope.offline_access.title": "Acceso sin conexi\xF3n",
|
|
2983
|
+
"consent.scope.offline_access.description": "Permite que esta aplicaci\xF3n le mantenga conectado incluso cuando no la est\xE9 utilizando activamente.",
|
|
2984
|
+
"consent.scope.profile.title": "Informaci\xF3n del perfil",
|
|
2985
|
+
"consent.scope.profile.description": "Permite el acceso a los detalles b\xE1sicos de su perfil, incluyendo su nombre de usuario, nombre y apellido.",
|
|
2986
|
+
"consent.scope.email.title": "Direcci\xF3n de correo electr\xF3nico",
|
|
2987
|
+
"consent.scope.email.description": "Recupere su direcci\xF3n de correo electr\xF3nico y su estado de verificaci\xF3n.",
|
|
2988
|
+
"consent.scope.address.title": "Direcci\xF3n f\xEDsica",
|
|
2989
|
+
"consent.scope.address.description": "Acceda a su direcci\xF3n postal.",
|
|
2990
|
+
"consent.scope.phone.title": "N\xFAmero de tel\xE9fono",
|
|
2991
|
+
"consent.scope.phone.description": "Recupere su n\xFAmero de tel\xE9fono y su estado de verificaci\xF3n.",
|
|
2992
|
+
"error.title": "Ocurri\xF3 un error",
|
|
2993
|
+
"identities.messages.1010016": 'Intentaste iniciar sesi\xF3n con "{duplicateIdentifier}", pero ese correo electr\xF3nico ya est\xE1 en uso por otra cuenta. Inicia sesi\xF3n en tu cuenta con una de las opciones a continuaci\xF3n para agregar tu cuenta "{duplicateIdentifier}" en "{provider}" como otra forma de iniciar sesi\xF3n.',
|
|
2994
|
+
"identities.messages.1010017": "Iniciar sesi\xF3n y vincular",
|
|
2995
|
+
"identities.messages.1010018": "Confirmar con {provider}",
|
|
2996
|
+
"identities.messages.1010019": "Solicitar c\xF3digo para continuar",
|
|
2997
|
+
"identities.messages.1010021": "Iniciar sesi\xF3n con clave de acceso",
|
|
2998
|
+
"identities.messages.1010022": "Iniciar sesi\xF3n con contrase\xF1a",
|
|
2999
|
+
"identities.messages.1010023": "Enviar c\xF3digo a {address}",
|
|
3000
|
+
"identities.messages.1040007": "Registrarse con clave de acceso",
|
|
3001
|
+
"identities.messages.1040008": "Atr\xE1s",
|
|
3002
|
+
"identities.messages.1040009": "Por favor, elige una credencial para autenticarte.",
|
|
3003
|
+
"identities.messages.1050019": "Agregar clave de acceso",
|
|
3004
|
+
"identities.messages.1070014": "Iniciar sesi\xF3n y vincular credencial",
|
|
3005
|
+
"identities.messages.1070015": "Por favor, completa el desaf\xEDo captcha para continuar.",
|
|
3006
|
+
"identities.messages.4000037": "Esta cuenta no existe o no tiene ning\xFAn m\xE9todo de inicio de sesi\xF3n configurado.",
|
|
3007
|
+
"identities.messages.4000038": "Fall\xF3 la verificaci\xF3n de Captcha, por favor intenta de nuevo.",
|
|
3008
|
+
"identities.messages.4010009": "Las credenciales vinculadas no coinciden.",
|
|
3009
|
+
"identities.messages.4010010": "La direcci\xF3n que ingresaste no coincide con ninguna direcci\xF3n conocida en la cuenta actual.",
|
|
3010
|
+
"login.cancel-button": "Cancelar",
|
|
3011
|
+
"login.cancel-label": "\xBFNo es la cuenta correcta?",
|
|
3012
|
+
"login.subtitle": "Iniciar sesi\xF3n con {parts}",
|
|
3013
|
+
"login.subtitle-refresh": "Confirma tu identidad con {parts}",
|
|
3014
|
+
"recovery.subtitle": "Ingresa la direcci\xF3n de correo electr\xF3nico asociada con tu cuenta para recibir un c\xF3digo de acceso \xFAnico",
|
|
3015
|
+
"registration.subtitle": "Registrarse con {parts}",
|
|
3016
|
+
"settings.subtitle": "Actualiza la configuraci\xF3n de tu cuenta",
|
|
3017
|
+
"settings.title-lookup-secret": "Administrar c\xF3digos de recuperaci\xF3n de respaldo 2FA",
|
|
3018
|
+
"settings.title-navigation": "Configuraci\xF3n de la cuenta",
|
|
3019
|
+
"settings.title-oidc": "Inicio de sesi\xF3n social",
|
|
3020
|
+
"settings.title-password": "Cambiar contrase\xF1a",
|
|
3021
|
+
"settings.title-profile": "Configuraci\xF3n del perfil",
|
|
3022
|
+
"settings.title-totp": "Administrar la aplicaci\xF3n de autenticaci\xF3n 2FA TOTP",
|
|
3023
|
+
"settings.title-webauthn": "Administrar tokens de hardware",
|
|
3024
|
+
"settings.title-passkey": "Administrar claves de acceso",
|
|
3025
|
+
"verification.subtitle": "Ingresa la direcci\xF3n de correo electr\xF3nico asociada con tu cuenta para verificarla",
|
|
3026
|
+
"input.placeholder": "Ingresa tu {placeholder}",
|
|
3027
|
+
"card.header.parts.oidc": "un proveedor social",
|
|
3028
|
+
"card.header.parts.password.registration": "tu {identifierLabel} y una contrase\xF1a",
|
|
3029
|
+
"card.header.parts.password.login": "tu {identifierLabel} y contrase\xF1a",
|
|
3030
|
+
"card.header.parts.code": "un c\xF3digo enviado a tu correo electr\xF3nico",
|
|
3031
|
+
"card.header.parts.passkey": "una clave de acceso",
|
|
3032
|
+
"card.header.parts.webauthn": "una clave de seguridad",
|
|
3033
|
+
"card.header.parts.totp": "su aplicaci\xF3n de autenticaci\xF3n",
|
|
3034
|
+
"card.header.parts.lookup_secret": "un c\xF3digo de recuperaci\xF3n de copia de seguridad",
|
|
3035
|
+
"card.header.parts.identifier-first": "tu {identifierLabel}",
|
|
3036
|
+
"card.header.description.login": "Iniciar sesi\xF3n con {identifierLabel}",
|
|
3037
|
+
"card.header.description.registration": "Registrarse con {identifierLabel}",
|
|
3038
|
+
"misc.or": "o",
|
|
3039
|
+
"forms.label.forgot-password": "\xBFOlvidaste tu contrase\xF1a?",
|
|
3040
|
+
"settings.oidc.info": "Las cuentas conectadas de estos proveedores se pueden utilizar para iniciar sesi\xF3n en tu cuenta",
|
|
3041
|
+
"settings.webauthn.info": "Los tokens de hardware se utilizan para la autenticaci\xF3n de segundo factor o como primer factor con las claves de acceso",
|
|
3042
|
+
"settings.passkey.info": "Administra la configuraci\xF3n de tus claves de acceso",
|
|
3043
|
+
"card.footer.select-another-method": "Seleccionar otro m\xE9todo",
|
|
3044
|
+
"account-linking.title": "Vincular cuenta",
|
|
3045
|
+
"property.password": "contrase\xF1a",
|
|
3046
|
+
"property.email": "correo electr\xF3nico",
|
|
3047
|
+
"property.phone": "tel\xE9fono",
|
|
3048
|
+
"property.username": "nombre de usuario",
|
|
3049
|
+
"property.identifier": "identificador",
|
|
3050
|
+
"property.code": "c\xF3digo",
|
|
3051
|
+
"error.title.what-happened": "\xBFQu\xE9 pas\xF3?",
|
|
3052
|
+
"error.title.what-can-i-do": "\xBFQu\xE9 puedo hacer?",
|
|
3053
|
+
"error.instructions": "Por favor, int\xE9ntalo de nuevo en unos minutos o contacta al operador del sitio web.",
|
|
3054
|
+
"error.footer.text": "Al informar este error, incluye la siguiente informaci\xF3n:",
|
|
3055
|
+
"error.footer.copy": "Copiar",
|
|
3056
|
+
"error.action.go-back": "Regresar",
|
|
3057
|
+
"identities.messages.1010020": "",
|
|
3058
|
+
"identities.messages.1050020": 'Eliminar passkey "{display_name}"'
|
|
2582
3059
|
};
|
|
2583
3060
|
|
|
2584
3061
|
// src/locales/fr.json
|
|
@@ -2769,87 +3246,103 @@ var fr_default = {
|
|
|
2769
3246
|
"two-step.totp.description": "Utilisez un code \xE0 usage unique \xE0 6 chiffres provenant de votre application d'authentification",
|
|
2770
3247
|
"two-step.lookup_secret.title": "Code de r\xE9cup\xE9ration de secours",
|
|
2771
3248
|
"two-step.lookup_secret.description": "Utilisez l'un de vos codes de secours \xE0 8 chiffres pour vous authentifier",
|
|
2772
|
-
"identities.messages.1010023": "",
|
|
2773
|
-
"identities.messages.1070015": "",
|
|
2774
|
-
"identities.messages.4000038": "",
|
|
2775
|
-
"login.cancel-button": "",
|
|
2776
|
-
"login.cancel-label": "",
|
|
2777
|
-
"identities.messages.1010016": "",
|
|
2778
|
-
"identities.messages.1010017": "",
|
|
2779
|
-
"identities.messages.1010018": "",
|
|
2780
|
-
"identities.messages.1010019": "",
|
|
2781
|
-
"identities.messages.1010020": "",
|
|
2782
|
-
"identities.messages.1010021": "",
|
|
2783
|
-
"identities.messages.1010022": "",
|
|
2784
|
-
"identities.messages.1040007": "",
|
|
2785
|
-
"identities.messages.1040008": "",
|
|
2786
|
-
"identities.messages.1040009": "",
|
|
2787
|
-
"identities.messages.1050019": "",
|
|
2788
|
-
"identities.messages.1050020": "",
|
|
2789
|
-
"identities.messages.1070014": "",
|
|
2790
|
-
"identities.messages.4000037": "",
|
|
2791
|
-
"identities.messages.4010009": "",
|
|
2792
|
-
"identities.messages.4010010": "",
|
|
2793
|
-
"input.placeholder": "",
|
|
2794
|
-
"card.header.description.login": "",
|
|
2795
|
-
"card.header.description.registration": "",
|
|
2796
|
-
"card.header.parts.code": "",
|
|
2797
|
-
"card.header.parts.identifier-first": "",
|
|
2798
|
-
"card.header.parts.oidc": "",
|
|
2799
|
-
"card.header.parts.passkey": "",
|
|
2800
|
-
"card.header.parts.password.login": "",
|
|
2801
|
-
"card.header.parts.password.registration": "",
|
|
2802
|
-
"card.header.parts.webauthn": "",
|
|
2803
|
-
"forms.label.forgot-password": "",
|
|
2804
|
-
"login.subtitle": "",
|
|
2805
|
-
"login.subtitle-refresh": "",
|
|
2806
|
-
"misc.or": "",
|
|
2807
|
-
"recovery.subtitle": "",
|
|
2808
|
-
"registration.subtitle": "",
|
|
2809
|
-
"settings.subtitle": "",
|
|
2810
|
-
"verification.subtitle": "",
|
|
2811
3249
|
"settings.totp.info.linked": "Vous avez actuellement une application d'authentification connect\xE9e.",
|
|
2812
3250
|
"settings.totp.info.not-linked": "Pour activer, scannez le QR code avec votre authentificateur et entrez le code.",
|
|
2813
3251
|
"settings.totp.title": "Application d'authentification",
|
|
2814
3252
|
"settings.totp.description": "Ajoutez une application d'authentification TOTP \xE0 votre compte pour am\xE9liorer la s\xE9curit\xE9 de votre compte. Les applications d'authentification populaires sont LastPass et Google Authenticator.",
|
|
2815
|
-
"
|
|
2816
|
-
"
|
|
2817
|
-
"
|
|
2818
|
-
"
|
|
2819
|
-
"
|
|
2820
|
-
"
|
|
2821
|
-
"
|
|
2822
|
-
"
|
|
2823
|
-
"
|
|
2824
|
-
"
|
|
2825
|
-
"
|
|
2826
|
-
"
|
|
2827
|
-
"
|
|
2828
|
-
"
|
|
2829
|
-
"
|
|
2830
|
-
"
|
|
2831
|
-
"
|
|
2832
|
-
"
|
|
2833
|
-
"
|
|
2834
|
-
"
|
|
2835
|
-
"
|
|
2836
|
-
"
|
|
2837
|
-
"
|
|
2838
|
-
"
|
|
2839
|
-
"
|
|
2840
|
-
"
|
|
2841
|
-
"
|
|
2842
|
-
"
|
|
2843
|
-
"
|
|
2844
|
-
"
|
|
2845
|
-
"
|
|
2846
|
-
"
|
|
2847
|
-
"
|
|
2848
|
-
"
|
|
2849
|
-
"
|
|
2850
|
-
"
|
|
2851
|
-
"
|
|
2852
|
-
"
|
|
3253
|
+
"consent.title": "Autoriser {party}",
|
|
3254
|
+
"consent.subtitle": "Une application tierce souhaite acc\xE9der aux informations associ\xE9es \xE0 votre compte {identifier}.",
|
|
3255
|
+
"consent.scope.openid.title": "Identit\xE9",
|
|
3256
|
+
"consent.scope.openid.description": "Permet \xE0 l'application de v\xE9rifier votre identit\xE9. Cela est n\xE9cessaire pour l'authentification et une exp\xE9rience de connexion fiable.",
|
|
3257
|
+
"consent.scope.offline_access.title": "Acc\xE8s hors ligne",
|
|
3258
|
+
"consent.scope.offline_access.description": "Permet \xE0 cette application de vous maintenir connect\xE9 m\xEAme lorsque vous ne l'utilisez pas activement.",
|
|
3259
|
+
"consent.scope.profile.title": "Informations de profil",
|
|
3260
|
+
"consent.scope.profile.description": "Permet l'acc\xE8s aux d\xE9tails de base de votre profil, y compris votre nom d'utilisateur, pr\xE9nom et nom.",
|
|
3261
|
+
"consent.scope.email.title": "Adresse e-mail",
|
|
3262
|
+
"consent.scope.email.description": "R\xE9cup\xE8re votre adresse e-mail et son statut de v\xE9rification.",
|
|
3263
|
+
"consent.scope.address.title": "Adresse physique",
|
|
3264
|
+
"consent.scope.address.description": "Acc\xE8de \xE0 votre adresse postale.",
|
|
3265
|
+
"consent.scope.phone.title": "Num\xE9ro de t\xE9l\xE9phone",
|
|
3266
|
+
"consent.scope.phone.description": "R\xE9cup\xE8re votre num\xE9ro de t\xE9l\xE9phone et son statut de v\xE9rification.",
|
|
3267
|
+
"identities.messages.1010016": "Vous avez essay\xE9 de vous connecter avec \xAB {duplicateIdentifier} \xBB, mais cet e-mail est d\xE9j\xE0 utilis\xE9 par un autre compte. Connectez-vous \xE0 votre compte avec l'une des options ci-dessous pour ajouter votre compte \xAB {duplicateIdentifier} \xBB sur \xAB {provider} \xBB comme autre moyen de vous connecter.",
|
|
3268
|
+
"identities.messages.1010017": "Se connecter et lier",
|
|
3269
|
+
"identities.messages.1010018": "Confirmer avec {provider}",
|
|
3270
|
+
"identities.messages.1010019": "Demander un code pour continuer",
|
|
3271
|
+
"identities.messages.1010021": "Se connecter avec une cl\xE9 d'acc\xE8s",
|
|
3272
|
+
"identities.messages.1010022": "Se connecter avec un mot de passe",
|
|
3273
|
+
"identities.messages.1010023": "Envoyer le code \xE0 {address}",
|
|
3274
|
+
"identities.messages.1040007": "S'inscrire avec une cl\xE9 d'acc\xE8s",
|
|
3275
|
+
"identities.messages.1040008": "Retour",
|
|
3276
|
+
"identities.messages.1040009": "Veuillez choisir une identification pour vous authentifier.",
|
|
3277
|
+
"identities.messages.1050019": "Ajouter une cl\xE9 d'acc\xE8s",
|
|
3278
|
+
"identities.messages.1050020": "Supprimer la cl\xE9 d'acc\xE8s \xAB {display_name} \xBB",
|
|
3279
|
+
"identities.messages.1070014": "Se connecter et lier l'identification",
|
|
3280
|
+
"identities.messages.1070015": "Veuillez compl\xE9ter le d\xE9fi captcha pour continuer.",
|
|
3281
|
+
"identities.messages.4000037": "Ce compte n'existe pas ou n'a aucune m\xE9thode de connexion configur\xE9e.",
|
|
3282
|
+
"identities.messages.4000038": "La v\xE9rification Captcha a \xE9chou\xE9, veuillez r\xE9essayer.",
|
|
3283
|
+
"identities.messages.4010009": "Les identifications li\xE9es ne correspondent pas.",
|
|
3284
|
+
"identities.messages.4010010": "L'adresse que vous avez saisie ne correspond \xE0 aucune adresse connue dans le compte actuel.",
|
|
3285
|
+
"login.cancel-button": "Annuler",
|
|
3286
|
+
"login.cancel-label": "Ce n'est pas le bon compte\xA0?",
|
|
3287
|
+
"login.subtitle": "Se connecter avec {parts}",
|
|
3288
|
+
"login.subtitle-refresh": "Confirmez votre identit\xE9 avec {parts}",
|
|
3289
|
+
"recovery.subtitle": "Saisissez l'adresse e-mail associ\xE9e \xE0 votre compte pour recevoir un code d'acc\xE8s unique",
|
|
3290
|
+
"registration.subtitle": "S'inscrire avec {parts}",
|
|
3291
|
+
"settings.subtitle": "Mettre \xE0 jour les param\xE8tres de votre compte",
|
|
3292
|
+
"settings.title-lookup-secret": "G\xE9rer les codes de r\xE9cup\xE9ration de sauvegarde 2FA",
|
|
3293
|
+
"settings.title-navigation": "Param\xE8tres du compte",
|
|
3294
|
+
"settings.title-oidc": "Connexion via les r\xE9seaux sociaux",
|
|
3295
|
+
"settings.title-password": "Changer le mot de passe",
|
|
3296
|
+
"settings.title-profile": "Param\xE8tres du profil",
|
|
3297
|
+
"settings.title-totp": "G\xE9rer l'application d'authentification 2FA TOTP",
|
|
3298
|
+
"settings.title-webauthn": "G\xE9rer les jetons mat\xE9riels",
|
|
3299
|
+
"settings.title-passkey": "G\xE9rer les cl\xE9s d'acc\xE8s",
|
|
3300
|
+
"settings.navigation.title": "Param\xE8tres du compte",
|
|
3301
|
+
"settings.password.title": "Changer le mot de passe",
|
|
3302
|
+
"settings.password.description": "Modifier votre mot de passe",
|
|
3303
|
+
"settings.profile.title": "Param\xE8tres du profil",
|
|
3304
|
+
"settings.profile.description": "Mettre \xE0 jour les informations de votre profil",
|
|
3305
|
+
"settings.webauthn.title": "G\xE9rer les jetons mat\xE9riels",
|
|
3306
|
+
"settings.webauthn.description": "G\xE9rer les param\xE8tres de votre jeton mat\xE9riel",
|
|
3307
|
+
"verification.subtitle": "Saisissez l'adresse e-mail associ\xE9e \xE0 votre compte pour la v\xE9rifier",
|
|
3308
|
+
"input.placeholder": "Saisissez votre {placeholder}",
|
|
3309
|
+
"card.header.parts.oidc": "un fournisseur de r\xE9seaux sociaux",
|
|
3310
|
+
"card.header.parts.password.registration": "votre {identifierLabel} et un mot de passe",
|
|
3311
|
+
"card.header.parts.password.login": "votre {identifierLabel} et votre mot de passe",
|
|
3312
|
+
"card.header.parts.passkey": "une cl\xE9 d'acc\xE8s",
|
|
3313
|
+
"card.header.parts.webauthn": "une cl\xE9 de s\xE9curit\xE9",
|
|
3314
|
+
"card.header.parts.identifier-first": "votre {identifierLabel}",
|
|
3315
|
+
"card.header.parts.code": "un code qui vous a \xE9t\xE9 envoy\xE9",
|
|
3316
|
+
"card.header.parts.totp": "votre application d'authentification",
|
|
3317
|
+
"card.header.parts.lookup_secret": "un code de r\xE9cup\xE9ration de secours",
|
|
3318
|
+
"card.header.description.login": "Se connecter avec {identifierLabel}",
|
|
3319
|
+
"card.header.description.registration": "S'inscrire avec {identifierLabel}",
|
|
3320
|
+
"misc.or": "ou",
|
|
3321
|
+
"forms.label.forgot-password": "Mot de passe oubli\xE9?",
|
|
3322
|
+
"settings.lookup_secret.title": "Codes de r\xE9cup\xE9ration de sauvegarde (second facteur)",
|
|
3323
|
+
"settings.lookup_secret.description": "Les codes de r\xE9cup\xE9ration sont une sauvegarde s\xE9curis\xE9e pour l'authentification \xE0 deux facteurs (2FA), vous permettant de retrouver l'acc\xE8s \xE0 votre compte si vous perdez votre appareil 2FA.",
|
|
3324
|
+
"settings.oidc.title": "Comptes connect\xE9s",
|
|
3325
|
+
"settings.oidc.description": "Connectez un fournisseur de connexion sociale \xE0 votre compte.",
|
|
3326
|
+
"settings.oidc.info": "Les comptes connect\xE9s de ces fournisseurs peuvent \xEAtre utilis\xE9s pour vous connecter \xE0 votre compte",
|
|
3327
|
+
"settings.webauthn.info": "Les jetons mat\xE9riels sont utilis\xE9s pour l'authentification \xE0 deux facteurs ou comme premier facteur avec les cl\xE9s d'acc\xE8s",
|
|
3328
|
+
"settings.passkey.title": "G\xE9rer les cl\xE9s d'acc\xE8s",
|
|
3329
|
+
"settings.passkey.description": "G\xE9rer les param\xE8tres de vos cl\xE9s d'acc\xE8s",
|
|
3330
|
+
"settings.passkey.info": "G\xE9rer les param\xE8tres de vos cl\xE9s d'acc\xE8s",
|
|
3331
|
+
"card.footer.select-another-method": "S\xE9lectionner une autre m\xE9thode",
|
|
3332
|
+
"account-linking.title": "Lier le compte",
|
|
3333
|
+
"property.password": "mot de passe",
|
|
3334
|
+
"property.email": "e-mail",
|
|
3335
|
+
"property.phone": "t\xE9l\xE9phone",
|
|
3336
|
+
"property.username": "nom d'utilisateur",
|
|
3337
|
+
"property.identifier": "identifiant",
|
|
3338
|
+
"property.code": "code",
|
|
3339
|
+
"error.title.what-happened": "Que s'est-il pass\xE9?",
|
|
3340
|
+
"error.title.what-can-i-do": "Que puis-je faire?",
|
|
3341
|
+
"error.instructions": "Veuillez r\xE9essayer dans quelques minutes ou contacter l'op\xE9rateur du site Web.",
|
|
3342
|
+
"error.footer.text": "Lorsque vous signalez cette erreur, veuillez inclure les informations suivantes:",
|
|
3343
|
+
"error.footer.copy": "Copier",
|
|
3344
|
+
"error.action.go-back": "Retour",
|
|
3345
|
+
"identities.messages.1010020": ""
|
|
2853
3346
|
};
|
|
2854
3347
|
|
|
2855
3348
|
// src/locales/nl.json
|
|
@@ -3064,7 +3557,9 @@ var nl_default = {
|
|
|
3064
3557
|
"input.placeholder": "",
|
|
3065
3558
|
"card.header.description.login": "",
|
|
3066
3559
|
"card.header.description.registration": "",
|
|
3067
|
-
"card.header.parts.code": "",
|
|
3560
|
+
"card.header.parts.code": "een code die naar je is verzonden",
|
|
3561
|
+
"card.header.parts.totp": "je authenticator-app",
|
|
3562
|
+
"card.header.parts.lookup_secret": "een backup herstelcode",
|
|
3068
3563
|
"card.header.parts.identifier-first": "",
|
|
3069
3564
|
"card.header.parts.oidc": "",
|
|
3070
3565
|
"card.header.parts.passkey": "",
|
|
@@ -3115,6 +3610,20 @@ var nl_default = {
|
|
|
3115
3610
|
"property.password": "",
|
|
3116
3611
|
"property.phone": "",
|
|
3117
3612
|
"property.username": "",
|
|
3613
|
+
"consent.title": "Autoriseren {party}",
|
|
3614
|
+
"consent.subtitle": "Een derde partij applicatie wil toegang tot informatie die aan uw account {identifier} is gekoppeld.",
|
|
3615
|
+
"consent.scope.openid.title": "Identiteit",
|
|
3616
|
+
"consent.scope.openid.description": "Stelt de applicatie in staat uw identiteit te verifi\xEBren. Dit is vereist voor authenticatie en een betrouwbare inlogervaring.",
|
|
3617
|
+
"consent.scope.offline_access.title": "Offline toegang",
|
|
3618
|
+
"consent.scope.offline_access.description": "Stelt deze applicatie in staat u ingelogd te houden, zelfs wanneer u deze niet actief gebruikt.",
|
|
3619
|
+
"consent.scope.profile.title": "Profielinformatie",
|
|
3620
|
+
"consent.scope.profile.description": "Geeft toegang tot uw basisprofielgegevens, inclusief uw gebruikersnaam, voornaam en achternaam.",
|
|
3621
|
+
"consent.scope.email.title": "E-mailadres",
|
|
3622
|
+
"consent.scope.email.description": "Haal uw e-mailadres en de verificatiestatus ervan op.",
|
|
3623
|
+
"consent.scope.address.title": "Fysiek adres",
|
|
3624
|
+
"consent.scope.address.description": "Toegang tot uw postadres.",
|
|
3625
|
+
"consent.scope.phone.title": "Telefoonnummer",
|
|
3626
|
+
"consent.scope.phone.description": "Haal uw telefoonnummer en de verificatiestatus ervan op.",
|
|
3118
3627
|
"error.action.go-back": "",
|
|
3119
3628
|
"error.footer.copy": "",
|
|
3120
3629
|
"error.footer.text": "",
|
|
@@ -3335,13 +3844,15 @@ var pl_default = {
|
|
|
3335
3844
|
"input.placeholder": "",
|
|
3336
3845
|
"card.header.description.login": "",
|
|
3337
3846
|
"card.header.description.registration": "",
|
|
3338
|
-
"card.header.parts.code": "",
|
|
3339
3847
|
"card.header.parts.identifier-first": "",
|
|
3340
3848
|
"card.header.parts.oidc": "",
|
|
3341
3849
|
"card.header.parts.passkey": "",
|
|
3342
3850
|
"card.header.parts.password.login": "",
|
|
3343
3851
|
"card.header.parts.password.registration": "",
|
|
3344
3852
|
"card.header.parts.webauthn": "",
|
|
3853
|
+
"card.header.parts.code": "kod wys\u0142any do Ciebie",
|
|
3854
|
+
"card.header.parts.totp": "Twoja aplikacja uwierzytelniaj\u0105ca",
|
|
3855
|
+
"card.header.parts.lookup_secret": "kod odzyskiwania kopii zapasowej",
|
|
3345
3856
|
"forms.label.forgot-password": "",
|
|
3346
3857
|
"login.subtitle": "",
|
|
3347
3858
|
"login.subtitle-refresh": "",
|
|
@@ -3386,6 +3897,20 @@ var pl_default = {
|
|
|
3386
3897
|
"property.phone": "",
|
|
3387
3898
|
"property.username": "",
|
|
3388
3899
|
"property.identifier": "",
|
|
3900
|
+
"consent.title": "Autoryzuj {party}",
|
|
3901
|
+
"consent.subtitle": "Aplikacja trzeciej strony chce uzyska\u0107 dost\u0119p do informacji powi\u0105zanych z Twoim kontem {identifier}.",
|
|
3902
|
+
"consent.scope.openid.title": "To\u017Csamo\u015B\u0107",
|
|
3903
|
+
"consent.scope.openid.description": "Pozwala aplikacji zweryfikowa\u0107 Twoj\u0105 to\u017Csamo\u015B\u0107. Jest to wymagane do uwierzytelniania i zapewnienia zaufanej sesji logowania.",
|
|
3904
|
+
"consent.scope.offline_access.title": "Dost\u0119p offline",
|
|
3905
|
+
"consent.scope.offline_access.description": "Pozwala aplikacji utrzyma\u0107 Twoje logowanie, nawet gdy nie korzystasz z niej aktywnie.",
|
|
3906
|
+
"consent.scope.profile.title": "Informacje profilowe",
|
|
3907
|
+
"consent.scope.profile.description": "Pozwala na dost\u0119p do podstawowych danych profilowych, w tym nazwy u\u017Cytkownika, imienia i nazwiska.",
|
|
3908
|
+
"consent.scope.email.title": "Adres e-mail",
|
|
3909
|
+
"consent.scope.email.description": "Pobierz sw\xF3j adres e-mail oraz status jego weryfikacji.",
|
|
3910
|
+
"consent.scope.address.title": "Adres fizyczny",
|
|
3911
|
+
"consent.scope.address.description": "Dost\u0119p do Twojego adresu pocztowego.",
|
|
3912
|
+
"consent.scope.phone.title": "Numer telefonu",
|
|
3913
|
+
"consent.scope.phone.description": "Pobierz sw\xF3j numer telefonu oraz status jego weryfikacji.",
|
|
3389
3914
|
"error.action.go-back": "",
|
|
3390
3915
|
"error.footer.copy": "",
|
|
3391
3916
|
"error.footer.text": "",
|
|
@@ -3606,7 +4131,9 @@ var pt_default = {
|
|
|
3606
4131
|
"input.placeholder": "",
|
|
3607
4132
|
"card.header.description.login": "",
|
|
3608
4133
|
"card.header.description.registration": "",
|
|
3609
|
-
"card.header.parts.code": "",
|
|
4134
|
+
"card.header.parts.code": "um c\xF3digo enviado para voc\xEA",
|
|
4135
|
+
"card.header.parts.totp": "seu aplicativo autenticador",
|
|
4136
|
+
"card.header.parts.lookup_secret": "um c\xF3digo de recupera\xE7\xE3o de backup",
|
|
3610
4137
|
"card.header.parts.identifier-first": "",
|
|
3611
4138
|
"card.header.parts.oidc": "",
|
|
3612
4139
|
"card.header.parts.passkey": "",
|
|
@@ -3657,6 +4184,20 @@ var pt_default = {
|
|
|
3657
4184
|
"property.password": "",
|
|
3658
4185
|
"property.phone": "",
|
|
3659
4186
|
"property.username": "",
|
|
4187
|
+
"consent.title": "Autorizar {party}",
|
|
4188
|
+
"consent.subtitle": "Um aplicativo de terceiros deseja acessar as informa\xE7\xF5es associadas \xE0 sua conta {identifier}.",
|
|
4189
|
+
"consent.scope.openid.title": "Identidade",
|
|
4190
|
+
"consent.scope.openid.description": "Permite que a aplica\xE7\xE3o verifique sua identidade. Isso \xE9 necess\xE1rio para a autentica\xE7\xE3o e uma experi\xEAncia de login confi\xE1vel.",
|
|
4191
|
+
"consent.scope.offline_access.title": "Acesso Offline",
|
|
4192
|
+
"consent.scope.offline_access.description": "Permite que este aplicativo mantenha voc\xEA conectado mesmo quando n\xE3o estiver usando-o ativamente.",
|
|
4193
|
+
"consent.scope.profile.title": "Informa\xE7\xF5es do Perfil",
|
|
4194
|
+
"consent.scope.profile.description": "Permite o acesso aos detalhes b\xE1sicos do seu perfil, incluindo seu nome de usu\xE1rio, primeiro nome e sobrenome.",
|
|
4195
|
+
"consent.scope.email.title": "Endere\xE7o de E-mail",
|
|
4196
|
+
"consent.scope.email.description": "Recupere seu endere\xE7o de e-mail e seu status de verifica\xE7\xE3o.",
|
|
4197
|
+
"consent.scope.address.title": "Endere\xE7o F\xEDsico",
|
|
4198
|
+
"consent.scope.address.description": "Acesse seu endere\xE7o postal.",
|
|
4199
|
+
"consent.scope.phone.title": "N\xFAmero de Telefone",
|
|
4200
|
+
"consent.scope.phone.description": "Recupere seu n\xFAmero de telefone e seu status de verifica\xE7\xE3o.",
|
|
3660
4201
|
"error.action.go-back": "",
|
|
3661
4202
|
"error.footer.copy": "",
|
|
3662
4203
|
"error.footer.text": "",
|
|
@@ -3877,7 +4418,9 @@ var sv_default = {
|
|
|
3877
4418
|
"input.placeholder": "Ange din {placeholder}",
|
|
3878
4419
|
"card.header.description.login": "Logga in med {identifierLabel}",
|
|
3879
4420
|
"card.header.description.registration": "Registrera dig med {identifierLabel}",
|
|
3880
|
-
"card.header.parts.code": "en kod skickad till
|
|
4421
|
+
"card.header.parts.code": "en kod skickad till dig",
|
|
4422
|
+
"card.header.parts.totp": "din autentiseringsapp",
|
|
4423
|
+
"card.header.parts.lookup_secret": "en s\xE4kerhetskopieringskod",
|
|
3881
4424
|
"card.header.parts.identifier-first": "din {identifierLabel}",
|
|
3882
4425
|
"card.header.parts.oidc": "en social leverant\xF6r",
|
|
3883
4426
|
"card.header.parts.passkey": "en Passkey",
|
|
@@ -3928,6 +4471,20 @@ var sv_default = {
|
|
|
3928
4471
|
"property.username": "anv\xE4ndarnamn",
|
|
3929
4472
|
"property.identifier": "identifier",
|
|
3930
4473
|
"property.code": "kod",
|
|
4474
|
+
"consent.title": "Auktorisera {party}",
|
|
4475
|
+
"consent.subtitle": "En tredjepartsapplikation vill f\xE5 tillg\xE5ng till information kopplad till ditt konto {identifier}.",
|
|
4476
|
+
"consent.scope.openid.title": "Identitet",
|
|
4477
|
+
"consent.scope.openid.description": "G\xF6r det m\xF6jligt f\xF6r applikationen att verifiera din identitet. Detta kr\xE4vs f\xF6r autentisering och en p\xE5litlig inloggningsupplevelse.",
|
|
4478
|
+
"consent.scope.offline_access.title": "Offline-\xE5tkomst",
|
|
4479
|
+
"consent.scope.offline_access.description": "G\xF6r det m\xF6jligt f\xF6r denna applikation att h\xE5lla dig inloggad \xE4ven n\xE4r du inte aktivt anv\xE4nder den.",
|
|
4480
|
+
"consent.scope.profile.title": "Profilinformation",
|
|
4481
|
+
"consent.scope.profile.description": "Ger tillg\xE5ng till dina grundl\xE4ggande profiluppgifter, inklusive ditt anv\xE4ndarnamn, f\xF6rnamn och efternamn.",
|
|
4482
|
+
"consent.scope.email.title": "E-postadress",
|
|
4483
|
+
"consent.scope.email.description": "H\xE4mta din e-postadress och dess verifieringsstatus.",
|
|
4484
|
+
"consent.scope.address.title": "Fysisk adress",
|
|
4485
|
+
"consent.scope.address.description": "F\xE5 \xE5tkomst till din postadress.",
|
|
4486
|
+
"consent.scope.phone.title": "Telefonnummer",
|
|
4487
|
+
"consent.scope.phone.description": "H\xE4mta ditt telefonnummer och dess verifieringsstatus.",
|
|
3931
4488
|
"error.action.go-back": "",
|
|
3932
4489
|
"error.footer.copy": "",
|
|
3933
4490
|
"error.footer.text": "",
|
|
@@ -3954,6 +4511,8 @@ exports.OryCardContent = OryCardContent;
|
|
|
3954
4511
|
exports.OryCardFooter = OryCardFooter;
|
|
3955
4512
|
exports.OryCardHeader = OryCardHeader;
|
|
3956
4513
|
exports.OryCardValidationMessages = OryCardValidationMessages;
|
|
4514
|
+
exports.OryConfigurationProvider = OryConfigurationProvider;
|
|
4515
|
+
exports.OryConsentCard = OryConsentCard;
|
|
3957
4516
|
exports.OryForm = OryForm;
|
|
3958
4517
|
exports.OryFormGroupDivider = OryFormGroupDivider;
|
|
3959
4518
|
exports.OryFormGroups = OryFormGroups;
|
|
@@ -3968,6 +4527,7 @@ exports.messageTestId = messageTestId;
|
|
|
3968
4527
|
exports.uiTextToFormattedMessage = uiTextToFormattedMessage;
|
|
3969
4528
|
exports.useComponents = useComponents;
|
|
3970
4529
|
exports.useNodeSorter = useNodeSorter;
|
|
4530
|
+
exports.useOryConfiguration = useOryConfiguration;
|
|
3971
4531
|
exports.useOryFlow = useOryFlow;
|
|
3972
4532
|
//# sourceMappingURL=index.js.map
|
|
3973
4533
|
//# sourceMappingURL=index.js.map
|