Browse Source

Merge branch 'develop' into fix/import-sanitization

pull/7022/head
աɨռɢӄաօռɢ 1 year ago
parent
commit
103c7c45b7
  1. 2
      README.md
  2. 2
      packages/noco-docs/docs/030.workspaces/040.actions-on-workspace.md
  3. 2
      packages/noco-docs/docs/040.bases/070.actions-on-base.md
  4. 2
      packages/noco-docs/docs/050.tables/060.actions-on-table.md
  5. 12
      packages/noco-docs/docs/070.fields/040.field-types/050.custom-types/010.attachment.md
  6. 2
      packages/noco-docs/docs/070.fields/040.field-types/060.formula/015.operators.md
  7. 16
      packages/noco-docs/docs/070.fields/040.field-types/060.formula/040.date-functions.md
  8. 2
      packages/noco-docs/docs/070.fields/060.actions-on-field.md
  9. 4
      packages/noco-docs/docs/080.records/070.actions-on-record.md
  10. 4
      packages/noco-docs/docs/090.views/040.view-types/030.form.md
  11. 2
      packages/noco-docs/docs/090.views/090.actions-on-view.md
  12. 6
      packages/noco-docs/docs/150.engineering/060.builds-and-releases.md
  13. 7622
      packages/noco-docs/package-lock.json
  14. 20
      packages/noco-docs/package.json
  15. 18
      packages/noco-docs/versioned_docs/version-0.109.7/030.setup-and-usages/090.formulas.md
  16. 14
      packages/noco-docs/versioned_docs/version-0.109.7/030.setup-and-usages/160.views.md
  17. 6
      packages/noco-docs/versioned_docs/version-0.109.7/030.setup-and-usages/200.import-airtable-to-sql-database-within-a-minute-for-free.md
  18. 4
      packages/noco-docs/versioned_docs/version-0.109.7/030.setup-and-usages/230.team-and-auth.md
  19. 246
      packages/noco-docs/versioned_docs/version-0.109.7/040.developer-resources/020.rest-apis.md
  20. 2
      packages/noco-docs/versioned_docs/version-0.109.7/040.developer-resources/030.sdk.md
  21. 18
      packages/noco-docs/versioned_docs/version-0.109.7/040.developer-resources/040.webhooks.md
  22. 1
      packages/nocodb/package.json
  23. 10
      packages/nocodb/src/db/BaseModelSqlv2.ts
  24. 4
      packages/nocodb/src/db/conditionV2.ts
  25. 2
      packages/nocodb/src/db/generateLookupSelectQuery.ts
  26. 4
      packages/nocodb/src/db/sortV2.ts
  27. 2
      packages/nocodb/src/helpers/catchError.ts
  28. 4
      packages/nocodb/src/helpers/getAst.ts
  29. 1
      packages/nocodb/src/plugins/backblaze/Backblaze.ts
  30. 1
      packages/nocodb/src/plugins/gcs/Gcs.ts
  31. 1
      packages/nocodb/src/plugins/linode/LinodeObjectStorage.ts
  32. 1
      packages/nocodb/src/plugins/mino/Minio.ts
  33. 1
      packages/nocodb/src/plugins/ovhCloud/OvhCloud.ts
  34. 12
      packages/nocodb/src/plugins/s3/S3.ts
  35. 1
      packages/nocodb/src/plugins/scaleway/ScalewayObjectStorage.ts
  36. 1
      packages/nocodb/src/plugins/spaces/Spaces.ts
  37. 1
      packages/nocodb/src/plugins/upcloud/UpoCloud.ts
  38. 1
      packages/nocodb/src/plugins/vultr/Vultr.ts
  39. 205
      pnpm-lock.yaml

2
README.md

@ -64,7 +64,7 @@ Turns any MySQL, PostgreSQL, SQL Server, SQLite & MariaDB into a smart spreadshe
</a> </a>
--> -->
[![Stargazers repo roster for @nocodb/nocodb](https://reporoster.com/stars/nocodb/nocodb)](https://github.com/nocodb/nocodb/stargazers) [![Stargazers repo roster for @nocodb/nocodb](http://reporoster.com/stars/nocodb/nocodb)](https://github.com/nocodb/nocodb/stargazers)
# Quick try # Quick try

2
packages/noco-docs/docs/030.workspaces/040.actions-on-workspace.md

@ -20,7 +20,7 @@ To update the workspace name:
## Delete workspace ## Delete workspace
If you determine that a workspace is no longer necessary, you have the option to permanently remove it from your settings. Deleting a workspace will delete all the bases and data associated with it. If you determine that a workspace is no longer necessary, you have the option to permanently remove it from your settings. Deleting a workspace will delete all the bases and data associated with it.
:::danger :::info
**This action cannot be undone.** **This action cannot be undone.**
::: :::

2
packages/noco-docs/docs/040.bases/070.actions-on-base.md

@ -69,7 +69,7 @@ To duplicate a base, you can follow these straightforward steps:
If you determine that a base is no longer necessary, you have the option to permanently remove it from your workspace. Deleting a base will delete all the tables and data associated with it. If you determine that a base is no longer necessary, you have the option to permanently remove it from your workspace. Deleting a base will delete all the tables and data associated with it.
:::danger :::info
**This action cannot be undone.** **This action cannot be undone.**
::: :::

2
packages/noco-docs/docs/050.tables/060.actions-on-table.md

@ -46,7 +46,7 @@ A new table will be generated, mirroring the original table's schema and content
## Delete table ## Delete table
:::danger :::info
**This action cannot be undone.** **This action cannot be undone.**
::: :::

12
packages/noco-docs/docs/070.fields/040.field-types/050.custom-types/010.attachment.md

@ -39,21 +39,21 @@ Expand modal for `Attachment` field displays the list of files uploaded to the f
Expand modal supports the following actions: Expand modal supports the following actions:
### Attach file(s) ### Attach file(s)
- Click on `Attach file(s)` button <1> - Click on `Attach file(s)` button {"<"}1{">"}
- Choose the file(s) to upload - Choose the file(s) to upload
### Delete file ### Delete file
- Click on `x` icon <2> to the top left of the image card to delete the file - Click on `x` icon {"<"}2{">"} to the top left of the image card to delete the file
### Download file ### Download file
- Click on `Download` button <5> to download the file - Click on `Download` button {"<"}5{">"} to download the file
### Bulk Download file(s) ### Bulk Download file(s)
- Select the files by clicking on the checkbox <3> to the top left of the image card - Select the files by clicking on the checkbox {"<"}3{">"} to the top left of the image card
- Click on `Bulk Download` button <4> to download the selected files - Click on `Bulk Download` button {"<"}4{">"} to download the selected files
### Rename file ### Rename file
- Click on `Rename` button <5> to rename the file - Click on `Rename` button {"<"}5{">"} to rename the file
- Enter the new name in the input field - Enter the new name in the input field
- Click on `Rename` button to save the new name - Click on `Rename` button to save the new name

2
packages/noco-docs/docs/070.fields/040.field-types/060.formula/015.operators.md

@ -17,7 +17,7 @@ keywords: ['Fields', 'Field types', 'Formula', 'Create formula field', 'Numeric
:::tip :::tip
To change the order of arithmetic operation, you can use round bracket parenthesis (). To change the order of arithmetic operation, you can use round bracket parenthesis ().
Example: ({field1} + ({field2} * {field3}) / (3 - $field4$ )) Example: `({field1} + ({field2} * {field3}) / (3 - {field4} ))`
::: :::

16
packages/noco-docs/docs/070.fields/040.field-types/060.formula/040.date-functions.md

@ -10,14 +10,14 @@ keywords: ['Fields', 'Field types', 'Formula', 'Date & Time', 'Create formula fi
| Name | Syntax | Sample | Output | Remark | | Name | Syntax | Sample | Output | Remark |
|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------|---------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------|---------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **NOW** | `NOW()` | `NOW()` | 2022-05-19 17:20:43 | Returns the current time and day | | **NOW** | `NOW()` | `NOW()` | 2022-05-19 17:20:43 | Returns the current time and day |
| | `IF(NOW() < {DATE_COL}, "true", "false")` | `IF(NOW() < date, "true", "false")` | If current date is less than {DATE_COL}, it returns true. Otherwise, it returns false. | DateTime fields and negative values are supported. | | | `IF(NOW() < {DATE_COL}`, "true", "false")` | `IF(NOW() < date, "true", "false")` | If current date is less than `{DATE_COL}`, it returns true. Otherwise, it returns false. | DateTime fields and negative values are supported. |
| **DATEADD** | `DATEADD(date \| datetime, value, ["day" \| "week" \| "month" \| "year"])` | `DATEADD(date, 1, 'day')` | Supposing {DATE_COL} is 2022-03-14. The result is 2022-03-15. | DateTime fields and negative values are supported. Example: `DATEADD(DATE_TIME_COL, -1, 'day')` | | **DATEADD** | `DATEADD(date \| datetime, value, ["day" \| "week" \| "month" \| "year"])` | `DATEADD(date, 1, 'day')` | Supposing `{DATE_COL}` is 2022-03-14. The result is 2022-03-15. | DateTime fields and negative values are supported. Example: `DATEADD(DATE_TIME_COL, -1, 'day')` |
| | | `DATEADD(date, 1, 'week')` | Supposing {DATE_COL} is 2022-03-14 03:14. The result is 2022-03-21 03:14. | DateTime fields and negative values are supported. Example: `DATEADD(DATE_TIME_COL, -1, 'week')` | | | | `DATEADD(date, 1, 'week')` | Supposing `{DATE_COL}` is 2022-03-14 03:14. The result is 2022-03-21 03:14. | DateTime fields and negative values are supported. Example: `DATEADD(DATE_TIME_COL, -1, 'week')` |
| | | `DATEADD(date, 1, 'month')` | Supposing {DATE_COL} is 2022-03-14 03:14. The result is 2022-04-14 03:14. | DateTime fields and negative values are supported. Example: `DATEADD(DATE_TIME_COL, -1, 'month')` | | | | `DATEADD(date, 1, 'month')` | Supposing `{DATE_COL}` is 2022-03-14 03:14. The result is 2022-04-14 03:14. | DateTime fields and negative values are supported. Example: `DATEADD(DATE_TIME_COL, -1, 'month')` |
| | | `DATEADD(date, 1, 'year')` | Supposing {DATE_COL} is 2022-03-14 03:14. The result is 2023-03-14 03:14. | DateTime fields and negative values are supported. Example: `DATEADD(DATE_TIME_COL, -1, 'year')` | | | | `DATEADD(date, 1, 'year')` | Supposing `{DATE_COL}` is 2022-03-14 03:14. The result is 2023-03-14 03:14. | DateTime fields and negative values are supported. Example: `DATEADD(DATE_TIME_COL, -1, 'year')` |
| | | `IF(NOW() < DATEADD(date,10,'day'), "true", "false")` | If the current date is less than {DATE_COL} plus 10 days, it returns true. Otherwise, it returns false. | DateTime fields and negative values are supported. | | | | `IF(NOW() < DATEADD(date,10,'day'), "true", "false")` | If the current date is less than `{DATE_COL}` plus 10 days, it returns true. Otherwise, it returns false. | DateTime fields and negative values are supported. |
| | | `IF(NOW() < DATEADD(date,10,'day'), "true", "false")` | If the current date is less than {DATE_COL} plus 10 days, it returns true. Otherwise, it returns false. | DateTime fields and negative values are supported. | | | | `IF(NOW() < DATEADD(date,10,'day'), "true", "false")` | If the current date is less than `{DATE_COL}` plus 10 days, it returns true. Otherwise, it returns false. | DateTime fields and negative values are supported. |
| **DATETIME_DIFF** | `DATETIME_DIFF(date, date, ["milliseconds" \| "ms" \| "seconds" \| "s" \| "minutes" \| "m" \| "hours" \| "h" \| "days" \| "d" \| "weeks" \| "w" \| "months" \| "M" \| "quarters" \| "Q" \| "years" \| "y"])` | `DATETIME_DIFF("2022/10/14", "2022/10/15", "second")` | Supposing {DATE_COL_1} is 2017-08-25 and {DATE_COL_2} is 2011-08-25. The result is 86400. | Compares two dates and returns the difference in the unit specified. Positive integers indicate the second date being in the past compared to the first and vice versa for negative ones. | | **DATETIME_DIFF** | `DATETIME_DIFF(date, date, ["milliseconds" \| "ms" \| "seconds" \| "s" \| "minutes" \| "m" \| "hours" \| "h" \| "days" \| "d" \| "weeks" \| "w" \| "months" \| "M" \| "quarters" \| "Q" \| "years" \| "y"])` | `DATETIME_DIFF("2022/10/14", "2022/10/15", "second")` | Supposing `{DATE_COL_1}` is 2017-08-25 and `{DATE_COL_2}` is 2011-08-25. The result is 86400. | Compares two dates and returns the difference in the unit specified. Positive integers indicate the second date being in the past compared to the first and vice versa for negative ones. |
| | | `WEEKDAY(NOW(), "sunday")` | If today is Monday, it returns 1 | Get the week day of NOW() with the first day set as sunday | | | | `WEEKDAY(NOW(), "sunday")` | If today is Monday, it returns 1 | Get the week day of NOW() with the first day set as sunday |
| **WEEKDAY** | `WEEKDAY(date, [startDayOfWeek])` | `WEEKDAY(NOW())` | If today is Monday, it returns 0 | Returns the day of the week as an integer between 0 and 6 inclusive starting from Monday by default. You can optionally change the start day of the week by specifying in the second argument | | **WEEKDAY** | `WEEKDAY(date, [startDayOfWeek])` | `WEEKDAY(NOW())` | If today is Monday, it returns 0 | Returns the day of the week as an integer between 0 and 6 inclusive starting from Monday by default. You can optionally change the start day of the week by specifying in the second argument |
| | | `WEEKDAY(NOW(), "sunday")` | If today is Monday, it returns 1 | Get the week day of NOW() with the first day set as sunday | | | | `WEEKDAY(NOW(), "sunday")` | If today is Monday, it returns 1 | Get the week day of NOW() with the first day set as sunday |

2
packages/noco-docs/docs/070.fields/060.actions-on-field.md

@ -83,7 +83,7 @@ New field will be created to the right of the original field.
New field will be created to the left of the original field. New field will be created to the left of the original field.
### Delete field ### Delete field
:::danger :::info
**This action cannot be undone.** **This action cannot be undone.**
::: :::

4
packages/noco-docs/docs/080.records/070.actions-on-record.md

@ -54,8 +54,8 @@ On the bulk update modal,
5. Click on the `Bulk Update all` button 5. Click on the `Bulk Update all` button
6. A confirmation dialog will be displayed. Click on `Confirm` to update the records. 6. A confirmation dialog will be displayed. Click on `Confirm` to update the records.
:::danger :::info
This operation cannot be undone. **This action cannot be undone.**
::: :::
![Bulk Update](/img/v2/records/bulk-update-1.png) ![Bulk Update](/img/v2/records/bulk-update-1.png)

4
packages/noco-docs/docs/090.views/040.view-types/030.form.md

@ -28,7 +28,7 @@ Form view builder layout can be divided into 3 sections:
## Form View Operations ## Form View Operations
### Add Form Title & Description ### Add Form Title & Description
In the **Form View** area, click on in input boxes provided for **Title** <1> & **Description** <2> to add/update title & description to the form. In the **Form View** area, click on in input boxes provided for **Title** {"<"}1{">"} & **Description** {"<"}2{">"} to add/update title & description to the form.
![Form Title & Description](/img/v2/views/form-view-title-description.png) ![Form Title & Description](/img/v2/views/form-view-title-description.png)
@ -38,7 +38,7 @@ To add a field to the form, either
- Click on the field in the **Fields Area** to add it to the end of the **Form Area** - Click on the field in the **Fields Area** to add it to the end of the **Form Area**
### Change field label & help-text ### Change field label & help-text
To change the field label displayed on the form & add help-text, click on the field in the **Form Area** and update the values in the input boxes provided for **Label** <1> & **Help Text** <2>. To change the field label displayed on the form & add help-text, click on the field in the **Form Area** and update the values in the input boxes provided for **Label** {"<"}1{">"} & **Help Text** {"<"}2{">"}.
![Field Label & Help Text](/img/v2/views/form-view-field-label-help-text.png) ![Field Label & Help Text](/img/v2/views/form-view-field-label-help-text.png)

2
packages/noco-docs/docs/090.views/090.actions-on-view.md

@ -41,7 +41,7 @@ The view context menu provides a set of tools to interact with the view. The vie
## Delete view ## Delete view
:::danger :::info
**This action cannot be undone.** **This action cannot be undone.**
::: :::

6
packages/noco-docs/docs/150.engineering/060.builds-and-releases.md

@ -137,13 +137,13 @@ When a non-draft Pull Request is created, reopened or synchronized, a timely bui
- `packages/nc-plugin/**` - `packages/nc-plugin/**`
- `packages/nocodb/**` - `packages/nocodb/**`
The docker images will be built and pushed to Docker Hub (See [nocodb/nocodb-timely](https://hub.docker.com/r/nocodb/nocodb-timely/tags) for the full list). Once the image is ready, Github bot will add a comment with the command in the pull request. The tag would be `<NOCODB_CURRENT_VERSION>-pr-<PR_NUMBER>-<YYYYMMDD>-<HHMM>`. The docker images will be built and pushed to Docker Hub (See [nocodb/nocodb-timely](https://hub.docker.com/r/nocodb/nocodb-timely/tags) for the full list). Once the image is ready, GitHub bot will add a comment with the command in the pull request. The tag would be `<NOCODB_CURRENT_VERSION>-pr-<PR_NUMBER>-<YYYYMMDD>-<HHMM>`.
![image](https://user-images.githubusercontent.com/35857179/175012097-240dab05-da93-4c4e-87c1-1c36fb1350bd.png) ![image](https://user-images.githubusercontent.com/35857179/175012097-240dab05-da93-4c4e-87c1-1c36fb1350bd.png)
## Executables or Binaries ## Executables or Binaries
Similarly, we provide a timely build for executables for non-docker users. The source code will be built, packaged as binary files, and pushed to Github (See [nocodb/nocodb-timely](https://github.com/nocodb/nocodb-timely/releases) for the full list). Similarly, we provide a timely build for executables for non-docker users. The source code will be built, packaged as binary files, and pushed to GitHub (See [nocodb/nocodb-timely](https://github.com/nocodb/nocodb-timely/releases) for the full list).
Currently, we only support the following targets: Currently, we only support the following targets:
@ -154,7 +154,7 @@ Currently, we only support the following targets:
- `node16-macos-x64` - `node16-macos-x64`
- `node16-win-x64` - `node16-win-x64`
Once the executables are ready, Github bot will add a comment with the commands in the pull request. Once the executables are ready, GitHub bot will add a comment with the commands in the pull request.
![image](https://user-images.githubusercontent.com/35857179/175012070-f5f3e7b8-6dc5-4d1c-9f7e-654bc5039521.png) ![image](https://user-images.githubusercontent.com/35857179/175012070-f5f3e7b8-6dc5-4d1c-9f7e-654bc5039521.png)

7622
packages/noco-docs/package-lock.json generated

File diff suppressed because it is too large Load Diff

20
packages/noco-docs/package.json

@ -28,24 +28,24 @@
"typecheck": "tsc" "typecheck": "tsc"
}, },
"dependencies": { "dependencies": {
"@docusaurus/core": "2.4.1", "@docusaurus/core": "3.0.0",
"@docusaurus/plugin-client-redirects": "2.4.1", "@docusaurus/plugin-client-redirects": "3.0.0",
"@docusaurus/plugin-ideal-image": "2.4.1", "@docusaurus/plugin-ideal-image": "3.0.0",
"@docusaurus/plugin-sitemap": "2.4.1", "@docusaurus/plugin-sitemap": "3.0.0",
"@docusaurus/preset-classic": "2.4.1", "@docusaurus/preset-classic": "3.0.0",
"@mdx-js/react": "^1.6.22", "@mdx-js/react": "^3.0.0",
"clsx": "^1.2.1", "clsx": "^1.2.1",
"docusaurus-plugin-sass": "^0.2.5", "docusaurus-plugin-sass": "^0.2.5",
"docusaurus-theme-search-typesense": "^0.12.0-0", "docusaurus-theme-search-typesense": "^0.14.0",
"nc-analytics": "^0.0.4", "nc-analytics": "^0.0.4",
"plugin-image-zoom": "github:flexanalytics/plugin-image-zoom", "plugin-image-zoom": "github:flexanalytics/plugin-image-zoom",
"prism-react-renderer": "^1.3.5", "prism-react-renderer": "^1.3.5",
"react": "^17.0.2", "react": "^18.2.0",
"react-dom": "^17.0.2", "react-dom": "^18.2.0",
"sass": "^1.66.1" "sass": "^1.66.1"
}, },
"devDependencies": { "devDependencies": {
"@docusaurus/module-type-aliases": "2.4.1", "@docusaurus/module-type-aliases": "3.0.0",
"@tsconfig/docusaurus": "^1.0.5", "@tsconfig/docusaurus": "^1.0.5",
"typescript": "^4.7.4" "typescript": "^4.7.4"
}, },

18
packages/noco-docs/versioned_docs/version-0.109.7/030.setup-and-usages/090.formulas.md vendored

@ -62,7 +62,7 @@ Unlike other column types, formula cells cannot be modified by double-clicking s
:::tip :::tip
To change the order of arithmetic operation, you can use round bracket parantheses (). <br/> To change the order of arithmetic operation, you can use round bracket parantheses (). <br/>
Example: ({Column1} + ({Column2} * {Column3}) / (3 - $Column4$ )) Example: `({Column1} + ({Column2} * {Column3}) / (3 - $Column4$ ))`
::: :::
@ -89,14 +89,14 @@ Example: ({Column1} + ({Column2} * {Column3}) / (3 - $Column4$ ))
| Name | Syntax | Sample | Output | Remark | | Name | Syntax | Sample | Output | Remark |
|---|---|---|---|---| |---|---|---|---|---|
| **NOW** | `NOW()` | `NOW()` | 2022-05-19 17:20:43 | Returns the current time and day | | **NOW** | `NOW()` | `NOW()` | 2022-05-19 17:20:43 | Returns the current time and day |
| | `IF(NOW() < {DATE_COL}, "true", "false")` | `IF(NOW() < date, "true", "false")` | If current date is less than {DATE_COL}, it returns true. Otherwise, it returns false. | DateTime columns and negative values are supported. | | | `IF(NOW() < {DATE_COL}, "true", "false")` | `IF(NOW() < date, "true", "false")` | If current date is less than `{DATE_COL}`, it returns true. Otherwise, it returns false. | DateTime columns and negative values are supported. |
| **DATEADD** | `DATEADD(date \| datetime, value, ["day" \| "week" \| "month" \| "year"])` | `DATEADD(date, 1, 'day')` | Supposing {DATE_COL} is 2022-03-14. The result is 2022-03-15. | DateTime columns and negative values are supported. Example: `DATEADD(DATE_TIME_COL, -1, 'day')` | | **DATEADD** | `DATEADD(date \| datetime, value, ["day" \| "week" \| "month" \| "year"])` | `DATEADD(date, 1, 'day')` | Supposing `{DATE_COL}` is 2022-03-14. The result is 2022-03-15. | DateTime columns and negative values are supported. Example: `DATEADD(DATE_TIME_COL, -1, 'day')` |
| | | `DATEADD(date, 1, 'week')` | Supposing {DATE_COL} is 2022-03-14 03:14. The result is 2022-03-21 03:14. | DateTime columns and negative values are supported. Example: `DATEADD(DATE_TIME_COL, -1, 'week')` | | | | `DATEADD(date, 1, 'week')` | Supposing `{DATE_COL}` is 2022-03-14 03:14. The result is 2022-03-21 03:14. | DateTime columns and negative values are supported. Example: `DATEADD(DATE_TIME_COL, -1, 'week')` |
| | | `DATEADD(date, 1, 'month')` | Supposing {DATE_COL} is 2022-03-14 03:14. The result is 2022-04-14 03:14. | DateTime columns and negative values are supported. Example: `DATEADD(DATE_TIME_COL, -1, 'month')` | | | | `DATEADD(date, 1, 'month')` | Supposing `{DATE_COL}` is 2022-03-14 03:14. The result is 2022-04-14 03:14. | DateTime columns and negative values are supported. Example: `DATEADD(DATE_TIME_COL, -1, 'month')` |
| | | `DATEADD(date, 1, 'year')` | Supposing {DATE_COL} is 2022-03-14 03:14. The result is 2023-03-14 03:14. | DateTime columns and negative values are supported. Example: `DATEADD(DATE_TIME_COL, -1, 'year')` | | | | `DATEADD(date, 1, 'year')` | Supposing `{DATE_COL}` is 2022-03-14 03:14. The result is 2023-03-14 03:14. | DateTime columns and negative values are supported. Example: `DATEADD(DATE_TIME_COL, -1, 'year')` |
| | | `IF(NOW() < DATEADD(date,10,'day'), "true", "false")` | If the current date is less than {DATE_COL} plus 10 days, it returns true. Otherwise, it returns false. | DateTime columns and negative values are supported. | | | | `IF(NOW() < DATEADD(date,10,'day'), "true", "false")` | If the current date is less than `{DATE_COL}` plus 10 days, it returns true. Otherwise, it returns false. | DateTime columns and negative values are supported. |
| | | `IF(NOW() < DATEADD(date,10,'day'), "true", "false")` | If the current date is less than {DATE_COL} plus 10 days, it returns true. Otherwise, it returns false. | DateTime columns and negative values are supported. | | | | `IF(NOW() < DATEADD(date,10,'day'), "true", "false")` | If the current date is less than `{DATE_COL}` plus 10 days, it returns true. Otherwise, it returns false. | DateTime columns and negative values are supported. |
| **DATETIME_DIFF** | `DATETIME_DIFF(date, date, ["milliseconds" \| "ms" \| "seconds" \| "s" \| "minutes" \| "m" \| "hours" \| "h" \| "days" \| "d" \| "weeks" \| "w" \| "months" \| "M" \| "quarters" \| "Q" \| "years" \| "y"])` | `DATETIME_DIFF("2022/10/14", "2022/10/15", "second")` | Supposing {DATE_COL_1} is 2017-08-25 and {DATE_COL_2} is 2011-08-25. The result is 86400. | Compares two dates and returns the difference in the unit specified. Positive integers indicate the second date being in the past compared to the first and vice versa for negative ones. | | **DATETIME_DIFF** | `DATETIME_DIFF(date, date, ["milliseconds" \| "ms" \| "seconds" \| "s" \| "minutes" \| "m" \| "hours" \| "h" \| "days" \| "d" \| "weeks" \| "w" \| "months" \| "M" \| "quarters" \| "Q" \| "years" \| "y"])` | `DATETIME_DIFF("2022/10/14", "2022/10/15", "second")` | Supposing `{DATE_COL_1}` is 2017-08-25 and `{DATE_COL_2}` is 2011-08-25. The result is 86400. | Compares two dates and returns the difference in the unit specified. Positive integers indicate the second date being in the past compared to the first and vice versa for negative ones. |
| | | `WEEKDAY(NOW(), "sunday")` | If today is Monday, it returns 1 | Get the week day of NOW() with the first day set as sunday | | | | `WEEKDAY(NOW(), "sunday")` | If today is Monday, it returns 1 | Get the week day of NOW() with the first day set as sunday |
| **WEEKDAY** | `WEEKDAY(date, [startDayOfWeek])` | `WEEKDAY(NOW())` | If today is Monday, it returns 0 | Returns the day of the week as an integer between 0 and 6 inclusive starting from Monday by default. You can optionally change the start day of the week by specifying in the second argument | | **WEEKDAY** | `WEEKDAY(date, [startDayOfWeek])` | `WEEKDAY(NOW())` | If today is Monday, it returns 0 | Returns the day of the week as an integer between 0 and 6 inclusive starting from Monday by default. You can optionally change the start day of the week by specifying in the second argument |
| | | `WEEKDAY(NOW(), "sunday")` | If today is Monday, it returns 1 | Get the week day of NOW() with the first day set as sunday | | | | `WEEKDAY(NOW(), "sunday")` | If today is Monday, it returns 1 | Get the week day of NOW() with the first day set as sunday |

14
packages/noco-docs/versioned_docs/version-0.109.7/030.setup-and-usages/160.views.md vendored

@ -12,10 +12,10 @@ To navigate different views, we can select the target one in the view sidebar. B
## View Menu Bar ## View Menu Bar
To work with `Views`, use View menu-bar on the right hand side - To work with `Views`, use View menu-bar on the right hand side -
- <1> Toggle View menu-bar. - {"<"}1{">"} Toggle View menu-bar.
- <2> Displays created view-list for the selected table - {"<"}2{">"} Displays created view-list for the selected table
- Currently active view is high-lighted - Currently active view is high-lighted
- <3> Add new view to the list - {"<"}3{">"} Add new view to the list
![image](https://user-images.githubusercontent.com/35857179/194814369-53fa8875-7610-4849-9a91-f94096b15b3f.png) ![image](https://user-images.githubusercontent.com/35857179/194814369-53fa8875-7610-4849-9a91-f94096b15b3f.png)
@ -77,7 +77,7 @@ We can apply permission to each View. By default, Collaborative Views will be us
### Create a View ### Create a View
Click '+' in View-menu sidebar, as shown in <3>. Click '+' in View-menu sidebar, as shown in {"<"}3{">"}.
### Rename a View ### Rename a View
@ -87,7 +87,7 @@ Double click on `view-name`, edit, <enter />.
### Delete a View ### Delete a View
Hover the target View and click the delete icon, as shown in <2>. Hover the target View and click the delete icon, as shown in {"<"}2{">"}.
:::note :::note
@ -99,12 +99,12 @@ You cannot delete the very first Grid View (termed as `Default view`).
### Duplicate a View ### Duplicate a View
Hover the target View and click the copy icon, as shown in <2>. Hover the target View and click the copy icon, as shown in {"<"}2{">"}.
<!-- ![image](https://user-images.githubusercontent.com/35857179/163353865-7275499e-c685-44f4-906c-ba08f0ee419e.png) --> <!-- ![image](https://user-images.githubusercontent.com/35857179/163353865-7275499e-c685-44f4-906c-ba08f0ee419e.png) -->
### Reorder a View ### Reorder a View
Hover the target View and re-order it as needed by drag-drop the drag icon, as shown in <1>. Hover the target View and re-order it as needed by drag-drop the drag icon, as shown in {"<"}1{">"}.
<!-- ![image](https://user-images.githubusercontent.com/35857179/163359674-c4aeff74-1cb4-498d-b79c-c6ddf84ad352.png) --> <!-- ![image](https://user-images.githubusercontent.com/35857179/163359674-c4aeff74-1cb4-498d-b79c-c6ddf84ad352.png) -->

6
packages/noco-docs/versioned_docs/version-0.109.7/030.setup-and-usages/200.import-airtable-to-sql-database-within-a-minute-for-free.md vendored

@ -58,9 +58,9 @@ Below are 3 simple steps
<!-- ![image](https://user-images.githubusercontent.com/35857179/168773192-f3ef9d36-3329-4324-ae25-989b611f66bf.png) --> <!-- ![image](https://user-images.githubusercontent.com/35857179/168773192-f3ef9d36-3329-4324-ae25-989b611f66bf.png) -->
2. Input API key & Shared Base ID / URL (retrieved from `Get Airtable Credentials` above). 2. Input API key & Shared Base ID / URL (retrieved from `Get Airtable Credentials` above).
- <1> API Key - {"<"}1{">"} API Key
- <2> Share Base ID - {"<"}2{">"} Share Base ID
- <3> Configuration option - {"<"}3{">"} Configuration option
- Import Data: disable this option to import only table & view schema's - Import Data: disable this option to import only table & view schema's
- Import Secondary Views: disable this option to import only primary grid view per table - Import Secondary Views: disable this option to import only primary grid view per table
- Import Rollup Columns: disable this option to skip Rollup column import - Import Rollup Columns: disable this option to skip Rollup column import

4
packages/noco-docs/versioned_docs/version-0.109.7/030.setup-and-usages/230.team-and-auth.md vendored

@ -36,8 +36,8 @@ If you do not have an SMTP sender configured, make sure to copy the invite link
### How to Update user permissions ### How to Update user permissions
1. Use `Edit` <1> menu to assign a different role to existing user 1. Use `Edit` {"<"}1{">"} menu to assign a different role to existing user
2. Use `Delete` <2> menu to remove a user from accessing current project 2. Use `Delete` {"<"}2{">"} menu to remove a user from accessing current project
![image](https://user-images.githubusercontent.com/35857179/219830858-be7a4656-9f3b-440c-9a79-165f919223d7.png) ![image](https://user-images.githubusercontent.com/35857179/219830858-be7a4656-9f3b-440c-9a79-165f919223d7.png)

246
packages/noco-docs/versioned_docs/version-0.109.7/040.developer-resources/020.rest-apis.md vendored

@ -13,7 +13,7 @@ You may also interact with the API's resources via <a href="/0.109.7/developer-r
:::note :::note
Currently, the default value for {orgs} is <b>noco</b>. Users will be able to change it in the future release. Currently, the default value for `{orgs}` is <b>noco</b>. Users will be able to change it in the future release.
::: :::
@ -26,145 +26,145 @@ Currently, the default value for {orgs} is <b>noco</b>. Users will be able to ch
| Auth | Get | auth | me | /api/v1/auth/user/me | | Auth | Get | auth | me | /api/v1/auth/user/me |
| Auth | Post | auth | passwordForgot | /api/v1/auth/password/forgot | | Auth | Post | auth | passwordForgot | /api/v1/auth/password/forgot |
| Auth | Post | auth | passwordChange | /api/v1/auth/password/change | | Auth | Post | auth | passwordChange | /api/v1/auth/password/change |
| Auth | Post | auth | passwordReset | /api/v1/auth/password/reset/{token} | | Auth | Post | auth | passwordReset | /api/v1/auth/password/reset/`{token}` |
| Auth | Post | auth | tokenRefresh | /api/v1/auth/token/refresh | | Auth | Post | auth | tokenRefresh | /api/v1/auth/token/refresh |
| Auth | Post | auth | passwordResetTokenValidate | /api/v1/auth/token/validate/{token} | | Auth | Post | auth | passwordResetTokenValidate | /api/v1/auth/token/validate/`{token}` |
| Auth | Post | auth | emailValidate | /api/v1/auth/email/validate/{email} | | Auth | Post | auth | emailValidate | /api/v1/auth/email/validate/`{email}` |
### Public APIs ### Public APIs
| Category | Method | Tag | Function Name | Path | | Category | Method | Tag | Function Name | Path |
|---|---|---|---|---| |---|---|---|---|---|
| Public | Get | public | sharedBaseGet | /api/v1/db/public/shared-base/{sharedBaseUuid}/meta | | Public | Get | public | sharedBaseGet | /api/v1/db/public/shared-base/`{sharedBaseUuid}`/meta |
| Public | Post | public | dataList | /api/v1/db/public/shared-view/{sharedViewUuid}/rows | | Public | Post | public | dataList | /api/v1/db/public/shared-view/`{sharedViewUuid}`/rows |
| Public | Get | public | dataNestedList | /api/v1/db/public/shared-view/{sharedViewUuid}/rows/{rowId}/{relationType}/{columnName} | | Public | Get | public | dataNestedList | /api/v1/db/public/shared-view/`{sharedViewUuid}`/rows/`{rowId}`/`{relationType}`/`{columnName}` |
| Public | Post | public | dataCreate | /api/v1/db/public/shared-view/{sharedViewUuid}/rows | | Public | Post | public | dataCreate | /api/v1/db/public/shared-view/`{sharedViewUuid}`/rows |
| Public | Get | public | csvExport | /api/v1/db/public/shared-view/{sharedViewUuid}/rows/export/{type} | | Public | Get | public | csvExport | /api/v1/db/public/shared-view/`{sharedViewUuid}`/rows/export/`{type}` |
| Public | Get | public | dataRelationList | /api/v1/db/public/shared-view/{sharedViewUuid}/nested/{columnName} | | Public | Get | public | dataRelationList | /api/v1/db/public/shared-view/`{sharedViewUuid}`/nested/`{columnName}` |
| Public | Get | public | sharedViewMetaGet | /api/v1/db/public/shared-view/{sharedViewUuid}/meta | | Public | Get | public | sharedViewMetaGet | /api/v1/db/public/shared-view/`{sharedViewUuid}`/meta |
| Public | Get | public | groupedDataList | /api/v1/db/public/shared-view/{sharedViewUuid}/group/{columnId} | | Public | Get | public | groupedDataList | /api/v1/db/public/shared-view/`{sharedViewUuid}`/group/`{columnId}` |
### Data APIs ### Data APIs
| Category | Method | Tag | Function Name | Path | | Category | Method | Tag | Function Name | Path |
|---|---|---|---|---| |---|---|---|---|---|
| Data | Delete| dbTableRow | bulkDelete | /api/v1/db/data/bulk/{orgs}/{projectName}/{tableName}/ | | Data | Delete| dbTableRow | bulkDelete | /api/v1/db/data/bulk/`{orgs}`/`{projectName}`/`{tableName}`/ |
| Data | Post | dbTableRow | bulkCreate | /api/v1/db/data/bulk/{orgs}/{projectName}/{tableName}/ | | Data | Post | dbTableRow | bulkCreate | /api/v1/db/data/bulk/`{orgs}`/`{projectName}`/`{tableName}`/ |
| Data | Patch | dbTableRow | bulkUpdate | /api/v1/db/data/bulk/{orgs}/{projectName}/{tableName}/ | | Data | Patch | dbTableRow | bulkUpdate | /api/v1/db/data/bulk/`{orgs}`/`{projectName}`/`{tableName}`/ |
| Data | Patch | dbTableRow | bulkUpdateAll | /api/v1/db/data/bulk/{orgs}/{projectName}/{tableName}/all | | Data | Patch | dbTableRow | bulkUpdateAll | /api/v1/db/data/bulk/`{orgs}`/`{projectName}`/`{tableName}`/all |
| Data | Delete| dbTableRow | bulkDeleteAll | /api/v1/db/data/bulk/{orgs}/{projectName}/{tableName}/all | | Data | Delete| dbTableRow | bulkDeleteAll | /api/v1/db/data/bulk/`{orgs}`/`{projectName}`/`{tableName}`/all |
| Data | Get | dbTableRow | list | /api/v1/db/data/{orgs}/{projectName}/{tableName} | | Data | Get | dbTableRow | list | /api/v1/db/data/`{orgs}`/`{projectName}`/`{tableName}` |
| Data | Get | dbTableRow | findOne | /api/v1/db/data/{orgs}/{projectName}/{tableName}/find-one | | Data | Get | dbTableRow | findOne | /api/v1/db/data/`{orgs}`/`{projectName}`/`{tableName}`/find-one |
| Data | Get | dbTableRow | groupBy | /api/v1/db/data/{orgs}/{projectName}/{tableName}/groupby | | Data | Get | dbTableRow | groupBy | /api/v1/db/data/`{orgs}`/`{projectName}`/`{tableName}`/groupby |
| Data | Get | dbTableRow | exist | /api/v1/db/data/{orgs}/{projectName}/{tableName}/{rowId}/exist | | Data | Get | dbTableRow | exist | /api/v1/db/data/`{orgs}`/`{projectName}`/`{tableName}`/`{rowId}`/exist |
| Data | Post | dbTableRow | create | /api/v1/db/data/{orgs}/{projectName}/{tableName} | | Data | Post | dbTableRow | create | /api/v1/db/data/`{orgs}`/`{projectName}`/`{tableName}` |
| Data | Get | dbTableRow | read | /api/v1/db/data/{orgs}/{projectName}/{tableName}/{rowId} | | Data | Get | dbTableRow | read | /api/v1/db/data/`{orgs}`/`{projectName}`/`{tableName}`/`{rowId}` |
| Data | Patch | dbTableRow | update | /api/v1/db/data/{orgs}/{projectName}/{tableName}/{rowId} | | Data | Patch | dbTableRow | update | /api/v1/db/data/`{orgs}`/`{projectName}`/`{tableName}`/`{rowId}` |
| Data | Delete| dbTableRow | delete | /api/v1/db/data/{orgs}/{projectName}/{tableName}/{rowId} | | Data | Delete| dbTableRow | delete | /api/v1/db/data/`{orgs}`/`{projectName}`/`{tableName}`/`{rowId}` |
| Data | Get | dbTableRow | count | /api/v1/db/data/{orgs}/{projectName}/{tableName}/count | | Data | Get | dbTableRow | count | /api/v1/db/data/`{orgs}`/`{projectName}`/`{tableName}`/count |
| Data | Get | dbTableRow | groupedDataList | /api/v1/db/data/{orgs}/{projectName}/{tableName}/group/{columnId} | | Data | Get | dbTableRow | groupedDataList | /api/v1/db/data/`{orgs}`/`{projectName}`/`{tableName}`/group/`{columnId}` |
| Data | Get | dbViewRow | list | /api/v1/db/data/{orgs}/{projectName}/{tableName}/views/{viewName} | | Data | Get | dbViewRow | list | /api/v1/db/data/`{orgs}`/`{projectName}`/`{tableName}`/views/`{viewName}` |
| Data | Get | dbViewRow | findOne | /api/v1/db/data/{orgs}/{projectName}/{tableName}/views/{viewName}/find-one | | Data | Get | dbViewRow | findOne | /api/v1/db/data/`{orgs}`/`{projectName}`/`{tableName}`/views/`{viewName}`/find-one |
| Data | Get | dbViewRow | groupBy | /api/v1/db/data/{orgs}/{projectName}/{tableName}/views/{viewName}/groupby | | Data | Get | dbViewRow | groupBy | /api/v1/db/data/`{orgs}`/`{projectName}`/`{tableName}`/views/`{viewName}`/groupby |
| Data | Get | dbViewRow | exist | /api/v1/db/data/{orgs}/{projectName}/{tableName}/views/{viewName}/{rowId}/exist | | Data | Get | dbViewRow | exist | /api/v1/db/data/`{orgs}`/`{projectName}`/`{tableName}`/views/`{viewName}`/`{rowId}`/exist |
| Data | Post | dbViewRow | create | /api/v1/db/data/{orgs}/{projectName}/{tableName}/views/{viewName} | | Data | Post | dbViewRow | create | /api/v1/db/data/`{orgs}`/`{projectName}`/`{tableName}`/views/`{viewName}` |
| Data | Get | dbViewRow | read | /api/v1/db/data/{orgs}/{projectName}/{tableName}/views/{viewName}/{rowId} | | Data | Get | dbViewRow | read | /api/v1/db/data/`{orgs}`/`{projectName}`/`{tableName}`/views/`{viewName}`/`{rowId}` |
| Data | Patch | dbViewRow | update | /api/v1/db/data/{orgs}/{projectName}/{tableName}/views/{viewName}/{rowId} | | Data | Patch | dbViewRow | update | /api/v1/db/data/`{orgs}`/`{projectName}`/`{tableName}`/views/`{viewName}`/`{rowId}` |
| Data | Delete| dbViewRow | delete | /api/v1/db/data/{orgs}/{projectName}/{tableName}/views/{viewName}/{rowId} | | Data | Delete| dbViewRow | delete | /api/v1/db/data/`{orgs}`/`{projectName}`/`{tableName}`/views/`{viewName}`/`{rowId}` |
| Data | Get | dbViewRow | count | /api/v1/db/data/{orgs}/{projectName}/{tableName}/views/{viewName}/count | | Data | Get | dbViewRow | count | /api/v1/db/data/`{orgs}`/`{projectName}`/`{tableName}`/views/`{viewName}`/count |
| Data | Get | dbViewRow | groupedDataList | /api/v1/db/data/{orgs}/{projectName}/{tableName}/views/{viewName}/group/{columnId} | | Data | Get | dbViewRow | groupedDataList | /api/v1/db/data/`{orgs}`/`{projectName}`/`{tableName}`/views/`{viewName}`/group/`{columnId}` |
### Meta APIs ### Meta APIs
| Category | Method | Tag | Function Name | Path | | Category | Method | Tag | Function Name | Path |
|---|---|---|---|---| |---|---|---|---|---|
| Meta | Get | apiToken | list | /api/v1/db/meta/projects/{projectId}/api-tokens | | Meta | Get | apiToken | list | /api/v1/db/meta/projects/`{projectId}`/api-tokens |
| Meta | Post | apiToken | create | /api/v1/db/meta/projects/{projectId}/api-tokens | | Meta | Post | apiToken | create | /api/v1/db/meta/projects/`{projectId}`/api-tokens |
| Meta | Delete| apiToken | delete | /api/v1/db/meta/projects/{projectId}/api-tokens/{token} | | Meta | Delete| apiToken | delete | /api/v1/db/meta/projects/`{projectId}`/api-tokens/`{token}` |
| Meta | Get | auth | projectUserList | /api/v1/db/meta/projects/{projectId}/users | | Meta | Get | auth | projectUserList | /api/v1/db/meta/projects/`{projectId}`/users |
| Meta | Post | auth | projectUserAdd | /api/v1/db/meta/projects/{projectId}/users | | Meta | Post | auth | projectUserAdd | /api/v1/db/meta/projects/`{projectId}`/users |
| Meta | Patch | auth | projectUserUpdate | /api/v1/db/meta/projects/{projectId}/users/{userId} | | Meta | Patch | auth | projectUserUpdate | /api/v1/db/meta/projects/`{projectId}`/users/`{userId}` |
| Meta | Delete| auth | projectUserRemove | /api/v1/db/meta/projects/{projectId}/users/{userId} | | Meta | Delete| auth | projectUserRemove | /api/v1/db/meta/projects/`{projectId}`/users/`{userId}` |
| Meta | Post | auth | projectUserResendInvite | /api/v1/db/meta/projects/{projectId}/users/{userId}/resend-invite | | Meta | Post | auth | projectUserResendInvite | /api/v1/db/meta/projects/`{projectId}`/users/`{userId}`/resend-invite |
| Meta | Post | dbTable | create | /api/v1/db/meta/projects/{projectId}/tables | | Meta | Post | dbTable | create | /api/v1/db/meta/projects/`{projectId}`/tables |
| Meta | Get | dbTable | list | /api/v1/db/meta/projects/{projectId}/tables | | Meta | Get | dbTable | list | /api/v1/db/meta/projects/`{projectId}`/tables |
| Meta | Post | dbTableColumn | create | /api/v1/db/meta/tables/{tableId}/columns | | Meta | Post | dbTableColumn | create | /api/v1/db/meta/tables/`{tableId}`/columns |
| Meta | Patch | dbTableColumn | update | /api/v1/db/meta/tables/{tableId}/columns/{columnId} | | Meta | Patch | dbTableColumn | update | /api/v1/db/meta/tables/`{tableId}`/columns/`{columnId}` |
| Meta | Delete| dbTableColumn | delete | /api/v1/db/meta/tables/{tableId}/columns/{columnId} | | Meta | Delete| dbTableColumn | delete | /api/v1/db/meta/tables/`{tableId}`/columns/`{columnId}` |
| Meta | Post | dbTableColumn | primaryColumnSet | /api/v1/db/meta/tables/{tableId}/columns/{columnId}/primary | | Meta | Post | dbTableColumn | primaryColumnSet | /api/v1/db/meta/tables/`{tableId}`/columns/`{columnId}`/primary |
| Meta | Get | dbTableFilter | get | /api/v1/db/meta/filters/{filterId} | | Meta | Get | dbTableFilter | get | /api/v1/db/meta/filters/`{filterId}` |
| Meta | Patch | dbTableFilter | update | /api/v1/db/meta/filters/{filterId} | | Meta | Patch | dbTableFilter | update | /api/v1/db/meta/filters/`{filterId}` |
| Meta | Delete| dbTableFilter | delete | /api/v1/db/meta/filters/{filterId} | | Meta | Delete| dbTableFilter | delete | /api/v1/db/meta/filters/`{filterId}` |
| Meta | Get | dbTableFilter | read | /api/v1/db/meta/views/{viewId}/filters | | Meta | Get | dbTableFilter | read | /api/v1/db/meta/views/`{viewId}`/filters |
| Meta | Post | dbTableFilter | create | /api/v1/db/meta/views/{viewId}/filters | | Meta | Post | dbTableFilter | create | /api/v1/db/meta/views/`{viewId}`/filters |
| Meta | Get | dbTableFilter | get | /api/v1/db/meta/filters/{filterId} | | Meta | Get | dbTableFilter | get | /api/v1/db/meta/filters/`{filterId}` |
| Meta | Patch | dbTableFilter | update | /api/v1/db/meta/filters/{filterId} | | Meta | Patch | dbTableFilter | update | /api/v1/db/meta/filters/`{filterId}` |
| Meta | Delete| dbTableFilter | delete | /api/v1/db/meta/filters/{filterId} | | Meta | Delete| dbTableFilter | delete | /api/v1/db/meta/filters/`{filterId}` |
| Meta | Get | dbTableFilter | childrenRead | /api/v1/db/meta/filters/{filterGroupId}/children | | Meta | Get | dbTableFilter | childrenRead | /api/v1/db/meta/filters/`{filterGroupId}`/children |
| Meta | Get | dbTableSort | list | /api/v1/db/meta/views/{viewId}/sorts | | Meta | Get | dbTableSort | list | /api/v1/db/meta/views/`{viewId}`/sorts |
| Meta | Post | dbTableSort | create | /api/v1/db/meta/views/{viewId}/sorts | | Meta | Post | dbTableSort | create | /api/v1/db/meta/views/`{viewId}`/sorts |
| Meta | Get | dbTableSort | read | /api/v1/db/meta/sorts/{sortId} | | Meta | Get | dbTableSort | read | /api/v1/db/meta/sorts/`{sortId}` |
| Meta | Patch | dbTableSort | update | /api/v1/db/meta/sorts/{sortId} | | Meta | Patch | dbTableSort | update | /api/v1/db/meta/sorts/`{sortId}` |
| Meta | Delete| dbTableSort | delete | /api/v1/db/meta/sorts/{sortId}/api/v1/db | | Meta | Delete| dbTableSort | delete | /api/v1/db/meta/sorts/`{sortId}`/api/v1/db |
| Meta | Patch | dbTableWebhook | update | /api/v1/db/meta/hooks/{hookId} | | Meta | Patch | dbTableWebhook | update | /api/v1/db/meta/hooks/`{hookId}` |
| Meta | Delete| dbTableWebhook | delete | /api/v1/db/meta/hooks/{hookId} | | Meta | Delete| dbTableWebhook | delete | /api/v1/db/meta/hooks/`{hookId}` |
| Meta | Get | dbTableWebhook | list | /api/v1/db/meta/tables/{tableId}/hooks | | Meta | Get | dbTableWebhook | list | /api/v1/db/meta/tables/`{tableId}`/hooks |
| Meta | Post | dbTableWebhook | create | /api/v1/db/meta/tables/{tableId}/hooks | | Meta | Post | dbTableWebhook | create | /api/v1/db/meta/tables/`{tableId}`/hooks |
| Meta | Post | dbTableWebhook | test | /api/v1/db/meta/tables/{tableId}/hooks/test | | Meta | Post | dbTableWebhook | test | /api/v1/db/meta/tables/`{tableId}`/hooks/test |
| Meta | Get | dbTableWebhook | samplePayloadGet | /api/v1/db/meta/tables/{tableId}/hooks/samplePayload/{operation} | | Meta | Get | dbTableWebhook | samplePayloadGet | /api/v1/db/meta/tables/`{tableId}`/hooks/samplePayload/`{operation}` |
| Meta | Get | dbTableWebhookFilter | read | /api/v1/db/meta/hooks/{hookId}/filters | | Meta | Get | dbTableWebhookFilter | read | /api/v1/db/meta/hooks/`{hookId}`/filters |
| Meta | Post | dbTableWebhookFilter | create | /api/v1/db/meta/hooks/{hookId}/filters | | Meta | Post | dbTableWebhookFilter | create | /api/v1/db/meta/hooks/`{hookId}`/filters |
| Meta | Get | dbView | list | /api/v1/db/meta/tables/{tableId}/views | | Meta | Get | dbView | list | /api/v1/db/meta/tables/`{tableId}`/views |
| Meta | Get | dbView | read | /api/v1/db/meta/tables/{tableId} | | Meta | Get | dbView | read | /api/v1/db/meta/tables/`{tableId}` |
| Meta | Patch | dbView | update | /api/v1/db/meta/tables/{tableId} | | Meta | Patch | dbView | update | /api/v1/db/meta/tables/`{tableId}` |
| Meta | Delete| dbView | delete | /api/v1/db/meta/tables/{tableId} | | Meta | Delete| dbView | delete | /api/v1/db/meta/tables/`{tableId}` |
| Meta | Post | dbView | reorder | /api/v1/db/meta/tables/{tableId}/reorder | | Meta | Post | dbView | reorder | /api/v1/db/meta/tables/`{tableId}`/reorder |
| Meta | Post | dbView | formCreate | /api/v1/db/meta/tables/{tableId}/forms | | Meta | Post | dbView | formCreate | /api/v1/db/meta/tables/`{tableId}`/forms |
| Meta | Patch | dbView | formUpdate | /api/v1/db/meta/forms/{formViewId} | | Meta | Patch | dbView | formUpdate | /api/v1/db/meta/forms/`{formViewId}` |
| Meta | Get | dbView | formRead | /api/v1/db/meta/forms/{formViewId} | | Meta | Get | dbView | formRead | /api/v1/db/meta/forms/`{formViewId}` |
| Meta | Patch | dbView | formColumnUpdate | /api/v1/db/meta/form-columns/{formViewColumnId} | | Meta | Patch | dbView | formColumnUpdate | /api/v1/db/meta/form-columns/`{formViewColumnId}` |
| Meta | Post | dbView | galleryCreate | /api/v1/db/meta/tables/{tableId}/galleries | | Meta | Post | dbView | galleryCreate | /api/v1/db/meta/tables/`{tableId}`/galleries |
| Meta | Patch | dbView | galleryUpdate | /api/v1/db/meta/galleries/{galleryViewId} | | Meta | Patch | dbView | galleryUpdate | /api/v1/db/meta/galleries/`{galleryViewId}` |
| Meta | Get | dbView | galleryRead | /api/v1/db/meta/galleries/{galleryViewId} | | Meta | Get | dbView | galleryRead | /api/v1/db/meta/galleries/`{galleryViewId}` |
| Meta | Post | dbView | kanbanCreate | /api/v1/db/meta/tables/{tableId}/kanbans | | Meta | Post | dbView | kanbanCreate | /api/v1/db/meta/tables/`{tableId}`/kanbans |
| Meta | Patch | dbView | kanbanUpdate | /api/v1/db/meta/kanban/{kanbanViewId} | | Meta | Patch | dbView | kanbanUpdate | /api/v1/db/meta/kanban/`{kanbanViewId}` |
| Meta | Get | dbView | kanbanRead | /api/v1/db/meta/kanbans/{kanbanViewId} | | Meta | Get | dbView | kanbanRead | /api/v1/db/meta/kanbans/`{kanbanViewId}` |
| Meta | Post | dbView | mapCreate | /api/v1/db/meta/tables/{tableId}/maps | | Meta | Post | dbView | mapCreate | /api/v1/db/meta/tables/`{tableId}`/maps |
| Meta | Patch | dbView | mapUpdate | /api/v1/db/meta/maps/{mapViewId} | | Meta | Patch | dbView | mapUpdate | /api/v1/db/meta/maps/`{mapViewId}` |
| Meta | Get | dbView | mapRead | /api/v1/db/meta/maps/{mapViewId} | | Meta | Get | dbView | mapRead | /api/v1/db/meta/maps/`{mapViewId}` |
| Meta | Post | dbView | gridCreate | /api/v1/db/meta/tables/{tableId}/grids | | Meta | Post | dbView | gridCreate | /api/v1/db/meta/tables/`{tableId}`/grids |
| Meta | Get | dbView | gridColumnsList | /api/v1/db/meta/grids/{gridId}/grid-columns | | Meta | Get | dbView | gridColumnsList | /api/v1/db/meta/grids/`{gridId}`/grid-columns |
| Meta | Patch | dbView | gridColumnUpdate | /api/v1/db/meta/grid-columns/{columnId} | | Meta | Patch | dbView | gridColumnUpdate | /api/v1/db/meta/grid-columns/`{columnId}` |
| Meta | Patch | dbView | update | /api/v1/db/meta/views/{viewId} | | Meta | Patch | dbView | update | /api/v1/db/meta/views/`{viewId}` |
| Meta | Delete| dbView | delete | /api/v1/db/meta/views/{viewId} | | Meta | Delete| dbView | delete | /api/v1/db/meta/views/`{viewId}` |
| Meta | Post | dbView | showAllColumn | /api/v1/db/meta/views/{viewId}/show-all | | Meta | Post | dbView | showAllColumn | /api/v1/db/meta/views/`{viewId}`/show-all |
| Meta | Post | dbView | hideAllColumn | /api/v1/db/meta/views/{viewId}/hide-all | | Meta | Post | dbView | hideAllColumn | /api/v1/db/meta/views/`{viewId}`/hide-all |
| Meta | Get | dbViewColumn | list | /api/v1/db/meta/views/{viewId}/columns | | Meta | Get | dbViewColumn | list | /api/v1/db/meta/views/`{viewId}`/columns |
| Meta | Post | dbViewColumn | create | /api/v1/db/meta/views/{viewId}/columns | | Meta | Post | dbViewColumn | create | /api/v1/db/meta/views/`{viewId}`/columns |
| Meta | Patch | dbViewColumn | update | /api/v1/db/meta/views/{viewId}/columns/{columnId} | | Meta | Patch | dbViewColumn | update | /api/v1/db/meta/views/`{viewId}`/columns/`{columnId}` |
| Meta | Get | dbViewShare | list | /api/v1/db/meta/views/{viewId}/share | | Meta | Get | dbViewShare | list | /api/v1/db/meta/views/`{viewId}`/share |
| Meta | Post | dbViewShare | create | /api/v1/db/meta/views/{viewId}/share | | Meta | Post | dbViewShare | create | /api/v1/db/meta/views/`{viewId}`/share |
| Meta | Patch | dbViewShare | update | /api/v1/db/meta/views/{viewId}/share | | Meta | Patch | dbViewShare | update | /api/v1/db/meta/views/`{viewId}`/share |
| Meta | Delete| dbViewShare | delete | /api/v1/db/meta/views/{viewId}/share | | Meta | Delete| dbViewShare | delete | /api/v1/db/meta/views/`{viewId}`/share |
| Meta | Get | plugin | list | /api/v1/db/meta/plugins | | Meta | Get | plugin | list | /api/v1/db/meta/plugins |
| Meta | Get | plugin | status | /api/v1/db/meta/plugins/{pluginTitle}/status | | Meta | Get | plugin | status | /api/v1/db/meta/plugins/`{pluginTitle}`/status |
| Meta | Post | plugin | test | /api/v1/db/meta/plugins/test | | Meta | Post | plugin | test | /api/v1/db/meta/plugins/test |
| Meta | PATCH | plugin | update | /api/v1/db/meta/plugins/{pluginId} | | Meta | PATCH | plugin | update | /api/v1/db/meta/plugins/`{pluginId}` |
| Meta | Get | plugin | read | /api/v1/db/meta/plugins/{pluginId} | | Meta | Get | plugin | read | /api/v1/db/meta/plugins/`{pluginId}` |
| Meta | Get | project | metaGet | /api/v1/db/meta/projects/{projectId}/info | | Meta | Get | project | metaGet | /api/v1/db/meta/projects/`{projectId}`/info |
| Meta | Get | project | modelVisibilityList | /api/v1/db/meta/projects/{projectId}/visibility-rules | | Meta | Get | project | modelVisibilityList | /api/v1/db/meta/projects/`{projectId}`/visibility-rules |
| Meta | Post | project | modelVisibilitySet | /api/v1/db/meta/projects/{projectId}/visibility-rules | | Meta | Post | project | modelVisibilitySet | /api/v1/db/meta/projects/`{projectId}`/visibility-rules |
| Meta | Get | project | list | /api/v1/db/meta/projects | | Meta | Get | project | list | /api/v1/db/meta/projects |
| Meta | Post | project | create | /api/v1/db/meta/projects | | Meta | Post | project | create | /api/v1/db/meta/projects |
| Meta | Get | project | read | /api/v1/db/meta/projects/{projectId} | | Meta | Get | project | read | /api/v1/db/meta/projects/`{projectId}` |
| Meta | Delete| project | delete | /api/v1/db/meta/projects/{projectId} | | Meta | Delete| project | delete | /api/v1/db/meta/projects/`{projectId}` |
| Meta | Get | project | auditList | /api/v1/db/meta/projects/{projectId}/audits | | Meta | Get | project | auditList | /api/v1/db/meta/projects/`{projectId}`/audits |
| Meta | Get | project | metaDiffGet | /api/v1/db/meta/projects/{projectId}/meta-diff | | Meta | Get | project | metaDiffGet | /api/v1/db/meta/projects/`{projectId}`/meta-diff |
| Meta | Post | project | metaDiffSync | /api/v1/db/meta/projects/{projectId}/meta-diff | | Meta | Post | project | metaDiffSync | /api/v1/db/meta/projects/`{projectId}`/meta-diff |
| Meta | Get | project | sharedBaseGet | /api/v1/db/meta/projects/{projectId}/shared | | Meta | Get | project | sharedBaseGet | /api/v1/db/meta/projects/`{projectId}`/shared |
| Meta | Delete| project | sharedBaseDisable | /api/v1/db/meta/projects/{projectId}/shared | | Meta | Delete| project | sharedBaseDisable | /api/v1/db/meta/projects/`{projectId}`/shared |
| Meta | Post | project | sharedBaseCreate | /api/v1/db/meta/projects/{projectId}/shared | | Meta | Post | project | sharedBaseCreate | /api/v1/db/meta/projects/`{projectId}`/shared |
| Meta | Patch | project | sharedBaseUpdate | /api/v1/db/meta/projects/{projectId}/shared | | Meta | Patch | project | sharedBaseUpdate | /api/v1/db/meta/projects/`{projectId}`/shared |
| Meta | Post | storage | upload | /api/v1/db/storage/upload | | Meta | Post | storage | upload | /api/v1/db/storage/upload |
| Meta | Post | storage | uploadByUrl | /api/v1/db/storage/upload-by-url | | Meta | Post | storage | uploadByUrl | /api/v1/db/storage/upload-by-url |
| Meta | Get | utils | commentList | /api/v1/db/meta/audits/comments | | Meta | Get | utils | commentList | /api/v1/db/meta/audits/comments |
@ -180,11 +180,11 @@ Currently, the default value for {orgs} is <b>noco</b>. Users will be able to ch
| Meta | Get | utils | aggregatedMetaInfo | /api/v1/aggregated-meta-info | | Meta | Get | utils | aggregatedMetaInfo | /api/v1/aggregated-meta-info |
| Meta | Get | orgUsers | list | /api/v1/users | | Meta | Get | orgUsers | list | /api/v1/users |
| Meta | Post | orgUsers | add | /api/v1/users | | Meta | Post | orgUsers | add | /api/v1/users |
| Meta | Patch | orgUsers | update | /api/v1/users/{userId} | | Meta | Patch | orgUsers | update | /api/v1/users/`{userId}` |
| Meta | Delete | orgUsers | delete | /api/v1/users/{userId} | | Meta | Delete | orgUsers | delete | /api/v1/users/`{userId}` |
| Meta | Get | orgTokens | list | /api/v1/tokens | | Meta | Get | orgTokens | list | /api/v1/tokens |
| Meta | Post | orgTokens | create | /api/v1/tokens | | Meta | Post | orgTokens | create | /api/v1/tokens |
| Meta | Delete | orgTokens | delete | /api/v1/tokens/{token} | | Meta | Delete | orgTokens | delete | /api/v1/tokens/`{token}` |
| Meta | Get | orgAppSettings | get | /api/v1/app-settings | | Meta | Get | orgAppSettings | get | /api/v1/app-settings |
| Meta | Post | orgAppSettings | set | /api/v1/app-settings | | Meta | Post | orgAppSettings | set | /api/v1/app-settings |

2
packages/noco-docs/versioned_docs/version-0.109.7/040.developer-resources/030.sdk.md vendored

@ -61,7 +61,7 @@ For Tag and FunctionName, please check out the API table <a href="/0.109.7/devel
::: :::
#### Example: Calling API - /api/v1/db/meta/projects/{projectId}/tables #### Example: Calling API - /api/v1/db/meta/projects/`{projectId}`/tables
```js ```js
await api.dbTable.create(params) await api.dbTable.create(params)

18
packages/noco-docs/versioned_docs/version-0.109.7/040.developer-resources/040.webhooks.md vendored

@ -84,17 +84,17 @@ The current row data and other details will be available in the hooks payload so
For a table with column names (id, title, created_at, updated_at). For a table with column names (id, title, created_at, updated_at).
For INSERT/ UPDATE based triggers, use following handlebars to access corresponding **data** fields. For INSERT/ UPDATE based triggers, use following handlebars to access corresponding **data** fields.
- {{ **data**.id }} - `{{ **data**.id }}`
- {{ **data**.title }} - `{{ **data**.title }}`
- {{ **data**.created_at }} - `{{ **data**.created_at }}`
- {{ **data**.updated_at }} - `{{ **data**.updated_at }}`
Note that, for Update trigger - all the fields in the ROW will be accessible, not just the field updated. Note that, for Update trigger - all the fields in the ROW will be accessible, not just the field updated.
For DELETE based triggers, **only** {{ data.id }} is accessible representing ID of the column deleted. For DELETE based triggers, **only** `{{ data.id }}` is accessible representing ID of the column deleted.
### JSON format ### JSON format
Use {{ json data }} to dump complete data & user information available in JSON format Use `{{ json data }}` to dump complete data & user information available in JSON format
### Additional references: ### Additional references:
@ -148,7 +148,7 @@ Detailed procedure for discord webhook described [here](https://support.discord.
- **Select Discord Channels**: Select from the drop down list, channel name configured in Step (2). Please click on 'Reload' if drop down list is empty. - **Select Discord Channels**: Select from the drop down list, channel name configured in Step (2). Please click on 'Reload' if drop down list is empty.
- **Body**: Message to be posted over Discord channel, via webhooks on trigger of configured event. - **Body**: Message to be posted over Discord channel, via webhooks on trigger of configured event.
- Body can contain plain text & - Body can contain plain text &
- Handlebars {{ }} - Handlebars `{{ }}`
## Slack ## Slack
@ -199,7 +199,7 @@ Detailed procedure for discord webhook described [here](https://support.discord.
### 3. Configure ### 3. Configure
- Open project and choose a table. - Open project and choose a table.
- Click 'More' > 'Webhooks'. - Click 'More' {">"} 'Webhooks'.
- Click 'Create webhook' - Click 'Create webhook'
- Configure webhook - Configure webhook
- **Title**: Name of your choice to identify this Webhook. - **Title**: Name of your choice to identify this Webhook.
@ -212,7 +212,7 @@ Detailed procedure for discord webhook described [here](https://support.discord.
- **Select Teams Channels**: Select from the drop down list, channel name configured in Step (2). Please click on 'Reload' if drop down list is empty. - **Select Teams Channels**: Select from the drop down list, channel name configured in Step (2). Please click on 'Reload' if drop down list is empty.
- **Body**: Message to be posted over Teams channel, via webhooks on trigger of configured event. - **Body**: Message to be posted over Teams channel, via webhooks on trigger of configured event.
- Body can contain plain text & - Body can contain plain text &
- Handlebars {{ }} - Handlebars `{{ }}`
## Webhook V2 ## Webhook V2

1
packages/nocodb/package.json

@ -47,6 +47,7 @@
"dependencies": { "dependencies": {
"@aws-sdk/client-kafka": "^3.410.0", "@aws-sdk/client-kafka": "^3.410.0",
"@aws-sdk/client-s3": "^3.423.0", "@aws-sdk/client-s3": "^3.423.0",
"@aws-sdk/lib-storage": "^3.451.0",
"@aws-sdk/s3-request-presigner": "^3.423.0", "@aws-sdk/s3-request-presigner": "^3.423.0",
"@google-cloud/storage": "^7.1.0", "@google-cloud/storage": "^7.1.0",
"@graphql-tools/merge": "^6.0.12", "@graphql-tools/merge": "^6.0.12",

10
packages/nocodb/src/db/BaseModelSqlv2.ts

@ -3032,7 +3032,7 @@ class BaseModelSqlv2 {
// insert one by one as fallback to get ids for sqlite and mysql // insert one by one as fallback to get ids for sqlite and mysql
if (insertOneByOneAsFallback && (this.isSqlite || this.isMySQL)) { if (insertOneByOneAsFallback && (this.isSqlite || this.isMySQL)) {
// sqlite and mysql doesnt support returning, so insert one by one and return ids // sqlite and mysql doesn't support returning, so insert one by one and return ids
response = []; response = [];
const aiPkCol = this.model.primaryKeys.find((pk) => pk.ai); const aiPkCol = this.model.primaryKeys.find((pk) => pk.ai);
@ -5194,9 +5194,7 @@ export function extractSortsObject(
else sort.fk_column_id = aliasColObjMap[s.replace(/^\+/, '')]?.id; else sort.fk_column_id = aliasColObjMap[s.replace(/^\+/, '')]?.id;
if (throwErrorIfInvalid && !sort.fk_column_id) if (throwErrorIfInvalid && !sort.fk_column_id)
NcError.unprocessableEntity( NcError.unprocessableEntity(`Invalid field: ${s.replace(/^[+-]/, '')}`);
`Invalid column '${s.replace(/^[+-]/, '')}' in sort`,
);
return new Sort(sort); return new Sort(sort);
}); });
@ -5360,7 +5358,7 @@ export function extractCondition(
validateFilterComparison(aliasColObjMap[alias].uidt, op, sub_op); validateFilterComparison(aliasColObjMap[alias].uidt, op, sub_op);
} else if (throwErrorIfInvalid) { } else if (throwErrorIfInvalid) {
NcError.unprocessableEntity(`Column '${alias}' not found.`); NcError.unprocessableEntity(`Invalid field: ${alias}`);
} }
return new Filter({ return new Filter({
@ -5404,7 +5402,7 @@ export function _wherePk(primaryKeys: Column[], id: unknown | unknown[]) {
} }
} }
return id; return where;
} }
const ids = Array.isArray(id) ? id : (id + '').split('___'); const ids = Array.isArray(id) ? id : (id + '').split('___');

4
packages/nocodb/src/db/conditionV2.ts

@ -155,9 +155,7 @@ const parseConditionV2 = async (
const column = await filter.getColumn(); const column = await filter.getColumn();
if (!column) { if (!column) {
if (throwErrorIfInvalid) { if (throwErrorIfInvalid) {
NcError.unprocessableEntity( NcError.unprocessableEntity(`Invalid field: ${filter.fk_column_id}`);
`Invalid column id '${filter.fk_column_id}' in filter`,
);
} }
return; return;
} }

2
packages/nocodb/src/db/generateLookupSelectQuery.ts

@ -54,7 +54,7 @@ export default async function generateLookupSelectQuery({
if (column.uidt === UITypes.Lookup) { if (column.uidt === UITypes.Lookup) {
lookupColOpt = await column.getColOptions<LookupColumn>(); lookupColOpt = await column.getColOptions<LookupColumn>();
} else if (column.uidt !== UITypes.LinkToAnotherRecord) { } else if (column.uidt !== UITypes.LinkToAnotherRecord) {
NcError.badRequest('Invalid column type'); NcError.badRequest('Invalid field type');
} }
await column.getColOptions<LookupColumn>(); await column.getColOptions<LookupColumn>();

4
packages/nocodb/src/db/sortV2.ts

@ -36,9 +36,7 @@ export default async function sortV2(
const column = await sort.getColumn(); const column = await sort.getColumn();
if (!column) { if (!column) {
if (throwErrorIfInvalid) { if (throwErrorIfInvalid) {
NcError.unprocessableEntity( NcError.unprocessableEntity(`Invalid field: ${sort.fk_column_id}`);
`Invalid column id '${sort.fk_column_id}' in sort`,
);
} }
continue; continue;
} }

2
packages/nocodb/src/helpers/catchError.ts

@ -324,7 +324,7 @@ export function extractDBError(error): {
/ Invalid object name '(\w+)'./i, / Invalid object name '(\w+)'./i,
); );
const extractMissingColMatch = error.message.match( const extractMissingColMatch = error.message.match(
/ Invalid column name '(\w+)'./i, / Invalid field: (\w+)./i,
); );
if (extractTableNameMatch && extractTableNameMatch[1]) { if (extractTableNameMatch && extractTableNameMatch[1]) {

4
packages/nocodb/src/helpers/getAst.ts

@ -73,9 +73,7 @@ const getAst = async ({
(f) => !colAliasMap[f] && !aliasColMap[f], (f) => !colAliasMap[f] && !aliasColMap[f],
); );
if (invalidFields.length) { if (invalidFields.length) {
NcError.unprocessableEntity( NcError.unprocessableEntity(`Invalid field: ${invalidFields[0]}`);
`Following fields are invalid: ${invalidFields.join(', ')}`,
);
} }
} }
} else { } else {

1
packages/nocodb/src/plugins/backblaze/Backblaze.ts

@ -54,6 +54,7 @@ export default class Backblaze implements IStorageAdapterV2 {
.get(url, { .get(url, {
httpAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }), httpAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }),
httpsAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }), httpsAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }),
// TODO - use stream instead of buffer
responseType: 'arraybuffer', responseType: 'arraybuffer',
}) })
.then((response) => { .then((response) => {

1
packages/nocodb/src/plugins/gcs/Gcs.ts

@ -110,6 +110,7 @@ export default class Gcs implements IStorageAdapterV2 {
.get(url, { .get(url, {
httpAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }), httpAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }),
httpsAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }), httpsAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }),
// TODO - use stream instead of buffer
responseType: 'arraybuffer', responseType: 'arraybuffer',
}) })
.then((response) => { .then((response) => {

1
packages/nocodb/src/plugins/linode/LinodeObjectStorage.ts

@ -53,6 +53,7 @@ export default class LinodeObjectStorage implements IStorageAdapterV2 {
.get(url, { .get(url, {
httpAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }), httpAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }),
httpsAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }), httpsAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }),
// TODO - use stream instead of buffer
responseType: 'arraybuffer', responseType: 'arraybuffer',
}) })
.then((response) => { .then((response) => {

1
packages/nocodb/src/plugins/mino/Minio.ts

@ -100,6 +100,7 @@ export default class Minio implements IStorageAdapterV2 {
.get(url, { .get(url, {
httpAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }), httpAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }),
httpsAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }), httpsAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }),
// TODO - use stream instead of buffer
responseType: 'arraybuffer', responseType: 'arraybuffer',
}) })
.then((response) => { .then((response) => {

1
packages/nocodb/src/plugins/ovhCloud/OvhCloud.ts

@ -53,6 +53,7 @@ export default class OvhCloud implements IStorageAdapterV2 {
.get(url, { .get(url, {
httpAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }), httpAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }),
httpsAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }), httpsAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }),
// TODO - use stream instead of buffer
responseType: 'arraybuffer', responseType: 'arraybuffer',
}) })
.then((response) => { .then((response) => {

12
packages/nocodb/src/plugins/s3/S3.ts

@ -2,6 +2,7 @@ import fs from 'fs';
import { promisify } from 'util'; import { promisify } from 'util';
import { GetObjectCommand, S3 as S3Client } from '@aws-sdk/client-s3'; import { GetObjectCommand, S3 as S3Client } from '@aws-sdk/client-s3';
import { getSignedUrl } from '@aws-sdk/s3-request-presigner'; import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
import { Upload } from '@aws-sdk/lib-storage';
import axios from 'axios'; import axios from 'axios';
import { useAgent } from 'request-filtering-agent'; import { useAgent } from 'request-filtering-agent';
import type { IStorageAdapterV2, XcFile } from 'nc-plugin'; import type { IStorageAdapterV2, XcFile } from 'nc-plugin';
@ -60,7 +61,7 @@ export default class S3 implements IStorageAdapterV2 {
.get(url, { .get(url, {
httpAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }), httpAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }),
httpsAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }), httpsAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }),
responseType: 'arraybuffer', responseType: 'stream',
}) })
.then((response) => { .then((response) => {
uploadParams.Body = response.data; uploadParams.Body = response.data;
@ -162,8 +163,13 @@ export default class S3 implements IStorageAdapterV2 {
private async upload(uploadParams): Promise<any> { private async upload(uploadParams): Promise<any> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
// call S3 to retrieve upload file to specified bucket // call S3 to retrieve upload file to specified bucket
this.s3Client const upload = new Upload({
.putObject({ ...this.defaultParams, ...uploadParams }) client: this.s3Client,
params: { ...this.defaultParams, ...uploadParams },
});
upload
.done()
.then((data) => { .then((data) => {
if (data) { if (data) {
resolve( resolve(

1
packages/nocodb/src/plugins/scaleway/ScalewayObjectStorage.ts

@ -103,6 +103,7 @@ export default class ScalewayObjectStorage implements IStorageAdapterV2 {
.get(url, { .get(url, {
httpAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }), httpAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }),
httpsAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }), httpsAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }),
// TODO - use stream instead of buffer
responseType: 'arraybuffer', responseType: 'arraybuffer',
}) })
.then((response) => { .then((response) => {

1
packages/nocodb/src/plugins/spaces/Spaces.ts

@ -53,6 +53,7 @@ export default class Spaces implements IStorageAdapterV2 {
.get(url, { .get(url, {
httpAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }), httpAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }),
httpsAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }), httpsAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }),
// TODO - use stream instead of buffer
responseType: 'arraybuffer', responseType: 'arraybuffer',
}) })
.then((response) => { .then((response) => {

1
packages/nocodb/src/plugins/upcloud/UpoCloud.ts

@ -53,6 +53,7 @@ export default class UpoCloud implements IStorageAdapterV2 {
.get(url, { .get(url, {
httpAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }), httpAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }),
httpsAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }), httpsAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }),
// TODO - use stream instead of buffer
responseType: 'arraybuffer', responseType: 'arraybuffer',
}) })
.then((response) => { .then((response) => {

1
packages/nocodb/src/plugins/vultr/Vultr.ts

@ -53,6 +53,7 @@ export default class Vultr implements IStorageAdapterV2 {
.get(url, { .get(url, {
httpAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }), httpAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }),
httpsAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }), httpsAgent: useAgent(url, { stopPortScanningByUrlRedirection: true }),
// TODO - use stream instead of buffer
responseType: 'arraybuffer', responseType: 'arraybuffer',
}) })
.then((response) => { .then((response) => {

205
pnpm-lock.yaml

@ -385,6 +385,9 @@ importers:
'@aws-sdk/client-s3': '@aws-sdk/client-s3':
specifier: ^3.423.0 specifier: ^3.423.0
version: 3.423.0 version: 3.423.0
'@aws-sdk/lib-storage':
specifier: ^3.451.0
version: 3.451.0(@aws-sdk/client-s3@3.423.0)
'@aws-sdk/s3-request-presigner': '@aws-sdk/s3-request-presigner':
specifier: ^3.423.0 specifier: ^3.423.0
version: 3.423.0 version: 3.423.0
@ -2035,6 +2038,22 @@ packages:
tslib: 2.6.2 tslib: 2.6.2
dev: false dev: false
/@aws-sdk/lib-storage@3.451.0(@aws-sdk/client-s3@3.423.0):
resolution: {integrity: sha512-pOtrE1Vs65J3k0bYvWw/zsQ6E80rZzS/jOMC9lQUUqXh8q0KTLq77K5+HCdadNHStXeZV3QJaSWajSR2qJKuyw==}
engines: {node: '>=14.0.0'}
peerDependencies:
'@aws-sdk/client-s3': ^3.0.0
dependencies:
'@aws-sdk/client-s3': 3.423.0
'@smithy/abort-controller': 2.0.10
'@smithy/middleware-endpoint': 2.2.0
'@smithy/smithy-client': 2.1.15
buffer: 5.6.0
events: 3.3.0
stream-browserify: 3.0.0
tslib: 2.6.2
dev: false
/@aws-sdk/middleware-bucket-endpoint@3.418.0: /@aws-sdk/middleware-bucket-endpoint@3.418.0:
resolution: {integrity: sha512-gj/mj1UfbKkGbQ1N4YUvjTTp8BVs5fO1QAL2AjFJ+jfJOToLReX72aNEkm7sPGbHML0TqOY4cQbJuWYy+zdD5g==} resolution: {integrity: sha512-gj/mj1UfbKkGbQ1N4YUvjTTp8BVs5fO1QAL2AjFJ+jfJOToLReX72aNEkm7sPGbHML0TqOY4cQbJuWYy+zdD5g==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
@ -6892,6 +6911,14 @@ packages:
tslib: 2.6.2 tslib: 2.6.2
dev: false dev: false
/@smithy/abort-controller@2.0.13:
resolution: {integrity: sha512-eeOPD+GF9BzF/Mjy3PICLePx4l0f3rG/nQegQHRLTloN5p1lSJJNZsyn+FzDnW8P2AduragZqJdtKNCxXozB1Q==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/types': 2.5.0
tslib: 2.6.2
dev: false
/@smithy/abort-controller@2.0.6: /@smithy/abort-controller@2.0.6:
resolution: {integrity: sha512-4I7g0lyGUlW2onf8mD76IzU37oRWSHsQ5zlW5MjDzgg4I4J9bOK4500Gx6qOuoN7+GulAnGLe1YwyrIluzhakg==} resolution: {integrity: sha512-4I7g0lyGUlW2onf8mD76IzU37oRWSHsQ5zlW5MjDzgg4I4J9bOK4500Gx6qOuoN7+GulAnGLe1YwyrIluzhakg==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
@ -7050,6 +7077,16 @@ packages:
tslib: 2.6.2 tslib: 2.6.2
dev: false dev: false
/@smithy/fetch-http-handler@2.2.6:
resolution: {integrity: sha512-PStY3XO1Ksjwn3wMKye5U6m6zxXpXrXZYqLy/IeCbh3nM9QB3Jgw/B0PUSLUWKdXg4U8qgEu300e3ZoBvZLsDg==}
dependencies:
'@smithy/protocol-http': 3.0.9
'@smithy/querystring-builder': 2.0.13
'@smithy/types': 2.5.0
'@smithy/util-base64': 2.0.1
tslib: 2.6.2
dev: false
/@smithy/hash-blob-browser@2.0.10: /@smithy/hash-blob-browser@2.0.10:
resolution: {integrity: sha512-U2+wIWWloOZ9DaRuz2sk9f7A6STRTlwdcv+q6abXDvS0TRDk8KGgUmfV5lCZy8yxFxZIA0hvHDNqcd25r4Hrew==} resolution: {integrity: sha512-U2+wIWWloOZ9DaRuz2sk9f7A6STRTlwdcv+q6abXDvS0TRDk8KGgUmfV5lCZy8yxFxZIA0hvHDNqcd25r4Hrew==}
dependencies: dependencies:
@ -7174,6 +7211,19 @@ packages:
tslib: 2.6.2 tslib: 2.6.2
dev: false dev: false
/@smithy/middleware-endpoint@2.2.0:
resolution: {integrity: sha512-tddRmaig5URk2106PVMiNX6mc5BnKIKajHHDxb7K0J5MLdcuQluHMGnjkv18iY9s9O0tF+gAcPd/pDXA5L9DZw==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/middleware-serde': 2.0.13
'@smithy/node-config-provider': 2.1.5
'@smithy/shared-ini-file-loader': 2.2.4
'@smithy/types': 2.5.0
'@smithy/url-parser': 2.0.13
'@smithy/util-middleware': 2.0.6
tslib: 2.6.2
dev: false
/@smithy/middleware-retry@2.0.13: /@smithy/middleware-retry@2.0.13:
resolution: {integrity: sha512-zuOva8xgWC7KYG8rEXyWIcZv2GWszO83DCTU6IKcf/FKu6OBmSE+EYv3EUcCGY+GfiwCX0EyJExC9Lpq9b0w5Q==} resolution: {integrity: sha512-zuOva8xgWC7KYG8rEXyWIcZv2GWszO83DCTU6IKcf/FKu6OBmSE+EYv3EUcCGY+GfiwCX0EyJExC9Lpq9b0w5Q==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
@ -7210,6 +7260,14 @@ packages:
tslib: 2.6.2 tslib: 2.6.2
dev: false dev: false
/@smithy/middleware-serde@2.0.13:
resolution: {integrity: sha512-tBGbeXw+XsE6pPr4UaXOh+UIcXARZeiA8bKJWxk2IjJcD1icVLhBSUQH9myCIZLNNzJIH36SDjUX8Wqk4xJCJg==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/types': 2.5.0
tslib: 2.6.2
dev: false
/@smithy/middleware-serde@2.0.6: /@smithy/middleware-serde@2.0.6:
resolution: {integrity: sha512-8/GODBngYbrS28CMZtaHIL4R9rLNSQ/zgb+N1OAZ02NwBUawlnLDcatve9YRzhJC/IWz0/pt+WimJZaO1sGcig==} resolution: {integrity: sha512-8/GODBngYbrS28CMZtaHIL4R9rLNSQ/zgb+N1OAZ02NwBUawlnLDcatve9YRzhJC/IWz0/pt+WimJZaO1sGcig==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
@ -7233,6 +7291,14 @@ packages:
tslib: 2.6.2 tslib: 2.6.2
dev: false dev: false
/@smithy/middleware-stack@2.0.7:
resolution: {integrity: sha512-L1KLAAWkXbGx1t2jjCI/mDJ2dDNq+rp4/ifr/HcC6FHngxho5O7A5bQLpKHGlkfATH6fUnOEx0VICEVFA4sUzw==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/types': 2.5.0
tslib: 2.6.2
dev: false
/@smithy/node-config-provider@2.0.13: /@smithy/node-config-provider@2.0.13:
resolution: {integrity: sha512-pPpLqYuJcOq1sj1EGu+DoZK47DUS4gepqSTNgRezmrjnzNlSU2/Dcc9Ebzs+WZ0Z5vXKazuE+k+NksFLo07/AA==} resolution: {integrity: sha512-pPpLqYuJcOq1sj1EGu+DoZK47DUS4gepqSTNgRezmrjnzNlSU2/Dcc9Ebzs+WZ0Z5vXKazuE+k+NksFLo07/AA==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
@ -7253,6 +7319,16 @@ packages:
tslib: 2.6.2 tslib: 2.6.2
dev: false dev: false
/@smithy/node-config-provider@2.1.5:
resolution: {integrity: sha512-3Omb5/h4tOCuKRx4p4pkYTvEYRCYoKk52bOYbKUyz/G/8gERbagsN8jFm4FjQubkrcIqQEghTpQaUw6uk+0edw==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/property-provider': 2.0.14
'@smithy/shared-ini-file-loader': 2.2.4
'@smithy/types': 2.5.0
tslib: 2.6.2
dev: false
/@smithy/node-http-handler@2.1.2: /@smithy/node-http-handler@2.1.2:
resolution: {integrity: sha512-PdEEDCShuM8zxGoaRxmGB/1ikB8oeqz+ZAF9VIA8FCP3E59j8zDTF+wCELoWd1Y6gtxr+RcTAg5sA8nvn5qH/w==} resolution: {integrity: sha512-PdEEDCShuM8zxGoaRxmGB/1ikB8oeqz+ZAF9VIA8FCP3E59j8zDTF+wCELoWd1Y6gtxr+RcTAg5sA8nvn5qH/w==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
@ -7275,6 +7351,17 @@ packages:
tslib: 2.6.2 tslib: 2.6.2
dev: false dev: false
/@smithy/node-http-handler@2.1.9:
resolution: {integrity: sha512-+K0q3SlNcocmo9OZj+fz67gY4lwhOCvIJxVbo/xH+hfWObvaxrMTx7JEzzXcluK0thnnLz++K3Qe7Z/8MDUreA==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/abort-controller': 2.0.13
'@smithy/protocol-http': 3.0.9
'@smithy/querystring-builder': 2.0.13
'@smithy/types': 2.5.0
tslib: 2.6.2
dev: false
/@smithy/property-provider@2.0.11: /@smithy/property-provider@2.0.11:
resolution: {integrity: sha512-kzuOadu6XvrnlF1iXofpKXYmo4oe19st9/DE8f5gHNaFepb4eTkR8gD8BSdTnNnv7lxfv6uOwZPg4VS6hemX1w==} resolution: {integrity: sha512-kzuOadu6XvrnlF1iXofpKXYmo4oe19st9/DE8f5gHNaFepb4eTkR8gD8BSdTnNnv7lxfv6uOwZPg4VS6hemX1w==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
@ -7283,6 +7370,14 @@ packages:
tslib: 2.6.2 tslib: 2.6.2
dev: false dev: false
/@smithy/property-provider@2.0.14:
resolution: {integrity: sha512-k3D2qp9o6imTrLaXRj6GdLYEJr1sXqS99nLhzq8fYmJjSVOeMg/G+1KVAAc7Oxpu71rlZ2f8SSZxcSxkevuR0A==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/types': 2.5.0
tslib: 2.6.2
dev: false
/@smithy/property-provider@2.0.5: /@smithy/property-provider@2.0.5:
resolution: {integrity: sha512-cAFSUhX6aiHcmpWfrCLKvwBtgN1F6A0N8qY/8yeSi0LRLmhGqsY1/YTxFE185MCVzYbqBGXVr9TBv4RUcIV4rA==} resolution: {integrity: sha512-cAFSUhX6aiHcmpWfrCLKvwBtgN1F6A0N8qY/8yeSi0LRLmhGqsY1/YTxFE185MCVzYbqBGXVr9TBv4RUcIV4rA==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
@ -7323,6 +7418,14 @@ packages:
tslib: 2.6.2 tslib: 2.6.2
dev: false dev: false
/@smithy/protocol-http@3.0.9:
resolution: {integrity: sha512-U1wl+FhYu4/BC+rjwh1lg2gcJChQhytiNQSggREgQ9G2FzmoK9sACBZvx7thyWMvRyHQTE22mO2d5UM8gMKDBg==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/types': 2.5.0
tslib: 2.6.2
dev: false
/@smithy/querystring-builder@2.0.10: /@smithy/querystring-builder@2.0.10:
resolution: {integrity: sha512-uujJGp8jzrrU1UHme8sUKEbawQTcTmUWsh8rbGXYD/lMwNLQ+9jQ9dMDWbbH9Hpoa9RER1BeL/38WzGrbpob2w==} resolution: {integrity: sha512-uujJGp8jzrrU1UHme8sUKEbawQTcTmUWsh8rbGXYD/lMwNLQ+9jQ9dMDWbbH9Hpoa9RER1BeL/38WzGrbpob2w==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
@ -7332,6 +7435,15 @@ packages:
tslib: 2.6.2 tslib: 2.6.2
dev: false dev: false
/@smithy/querystring-builder@2.0.13:
resolution: {integrity: sha512-JhXKwp3JtsFUe96XLHy/nUPEbaXqn6r7xE4sNaH8bxEyytE5q1fwt0ew/Ke6+vIC7gP87HCHgQpJHg1X1jN2Fw==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/types': 2.5.0
'@smithy/util-uri-escape': 2.0.0
tslib: 2.6.2
dev: false
/@smithy/querystring-builder@2.0.6: /@smithy/querystring-builder@2.0.6:
resolution: {integrity: sha512-HnU00shCGoV8vKJZTiNBkNvR9NogU3NIUaVMAGJPSqNGJj3psWo+TUrC0BVCDcwiCljXwXCFGJqIcsWtClrktQ==} resolution: {integrity: sha512-HnU00shCGoV8vKJZTiNBkNvR9NogU3NIUaVMAGJPSqNGJj3psWo+TUrC0BVCDcwiCljXwXCFGJqIcsWtClrktQ==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
@ -7349,6 +7461,14 @@ packages:
tslib: 2.6.2 tslib: 2.6.2
dev: false dev: false
/@smithy/querystring-parser@2.0.13:
resolution: {integrity: sha512-TEiT6o8CPZVxJ44Rly/rrsATTQsE+b/nyBVzsYn2sa75xAaZcurNxsFd8z1haoUysONiyex24JMHoJY6iCfLdA==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/types': 2.5.0
tslib: 2.6.2
dev: false
/@smithy/querystring-parser@2.0.6: /@smithy/querystring-parser@2.0.6:
resolution: {integrity: sha512-i4LKoXHP7pTFAPjLIJyQXYOhWokbcFha3WWsX74sAKmuluv0XM2cxONZoFxwEzmWhsNyM6buSwJSZXyPiec0AQ==} resolution: {integrity: sha512-i4LKoXHP7pTFAPjLIJyQXYOhWokbcFha3WWsX74sAKmuluv0XM2cxONZoFxwEzmWhsNyM6buSwJSZXyPiec0AQ==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
@ -7393,6 +7513,14 @@ packages:
tslib: 2.6.2 tslib: 2.6.2
dev: false dev: false
/@smithy/shared-ini-file-loader@2.2.4:
resolution: {integrity: sha512-9dRknGgvYlRIsoTcmMJXuoR/3ekhGwhRq4un3ns2/byre4Ql5hyUN4iS0x8eITohjU90YOnUCsbRwZRvCkbRfw==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/types': 2.5.0
tslib: 2.6.2
dev: false
/@smithy/signature-v4@1.1.0: /@smithy/signature-v4@1.1.0:
resolution: {integrity: sha512-fDo3m7YqXBs7neciOePPd/X9LPm5QLlDMdIC4m1H6dgNLnXfLMFNIxEfPyohGA8VW9Wn4X8lygnPSGxDZSmp0Q==} resolution: {integrity: sha512-fDo3m7YqXBs7neciOePPd/X9LPm5QLlDMdIC4m1H6dgNLnXfLMFNIxEfPyohGA8VW9Wn4X8lygnPSGxDZSmp0Q==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
@ -7421,6 +7549,16 @@ packages:
tslib: 2.6.2 tslib: 2.6.2
dev: false dev: false
/@smithy/smithy-client@2.1.15:
resolution: {integrity: sha512-rngZcQu7Jvs9UbHihK1EI67RMPuzkc3CJmu4MBgB7D7yBnMGuFR86tq5rqHfL2gAkNnMelBN/8kzQVvZjNKefQ==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/middleware-stack': 2.0.7
'@smithy/types': 2.5.0
'@smithy/util-stream': 2.0.20
tslib: 2.6.2
dev: false
/@smithy/smithy-client@2.1.3: /@smithy/smithy-client@2.1.3:
resolution: {integrity: sha512-nSMMp2AKqcG/ruzCY01ogrMdbq/WS1cvGStTsw7yd6bTpp/bGtlOgXvy3h7e0zP7w2DH1AtvIwzYBD6ejZePsQ==} resolution: {integrity: sha512-nSMMp2AKqcG/ruzCY01ogrMdbq/WS1cvGStTsw7yd6bTpp/bGtlOgXvy3h7e0zP7w2DH1AtvIwzYBD6ejZePsQ==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
@ -7469,6 +7607,13 @@ packages:
tslib: 2.6.2 tslib: 2.6.2
dev: false dev: false
/@smithy/types@2.5.0:
resolution: {integrity: sha512-/a31lYofrMBkJb3BuPlYJTMKDj0hUmKUP6JFZQu6YVuQVoAjubiY0A52U9S0Uysd33n/djexCUSNJ+G9bf3/aA==}
engines: {node: '>=14.0.0'}
dependencies:
tslib: 2.6.2
dev: false
/@smithy/url-parser@2.0.10: /@smithy/url-parser@2.0.10:
resolution: {integrity: sha512-4TXQFGjHcqru8aH5VRB4dSnOFKCYNX6SR1Do6fwxZ+ExT2onLsh2W77cHpks7ma26W5jv6rI1u7d0+KX9F0aOw==} resolution: {integrity: sha512-4TXQFGjHcqru8aH5VRB4dSnOFKCYNX6SR1Do6fwxZ+ExT2onLsh2W77cHpks7ma26W5jv6rI1u7d0+KX9F0aOw==}
dependencies: dependencies:
@ -7477,6 +7622,14 @@ packages:
tslib: 2.6.2 tslib: 2.6.2
dev: false dev: false
/@smithy/url-parser@2.0.13:
resolution: {integrity: sha512-okWx2P/d9jcTsZWTVNnRMpFOE7fMkzloSFyM53fA7nLKJQObxM2T4JlZ5KitKKuXq7pxon9J6SF2kCwtdflIrA==}
dependencies:
'@smithy/querystring-parser': 2.0.13
'@smithy/types': 2.5.0
tslib: 2.6.2
dev: false
/@smithy/url-parser@2.0.6: /@smithy/url-parser@2.0.6:
resolution: {integrity: sha512-9i6j5QW6bapHZ4rtkXOAm0hOUG1+5IVdVJXNSUTcNskwJchZH5IQuDNPCbgUi/u2P8EZazKt4wXT51QxOXCz1A==} resolution: {integrity: sha512-9i6j5QW6bapHZ4rtkXOAm0hOUG1+5IVdVJXNSUTcNskwJchZH5IQuDNPCbgUi/u2P8EZazKt4wXT51QxOXCz1A==}
dependencies: dependencies:
@ -7493,6 +7646,14 @@ packages:
tslib: 2.6.2 tslib: 2.6.2
dev: false dev: false
/@smithy/util-base64@2.0.1:
resolution: {integrity: sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/util-buffer-from': 2.0.0
tslib: 2.6.2
dev: false
/@smithy/util-body-length-browser@2.0.0: /@smithy/util-body-length-browser@2.0.0:
resolution: {integrity: sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==} resolution: {integrity: sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==}
dependencies: dependencies:
@ -7611,6 +7772,14 @@ packages:
tslib: 2.6.2 tslib: 2.6.2
dev: false dev: false
/@smithy/util-middleware@2.0.6:
resolution: {integrity: sha512-7W4uuwBvSLgKoLC1x4LfeArCVcbuHdtVaC4g30kKsD1erfICyQ45+tFhhs/dZNeQg+w392fhunCm/+oCcb6BSA==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/types': 2.5.0
tslib: 2.6.2
dev: false
/@smithy/util-retry@2.0.0: /@smithy/util-retry@2.0.0:
resolution: {integrity: sha512-/dvJ8afrElasuiiIttRJeoS2sy8YXpksQwiM/TcepqdRVp7u4ejd9C4IQURHNjlfPUT7Y6lCDSa2zQJbdHhVTg==} resolution: {integrity: sha512-/dvJ8afrElasuiiIttRJeoS2sy8YXpksQwiM/TcepqdRVp7u4ejd9C4IQURHNjlfPUT7Y6lCDSa2zQJbdHhVTg==}
engines: {node: '>= 14.0.0'} engines: {node: '>= 14.0.0'}
@ -7642,6 +7811,20 @@ packages:
tslib: 2.6.2 tslib: 2.6.2
dev: false dev: false
/@smithy/util-stream@2.0.20:
resolution: {integrity: sha512-tT8VASuD8jJu0yjHEMTCPt1o5E3FVzgdsxK6FQLAjXKqVv5V8InCnc0EOsYrijgspbfDqdAJg7r0o2sySfcHVg==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/fetch-http-handler': 2.2.6
'@smithy/node-http-handler': 2.1.9
'@smithy/types': 2.5.0
'@smithy/util-base64': 2.0.1
'@smithy/util-buffer-from': 2.0.0
'@smithy/util-hex-encoding': 2.0.0
'@smithy/util-utf8': 2.0.2
tslib: 2.6.2
dev: false
/@smithy/util-stream@2.0.9: /@smithy/util-stream@2.0.9:
resolution: {integrity: sha512-Fn2/3IMwqu0l2hOC7K3bbtSqFEJ6nOzMLoPVIhuH84yw/95itNkFBwVbIIiAfDaout0ZfZ26+5ch86E2q3avww==} resolution: {integrity: sha512-Fn2/3IMwqu0l2hOC7K3bbtSqFEJ6nOzMLoPVIhuH84yw/95itNkFBwVbIIiAfDaout0ZfZ26+5ch86E2q3avww==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
@ -7686,6 +7869,14 @@ packages:
tslib: 2.6.2 tslib: 2.6.2
dev: false dev: false
/@smithy/util-utf8@2.0.2:
resolution: {integrity: sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/util-buffer-from': 2.0.0
tslib: 2.6.2
dev: false
/@smithy/util-waiter@2.0.10: /@smithy/util-waiter@2.0.10:
resolution: {integrity: sha512-yQjwWVrwYw+/f3hFQccE3zZF7lk6N6xtNcA6jvhWFYhnyKAm6B2mX8Gzftl0TbgoPUpzCvKYlvhaEpVtRpVfVw==} resolution: {integrity: sha512-yQjwWVrwYw+/f3hFQccE3zZF7lk6N6xtNcA6jvhWFYhnyKAm6B2mX8Gzftl0TbgoPUpzCvKYlvhaEpVtRpVfVw==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
@ -10829,6 +11020,13 @@ packages:
isarray: 1.0.0 isarray: 1.0.0
dev: false dev: false
/buffer@5.6.0:
resolution: {integrity: sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==}
dependencies:
base64-js: 1.5.1
ieee754: 1.2.1
dev: false
/buffer@5.7.1: /buffer@5.7.1:
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
dependencies: dependencies:
@ -22314,6 +22512,13 @@ packages:
engines: {node: '>=4', npm: '>=6'} engines: {node: '>=4', npm: '>=6'}
dev: false dev: false
/stream-browserify@3.0.0:
resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==}
dependencies:
inherits: 2.0.4
readable-stream: 3.6.2
dev: false
/stream-combiner@0.0.4: /stream-combiner@0.0.4:
resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==}
dependencies: dependencies:

Loading…
Cancel
Save