@ory/elements-react 0.0.0-pr.14760211

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/CHANGELOG.md +617 -0
  2. package/DEVELOPMENT.md +94 -0
  3. package/LICENSE +201 -0
  4. package/README.md +503 -0
  5. package/babel.config.js +10 -0
  6. package/dist/client/config.d.mts +21 -0
  7. package/dist/client/config.d.ts +21 -0
  8. package/dist/client/config.js +77 -0
  9. package/dist/client/config.js.map +1 -0
  10. package/dist/client/config.mjs +51 -0
  11. package/dist/client/config.mjs.map +1 -0
  12. package/dist/client/frontendClient.d.mts +10 -0
  13. package/dist/client/frontendClient.d.ts +10 -0
  14. package/dist/client/frontendClient.js +75 -0
  15. package/dist/client/frontendClient.js.map +1 -0
  16. package/dist/client/frontendClient.mjs +54 -0
  17. package/dist/client/frontendClient.mjs.map +1 -0
  18. package/dist/client/index.d.mts +5 -0
  19. package/dist/client/index.d.ts +5 -0
  20. package/dist/client/index.js +33 -0
  21. package/dist/client/index.js.map +1 -0
  22. package/dist/client/index.mjs +10 -0
  23. package/dist/client/index.mjs.map +1 -0
  24. package/dist/client/session-provider.d.mts +62 -0
  25. package/dist/client/session-provider.d.ts +62 -0
  26. package/dist/client/session-provider.js +96 -0
  27. package/dist/client/session-provider.js.map +1 -0
  28. package/dist/client/session-provider.mjs +71 -0
  29. package/dist/client/session-provider.mjs.map +1 -0
  30. package/dist/client/useSession.d.mts +32 -0
  31. package/dist/client/useSession.d.ts +32 -0
  32. package/dist/client/useSession.js +37 -0
  33. package/dist/client/useSession.js.map +1 -0
  34. package/dist/client/useSession.mjs +13 -0
  35. package/dist/client/useSession.mjs.map +1 -0
  36. package/dist/index.d.mts +655 -0
  37. package/dist/index.d.ts +655 -0
  38. package/dist/index.js +4310 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/index.mjs +4287 -0
  41. package/dist/index.mjs.map +1 -0
  42. package/dist/theme/default/index.css +1580 -0
  43. package/dist/theme/default/index.css.map +1 -0
  44. package/dist/theme/default/index.d.mts +104 -0
  45. package/dist/theme/default/index.d.ts +104 -0
  46. package/dist/theme/default/index.js +6031 -0
  47. package/dist/theme/default/index.js.map +1 -0
  48. package/dist/theme/default/index.mjs +6104 -0
  49. package/dist/theme/default/index.mjs.map +1 -0
  50. package/dist/theme/default/tailwind/defaults.d.mts +737 -0
  51. package/dist/theme/default/tailwind/defaults.d.ts +737 -0
  52. package/dist/theme/default/tailwind/defaults.js +219 -0
  53. package/dist/theme/default/tailwind/defaults.js.map +1 -0
  54. package/dist/theme/default/tailwind/defaults.mjs +196 -0
  55. package/dist/theme/default/tailwind/defaults.mjs.map +1 -0
  56. package/package.json +97 -0
  57. package/tailwind/defaults.ts +34 -0
  58. package/tailwind/generated/README.md +2 -0
  59. package/tailwind/generated/default-variables.css +216 -0
  60. package/tailwind/generated/variables-processed.json +161 -0
  61. package/tsconfig.json +36 -0
  62. package/tsconfig.runtime.json +4 -0
package/README.md ADDED
@@ -0,0 +1,503 @@
1
+ <p align="center">
2
+ <a href="https://ory.sh">
3
+ <img src="https://raw.githubusercontent.com/ory/meta/refs/heads/master/static/logos/logo-ory.svg" height="72" />
4
+ </a>
5
+ </p>
6
+
7
+ # @ory/elements-react
8
+
9
+ <p align="center">
10
+ <a aria-label="NPM Version" href="https://www.npmjs.com/package/@ory/elements-react">
11
+ <img src="https://img.shields.io/npm/v/@ory/elements-react.svg?style=flat-square">
12
+ </a>
13
+ <a aria-label="License" href="https://github.com/ory/elements/blob/main/LICENSE">
14
+ <img src="https://img.shields.io/github/license/ory/elements?style=flat-square">
15
+ </a>
16
+ <a aria-label="Join Ory Slack community!" href="https://slack.ory.sh/">
17
+ <img src="https://img.shields.io/badge/Slack-Join%20the%20community!-4f46e5?style=flat-square&logo=slack&logoColor=eef2ff">
18
+ </a>
19
+ </p>
20
+
21
+ Ory Elements is a set of components and functions tailored for easy integration
22
+ of Ory into your React application. It simplifies the process of adding
23
+ authentication and other identity features to your application using the Ory
24
+ Network.
25
+
26
+ ## Documentation
27
+
28
+ Visit https://ory.sh/docs to see the full Ory documentation.
29
+
30
+ ## Getting started
31
+
32
+ **Requirements**
33
+
34
+ - React `>= 18`
35
+ - Node.js `>= 18`
36
+ - **`@ory/client-fetch`**
37
+
38
+ **Installation**
39
+
40
+ ```sh
41
+ npm install @ory/elements-react
42
+ ```
43
+
44
+ ## Usage
45
+
46
+ Ory Elements provides components that can aggregate flow objects and display
47
+ user authentication flows based on the data.
48
+
49
+ To feed Ory Elements with flow data you need to use Ory client.
50
+
51
+ ```ts
52
+ export function serverClientFrontend() {
53
+ // For testing purposes we're using Ory tunnel
54
+
55
+ const config = new Configuration({
56
+ headers: {
57
+ Accept: "application/json",
58
+ },
59
+ basePath: "http://localhost:4000",
60
+ })
61
+ return new FrontendApi(config)
62
+ }
63
+ ```
64
+
65
+ ### Ory Network project setup
66
+
67
+ The Ory Identities APIs come with the ability to specify custom UI URLs. To make
68
+ sure, Ory knows about your custom UI, specify the URLs of your application on
69
+ https://console.ory.sh/projects/current/ui.
70
+
71
+ ### Initializing a new flow
72
+
73
+ Initializing a new flow is done by navigating the user's page to the initialize
74
+ flow URL. After creating a new flow object, Ory will return a redirect to the
75
+ flow UI URL and, in some cases, return anti-CSRF cookies.
76
+
77
+ ```ts
78
+ export function init(params: QueryParams, flowType: FlowType) {
79
+ // Take advantage of the fact, that Ory handles the flow creation for us and redirects the user to the default return to automatically if they're logged in already.
80
+ return redirect(
81
+ "http://localhost:4000" +
82
+ "/self-service/" +
83
+ flowType.toString() +
84
+ "/browser?" +
85
+ new URLSearchParams(params).toString(),
86
+ RedirectType.replace,
87
+ )
88
+ }
89
+ ```
90
+
91
+ **FlowType** can be: `login`, `registration`, `recovery`, `verification`,
92
+ `settings` or `error`
93
+
94
+ To access & render the flow, on your flow page, you can use the `flow` query
95
+ parameter, that is included in the redirect. Use it to call the
96
+ [`getRegistrationFlowRaw()`](https://www.ory.sh/docs/reference/api#tag/frontend/operation/getRegistrationFlow)
97
+ API.
98
+
99
+ **Full Example**:
100
+
101
+ ```ts
102
+ import {
103
+ Configuration,
104
+ FlowType,
105
+ FrontendApi,
106
+ handleFlowError,
107
+ RegistrationFlow,
108
+ } from "@ory/client-fetch"
109
+ import { redirect, RedirectType } from "next/navigation"
110
+
111
+ type QueryParams = {
112
+ flow?: string
113
+ }
114
+ export function serverClientFrontend() {
115
+ // For testing purposes we're using Ory tunnel
116
+
117
+ const config = new Configuration({
118
+ headers: {
119
+ Accept: "application/json",
120
+ },
121
+ basePath: "http://localhost:4000",
122
+ })
123
+ return new FrontendApi(config)
124
+ }
125
+
126
+ export function init(params: QueryParams, flowType: FlowType) {
127
+ // Take advantage of the fact, that Ory handles the flow creation for us and redirects the user to the default return to automatically if they're logged in already.
128
+ return redirect(
129
+ "http://localhost:4000" +
130
+ "/self-service/" +
131
+ flowType.toString() +
132
+ "/browser?" +
133
+ new URLSearchParams(params).toString(),
134
+ RedirectType.replace,
135
+ )
136
+ }
137
+
138
+ export async function getOrCreateRegistrationFlow(params: {
139
+ flow?: string
140
+ }): Promise<RegistrationFlow> {
141
+ const onRestartFlow = () => init(params, FlowType.Registration)
142
+
143
+ // If flow ID doesn't exist in params simply trigger the init function.
144
+ if (!params.flow) {
145
+ return onRestartFlow()
146
+ }
147
+
148
+ return await serverClientFrontend()
149
+ // Pass in the flow ID
150
+ .getRegistrationFlowRaw({ id: params.flow })
151
+ .then((res) => res.value())
152
+ .catch(
153
+ // @ory/client-fetch predefines the handleFlowError function to simplify error handling.
154
+ // You can define what should happen in each of these callbacks
155
+ handleFlowError({
156
+ // Validation errors happen if the user's provided input failed a validation rule (e.g. not an email, etc.)
157
+ onValidationError,
158
+ // Flows can sometimes encounter unrecoverable errors, in that case we need to start a new flow to protect the user.
159
+ // In most cases, it is enough to initialize a new flow.
160
+ onRestartFlow,
161
+ // Sometimes a flow requires a redirect to a different URL/context. For example during OIDC flows.
162
+ // In that case, you can handle the redirect here, for example using your framework's preferred method for redirects.
163
+ onRedirect,
164
+ }),
165
+ )
166
+ }
167
+
168
+ function onValidationError(flow: RegistrationFlow) {
169
+ // handle validation error
170
+ }
171
+
172
+ function onRedirect(url: string, external: boolean) {
173
+ // handle the redirect
174
+ }
175
+ ```
176
+
177
+ As soon as we have our flow data we can render the `<Registration/>` component
178
+ from `@ory/elements-react` package.
179
+
180
+ ```tsx
181
+ import { Registration } from "@ory/elements-react/theme"
182
+
183
+ export default async function RegistrationPage({ searchParams }: PageProps) {
184
+ const flow = await getOrCreateRegistrationFlow(searchParams)
185
+
186
+ if (!flow) {
187
+ return <div>Flow not found</div>
188
+ }
189
+
190
+ return <Registration flow={flow} config={oryConfiguration} />
191
+ }
192
+ ```
193
+
194
+ ### Styling
195
+
196
+ To include the default styles, add the following import to your app. Make sure
197
+ it's included on all pages, that use Ory Elements.
198
+
199
+ ```ts
200
+ import "@ory/elements-react/theme/styles.css"
201
+ ```
202
+
203
+ ### Theming
204
+
205
+ The styling for specific elements or groups of elements in the UI can be
206
+ overwritten by providing your own custom CSS variables. For more complex
207
+ customizations see the [Component System](#component-system).
208
+
209
+ ```css
210
+ :root {
211
+ /* primitives */
212
+ /* Overriding these may affect more variables "down stream" */
213
+ --ui-100: #f1f5f9;
214
+ --ui-200: #e2e8f0;
215
+ --ui-300: #cbd5e1;
216
+ --ui-400: #94a3b8;
217
+ --ui-50: #f8fafc;
218
+ --ui-500: #64748b;
219
+ --ui-600: #475569;
220
+ --ui-700: #334155;
221
+ --ui-800: #1e293b;
222
+ --ui-900: #0f172a;
223
+ --ui-950: #020617;
224
+ --ui-black: #000000;
225
+ --ui-danger: #dc2626;
226
+ --ui-success: #22c55e;
227
+ --ui-transparent: #ffffff00;
228
+ --ui-warning: #eab308;
229
+ --ui-white: #ffffff;
230
+ /* primitives end */
231
+
232
+ /* brand */
233
+ --brand-100: var(--ui-100);
234
+ --brand-200: var(--ui-300);
235
+ --brand-300: var(--ui-500);
236
+ --brand-400: var(--ui-700);
237
+ --brand-50: var(--ui-50);
238
+ --brand-500: var(--ui-900);
239
+ --brand-600: var(--ui-white);
240
+ --brand-700: var(--ui-200);
241
+ --brand-800: var(--ui-400);
242
+ --brand-900: var(--ui-600);
243
+ --brand-950: var(--ui-800);
244
+ /* brand end */
245
+
246
+ /* interface */
247
+ /* These variables affect "groups" of variables, and are re-used in the more specific variables below */
248
+ --interface-background-brand-primary: var(--brand-500);
249
+ --interface-background-brand-primary-hover: var(--brand-400);
250
+ --interface-background-brand-secondary: var(--brand-50);
251
+ --interface-background-brand-secondary-hover: var(--brand-100);
252
+ --interface-background-default-inverted: var(--ui-900);
253
+ --interface-background-default-inverted-hover: var(--ui-800);
254
+ --interface-background-default-none: var(--ui-transparent);
255
+ --interface-background-default-primary: var(--ui-white);
256
+ --interface-background-default-primary-hover: var(--ui-50);
257
+ --interface-background-default-secondary: var(--ui-50);
258
+ --interface-background-default-secondary-hover: var(--ui-200);
259
+ --interface-background-default-tertiary: var(--ui-200);
260
+ --interface-background-default-tertiary-hover: var(--ui-300);
261
+ --interface-background-disabled-disabled: var(--ui-200);
262
+ --interface-background-validation-danger: var(--ui-danger);
263
+ --interface-background-validation-success: var(--ui-success);
264
+ --interface-background-validation-warning: var(--ui-warning);
265
+ --interface-border-brand-brand: var(--brand-500);
266
+ --interface-border-default-inverted: var(--ui-700);
267
+ --interface-border-default-none: var(--ui-transparent);
268
+ --interface-border-default-primary: var(--ui-300);
269
+ --interface-border-disabled-disabled: var(--ui-300);
270
+ --interface-border-validation-danger: var(--ui-danger);
271
+ --interface-border-validation-success: var(--ui-success);
272
+ --interface-border-validation-warning: var(--ui-warning);
273
+ --interface-foreground-brand-on-primary: var(--brand-50);
274
+ --interface-foreground-brand-on-secondary: var(--brand-950);
275
+ --interface-foreground-brand-primary: var(--brand-500);
276
+ --interface-foreground-brand-secondary: var(--brand-50);
277
+ --interface-foreground-default-inverted: var(--ui-white);
278
+ --interface-foreground-default-primary: var(--ui-900);
279
+ --interface-foreground-default-secondary: var(--ui-700);
280
+ --interface-foreground-default-tertiary: var(--ui-500);
281
+ --interface-foreground-disabled-disabled: var(--ui-300);
282
+ --interface-foreground-disabled-on-disabled: var(--ui-400);
283
+ --interface-foreground-validation-danger: var(--ui-danger);
284
+ --interface-foreground-validation-success: var(--ui-success);
285
+ --interface-foreground-validation-warning: var(--ui-warning);
286
+ /* interface end */
287
+
288
+ /* Specific elements */
289
+ --button-identifier-background-default: var(
290
+ --interface-background-brand-secondary
291
+ );
292
+ --button-identifier-background-hover: var(
293
+ --interface-background-brand-secondary-hover
294
+ );
295
+ --button-identifier-border-border-default: var(
296
+ --interface-border-brand-brand
297
+ );
298
+ --button-identifier-border-border-hover: var(--interface-border-brand-brand);
299
+ --button-identifier-foreground-default: var(
300
+ --interface-foreground-brand-on-secondary
301
+ );
302
+ --button-identifier-foreground-hover: var(
303
+ --interface-foreground-brand-on-secondary
304
+ );
305
+ --button-link-brand-brand: var(--interface-foreground-brand-primary);
306
+ --button-link-brand-brand-hover: var(--interface-foreground-default-primary);
307
+ --button-link-default-primary: var(--interface-foreground-default-primary);
308
+ --button-link-default-primary-hover: var(
309
+ --interface-foreground-brand-primary
310
+ );
311
+ --button-link-default-secondary: var(
312
+ --interface-foreground-default-secondary
313
+ );
314
+ --button-link-default-secondary-hover: var(
315
+ --interface-foreground-default-tertiary
316
+ );
317
+ --button-link-disabled-disabled: var(
318
+ --interface-foreground-disabled-disabled
319
+ );
320
+ --button-primary-background-default: var(
321
+ --interface-background-brand-primary
322
+ );
323
+ --button-primary-background-disabled: var(
324
+ --interface-background-disabled-disabled
325
+ );
326
+ --button-primary-background-hover: var(
327
+ --interface-background-brand-primary-hover
328
+ );
329
+ --button-primary-border-default: var(--interface-border-default-none);
330
+ --button-primary-border-disabled: var(--interface-border-disabled-disabled);
331
+ --button-primary-border-hover: var(--interface-border-default-none);
332
+ --button-primary-foreground-default: var(
333
+ --interface-foreground-brand-on-primary
334
+ );
335
+ --button-primary-foreground-disabled: var(
336
+ --interface-foreground-disabled-on-disabled
337
+ );
338
+ --button-primary-foreground-hover: var(
339
+ --interface-foreground-brand-on-primary
340
+ );
341
+ --button-secondary-background-default: var(
342
+ --interface-background-default-primary
343
+ );
344
+ --button-secondary-background-disabled: var(
345
+ --interface-background-disabled-disabled
346
+ );
347
+ --button-secondary-background-hover: var(
348
+ --interface-background-default-primary-hover
349
+ );
350
+ --button-secondary-border-default: var(--interface-border-default-primary);
351
+ --button-secondary-border-disabled: var(--interface-border-disabled-disabled);
352
+ --button-secondary-border-hover: var(--interface-border-default-primary);
353
+ --button-secondary-foreground-default: var(
354
+ --interface-foreground-default-primary
355
+ );
356
+ --button-secondary-foreground-disabled: var(
357
+ --interface-foreground-disabled-on-disabled
358
+ );
359
+ --button-secondary-foreground-hover: var(
360
+ --interface-foreground-default-secondary
361
+ );
362
+ --button-social-background-default: var(
363
+ --interface-background-default-primary
364
+ );
365
+ --button-social-background-disabled: var(
366
+ --interface-background-disabled-disabled
367
+ );
368
+ --button-social-background-generic-provider: var(
369
+ --interface-background-default-inverted
370
+ );
371
+ --button-social-background-hover: var(
372
+ --interface-background-default-primary-hover
373
+ );
374
+ --button-social-border-default: var(--interface-border-default-primary);
375
+ --button-social-border-disabled: var(--interface-border-disabled-disabled);
376
+ --button-social-border-generic-provider: var(--interface-border-default-none);
377
+ --button-social-border-hover: var(--interface-border-default-primary);
378
+ --button-social-foreground-default: var(
379
+ --interface-foreground-default-primary
380
+ );
381
+ --button-social-foreground-disabled: var(
382
+ --interface-foreground-disabled-on-disabled
383
+ );
384
+ --button-social-foreground-generic-provider: var(
385
+ --interface-foreground-default-inverted
386
+ );
387
+ --button-social-foreground-hover: var(
388
+ --interface-foreground-default-secondary
389
+ );
390
+ --checkbox-background-checked: var(--interface-background-brand-primary);
391
+ --checkbox-background-default: var(--interface-background-default-secondary);
392
+ --checkbox-border-checkbox-border-checked: var(
393
+ --interface-border-brand-brand
394
+ );
395
+ --checkbox-border-checkbox-border-default: var(
396
+ --interface-border-default-primary
397
+ );
398
+ --checkbox-foreground-checked: var(--interface-foreground-brand-on-primary);
399
+ --checkbox-foreground-default: var(--interface-foreground-default-primary);
400
+ --form-background-default: var(--interface-background-default-primary);
401
+ --form-border-default: var(--interface-border-default-primary);
402
+ --input-background-default: var(--interface-background-default-primary);
403
+ --input-background-disabled: var(--interface-background-disabled-disabled);
404
+ --input-background-hover: var(--interface-background-default-primary-hover);
405
+ --input-border-default: var(--interface-border-default-primary);
406
+ --input-border-disabled: var(--interface-border-disabled-disabled);
407
+ --input-border-focus: var(--interface-border-brand-brand);
408
+ --input-border-hover: var(--interface-border-default-primary);
409
+ --input-foreground-disabled: var(--interface-foreground-disabled-on-disabled);
410
+ --input-foreground-primary: var(--interface-foreground-default-primary);
411
+ --input-foreground-secondary: var(--interface-foreground-default-secondary);
412
+ --input-foreground-tertiary: var(--interface-foreground-default-tertiary);
413
+ --ory-background-default: var(--interface-background-default-primary);
414
+ --ory-border-default: var(--interface-border-default-primary);
415
+ --ory-foreground-default: var(--interface-foreground-default-primary);
416
+ --radio-background-checked: var(--interface-background-brand-primary);
417
+ --radio-background-default: var(--interface-background-default-secondary);
418
+ --radio-border-checked: var(--interface-border-brand-brand);
419
+ --radio-border-default: var(--interface-border-default-primary);
420
+ --radio-foreground-checked: var(--interface-foreground-brand-on-primary);
421
+ --radio-foreground-default: var(--interface-foreground-default-primary);
422
+ --toggle-background-checked: var(--interface-background-brand-primary);
423
+ --toggle-background-default: var(--interface-background-default-secondary);
424
+ --toggle-border-checked: var(--interface-border-default-none);
425
+ --toggle-border-default: var(--interface-border-default-primary);
426
+ --toggle-foreground-checked: var(--interface-foreground-brand-on-primary);
427
+ --toggle-foreground-default: var(--interface-foreground-brand-primary);
428
+ /* Specific elements end */
429
+
430
+ /* border radius */
431
+ --border-radius-buttons: 0.25rem;
432
+ --border-radius-forms: 0.25rem;
433
+ --border-radius-general: 0.25rem;
434
+ --border-radius-branding: 0.5rem;
435
+ --border-radius-cards: 0.75rem;
436
+ --border-radius-identifier: 62.4375rem;
437
+ /* border radius end*/
438
+ }
439
+ ```
440
+
441
+ ### Component system
442
+
443
+ Many components in Ory Elements can be overriden with your own implementation.
444
+ Ory Elements also provides useful hooks that be used inside of your custom
445
+ components to get access to the library configuration, or the current flow.
446
+
447
+ **Example:**
448
+
449
+ ```tsx
450
+ import { Registration } from "@ory/elements-react/theme"
451
+
452
+ function CustomCardHeader() {
453
+ const { flowType } = useOryFlow()
454
+
455
+ return <div>My Custom {flowType} Card header</div>
456
+ }
457
+
458
+ export default async function RegistrationPage({ searchParams }: PageProps) {
459
+ const flow = await getOrCreateRegistrationFlow(searchParams)
460
+
461
+ if (!flow) {
462
+ return <div>Flow not found</div>
463
+ }
464
+
465
+ return (
466
+ <Registration
467
+ flow={flow}
468
+ config={oryConfiguration}
469
+ components={{
470
+ Card: {
471
+ CardHeader: CustomCardHeader,
472
+ },
473
+ }}
474
+ />
475
+ )
476
+ }
477
+ ```
478
+
479
+ ### internationalization (i18n)
480
+
481
+ `@ory/elements-react` comes with default translations for many languages.
482
+ Additionally, it provides a way to override the default messages, through the
483
+ `locale` property of the `OryClientConfiguration`.
484
+
485
+ ```ts
486
+ const config = {
487
+ intl: {
488
+ locale: "en", // Or any of the other supported locales.
489
+ customTranslations: {
490
+ en: {
491
+ "identities.messages.1040006": "This is a custom translation",
492
+ },
493
+ },
494
+ },
495
+ }
496
+ ```
497
+
498
+ For a full list of messages, see
499
+ [en.json](https://github.com/ory/elements/blob/main/packages/elements-react/src/locales/en.json).
500
+
501
+ ## Development
502
+
503
+ See [DEVELOPMENT.md](./DEVELOPMENT.md).
@@ -0,0 +1,10 @@
1
+ // Copyright © 2025 Ory Corp
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ module.exports = {
5
+ presets: [
6
+ "@babel/preset-env",
7
+ "@babel/preset-react",
8
+ "@babel/preset-typescript",
9
+ ],
10
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * This function returns the base URL of the Ory SDK as set by environment variables `NEXT_PUBLIC_ORY_SDK_URL` or `ORY_SDK_URL`.
3
+ */
4
+ declare function orySdkUrl(): string;
5
+ /**
6
+ * This function returns whether the current environment is a production environment.
7
+ */
8
+ declare function isProduction(): boolean;
9
+ /**
10
+ * This function returns the Ory SDK URL. If the environment is not production, it tries to guess the SDK URL based on the environment variables, assuming
11
+ * that Ory APIs are proxied through the same domain as the application.
12
+ *
13
+ * Currently, this is only tested for Vercel deployments.
14
+ *
15
+ * @param options - Options for guessing the SDK URL.
16
+ */
17
+ declare function guessPotentiallyProxiedOrySdkUrl(options?: {
18
+ knownProxiedUrl?: string;
19
+ }): string;
20
+
21
+ export { guessPotentiallyProxiedOrySdkUrl, isProduction, orySdkUrl };
@@ -0,0 +1,21 @@
1
+ /**
2
+ * This function returns the base URL of the Ory SDK as set by environment variables `NEXT_PUBLIC_ORY_SDK_URL` or `ORY_SDK_URL`.
3
+ */
4
+ declare function orySdkUrl(): string;
5
+ /**
6
+ * This function returns whether the current environment is a production environment.
7
+ */
8
+ declare function isProduction(): boolean;
9
+ /**
10
+ * This function returns the Ory SDK URL. If the environment is not production, it tries to guess the SDK URL based on the environment variables, assuming
11
+ * that Ory APIs are proxied through the same domain as the application.
12
+ *
13
+ * Currently, this is only tested for Vercel deployments.
14
+ *
15
+ * @param options - Options for guessing the SDK URL.
16
+ */
17
+ declare function guessPotentiallyProxiedOrySdkUrl(options?: {
18
+ knownProxiedUrl?: string;
19
+ }): string;
20
+
21
+ export { guessPotentiallyProxiedOrySdkUrl, isProduction, orySdkUrl };
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var config_exports = {};
20
+ __export(config_exports, {
21
+ guessPotentiallyProxiedOrySdkUrl: () => guessPotentiallyProxiedOrySdkUrl,
22
+ isProduction: () => isProduction,
23
+ orySdkUrl: () => orySdkUrl
24
+ });
25
+ module.exports = __toCommonJS(config_exports);
26
+ function orySdkUrl() {
27
+ let baseUrl;
28
+ if (process.env.NEXT_PUBLIC_ORY_SDK_URL) {
29
+ baseUrl = process.env.NEXT_PUBLIC_ORY_SDK_URL;
30
+ }
31
+ if (process.env.ORY_SDK_URL) {
32
+ baseUrl = process.env._ORY_SDK_URL;
33
+ }
34
+ if (!baseUrl) {
35
+ throw new Error(
36
+ "You need to set environment variable `NEXT_PUBLIC_ORY_SDK_URL` or if you don't use Next.js `ORY_SDK_URL` to your Ory Network SDK URL."
37
+ );
38
+ }
39
+ return baseUrl.replace(/\/$/, "");
40
+ }
41
+ function isProduction() {
42
+ var _a, _b;
43
+ return ["production", "prod"].indexOf(
44
+ (_b = (_a = process.env.VERCEL_ENV) != null ? _a : process.env.NODE_ENV) != null ? _b : ""
45
+ ) > -1;
46
+ }
47
+ function guessPotentiallyProxiedOrySdkUrl(options) {
48
+ if (isProduction()) {
49
+ return orySdkUrl();
50
+ }
51
+ if (process.env.VERCEL_ENV) {
52
+ if (!isProduction() && process.env.VERCEL_URL) {
53
+ return `https://${process.env.VERCEL_URL}`.replace(/\/$/, "");
54
+ }
55
+ if (process.env.__NEXT_PRIVATE_ORIGIN) {
56
+ return process.env.__NEXT_PRIVATE_ORIGIN.replace(/\/$/, "");
57
+ }
58
+ }
59
+ if (typeof window !== "undefined") {
60
+ return window.location.origin;
61
+ }
62
+ if (options == null ? void 0 : options.knownProxiedUrl) {
63
+ return options.knownProxiedUrl;
64
+ }
65
+ const final = orySdkUrl();
66
+ console.warn(
67
+ `Unable to determine a suitable SDK URL for setting up the Next.js integration of Ory Elements. Will proceed using default Ory SDK URL "${final}". This is likely not what you want for local development and your authentication and login may not work.`
68
+ );
69
+ return final;
70
+ }
71
+ // Annotate the CommonJS export names for ESM import in node:
72
+ 0 && (module.exports = {
73
+ guessPotentiallyProxiedOrySdkUrl,
74
+ isProduction,
75
+ orySdkUrl
76
+ });
77
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/client/config.ts"],"sourcesContent":["// Copyright © 2024 Ory Corp\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * This function returns the base URL of the Ory SDK as set by environment variables `NEXT_PUBLIC_ORY_SDK_URL` or `ORY_SDK_URL`.\n */\nexport function orySdkUrl() {\n let baseUrl\n\n if (process.env.NEXT_PUBLIC_ORY_SDK_URL) {\n baseUrl = process.env.NEXT_PUBLIC_ORY_SDK_URL\n }\n\n if (process.env.ORY_SDK_URL) {\n baseUrl = process.env._ORY_SDK_URL\n }\n\n if (!baseUrl) {\n throw new Error(\n \"You need to set environment variable `NEXT_PUBLIC_ORY_SDK_URL` or if you don't use Next.js `ORY_SDK_URL` to your Ory Network SDK URL.\",\n )\n }\n\n return baseUrl.replace(/\\/$/, \"\")\n}\n\n/**\n * This function returns whether the current environment is a production environment.\n */\nexport function isProduction() {\n return (\n [\"production\", \"prod\"].indexOf(\n process.env.VERCEL_ENV ?? process.env.NODE_ENV ?? \"\",\n ) > -1\n )\n}\n\n/**\n * This function returns the Ory SDK URL. If the environment is not production, it tries to guess the SDK URL based on the environment variables, assuming\n * that Ory APIs are proxied through the same domain as the application.\n *\n * Currently, this is only tested for Vercel deployments.\n *\n * @param options - Options for guessing the SDK URL.\n */\nexport function guessPotentiallyProxiedOrySdkUrl(options?: {\n knownProxiedUrl?: string\n}) {\n if (isProduction()) {\n // In production, we use the production custom domain\n return orySdkUrl()\n }\n\n if (process.env.VERCEL_ENV) {\n // We are in vercel\n\n // The domain name of the generated deployment URL. Example: *.vercel.app. The value does not include the protocol scheme https://.\n //\n // This is only available for preview deployments on Vercel.\n if (!isProduction() && process.env.VERCEL_URL) {\n return `https://${process.env.VERCEL_URL}`.replace(/\\/$/, \"\")\n }\n\n // This is sometimes set by the render server.\n if (process.env.__NEXT_PRIVATE_ORIGIN) {\n return process.env.__NEXT_PRIVATE_ORIGIN.replace(/\\/$/, \"\")\n }\n }\n\n // Unable to figure out the SDK URL. Either because we are not using Vercel or because we are on a local machine.\n // Let's try to use the window location.\n if (typeof window !== \"undefined\") {\n return window.location.origin\n }\n\n if (options?.knownProxiedUrl) {\n return options.knownProxiedUrl\n }\n\n // We tried everything. Let's use the SDK URL.\n const final = orySdkUrl()\n console.warn(\n `Unable to determine a suitable SDK URL for setting up the Next.js integration of Ory Elements. Will proceed using default Ory SDK URL \"${final}\". This is likely not what you want for local development and your authentication and login may not work.`,\n )\n\n return final\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMO,SAAS,YAAY;AAC1B,MAAI;AAEJ,MAAI,QAAQ,IAAI,yBAAyB;AACvC,cAAU,QAAQ,IAAI;AAAA,EACxB;AAEA,MAAI,QAAQ,IAAI,aAAa;AAC3B,cAAU,QAAQ,IAAI;AAAA,EACxB;AAEA,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO,QAAQ,QAAQ,OAAO,EAAE;AAClC;AAKO,SAAS,eAAe;AA7B/B;AA8BE,SACE,CAAC,cAAc,MAAM,EAAE;AAAA,KACrB,mBAAQ,IAAI,eAAZ,YAA0B,QAAQ,IAAI,aAAtC,YAAkD;AAAA,EACpD,IAAI;AAER;AAUO,SAAS,iCAAiC,SAE9C;AACD,MAAI,aAAa,GAAG;AAElB,WAAO,UAAU;AAAA,EACnB;AAEA,MAAI,QAAQ,IAAI,YAAY;AAM1B,QAAI,CAAC,aAAa,KAAK,QAAQ,IAAI,YAAY;AAC7C,aAAO,WAAW,QAAQ,IAAI,UAAU,GAAG,QAAQ,OAAO,EAAE;AAAA,IAC9D;AAGA,QAAI,QAAQ,IAAI,uBAAuB;AACrC,aAAO,QAAQ,IAAI,sBAAsB,QAAQ,OAAO,EAAE;AAAA,IAC5D;AAAA,EACF;AAIA,MAAI,OAAO,WAAW,aAAa;AACjC,WAAO,OAAO,SAAS;AAAA,EACzB;AAEA,MAAI,mCAAS,iBAAiB;AAC5B,WAAO,QAAQ;AAAA,EACjB;AAGA,QAAM,QAAQ,UAAU;AACxB,UAAQ;AAAA,IACN,0IAA0I,KAAK;AAAA,EACjJ;AAEA,SAAO;AACT;","names":[]}
@@ -0,0 +1,51 @@
1
+ function orySdkUrl() {
2
+ let baseUrl;
3
+ if (process.env.NEXT_PUBLIC_ORY_SDK_URL) {
4
+ baseUrl = process.env.NEXT_PUBLIC_ORY_SDK_URL;
5
+ }
6
+ if (process.env.ORY_SDK_URL) {
7
+ baseUrl = process.env._ORY_SDK_URL;
8
+ }
9
+ if (!baseUrl) {
10
+ throw new Error(
11
+ "You need to set environment variable `NEXT_PUBLIC_ORY_SDK_URL` or if you don't use Next.js `ORY_SDK_URL` to your Ory Network SDK URL."
12
+ );
13
+ }
14
+ return baseUrl.replace(/\/$/, "");
15
+ }
16
+ function isProduction() {
17
+ var _a, _b;
18
+ return ["production", "prod"].indexOf(
19
+ (_b = (_a = process.env.VERCEL_ENV) != null ? _a : process.env.NODE_ENV) != null ? _b : ""
20
+ ) > -1;
21
+ }
22
+ function guessPotentiallyProxiedOrySdkUrl(options) {
23
+ if (isProduction()) {
24
+ return orySdkUrl();
25
+ }
26
+ if (process.env.VERCEL_ENV) {
27
+ if (!isProduction() && process.env.VERCEL_URL) {
28
+ return `https://${process.env.VERCEL_URL}`.replace(/\/$/, "");
29
+ }
30
+ if (process.env.__NEXT_PRIVATE_ORIGIN) {
31
+ return process.env.__NEXT_PRIVATE_ORIGIN.replace(/\/$/, "");
32
+ }
33
+ }
34
+ if (typeof window !== "undefined") {
35
+ return window.location.origin;
36
+ }
37
+ if (options == null ? void 0 : options.knownProxiedUrl) {
38
+ return options.knownProxiedUrl;
39
+ }
40
+ const final = orySdkUrl();
41
+ console.warn(
42
+ `Unable to determine a suitable SDK URL for setting up the Next.js integration of Ory Elements. Will proceed using default Ory SDK URL "${final}". This is likely not what you want for local development and your authentication and login may not work.`
43
+ );
44
+ return final;
45
+ }
46
+ export {
47
+ guessPotentiallyProxiedOrySdkUrl,
48
+ isProduction,
49
+ orySdkUrl
50
+ };
51
+ //# sourceMappingURL=config.mjs.map