Compare commits

...

48 Commits

Author SHA1 Message Date
Pilou
f7a3136086 Merge pull request #670 from nhost/changeset-release/main
chore: update versions
2022-06-03 20:06:20 +02:00
github-actions[bot]
b5642586a4 chore: update versions 2022-06-03 14:00:05 +00:00
Pilou
cadc8f8864 Merge pull request #667 from nhost/662-invalid-url-when-using-google-provider
fix: correct rewriting options when `clientUrl` is not available
2022-06-03 15:58:17 +02:00
Pierre-Louis Mercereau
1dc2bce05a refactor: add tests and inline docs 2022-06-03 14:41:15 +02:00
Pilou
65588268f6 Merge pull request #669 from nhost/contributors-readme-action-hUXZuGw8l3
contributors readme action update
2022-06-03 13:37:21 +02:00
github-actions[bot]
a6b15bb387 contrib-readme-action has updated readme 2022-06-03 10:07:07 +00:00
Pilou
7b8f64ab25 Merge pull request #668 from nbourdin/patch-2
Update github-integration.mdx
2022-06-03 12:06:50 +02:00
Nicolas Bourdin
451b62d641 Update github-integration.mdx 2022-06-03 12:05:04 +02:00
Pierre-Louis Mercereau
08a37aae7c fix: correct rewriting options when clientUrl is not available
The client URL is set to `window.location.origin`, so it can rewrite redirection urls that are
passed on to authenticaion methods. However, `clientUrl` is set to `''` when running on the server
side. This fix then avoid raising an error when trying to rewrite `redirectTo` on non-browser
environment, and forces `useProviderLink` to be rendered on the client side.
2022-06-03 11:41:52 +02:00
Johan Eliasson
679c32cb5a Merge pull request #658 from nhost/docs-storage
Docs: Storage and small fixes
2022-06-02 17:03:13 +02:00
Johan Eliasson
25bc2bee67 small updates 2022-06-02 15:34:17 +02:00
Szilárd Dóró
ce1ea16981 Merge pull request #661 from nhost/changeset-release/main
chore: update versions
2022-06-02 12:50:27 +02:00
github-actions[bot]
7048eaf0bb chore: update versions 2022-06-02 10:47:48 +00:00
Szilárd Dóró
9c382a3773 Merge pull request #660 from nhost/fix/esm-rollback
chore: reverted ESM related changes
2022-06-02 12:46:57 +02:00
Johan Eliasson
7f07c75dc4 Merge pull request #659 from gdangelo/docs/quickstarts-nextjs
docs: Add skip option to useQuery call to skip query if id is falsy
2022-06-02 12:44:13 +02:00
Szilárd Dóró
ebad09364e added changeset 2022-06-02 12:43:40 +02:00
Szilárd Dóró
cbec4dbab6 chore: reverted ESM related changes
ESM gods didn't like me 😞 we'll come back to this in the future
2022-06-02 11:26:23 +02:00
Johan Eliasson
a05d7585a3 typo 2022-06-02 10:51:15 +02:00
Johan Eliasson
89f823fdce stronger 2022-06-02 10:50:08 +02:00
Johan Eliasson
6f4d465f54 main repo 2022-06-02 10:48:23 +02:00
Johan Eliasson
aafbaa8d25 update 2022-06-02 10:37:47 +02:00
Johan Eliasson
0f7b31497f storage update 2022-06-02 09:33:36 +02:00
Grégory D'Angelo
bcf2751625 docs: Add skip option to useQuery call to skip query if id is falsy 2022-06-02 09:20:53 +02:00
Johan Eliasson
1965fc85d6 storage started 2022-06-02 08:30:46 +02:00
Johan Eliasson
a8a7c32ec1 better docs for magic link and sms 2022-06-02 07:21:36 +02:00
Johan Eliasson
e8232cdfbb better phone number sign in docs 2022-06-02 07:14:28 +02:00
Johan Eliasson
066489e3d4 zoom images 2022-06-02 07:00:34 +02:00
Johan Eliasson
de10d84cc1 started 2022-06-01 23:24:11 +02:00
Szilárd Dóró
f7ddafdf05 Merge pull request #657 from nhost/changeset-release/main
chore: update versions
2022-06-01 15:26:43 +02:00
github-actions[bot]
f86b707d34 chore: update versions 2022-06-01 13:23:25 +00:00
Szilárd Dóró
d281665424 Merge pull request #655 from nhost/fix/missing-modules
fix: `@nhost/react-apollo` imports
2022-06-01 15:22:21 +02:00
Szilárd Dóró
24659b2979 fixed build warning related to unknown globals 2022-06-01 14:52:36 +02:00
Szilárd Dóró
ef8c8f9cd4 fixed @nhost/react-apollo imports 2022-06-01 14:47:04 +02:00
Johan Eliasson
bc526e70ef Merge pull request #651 from gdangelo/docs/quickstarts-redwoodjs
docs: Add skip option to useQuery call to skip query if id is falsy
2022-06-01 14:30:23 +02:00
Szilárd Dóró
35068d213f Merge pull request #652 from nhost/changeset-release/main
chore: update versions
2022-06-01 13:42:31 +02:00
Pilou
e732ea9aa5 Merge pull request #650 from gdangelo/docs/quickstarts-react
docs: Add skip option to useQuery call to skip query if id is falsy
2022-06-01 13:40:35 +02:00
github-actions[bot]
e8d5338aca chore: update versions 2022-06-01 11:39:36 +00:00
Szilárd Dóró
ac84f4d0e9 Merge pull request #648 from nhost/fix/next-esm-followup
ESM and build process improvements
2022-06-01 13:38:05 +02:00
Szilárd Dóró
12e9a572db activated import/extensions ESLint rule
- file extensions are mandatory for imported packages
- fixed general errors indicated by the linter
2022-06-01 13:31:09 +02:00
Grégory D'Angelo
c1c7ceb319 docs: Add skip option to useQuery call to skip query if id is falsy 2022-06-01 13:20:41 +02:00
Grégory D'Angelo
23a9f9f547 docs: Add skip option to useQuery call to skip query if id is falsy 2022-06-01 11:43:27 +02:00
Szilárd Dóró
1b37b9f62a added changeset 2022-06-01 10:37:25 +02:00
Szilárd Dóró
764ea72d60 fixed build warning about globals 2022-06-01 09:42:06 +02:00
Pilou
3efbbca136 Merge pull request #646 from nhost/plmercereau-patch-1
Remove AUTH_SMS_TWILIO_FROM from env var list
2022-06-01 09:01:24 +02:00
Pilou
93d8eec950 Remove AUTH_SMS_TWILIO_FROM from env var list 2022-06-01 08:46:49 +02:00
Szilárd Dóró
d4ea2fce6d fixed React ESM issues, simplified bundle copy 2022-05-31 23:08:48 +02:00
Johan Eliasson
5096456f78 Merge pull request #643 from nhost/elitan-patch-2
Light mode for now to match landing page and dashboard
2022-05-31 17:08:01 +02:00
Johan Eliasson
507d09861c Light mode for now to match landing page and dashboard 2022-05-31 16:32:25 +02:00
62 changed files with 733 additions and 465 deletions

View File

@@ -1,4 +1,4 @@
![Nhost](https://i.imgur.com/FrcdOZg.png)
![Nhost](https://i.imgur.com/ZenoUlM.png)
<div align="center">
@@ -264,6 +264,13 @@ Here are some ways of contributing to making Nhost better:
<sub><b>Mustafa Hanif</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/nbourdin">
<img src="https://avatars.githubusercontent.com/u/5602476?v=4" width="100;" alt="nbourdin"/>
<br />
<sub><b>Nicolas Bourdin</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/timpratim">
<img src="https://avatars.githubusercontent.com/u/32492961?v=4" width="100;" alt="timpratim"/>
@@ -291,15 +298,15 @@ Here are some ways of contributing to making Nhost better:
<br />
<sub><b>Anders Kjær Damgaard</b></sub>
</a>
</td>
</td></tr>
<tr>
<td align="center">
<a href="https://github.com/Sonichigo">
<img src="https://avatars.githubusercontent.com/u/53110238?v=4" width="100;" alt="Sonichigo"/>
<br />
<sub><b>Animesh Pathak</b></sub>
</a>
</td></tr>
<tr>
</td>
<td align="center">
<a href="https://github.com/rustyb">
<img src="https://avatars.githubusercontent.com/u/53086?v=4" width="100;" alt="rustyb"/>
@@ -334,15 +341,15 @@ Here are some ways of contributing to making Nhost better:
<br />
<sub><b>Hoang Do</b></sub>
</a>
</td>
</td></tr>
<tr>
<td align="center">
<a href="https://github.com/MelodicCrypter">
<img src="https://avatars.githubusercontent.com/u/18341500?v=4" width="100;" alt="MelodicCrypter"/>
<br />
<sub><b>Hugh Caluscusin</b></sub>
</a>
</td></tr>
<tr>
</td>
<td align="center">
<a href="https://github.com/jladuval">
<img src="https://avatars.githubusercontent.com/u/1935359?v=4" width="100;" alt="jladuval"/>
@@ -364,13 +371,6 @@ Here are some ways of contributing to making Nhost better:
<sub><b>Max Reynolds</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/nbourdin">
<img src="https://avatars.githubusercontent.com/u/5602476?v=4" width="100;" alt="nbourdin"/>
<br />
<sub><b>Nicolas Bourdin</b></sub>
</a>
</td>
<td align="center">
<a href="https://github.com/ghoshnirmalya">
<img src="https://avatars.githubusercontent.com/u/6391763?v=4" width="100;" alt="ghoshnirmalya"/>

View File

@@ -6,5 +6,8 @@ module.exports = {
parserOptions: {
...base.parserOptions,
parser: '@typescript-eslint/parser'
},
rules: {
'vue/html-self-closing': 'off'
}
}

View File

@@ -14,9 +14,6 @@ const entry = fs.existsSync(tsEntry) ? tsEntry : tsEntry.replace('.ts', '.tsx')
const deps = [...Object.keys(Object.assign({}, pkg.peerDependencies, pkg.dependencies))]
export default defineConfig({
optimizeDeps: {
include: ['react/jsx-runtime']
},
plugins: [
tsconfigPaths(),
dts({
@@ -44,7 +41,7 @@ export default defineConfig({
lib: {
entry,
name: pkg.name,
fileName: (format) => (format === 'cjs' ? `index.cjs.js` : `index.esm.mjs`),
fileName: (format) => (format === 'cjs' ? `index.cjs.js` : `index.esm.js`),
formats: ['cjs', 'es']
},
rollupOptions: {
@@ -55,6 +52,7 @@ export default defineConfig({
'@apollo/client': '@apollo/client',
'@apollo/client/core': '@apollo/client/core',
'@apollo/client/link/context': '@apollo/client/link/context',
'@apollo/client/react': '@apollo/client/react',
'@apollo/client/link/subscriptions': '@apollo/client/link/subscriptions',
'@apollo/client/utilities': '@apollo/client/utilities',
'graphql-ws': 'graphql-ws',

View File

@@ -6,5 +6,8 @@ import baseLibConfig from './vite.lib.config'
export default defineConfig({
...baseLibConfig,
plugins: [react(), ...baseLibConfig.plugins]
optimizeDeps: {
include: ['react/jsx-runtime']
},
plugins: [react({ jsxRuntime: 'classic' }), ...baseLibConfig.plugins]
})

View File

@@ -9,6 +9,14 @@ Follow this guide to sign in users with Magic Link, also called passwordless ema
The Magic Link sign-in method enables you to sign in users to your app using an email address, without requiring a password.
## Setup
Enable the Magic Link sign-in method in the Nhost dashboard under **Users** -> **Login settings** -> **Magic Link**.
![Magic Link Setup with Nhost](/img/platform/authentication/sign-in-methods/magic-link/magic-link-setup.png)
## Sign In
To sign in users with Magic Link is a two-step process:
1. Send a Magic Link to the user's email address.
@@ -21,3 +29,5 @@ nhost.auth.signIn({
email: 'joe@example.com'
})
```
If you want to change the email for your magic link emails, you can do so by changing the [email templates](/platform/authentication/email-templates).

View File

@@ -7,22 +7,53 @@ image: /img/og/platform/sign-in-with-phone-number-sms.png
Follow this guide to sign in users with a phone number (SMS).
## Setup
You need a [Twilio account](https://www.twilio.com/try-twilio) to use this feature because all SMS are sent through Twilio.
Enable the Phone Number (SMS) sign-in method in the Nhost dashboard under **Users** -> **Login settings** -> **Passwordless SMS**.
You need to insert the following settings in the Nhost dashboard from Twilio:
- Account SID
- Auth Token
- Messaging Service SID (or a Twilio phone number)
<video width="99%" autoPlay muted loop controls="true" style={{marginBottom: '15px'}}>
<source src="/videos/enable-sms-sign-in.mp4" type="video/mp4" />
</video>
## Sign In
To sign in users with a phone number is a two-step process:
1. Send a one-time password (OTP) to the user's phone number.
2. The user uses the OTP to sign in
2. The user uses the OTP to sign in.
```js
// Step 1: Send OTP to the user's phone number
await nhost.auth.signIn({
phoneNumber: '0011233213123'
phoneNumber: '+11233213123'
})
// Step 2: Sign in user using their phone number and OTP
await nhost.auth.signIn({
phoneNumber: '0011233213123'
phoneNumber: '+11233213123'
// highlight-next-line
otp: '123456',
})
```
The first time a user signs in using a phone number, the user is created. That means you don't need to sign up the user before signin in the user.
:::info
Phone numbers should start with `+` (not `00`) to follow the [E.164 formatting standard](https://en.wikipedia.org/wiki/E.164).
:::
## Other SMS Providers
We only support Twilio for now. If you want support for another SMS provider, please create an issue on [GitHub](https://github.com/nhost/nhost).

View File

@@ -15,7 +15,7 @@ The following things are deployed:
- Serverless Functions
:::info
Settings in `nhost/config.yaml` are **not** deployed. That menas you need to manually sync settings between local and remote environments between the CLI and Nhost Cloud.
Settings in `nhost/config.yaml` are **not** deployed. That means you need to manually sync settings between local and remote environments between the CLI and Nhost Cloud.
:::
## Connecting a GitHub repository

View File

@@ -673,7 +673,8 @@ export function UserProvider({ children = null }) {
const id = useUserId()
// highlight-start
const { loading, error, data } = useQuery(GET_USER_QUERY, {
variables: { id }
variables: { id },
skip: !id
})
const user = data?.user
// highlight-end

View File

@@ -638,7 +638,8 @@ const Layout = () => {
const id = useUserId()
// highlight-start
const { loading, error, data } = useQuery(GET_USER_QUERY, {
variables: { id }
variables: { id },
skip: !id
})
const user = data?.user
// highlight-end

View File

@@ -1090,7 +1090,8 @@ export function UserProvider({ children = null }) {
const { userMetadata } = useAuth()
const { loading, error, data } = useQuery(GET_USER_QUERY, {
variables: { id: userMetadata?.id }
variables: { id: userMetadata?.id },
skip: !userMetadata?.id
})
const user = data?.user

View File

@@ -1,102 +0,0 @@
---
title: 'Storage'
sidebar_position: 7
image: /img/og/platform/storage.png
---
Nhost stores and serves files of any type in your backend.
The metadata for files hosted on Nhost is available in the `storage.files` table of your database, and thus is also accessible in the GraphQL API. This allows you to fetch a list of files to display in your frontend, for example.
---
## Buckets
Buckets are used to organize files and group permissions for files. Buckets are stored in the `storage.buckets` table in your database, and accessible via `buckets` in your GraphQL API.
Buckets are a way to segment permissions for file type, minimum and maximum file size, cache control, download expiration, and if pre-signed URLs are allowed.
---
## Permissions
Upload, read and delete permissions for files are managed through Hasura's permission system, just like other permissions.
### Upload
To upload a file, a user must have the `insert` permission to the `storage.files` table. The following columns must be checked:
- `id`
- `bucket_id`
- `name`
- `mime_type`
### Select
To read and download a file, a user must have the `select` permission to the `storage.files` table. Only the `id` column is required, but as a best practice you should allow reading all columns.
### Delete
To delete a file, a user must have the `delete` permission to the `storage.files` table.
> Updating an existing file is not supported. Delete and upload a new file instead.
---
## Accessing files
To access a file, make an HTTP GET request to `/v1/storage/files/{id}` with the `Authorization` header set with the access token returned by Nhost Auth. Alternatively, you can create a pre-signed URL by making an HTTP GET request to `/v1/storage/files/{id}/presignedurl` with the `Authorization` header set with the access token returned by Nhost Auth.
If the file is publicly accessible, there is no need to set the `Authorization` header. The file is publicly accessible if the permission for the `public` role is set to allow reading the file metadata in Hasura for the `storage.files` table.
### Pre-signed URL
A pre-signed URL is a unique URL that is used to access the file. Anyone with the pre-signed URL can access the file without exceptions. The URL is generated by Nhost Storage API and is valid for a limited time. The time limit of the pre-signed URL is determined by the `download_expiration` column in the bucket where the file is.
Using pre-signed URL is a good way to share files to people who don't have access to the file directly, or to access the file without setting the `Authorization` headers, for example when displaying the file in an `img` tag.
## Example with GraphQL
Let's say we're building a CRM and we want to store files for each customer.
In our CRM, we have the following two tables:
- `customers`
- `id`
- `name`
- `address`
- `customer_files`
- `id`
- `customer_id` (foreign key to `customers.id`)
- `file_id` (foreign key to `storage.files.id`)
We also have created relationships between `customers` and `customer_files` and between `customer_files` and `storage.files`.
We can now query the data with the following query:
```graphql
query {
customer {
# customer table
id
name
customer_files {
# customer_files table
id
file {
# storage.files table
id
name
size
mime_type
}
}
}
}
```
To upload a file, this is what we do;
1. Upload a file
2. Get the `id` of the file. The server returns this.
3. Insert the `id` of the file together with the customer's id into the `customer_files` table.

View File

@@ -0,0 +1,244 @@
---
title: 'Storage'
sidebar_position: 7
image: /img/og/platform/storage.png
---
import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'
Nhost Storage enables you to let your users upload and download files. Nhost Storage is integrated with the [GraphQL API](/platform/graphql) and its permission system from Hasura.
## Files
Files can be of any type, such as images, documents, videos, etc.
File metadata is stored in your database in the `files` table in the `storage` schema. This means that file metadata is available in your GraphQL API, which makes it easy to:
- Read file metadata via GraphQL.
- Manage file permissions (in Hasura).
- Create GraphQL relationships between files and your database tables.
:::warning
Don't modify the database schema, nor GraphQL root fields in any of the tables in the `storage` schema.
:::
:::tip
You're allowed to add and modify the following:
- GraphQL Relationships
- Permissions
:::
### Upload File
When a file is uploaded, the file metadata is inserted into the `storage.files` table and a file `id` is returned. The file's `id` is how you reference and access the file. It's recommended to create your own table to store the uploaded file `id`, to access the file in the future.
<Tabs groupId="http-sdk">
<TabItem value="js" label="JavaScript">
```js
await nhost.storage.upload({ file })
```
Learn more about [`upload()`](/reference/javascript/storage/upload).
</TabItem>
<TabItem value="http" label="HTTP" default>
```http
POST /v1/storage/files HTTP/1.1
```
</TabItem>
</Tabs>
### Download File
There are two ways to download a file:
- Public URL.
- Pre-signed URL.
#### Public URL
Public URLs are available for both unauthenticated and authenticated users. Permissions are checked for every file request. To get a public URL for a file, you would normally use the `public` role to set **select** permissions.
<Tabs groupId="http-sdk">
<TabItem value="js" label="JavaScript">
```js
await nhost.storage.getPublicUrl({
fileId: '<File-ID>'
})
```
Learn more about [`getPublicUrl()`](/reference/javascript/storage/get-public-url).
</TabItem>
<TabItem value="http" label="HTTP" default>
```http
GET /v1/storage/files/{file_id} HTTP/1.1
```
</TabItem>
</Tabs>
#### Pre-signed URL
Pre-signed URLs work a bit differently from public URLs.
The permission check only happens when the user requests a pre-signed URL. Once a pre-signed URL is generated, anyone with the pre-signed URL can download the file.
Pre-signed URLs expire, and stop work, after a set amount of time. By default, for files in the `default` bucket, the expiration time is 30 seconds. You can change the expiration time for pre-signed URLs by changing the `download_expiration` (in seconds) field on the bucket where the file is located.
<Tabs groupId="http-sdk">
<TabItem value="js" label="JavaScript">
```js
await nhost.storage.getPresignedUrl({
fileId: '<File-ID>'
})
```
Learn more about [`getPresignedUrl()`](/reference/javascript/storage/get-presigned-url).
</TabItem>
<TabItem value="http" label="HTTP" default>
```http
GET /v1/storage/files/{file_id}/presignedurl HTTP/1.1
```
</TabItem>
</Tabs>
### Delete File
Delete a file and the file metadata in the database.
<Tabs groupId="http-sdk">
<TabItem value="js" label="JavaScript">
```js
const { error } = await nhost.storage.delete({ fileId: 'uuid' })
```
Learn more about [`delete()`](/reference/javascript/storage/delete).
</TabItem>
<TabItem value="http" label="HTTP" default>
```http
DELETE /v1/storage/files/{file_id} HTTP/1.1
```
</TabItem>
</Tabs>
## Buckets
Buckets are used to organize files and group permissions for files. Buckets are stored in the `storage.buckets` table in your database, and accessible via `buckets` in your GraphQL API.
For each bucket, you can specify file permissions for the following properties:
- MIME type.
- Minimum size.
- Maximum size.
- Cache control.
- Allow pre-signed URLs.
- Download expiration (for pre-signed URLs).
There is a default bucket (`default`) that is used if no bucket is specified during file upload. It's not possible to delete the `default` bucket.
## Permissions
Permissions to upload, download, and delete files are managed through Hasura's permission system on the `storage.files` table.
### Upload
To upload a file, a user must have the **`insert` permission** to the `storage.files` table. The following columns must be allowed to insert:
- `id`
- `bucket_id`
- `name`
- `mime_type`
### Download
To download a file, a user must have the **`select` permission** to the `storage.files` table. Only the `id` column is required, but we recommend allowing to select all columns.
### Delete
To delete a file, a user must have the **`delete` permission** to the `storage.files` table.
Updating an existing file is not supported. If you need to update a file, delete the file and upload a new file.
Just deleting the file metadata in the `storage.files` table does **not** delete the actual file. Always delete files via Nhost Storage. This way, both the file metadata and the actual file are deleted.
## Image Transformation
Images can be transformed, on the fly, by adding query parameters. The following query parameters are available:
- `w` - Width of the image in pixels.
- `h` - Height of the image in pixels.
Image Transformation works on both public and pre-signed URLs.
**Example**: Transform an image to 500px width (`?w=500`):
```text
https://[subdomain].nhost.run/v1/storage/files/08e6fa32-0880-4d0e-a832-278198acb363?w=500
```
## Example: CRM System
Let's say you want to build a CRM system and you want to store files for customers. This is one way how you could do that.
Start with, you would have two tables:
1. `customers` - Customer data.
2. `customer_files` - What file belongs to what customer.
```text
- customers
- id
- name
- address
customer_files
- id
- customer_id (Foreign Key to `customers.id`)
- file_id (Foreign Key to `storage.files.id`)
```
You would also create [Hasura Relationships](https://hasura.io/docs/latest/graphql/core/databases/postgres/schema/table-relationships/index/) (GraphQL relationships) between between `customers` and `customer_files` and between `customer_files` and `storage.files`.
With the two tables and GraphQL relationships in place, you can query customers and the customer's files like this:
```graphql
query {
customers { # customers table
id
name
customer_files { # customer_files tabel
id
file { # storage.files table
id
name
size
mimeType
}
}
}
}
```
The file upload process would be as follows:
1. Upload a file.
2. Get the returned file id.
3. Insert the file `id` and the customer's `id` into the `customer_files` table.
This would allow you to upload and download files belonging to specific customers in your CRM system.

View File

@@ -43,7 +43,6 @@ sidebar_position: 3
| AUTH_SMS_TWILIO_ACCOUNT_SID | | |
| AUTH_SMS_TWILIO_AUTH_TOKEN | | |
| AUTH_SMS_TWILIO_MESSAGING_SERVICE_ID | | |
| AUTH_SMS_TWILIO_FROM | | |
| AUTH_EMAIL_SIGNIN_EMAIL_VERIFIED_REQUIRED | When enabled, any email-based authentication requires emails to be verified by a link sent to this email. | `true` |
| AUTH_ACCESS_CONTROL_ALLOWED_REDIRECT_URLS | | |
| AUTH_MFA_ENABLED | Enables users to use Multi Factor Authentication. | `false` |

View File

@@ -26,7 +26,7 @@ const config = {
favicon: 'img/favicon.png',
organizationName: 'nhost',
projectName: 'docs',
plugins: [require.resolve("docusaurus-plugin-image-zoom")],
presets: [
[
'classic',
@@ -180,6 +180,16 @@ const config = {
apiKey: 'a76361eaed8ebcd4cf5d9ae2f0c9e746',
indexName: 'nhost',
contextualSearch: false
},
zoom: {
selector: '.markdown :not(em) > img',
config: {
// options you can specify via https://github.com/francoischalifour/medium-zoom#usage
background: {
light: 'rgb(255, 255, 255)',
dark: 'rgb(50, 50, 50)'
}
}
}
})
}

View File

@@ -20,6 +20,7 @@
"@docusaurus/preset-classic": "2.0.0-beta.20",
"@mdx-js/react": "^1.6.22",
"clsx": "^1.1.1",
"docusaurus-plugin-image-zoom": "^0.1.1",
"mdx-mermaid": "^1.2.1",
"mermaid": "^8.14.0",
"prism-react-renderer": "^1.3.1",

Binary file not shown.

After

Width:  |  Height:  |  Size: 667 KiB

Binary file not shown.

View File

@@ -1,6 +1,6 @@
import { FaFacebook, FaGithub, FaGoogle } from 'react-icons/fa'
import { useProviderLink } from '@nhost/react'
import { useProviderLink } from '@nhost/nextjs'
import AuthLink from './AuthLink'

View File

@@ -0,0 +1,3 @@
module.exports = {
extends: ['../../config/.eslintrc.vue']
}

View File

@@ -18,7 +18,10 @@ const GET_USER_SUBSCRIPTION = gql`
`
const id = useUserId()
const { result } = useSubscription(GET_USER_SUBSCRIPTION, computed(() => ({ id: id.value })))
const { result } = useSubscription(
GET_USER_SUBSCRIPTION,
computed(() => ({ id: id.value }))
)
const user = computed(() => result.value?.user)
const UPDATE_USER_MUTATION = gql`
@@ -42,13 +45,12 @@ const updateUserProfile = async (event: Event) => {
displayName: `${firstName.value} ${lastName.value}`.trim(),
metadata: {
firstName: firstName.value,
lastName: lastName.value,
},
lastName: lastName.value
}
})
await nhost.auth.refreshSession()
}
}
</script>
<template>
@@ -59,15 +61,11 @@ const updateUserProfile = async (event: Event) => {
<em text-sm op75>Quickstart</em>
</p>
<div v-if="user" py-4>
<p>
Hello, {{ user.displayName }}. Your email is {{ user.email }}.
</p>
<p>Hello, {{ user.displayName }}. Your email is {{ user.email }}.</p>
<form @submit="updateUserProfile">
<input v-model="firstName" placeholder="First name" class="input"><br>
<input v-model="lastName" placeholder="Last name" class="input"><br>
<button class="btn-submit" :disabled="loading">
Save
</button>
<input v-model="firstName" placeholder="First name" class="input" /><br />
<input v-model="lastName" placeholder="Last name" class="input" /><br />
<button class="btn-submit" :disabled="loading">Save</button>
<div v-if="error">
{{ error.message }}
</div>

View File

@@ -11,12 +11,12 @@ import Unocss from 'unocss/vite'
export default defineConfig({
resolve: {
alias: {
'~/': `${path.resolve(__dirname, 'src')}/`,
},
'~/': `${path.resolve(__dirname, 'src')}/`
}
},
plugins: [
Vue({
reactivityTransform: true,
reactivityTransform: true
}),
// https://github.com/hannoeru/vite-plugin-pages
@@ -25,21 +25,21 @@ export default defineConfig({
// https://github.com/antfu/unplugin-auto-import
AutoImport({
imports: ['vue/macros', 'vue-router', '@vueuse/core'],
dts: true,
dts: true
}),
// https://github.com/antfu/vite-plugin-components
Components({
dts: true,
dts: true
}),
// https://github.com/antfu/unocss
// see unocss.config.ts for config
Unocss(),
Unocss()
],
// https://github.com/vitest-dev/vitest
test: {
environment: 'jsdom',
},
environment: 'jsdom'
}
})

View File

@@ -54,7 +54,6 @@
"@typescript-eslint/parser": "^5.22.0",
"@vitejs/plugin-react": "^1.3.2",
"c8": "^7.11.2",
"cpy-cli": "^4.1.0",
"eslint": "^8.14.0",
"eslint-config-react-app": "^7.0.1",
"eslint-plugin-flowtype": "^8.0.3",

View File

@@ -1,5 +1,27 @@
# @nhost/apollo
## 0.5.13
### Patch Changes
- @nhost/nhost-js@1.2.4
## 0.5.12
### Patch Changes
- ebad0936: reverted ESM related changes
- Updated dependencies [ebad0936]
- @nhost/nhost-js@1.2.3
## 0.5.11
### Patch Changes
- 1b37b9f6: fix: ESM import path fixes
- Updated dependencies [1b37b9f6]
- @nhost/nhost-js@1.2.2
## 0.5.10
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@nhost/apollo",
"version": "0.5.10",
"version": "0.5.13",
"description": "Nhost Apollo Client library",
"license": "MIT",
"keywords": [
@@ -22,7 +22,7 @@
"url": "https://github.com/nhost/nhost.git"
},
"main": "dist/index.cjs.js",
"module": "dist/index.esm.mjs",
"module": "dist/index.esm.js",
"types": "dist/index.d.ts",
"source": "src/index.ts",
"files": [
@@ -32,11 +32,8 @@
],
"exports": {
".": {
"node": {
"import": "./dist/index.esm.mjs",
"require": "./dist/index.cjs.js"
},
"default": "./dist/index.esm.js"
"import": "./dist/index.esm.js",
"require": "./dist/index.cjs.js"
}
},
"publishConfig": {
@@ -45,7 +42,7 @@
"scripts": {
"dev": "vite build --config ../../config/vite.lib.dev.config.js",
"build": "run-p build:lib build:umd",
"build:lib": "vite build --config ../../config/vite.lib.config.js && cpy --flat dist/index.esm.mjs dist --rename=index.esm.js && cpy --flat dist/index.esm.mjs.map dist --rename index.esm.js.map",
"build:lib": "vite build --config ../../config/vite.lib.config.js",
"build:umd": "vite build --config ../../config/vite.lib.umd.config.js",
"test": "vitest run --config ../../config/vite.lib.config.js",
"test:watch": "vitest --config ../../config/vite.lib.config.js",

View File

@@ -1,5 +1,24 @@
# @nhost/core
## 0.6.5
### Patch Changes
- 08a37aae: correct rewriting options when `clientUrl` is not available
The client URL is set to `window.location.origin`, so it can rewrite redirection urls that are passed on to authenticaion methods. However, `clientUrl` is set to `''` when running on the server side. This fix then avoid raising an error when trying to rewrite `redirectTo` on non-browser environment, and forces `useProviderLink` to be rendered on the client side.
## 0.6.4
### Patch Changes
- ebad0936: reverted ESM related changes
## 0.6.3
### Patch Changes
- 1b37b9f6: fix: ESM import path fixes
## 0.6.2
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@nhost/core",
"version": "0.6.2",
"version": "0.6.5",
"description": "Nhost core client library",
"license": "MIT",
"keywords": [
@@ -21,7 +21,7 @@
"url": "https://github.com/nhost/nhost.git"
},
"main": "dist/index.cjs.js",
"module": "dist/index.esm.mjs",
"module": "dist/index.esm.js",
"types": "dist/index.d.ts",
"source": "src/index.ts",
"files": [
@@ -31,11 +31,8 @@
],
"exports": {
".": {
"node": {
"import": "./dist/index.esm.mjs",
"require": "./dist/index.cjs.js"
},
"default": "./dist/index.esm.js"
"import": "./dist/index.esm.js",
"require": "./dist/index.cjs.js"
}
},
"publishConfig": {
@@ -44,7 +41,7 @@
"scripts": {
"dev": "vite build --config ../../config/vite.lib.dev.config.js",
"build": "run-p build:lib build:umd",
"build:lib": "vite build --config ../../config/vite.lib.config.js && cpy --flat dist/index.esm.mjs dist --rename=index.esm.js && cpy --flat dist/index.esm.mjs.map dist --rename index.esm.js.map",
"build:lib": "vite build --config ../../config/vite.lib.config.js",
"build:umd": "vite build --config ../../config/vite.lib.umd.config.js",
"test": "vitest run --config ../../config/vite.lib.config.js",
"test:watch": "vitest --config ../../config/vite.lib.config.js",

View File

@@ -17,21 +17,39 @@ export const encodeQueryParameters = (baseUrl: string, parameters?: Record<strin
else return baseUrl
}
export const rewriteRedirectTo = <T extends RedirectOption>(clientUrl: string, options?: T) => {
/**
* Transform options that include a redirectTo property so the
* redirect url is absolute, given a base clientUrl.
* If no client url is given, any relative redirectUrl is removed while
* the other options are sent as-is.
* @param clientUrl base client url
* @param options
* @returns
*/
export const rewriteRedirectTo = <T extends RedirectOption>(
clientUrl?: string,
options?: T
): (Omit<T, 'redirectTo'> & { redirectTo?: string }) | undefined => {
if (!options?.redirectTo) {
return options
}
const { redirectTo, ...otherOptions } = options
// * If the clientUrl is not defined, we can't rewrite the redirectTo
if (!clientUrl) {
// * If redirectTo is a relative path, we therefore pull it out of the options
if (redirectTo.startsWith('/')) {
return otherOptions
} else {
return options
}
}
const baseClientUrl = new URL(clientUrl)
const clientParams = Object.fromEntries(new URLSearchParams(baseClientUrl.search))
const url = new URL(
options.redirectTo.startsWith('/')
? baseClientUrl.origin + options.redirectTo
: options.redirectTo
)
const url = new URL(redirectTo.startsWith('/') ? baseClientUrl.origin + redirectTo : redirectTo)
const additionalParams = new URLSearchParams(url.search)
let combinedParams = Object.fromEntries(additionalParams)
if (options.redirectTo.startsWith('/')) {
if (redirectTo.startsWith('/')) {
combinedParams = { ...clientParams, ...combinedParams }
}
let pathName = baseClientUrl.pathname
@@ -39,7 +57,7 @@ export const rewriteRedirectTo = <T extends RedirectOption>(clientUrl: string, o
pathName += url.pathname.slice(1)
}
return {
...options,
...otherOptions,
redirectTo: encodeQueryParameters(url.origin + pathName, combinedParams)
}
}

View File

@@ -1,6 +1,6 @@
import faker from '@faker-js/faker'
import { interpret } from 'xstate'
import { waitFor } from 'xstate/lib/waitFor.js'
import { waitFor } from 'xstate/lib/waitFor'
import { AuthClient } from '../src/client'
import { INVALID_EMAIL_ERROR } from '../src/errors'
import { createAuthMachine, createChangeEmailMachine } from '../src/machines'

View File

@@ -1,6 +1,6 @@
import faker from '@faker-js/faker'
import { interpret } from 'xstate'
import { waitFor } from 'xstate/lib/waitFor.js'
import { waitFor } from 'xstate/lib/waitFor'
import { AuthClient } from '../src/client'
import { INVALID_PASSWORD_ERROR } from '../src/errors'
import { createAuthMachine, createChangePasswordMachine } from '../src/machines'

View File

@@ -1,7 +1,7 @@
import faker from '@faker-js/faker'
import { afterAll, afterEach, beforeAll, expect, test } from 'vitest'
import { interpret } from 'xstate'
import { waitFor } from 'xstate/lib/waitFor.js'
import { waitFor } from 'xstate/lib/waitFor'
import { AuthClient } from '../src/client'
import { INVALID_MFA_CODE_ERROR, INVALID_MFA_TYPE_ERROR } from '../src/errors'
import { createAuthMachine, createEnableMfaMachine } from '../src/machines'

View File

@@ -1,7 +1,7 @@
import faker from '@faker-js/faker'
import { afterAll, afterEach, beforeAll, expect, test } from 'vitest'
import { interpret } from 'xstate'
import { waitFor } from 'xstate/lib/waitFor.js'
import { waitFor } from 'xstate/lib/waitFor'
import { createAuthMachine } from '../src/machines'
import { Typegen0 } from '../src/machines/index.typegen'
import { BASE_URL } from './helpers/config'

View File

@@ -1,6 +1,6 @@
import faker from '@faker-js/faker'
import { interpret } from 'xstate'
import { waitFor } from 'xstate/lib/waitFor.js'
import { waitFor } from 'xstate/lib/waitFor'
import { INVALID_EMAIL_ERROR, INVALID_PASSWORD_ERROR } from '../src/errors'
import { createAuthMachine } from '../src/machines'
import { Typegen0 } from '../src/machines/index.typegen'

View File

@@ -1,6 +1,6 @@
import faker from '@faker-js/faker'
import { interpret } from 'xstate'
import { waitFor } from 'xstate/lib/waitFor.js'
import { waitFor } from 'xstate/lib/waitFor'
import { INVALID_EMAIL_ERROR } from '../src/errors'
import { createAuthMachine } from '../src/machines'
import { Typegen0 } from '../src/machines/index.typegen'

View File

@@ -1,6 +1,6 @@
import faker from '@faker-js/faker'
import { interpret } from 'xstate'
import { waitFor } from 'xstate/lib/waitFor.js'
import { waitFor } from 'xstate/lib/waitFor'
import { INVALID_PHONE_NUMBER_ERROR } from '../src/errors'
import { createAuthMachine } from '../src/machines'
import { Typegen0 } from '../src/machines/index.typegen'

View File

@@ -1,7 +1,7 @@
import faker from '@faker-js/faker'
import { afterAll, afterEach, beforeAll, beforeEach, describe, test, vi } from 'vitest'
import { BaseActionObject, interpret, Interpreter, ResolveTypegenMeta, ServiceMap } from 'xstate'
import { waitFor } from 'xstate/lib/waitFor.js'
import { waitFor } from 'xstate/lib/waitFor'
import {
NHOST_JWT_EXPIRES_AT_KEY,
NHOST_REFRESH_TOKEN_KEY,

View File

@@ -1,6 +1,6 @@
import faker from '@faker-js/faker'
import { interpret } from 'xstate'
import { waitFor } from 'xstate/lib/waitFor.js'
import { waitFor } from 'xstate/lib/waitFor'
import { AuthClient } from '../src/client'
import { INVALID_EMAIL_ERROR } from '../src/errors'
import { createResetPasswordMachine } from '../src/machines'

View File

@@ -1,6 +1,6 @@
import faker from '@faker-js/faker'
import { interpret } from 'xstate'
import { waitFor } from 'xstate/lib/waitFor.js'
import { waitFor } from 'xstate/lib/waitFor'
import { AuthClient } from '../src/client'
import { INVALID_EMAIL_ERROR } from '../src/errors'
import { createSendVerificationEmailMachine } from '../src/machines'

View File

@@ -1,6 +1,6 @@
import faker from '@faker-js/faker'
import { interpret } from 'xstate'
import { waitFor } from 'xstate/lib/waitFor.js'
import { waitFor } from 'xstate/lib/waitFor'
import { NHOST_REFRESH_TOKEN_KEY } from '../src/constants'
import { createAuthMachine } from '../src/machines'
import { Typegen0 } from '../src/machines/index.typegen'

View File

@@ -1,6 +1,6 @@
import faker from '@faker-js/faker'
import { interpret } from 'xstate'
import { waitFor } from 'xstate/lib/waitFor.js'
import { waitFor } from 'xstate/lib/waitFor'
import { INVALID_EMAIL_ERROR, INVALID_PASSWORD_ERROR } from '../src/errors'
import { createAuthMachine } from '../src/machines'
import { Typegen0 } from '../src/machines/index.typegen'

View File

@@ -1,6 +1,6 @@
import faker from '@faker-js/faker'
import { interpret } from 'xstate'
import { waitFor } from 'xstate/lib/waitFor.js'
import { waitFor } from 'xstate/lib/waitFor'
import { INVALID_PHONE_NUMBER_ERROR } from '../src/errors'
import { createAuthMachine } from '../src/machines'
import { Typegen0 } from '../src/machines/index.typegen'

View File

@@ -6,6 +6,18 @@ test(`should not add redirectTo when none is given`, async () => {
expect(rewriteRedirectTo('https://frontend.com')).toBeUndefined()
})
test(`should remove redirectTo when it's relative and no clientUrl is given`, async () => {
const options: RedirectOption = { redirectTo: '/index' }
expect(rewriteRedirectTo('', options)).toEqual({})
expect(rewriteRedirectTo(undefined, options)).toEqual({})
})
test(`should preserve options when redirectTo is not a relative url and no clientUrl is given`, async () => {
const options: RedirectOption = { redirectTo: 'https://frontend.com' }
expect(rewriteRedirectTo('', options)).toEqual(options)
expect(rewriteRedirectTo(undefined, options)).toEqual(options)
})
test(`should append redirectTo with the clientUrl prefix`, async () => {
const options: RedirectOption = { redirectTo: '/index' }

View File

@@ -1,5 +1,11 @@
# @nhost/docgen
## 0.1.2
### Patch Changes
- ebad0936: reverted ESM related changes
## 0.1.1
### Patch Changes

View File

@@ -2,7 +2,7 @@
"name": "@nhost/docgen",
"description": "Documentation generator for classes and functions",
"private": true,
"version": "0.1.1",
"version": "0.1.2",
"license": "MIT",
"main": "dist/index.cjs.js",
"types": "dist/index.d.ts",

View File

@@ -1,5 +1,28 @@
# @nhost/hasura-auth-js
## 1.1.14
### Patch Changes
- Updated dependencies [08a37aae]
- @nhost/core@0.6.5
## 1.1.13
### Patch Changes
- ebad0936: reverted ESM related changes
- Updated dependencies [ebad0936]
- @nhost/core@0.6.4
## 1.1.12
### Patch Changes
- 1b37b9f6: fix: ESM import path fixes
- Updated dependencies [1b37b9f6]
- @nhost/core@0.6.3
## 1.1.11
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@nhost/hasura-auth-js",
"version": "1.1.11",
"version": "1.1.14",
"description": "Hasura-auth client",
"license": "MIT",
"keywords": [
@@ -20,7 +20,7 @@
"url": "https://github.com/nhost/nhost.git"
},
"main": "dist/index.cjs.js",
"module": "dist/index.esm.mjs",
"module": "dist/index.esm.js",
"types": "dist/index.d.ts",
"source": "src/index.ts",
"files": [
@@ -30,11 +30,8 @@
],
"exports": {
".": {
"node": {
"import": "./dist/index.esm.mjs",
"require": "./dist/index.cjs.js"
},
"default": "./dist/index.esm.js"
"import": "./dist/index.esm.js",
"require": "./dist/index.cjs.js"
}
},
"publishConfig": {
@@ -43,7 +40,7 @@
"scripts": {
"dev": "vite build --config ../../config/vite.lib.dev.config.js",
"build": "run-p build:lib build:umd",
"build:lib": "vite build && cpy --flat dist/index.esm.mjs dist --rename=index.esm.js && cpy --flat dist/index.esm.mjs.map dist --rename index.esm.js.map",
"build:lib": "vite build",
"build:umd": "vite build --config ../../config/vite.lib.umd.config.js",
"test": "vitest run",
"test:watch": "vitest",

View File

@@ -1,5 +1,17 @@
# @nhost/hasura-storage-js
## 0.3.3
### Patch Changes
- ebad0936: reverted ESM related changes
## 0.3.2
### Patch Changes
- 1b37b9f6: fix: ESM import path fixes
## 0.3.1
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@nhost/hasura-storage-js",
"version": "0.3.1",
"version": "0.3.3",
"description": "Hasura-storage client",
"license": "MIT",
"keywords": [
@@ -18,7 +18,7 @@
"url": "https://github.com/nhost/hasura-storage-js.git"
},
"main": "dist/index.cjs.js",
"module": "dist/index.esm.mjs",
"module": "dist/index.esm.js",
"types": "dist/index.d.ts",
"source": "src/index.ts",
"files": [
@@ -28,11 +28,8 @@
],
"exports": {
".": {
"node": {
"import": "./dist/index.esm.mjs",
"require": "./dist/index.cjs.js"
},
"default": "./dist/index.esm.js"
"import": "./dist/index.esm.js",
"require": "./dist/index.cjs.js"
}
},
"publishConfig": {
@@ -41,7 +38,7 @@
"scripts": {
"dev": "vite build --config ../../config/vite.lib.dev.config.js",
"build": "run-p build:lib build:umd",
"build:lib": "vite build --config ../../config/vite.lib.config.js && cpy --flat dist/index.esm.mjs dist --rename=index.esm.js && cpy --flat dist/index.esm.mjs.map dist --rename index.esm.js.map",
"build:lib": "vite build --config ../../config/vite.lib.config.js",
"build:umd": "vite build --config ../../config/vite.lib.umd.config.js",
"test": "vitest run --config ../../config/vite.lib.config.js",
"test:watch": "vitest --config ../../config/vite.lib.config.js",

View File

@@ -1,5 +1,36 @@
# @nhost/nextjs
## 1.2.13
### Patch Changes
- 08a37aae: correct rewriting options when `clientUrl` is not available
The client URL is set to `window.location.origin`, so it can rewrite redirection urls that are passed on to authenticaion methods. However, `clientUrl` is set to `''` when running on the server side. This fix then avoid raising an error when trying to rewrite `redirectTo` on non-browser environment, and forces `useProviderLink` to be rendered on the client side.
- Updated dependencies [08a37aae]
- @nhost/core@0.6.5
- @nhost/react@0.7.13
- @nhost/nhost-js@1.2.4
## 1.2.12
### Patch Changes
- ebad0936: reverted ESM related changes
- Updated dependencies [ebad0936]
- @nhost/core@0.6.4
- @nhost/nhost-js@1.2.3
- @nhost/react@0.7.12
## 1.2.11
### Patch Changes
- 1b37b9f6: fix: ESM import path fixes
- Updated dependencies [1b37b9f6]
- @nhost/core@0.6.3
- @nhost/nhost-js@1.2.2
- @nhost/react@0.7.11
## 1.2.10
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@nhost/nextjs",
"version": "1.2.10",
"version": "1.2.13",
"description": "Nhost NextJS library",
"license": "MIT",
"keywords": [
@@ -24,7 +24,7 @@
"url": "https://github.com/nhost/nhost.git"
},
"main": "dist/index.cjs.js",
"module": "dist/index.esm.mjs",
"module": "dist/index.esm.js",
"types": "dist/index.d.ts",
"source": "src/index.ts",
"files": [
@@ -34,11 +34,8 @@
],
"exports": {
".": {
"node": {
"import": "./dist/index.esm.mjs",
"require": "./dist/index.cjs.js"
},
"default": "./dist/index.esm.js"
"import": "./dist/index.esm.js",
"require": "./dist/index.cjs.js"
}
},
"publishConfig": {
@@ -47,7 +44,7 @@
"scripts": {
"dev": "vite build --config ../../config/vite.react.dev.config.js",
"build": "run-p build:lib build:umd",
"build:lib": "vite build --config ../../config/vite.react.config.js && cpy --flat dist/index.esm.mjs dist --rename=index.esm.js && cpy --flat dist/index.esm.mjs.map dist --rename index.esm.js.map",
"build:lib": "vite build --config ../../config/vite.react.config.js",
"build:umd": "vite build --config ../../config/vite.react.umd.config.js",
"test": "vitest run --config ../../config/vite.react.config.js",
"test:watch": "vitest --config ../../config/vite.react.config.js",

View File

@@ -1,7 +1,7 @@
import Cookies from 'cookies'
import { GetServerSidePropsContext } from 'next'
import { StateFrom } from 'xstate'
import { waitFor } from 'xstate/lib/waitFor.js'
import { waitFor } from 'xstate/lib/waitFor'
import { AuthMachine, NHOST_REFRESH_TOKEN_KEY } from '@nhost/core'
import { NhostClient } from '@nhost/nhost-js'

View File

@@ -1,5 +1,29 @@
# @nhost/nhost-js
## 1.2.4
### Patch Changes
- @nhost/hasura-auth-js@1.1.14
## 1.2.3
### Patch Changes
- ebad0936: reverted ESM related changes
- Updated dependencies [ebad0936]
- @nhost/hasura-auth-js@1.1.13
- @nhost/hasura-storage-js@0.3.3
## 1.2.2
### Patch Changes
- 1b37b9f6: fix: ESM import path fixes
- Updated dependencies [1b37b9f6]
- @nhost/hasura-auth-js@1.1.12
- @nhost/hasura-storage-js@0.3.2
## 1.2.1
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@nhost/nhost-js",
"version": "1.2.1",
"version": "1.2.4",
"description": "Nhost JavaScript SDK",
"license": "MIT",
"keywords": [
@@ -21,7 +21,7 @@
"url": "git+https://github.com/nhost/nhost.git"
},
"main": "dist/index.cjs.js",
"module": "dist/index.esm.mjs",
"module": "dist/index.esm.js",
"types": "dist/index.d.ts",
"source": "src/index.ts",
"files": [
@@ -31,11 +31,8 @@
],
"exports": {
".": {
"node": {
"import": "./dist/index.esm.mjs",
"require": "./dist/index.cjs.js"
},
"default": "./dist/index.esm.js"
"import": "./dist/index.esm.js",
"require": "./dist/index.cjs.js"
}
},
"publishConfig": {
@@ -44,7 +41,7 @@
"scripts": {
"dev": "vite build --config ../../config/vite.lib.dev.config.js",
"build": "run-p build:lib build:umd",
"build:lib": "vite build --config ../../config/vite.lib.config.js && cpy --flat dist/index.esm.mjs dist --rename=index.esm.js && cpy --flat dist/index.esm.mjs.map dist --rename index.esm.js.map",
"build:lib": "vite build --config ../../config/vite.lib.config.js",
"build:umd": "vite build --config ../../config/vite.lib.umd.config.js",
"test": "vitest run --config ../../config/vite.lib.config.js",
"test:watch": "vitest --config ../../config/vite.lib.config.js",

View File

@@ -1,5 +1,37 @@
# @nhost/react-apollo
## 4.2.15
### Patch Changes
- Updated dependencies [08a37aae]
- @nhost/react@0.7.13
- @nhost/apollo@0.5.13
## 4.2.14
### Patch Changes
- ebad0936: reverted ESM related changes
- Updated dependencies [ebad0936]
- @nhost/apollo@0.5.12
- @nhost/react@0.7.12
## 4.2.13
### Patch Changes
- ef8c8f9c: fixed imports in `@nhost/react-apollo`
## 4.2.12
### Patch Changes
- 1b37b9f6: fix: ESM import path fixes
- Updated dependencies [1b37b9f6]
- @nhost/apollo@0.5.11
- @nhost/react@0.7.11
## 4.2.11
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@nhost/react-apollo",
"version": "4.2.11",
"version": "4.2.15",
"description": "Nhost React Apollo client",
"license": "MIT",
"keywords": [
@@ -23,7 +23,7 @@
"url": "git+https://github.com/nhost/nhost.git"
},
"main": "dist/index.cjs.js",
"module": "dist/index.esm.mjs",
"module": "dist/index.esm.js",
"types": "dist/index.d.ts",
"source": "src/index.ts",
"files": [
@@ -33,11 +33,8 @@
],
"exports": {
".": {
"node": {
"import": "./dist/index.esm.mjs",
"require": "./dist/index.cjs.js"
},
"default": "./dist/index.esm.js"
"import": "./dist/index.esm.js",
"require": "./dist/index.cjs.js"
}
},
"publishConfig": {
@@ -46,7 +43,7 @@
"scripts": {
"dev": "vite build --config ../../config/vite.react.dev.config.js",
"build": "run-p build:lib build:umd",
"build:lib": "vite build --config ../../config/vite.react.config.js && cpy --flat dist/index.esm.mjs dist --rename=index.esm.js && cpy --flat dist/index.esm.mjs.map dist --rename index.esm.js.map",
"build:lib": "vite build --config ../../config/vite.react.config.js",
"build:umd": "vite build --config ../../config/vite.react.umd.config.js",
"test": "vitest run --config ../../config/vite.react.config.js",
"test:watch": "vitest --config ../../config/vite.react.config.js",

View File

@@ -1,5 +1,31 @@
# @nhost/react-auth
## 3.0.11
### Patch Changes
- Updated dependencies [08a37aae]
- @nhost/react@0.7.13
- @nhost/hasura-auth-js@1.1.14
## 3.0.10
### Patch Changes
- ebad0936: reverted ESM related changes
- Updated dependencies [ebad0936]
- @nhost/hasura-auth-js@1.1.13
- @nhost/react@0.7.12
## 3.0.9
### Patch Changes
- 1b37b9f6: fix: ESM import path fixes
- Updated dependencies [1b37b9f6]
- @nhost/hasura-auth-js@1.1.12
- @nhost/react@0.7.11
## 3.0.8
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@nhost/react-auth",
"version": "3.0.8",
"version": "3.0.11",
"description": "Nhost React client",
"license": "MIT",
"keywords": [
@@ -22,9 +22,9 @@
"url": "git+https://github.com/nhost/nhost.git"
},
"main": "dist/index.cjs.js",
"module": "dist/index.esm.mjs",
"module": "dist/index.esm.js",
"types": "dist/index.d.ts",
"source": "src/index.tsx",
"source": "src/index.ts",
"files": [
"dist",
"umd",
@@ -32,11 +32,8 @@
],
"exports": {
".": {
"node": {
"import": "./dist/index.esm.mjs",
"require": "./dist/index.cjs.js"
},
"default": "./dist/index.esm.js"
"import": "./dist/index.esm.js",
"require": "./dist/index.cjs.js"
}
},
"publishConfig": {
@@ -45,7 +42,7 @@
"scripts": {
"dev": "vite build --config ../../config/vite.react.dev.config.js",
"build": "run-p build:lib build:umd",
"build:lib": "vite build --config ../../config/vite.react.config.js && cpy --flat dist/index.esm.mjs dist --rename=index.esm.js && cpy --flat dist/index.esm.mjs.map dist --rename index.esm.js.map",
"build:lib": "vite build --config ../../config/vite.react.config.js",
"build:umd": "vite build --config ../../config/vite.react.umd.config.js",
"test": "vitest run --config ../../config/vite.react.config.js",
"test:watch": "vitest --config ../../config/vite.react.config.js",

View File

@@ -1,5 +1,33 @@
# @nhost/react
## 0.7.13
### Patch Changes
- 08a37aae: correct rewriting options when `clientUrl` is not available
The client URL is set to `window.location.origin`, so it can rewrite redirection urls that are passed on to authenticaion methods. However, `clientUrl` is set to `''` when running on the server side. This fix then avoid raising an error when trying to rewrite `redirectTo` on non-browser environment, and forces `useProviderLink` to be rendered on the client side.
- Updated dependencies [08a37aae]
- @nhost/core@0.6.5
- @nhost/nhost-js@1.2.4
## 0.7.12
### Patch Changes
- ebad0936: reverted ESM related changes
- Updated dependencies [ebad0936]
- @nhost/core@0.6.4
- @nhost/nhost-js@1.2.3
## 0.7.11
### Patch Changes
- 1b37b9f6: fix: ESM import path fixes
- Updated dependencies [1b37b9f6]
- @nhost/core@0.6.3
- @nhost/nhost-js@1.2.2
## 0.7.10
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@nhost/react",
"version": "0.7.10",
"version": "0.7.13",
"description": "Nhost React library",
"license": "MIT",
"keywords": [
@@ -22,7 +22,7 @@
"url": "https://github.com/nhost/nhost.git"
},
"main": "dist/index.cjs.js",
"module": "dist/index.esm.mjs",
"module": "dist/index.esm.js",
"types": "dist/index.d.ts",
"source": "src/index.ts",
"files": [
@@ -32,11 +32,8 @@
],
"exports": {
".": {
"node": {
"import": "./dist/index.esm.mjs",
"require": "./dist/index.cjs.js"
},
"default": "./dist/index.esm.js"
"import": "./dist/index.esm.js",
"require": "./dist/index.cjs.js"
}
},
"publishConfig": {
@@ -45,7 +42,7 @@
"scripts": {
"dev": "vite build --config ../../config/vite.react.dev.config.js",
"build": "run-p build:lib build:umd",
"build:lib": "vite build --config ../../config/vite.react.config.js && cpy --flat dist/index.esm.mjs dist --rename=index.esm.js && cpy --flat dist/index.esm.mjs.map dist --rename index.esm.js.map",
"build:lib": "vite build --config ../../config/vite.react.config.js",
"build:umd": "vite build --config ../../config/vite.react.umd.config.js",
"test": "vitest run --config ../../config/vite.react.config.js",
"test:watch": "vitest --config ../../config/vite.react.config.js",

View File

@@ -1,4 +1,4 @@
import { useContext, useMemo } from 'react'
import { useContext, useEffect, useState } from 'react'
import { encodeQueryParameters, Provider, ProviderOptions, rewriteRedirectTo } from '@nhost/core'
@@ -29,13 +29,25 @@ import { NhostReactContext } from './provider'
* ```
*/
export const useProviderLink = (options?: ProviderOptions) => {
/**
* @internal When using Nextjs or any SSR framework, nhost.auth.client.clientUrl will be set to `undefined`
* as its value is set to window.location.origin.
* This is because the request context is not available when setting up the client `new NhostClient()` outside of
* the React/Nextjs context.
*/
const [isSSR, setIsSSR] = useState(true)
useEffect(() => {
setIsSSR(false)
}, [])
const nhost = useContext(NhostReactContext)
return new Proxy({} as Record<Provider, string>, {
get(_, provider: string) {
return encodeQueryParameters(
`${nhost.auth.client.backendUrl}/signin/provider/${provider}`,
rewriteRedirectTo(nhost.auth.client.clientUrl, options as any)
rewriteRedirectTo(isSSR ? undefined : nhost.auth.client.clientUrl, options as any)
)
}
})

View File

@@ -1,5 +1,31 @@
# @nhost/vue
## 0.1.6
### Patch Changes
- Updated dependencies [08a37aae]
- @nhost/core@0.6.5
- @nhost/nhost-js@1.2.4
## 0.1.5
### Patch Changes
- ebad0936: reverted ESM related changes
- Updated dependencies [ebad0936]
- @nhost/core@0.6.4
- @nhost/nhost-js@1.2.3
## 0.1.4
### Patch Changes
- 1b37b9f6: fix: ESM import path fixes
- Updated dependencies [1b37b9f6]
- @nhost/core@0.6.3
- @nhost/nhost-js@1.2.2
## 0.1.3
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@nhost/vue",
"version": "0.1.3",
"version": "0.1.6",
"description": "Nhost Vue library",
"license": "MIT",
"keywords": [
@@ -22,7 +22,7 @@
"url": "https://github.com/nhost/nhost.git"
},
"main": "dist/index.cjs.js",
"module": "dist/index.esm.mjs",
"module": "dist/index.esm.js",
"types": "dist/index.d.ts",
"source": "src/index.ts",
"files": [
@@ -32,11 +32,8 @@
],
"exports": {
".": {
"node": {
"import": "./dist/index.esm.mjs",
"require": "./dist/index.cjs.js"
},
"default": "./dist/index.esm.js"
"import": "./dist/index.esm.js",
"require": "./dist/index.cjs.js"
}
},
"publishConfig": {
@@ -45,7 +42,7 @@
"scripts": {
"dev": "vite build --config ../../config/vite.vue.dev.config.js",
"build": "run-p build:lib build:umd",
"build:lib": "vite build --config ../../config/vite.vue.config.js && cpy --flat dist/index.esm.mjs dist --rename=index.esm.js && cpy --flat dist/index.esm.mjs.map dist --rename index.esm.js.map",
"build:lib": "vite build --config ../../config/vite.vue.config.js",
"build:umd": "vite build --config ../../config/vite.vue.umd.config.js",
"test": "vitest run --config ../../config/vite.vue.config.js",
"test:watch": "vitest --config ../../config/vite.vue.config.js",

221
pnpm-lock.yaml generated
View File

@@ -20,7 +20,6 @@ importers:
'@typescript-eslint/parser': ^5.22.0
'@vitejs/plugin-react': ^1.3.2
c8: ^7.11.2
cpy-cli: ^4.1.0
eslint: ^8.14.0
eslint-config-react-app: ^7.0.1
eslint-plugin-flowtype: ^8.0.3
@@ -60,7 +59,6 @@ importers:
'@typescript-eslint/parser': 5.22.0_eslint@8.14.0+typescript@4.5.5
'@vitejs/plugin-react': 1.3.2
c8: 7.11.2
cpy-cli: 4.1.0
eslint: 8.14.0
eslint-config-react-app: 7.0.1_4216ed3d2113f278f890275a29457e4c
eslint-plugin-flowtype: 8.0.3_0b52bfc9ba85ed2701108bc1502a1bef
@@ -97,6 +95,7 @@ importers:
'@tsconfig/docusaurus': ^1.0.5
'@types/swagger-ui-react': ^4.1.1
clsx: ^1.1.1
docusaurus-plugin-image-zoom: ^0.1.1
mdx-mermaid: ^1.2.1
mermaid: ^8.14.0
prism-react-renderer: ^1.3.1
@@ -110,6 +109,7 @@ importers:
'@docusaurus/preset-classic': 2.0.0-beta.20_66c8c36abcfdbeab71528ce4b75c41f7
'@mdx-js/react': 1.6.22_react@17.0.2
clsx: 1.1.1
docusaurus-plugin-image-zoom: 0.1.1
mdx-mermaid: 1.2.2_mermaid@8.14.0+react@17.0.2
mermaid: 8.14.0
prism-react-renderer: 1.3.1_react@17.0.2
@@ -7004,14 +7004,6 @@ packages:
clean-stack: 2.2.0
indent-string: 4.0.0
/aggregate-error/4.0.1:
resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==}
engines: {node: '>=12'}
dependencies:
clean-stack: 4.2.0
indent-string: 5.0.0
dev: true
/ajv-formats/2.1.1:
resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
peerDependenciesMeta:
@@ -7271,11 +7263,6 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
/arrify/3.0.0:
resolution: {integrity: sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==}
engines: {node: '>=12'}
dev: true
/asap/2.0.6:
resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
@@ -7943,16 +7930,6 @@ packages:
quick-lru: 4.0.1
dev: true
/camelcase-keys/7.0.2:
resolution: {integrity: sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==}
engines: {node: '>=12'}
dependencies:
camelcase: 6.3.0
map-obj: 4.3.0
quick-lru: 5.1.1
type-fest: 1.4.0
dev: true
/camelcase/5.3.1:
resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
engines: {node: '>=6'}
@@ -8216,13 +8193,6 @@ packages:
resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
engines: {node: '>=6'}
/clean-stack/4.2.0:
resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==}
engines: {node: '>=12'}
dependencies:
escape-string-regexp: 5.0.0
dev: true
/cli-boxes/2.2.1:
resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==}
engines: {node: '>=6'}
@@ -8601,39 +8571,6 @@ packages:
path-type: 4.0.0
yaml: 1.10.2
/cp-file/9.1.0:
resolution: {integrity: sha512-3scnzFj/94eb7y4wyXRWwvzLFaQp87yyfTnChIjlfYrVqp5lVO3E2hIJMeQIltUT0K2ZAB3An1qXcBmwGyvuwA==}
engines: {node: '>=10'}
dependencies:
graceful-fs: 4.2.10
make-dir: 3.1.0
nested-error-stacks: 2.1.1
p-event: 4.2.0
dev: true
/cpy-cli/4.1.0:
resolution: {integrity: sha512-JA6bth6/mxPCa19SrWkIuPEBrea8vO9g1v0qhmCLnAKOfTcsNk5/X3W1o9aZuOHgugRcxdyR67rO4Gw/DA+4Qg==}
engines: {node: '>=12.20'}
hasBin: true
dependencies:
cpy: 9.0.1
meow: 10.1.2
dev: true
/cpy/9.0.1:
resolution: {integrity: sha512-D9U0DR5FjTCN3oMTcFGktanHnAG5l020yvOCR1zKILmAyPP7I/9pl6NFgRbDcmSENtbK1sQLBz1p9HIOlroiNg==}
engines: {node: ^12.20.0 || ^14.17.0 || >=16.0.0}
dependencies:
arrify: 3.0.0
cp-file: 9.1.0
globby: 13.1.1
junk: 4.0.0
micromatch: 4.0.5
nested-error-stacks: 2.1.1
p-filter: 3.0.0
p-map: 5.4.0
dev: true
/create-require/1.1.1:
resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
dev: true
@@ -9509,11 +9446,6 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
/decamelize/5.0.1:
resolution: {integrity: sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==}
engines: {node: '>=10'}
dev: true
/decimal.js/10.3.1:
resolution: {integrity: sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==}
dev: true
@@ -9767,6 +9699,12 @@ packages:
resolution: {integrity: sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=}
dev: true
/docusaurus-plugin-image-zoom/0.1.1:
resolution: {integrity: sha512-cJXo5TKh9OR1gE4B5iS5ovLWYYDFwatqRm00iXFPOaShZG99l5tgkDKgbQPAwSL9wg4I+wz3aMwkOtDhMIpKDQ==}
dependencies:
medium-zoom: 1.0.6
dev: false
/dom-converter/0.2.0:
resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==}
dependencies:
@@ -10514,11 +10452,6 @@ packages:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
/escape-string-regexp/5.0.0:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
dev: true
/escodegen/2.0.0:
resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==}
engines: {node: '>=6.0'}
@@ -12000,17 +11933,6 @@ packages:
slash: 4.0.0
dev: false
/globby/13.1.1:
resolution: {integrity: sha512-XMzoDZbGZ37tufiv7g0N4F/zp3zkwdFtVbV3EHsVl1KQr4RPLfNoT068/97RPshz2J5xYNEjLKKBKaGHifBd3Q==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dependencies:
dir-glob: 3.0.1
fast-glob: 3.2.11
ignore: 5.2.0
merge2: 1.4.1
slash: 4.0.0
dev: true
/globrex/0.1.2:
resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
dev: true
@@ -12324,13 +12246,6 @@ packages:
resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
dev: true
/hosted-git-info/4.1.0:
resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==}
engines: {node: '>=10'}
dependencies:
lru-cache: 6.0.0
dev: true
/hpack.js/2.1.6:
resolution: {integrity: sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=}
dependencies:
@@ -12686,11 +12601,6 @@ packages:
resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
engines: {node: '>=8'}
/indent-string/5.0.0:
resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==}
engines: {node: '>=12'}
dev: true
/infer-owner/1.0.4:
resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==}
dev: true
@@ -14159,11 +14069,6 @@ packages:
object.assign: 4.1.2
dev: true
/junk/4.0.0:
resolution: {integrity: sha512-ojtSU++zLJ3jQG9bAYjg94w+/DOJtRyD7nPaerMFrBhmdVmiV5/exYH5t4uHga4G/95nT6hr1OJoKIFbYbrW5w==}
engines: {node: '>=12.20'}
dev: true
/just-kebab-case/4.0.1:
resolution: {integrity: sha512-rl9p38LRKwwhE3THotBcOhHLbFzMBHdkyKl1oQrtvuXX/eMXJS0zukzAbyWG8jEntaaRaIveajHfpjOI4tjpbA==}
dev: false
@@ -14731,6 +14636,10 @@ packages:
resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=}
engines: {node: '>= 0.6'}
/medium-zoom/1.0.6:
resolution: {integrity: sha512-UdiUWfvz9fZMg1pzf4dcuqA0W079o0mpqbTnOz5ip4VGYX96QjmbM+OgOU/0uOzAytxC0Ny4z+VcYQnhdifimg==}
dev: false
/memfs/3.4.1:
resolution: {integrity: sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==}
engines: {node: '>= 4.0.0'}
@@ -14747,24 +14656,6 @@ packages:
engines: {node: '>= 0.10.0'}
dev: true
/meow/10.1.2:
resolution: {integrity: sha512-zbuAlN+V/sXlbGchNS9WTWjUzeamwMt/BApKCJi7B0QyZstZaMx0n4Unll/fg0njGtMdC9UP5SAscvOCLYdM+Q==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dependencies:
'@types/minimist': 1.2.2
camelcase-keys: 7.0.2
decamelize: 5.0.1
decamelize-keys: 1.1.0
hard-rejection: 2.1.0
minimist-options: 4.1.0
normalize-package-data: 3.0.3
read-pkg-up: 8.0.0
redent: 4.0.0
trim-newlines: 4.0.2
type-fest: 1.4.0
yargs-parser: 20.2.9
dev: true
/meow/6.1.1:
resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==}
engines: {node: '>=8'}
@@ -15128,10 +15019,6 @@ packages:
/neo-async/2.6.2:
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
/nested-error-stacks/2.1.1:
resolution: {integrity: sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==}
dev: true
/next/12.0.10_9b0027aae606c22bf55a7fd89836f009:
resolution: {integrity: sha512-1y3PpGzpb/EZzz1jgne+JfZXKAVJUjYXwxzrADf/LWN+8yi9o79vMLXpW3mevvCHkEF2sBnIdjzNn16TJrINUw==}
engines: {node: '>=12.22.0'}
@@ -15304,16 +15191,6 @@ packages:
validate-npm-package-license: 3.0.4
dev: true
/normalize-package-data/3.0.3:
resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==}
engines: {node: '>=10'}
dependencies:
hosted-git-info: 4.1.0
is-core-module: 2.9.0
semver: 7.3.7
validate-npm-package-license: 3.0.4
dev: true
/normalize-path/2.1.1:
resolution: {integrity: sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=}
engines: {node: '>=0.10.0'}
@@ -15585,13 +15462,6 @@ packages:
resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==}
engines: {node: '>=6'}
/p-event/4.2.0:
resolution: {integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==}
engines: {node: '>=8'}
dependencies:
p-timeout: 3.2.0
dev: true
/p-filter/2.1.0:
resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==}
engines: {node: '>=8'}
@@ -15599,18 +15469,6 @@ packages:
p-map: 2.1.0
dev: true
/p-filter/3.0.0:
resolution: {integrity: sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dependencies:
p-map: 5.4.0
dev: true
/p-finally/1.0.0:
resolution: {integrity: sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=}
engines: {node: '>=4'}
dev: true
/p-limit/1.3.0:
resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==}
engines: {node: '>=4'}
@@ -15667,13 +15525,6 @@ packages:
dependencies:
aggregate-error: 3.1.0
/p-map/5.4.0:
resolution: {integrity: sha512-obHraaWkwl4y1NHR4vW5D5k+33+S5QrkFqsNrrvK0R7lilXdzo/DZgnloDvYUaRT+Sk6vVK47JUQMQY6cjPMXg==}
engines: {node: '>=12'}
dependencies:
aggregate-error: 4.0.1
dev: true
/p-retry/4.6.1:
resolution: {integrity: sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==}
engines: {node: '>=8'}
@@ -15682,13 +15533,6 @@ packages:
retry: 0.13.1
dev: false
/p-timeout/3.2.0:
resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==}
engines: {node: '>=8'}
dependencies:
p-finally: 1.0.0
dev: true
/p-try/1.0.0:
resolution: {integrity: sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=}
engines: {node: '>=4'}
@@ -16749,6 +16593,7 @@ packages:
/quick-lru/5.1.1:
resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
engines: {node: '>=10'}
dev: false
/randexp/0.5.3:
resolution: {integrity: sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==}
@@ -17194,15 +17039,6 @@ packages:
type-fest: 0.8.1
dev: true
/read-pkg-up/8.0.0:
resolution: {integrity: sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==}
engines: {node: '>=12'}
dependencies:
find-up: 5.0.0
read-pkg: 6.0.0
type-fest: 1.4.0
dev: true
/read-pkg/3.0.0:
resolution: {integrity: sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=}
engines: {node: '>=4'}
@@ -17222,16 +17058,6 @@ packages:
type-fest: 0.6.0
dev: true
/read-pkg/6.0.0:
resolution: {integrity: sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==}
engines: {node: '>=12'}
dependencies:
'@types/normalize-package-data': 2.4.1
normalize-package-data: 3.0.3
parse-json: 5.2.0
type-fest: 1.4.0
dev: true
/read-yaml-file/1.1.0:
resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==}
engines: {node: '>=6'}
@@ -17312,14 +17138,6 @@ packages:
strip-indent: 3.0.0
dev: true
/redent/4.0.0:
resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==}
engines: {node: '>=12'}
dependencies:
indent-string: 5.0.0
strip-indent: 4.0.0
dev: true
/redux-immutable/4.0.0_immutable@3.8.2:
resolution: {integrity: sha1-Ohoy32Y2ZGK2NpHw4dw15HK7yfM=}
peerDependencies:
@@ -18083,6 +17901,7 @@ packages:
/slash/4.0.0:
resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==}
engines: {node: '>=12'}
dev: false
/slice-ansi/0.0.4:
resolution: {integrity: sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=}
@@ -18470,13 +18289,6 @@ packages:
min-indent: 1.0.1
dev: true
/strip-indent/4.0.0:
resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==}
engines: {node: '>=12'}
dependencies:
min-indent: 1.0.1
dev: true
/strip-json-comments/2.0.1:
resolution: {integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo=}
engines: {node: '>=0.10.0'}
@@ -18975,11 +18787,6 @@ packages:
engines: {node: '>=8'}
dev: true
/trim-newlines/4.0.2:
resolution: {integrity: sha512-GJtWyq9InR/2HRiLZgpIKv+ufIKrVrvjQWEj7PxAXNc5dwbNJkqhAUoAGgzRmULAnoOM5EIpveYd3J2VeSAIew==}
engines: {node: '>=12'}
dev: true
/trim-trailing-lines/1.1.4:
resolution: {integrity: sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==}
dev: false