diff --git a/docs-v2/README.md b/docs-v2/README.md
index 3512907456923..6a004b71b2f59 100644
--- a/docs-v2/README.md
+++ b/docs-v2/README.md
@@ -22,7 +22,7 @@ We're moving from VuePress to Nextra. Here's what's the same and what's differen
- New docs are here, in the `docs-v2/` directory.
- All docs are still Markdown. Now MDX files instead of just Markdown, so extensions have been renamed to `.mdx`.
- Keep images in `public/images/foo.png`, reference with ``
-- Leaf nodes in VuePress were at files like `/docs/workspaces/sso/google/README.md`. Nextra allows leaf nodes to be non-index files like `/docs/workspaces/sso/google.mdx`, so there's no need for the final directory, which simplifies things.
+- Leaf nodes in VuePress were at files like `/docs/workflows/workspaces/sso/google/README.md`. Nextra allows leaf nodes to be non-index files like `/docs/workflows/workspaces/sso/google.mdx`, so there's no need for the final directory, which simplifies things.
- VuePress used Vue, Nextra uses React. All of the custom components used in MDX files are either [built-in Nextra components](https://nextra.site/docs/guide/built-ins) or Pipedream-specific components in `components/`, ported from Vue.
- Learn the [built-in Nextra components](https://nextra.site/docs/guide/built-ins). All the `::: tip`, `::: warning`, or other special VuePress components have an equivalent Nextra component.
@@ -50,8 +50,8 @@ pages
workspaces/
index.mdx # /docs/workspaces
sso/
- index.mdx # /docs/workspaces/sso
- google.mdx # /docs/workspaces/sso/google
+ index.mdx # /docs/workflows/workspaces/sso
+ google.mdx # /docs/workflows/workspaces/sso/google
```
The `_meta.tsx` files in each directory defines a mapping between the labels in the sidebar and the files in that directory. If you want to add an item to the sidebar, you'll probably want to edit the `_meta.tsx` file. [See the Nextra docs](https://nextra.site/docs/docs-theme/page-configuration) for more info.
diff --git a/docs-v2/next.config.mjs b/docs-v2/next.config.mjs
index 06480a838ab3a..dad89eee0553c 100644
--- a/docs-v2/next.config.mjs
+++ b/docs-v2/next.config.mjs
@@ -16,6 +16,26 @@ export default withNextra({
},
],
},
+ async rewrites() {
+ return [
+ {
+ source: "/abuse",
+ destination: "/hidden/abuse",
+ },
+ {
+ source: "/scheduling-future-tasks",
+ destination: "/hidden/scheduling-future-tasks",
+ },
+ {
+ source: "/status",
+ destination: "/hidden/status",
+ },
+ {
+ source: "/subprocessors",
+ destination: "/hidden/subprocessors",
+ },
+ ];
+ },
env: {
PIPEDREAM_NODE_VERSION: "20",
PIPEDREAM_BASE_URL: "https://pipedream.com",
diff --git a/docs-v2/package.json b/docs-v2/package.json
index 258737507003e..40699353f29d9 100644
--- a/docs-v2/package.json
+++ b/docs-v2/package.json
@@ -18,7 +18,6 @@
"homepage": "https://pipedream.com",
"dependencies": {
"@docsearch/react": "^3.6.1",
- "@pipedream/sdk": "^0.1.9",
"@vercel/analytics": "^1.3.1",
"chalk": "^5.3.0",
"jest": "^29.7.0",
diff --git a/docs-v2/pages/_meta.tsx b/docs-v2/pages/_meta.tsx
index 42ddc6480d3f1..475593add603a 100644
--- a/docs-v2/pages/_meta.tsx
+++ b/docs-v2/pages/_meta.tsx
@@ -1,30 +1,14 @@
export default {
"index": "What is Pipedream?",
"quickstart": "Quickstart",
- "workspaces": "Workspaces",
- "projects": "Projects",
+ "integrations": "Integrations",
"workflows": "Workflows",
- "connect": {
- title: "Connect",
- },
- "code": "Code",
- "data-stores": "Data Stores",
- "databases": "Databases",
- "connected-accounts": "Connected Accounts",
- "apps": "Integrations",
- "components": "Components",
- "sources": "Sources",
- "event-history": "Event History",
- "http": "HTTP",
- "environment-variables": "Environment Variables",
+ "connect": "Connect",
"rest-api": "REST API",
- "cli": "CLI",
- "destinations": "Destinations",
- "user-settings": "User and Billing Settings",
- "troubleshooting": "Troubleshooting",
- "pricing": "Pricing FAQ",
+ "pricing": "Pricing",
+ "account": "Account",
"privacy-and-security": "Security",
- "limits": "Limits",
+ "troubleshooting": "Troubleshooting",
"glossary": "Glossary of Terms",
"support": {
title: "Support",
@@ -44,51 +28,10 @@ export default {
href: "https://status.pipedream.com",
newWindow: true,
},
- "version": {
- title: "Version",
- type: "menu",
- items: {
- v3: {
- title: "Current",
- href: "https://pipedream.com/docs",
- },
- v2: {
- title: "Linear (classic)",
- href: "https://pipedream.com/docs/v2",
- },
- },
- },
- "abuse": {
- display: "hidden",
- },
- "airtable": {
- display: "hidden",
- },
- "examples": {
- display: "hidden",
- },
- "migrate-from-v1": {
- display: "hidden",
- },
- "new-feature-or-bug": {
- display: "hidden",
- },
- "nodejs20-faq-2024-02": {
- display: "hidden",
- },
- "scheduling-future-tasks": {
- display: "hidden",
- },
- "shopify-faq-2023-10": {
- display: "hidden",
- },
- "subprocessors": {
- display: "hidden",
- },
- "pipedream-axios": {
+ "deprecated": {
display: "hidden",
},
- "status": {
+ "hidden": {
display: "hidden",
},
} as const
diff --git a/docs-v2/pages/account/_meta.tsx b/docs-v2/pages/account/_meta.tsx
new file mode 100644
index 0000000000000..ac5cbfd10a9dc
--- /dev/null
+++ b/docs-v2/pages/account/_meta.tsx
@@ -0,0 +1,4 @@
+export default {
+ "user-settings": "User Settings",
+ "billing-settings": "Billing Settings",
+} as const
diff --git a/docs-v2/pages/account/billing-settings.mdx b/docs-v2/pages/account/billing-settings.mdx
new file mode 100644
index 0000000000000..f1a498395a51a
--- /dev/null
+++ b/docs-v2/pages/account/billing-settings.mdx
@@ -0,0 +1,43 @@
+import Callout from '@/components/Callout'
+
+# Billing Settings
+
+You'll find information on your usage data (for specific [Pipedream limits](/workflows/limits/)) in your [Billing Settings](https://pipedream.com/settings/billing). You can also upgrade to [paid plans](https://pipedream.com/pricing) from this page.
+
+## Subscription
+
+You can upgrade to [paid plans](https://pipedream.com/pricing) from this section.
+
+If you've already upgraded, you'll see an option to **Manage Subscription** here, which directs you to your personal Stripe portal. Here, you can change your payment method, review the details of previous invoices, and more.
+
+## Usage
+
+[Credits](/pricing/#credits) are Pipedream's billable unit, and users on the [free tier](/pricing/#free-tier) are limited on the number of daily free credits allocated. The **Usage** section displays a chart of the daily credits across a historical range of time to provide insight into your usage patterns.
+
+Hover over a specific column in the chart to see the number of credits run for that specific day:
+
+
+
+_Click_ on a specific column to see credits for that day, broken out by workflow / source:
+
+
+
+Users on the free tier will see the last 30 days of usage in this chart. Users on [paid plans](https://pipedream.com/pricing) will see the cumulative usage tied to their current billing period.
+
+## Compute Budget
+
+Control the maximum number of compute credits permitted on your account with an _Credit Budget_.
+
+This will restrict your account-wide usage to the specified number of [credits](/pricing/#credits) on a monthly or daily basis. The compute budget does not apply to credits incurred by [dedicated workers](/workflows/building-workflows/settings/#eliminate-cold-starts).
+
+To enable this feature, _click_ on the toggle and define your maximum number of credits in the period.
+
+
+Due to how credits are accrued, there may be cases where your credit usage may _slightly_ go over the cap.
+
+In an example scenario, with a cap set at 20 credits and a long-running workflow that uses 10 credits per run, it's possible that two concurrent events trigger the workflow, and the cap won't apply until after the concurrent events are processed.
+
+
+## Limits
+
+For users on the [Free tier](/pricing/#free-tier), this section displays your usage towards your [credits quota](/workflows/limits/#daily-credits-limit) for the current UTC day.
diff --git a/docs-v2/pages/user-settings.mdx b/docs-v2/pages/account/user-settings.mdx
similarity index 54%
rename from docs-v2/pages/user-settings.mdx
rename to docs-v2/pages/account/user-settings.mdx
index 514624bc02dff..665b625b84cc0 100644
--- a/docs-v2/pages/user-settings.mdx
+++ b/docs-v2/pages/account/user-settings.mdx
@@ -1,27 +1,23 @@
import Callout from '@/components/Callout'
import VideoPlayer from '@/components/VideoPlayer'
-# User and Billing Settings
+# User Settings
You can find important account details, text editor configuration, and more in your [User Settings](https://pipedream.com/user).
-## Account
-
-You'll find your Pipedream email and other basic account details in your [Account Settings](https://pipedream.com/user).
-
-### Changing your email
+## Changing your email
Pipedream sends system emails to the email address tied to your Pipedream login. You can change the email address to which these emails are delivered by modifying the **Email** in your Account Settings. Once changed, an email will be delivered to the new address requesting you verify it.
Pipedream marketing emails may still be sent to the original email address you used when signing up for Pipedream. To change the email address tied to marketing emails, please [reach out to our team](https://pipedream.com/support).
-### Two-Factor Authentication
+## Two-Factor Authentication
Two-factor authentication (2FA) adds an additional layer of security for your Pipedream account and is recommended for all users.
-#### Configuring 2FA
+### Configuring 2FA
1. Open your [Account Settings](https://pipedream.com/user)
2. Click **Configure** under **Two-Factor Authentication**
@@ -36,7 +32,7 @@ Save your recovery codes
If you lose access to your authenticator app and your recovery codes, you will permanently lose access to your Pipedream account. **Pipedream Support cannot recover these accounts.**
-#### Signing in with 2FA
+### Signing in with 2FA
1. You'll be prompted to enter your OTP the next time you sign in to Pipedream
2. When prompted, you can enter the OTP from your authenticator app or a recovery code
@@ -52,9 +48,9 @@ Each recovery code is a one-time-use code, so make sure to generate new recovery
Pipedream recommends enabling 2FA with your identity provider.
-#### Requiring 2-Factor Authentication
+### Requiring 2-Factor Authentication
-Workspaces on the Business plan can [require all workspace members to configure 2FA](/workspaces/#requiring-two-factor-authentication) in order to log in to Pipedream.
+Workspaces on the Business plan can [require all workspace members to configure 2FA](/workflows/workspaces/#requiring-two-factor-authentication) in order to log in to Pipedream.
If you are a member of any workspace where 2FA is required, you cannot disable 2FA, but you can still reconfigure it in your [account settings](https://pipedream.com/account/) if necessary.
@@ -64,13 +60,13 @@ Admins and Owners control 2FA settings
Only workspace owner and admin members can enable or disable 2FA for an entire workspace.
-### Pipedream API Key
+## Pipedream API Key
-Pipedream provides a [REST API](/api/) for interacting with Pipedream programmatically. You'll find your API key here, which you use to [authorize requests to the API](/rest-api/auth/).
+Pipedream provides a [REST API](/rest-api/) for interacting with Pipedream programmatically. You'll find your API key here, which you use to [authorize requests to the API](/rest-api/auth/).
You can revoke and regenerate your API key from here at any time.
-### Delete Account
+## Delete Account
You can delete your Pipedream account at any time by visiting your Account Settings and pressing the **Delete your Account** button. Account deletion is immediately and irreversible.
@@ -86,46 +82,4 @@ For example, you can:
## Environment Variables
-Environment variables allow you to securely store secrets or other config values that you can access in Pipedream workflows via `process.env`. [Read more about environment variables here](/environment-variables/).
-
-## Billing and Usage
-
-You'll find information on your usage data (for specific [Pipedream limits](/limits/)) in your [Billing Settings](https://pipedream.com/settings/billing). You can also upgrade to [paid plans](https://pipedream.com/pricing) from this page.
-
-### Subscription
-
-You can upgrade to [paid plans](https://pipedream.com/pricing) from this section.
-
-If you've already upgraded, you'll see an option to **Manage Subscription** here, which directs you to your personal Stripe portal. Here, you can change your payment method, review the details of previous invoices, and more.
-
-### Usage
-
-[Credits](/pricing/#credits) are Pipedream's billable unit, and users on the [free tier](/pricing/#free-tier) are limited on the number of daily free credits allocated. The **Usage** section displays a chart of the daily credits across a historical range of time to provide insight into your usage patterns.
-
-Hover over a specific column in the chart to see the number of credits run for that specific day:
-
-
-
-_Click_ on a specific column to see credits for that day, broken out by workflow / source:
-
-
-
-Users on the free tier will see the last 30 days of usage in this chart. Users on [paid plans](https://pipedream.com/pricing) will see the cumulative usage tied to their current billing period.
-
-### Compute Budget
-
-Control the maximum number of compute credits permitted on your account with an _Credit Budget_.
-
-This will restrict your account-wide usage to the specified number of [credits](/pricing/#credits) on a monthly or daily basis. The compute budget does not apply to credits incurred by [dedicated workers](/workflows/settings/#eliminate-cold-starts).
-
-To enable this feature, _click_ on the toggle and define your maximum number of credits in the period.
-
-
-Due to how credits are accrued, there may be cases where your credit usage may _slightly_ go over the cap.
-
-In an example scenario, with cap set at 20 credits and long running workflow that uses 10 credits per run; it's possible that two concurrent events trigger the workflow, and the cap will won't apply until after the concurrent events are processed.
-
-
-### Limits
-
-For users on the [Free tier](/pricing/#free-tier), this section displays your usage towards your [credits quota](/limits/#daily-credits-limit) for the current UTC day.
+Environment variables allow you to securely store secrets or other config values that you can access in Pipedream workflows via `process.env`. [Read more about environment variables here](/workflows/environment-variables/).
diff --git a/docs-v2/pages/api/_meta.tsx b/docs-v2/pages/api/_meta.tsx
deleted file mode 100644
index 3b40729b0ac15..0000000000000
--- a/docs-v2/pages/api/_meta.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-export default {
- "index": "Overview",
- "auth": "Authorizing API requests",
- "rest": "REST API",
- "sse": "SSE API",
-} as const
diff --git a/docs-v2/pages/apps/_meta.tsx b/docs-v2/pages/apps/_meta.tsx
deleted file mode 100644
index c7b4098626f09..0000000000000
--- a/docs-v2/pages/apps/_meta.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-export default {
- "index": "Integrated Apps",
- "contributing": "Contributing",
- "app-partners": "App Partners",
-} as const
diff --git a/docs-v2/pages/code/nodejs/images/console-dir.png b/docs-v2/pages/code/nodejs/images/console-dir.png
deleted file mode 100644
index b2e8a5129ee1d..0000000000000
Binary files a/docs-v2/pages/code/nodejs/images/console-dir.png and /dev/null differ
diff --git a/docs-v2/pages/code/nodejs/images/console-log-error.png b/docs-v2/pages/code/nodejs/images/console-log-error.png
deleted file mode 100644
index 2a598bf115498..0000000000000
Binary files a/docs-v2/pages/code/nodejs/images/console-log-error.png and /dev/null differ
diff --git a/docs-v2/pages/code/nodejs/images/dollar-end.png b/docs-v2/pages/code/nodejs/images/dollar-end.png
deleted file mode 100644
index f513aa05bae28..0000000000000
Binary files a/docs-v2/pages/code/nodejs/images/dollar-end.png and /dev/null differ
diff --git a/docs-v2/pages/code/nodejs/images/exception-in-code-cell.png b/docs-v2/pages/code/nodejs/images/exception-in-code-cell.png
deleted file mode 100644
index cea2fe586fcb4..0000000000000
Binary files a/docs-v2/pages/code/nodejs/images/exception-in-code-cell.png and /dev/null differ
diff --git a/docs-v2/pages/code/nodejs/images/exception.png b/docs-v2/pages/code/nodejs/images/exception.png
deleted file mode 100644
index a2d724888bc61..0000000000000
Binary files a/docs-v2/pages/code/nodejs/images/exception.png and /dev/null differ
diff --git a/docs-v2/pages/code/nodejs/images/new-button.png b/docs-v2/pages/code/nodejs/images/new-button.png
deleted file mode 100644
index 7281a37aa97a1..0000000000000
Binary files a/docs-v2/pages/code/nodejs/images/new-button.png and /dev/null differ
diff --git a/docs-v2/pages/code/nodejs/images/new-code-step.png b/docs-v2/pages/code/nodejs/images/new-code-step.png
deleted file mode 100644
index 7907282d68ac1..0000000000000
Binary files a/docs-v2/pages/code/nodejs/images/new-code-step.png and /dev/null differ
diff --git a/docs-v2/pages/code/nodejs/images/syntax-error.png b/docs-v2/pages/code/nodejs/images/syntax-error.png
deleted file mode 100644
index 8557e0d96e796..0000000000000
Binary files a/docs-v2/pages/code/nodejs/images/syntax-error.png and /dev/null differ
diff --git a/docs-v2/pages/code/nodejs/images/this-checkpoint-observability.png b/docs-v2/pages/code/nodejs/images/this-checkpoint-observability.png
deleted file mode 100644
index c30947d4621da..0000000000000
Binary files a/docs-v2/pages/code/nodejs/images/this-checkpoint-observability.png and /dev/null differ
diff --git a/docs-v2/pages/code/python/faqs.mdx b/docs-v2/pages/code/python/faqs.mdx
deleted file mode 100644
index 08d8d427bebaf..0000000000000
--- a/docs-v2/pages/code/python/faqs.mdx
+++ /dev/null
@@ -1,23 +0,0 @@
-# Frequently Asked Questions about Python
-
-## What's the difference between `def handler(pd)` and the `pipedream` package for Python code steps?
-
-The pd object passed to the handler method lets you exit the [workflow early](/code/python/#ending-a-workflow-early), [integrate a Data Store](/code/python/using-data-stores/), and [use connected accounts](/code/python/auth/) into your Python code steps.
-
-However, at this time there are issues with our Python interpreter that is causing an `ECONNRESET` error.
-
-If you need [to use data from other steps](/code/python/#using-data-from-another-step) or [export data to other steps](/code/python/#sending-data-downstream-to-other-steps) in your workflow, we recommend using the `pipedream` package module.
-
-If you need to use a Data Store in your workflow, we recommend using a [pre-built action](/data-stores/) to retrieve or store data or [Node.js's Data Store](/code/nodejs/using-data-stores/) capabilities.
-
-## I've tried installing a Python package with a normal import and the magic comment system, but I still can't. What can I do?
-
-Some Python packages require binaries present within the environment in order to function properly. Or they include binaries but those binaries are not compatible with the Pipedream workflow environment.
-
-Unfortunately we cannot support these types of packages at this time, but if you have an issue importing a PyPI package into a Python code step [please open a issue](https://github.com/PipedreamHQ/pipedream/issues/new/choose).
-
-## Can I publish my Python code as a reusable pre-built action or trigger like you can with Node.js?
-
-Not at this time. Pipedream only supports Python as a code step language. The Components system only supports Node.js at this time.
-
-You can still duplicate Python code steps within the same workflow, but to reuse a code step, you'll need to copy and paste the Python code to another workflow.
diff --git a/docs-v2/pages/code/python/images/print-logs.png b/docs-v2/pages/code/python/images/print-logs.png
deleted file mode 100644
index 49f35ea46bf0b..0000000000000
Binary files a/docs-v2/pages/code/python/images/print-logs.png and /dev/null differ
diff --git a/docs-v2/pages/components/migrating/index.mdx b/docs-v2/pages/components/migrating/index.mdx
deleted file mode 100644
index bbdcbc1594ce1..0000000000000
--- a/docs-v2/pages/components/migrating/index.mdx
+++ /dev/null
@@ -1,183 +0,0 @@
-# Migrating from Legacy Actions to Component Actions
-
-
-
-## Overview
-This document is for developers who created legacy actions in [Pipedream's UI](https://pipedream.com/actions). The purpose is to help users migrate legacy actions to Pipedream's new [component model](/components/).
-
-## Key Changes
-
-**Capture user input via `props` instead of `params`**
-
-The component model does not support `params`. You need to migrate `params` references to [`props`](/components/api/#props). Unlike `params`, `props` must be explicitly declared and defined prior to using them in code (in the old model, an input form was automatically generated when `params` were used in code — `params` were not explicitly declared).
-
-**Declare app `props` to use managed auth**
-
-The model for linking an app to legacy actions as well as the syntax for referencing credentials is different with Pipedream components. In the old model, apps were linked to steps in Pipedream's workflow builder UI, and credentials were referenced via the `auths` object.
-
-When using the component model, apps are defined as `props` and credentials are referenced as properties of the app. For example, to use managed auth for GitHub, the component `props` must contain a key (`gh` in the example below) with an app definition for the value (the app definition is an object):
-
-```javascript
-gh: {
- type: "app",
- app: "github"
-}
-```
-
-The component's `run()` method can then reference the credentials for GitHub via `this.gh.$auth.oauth_access_token`.
-
-**Develop locally and host on GitHub**
-Actions are no longer developed in Pipedream's UI. Develop actions locally using your preferred editor, publish to Pipedream via CLI and maintain the code in your own GitHub repo.
-
-**Update with a click**
-When you publish a new version of an action, you can update actions used in workflows with a click (updating legacy actions in workflows requires action steps to be deleted, re-added and re-configured).
-
-**Support for async options**
-Async options allow action authors to render a paginated drop down menu allowing users to select from values that are programmatically-generated. The most common use case is to populate the drop down based on results of an API request (e.g., to list Google Sheets in a user's drive).
-
-**Simplified discovery**
-Actions you publish are now grouped under **My Actions** when adding a step to a workflow. NOTE: this option will appear in the workflow builder *after* you publish your first action.
-
-## Getting Started
-
-Ready to develop your first component action? We recommend starting with our [quickstart guide](/components/quickstart/nodejs/actions/). Then review both our [component API reference](/components/api/) and [actions published to Pipedream’s GitHub repo](https://github.com/PipedreamHQ/pipedream/tree/master/components).
-
-## Migration Example
-
-Let's walk through an example that migrates code for a legacy action to a Pipedream component.
-
-### Legacy Code Example
-
-Following is the code for the legacy action to get a GitHub repo (GitHub was linked to this action via Pipedream's UI, so it's not declared in the code):
-
-```javascript
-const config = {
- url: `https://api.github.com/repos/${params.owner}/${params.repo}`,
- headers: {
- Authorization: `Bearer ${auths.github.oauth_access_token}`,
- }
-}
-return await require("@pipedreamhq/platform").axios(this, config)
-```
-
-Also, following is the associated JSON schema that defines metadata for the `params` inputs:
-
-```json
-{
- "type": "object",
- "properties": {
- "owner": {
- "type": "string",
- "description": "Name of repository owner."
- },
- "repo": {
- "type": "string",
- "description": "Name of repository."
- }
- },
- "required": [
- "owner",
- "repo"
- ]
-}
-```
-
-### Converting to the Component Model
-
-To convert the code above to the component model, we need to:
-
-1. Link the GitHub app to the component using `props` (so we can use Pipedream managed auth for GitHub)
-2. Define `props` for `owner` and `repo` so we can capture user input. The definition for each prop includes the `type` and `description` metadata. Additionally, since all the fields are required, we do not need to set the `optional` property (set `optional` to `true` for optional `props`). This metadata was previously captured in the JSON schema.
-3. Replace references to `params` in the `run()` method. `props` are bound to `this` (e.g., `this.owner` and `this.repo`).
-4. Update the reference to the GitHub OAuth token from `auths.github.oauth_access_token` to `this.github.$auth.oauth_access_token` (note: `github` in this context references the name of the prop, not the name of the app; if the prop was named `gh` then the auth would be referenced via `this.gh.$auth.oauth_access_token`).
-5. Replace the `@pipedreamhq/platform` npm package with the standard `axios` package.
-
-```javascript
-const axios = require("axios")
-
-module.exports = {
- type: "action",
- name: "Get Repo Example",
- key: "github_get-repo-example",
- version: "0.0.1",
- props: {
- github: {
- type: "app",
- app: "github",
- },
- owner: {
- type: "string",
- description: "Name of repository owner.",
- },
- repo: {
- type: "string",
- description: "Name of repository.",
- }
- },
- async run() {
- const config = {
- url: `https://api.github.com/repos/${this.owner}/${this.repo}`,
- headers: {
- Authorization: `Bearer ${this.github.$auth.oauth_access_token}`,
- }
- }
-
- return (await axios(config)).data
- },
-}
-```
-
-### Advanced: Using Async Options
-
-Next, let's take the example one step further. Instead of asking users to enter the owner and repo name, let's use `async options` so users can select the repo from a drop-down menu. To do that, we'll:
-
-1. Remove the `owner` and `repo` props
-2. Add a `repoFullName` prop that makes a request to `https://api.github.com/user/repos` to retrieve a list of (paginated) repos
-3. Update the `run()` function to use the `repoFullName` prop
-
-```javascript
-const axios = require("axios")
-
-module.exports = {
- type: "action",
- name: "Get Repo Example",
- key: "github_get-repo-example",
- version: "0.0.2",
- props: {
- github: {
- type: "app",
- app: "github",
- },
- repoFullName: {
- type: "string",
- label: "Repo",
- async options(page) {
- const repos = (await axios({
- url: "https://api.github.com/user/repos",
- params: {
- page,
- per_page: 100,
- },
- headers: {
- Authorization: `Bearer ${this.github.$auth.oauth_access_token}`,
- }
- })).data
- return repos.map((repo) => repo.full_name);
- },
- },
- },
- async run() {
- const config = {
- url: `https://api.github.com/repos/${this.repoFullName}`,
- headers: {
- Authorization: `Bearer ${this.github.$auth.oauth_access_token}`,
- }
- }
- return (await axios(config)).data
- },
-}
-```
-
-### Publishing and Using Actions
-
-In the legacy model, actions were published via Pipedream's UI. To learn how to publish component-based actions using Pipedream's CLI and use them in workflows, review our [quickstart guide](/components/quickstart/nodejs/actions/). To contribute actions to the Pipedream registry, review our [guidelines](/components/guidelines/).
diff --git a/docs-v2/pages/connect/api-proxy.mdx b/docs-v2/pages/connect/api-proxy.mdx
index 1a8092c206023..c29f1216b741f 100644
--- a/docs-v2/pages/connect/api-proxy.mdx
+++ b/docs-v2/pages/connect/api-proxy.mdx
@@ -4,8 +4,8 @@ import Callout from '@/components/Callout'
Pipedream Connect provides a proxy API that you can use to send authenticated requests to any integrated API on behalf of your users, which is useful in a few scenarios:
-1. You need code-level control and you want to use [Pipedream's OAuth](/connect/managed-auth/oauth-clients#using-pipedream-oauth) instead of [your own OAuth client](/connect/managed-auth/oauth-clients#using-a-custom-oauth-client)
-2. There isn't a [pre-built tool](/connect/components) (action) for the app, or you need to modify the request
+1. You need code-level control and you want to use [Pipedream's OAuth](/connect/managed-auth/oauth-clients/#using-pipedream-oauth) instead of [your own OAuth client](/connect/managed-auth/oauth-clients/#using-a-custom-oauth-client)
+2. There isn't a [pre-built tool](/connect/components/) (action) for the app, or you need to modify the request
3. You want to avoid storing end user credentials in your app
## Overview
@@ -19,19 +19,19 @@ The Connect proxy enables you to interface with any integrated API and make auth

-Before getting started with the Connect proxy, make sure you've already gone through the [managed auth quickstart](/connect/managed-auth/quickstart) for Pipedream Connect.
+Before getting started with the Connect proxy, make sure you've already gone through the [managed auth quickstart](/connect/managed-auth/quickstart/) for Pipedream Connect.
## Getting started
-You can send requests to the Connect proxy using the [Pipedream SDK](/connect/sdk) with a fetch-style interface, or by making a request to the [REST API](/rest-api/connect/proxy).
+You can send requests to the Connect proxy using the [Pipedream SDK](/connect/sdk/) with a fetch-style interface, or by making a request to the [REST API](/rest-api/connect/proxy/).
-- A [Pipedream OAuth client](/rest-api/auth#oauth) to make authenticated requests to Pipedream's API
-- Connect [environment](/connect/environments) (ex, `production` or `development`)
-- The [external user ID](/connect/api#external-users) for your end user (ex, `abc-123`)
-- The [account ID](/connect/api#accounts) for your end user's connected account (ex, `apn_1234567`)
+- A [Pipedream OAuth client](/rest-api/auth/#oauth) to make authenticated requests to Pipedream's API
+- Connect [environment](/connect/environments/) (ex, `production` or `development`)
+- The [external user ID](/connect/api/#external-users) for your end user (ex, `abc-123`)
+- The [account ID](/connect/api/#accounts) for your end user's connected account (ex, `apn_1234567`)
-Refer to the full Connect API [here](/connect/api).
+Refer to the full Connect API [here](/connect/api/).
### Authenticating on behalf of your user
@@ -41,12 +41,12 @@ For apps that require a different authentication method, you should include the
```javascript
/*
-OpenAI requires that you pass the API key
+OpenAI requires that you pass the API key
in the `Authorization` header with the `Bearer` prefix:
*/
headers: {
- authorization: "Bearer {{api_key}}",
+ authorization: "Bearer {{api_key}}",
}
// Pipedream will replace the `{{api_key}}` macro with the actual API key
@@ -59,7 +59,7 @@ in the `Authorization` header with a custom `Zoho-oauthtoken` prefix:
*/
headers: {
- authorization: "Zoho-oauthtoken {{oauth_access_token}}",
+ authorization: "Zoho-oauthtoken {{oauth_access_token}}",
}
// Pipedream will replace the `{{oauth_access_token}}` macro with the actual token
@@ -99,7 +99,7 @@ const resp = await pd.makeProxyRequest(
url: "https://slack.com/api/chat.postMessage", // Include any query params you need; no need to Base64 encode the URL if using the SDK
options: {
method: "POST",
- headers: {
+ headers: {
hello: "world!" // Include any headers you need to send to the downstream API
},
body: {
diff --git a/docs-v2/pages/connect/api.mdx b/docs-v2/pages/connect/api.mdx
index abeda08894333..cdc7e94f8c8a5 100644
--- a/docs-v2/pages/connect/api.mdx
+++ b/docs-v2/pages/connect/api.mdx
@@ -7,7 +7,7 @@ Pipedream provides a TypeScript SDK and a REST API to interact with the Connect
## REST API base URL
-Pipedream Connect resources are scoped to [projects](/projects), so you'll need to pass [the project's ID](/projects#finding-your-projects-id) as a part of the base URL:
+Pipedream Connect resources are scoped to [projects](/workflows/projects/), so you'll need to pass [the project's ID](/workflows/projects/#finding-your-projects-id) as a part of the base URL:
```
https://api.pipedream.com/v1/connect/{project_id}
@@ -41,13 +41,13 @@ or a specific version:
## Authentication
-See the [REST API Authentication docs](/rest-api/auth).
+See the [REST API Authentication docs](/rest-api/auth/).
### TypeScript SDK (server)
Most of your interactions with the Connect API will happen on the server, to protect API requests and user credentials. You'll use the SDK in [your frontend](#typescript-sdk-browser) to let users connect accounts. Once connected, you'll use the SDK on the server to retrieve credentials, invoke workflows on their behalf, and more.
-[Create a Pipedream OAuth client](/rest-api/auth#oauth) and instantiate the SDK with your client ID and secret:
+[Create a Pipedream OAuth client](/rest-api/auth/#oauth) and instantiate the SDK with your client ID and secret:
```typescript
import { createBackendClient } from "@pipedream/sdk/server";
@@ -70,7 +70,7 @@ You'll primarily use the browser SDK to let your users securely connect apps fro
1. [Create a short-lived token on your server](#create-a-new-token)
2. Initiate auth with that token to securely connect an account for a specific user
-Here's a Next.js example [from our quickstart](/connect/managed-auth/quickstart):
+Here's a Next.js example [from our quickstart](/connect/managed-auth/quickstart/):
```typescript
import { createFrontendClient } from "@pipedream/sdk/browser"
@@ -104,7 +104,7 @@ export default function Home() {
## Environment
-Some API endpoints accept an [environment](/connect/environments) parameter. This lets you specify the environment (`production` or `development`) where resources will live in your project.
+Some API endpoints accept an [environment](/connect/environments/) parameter. This lets you specify the environment (`production` or `development`) where resources will live in your project.
Always set the environment when you create the SDK client:
@@ -207,7 +207,7 @@ curl -X POST https://api.pipedream.com/v1/connect/rate_limits \
**Example usage**
```bash
-# The response will include a rate limit token.
+# The response will include a rate limit token.
# Pass it as a header in your downstream requests to the Connect API.
# Below is an example request that runs the "List Commits" action for the Gitlab app.
@@ -232,13 +232,13 @@ curl -X POST "https://api.pipedream.com/v1/connect/{your_project_id}/actions/run
### Invoke workflows
-You can use the SDK to [invoke workflows on behalf of any end user](/connect/workflows). **Write one workflow, run it for all of your users**.
+You can use the SDK to [invoke workflows on behalf of any end user](/connect/workflows/). **Write one workflow, run it for all of your users**.
### Tokens
Your app will initiate the account connection flow for your end users in your frontend. To securely scope connection to a specific end user, on your server, **you retrieve a short-lived token for that user**, and return that token to your frontend.
-See [the Connect tokens docs](/connect/tokens) for more information.
+See [the Connect tokens docs](/connect/tokens/) for more information.
#### Create a new token
@@ -250,7 +250,7 @@ POST /{project_id}/tokens
`project_id` **string**
-[The project's ID](/projects#finding-your-projects-id)
+[The project's ID](/workflows/projects/#finding-your-projects-id)
##### Body parameters
@@ -273,19 +273,19 @@ When using the Connect API to make requests from a client environment like a bro
`success_redirect_uri` **string** (_optional_)
-When using [Connect Link](/connect/connect-link), you can optionally redirect your end user to the `success_redirect_uri` on successful completion of the auth flow.
+When using [Connect Link](/connect/connect-link/), you can optionally redirect your end user to the `success_redirect_uri` on successful completion of the auth flow.
---
`error_redirect_uri` **string** (_optional_)
-When using [Connect Link](/connect/connect-link), you can optionally redirect your end user to the `error_redirect_uri` on any errors in the auth flow. This lets you handle errors in whatever way you want in your own app.
+When using [Connect Link](/connect/connect-link/), you can optionally redirect your end user to the `error_redirect_uri` on any errors in the auth flow. This lets you handle errors in whatever way you want in your own app.
---
`webhook_uri` **string** (_optional_)
-Pipedream will send events on successful auth, or any errors, to this URL via webhook. [See the webhooks docs](/connect/webhooks) for more information.
+Pipedream will send events on successful auth, or any errors, to this URL via webhook. [See the webhooks docs](/connect/webhooks/) for more information.
##### Examples
@@ -395,7 +395,7 @@ GET /{project_id}/accounts/
`project_id` **string**
-[The project's ID](/projects#finding-your-projects-id)
+[The project's ID](/workflows/projects/#finding-your-projects-id)
##### Query parameters
@@ -403,13 +403,13 @@ GET /{project_id}/accounts/
The ID or name slug the app you'd like to retrieve. For example, Slack's unique app ID is `app_OkrhR1`, and its name slug is `slack`.
-You can find the app's ID in the response from the [List apps](/rest-api#list-apps) endpoint, and the name slug under the **Authentication** section of any [app page](https://pipedream.com/apps).
+You can find the app's ID in the response from the [List apps](/rest-api/#list-apps) endpoint, and the name slug under the **Authentication** section of any [app page](https://pipedream.com/apps).
---
`oauth_app_id` **string** (_optional_)
-The ID of the [OAuth app](/connect/managed-auth/quickstart#create-a-pipedream-oauth-client) you'd like to retrieve accounts for.
+The ID of the [OAuth app](/connect/managed-auth/quickstart/#create-a-pipedream-oauth-client) you'd like to retrieve accounts for.
---
@@ -428,7 +428,7 @@ Never return user credentials to the client
-To retrieve the credentials for any account in `production` for OAuth apps (Slack, Google Sheets, etc), the connected account must be using [your own OAuth client](/connect/managed-auth/oauth-clients#using-a-custom-oauth-client). You can only retrieve end user credentials for accounts that are using Pipedream's OAuth clients in `development`. [Learn more here](/connect/managed-auth/oauth-clients#using-pipedream-oauth).
+To retrieve the credentials for any account in `production` for OAuth apps (Slack, Google Sheets, etc), the connected account must be using [your own OAuth client](/connect/managed-auth/oauth-clients/#using-a-custom-oauth-client). You can only retrieve end user credentials for accounts that are using Pipedream's OAuth clients in `development`. [Learn more here](/connect/managed-auth/oauth-clients/#using-pipedream-oauth).
##### Examples
@@ -662,7 +662,7 @@ GET /{project_id}/accounts/{account_id}
`project_id` **string**
-[The project's ID](/projects#finding-your-projects-id)
+[The project's ID](/workflows/projects/#finding-your-projects-id)
---
@@ -681,7 +681,7 @@ Never return user credentials to the client
-To retrieve the credentials for any account in `production` for OAuth apps (Slack, Google Sheets, etc), the connected account must be using [your own OAuth client](/connect/managed-auth/oauth-clients#using-a-custom-oauth-client). You can only retrieve end user credentials for accounts that are using Pipedream's OAuth clients in `development`. [Learn more here](/connect/managed-auth/oauth-clients#using-pipedream-oauth).
+To retrieve the credentials for any account in `production` for OAuth apps (Slack, Google Sheets, etc), the connected account must be using [your own OAuth client](/connect/managed-auth/oauth-clients/#using-a-custom-oauth-client). You can only retrieve end user credentials for accounts that are using Pipedream's OAuth clients in `development`. [Learn more here](/connect/managed-auth/oauth-clients/#using-pipedream-oauth).
##### Examples
@@ -835,7 +835,7 @@ DELETE /{project_id}/accounts/{account_id}
`project_id` **string**
-[The project's ID](/projects#finding-your-projects-id)
+[The project's ID](/workflows/projects/#finding-your-projects-id)
---
@@ -922,13 +922,13 @@ DELETE /{project_id}/apps/{app_id}/accounts
`project_id` **string**
-[The project's ID](/projects#finding-your-projects-id)
+[The project's ID](/workflows/projects/#finding-your-projects-id)
---
`app_id` **string**
-The app ID for which you want to delete all connected accounts. `app_id` can be `oauth_app_id` for [OAuth apps](/connect/managed-auth/quickstart#create-a-pipedream-oauth-client) or name slug for key-based apps, which you can find under the **Authentication** section of any [app page](https://pipedream.com/apps)
+The app ID for which you want to delete all connected accounts. `app_id` can be `oauth_app_id` for [OAuth apps](/connect/managed-auth/quickstart/#create-a-pipedream-oauth-client) or name slug for key-based apps, which you can find under the **Authentication** section of any [app page](https://pipedream.com/apps)
##### Examples
@@ -1011,7 +1011,7 @@ DELETE /{project_id}/users/{external_user_id}
`project_id` **string**
-[The project's ID](/projects#finding-your-projects-id)
+[The project's ID](/workflows/projects/#finding-your-projects-id)
---
@@ -1113,7 +1113,7 @@ The ID or name slug the app you'd like to retrieve. For example, Slack's unique
app ID is `app_OkrhR1`, and its name slug is `slack`.
You can find the app's ID in the response from the [List
-apps](/rest-api#list-apps) endpoint, and the name slug under the
+apps](/rest-api/#list-apps) endpoint, and the name slug under the
**Authentication** section of any [app page](https://pipedream.com/apps).
---
@@ -1121,7 +1121,7 @@ apps](/rest-api#list-apps) endpoint, and the name slug under the
`q` **string** (_optional_)
A search query to filter the components by key (see the [component structure
-table](/components/api#component-structure)).
+table](/workflows/contributing/components/api/#component-structure)).
##### Examples
@@ -1258,7 +1258,7 @@ Either `triggers`, `actions`, or `components`.
`component_key` **string**
The key that identifies the component (see the [component structure
-table](/components/api#component-structure)).
+table](/workflows/contributing/components/api/#component-structure)).
##### Examples
@@ -1415,7 +1415,7 @@ want to retrieve accounts for.
`id` **string**
The key that identifies the component (see the [component structure
-table](/components/api#component-structure)).
+table](/workflows/contributing/components/api/#component-structure)).
---
@@ -1598,7 +1598,7 @@ Reload the component's props after configuring a dynamic prop, based on the
current component's configuration. This endpoint will use the component's
configuration to retrieve a new list of props depending on the value of the
props that were configured so far. See the [Dynamic
-Props](/connect/components#dynamic-props-optional) section for more information.
+Props](/connect/workflows/contributing/components#dynamic-props-optional) section for more information.
```text
GET /{component_type}/props
@@ -1630,7 +1630,7 @@ want to retrieve accounts for.
`id` **string**
The key that identifies the component (see the [component structure
-table](/components/api#component-structure)).
+table](/workflows/contributing/components/api/#component-structure)).
---
@@ -1833,7 +1833,7 @@ POST /actions/run
`id` **string**
The key that identifies the action component (see the [component structure
-table](/components/api#component-structure)).
+table](/workflows/contributing/components/api/#component-structure)).
---
@@ -2022,7 +2022,7 @@ POST /triggers/deploy
`id` **string**
The key that identifies the action component (see the [component structure
-table](/components/api#component-structure)).
+table](/workflows/contributing/components/api/#component-structure)).
---
@@ -3501,4 +3501,3 @@ curl -X PUT \
]
}
```
-
diff --git a/docs-v2/pages/connect/components.mdx b/docs-v2/pages/connect/components.mdx
index f320df2e2145b..641a6693c50cd 100644
--- a/docs-v2/pages/connect/components.mdx
+++ b/docs-v2/pages/connect/components.mdx
@@ -3,13 +3,13 @@ import Callout from '@/components/Callout'
# Pre-built tools for your app or agent
-Pipedream Connect provides APIs to embed pre-built tools ([triggers and actions](/components)) directly in your application
-or AI agent, enabling access to 10,000+ built-in API operations. Enable [your end users](/connect/api#external-users) to
+Pipedream Connect provides APIs to embed pre-built tools ([triggers and actions](/workflows/contributing/components/)) directly in your application
+or AI agent, enabling access to 10,000+ built-in API operations. Enable [your end users](/connect/api/#external-users) to
configure, deploy, and invoke Pipedream triggers and actions for more than {process.env.PUBLIC_APPS} APIs.
## What are triggers and actions?
-In Pipedream, we call triggers and actions [components](/components), which are self-contained executable units of code. Your end users configure the inputs and these components produce a
+In Pipedream, we call triggers and actions [components](/workflows/contributing/components/), which are self-contained executable units of code. Your end users configure the inputs and these components produce a
result that's exported as output. These components are developed and maintained by Pipedream
and our community and their source code is available in our [public Github repo](https://github.com/PipedreamHQ/pipedream/tree/master/components).
@@ -26,21 +26,21 @@ Check out the [public demo app](https://pdrm.co/connect) to see the API and SDK
### Use your own frontend
- See below to get started with the REST API
-- Refer to the [full API reference](/connect/api#components) for supported SDK methods as well
+- Refer to the [full API reference](/connect/api/#components) for supported SDK methods as well
## Getting started
-Refer to the [Connect API docs](/connect/api) for the full API reference. Below is a quickstart with a few specific examples.
+Refer to the [Connect API docs](/connect/api/) for the full API reference. Below is a quickstart with a few specific examples.
-You can skip steps 1 and 2 if you already know the component you want to use or if you'd prefer to [pass a natural language prompt to Pipedream's component search API](/rest-api#search-for-registry-components).
+You can skip steps 1 and 2 if you already know the component you want to use or if you'd prefer to [pass a natural language prompt to Pipedream's component search API](/rest-api/#search-for-registry-components).
### Authenticate to the Pipedream API
-Before sending requests to the API, make sure to [authenticate using a Pipedream OAuth client](/rest-api/auth#oauth):
+Before sending requests to the API, make sure to [authenticate using a Pipedream OAuth client](/rest-api/auth/#oauth):
@@ -221,7 +221,7 @@ Here's the response:
To configure and run a component for your end users, you need to understand
the component's definition. Now that you have the component's key from the previous step,
you can retrieve its structure from the Pipedream API. See the [component
-structure](/components/api#component-structure) section in our docs for more
+structure](/workflows/contributing/components/api/#component-structure) section in our docs for more
details.
As an example, the following API call will return the structure of the **List
@@ -249,7 +249,7 @@ curl -X https://api.pipedream.com/v1/connect/{project_id}/components/gitlab-list
The response will contain the component's structure, including its user-friendly name,
version, and most importantly, the configuration options the component accepts
-(also known as [props](/components/api#props) or "properties").
+(also known as [props](/workflows/contributing/components/api/#props) or "properties").
Here's an example of the response for the component in the example above:
```json
@@ -299,7 +299,7 @@ your end users, as described in the next section.
Component execution on behalf of your end users requires a few preliminary
steps, focused on getting the right input parameters (aka
-[props](/workflows/using-props)) to the component.
+[props](/workflows/building-workflows/using-props/)) to the component.
Configuring each prop for a component often involves an API call to retrieve the possible values,
unless the values that a prop can take are static or free-form. The endpoint is accessible at:
@@ -454,7 +454,7 @@ For example, to retrieve the configuration options for the `refName` prop:
The set of props that a component can accept might not be static, and may change
depending on the values of prior props. Props that behave this way are called
-[dynamic props](/components/api#dynamic-props), and they need to be configured
+[dynamic props](/workflows/contributing/components/api/#dynamic-props), and they need to be configured
in a different way. Props that are dynamic will have a `reloadProps` attribute
set to `true` in the component's definition.
@@ -555,8 +555,8 @@ To illustrate, the response for the request above would look like this:
### Execution
Once all the props have been configured, the component can be invoked. Pipedream
-supports two types of components: [actions](/components#actions) and
-[sources](/components#sources) (aka triggers).
+supports two types of components: [actions](/workflows/contributing/components/api/#actions) and
+[sources](/workflows/contributing/components/api/#sources) (aka triggers).
Actions are components that perform a task by taking an input either during
[configuration](#configure-the-component) and/or during invocation (usually both), and
@@ -639,7 +639,7 @@ The output of executing the action will be a JSON object containing the
following fields:
1. `exports`: all the named exports produced by the action, like when calling
- [`$.export` in a Node.js](/code/nodejs#using-export) component.
+ [`$.export` in a Node.js](/workflows/building-workflows/code/nodejs/#using-export) component.
2. `os`: a list of observations produced by the action (e.g. logs, errors, etc).
3. `ret`: the return value of the action, if any.
@@ -676,9 +676,9 @@ above:
#### Deploying a source
-Because sources are exercised by events that happen on a third-party service,
-their semantics are different from actions. Once a source is configured, it must
-be deployed to start listening for events. When deploying a source, you
+Because sources are exercised by events that happen on a third-party service,
+their semantics are different from actions. Once a source is configured, it must
+be deployed to start listening for events. When deploying a source, you
can define either a webhook URL or a Pipedream workflow ID to consume those events.
Deploying a source is done by sending a payload similar to the one used for
diff --git a/docs-v2/pages/connect/index.mdx b/docs-v2/pages/connect/index.mdx
index 825c94d8dd96a..a6018294c854d 100644
--- a/docs-v2/pages/connect/index.mdx
+++ b/docs-v2/pages/connect/index.mdx
@@ -5,23 +5,23 @@ import VideoPlayer from "@/components/VideoPlayer";
# Pipedream Connect
-**Connect provides a developer toolkit that lets you add {process.env.PUBLIC_APPS}+ integrations to your app or AI agent.** You can build AI agents, in-app messaging, CRM syncs, [and much more](/connect/use-cases), all in a few minutes. You have full, code-level control over how these integrations work in your app. You handle your product, Pipedream simplifies the integration.
+**Connect provides a developer toolkit that lets you add {process.env.PUBLIC_APPS}+ integrations to your app or AI agent.** You can build AI agents, in-app messaging, CRM syncs, [and much more](/connect/use-cases/), all in a few minutes. You have full, code-level control over how these integrations work in your app. You handle your product, Pipedream simplifies the integration.

## Use managed auth
- Handle authorization or accept API keys on behalf of your users, for any of Pipedream's [{process.env.PUBLIC_APPS}+ APIs](https://pipedream.com/apps)
-- Use the [Client SDK](https://github.com/PipedreamHQ/pipedream/tree/master/packages/sdk) or [Connect Link](/connect/managed-auth/quickstart#or-use-connect-link) to accept auth in minutes
+- Use the [Client SDK](https://github.com/PipedreamHQ/pipedream/tree/master/packages/sdk) or [Connect Link](/connect/managed-auth/quickstart/#or-use-connect-link) to accept auth in minutes
- Ship new integrations quickly with Pipedream's approved OAuth clients, or use your own
## Act on behalf of your users
-- Retrieve OAuth access tokens and API keys for your end users with Pipedream's [REST API](/connect/api)
+- Retrieve OAuth access tokens and API keys for your end users with Pipedream's [REST API](/connect/api/)
- Add 10k pre-built tools and triggers from {process.env.PUBLIC_APPS}+ APIs to your AI agent or embed them directly in your SaaS app
-- Develop and deploy complex multi-step [workflows](/connect/workflows) in our best-in-class [visual builder](/workflows)
-- Send custom API requests while still avoiding dealing with customer credentials with the [Connect proxy](/connect/api-proxy)
+- Develop and deploy complex multi-step [workflows](/connect/workflows/) in our best-in-class [visual builder](/workflows/building-workflows/)
+- Send custom API requests while still avoiding dealing with customer credentials with the [Connect proxy](/connect/api-proxy/)
{/* */}
@@ -34,11 +34,11 @@ Pipedream Connect lets you build any API integration into your product in minute
- **CRM syncs**: Sync data between your app and Salesforce, HubSpot, or any CRM
- **Spreadsheet integrations**: Sync data between your app and Google Sheets, Airtable, or any spreadsheet
-[and much more](/connect/use-cases).
+[and much more](/connect/use-cases/).
## Getting started
-Visit [the managed auth quickstart](/connect/quickstart) to build your first integration.
+Visit [the managed auth quickstart](/connect/quickstart/) to build your first integration.
## Plans and pricing
@@ -46,11 +46,11 @@ Visit [the managed auth quickstart](/connect/quickstart) to build your first int
## Security
-Pipedream takes the security of our products seriously. See [details on Connect security](/privacy-and-security#pipedream-connect) and [our general security docs](/privacy-and-security). Please send us any questions or [suspected vulnerabilities](/privacy-and-security#reporting-a-vulnerability). You can also get a copy of our [SOC 2 Type 2 report](/privacy-and-security#soc-2), [sign HIPAA BAAs](/privacy-and-security#hipaa), and get information on other practices and controls.
+Pipedream takes the security of our products seriously. See [details on Connect security](/privacy-and-security/#pipedream-connect) and [our general security docs](/privacy-and-security/). Please send us any questions or [suspected vulnerabilities](/privacy-and-security/#reporting-a-vulnerability). You can also get a copy of our [SOC 2 Type 2 report](/privacy-and-security/#soc-2), [sign HIPAA BAAs](/privacy-and-security/#hipaa), and get information on other practices and controls.
### Storing user credentials, token refresh
-All credentials and tokens are sent to Pipedream securely over HTTPS, and encrypted at rest. [See our security docs on credentials](/privacy-and-security#third-party-oauth-grants-api-keys-and-environment-variables) for more information.
+All credentials and tokens are sent to Pipedream securely over HTTPS, and encrypted at rest. [See our security docs on credentials](/privacy-and-security/#third-party-oauth-grants-api-keys-and-environment-variables) for more information.
### How to secure your Connect apps
@@ -64,5 +64,5 @@ All credentials and tokens are sent to Pipedream securely over HTTPS, and encryp
- **App**: GitHub, Notion, Slack, Google Sheets, and more. The app is the API you want your users to connect to in your product. See the [full list here](https://pipedream.com/apps).
- **Developer**: This is probably you, the Pipedream customer who's developing an app and wants to use Connect to make API requests on behalf of your end users.
- **End User**: Your customer or user, whose data you want to access on their behalf. End users are identifed via the `external_user_id` param in the Connect SDK and API.
-- **Connected Account**: The account your end user connects. [Read more about connected accounts](/connected-accounts).
-- **OAuth Client**: This is admittedly a bit of an overloaded term and refers both to [custom OAuth clients](/connect/managed-auth/oauth-clients) you create in Pipedream to use when your end users authorize access to their account, as well as [OAuth clients to authenticate to Pipedream's API](/rest-api/auth#oauth).
+- **Connected Account**: The account your end user connects. [Read more about connected accounts](/integrations/connected-accounts).
+- **OAuth Client**: This is admittedly a bit of an overloaded term and refers both to [custom OAuth clients](/connect/managed-auth/oauth-clients/) you create in Pipedream to use when your end users authorize access to their account, as well as [OAuth clients to authenticate to Pipedream's API](/rest-api/auth/#oauth).
diff --git a/docs-v2/pages/connect/managed-auth/connect-link.mdx b/docs-v2/pages/connect/managed-auth/connect-link.mdx
index d10a161989d01..212213868667a 100644
--- a/docs-v2/pages/connect/managed-auth/connect-link.mdx
+++ b/docs-v2/pages/connect/managed-auth/connect-link.mdx
@@ -8,7 +8,7 @@ If you aren't able to execute JavaScript or open an iFrame in your frontend, or
## How to generate a link
-See [the Connect quickstart](/connect/managed-auth/quickstart) for a full tutorial for getting Connect up and running.
+See [the Connect quickstart](/connect/managed-auth/quickstart/) for a full tutorial for getting Connect up and running.
Here's a quick overview of how to generate a Connect Link URL:
@@ -27,6 +27,6 @@ https://pipedream.com/_static/connect.html?token={token}&connectLink=true&app={a
## Success and error redirect URLs
-To automatically redirect users somewhere after they complete the connection flow (or if an error occurs), define the `success_redirect_uri` and `error_redirect_uri` parameters during token creation. [See the API docs](/connect/api#create-a-new-token) for details.
+To automatically redirect users somewhere after they complete the connection flow (or if an error occurs), define the `success_redirect_uri` and `error_redirect_uri` parameters during token creation. [See the API docs](/connect/api/#create-a-new-token) for details.
-In the absence of these URLs, Pipedream will redirect the user to a Pipedream-hosted success or error page at the end of the connection flow.
\ No newline at end of file
+In the absence of these URLs, Pipedream will redirect the user to a Pipedream-hosted success or error page at the end of the connection flow.
diff --git a/docs-v2/pages/connect/managed-auth/oauth-clients.mdx b/docs-v2/pages/connect/managed-auth/oauth-clients.mdx
index 317cd68b43ab7..bd66dcbbe0316 100644
--- a/docs-v2/pages/connect/managed-auth/oauth-clients.mdx
+++ b/docs-v2/pages/connect/managed-auth/oauth-clients.mdx
@@ -3,7 +3,7 @@ import Callout from '@/components/Callout'
# OAuth Clients
-When connecting an account for any OAuth app via Pipedream Connect, we'll default to using Pipedream's official OAuth client, which enables you to quickly get up and running. [Read more about OAuth clients in Pipedream here](/connected-accounts/oauth-clients).
+When connecting an account for any OAuth app via Pipedream Connect, we'll default to using Pipedream's official OAuth client, which enables you to quickly get up and running. [Read more about OAuth clients in Pipedream here](/integrations/connected-accounts/oauth-clients).
## Using Pipedream OAuth
@@ -29,9 +29,9 @@ For any OAuth app that supports it, **you can always use your own client.** Your
## Using a custom OAuth client
-1. Follow the steps [here](/connected-accounts/oauth-clients#configuring-custom-oauth-clients) to create an OAuth client in Pipedream.
-2. When connecting an account either via the [frontend SDK](/connect/managed-auth/quickstart#use-the-pipedream-sdk-in-your-frontend), make sure to include the `oauthAppId` in `pd.connectAccount()`.
-3. If using [Connect Link](/connect/managed-auth/quickstart#or-use-connect-link), make sure to include the `oauthAppId` in the URL.
+1. Follow the steps [here](/integrations/oauth-clients#configuring-custom-oauth-clients) to create an OAuth client in Pipedream.
+2. When connecting an account either via the [frontend SDK](/connect/managed-auth/quickstart/#use-the-pipedream-sdk-in-your-frontend), make sure to include the `oauthAppId` in `pd.connectAccount()`.
+3. If using [Connect Link](/connect/managed-auth/quickstart/#or-use-connect-link), make sure to include the `oauthAppId` in the URL.
### Finding your OAuth app ID
@@ -39,4 +39,4 @@ For any OAuth app that supports it, **you can always use your own client.** Your
-
\ No newline at end of file
+
diff --git a/docs-v2/pages/connect/managed-auth/quickstart.mdx b/docs-v2/pages/connect/managed-auth/quickstart.mdx
index 8e2fc1d773bfd..d7e0e4a4964aa 100644
--- a/docs-v2/pages/connect/managed-auth/quickstart.mdx
+++ b/docs-v2/pages/connect/managed-auth/quickstart.mdx
@@ -5,7 +5,7 @@ import VideoPlayer from "@/components/VideoPlayer";
# Managed Auth Quickstart
-Pipedream Connect is the easiest way for your users to connect to [over {process.env.PUBLIC_APPS}+ APIs](https://pipedream.com/apps), **right in your product**. You can build in-app messaging, CRM syncs, AI agents, [and much more](/connect/use-cases), all in a few minutes.
+Pipedream Connect is the easiest way for your users to connect to [over {process.env.PUBLIC_APPS}+ APIs](https://pipedream.com/apps), **right in your product**. You can build in-app messaging, CRM syncs, AI agents, [and much more](/connect/use-cases/), all in a few minutes.
## Visual overview
@@ -29,7 +29,7 @@ Here's how Connect sits in your frontend and backend, and communicates with Pipe
You'll need to do two things to add Pipedream Connect to your app:
1. [Connect to the Pipedream API from your server](#generate-a-short-lived-token). This lets you make secure calls to the Pipedream API to initiate the account connection flow and retrieve account credentials. If you're running a JavaScript framework like Node.js on your server, you can use the Pipedream SDK.
-2. [Add the Pipedream SDK to your frontend](#connect-your-users-account) or redirect your users to [a Pipedream-hosted URL](/connect/connect-link) to start the account connection flow.
+2. [Add the Pipedream SDK to your frontend](#connect-your-users-account) or redirect your users to [a Pipedream-hosted URL](/connect/connect-link/) to start the account connection flow.
We'll walk through these steps below, using [an example Next.js app](https://github.com/PipedreamHQ/pipedream-connect-examples/tree/master/managed-auth-basic-next-app/). To follow along, clone [the repo](https://github.com/PipedreamHQ/pipedream-connect-examples/) and follow the instructions in [the app's `README`](https://github.com/PipedreamHQ/pipedream-connect-examples/tree/master/managed-auth-basic-next-app/). That will run the app on `localhost:3000`.
@@ -74,7 +74,7 @@ You'll need these when configuring the SDK and making API requests.
### Generate a short-lived token
-To securely initiate account connections for your users, you'll need generate a short-lived token for your users and use that in the [account connection flow](#connect-your-users-account). See [the docs on Connect tokens](/connect/tokens) for a general overview of why we need to create tokens and scope them to end users.
+To securely initiate account connections for your users, you'll need to generate a short-lived token for your users and use that in the [account connection flow](#connect-your-users-account). See [the docs on Connect tokens](/connect/tokens/) for a general overview of why we need to create tokens and scope them to end users.
In the Next.js example here, we're running [Next server components](https://nextjs.org/docs/app/building-your-application/rendering/server-components) in `app/server.ts`. We call the `serverConnectTokenCreate` method from the frontend to retrieve a token **for a specific user**.
@@ -91,7 +91,7 @@ If you're using a different server / API framework, you'll need to make secure c
Once you have a token, return it to your frontend to start the account connection flow for the user, or redirect them to a Pipedream-hosted URL with [Connect Link](#or-use-connect-link).
-Refer to the API docs for [full set of parameters you can pass](/connect/api#create-a-new-token) in the `ConnectTokenCreate` call.
+Refer to the API docs for [full set of parameters you can pass](/connect/api/#create-a-new-token) in the `ConnectTokenCreate` call.
### Connect your user's account
@@ -164,13 +164,13 @@ https://pipedream.com/_static/connect.html?token={token}&connectLink=true&app={a
Now that your users have connected an account, you can use their auth in one of a few ways:
-1. [Retrieve their credentials from the REST API](/connect/api#accounts) to use in your backend application
-2. [Use Pipedream's visual workflow builder](/connect/workflows) to define complex logic to run on behalf of your users
-3. [Embed Pipedream components directly in your app](/connect/components) to run actions and triggers on their behalf
+1. [Retrieve their credentials from the REST API](/connect/api/#accounts) to use in your backend application
+2. [Use Pipedream's visual workflow builder](/connect/workflows/) to define complex logic to run on behalf of your users
+3. [Embed Pipedream components directly in your app](/connect/components/) to run actions and triggers on their behalf
### Deploy your app to production
-- Test end to end in [development](/connect/environments)
+- Test end to end in [development](/connect/environments/)
- Ship to production!
diff --git a/docs-v2/pages/connect/managed-auth/tokens.mdx b/docs-v2/pages/connect/managed-auth/tokens.mdx
index 6717b334d0092..338bdf3de475c 100644
--- a/docs-v2/pages/connect/managed-auth/tokens.mdx
+++ b/docs-v2/pages/connect/managed-auth/tokens.mdx
@@ -5,9 +5,9 @@ import Callout from '@/components/Callout'
When you initiate account connection for your end users, you must either:
1. Generate a secure, short-lived token scoped to the end user, or
-2. Use the [Connect Link](/connect/connect-link) feature to generate a URL that guides the user through the account connection flow without any frontend work on your side.
+2. Use the [Connect Link](/connect/connect-link/) feature to generate a URL that guides the user through the account connection flow without any frontend work on your side.
-Here, we'll show you how to generate tokens for your users and return that to your frontend, passing that to the account connection flow.
+Here, we'll show you how to generate tokens for your users and return that to your frontend, passing that to the account connection flow.
Use tokens when you want to handle the account connection flow yourself, in your app's UI. For example, you might want to show a **Connect Slack** button in your app that triggers the account connection flow for Slack, or launch the flow in a modal.
@@ -21,12 +21,12 @@ See docs on [the `/tokens` endpoint](/connect/api/#create-a-new-token) to create
## Webhooks
-When you generate a token, you can specify a `webhook_uri` where Pipedream will deliver updates on the account connection flow. This is useful if you want to update your UI based on the status of the account connection flow, get a log of errors, and more.
+When you generate a token, you can specify a `webhook_uri` where Pipedream will deliver updates on the account connection flow. This is useful if you want to update your UI based on the status of the account connection flow, get a log of errors, and more.
-[See the webhooks docs](/connect/webhooks) for more information.
+[See the webhooks docs](/connect/webhooks/) for more information.
## Tokens are scoped to end users and environments
-When you [create a new Connect token](/connect/api/#create-a-new-token), you pass an `external_user_id` and an `environment`. See the docs on [environments](/connect/environments) for more information on passing environment in the SDK and API.
+When you [create a new Connect token](/connect/api/#create-a-new-token), you pass an `external_user_id` and an `environment`. See the docs on [environments](/connect/environments/) for more information on passing environment in the SDK and API.
Tokens are scoped to this user and environment. When the user successfully connects an account with that token, it will be saved for that `external_user_id` in the specified environment.
diff --git a/docs-v2/pages/connect/managed-auth/users.mdx b/docs-v2/pages/connect/managed-auth/users.mdx
index eaf8819b057f0..810f2fcd2ce7d 100644
--- a/docs-v2/pages/connect/managed-auth/users.mdx
+++ b/docs-v2/pages/connect/managed-auth/users.mdx
@@ -8,10 +8,10 @@ To view or delete your users' connected accounts:
2. Click the **Connect** tab on the left
3. Click the **Users** tab at the top
-You'll see a list of all users, their connected accounts, and the option to delete any accounts from the UI. You can also retrieve and delete all your users via the API ([see the docs for reference](/connect/api)).
+You'll see a list of all users, their connected accounts, and the option to delete any accounts from the UI. You can also retrieve and delete all your users via the API ([see the docs for reference](/connect/api/)).
Connect currently supports one connected account per user, app, environment combination.
So if user `abc-123` in your application connects their Slack account in `production`, then that same user connects a different Slack workspace (also in `production`), the first connected account will get overwritten in Pipedream and replaced by the second.
-
\ No newline at end of file
+
diff --git a/docs-v2/pages/connect/managed-auth/webhooks.mdx b/docs-v2/pages/connect/managed-auth/webhooks.mdx
index 29f82d93ca026..82b444cb80742 100644
--- a/docs-v2/pages/connect/managed-auth/webhooks.mdx
+++ b/docs-v2/pages/connect/managed-auth/webhooks.mdx
@@ -1,6 +1,6 @@
# Connect Webhooks
-When you [generate a Connect token](/connect/managed-auth/quickstart/#generate-a-short-lived-token), you can pass a `webhook_uri` parameter. Pipedream will send a POST request to this URL when the user completes the connection flow, or if an error occurs at any point. [See the API docs](/connect/api#create-a-new-token) for details.
+When you [generate a Connect token](/connect/managed-auth/quickstart/#generate-a-short-lived-token), you can pass a `webhook_uri` parameter. Pipedream will send a POST request to this URL when the user completes the connection flow, or if an error occurs at any point. [See the API docs](/connect/api/#create-a-new-token) for details.
## Webhook events
@@ -11,7 +11,7 @@ When you [generate a Connect token](/connect/managed-auth/quickstart/#generate-a
### Successful connection
-Please note that user credentials are not sent in the webhook request. To retrieve credentials, use the [Connect API to fetch the account](/connect/api#retrieve-account-details-by-id) using the `account.id` provided in the webhook payload.
+Please note that user credentials are not sent in the webhook request. To retrieve credentials, use the [Connect API to fetch the account](/connect/api/#retrieve-account-details-by-id) using the `account.id` provided in the webhook payload.
```json
{
@@ -51,4 +51,4 @@ Please note that user credentials are not sent in the webhook request. To retrie
"connect_session_id": 123,
"error": "You've hit your limit on the number of external users you can connect."
}
-```
\ No newline at end of file
+```
diff --git a/docs-v2/pages/connect/migrating-from-project-keys-to-oauth.mdx b/docs-v2/pages/connect/migrating-from-project-keys-to-oauth.mdx
index 5a08587603636..d7f1a2d254daf 100644
--- a/docs-v2/pages/connect/migrating-from-project-keys-to-oauth.mdx
+++ b/docs-v2/pages/connect/migrating-from-project-keys-to-oauth.mdx
@@ -12,7 +12,7 @@ This guide is only relevant if:
## What changed
-- In the `0.x` version of the SDK and the original Connect API, you could authenticate with keys scoped to a specific project. In the `1.x` version of the SDK, you need to authenticate with [OAuth clients](/rest-api/auth#oauth).
+- In the `0.x` version of the SDK and the original Connect API, you could authenticate with keys scoped to a specific project. In the `1.x` version of the SDK, you need to authenticate with [OAuth clients](/rest-api/auth/#oauth).
- The `createClient` method from both the browser and Node.js SDKs has been replaced with separate methods: `createFrontendClient` and `createBackendClient`, respectively.
- The `connectTokenCreate` method has been renamed `createConnectToken`
- New SDK methods: `projectInfo`, `invokeWorkflow`, and more
@@ -23,7 +23,7 @@ This guide is only relevant if:
### Create an OAuth client
-Follow the instructions [here](/rest-api/auth#oauth) to create an OAuth client.
+Follow the instructions [here](/rest-api/auth/#oauth) to create an OAuth client.
### Update your SDK version
@@ -75,7 +75,7 @@ You'll need to make three changes to your backend code:
```typescript
import { createBackendClient, HTTPAuthType } from "@pipedream/sdk/server";
-
+
// These secrets should be saved securely and passed to your environment
const pd = createBackendClient({
credentials: {
@@ -100,4 +100,4 @@ const pd = createBackendClient({
-
\ No newline at end of file
+
diff --git a/docs-v2/pages/connect/troubleshooting.mdx b/docs-v2/pages/connect/troubleshooting.mdx
index c3801caeef4ce..c21c987b4a6a6 100644
--- a/docs-v2/pages/connect/troubleshooting.mdx
+++ b/docs-v2/pages/connect/troubleshooting.mdx
@@ -8,11 +8,11 @@ Below are some common errors when connecting your users' accounts via Pipedream
>Error creating token: Error: Failed to obtain OAuth token: Response Error: 401 Unauthorized
-Authorization to the Pipedream API failed when creating the Connect token. Double-check the client ID or secret for your [Pipedream OAuth client](/connect/api#authentication).
+Authorization to the Pipedream API failed when creating the Connect token. Double-check the client ID or secret for your [Pipedream OAuth client](/connect/api/#authentication).
### Error connecting an account
-Most errors when connecting an account are related to the [Connect token](/connect/tokens), which Pipedream validates from the Connect iFrame.
+Most errors when connecting an account are related to the [Connect token](/connect/tokens/), which Pipedream validates from the Connect iFrame.
#### Common errors
@@ -22,9 +22,9 @@ Most errors when connecting an account are related to the [Connect token](/conne
#### Troubleshooting steps
-Pipedream typically returns an explicit error message in the HTTP response of the token validation network call directly from the iFrame in the client. To check for errors, start the account connection flow in a browser and open the developer console to view the network requests.
+Pipedream typically returns an explicit error message in the HTTP response of the token validation network call directly from the iFrame in the client. To check for errors, start the account connection flow in a browser and open the developer console to view the network requests.
-Filter for requests to
+Filter for requests to
```
https://api.pipedream.com/v1/connect/tokens
@@ -40,7 +40,7 @@ Connect tokens expire, and are only able to be used once. Try generating a new t
>App not found. Please check your app id.
-Double-check the app slug you're passing [when connecting your user's account](/connect/managed-auth/quickstart#connect-your-users-account).
+Double-check the app slug you're passing [when connecting your user's account](/connect/managed-auth/quickstart/#connect-your-users-account).
### Connection failed. Please retry or contact support.
@@ -48,4 +48,4 @@ The user may have closed the OAuth popup window without completing authorization
If you're still have trouble or hitting an error that isn't listed here, [get in touch with us](https://pipedream.com/support). We'd love to help.
-
\ No newline at end of file
+
diff --git a/docs-v2/pages/connect/use-cases.mdx b/docs-v2/pages/connect/use-cases.mdx
index 593ef2017d7db..68b55a9f33527 100644
--- a/docs-v2/pages/connect/use-cases.mdx
+++ b/docs-v2/pages/connect/use-cases.mdx
@@ -12,7 +12,7 @@ But it's hard to justify the engineering effort required for these integrations.
At Pipedream, our customers tell us a variant of this story every day. Pipedream Connect helps you build these features **in minutes**, for any app.
-Once you add the core integration UI to your app, non-technical employees can also help to manage [the workflows](/workflows) that drive the backend logic. For example, if you're building [in-app messaging](#in-app-messaging), once you add the UI to let users connect Slack, Discord, and other tools, anyone on your team can build workflows that format and deliver messages to your customers. This is a huge plus for many orgs: you still get to build a bespoke UI, directly in your app, suited to your customer need. But anyone in the company can collaborate on the workflows that power it.
+Once you add the core integration UI to your app, non-technical employees can also help to manage [the workflows](/workflows/building-workflows/) that drive the backend logic. For example, if you're building [in-app messaging](#in-app-messaging), once you add the UI to let users connect Slack, Discord, and other tools, anyone on your team can build workflows that format and deliver messages to your customers. This is a huge plus for many orgs: you still get to build a bespoke UI, directly in your app, suited to your customer need. But anyone in the company can collaborate on the workflows that power it.
## Value to your customers
@@ -30,7 +30,7 @@ Sync data between your app and Salesforce, HubSpot, or any CRM. Pipedream lets y
### AI products
-Talk to any AI API or LLM. Build chat apps or interact in real-time with your users. Or run asynchronous tasks in the background, like image classification, article summarization, or other tasks you want to offload to an AI agent. You can use built-in functions like [`$.flow.suspend`](/code/nodejs/rerun#flowsuspend) to send a message to your team, or directly to the user, to approve specific actions.
+Talk to any AI API or LLM. Build chat apps or interact in real-time with your users. Or run asynchronous tasks in the background, like image classification, article summarization, or other tasks you want to offload to an AI agent. You can use built-in functions like [`$.flow.suspend`](/workflows/building-workflows/code/nodejs/rerun/#flowsuspend) to send a message to your team, or directly to the user, to approve specific actions.
### Spreadsheet integrations
diff --git a/docs-v2/pages/connect/workflows.mdx b/docs-v2/pages/connect/workflows.mdx
index ac2ff4b7f7c70..cdf7eff66b0a2 100644
--- a/docs-v2/pages/connect/workflows.mdx
+++ b/docs-v2/pages/connect/workflows.mdx
@@ -5,9 +5,9 @@ import Image from 'next/image'
# Running workflows for your end users
-Just like you can build and run internal [workflows](/workflows/) for your team, **you can run workflows for [your end users](/connect/api#external-users), too**.
+Just like you can build and run internal [workflows](/workflows/building-workflows/) for your team, **you can run workflows for [your end users](/connect/api/#external-users), too**.
-Whether you're building well-defined integrations or autonomous AI agents, workflows provide a powerful set of tools for running [code](/code) or [pre-defined actions](/workflows/actions) on behalf of your users. Pipedream's UI makes it easy to build, test, and [debug](/workflows/inspect) workflows.
+Whether you're building well-defined integrations or autonomous AI agents, workflows provide a powerful set of tools for running [code](/workflows/building-workflows/code/) or [pre-defined actions](/workflows/building-workflows/actions/) on behalf of your users. Pipedream's UI makes it easy to build, test, and [debug](/workflows/building-workflows/inspect/) workflows.
## What are workflows?
@@ -15,17 +15,17 @@ Whether you're building well-defined integrations or autonomous AI agents, workf
-Workflows are sequences of [steps](/workflows/steps) [triggered by an event](/workflows/triggers), like an HTTP request, or new rows in a Google sheet.
+Workflows are sequences of [steps](/workflows/#steps) [triggered by an event](/workflows/building-workflows/triggers/), like an HTTP request, or new rows in a Google sheet.
-You can use [pre-built actions](/workflows/actions/) or custom [Node.js](/code/nodejs/), [Python](/code/python/), [Golang](/code/go/), or [Bash](/code/bash/) code in workflows and connect to any of our {process.env.PUBLIC_APPS} integrated apps.
+You can use [pre-built actions](/workflows/building-workflows/actions/) or custom [Node.js](/workflows/building-workflows/code/nodejs/), [Python](/workflows/building-workflows/code/python/), [Golang](/workflows/building-workflows/code/go/), or [Bash](/workflows/building-workflows/code/bash/) code in workflows and connect to any of our {process.env.PUBLIC_APPS} integrated apps.
Workflows also have built-in:
-- [Flow control](/workflows/control-flow)
-- [Concurrency and throttling](/workflows/concurrency-and-throttling)
-- [Key-value stores](/data-stores)
-- [Error handling](/workflows/errors)
-- [VPCs](/workflows/vpc)
+- [Flow control](/workflows/building-workflows/control-flow/)
+- [Concurrency and throttling](/workflows/building-workflows/settings/concurrency-and-throttling/)
+- [Key-value stores](/workflows/data-management/data-stores/)
+- [Error handling](/workflows/building-workflows/errors/)
+- [VPCs](/workflows/vpc/)
- [And more](https://pipedream.com/pricing)
Read [the quickstart](/quickstart/) to learn more.
@@ -36,13 +36,13 @@ Read [the quickstart](/quickstart/) to learn more.
### Create a workflow
-[Create a new workflow](/workflows#how-do-i-create-a-new-workflow) or open an existing one.
+[Create a new workflow](/workflows/building-workflows/) or open an existing one.
### Add an HTTP trigger
To get started building workflows for your end users:
-1. Add an [HTTP trigger](/workflows/triggers#http) to your workflow
+1. Add an [HTTP trigger](/workflows/building-workflows/triggers/#http) to your workflow
2. Generate a test event with the required headers:
- `x-pd-environment: development`
- `x-pd-external-user-id: {your_external_user_id}`
@@ -51,7 +51,7 @@ See the [Triggering your workflow](#triggering-your-workflow) section below for
### Configure accounts to use your end users' auth
-When you configure [pre-built actions](/workflows/actions) or [custom code that connects to third-party APIs](/code/nodejs/auth), you can link accounts in one of two ways:
+When you configure [pre-built actions](/workflows/building-workflows/actions/) or [custom code that connects to third-party APIs](/workflows/building-workflows/code/nodejs/auth/), you can link accounts in one of two ways:
1. **Use your own account**: If you're connecting to an API that uses your own API key or developer account — for example, a workflow that connects to the OpenAI API or a PostgreSQL database — click the **Connect account** button to link your own, static account.
@@ -71,7 +71,7 @@ When you trigger the workflow, Pipedream will look up the corresponding account
To run an end-to-end test as an end user, you need to have users and connected accounts in your project. If you already have a **development** account linked, you can skip this step.
-If you don't, the fastest way to do this is [on the **Users** tab](/connect/managed-auth/users) in your Pipedream project:
+If you don't, the fastest way to do this is [on the **Users** tab](/connect/managed-auth/users/) in your Pipedream project:
- You'll see there's a button to **Connect account**
- Go through the flow and make sure to create the account in **development** mode
- Note the **external user ID** of the account you just connected, you'll need it in the next step
@@ -103,7 +103,7 @@ When you're done with the workflow, click **Deploy** at the top right.
### Invoke the workflow
-If you're using TypeScript or a JavaScript runtime, [install the Pipedream SDK](/connect/api#installing-the-typescript-sdk). Pipedream also provides an HTTP API for invoking workflows (see example below).
+If you're using TypeScript or a JavaScript runtime, [install the Pipedream SDK](/connect/api/#installing-the-typescript-sdk). Pipedream also provides an HTTP API for invoking workflows (see example below).
```bash
npm i @pipedream/sdk
@@ -112,10 +112,10 @@ npm i @pipedream/sdk
To invoke workflows, you'll need:
1. The OAuth client ID and secret from your OAuth client in **step 2 above** (if configured)
-2. Your [Project ID](/projects#finding-your-projects-id)
+2. Your [Project ID](/workflows/projects/#finding-your-projects-id)
3. Your workflow's HTTP endpoint URL
-4. The [external user ID](/connect/api#external-users) of the user you'd like to run the workflow for
-5. The [Connect environment](/connect/environments) tied to the user's account
+4. The [external user ID](/connect/api/#external-users) of the user you'd like to run the workflow for
+5. The [Connect environment](/connect/environments/) tied to the user's account
Then invoke the workflow like so:
@@ -123,7 +123,7 @@ Then invoke the workflow like so:
```typescript
import { createBackendClient, HTTPAuthType } from "@pipedream/sdk/server";
-
+
// These secrets should be saved securely and passed to your environment
const pd = createBackendClient({
environment: "development", // change to production if running for a test production account, or in production
@@ -155,7 +155,7 @@ import { createBackendClient } from "@pipedream/sdk/server";
const client = createBackendClient({
environment: "development", // change to production if running for a test production account, or in production
credentials: {
- clientId: "{oauth_client_id}",
+ clientId: "{oauth_client_id}",
clientSecret: "{oauth_client_secret}"
},
projectId: "{your_project_id}"
@@ -219,7 +219,7 @@ curl -X POST https://{your-endpoint-url} \
-H "Authorization: Bearer {access_token}" \
-H 'X-PD-External-User-ID: {your_external_user_id}' \
-H 'X-PD-Environment: development' \ # 'development' or 'production'
- -d '{
+ -d '{
"slackChannel": "#general",
"messageText": "Hello, world!",
"gitRepo": "AcmeOrg/acme-repo",
@@ -242,7 +242,7 @@ We plan to improve this interface in the future, and potentially allow developer
To test a step using the connected account of one of your end users in the builder, you'll need a few things to be configured so that your workflow knows which account to use.
**Make sure you have an external user with the relevant connected account(s) saved to your project:**
-- Go to the **[Users tab](/connect/managed-auth/users)** in the **Connect** section of your project to confirm
+- Go to the **[Users tab](/connect/managed-auth/users/)** in the **Connect** section of your project to confirm
- If not, either connect one from your application or [directly in the UI](#connect-a-test-account)
**Pass the environment and external user ID:**
@@ -268,16 +268,16 @@ The most common way to trigger workflows is via HTTP webhook. We strongly recomm
To get started, you'll need:
- [OAuth client ID and secret](/rest-api/auth#creating-an-oauth-client) (optional but recommended)
-- Your [project ID](/projects#finding-your-projects-id)
+- Your [project ID](/workflows/projects/#finding-your-projects-id)
- Your workflow's HTTP endpoint URL
-- The [external user ID](/connect/api#external-users) of your end user
-- The [Connect environment](/connect/environments)
+- The [external user ID](/connect/api/#external-users) of your end user
+- The [Connect environment](/connect/environments/)
```typescript
import { createBackendClient, HTTPAuthType } from "@pipedream/sdk/server";
-
+
// These secrets should be saved securely and passed to your environment
const pd = createBackendClient({
environment: "development", // change to production if running for a test production account, or in production
@@ -309,7 +309,7 @@ import { createBackendClient } from "@pipedream/sdk/server";
const client = createBackendClient({
environment: "development", // change to production if running for a test production account, or in production
credentials: {
- clientId: "{oauth_client_id}",
+ clientId: "{oauth_client_id}",
clientSecret: "{oauth_client_secret}"
},
projectId: "{your_project_id}"
@@ -354,21 +354,21 @@ curl -X POST https://{your-endpoint-url} \
### Deploy an event source
-You can [programmatically deploy triggers via the API](/connect/api#deploy-a-trigger) to have events from integrated apps (like [new Slack messages](/apps/slack/triggers/new-message-in-channels) or [new emails in Gmail](/apps/gmail/triggers/new-email-received)) trigger your workflow. This allows you to:
+You can [programmatically deploy triggers via the API](/connect/api/#deploy-a-trigger) to have events from integrated apps (like [new Slack messages](https://pipedream.com/apps/slack/triggers/new-message-in-channels) or [new emails in Gmail](https://pipedream.com/apps/gmail/triggers/new-email-received)) trigger your workflow. This allows you to:
- Deploy triggers for specific users from your application
- Configure trigger parameters per-user
- Manage deployed triggers via the API
-See the [API documentation](/connect/api#deploy-a-trigger) for detailed examples of deploying and managing triggers.
+See the [API documentation](/connect/api/#deploy-a-trigger) for detailed examples of deploying and managing triggers.
## Troubleshooting
-For help debugging issues with your workflow, you can return verbose error messages to the caller by configuring the HTTP trigger to **Return a custom response from your workflow**.
+For help debugging issues with your workflow, you can return verbose error messages to the caller by configuring the HTTP trigger to **Return a custom response from your workflow**.
-With that setting enabled on the trigger, below is an example of [this](/connect/workflows#required-account-not-found-for-external-user-id) error:
+With that setting enabled on the trigger, below is an example of [this](/connect/workflows/#required-account-not-found-for-external-user-id) error:
```bash
curl -X POST https://{your-endpoint-url} \
@@ -391,13 +391,13 @@ Pipedream Connect Error: Required account for hubspot not found for external use
- One or more steps in the workflow are configured to **Use end user's auth via Connect**, but no external user ID was passed when invoking the workflow.
- [Refer to the docs](#invoke-the-workflow) to make sure you're passing external user ID correctly when invoking the workflow.
-#### No matching external user ID
+#### No matching external user ID
- There was an external user ID passed, but it didn't match any users in the project.
-- Double-check that the external user ID that you passed when invoking the workflow matches one either [in the UI](/connect/managed-auth/users) or [via the API](/connect/api#accounts).
+- Double-check that the external user ID that you passed when invoking the workflow matches one either [in the UI](/connect/managed-auth/users/) or [via the API](/connect/api/#accounts).
#### Required account not found for external user ID
- The external user ID was passed when invoking the workflow, but the user doesn't have a connected account for one or more of the apps that are configured to use it in this workflow execution.
-- You can check which connected accounts are available for that user [in the UI](/connect/managed-auth/users) or [via the API](/connect/api#accounts).
+- You can check which connected accounts are available for that user [in the UI](/connect/managed-auth/users/) or [via the API](/connect/api/#accounts).
#### Running workflows for your users in production requires a higher tier plan
- Anyone is able to run workflows for your end users in `development`. The Business plan is required to run on behalf of `production` users.
@@ -411,4 +411,4 @@ Pipedream Connect Error: Required account for hubspot not found for external use
#### The external user ID to use during execution must be passed in the triggering event
- You can't run a workflow on a timer for example, and look up the external user ID to use at runtime.
-- The external user ID must be passed in the triggering event, typically via [HTTP trigger](#invoke-the-workflow).
\ No newline at end of file
+- The external user ID must be passed in the triggering event, typically via [HTTP trigger](#invoke-the-workflow).
diff --git a/docs-v2/pages/connected-accounts/_meta.tsx b/docs-v2/pages/connected-accounts/_meta.tsx
deleted file mode 100644
index 67e414a312d10..0000000000000
--- a/docs-v2/pages/connected-accounts/_meta.tsx
+++ /dev/null
@@ -1,4 +0,0 @@
-export default {
- "index": "Connected Accounts",
- "oauth-clients": "OAuth Clients",
-} as const
diff --git a/docs-v2/pages/airtable/_meta.tsx b/docs-v2/pages/deprecated/airtable/_meta.tsx
similarity index 100%
rename from docs-v2/pages/airtable/_meta.tsx
rename to docs-v2/pages/deprecated/airtable/_meta.tsx
diff --git a/docs-v2/pages/airtable/oauth-migration-2024-02/_meta.tsx b/docs-v2/pages/deprecated/airtable/oauth-migration-2024-02/_meta.tsx
similarity index 100%
rename from docs-v2/pages/airtable/oauth-migration-2024-02/_meta.tsx
rename to docs-v2/pages/deprecated/airtable/oauth-migration-2024-02/_meta.tsx
diff --git a/docs-v2/pages/airtable/oauth-migration-2024-02/index.mdx b/docs-v2/pages/deprecated/airtable/oauth-migration-2024-02/index.mdx
similarity index 100%
rename from docs-v2/pages/airtable/oauth-migration-2024-02/index.mdx
rename to docs-v2/pages/deprecated/airtable/oauth-migration-2024-02/index.mdx
diff --git a/docs-v2/pages/migrate-from-v1/_meta.tsx b/docs-v2/pages/deprecated/migrate-from-v1/_meta.tsx
similarity index 100%
rename from docs-v2/pages/migrate-from-v1/_meta.tsx
rename to docs-v2/pages/deprecated/migrate-from-v1/_meta.tsx
diff --git a/docs-v2/pages/migrate-from-v1/index.mdx b/docs-v2/pages/deprecated/migrate-from-v1/index.mdx
similarity index 85%
rename from docs-v2/pages/migrate-from-v1/index.mdx
rename to docs-v2/pages/deprecated/migrate-from-v1/index.mdx
index 721e4926b9254..67320a96de2e4 100644
--- a/docs-v2/pages/migrate-from-v1/index.mdx
+++ b/docs-v2/pages/deprecated/migrate-from-v1/index.mdx
@@ -3,7 +3,7 @@ import Callout from '@/components/Callout'
# Migrate from v1
-Never used Pipedream v1? You can skip this migration guide and read on about [Steps](/workflows/steps/).
+Never used Pipedream v1? You can skip this migration guide and read on about [Steps](/workflows/#steps).
We are excited to announce that we have launched a new version (v2) of Pipedream to all new and existing users!
@@ -11,20 +11,20 @@ We are excited to announce that we have launched a new version (v2) of Pipedream
We have re-imagined the UX from the ground up, made the product much easier to use and have improved performance. In addition, we are introducing powerful new features including:
- **Edit & test** your workflows in separate editing mode without impacting live workflows
-- **Support for multiple languages** including [Node.js](/code/nodejs), [Python](/code/python), [Bash](/code/bash) and [Go](/code/go)
+- **Support for multiple languages** including [Node.js](/workflows/building-workflows/code/nodejs/), [Python](/workflows/building-workflows/code/python/), [Bash](/workflows/building-workflows/code/bash/) and [Go](/workflows/building-workflows/code/go/)
- **Granular testing** including the ability to test individual steps and more
- **Multiple triggers** are now supported per workflow
- **Improved** forms for easier configuration and streamlined building
_Get Started_
-- Read our [quickstart](/quickstart/), [docs](/), and/or [FAQ](#faqs)
+- Read our [quickstart](/quickstart/), [docs](/), and/or [FAQ](#faq)
- Have questions? Ask here or on [Discourse](https://pipedream.com/community)
-- As a reminder, all integration components are source-available and [hosted on GitHub](https://github.com/PipedreamHQ/pipedream). You can [contribute your own components](/apps/contributing/) or improve existing ones.
+- As a reminder, all integration components are source-available and [hosted on GitHub](https://github.com/PipedreamHQ/pipedream). You can [contribute your own components](/workflows/contributing/) or improve existing ones.
Watch a demo:
-
-
+
``` javascript
export default defineComponent({
props: {
- httpRequest: {
+ httpRequest: {
type: "http_request",
label: "JSON Placeholder API request",
default: {
@@ -198,7 +198,7 @@ export default defineComponent({
``` javascript
export default defineComponent({
props: {
- httpRequest: {
+ httpRequest: {
type: "http_request",
label: "JSON Placeholder API request",
default: {
@@ -299,7 +299,7 @@ export default defineComponent({
This sends each HTTP request _in sequence_, one after another, and returns an array of response data returned from the URL to which you send the POST request. If you need to make requests _in parallel_, [see these docs](#send-multiple-http-requests-in-parallel).
-[Copy this workflow](https://pipedream.com/@dylburger/iterate-over-a-pipedream-step-export-sending-multiple-http-requests-p_ljCAPN/edit) and fill in your destination URL to see how this works. **This workflow iterates over the value of a Pipedream [step export](/workflows/steps/#step-exports)** - data returned from a previous step. Since you often want to iterate over data returned from a Pipedream action or other code step, this is a common use case.
+[Copy this workflow](https://pipedream.com/@dylburger/iterate-over-a-pipedream-step-export-sending-multiple-http-requests-p_ljCAPN/edit) and fill in your destination URL to see how this works. **This workflow iterates over the value of a Pipedream [step export](/workflows/#step-exports)** - data returned from a previous step. Since you often want to iterate over data returned from a Pipedream action or other code step, this is a common use case.
## Send multiple HTTP requests in parallel
@@ -352,7 +352,7 @@ The Mozilla docs expand on the difference between these methods, and when you ma
## Send a `multipart/form-data` request
-
+
``` javascript
import axios from "axios";
@@ -375,13 +375,13 @@ export default defineComponent({
});
```
-
-
+
+
``` javascript
export default defineComponent({
props: {
- httpRequest: {
+ httpRequest: {
type: "http_request",
label: "Example Multipart Form Request",
default: {
@@ -410,7 +410,7 @@ export default defineComponent({
## Download a file to the `/tmp` directory
-This example shows you how to download a file to a file in [the `/tmp` directory](/code/nodejs/working-with-files/). This can be especially helpful for downloading large files: it streams the file to disk, minimizing the memory the workflow uses when downloading the file.
+This example shows you how to download a file to a file in [the `/tmp` directory](/workflows/building-workflows/code/nodejs/working-with-files/). This can be especially helpful for downloading large files: it streams the file to disk, minimizing the memory the workflow uses when downloading the file.
```javascript
import { pipeline } from "stream/promises";
@@ -432,7 +432,7 @@ export default defineComponent({
## Upload a file from the `/tmp` directory
-This example shows you how to make a `multipart/form-data` request with a file as a form part. You can store and read any files from [the `/tmp` directory](/code/nodejs/working-with-files/#the-tmp-directory).
+This example shows you how to make a `multipart/form-data` request with a file as a form part. You can store and read any files from [the `/tmp` directory](/workflows/building-workflows/code/nodejs/working-with-files/#the-tmp-directory).
This can be especially helpful for uploading large files: it streams the file from disk, minimizing the memory the workflow uses when uploading the file.
@@ -465,7 +465,7 @@ export default defineComponent({
By default, [HTTP requests made from Pipedream can come from a large range of IP addresses](/privacy-and-security/#hosting-details). **If you need to restrict the IP addresses HTTP requests come from, you have two options**:
- [Use a Pipedream VPC](/workflows/vpc/) to route all outbound HTTP requests through a single IP address
-- If you don't need to access the HTTP response data, you can [use `$send.http()`](/destinations/http/) to send requests from a [limited set of IP addresses](/destinations/http/#ip-addresses-for-pipedream-http-requests).
+- If you don't need to access the HTTP response data, you can [use `$send.http()`](/workflows/data-management/destinations/http/) to send requests from a [limited set of IP addresses](/workflows/data-management/destinations/http/#ip-addresses-for-pipedream-http-requests).
## Use an HTTP proxy to proxy requests through another host
@@ -538,9 +538,9 @@ export default defineComponent({
Sometimes you need to upload a downloaded file directly to another service, without processing the downloaded file. You could [download the file](#download-a-file-to-the-tmp-directory) and then [upload it](#upload-a-file-from-the-tmp-directory) to the other URL, but these intermediate steps are unnecessary: you can just stream the download to the other service directly, without saving the file to disk.
-This method is especially effective for large files that exceed the [limits of the `/tmp` directory](/limits/#disk).
+This method is especially effective for large files that exceed the [limits of the `/tmp` directory](/workflows/limits/#disk).
-[Copy this workflow](https://pipedream.com/@dylburger/stream-download-to-upload-p_5VCLoa1/edit) or paste this code into a [new Node.js code step](/code/nodejs/):
+[Copy this workflow](https://pipedream.com/@dylburger/stream-download-to-upload-p_5VCLoa1/edit) or paste this code into a [new Node.js code step](/workflows/building-workflows/code/nodejs/):
```javascript
import stream from "stream";
@@ -623,7 +623,7 @@ export default defineComponent({
The graphql package is required
-The `graphql` package is required for popular GraphQL clients to function, like `graphql-request` and `urql`.
+The `graphql` package is required for popular GraphQL clients to function, like `graphql-request` and `urql`.
Even though you will not need to use the `graphql` code itself in your code step, it's required to import it in order for `graphql-request` to function.
@@ -645,8 +645,8 @@ export default defineComponent({
},
async run({ steps, $ }) {
const me = gql`
- query {
- viewer {
+ query {
+ viewer {
login
}
}
diff --git a/docs-v2/pages/code/nodejs/index.mdx b/docs-v2/pages/workflows/building-workflows/code/nodejs/index.mdx
similarity index 86%
rename from docs-v2/pages/code/nodejs/index.mdx
rename to docs-v2/pages/workflows/building-workflows/code/nodejs/index.mdx
index ebd50c8ee9d83..f633f65e9700c 100644
--- a/docs-v2/pages/code/nodejs/index.mdx
+++ b/docs-v2/pages/workflows/building-workflows/code/nodejs/index.mdx
@@ -32,7 +32,7 @@ Code steps use the same editor ([Monaco](https://microsoft.github.io/monaco-edit
## Sharing data between steps
-A Node.js step can use data from other steps using [step exports](/workflows/steps/#step-exports), it can also export data for other steps to use.
+A Node.js step can use data from other steps using [step exports](/workflows/#step-exports), it can also export data for other steps to use.
### Using data from another step
@@ -116,7 +116,7 @@ You can only export JSON-serializable data from steps. Things like:
- numbers
- objects
-You cannot export functions or other complex objects that don't serialize to JSON. [You can save that data to a file in the `/tmp` directory](/code/nodejs/working-with-files/).
+You cannot export functions or other complex objects that don't serialize to JSON. [You can save that data to a file in the `/tmp` directory](/workflows/building-workflows/code/nodejs/working-with-files/).
## Passing props to code steps
@@ -146,11 +146,11 @@ export default defineComponent({
The workflow builder now can accept text input to populate the `firstName` to this particular step only:
-
+
Accepting a single string is just one example, you can build a step to accept arrays of strings through a dropdown presented in the workflow builder.
-[Read the props reference for the full list of options](/components/api/#props).
+[Read the props reference for the full list of options](/workflows/contributing/components/api/#props).
## How Pipedream Node.js components work
@@ -166,20 +166,20 @@ export default defineComponent({
});
```
-This defines [a Node.js component](/components/api/). Components let you:
+This defines [a Node.js component](/workflows/contributing/components/api/). Components let you:
-- Pass input to steps using [props](/code/nodejs/#passing-props-to-code-steps)
-- [Connect an account to a step](/connected-accounts/#from-a-code-step)
-- [Issue HTTP responses](/workflows/triggers/#http-responses)
+- Pass input to steps using [props](/workflows/building-workflows/code/nodejs/#passing-props-to-code-steps)
+- [Connect an account to a step](/integrations/connected-accounts/#from-a-code-step)
+- [Issue HTTP responses](/workflows/building-workflows/triggers/#http-responses)
- Perform workflow-level flow control, like [ending a workflow early](#ending-a-workflow-early)
When the step runs, Pipedream executes the `run` method:
-- Any asynchronous code within a code step [**must** be run synchronously](/code/nodejs/async/), using the `await` keyword or with a Promise chain, using `.then()`, `.catch()`, and related methods.
-- Pipedream passes the `steps` variable to the run method. `steps` is also an object, and contains the [data exported from previous steps](/workflows/steps/#step-exports) in your workflow.
-- You also have access to the `$` variable, which gives you access to methods like `$.respond`, `$.export`, [and more](/components/api/#actions).
+- Any asynchronous code within a code step [**must** be run synchronously](/workflows/building-workflows/code/nodejs/async/), using the `await` keyword or with a Promise chain, using `.then()`, `.catch()`, and related methods.
+- Pipedream passes the `steps` variable to the run method. `steps` is also an object, and contains the [data exported from previous steps](/workflows/#step-exports) in your workflow.
+- You also have access to the `$` variable, which gives you access to methods like `$.respond`, `$.export`, [and more](/workflows/contributing/components/api/#actions).
-If you're using [props](/code/nodejs/#passing-props-to-code-steps) or [connect an account to a step](/connected-accounts/#from-a-code-step), the component exposes them in the variable `this`, which refers to the current step:
+If you're using [props](/workflows/building-workflows/code/nodejs/#passing-props-to-code-steps) or [connect an account to a step](/integrations/connected-accounts/#from-a-code-step), the component exposes them in the variable `this`, which refers to the current step:
```javascript
export default defineComponent({
@@ -190,7 +190,7 @@ export default defineComponent({
});
```
-When you [connect an account to a step](/connected-accounts/#from-a-code-step), Pipedream exposes the auth info in the variable [`this.appName.$auth`](/code/nodejs/auth/#accessing-connected-account-data-with-thisappnameauth).
+When you [connect an account to a step](/integrations/connected-accounts/#from-a-code-step), Pipedream exposes the auth info in the variable [`this.appName.$auth`](/workflows/building-workflows/code/nodejs/auth/#accessing-connected-account-data-with-thisappnameauth).
## Logs
@@ -337,20 +337,20 @@ Any variables you create within a step are scoped to that step. That is, they ca
Within a step, the [normal rules of JavaScript variable scope](https://developer.mozilla.org/en-US/docs/Glossary/Scope) apply.
-**When you need to share data across steps, use [step exports](/workflows/steps/).**
+**When you need to share data across steps, use [step exports](/workflows/#step-exports).**
## Making HTTP requests from your workflow
There are two ways to make HTTP requests in code steps:
-- Use any HTTP client that works with Node.js. [See this example guide for how to use `axios` to make HTTP requests](/code/nodejs/http-requests/).
-- [Use `$.send.http()`](/destinations/http/#using-sendhttp-in-workflows), a Pipedream-provided method for making asynchronous HTTP requests.
+- Use any HTTP client that works with Node.js. [See this example guide for how to use `axios` to make HTTP requests](/workflows/building-workflows/code/nodejs/http-requests/).
+- [Use `$.send.http()`](/workflows/data-management/destinations/http/#using-sendhttp-in-workflows), a Pipedream-provided method for making asynchronous HTTP requests.
-In general, if you just need to make an HTTP request but don't care about the response, [use `$.send.http()`](/destinations/http/#using-sendhttp-in-workflows). If you need to operate on the data in the HTTP response in the rest of your workflow, [use `axios`](/code/nodejs/http-requests/).
+In general, if you just need to make an HTTP request but don't care about the response, [use `$.send.http()`](/workflows/data-management/destinations/http/#using-sendhttp-in-workflows). If you need to operate on the data in the HTTP response in the rest of your workflow, [use `axios`](/workflows/building-workflows/code/nodejs/http-requests/).
## Returning HTTP responses
-You can return HTTP responses from [HTTP-triggered workflows](/workflows/triggers/#http) using the [`$.respond()` function](/workflows/triggers/#http-responses).
+You can return HTTP responses from [HTTP-triggered workflows](/workflows/building-workflows/triggers/#http) using the [`$.respond()` function](/workflows/building-workflows/triggers/#http-responses).
## Invoke another workflow
@@ -367,7 +367,7 @@ await $.flow.trigger(
)
```
-[Find your workflow's ID here.](/troubleshooting#where-do-i-find-my-workflows-id)
+[Find your workflow's ID here.](/troubleshooting/#where-do-i-find-my-workflows-id)
This invokes the workflow directly -- you don't need to configure a trigger, and the request does not leave the platform.
@@ -436,7 +436,7 @@ Throwing a `ConfigurationError` in a Node.js step will display the error message
This is useful for providing feedback during validation of `props`. In the example below, a required Header value is missing from the Google Sheets action:
-
+
Or you can use it for validating the format of a given `email` prop:
@@ -460,13 +460,13 @@ export default defineComponent({
Workflow code is private. Still, we recommend you don't include secrets — API keys, tokens, or other sensitive values — directly in code steps.
-Pipedream supports [environment variables](/environment-variables/) for keeping secrets separate from code. Once you create an environment variable in Pipedream, you can reference it in any workflow using `process.env.VARIABLE_NAME`. The values of environment variables are private.
+Pipedream supports [environment variables](/workflows/environment-variables/) for keeping secrets separate from code. Once you create an environment variable in Pipedream, you can reference it in any workflow using `process.env.VARIABLE_NAME`. The values of environment variables are private.
-See the [Environment Variables](/environment-variables/) docs for more information.
+See the [Environment Variables](/workflows/environment-variables/) docs for more information.
## Limitations of code steps
-Code steps operate within the [general constraints on workflows](/limits/#workflows). As long as you stay within those limits and abide by our [acceptable use policy](/limits/#acceptable-use), you can add any number of code steps in a workflow to do virtually anything you'd be able to do in Node.js.
+Code steps operate within the [general constraints on workflows](/workflows/limits/#workflows). As long as you stay within those limits and abide by our [acceptable use policy](/workflows/limits/#acceptable-use), you can add any number of code steps in a workflow to do virtually anything you'd be able to do in Node.js.
If you're trying to run code that doesn't work or you have questions about any limits on code steps, [please reach out](https://pipedream.com/support/).
diff --git a/docs-v2/pages/code/nodejs/rerun.mdx b/docs-v2/pages/workflows/building-workflows/code/nodejs/rerun.mdx
similarity index 94%
rename from docs-v2/pages/code/nodejs/rerun.mdx
rename to docs-v2/pages/workflows/building-workflows/code/nodejs/rerun.mdx
index f7657ce12fdb8..877f73609258e 100644
--- a/docs-v2/pages/code/nodejs/rerun.mdx
+++ b/docs-v2/pages/workflows/building-workflows/code/nodejs/rerun.mdx
@@ -53,7 +53,7 @@ These URLs are specific to a single execution of your workflow. While the workfl
- Sending an HTTP request to the `cancel_url` will cancel that execution
- Sending an HTTP request to the `resume_url` will resume that execution
-If you resume a workflow, any data sent in the HTTP request is passed to the workflow and returned in the `$resume_data` [step export](/workflows/steps/#step-exports) of the suspended step. For example, if you call `$.flow.suspend` within a step named `code`, the `$resume_data` export should contain the data sent in the `resume_url` request:
+If you resume a workflow, any data sent in the HTTP request is passed to the workflow and returned in the `$resume_data` [step export](/workflows/#step-exports) of the suspended step. For example, if you call `$.flow.suspend` within a step named `code`, the `$resume_data` export should contain the data sent in the `resume_url` request:
-Requests to the `resume_url` have [the same limits as any HTTP request to Pipedream](/limits/#http-request-body-size), but you can send larger payloads using our [large payload](/workflows/triggers/#sending-large-payloads) or [large file](/workflows/triggers/#large-file-support) interfaces.
+Requests to the `resume_url` have [the same limits as any HTTP request to Pipedream](/workflows/limits/#http-request-body-size), but you can send larger payloads using our [large payload](/workflows/building-workflows/triggers/#sending-large-payloads) or [large file](/workflows/building-workflows/triggers/#large-file-support) interfaces.
### Default timeout of 24 hours
diff --git a/docs-v2/pages/code/nodejs/sharing-code.mdx b/docs-v2/pages/workflows/building-workflows/code/nodejs/sharing-code.mdx
similarity index 86%
rename from docs-v2/pages/code/nodejs/sharing-code.mdx
rename to docs-v2/pages/workflows/building-workflows/code/nodejs/sharing-code.mdx
index d356567287068..ab4da049c1a8a 100644
--- a/docs-v2/pages/code/nodejs/sharing-code.mdx
+++ b/docs-v2/pages/workflows/building-workflows/code/nodejs/sharing-code.mdx
@@ -3,13 +3,13 @@ import VideoPlayer from '@/components/VideoPlayer'
# Sharing code across workflows
-[Actions](/components#actions) are reusable steps. When you author an action, you can add it to your workflow like you would other actions, by clicking the **+** button below any step.
+[Actions](/workflows/contributing/components/#actions) are reusable steps. When you author an action, you can add it to your workflow like you would other actions, by clicking the **+** button below any step.
Pipedream provides two ways to share code across workflows:
-- **Publish an action from a Node.js code step**. [Publish any Node.js code step as a reusable action](/code/nodejs/sharing-code/#publish-an-action-from-a-nodejs-code-step) from the Pipedream dashboard.
+- **Publish an action from a Node.js code step**. [Publish any Node.js code step as a reusable action](/workflows/building-workflows/code/nodejs/sharing-code/#publish-an-action-from-a-nodejs-code-step) from the Pipedream dashboard.
-- **Create an action from code**. Develop your action code on your local filesystem and [publish to your Pipedream account using the Pipedream CLI](/components/quickstart/nodejs/actions/).
+- **Create an action from code**. Develop your action code on your local filesystem and [publish to your Pipedream account using the Pipedream CLI](/workflows/contributing/components/quickstart/nodejs/actions/).
## Publish an action from a Node.js code step
@@ -68,7 +68,7 @@ The `steps` variable contains the _workflows_ step exports.
When you publish a Node.js code step as an action, it becomes reusable across many workflows.
-This means that the step exports available vary depending on the workflow it's running on.
+This means that the step exports available vary depending on the workflow it's running on.
Defining props is a way to map inputs to actions and allow individual workflows to define which exports should be used.
@@ -132,12 +132,10 @@ Actions submitted to the public component registry can contain multiple files. A
**Will publishing a new version of an action automatically update all other steps using it?**
-No, a new version of an action doesn't automatically update all instances of the same action across your workflows.
-
-This gives you the control to gradually update. Learn how to [update steps to the newest action versions here](https://pipedream.com/docs/workflows/steps/actions/#updating-actions-to-the-latest-version).
+No, a new version of an action doesn't automatically update all instances of the same action across your workflows. This gives you the control to gradually update.
-After publishing a new version, all other steps using this same action will have the option to [update to the latest version](/workflows/actions/#updating-actions-to-the-latest-version).
+After publishing a new version, all other steps using this same action will have the option to [update to the latest version](/workflows/building-workflows/actions/#updating-actions-to-the-latest-version).
## Differences between publishing actions from workflow Node.js code steps and directly from code
@@ -145,6 +143,6 @@ Publishing reusable actions from Node.js code steps allows you to quickly scaffo
However, there are some differences.
-1. Node.js code step actions cannot make use of [app files to further reduce redundancy](/components/guidelines/#promoting-reusability).
-2. Node.js code step actions cannot be published to the [Pipedream Component Registry](/apps/contributing/).
-3. Node.js code step actions have a slightly different structure than [action components](/components/api/#component-api).
+1. Node.js code step actions cannot make use of [app files to further reduce redundancy](/workflows/contributing/components/guidelines/#promoting-reusability).
+2. Node.js code step actions cannot be published to the [Pipedream Component Registry](/workflows/contributing/).
+3. Node.js code step actions have a slightly different structure than [action components](/workflows/contributing/components/api/#component-api).
diff --git a/docs-v2/pages/code/nodejs/using-data-stores.mdx b/docs-v2/pages/workflows/building-workflows/code/nodejs/using-data-stores.mdx
similarity index 97%
rename from docs-v2/pages/code/nodejs/using-data-stores.mdx
rename to docs-v2/pages/workflows/building-workflows/code/nodejs/using-data-stores.mdx
index 44169481265c8..92c298eae44c3 100644
--- a/docs-v2/pages/code/nodejs/using-data-stores.mdx
+++ b/docs-v2/pages/workflows/building-workflows/code/nodejs/using-data-stores.mdx
@@ -33,7 +33,7 @@ All data store operations are asynchronous, so must be `await`ed.
Once you've defined a data store prop for your component, then you'll be able to create a new data store or use an existing one from your account.
-
+
## Saving data
@@ -244,7 +244,7 @@ export default defineComponent({
## Data store limitations
-Data Stores are only currently available in Node.js and Python steps. They are not yet available [Bash](/code/bash/) or [Go](/code/go/).
+Data Stores are only currently available in Node.js and Python steps. They are not yet available [Bash](/workflows/building-workflows/code/bash/) or [Go](/workflows/building-workflows/code/go/).
### Supported data types
diff --git a/docs-v2/pages/code/nodejs/working-with-files.mdx b/docs-v2/pages/workflows/building-workflows/code/nodejs/working-with-files.mdx
similarity index 82%
rename from docs-v2/pages/code/nodejs/working-with-files.mdx
rename to docs-v2/pages/workflows/building-workflows/code/nodejs/working-with-files.mdx
index dbcf6d9d1ca8d..70ee6fe4cd7cc 100644
--- a/docs-v2/pages/code/nodejs/working-with-files.mdx
+++ b/docs-v2/pages/workflows/building-workflows/code/nodejs/working-with-files.mdx
@@ -19,7 +19,7 @@ The `/tmp` directory is stored on the virtual machine that runs your workflow. W
### Reading a file from `/tmp`
-This example uses [step exports](/workflows/steps/#step-exports) to return the contents of a test file saved in `/tmp` as a string:
+This example uses [step exports](/workflows/#step-exports) to return the contents of a test file saved in `/tmp` as a string:
```javascript
import fs from "fs";
@@ -76,11 +76,11 @@ export default defineComponent({
### Download a file to `/tmp`
-[See this example](/code/nodejs/http-requests/#download-a-file-to-the-tmp-directory) to learn how to download a file to `/tmp`.
+[See this example](/workflows/building-workflows/code/nodejs/http-requests/#download-a-file-to-the-tmp-directory) to learn how to download a file to `/tmp`.
### Upload a file from `/tmp`
-[See this example](/code/nodejs/http-requests/#upload-a-file-from-the-tmp-directory) to learn how to upload a file from `/tmp` in an HTTP request.
+[See this example](/workflows/building-workflows/code/nodejs/http-requests/#upload-a-file-from-the-tmp-directory) to learn how to upload a file from `/tmp` in an HTTP request.
### Download a file, uploading it in another `multipart/form-data` request
@@ -90,7 +90,7 @@ export default defineComponent({
[This workflow](https://pipedream.com/@dylan/upload-email-attachments-to-s3-p_V9CGAQ/edit) is triggered by incoming emails. When copied, you'll get a workflow-specific email address you can send any email to. This workflow takes any attachments included with inbound emails, saves them to `/tmp`, and uploads them to Amazon S3.
-You should also be aware of the [inbound payload limits](/limits/#email-triggers) associated with the email trigger.
+You should also be aware of the [inbound payload limits](/workflows/limits/#email-triggers) associated with the email trigger.
### Downloading and uploading files from File Stores
@@ -98,4 +98,4 @@ Within Node.js code steps, you can download files from a File Store to the `/tmp
The `$.files` helper includes methods to upload and download files from the Project's File Store.
-[Read the File Stores `$.files` helper documentation.](/projects/file-stores/#managing-file-stores-from-workflows)
+[Read the File Stores `$.files` helper documentation.](/workflows/data-management/file-stores/#managing-file-stores-from-workflows))
diff --git a/docs-v2/pages/code/python/_meta.tsx b/docs-v2/pages/workflows/building-workflows/code/python/_meta.tsx
similarity index 93%
rename from docs-v2/pages/code/python/_meta.tsx
rename to docs-v2/pages/workflows/building-workflows/code/python/_meta.tsx
index 88b2ea43fa3fb..9c81cb2fdc407 100644
--- a/docs-v2/pages/code/python/_meta.tsx
+++ b/docs-v2/pages/workflows/building-workflows/code/python/_meta.tsx
@@ -7,5 +7,4 @@ export default {
"delay": "Delaying steps",
"rerun": "Pause, resume, and rerun steps",
"import-mappings": "Different PyPI package name and import name",
- "faqs": "Python FAQs",
} as const
diff --git a/docs-v2/pages/code/python/auth.mdx b/docs-v2/pages/workflows/building-workflows/code/python/auth.mdx
similarity index 81%
rename from docs-v2/pages/code/python/auth.mdx
rename to docs-v2/pages/workflows/building-workflows/code/python/auth.mdx
index cd17961c4deba..56fa21dc8bf02 100644
--- a/docs-v2/pages/code/python/auth.mdx
+++ b/docs-v2/pages/workflows/building-workflows/code/python/auth.mdx
@@ -1,14 +1,14 @@
# Connecting apps in Python
-When you use [prebuilt actions](/components#actions) tied to apps, you don't need to write the code to authorize API requests. Just [connect your account](/connected-accounts/#connecting-accounts) for that app and run your workflow.
+When you use [prebuilt actions](/workflows/contributing/components/#actions) tied to apps, you don't need to write the code to authorize API requests. Just [connect your account](/integrations/connected-accounts/#connecting-accounts) for that app and run your workflow.
-But sometimes you'll need to [write your own code](/code/python/). You can also connect apps to custom code steps, using the auth information to authorize requests to that app.
+But sometimes you'll need to [write your own code](/workflows/building-workflows/code/python/). You can also connect apps to custom code steps, using the auth information to authorize requests to that app.
For example, you may want to send a Slack message from a step. We use Slack's OAuth integration to authorize sending messages from your workflows.
Add Slack as an app on the Python step, then connect your Slack account.
-
+
Then within the Python code step, `pd.inputs["slack"]["$auth"]["oauth_access_token"]` will contain your Slack account OAuth token.
@@ -47,7 +47,7 @@ client = WebClient(token=token)
Where did `pd.inputs["slack"]` come from? Good question. It was generated when we connected Slack to our Python step.
-![The Slack app generates the pd.inputs["slack"] data](pages/code/python/images/v3/auth/connected-slack-account.png)
+![The Slack app generates the pd.inputs["slack"] data](/images/python/auth/connected-slack-account.png)
The Slack access token is generated by Pipedream, and is available to this step in the `pd.inputs[appName]["$auth"]` object:
@@ -82,10 +82,10 @@ When you search for an app in a step:
2. Search for the app you're looking for and select it from the list.
3. Select the option to **Run Python with any [app] API**.
-
+
This code operates as a template you can extend, and comes preconfigured with the connection to the target app and the code for authorizing requests to the API. You can modify this code however you'd like.
## Custom auth tokens / secrets
-When you want to connect to a 3rd party service that isn't supported by Pipedream, you can store those secrets in [Environment Variables](/environment-variables/).
+When you want to connect to a 3rd party service that isn't supported by Pipedream, you can store those secrets in [Environment Variables](/workflows/environment-variables/).
diff --git a/docs-v2/pages/code/python/delay.mdx b/docs-v2/pages/workflows/building-workflows/code/python/delay.mdx
similarity index 90%
rename from docs-v2/pages/code/python/delay.mdx
rename to docs-v2/pages/workflows/building-workflows/code/python/delay.mdx
index 99a41e3001c64..568cf5cbd3fb4 100644
--- a/docs-v2/pages/code/python/delay.mdx
+++ b/docs-v2/pages/workflows/building-workflows/code/python/delay.mdx
@@ -2,9 +2,9 @@ import Callout from '@/components/Callout'
# Delaying a workflow
-Use `pd.flow.delay` to [delay a step in a workflow](/workflows/control-flow/delay).
+Use `pd.flow.delay` to [delay a step in a workflow](/workflows/building-workflows/control-flow/delay/).
-These docs show you how to write Python code to handle delays. If you don't need to write code, see [our built-in delay actions](/workflows/control-flow/delay#delay-actions).
+These docs show you how to write Python code to handle delays. If you don't need to write code, see [our built-in delay actions](/workflows/building-workflows/control-flow/delay/#delay-actions).
## Using `pd.flow.delay`
@@ -37,7 +37,7 @@ Paused workflow state
When `pd.flow.delay` is executed in a Python step, the workflow itself will enter a **Paused** state.
-While the workflow is paused, it will not incur any credits towards compute time. You can also [view all paused workflows in the Event History](/event-history/#filtering-by-status).
+While the workflow is paused, it will not incur any credits towards compute time. You can also [view all paused workflows in the Event History](/workflows/event-history/#filtering-by-status).
### Credit usage
@@ -51,7 +51,7 @@ One credit is used to initially start the workflow, then the second credit is us
Exact credit usage depends on duration and memory configuration
-If your workflow's [execution timeout limit](/workflows/settings/#execution-timeout-limit) is set to longer than [default limit](/limits/#time-per-execution), it may incur more than two [credits](/pricing/#credits) when using `pd.flow.delay`.
+If your workflow's [execution timeout limit](/workflows/building-workflows/settings/#execution-timeout-limit) is set to longer than [default limit](/workflows/limits/#time-per-execution), it may incur more than two [credits](/pricing/#credits) when using `pd.flow.delay`.
## `cancel_url` and `resume_url`
@@ -122,7 +122,7 @@ import time
def handler(pd: 'pipedream'):
# delay this step for 30 seconds
delay = 30
-
+
time.sleep(delay)
```
diff --git a/docs-v2/pages/code/python/http-requests.mdx b/docs-v2/pages/workflows/building-workflows/code/python/http-requests.mdx
similarity index 95%
rename from docs-v2/pages/code/python/http-requests.mdx
rename to docs-v2/pages/workflows/building-workflows/code/python/http-requests.mdx
index 0dfc90b53080f..7ae57ea425ef8 100644
--- a/docs-v2/pages/code/python/http-requests.mdx
+++ b/docs-v2/pages/workflows/building-workflows/code/python/http-requests.mdx
@@ -6,7 +6,7 @@ HTTP requests are fundamental to working with APIs or other web services. You ca
**Below, we'll review how to make HTTP requests using Python code on Pipedream.**
-We recommend using the popular `requests` HTTP client package available in Python to send HTTP requests, but [you can use any PyPi package you'd like on Pipedream](/code/python/#using-third-party-packages).
+We recommend using the popular `requests` HTTP client package available in Python to send HTTP requests, but [you can use any PyPi package you'd like on Pipedream](/workflows/building-workflows/code/python/#using-third-party-packages).
@@ -174,7 +174,7 @@ def handler(pd: "pipedream"):
## Downloading a file to the `/tmp` directory
-This example shows you how to download a file to a file in [the `/tmp` directory](/code/python/working-with-files/). This can be especially helpful for downloading large files: it streams the file to disk, minimizing the memory the workflow uses when downloading the file.
+This example shows you how to download a file to a file in [the `/tmp` directory](/workflows/building-workflows/code/python/working-with-files/). This can be especially helpful for downloading large files: it streams the file to disk, minimizing the memory the workflow uses when downloading the file.
```python
import requests
@@ -194,7 +194,7 @@ def handler(pd: "pipedream"):
## Uploading a file from the `/tmp` directory
-This example shows you how to make a `multipart/form-data` request with a file as a form part. You can store and read any files from [the `/tmp` directory](/code/python/working-with-files/#the-tmp-directory).
+This example shows you how to make a `multipart/form-data` request with a file as a form part. You can store and read any files from [the `/tmp` directory](/workflows/building-workflows/code/python/working-with-files/#the-tmp-directory).
This can be especially helpful for uploading large files: it streams the file from disk, minimizing the memory the workflow uses when uploading the file.
@@ -277,8 +277,8 @@ import requests
def handler(pd: "pipedream"):
url = "https://api.github.com/graphql"
query = """
-query {
- viewer {
+query {
+ viewer {
login
}
}
diff --git a/docs-v2/pages/code/python/import-mappings.mdx b/docs-v2/pages/workflows/building-workflows/code/python/import-mappings.mdx
similarity index 100%
rename from docs-v2/pages/code/python/import-mappings.mdx
rename to docs-v2/pages/workflows/building-workflows/code/python/import-mappings.mdx
diff --git a/docs-v2/pages/code/python/index.mdx b/docs-v2/pages/workflows/building-workflows/code/python/index.mdx
similarity index 70%
rename from docs-v2/pages/code/python/index.mdx
rename to docs-v2/pages/workflows/building-workflows/code/python/index.mdx
index d3e8cadad0513..3a37256d2a88d 100644
--- a/docs-v2/pages/code/python/index.mdx
+++ b/docs-v2/pages/workflows/building-workflows/code/python/index.mdx
@@ -23,14 +23,14 @@ def handler(pd: "pipedream"):
return {"foo": {"test": True}}
```
-You can also perform more complex operations, including [leveraging your connected accounts to make authenticated API requests](/code/python/auth/), [accessing Data Stores](/code/python/using-data-stores/) and [installing PyPI packages](/code/python/#using-third-party-packages).
+You can also perform more complex operations, including [leveraging your connected accounts to make authenticated API requests](/workflows/building-workflows/code/python/auth/), [accessing Data Stores](/workflows/building-workflows/code/python/using-data-stores/) and [installing PyPI packages](/workflows/building-workflows/code/python/#using-third-party-packages).
-- [Install PyPI Packages](/code/python/#using-third-party-packages)
-- [Import data exported from other steps](/code/python/#using-data-from-another-step)
-- [Export data to downstream steps](/code/python/#sending-data-downstream-to-other-steps)
-- [Retrieve data from a data store](/code/python/using-data-stores/#retrieving-data)
-- [Store data into a data store](/code/python/using-data-stores/#saving-data)
-- [Access API credentials from connected accounts](/code/python/auth/)
+- [Install PyPI Packages](/workflows/building-workflows/code/python/#using-third-party-packages)
+- [Import data exported from other steps](/workflows/building-workflows/code/python/#using-data-from-another-step)
+- [Export data to downstream steps](/workflows/building-workflows/code/python/#sending-data-downstream-to-other-steps)
+- [Retrieve data from a data store](/workflows/building-workflows/code/python/using-data-stores/#retrieving-data)
+- [Store data into a data store](/workflows/building-workflows/code/python/using-data-stores/#saving-data)
+- [Access API credentials from connected accounts](/workflows/building-workflows/code/python/auth/)
## Logging and debugging
@@ -38,7 +38,7 @@ You can use `print` at any time in a Python code step to log information as the
The output for the `print` **logs** will appear in the `Results` section just beneath the code editor.
-
+
## Using third party packages
@@ -72,7 +72,7 @@ vs.
import telegram
```
-Use the built in [magic comment system to resolve these mismatches](/code/python/import-mappings/):
+Use the built in [magic comment system to resolve these mismatches](/workflows/building-workflows/code/python/import-mappings/):
```python
# pipedream add-package python-telegram-bot
@@ -83,7 +83,7 @@ import telegram
Each time you deploy a workflow with Python code, Pipedream downloads the PyPi packages you `import` in your step. **By default, Pipedream deploys the latest version of the PyPi package each time you deploy a change**.
-There are many cases where you may want to specify the version of the packages you're using. If you'd like to use a _specific_ version of a package in a workflow, you can add that version in a [magic comment](/code/python/import-mappings/), for example:
+There are many cases where you may want to specify the version of the packages you're using. If you'd like to use a _specific_ version of a package in a workflow, you can add that version in a [magic comment](/workflows/building-workflows/code/python/import-mappings/), for example:
```python
# pipedream add-package pandas==2.0.0
@@ -100,11 +100,11 @@ We recommend using the popular `requests` HTTP client package available in Pytho
No need to run `pip install`, just `import requests` at the top of your step's code and it's available for your code to use.
-See the [Making HTTP Requests with Python](/code/python/http-requests/) docs for more information.
+See the [Making HTTP Requests with Python](/workflows/building-workflows/code/python/http-requests/) docs for more information.
## Returning HTTP responses
-You can return HTTP responses from [HTTP-triggered workflows](/workflows/triggers/#http) using the `pd.respond()` method:
+You can return HTTP responses from [HTTP-triggered workflows](/workflows/building-workflows/triggers/#http) using the `pd.respond()` method:
```python
def handler(pd: "pipedream"):
@@ -119,11 +119,11 @@ def handler(pd: "pipedream"):
Please note to always include at least the `body` and `status` keys in your `pd.respond` argument. The `body` must also be a JSON serializable object or dictionary.
-Unlike the [Node.js equivalent](https://pipedream.com/docs/workflows/steps/triggers/#http-responses), the Python `pd.respond` helper does not yet support responding with Streams.
+Unlike the Node.js equivalent, the Python `pd.respond` helper does not yet support responding with Streams.
-_Don't forget_ to [configure your workflow's HTTP trigger to allow a custom response](/workflows/triggers/#http-responses). Otherwise your workflow will return the default response.
+_Don't forget_ to [configure your workflow's HTTP trigger to allow a custom response](/workflows/building-workflows/triggers/#http-responses). Otherwise your workflow will return the default response.
## Sharing data between steps
@@ -188,7 +188,7 @@ You can only export JSON-serializable data from steps. Things like:
## Using environment variables
-You can leverage any [environment variables defined in your Pipedream account](/environment-variables/#environment-variables) in a Python step. This is useful for keeping your secrets out of code as well as keeping them flexible to swap API keys without having to update each step individually.
+You can leverage any [environment variables defined in your Pipedream account](/workflows/environment-variables/) in a Python step. This is useful for keeping your secrets out of code as well as keeping them flexible to swap API keys without having to update each step individually.
To access them, use the `os` module.
@@ -295,4 +295,28 @@ The `/tmp` directory is accessible from your workflow steps for saving and retri
You have full access to read and write both files in `/tmp`.
-See the [Working with the filesystem in Python](/code/python/working-with-files/) docs for more information.
+See the [Working with the filesystem in Python](/workflows/building-workflows/code/python/working-with-files/) docs for more information.
+
+## FAQ
+
+### What's the difference between `def handler(pd)` and the `pipedream` package for Python code steps?
+
+The pd object passed to the handler method lets you exit the [workflow early](/workflows/building-workflows/code/python/#ending-a-workflow-early), [integrate a Data Store](/workflows/building-workflows/code/python/using-data-stores/), and [use connected accounts](/workflows/building-workflows/code/python/auth/) into your Python code steps.
+
+However, at this time there are issues with our Python interpreter that is causing an `ECONNRESET` error.
+
+If you need [to use data from other steps](/workflows/building-workflows/code/python/#using-data-from-another-step) or [export data to other steps](/workflows/building-workflows/code/python/#sending-data-downstream-to-other-steps) in your workflow, we recommend using the `pipedream` package module.
+
+If you need to use a Data Store in your workflow, we recommend using a [pre-built action](/workflows/data-management/data-stores/) to retrieve or store data or [Node.js's Data Store](/workflows/building-workflows/code/nodejs/using-data-stores/) capabilities.
+
+### I've tried installing a Python package with a normal import and the magic comment system, but I still can't. What can I do?
+
+Some Python packages require binaries present within the environment in order to function properly. Or they include binaries but those binaries are not compatible with the Pipedream workflow environment.
+
+Unfortunately we cannot support these types of packages at this time, but if you have an issue importing a PyPI package into a Python code step [please open a issue](https://github.com/PipedreamHQ/pipedream/issues/new/choose).
+
+### Can I publish my Python code as a reusable pre-built action or trigger like you can with Node.js?
+
+Not at this time. Pipedream only supports Python as a code step language. The Components system only supports Node.js at this time.
+
+You can still duplicate Python code steps within the same workflow, but to reuse a code step, you'll need to copy and paste the Python code to another workflow.
diff --git a/docs-v2/pages/code/python/rerun.mdx b/docs-v2/pages/workflows/building-workflows/code/python/rerun.mdx
similarity index 95%
rename from docs-v2/pages/code/python/rerun.mdx
rename to docs-v2/pages/workflows/building-workflows/code/python/rerun.mdx
index e8a31bd67bf81..01f9463bbf8d1 100644
--- a/docs-v2/pages/code/python/rerun.mdx
+++ b/docs-v2/pages/workflows/building-workflows/code/python/rerun.mdx
@@ -2,7 +2,7 @@ import Callout from '@/components/Callout'
# Pause, resume, and rerun a workflow
-You can use `pd.flow.suspend` and `pd.flow.rerun` to pause a workflow and resume it later.
+You can use `pd.flow.suspend` and `pd.flow.rerun` to pause a workflow and resume it later.
This is useful when you want to:
@@ -43,11 +43,11 @@ These URLs are specific to a single execution of your workflow. While the workfl
- Sending an HTTP request to the `cancel_url` will cancel that execution
- Sending an HTTP request to the `resume_url` will resume that execution
-If you resume a workflow, any data sent in the HTTP request is passed to the workflow and returned in the `$resume_data` [step export](/workflows/steps/#step-exports) of the suspended step. For example, if you call `pd.flow.suspend` within a step named `code`, the `$resume_data` export should contain the data sent in the `resume_url` request:
+If you resume a workflow, any data sent in the HTTP request is passed to the workflow and returned in the `$resume_data` [step export](/workflows/#step-exports) of the suspended step. For example, if you call `pd.flow.suspend` within a step named `code`, the `$resume_data` export should contain the data sent in the `resume_url` request:

-### Default timeout of 24 hours
+### Default timeout of 24 hours
By default, `pd.flow.suspend` will automatically cancel the workflow after 24 hours. You can set your own timeout (in milliseconds) as the first argument:
@@ -79,10 +79,10 @@ def handler(pd: 'pipedream'):
if run['runs'] == 1:
# pd.flow.rerun(delay, context (discussed below), max retries)
pd.flow.rerun(DELAY, None, MAX_RETRIES)
-
+
elif run['runs'] == MAX_RETRIES + 1:
raise Exception("Max retries exceeded")
-
+
else:
# Poll external API for status
response = requests.get("https://example.com/status")
@@ -122,7 +122,7 @@ def handler(pd: 'pipedream'):
# Send resume_url to external service
await request.post("your callback URL", json=links)
- # When the external service calls back into the resume_url, you have access to
+ # When the external service calls back into the resume_url, you have access to
# the callback data within pd.context.run['callback_request']
elif 'callback_request' in run:
return run['callback_request']
diff --git a/docs-v2/pages/code/python/using-data-stores.mdx b/docs-v2/pages/workflows/building-workflows/code/python/using-data-stores.mdx
similarity index 96%
rename from docs-v2/pages/code/python/using-data-stores.mdx
rename to docs-v2/pages/workflows/building-workflows/code/python/using-data-stores.mdx
index acd9dc49c126a..240f78313d9fe 100644
--- a/docs-v2/pages/code/python/using-data-stores.mdx
+++ b/docs-v2/pages/workflows/building-workflows/code/python/using-data-stores.mdx
@@ -2,7 +2,7 @@ import Callout from '@/components/Callout'
# Using Data Stores
-You can store and retrieve data from [Data stores](/data-stores/) in Python without connecting to a 3rd party database.
+You can store and retrieve data from [Data stores](/workflows/data-management/data-stores/) in Python without connecting to a 3rd party database.
Add a data store as a input to a Python step, then access it in your Python `handler` with `pd.inputs["data_store"]`.
@@ -23,7 +23,7 @@ def handler(pd: "pipedream"):
Click _Add Data Store_ near the top of a Python step:
-
+
This will add the selected data store to your Python code step.
diff --git a/docs-v2/pages/code/python/working-with-files.mdx b/docs-v2/pages/workflows/building-workflows/code/python/working-with-files.mdx
similarity index 87%
rename from docs-v2/pages/code/python/working-with-files.mdx
rename to docs-v2/pages/workflows/building-workflows/code/python/working-with-files.mdx
index e51e43f5ef7d7..3a37a213a0087 100644
--- a/docs-v2/pages/code/python/working-with-files.mdx
+++ b/docs-v2/pages/workflows/building-workflows/code/python/working-with-files.mdx
@@ -65,11 +65,11 @@ def handler(pd: "pipedream"):
## Downloading a file to `/tmp`
-[See this example](/code/python/http-requests/#downloading-a-file-to-the-tmp-directory) to learn how to download a file to `/tmp`.
+[See this example](/workflows/building-workflows/code/python/http-requests/#downloading-a-file-to-the-tmp-directory) to learn how to download a file to `/tmp`.
## Uploading a file from `/tmp`
-[See this example](/code/python/http-requests/#uploading-a-file-from-the-tmp-directory) to learn how to upload a file from `/tmp` in an HTTP request.
+[See this example](/workflows/building-workflows/code/python/http-requests/#uploading-a-file-from-the-tmp-directory) to learn how to upload a file from `/tmp` in an HTTP request.
## Downloading a file, uploading it in another `multipart/form-data` request
@@ -106,10 +106,10 @@ def handler(pd: "pipedream"):
The `/tmp` directory can store up to {process.env.TMP_SIZE_LIMIT} of storage. Also the storage may be wiped or may not exist between workflow executions.
-To avoid errors, assume that the `/tmp` directory is empty between workflow runs. Please refer to the [disk limits](/limits/#disk) for details.
+To avoid errors, assume that the `/tmp` directory is empty between workflow runs. Please refer to the [disk limits](/workflows/limits/#disk) for details.
Are File Stores helpers available for Python to download, upload and manage files?
-At this time no, only Node.js includes a helper to interact with the [File Store](/projects/file-stores/) programmatically within workflows.
+At this time no, only Node.js includes a helper to interact with the [File Store](/workflows/projects/file-stores/) programmatically within workflows.
diff --git a/docs-v2/pages/workflows/control-flow/_meta.tsx b/docs-v2/pages/workflows/building-workflows/control-flow/_meta.tsx
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/_meta.tsx
rename to docs-v2/pages/workflows/building-workflows/control-flow/_meta.tsx
diff --git a/docs-v2/pages/workflows/control-flow/delay.mdx b/docs-v2/pages/workflows/building-workflows/control-flow/delay.mdx
similarity index 76%
rename from docs-v2/pages/workflows/control-flow/delay.mdx
rename to docs-v2/pages/workflows/building-workflows/control-flow/delay.mdx
index 00f874945f939..ad19ca0919333 100644
--- a/docs-v2/pages/workflows/control-flow/delay.mdx
+++ b/docs-v2/pages/workflows/building-workflows/control-flow/delay.mdx
@@ -20,11 +20,11 @@ You can pause your workflow without writing code using the **Delay** actions:
3. Select the **Delay Workflow** action
4. Configure the action to delay any amount of time, up to one year
-
+
#### `$.flow.delay`
-If you need to delay a workflow within Node.js code, or you need detailed control over how delays occur, [see the docs on `$.flow.delay`](/code/nodejs/delay/).
+If you need to delay a workflow within Node.js code, or you need detailed control over how delays occur, [see the docs on `$.flow.delay`](/workflows/building-workflows/code/nodejs/delay/).
#### The state of delayed executions
@@ -34,11 +34,11 @@ Delayed executions can hold one of three states:
- **Resumed**: The workflow has been resumed at the end of its delay window automatically, or resumed manually
- **Cancelled**: The execution was cancelled manually
-You'll see the current state of an execution by [viewing its event data](/workflows/events/inspect/).
+You'll see the current state of an execution by [viewing its event data](/workflows/building-workflows/triggers/inspect/).
#### Cancelling or resuming execution manually
-The [**Delay** actions](#delay-actions) and [`$.flow.delay`](/code/nodejs/delay/) return two URLs each time they run:
+The [**Delay** actions](#delay-actions) and [`$.flow.delay`](/workflows/building-workflows/code/nodejs/delay/) return two URLs each time they run:

@@ -47,4 +47,4 @@ These URLs are specific to a single execution of your workflow. While the workfl
- Hitting the `cancel_url` will immediately cancel that execution
- Hitting the `resume_url` will immediately resume that execution early
-If you use [`$.flow.delay`](/code/nodejs/delay/), you can send these URLs to your own system to handle cancellation / resumption. You can even email your customers to let them cancel / resume workflows that run on their behalf.
+If you use [`$.flow.delay`](/workflows/building-workflows/code/nodejs/delay/), you can send these URLs to your own system to handle cancellation / resumption. You can even email your customers to let them cancel / resume workflows that run on their behalf.
diff --git a/docs-v2/pages/workflows/control-flow/end-workflow.mdx b/docs-v2/pages/workflows/building-workflows/control-flow/end-workflow.mdx
similarity index 65%
rename from docs-v2/pages/workflows/control-flow/end-workflow.mdx
rename to docs-v2/pages/workflows/building-workflows/control-flow/end-workflow.mdx
index 07fc0109ddcac..0123b8e25dc83 100644
--- a/docs-v2/pages/workflows/control-flow/end-workflow.mdx
+++ b/docs-v2/pages/workflows/building-workflows/control-flow/end-workflow.mdx
@@ -2,20 +2,20 @@
To terminate the workflow prior to the last step, use the **End Workflow** pre-built action or `$.flow.exit()` in code.
-
+
## End Workflow Using a Pre-Built Action
- Select and configure the End Workflow action from the step selector
- When the step runs, the workflow execution will stop
- You may configure an optional reason for ending the workflow execution. This reason will be surfaced when inspecting the event execution.
-
- 
-
+
+ 
+
## End Workflow in Code
Check the reference for your preferred language to learn how to end the workflow execution in code.
-- [Ending a workflow in Node.js](/code/nodejs#ending-a-workflow-early)
-- [Ending a workflow in Python](/code/python#ending-a-workflow-early)
\ No newline at end of file
+- [Ending a workflow in Node.js](/workflows/building-workflows/code/nodejs/#ending-a-workflow-early)
+- [Ending a workflow in Python](/workflows/building-workflows/code/python/#ending-a-workflow-early)
diff --git a/docs-v2/pages/workflows/control-flow/filter.mdx b/docs-v2/pages/workflows/building-workflows/control-flow/filter.mdx
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/filter.mdx
rename to docs-v2/pages/workflows/building-workflows/control-flow/filter.mdx
diff --git a/docs-v2/pages/workflows/control-flow/ifelse.mdx b/docs-v2/pages/workflows/building-workflows/control-flow/ifelse.mdx
similarity index 82%
rename from docs-v2/pages/workflows/control-flow/ifelse.mdx
rename to docs-v2/pages/workflows/building-workflows/control-flow/ifelse.mdx
index e788edeb5226c..b2f42498a0d4e 100644
--- a/docs-v2/pages/workflows/control-flow/ifelse.mdx
+++ b/docs-v2/pages/workflows/building-workflows/control-flow/ifelse.mdx
@@ -8,9 +8,9 @@ import { Steps } from 'nextra/components'
**If/Else** is single path branching operator. You can create multiple execution branches, but Pipedream will execute the **first** branch that matches the configured rules. The order in which rules are defined will affect the path of execution.
-If/Else operator is useful when you need to branch based on the value of multiple input variables. You must define both the input variable and condition to evaluate for every rule. If you only need to test for the value of a single input variable (e.g., if you are branching based on the path of an inbound request), the [Switch operator](./switch) may be a better choice.
+If/Else operator is useful when you need to branch based on the value of multiple input variables. You must define both the input variable and condition to evaluate for every rule. If you only need to test for the value of a single input variable (e.g., if you are branching based on the path of an inbound request), the [Switch operator](./switch/) may be a better choice.
-
+
## Capabilities
@@ -39,13 +39,13 @@ The If/Else operator is a control flow **Block** with **start** and **end** phas
Add a trigger and generate an event to help you build and test your workflow:
-
+
### Add the If/Else control flow block
Click the + button to add a step to the canvas and select If/Else from the Control Flow section on the right. In the “start” phase, configure rules for each branch (optionally toggle the else branch) and then test the step.
-
+
**IMPORTANT:** If you disable the **Else** condition and an event does not match any of the rules, the workflow will continue to the next step after the **If/Else** section. If you want to end workflow execution if no other conditions evaluate to `true`, enable the Else condition and add a **Terminate Workflow** action.
@@ -55,32 +55,32 @@ Click the + button to add a step to the canvas and select If/Else from the Contr
Add a step to the success branch and test it
-
+
### Merge and continue the parent flow after the branching operation
Test the end phase to export results from the If/Else control flow block.
-
+
Add a step and reference the exports from `ifelse` using the steps object.
-
+
### Build and test alternate paths
Generate or select an alternate event to generate data to help you test other branches as you build. When you select a new event, the steps in the root workflow segments go stale. Steps in control flow blocks will only go stale if they are in the known path of execution; i.e., if you test a start phase, the steps in the success path will become stale.
-
+
Build, test and deploy the workflow.
-
+
### Test the deployed workflow
Generate test events to trigger the deployed workflow and inspect the executions.
-
+
-
\ No newline at end of file
+
diff --git a/docs-v2/pages/workflows/control-flow/index.mdx b/docs-v2/pages/workflows/building-workflows/control-flow/index.mdx
similarity index 81%
rename from docs-v2/pages/workflows/control-flow/index.mdx
rename to docs-v2/pages/workflows/building-workflows/control-flow/index.mdx
index f9a55f4bd857c..623c69ca71a60 100644
--- a/docs-v2/pages/workflows/control-flow/index.mdx
+++ b/docs-v2/pages/workflows/building-workflows/control-flow/index.mdx
@@ -10,10 +10,10 @@ Pipedream is adding powerful control flow operators so you can build and run non
| Operator | Description |
| :--- | :--- |
-| [If/Else (beta)](./control-flow/ifelse) | Supports single-path, logical branching orchestration. |
-| [Delay](./control-flow/delay) | Add a delay from 1 millisecond to 1 year before the next step of your workflow proceeds. |
-| [Filter](./control-flow/filter) | Define rules to stop or continue workflow execution. |
-| [End Workflow](./control-flow/end-workflow) | Terminate the workflow prior to the last step. |
+| [If/Else (beta)](./control-flow/ifelse/) | Supports single-path, logical branching orchestration. |
+| [Delay](./control-flow/delay/) | Add a delay from 1 millisecond to 1 year before the next step of your workflow proceeds. |
+| [Filter](./control-flow/filter/) | Define rules to stop or continue workflow execution. |
+| [End Workflow](./control-flow/end-workflow/) | Terminate the workflow prior to the last step. |
More operators (including parallel and looping) are coming soon.
@@ -32,95 +32,95 @@ More operators (including parallel and looping) are coming soon.
The execution path represents the specific steps (and the order of steps) that run when a workflow is triggered.
- Simple linear workflows are executed from top to bottom — every step is in the execution path.
-
- 
-
+
+ 
+
- With the introduction of non-linear workflows, steps may or may not be executed depending on the rules configured for control flow operators and the results exported from prior steps.
-
- 
-
+
+ 
+
Therefore, we introduced new patterns to signal the execution path and help you build, test and inspect workflows.
-
+
### Executed Path
Step borders, backgrounds and connectors now highlight the **executed path** — the steps that are executed on the execution path. If a non-execution path step is tested, it will not be reflected as being on the execution path.
-
+
### Building and Testing in an Unknown or Non-Execution Path
-You may add and test steps in any path. However, Pipedream highlights that the results may not be reliable if the step is outside the executed path; the results may not match the outcome if the steps were in a known execution path and may lead to invalid or misleading results.
+You may add and test steps in any path. However, Pipedream highlights that the results may not be reliable if the step is outside the executed path; the results may not match the outcome if the steps were in a known execution path and may lead to invalid or misleading results.
-
+
### Signaling Steps are “Out of Date”
If prior steps in a workflow are modified or retested, Pipedream marks later steps in the execution path as _stale_ to signal that the results may be out of date. In the non-linear model, Pipedream only marks steps that are in the confirmed execution path as stale.
- If a change is made to a prior step, then the executed path is cleared.
-
- 
-
+
+ 
+
- Steps in the known execution path are immediately marked as stale
- State within conditional blocks is not updated until the start phase is tested and execution path is identified.
-
- 
-
+
+ 
+
### Test State vs Execution Path
Steps may be tested whether or not they are in the execution path. The test state for a step reflects whether a step was successfully tested or needs attention (the step may have errored, the results may be out of date, etc) and is denoted by the icon at the top left of each step.
- Last test was successful
-
- 
-
+
+ 
+
- Results may be stale, step may be untested, etc
-
- 
-
+
+ 
+
- **Step has an error or is not configured**
-
- 
-
+
+ 
+
## Workflow Segments
### Context
-Workflow segments are a linear series of steps that with no control flow operators.
+Workflow segments are a linear series of steps that with no control flow operators.
- A simple linear workflow is composed of a single workflow segment.
-
- 
-
+
+ 
+
- When a control flow operator is introduced, then the workflow contains multiple segments. For example, when a Delay operator is added to the simple linear workflow above the workflow goes from 1 to 2 segements.
-
- 
-
+
+ 
+
- The following example using If/Else contains 5 workflow segments. However, since only 1 branch within the If/Else control flow block is run on each workflow execution, the maximum number of segments that will be executed for each trigger event is 3.
-
- 
-
+
+ 
+
### Billing
-Pipedream compiles each workflow segment into an executable function to optimize performance and reduce credit usage; credit usage is calculated independently for each workflow segment independent of the number of steps (rather than per step like many other platforms).
+Pipedream compiles each workflow segment into an executable function to optimize performance and reduce credit usage; credit usage is calculated independently for each workflow segment independent of the number of steps (rather than per step like many other platforms).
- For example, the two workflow segments below both use a single credit:
- **Trigger + 1 step workflow segment (1 credit)**
-
- 
-
+
+ 
+
- **Trigger + 5 step workflow segment (1 credit)**
-
- 
-
+
+ 
+
- The If/Else example above that contains 5 workflow segments, but only 3 workflow segments in any given execution path will only incur 3 credits of usage per execution.
-
- 
-
+
+ 
+
### Timeout and Memory
@@ -156,7 +156,7 @@ Steps may only reference prior steps in the same workflow segment or it’s dire
**Blocks** are compound steps that are composed of a **start** and an **end** phase. Blocks may contain one or more workflow segments between the phases.
- Most non-linear control flow operators will be structured as blocks (vs. standard steps)
-- You may add steps or blocks to [workflow segments](https://www.notion.so/Pipedream-3-0-Control-Flow-Preview-feb105a8c7ba41bbbb87028d2eb1e47b?pvs=21) between start and end phases of a block
+- You may add steps or blocks to [workflow segments](#workflow-segments) between start and end phases of a block
- The start and end phases are independently testable
- The start phase evaluates the rules/configuration for a block; the results may influence the execution path
- The end phase exports results from the control flow block that can be referenced in future workflow steps
@@ -166,29 +166,29 @@ Steps may only reference prior steps in the same workflow segment or it’s dire
When building a workflow with a control flow block, we recommend testing the start phase, followed by steps in the execution path followed by the end phase.
-
+
For a conditional operator like if/else, we then recommend generating events that trigger alternate conditions and testing those.
-
+
#### Passing data to steps in a control flow block
Steps may only reference prior steps in the same workflow segment or it’s direct ancestors. In the following example, `step_c` and `step_d` (within the if/else control flow block) can directly reference any exports from `trigger`, `step_a`, or `step_b` (in the parent/root workflow segment) via the steps object. `step_c` and `step_d` are siblings and cannot reference exports from each other.
-
+
#### Referencing data from steps in a previous block
Steps after the end phase may not directly reference steps within a control flow block (between the start and end phases). E.g., in the following workflow there are two branches:
-
+
In this example, `step_f` is executed after a control flow block. It can directly reference prior steps in the root workflow segment (`trigger`, `step_a` and `step_b` using the `steps` object).
However, `step_f` cannot reference directly reference data exported by `step_c` or `step_d`. The reason is that due to the non-linear execution, `step_c` and `step_d` are not guaranteed to execute for every event. **To reference data from a control flow block, reference the exports of the end phase.** Refer to the documentation to understand how data is exported for each control flow operator (e.g., for if/else, the exports of the last step in the branch are returned as the exports for the end phase; you can easily normalize the results across branches using a code step).
-In this example, `step_f` can reference the exported data for an executed branch by referencing `steps.ifelse.$return_value`.
+In this example, `step_f` can reference the exported data for an executed branch by referencing `steps.ifelse.$return_value`.
### Nesting
@@ -199,7 +199,7 @@ Control flow blocks may be nested within other control flow blocks:
There is currently no limit on the number of nested elements.
-
+
## Rule Builder
@@ -207,25 +207,25 @@ There is currently no limit on the number of nested elements.
Pipedream is introducing a rule builder for comparative operations. The rule builder is currently only supported by the If/Else operator, but it will be extended to other operators including Switch and Filter.
-
+
### Simple conditions
Compare values using supported operators.
-
+
### Combine multiple conditions using AND / OR
Click “Add condition” using the menu on the right to add multiple conditions. Click on AND / OR to toggle the operator.
-
+
### Test for multiple conditions using Groups
Create and manage groups using the menu options to “Add group”, “Make condition into group”, “Nest group” and “Remove group”.
-
+
### Supported Operators
diff --git a/docs-v2/pages/workflows/control-flow/parallel.mdx b/docs-v2/pages/workflows/building-workflows/control-flow/parallel.mdx
similarity index 75%
rename from docs-v2/pages/workflows/control-flow/parallel.mdx
rename to docs-v2/pages/workflows/building-workflows/control-flow/parallel.mdx
index a0b1dee96e25e..7f9469ca5be50 100644
--- a/docs-v2/pages/workflows/control-flow/parallel.mdx
+++ b/docs-v2/pages/workflows/building-workflows/control-flow/parallel.mdx
@@ -6,9 +6,9 @@ import { Steps } from 'nextra/components'
## Overview
-**Parallel** is multi-path branching operator. It allows you to create multiple execution branches with optional filtering rules and Pipedream will execute **all** matching branches. Unlike [Switch](./switch) and [If/Else](./ifelse), the order in which rules are defined will not affect the path of execution.
+**Parallel** is multi-path branching operator. It allows you to create multiple execution branches with optional filtering rules and Pipedream will execute **all** matching branches. Unlike [Switch](./switch/) and [If/Else](./ifelse/), the order in which rules are defined will not affect the path of execution.
-
+
## Capabilities
@@ -24,25 +24,25 @@ The Parallel operator is a control flow **Block** with **start** and **end** pha
Select **Parallel** from the **Control Flow** section of the step selector:
-
+
### Create Branches
To create new branches, click the `+` button:
-
+
### Rename Branches
Edit the branch's nameslug on the canvas or in the right pane after selecting the **Start** phase of the parallel block. The nameslug communicates the branch's purpose and affects workflow execution—the end phase exports an object, with each key corresponding to a branch name.
-
+
### Export Data to the Parent Flow
-You can export data from a parallel operation and continue execution in the parent flow.
+You can export data from a parallel operation and continue execution in the parent flow.
- The parallel block exports data as a JSON object
-- Branch exports are assigned to a key corresponding to the branch name slug (in the object exported from the block)
+- Branch exports are assigned to a key corresponding to the branch name slug (in the object exported from the block)
- Only the exports from the last step of each executed branch are included in the parallel block's return value
- To preview the exported data, test the **End** phase of the parallel block
@@ -58,42 +58,42 @@ Workflow queue settings (concurrency, execution rate) may not work as expected w
Add a trigger and generate an event to help you build and test your workflow:
-
+
### Add the Parallel control flow block
Click the + button to add a step to the canvas and select Parallel from the Control Flow section on the right. You can optionally add or remove branches and configure conditions defining when each branch should run.
-
+
### Test to identify the execution path(s)
Test the **Start** phase to identify which branches will execute for the current event.
-
+
### Add steps to branches
Add steps to the branches. These steps will be executed in parallel when the workflow runs.
-
+
### Optionally merge and continue to the parent flow
Test the **End** phase to export the results of the last step of each branch that was executed. This makes data from the branches available to reference in the parent flow.
-
+
### Use exports in parent flow
Optionally add steps after the parallel block and use data from individual branches by referencing the return value of the **End** phase.
-
+
### Deploy and test the live workflow
Deploy the workflow and trigger it to inspect the executions.
-
+
-
\ No newline at end of file
+
diff --git a/docs-v2/pages/workflows/control-flow/switch.mdx b/docs-v2/pages/workflows/building-workflows/control-flow/switch.mdx
similarity index 79%
rename from docs-v2/pages/workflows/control-flow/switch.mdx
rename to docs-v2/pages/workflows/building-workflows/control-flow/switch.mdx
index 9ee11626482a1..5e812b495ff46 100644
--- a/docs-v2/pages/workflows/control-flow/switch.mdx
+++ b/docs-v2/pages/workflows/building-workflows/control-flow/switch.mdx
@@ -8,9 +8,9 @@ import { Steps } from 'nextra/components'
**Switch** is single path branching operator. You can create multiple execution branches, but Pipedream will execute the **first** branch that matches the configured rules. The order in which rules are defined will affect the path of execution.
-Switch is useful when you need to make a branching decision based on the value of a single input variable (e.g., based on the path of an inbound request). You can define the input variable once and then branch based on the value(s). If you need to branch based on the values of multiple input variables use the [If/Else operator](./ifelse).
+Switch is useful when you need to make a branching decision based on the value of a single input variable (e.g., based on the path of an inbound request). You can define the input variable once and then branch based on the value(s). If you need to branch based on the values of multiple input variables use the [If/Else operator](./ifelse/).
-
+
## Capabilities
@@ -35,13 +35,13 @@ The Switch operator is a control flow **Block** with **start** and **end** phase
Add a trigger and generate an event to help you build and test your workflow:
-
+
### Add the Switch control flow block
Click the + button to add a step to the canvas and select Switch from the Control Flow section on the right. In the “start” phase, configure rules for a case.
-
+
**IMPORTANT:** If you disable the **Default** condition and an event does not match any of the rules, the workflow will continue to the next step after the **Switch** section. If you want to end workflow execution if no other conditions evaluate to `true`, enable the Default condition and add a **Terminate Workflow** action.
@@ -51,36 +51,36 @@ Click the + button to add a step to the canvas and select Switch from the Contro
To add additional cases, click the **+** button.
-
+
### Test and build along the execution path
Test the **start** phase and add a step to the branch in the execution path,
-
+
### Optionally merge and continue the parent flow
Test the **end** phase to export the results of the last step in the execution path. This makes them available to reference in the parent flow.
-
+
### Scaffold alternate paths
You may add steps to alternate paths and test them. Pipedream will signal that the results may not be reliable if the branch is not in the execution path.
-
+
### Validate alternate paths
Generate or select alternate events to trigger and validate alternate paths.
-
+
### Deploy and test the live workflow
Deploy the workflow and trigger it to inspect the executions.
-
+
-
\ No newline at end of file
+
diff --git a/docs-v2/pages/workflows/errors.mdx b/docs-v2/pages/workflows/building-workflows/errors.mdx
similarity index 83%
rename from docs-v2/pages/workflows/errors.mdx
rename to docs-v2/pages/workflows/building-workflows/errors.mdx
index af43acc07e06c..ee0b9e9b902cb 100644
--- a/docs-v2/pages/workflows/errors.mdx
+++ b/docs-v2/pages/workflows/building-workflows/errors.mdx
@@ -4,20 +4,20 @@ import VideoPlayer from "@/components/VideoPlayer";
Two types of errors are raised in Pipedream workflows:
-- **Workflow errors** — Errors in the workflow execution environment, like [Timeouts](/troubleshooting#timeout) or [Out of Memory](/troubleshooting#out-of-memory) errors. Often, you can change your workflow's configuration to fix them. You can find more details on these errors [in our troubleshooting guide](/troubleshooting).
-- **Step errors** — Errors raised by individual [code](/code) or [action](/workflows/actions) steps. These can be syntax errors, errors raised by the Node or Python runtime, errors with input data, and more. Pipedream will surface details about the error and the stack trace, and you can even [debug these errors with AI](#debug-with-ai).
+- **Workflow errors** — Errors in the workflow execution environment, like [Timeouts](/troubleshooting/#timeout) or [Out of Memory](/troubleshooting/#out-of-memory) errors. Often, you can change your workflow's configuration to fix them. You can find more details on these errors [in our troubleshooting guide](/troubleshooting).
+- **Step errors** — Errors raised by individual [code](/workflows/building-workflows/code/) or [action](/workflows/building-workflows/actions/) steps. These can be syntax errors, errors raised by the Node or Python runtime, errors with input data, and more. Pipedream will surface details about the error and the stack trace, and you can even [debug these errors with AI](#debug-with-ai).
Both types of errors will trigger [error notifications](#error-notifications), can be handled by [custom error handlers](#handle-errors-with-custom-logic), and will show up in [the REST API](#poll-the-rest-api-for-workflow-errors).
## Auto-retry
-You can [automatically retry events](/workflows/settings#auto-retry-errors) that yield an error. This can help for transient errors that occur when making API requests, like when a service is down or your request times out.
+You can [automatically retry events](/workflows/building-workflows/settings/#auto-retry-errors) that yield an error. This can help for transient errors that occur when making API requests, like when a service is down or your request times out.
## Apply conditional logic
Many errors result from the data you're processing. You might only receive certain data from a webhook under certain conditions, or have malformed data in the payload that causes an error.
-You can apply conditional logic in code, or using the [If / Else operator](/workflows/control-flow/ifelse), handling these conditions accordingly.
+You can apply conditional logic in code, or using the [If / Else operator](/workflows/building-workflows/control-flow/ifelse/), handling these conditions accordingly.
## Error notifications
@@ -51,7 +51,7 @@ When you're editing and testing your workflow, any unhandled errors will **not**
## Debug with AI
-You can debug errors in [code](/code) or [action](/workflows/actions) steps with AI by pressing the **Debug with AI** button at the bottom of any error.
+You can debug errors in [code](/workflows/building-workflows/code/) or [action](/workflows/building-workflows/actions/) steps with AI by pressing the **Debug with AI** button at the bottom of any error.
### Data we send with errors
@@ -59,7 +59,7 @@ When you debug an error with AI, Pipedream sends the following information to Op
- The error code, message, and stack trace
- The step's code
-- The input added to the step configuration. This **does not** contain the event data that triggered your workflow, just the static input entered in the step configuration, like the URL of an HTTP request, or the names of [step exports](/workflows/steps#step-exports).
+- The input added to the step configuration. This **does not** contain the event data that triggered your workflow, just the static input entered in the step configuration, like the URL of an HTTP request, or the names of [step exports](/workflows/#step-exports).
We explicitly **do not** send the event data that triggered the error, or any other information about your account or workflow.
diff --git a/docs-v2/pages/http.mdx b/docs-v2/pages/workflows/building-workflows/http.mdx
similarity index 67%
rename from docs-v2/pages/http.mdx
rename to docs-v2/pages/workflows/building-workflows/http.mdx
index fcd72b4d2578a..33b0dc19bc008 100644
--- a/docs-v2/pages/http.mdx
+++ b/docs-v2/pages/workflows/building-workflows/http.mdx
@@ -12,35 +12,35 @@ Pre-built actions are the fastest way to get started building workflows, but the
For example, to send a message using Slack just search for Slack and use the **Send Message to a Public Channel** action:
-
+
Then connect your Slack account, select a channel and write your message:
-
+
Now with a few clicks and some text you've integrated Slack into a Pipedream workflow.
Pre-built actions are open source
-All pre-built actions are published from the [Pipedream Component Registry](/apps/contributing/), so you can read and modify their source code. You can even publish your own from [Node.js code steps privately to your own workspace](/code/nodejs/sharing-code/).
+All pre-built actions are published from the [Pipedream Component Registry](/workflows/contributing/), so you can read and modify their source code. You can even publish your own from [Node.js code steps privately to your own workspace](/workflows/building-workflows/code/nodejs/sharing-code/).
## HTTP Request Action
The HTTP request action is the next most convenient option. Use a Postman-like interface to configure an HTTP request - including the headers, body, and even connecting an account.
-
+
Selecting this action will display an HTTP request builder, with the Slack app slot to connect your account with.
-
+
Once you connect your account to the step, it will automatically configure the authorization headers to match.
For example, the Slack API expects a Bearer token with the `Authorization` header. So Pipedream automatically configures this HTTP request to pass your token to that specific header:
-
+
The configuration of the request and management of your token is automatically handled for you. So you can simply modify the request to match the API endpoint you're seeking to interact with.
@@ -48,7 +48,7 @@ The configuration of the request and management of your token is automatically h
You can also attach apps to the *Send any HTTP Request* action from the action selection menu. After adding a new step to your workflow, select the *Send any HTTP Request* action:
-
+
Then within the HTTP request builder, click the *Autorization Type* dropdown to select a method, and click **Select an app**:
@@ -83,8 +83,8 @@ This gives you the flexibility to catch errors, use retries, or send multiple AP
First, connect your account to the code step:
-* [Connecting any account to a Node.js step](/code/nodejs/auth/#accessing-connected-account-data-with-thisappnameauth)
-* [Connecting any account to a Python step](/code/python/auth/)
+* [Connecting any account to a Node.js step](/workflows/building-workflows/code/nodejs/auth/#accessing-connected-account-data-with-thisappnameauth)
+* [Connecting any account to a Python step](/workflows/building-workflows/code/python/auth/)
### Conditionally sending an API Request
@@ -182,4 +182,54 @@ Subscribing to all errors
You can leverage `$.flow.rerun` within a `try...catch` block in order to retry a failed API request.
-[See the example in the `$.flow.rerun` docs](/code/nodejs/rerun/#pause-resume-and-rerun-a-workflow) for Node.js.
+[See the example in the `$.flow.rerun` docs](/workflows/building-workflows/code/nodejs/rerun/#pause-resume-and-rerun-a-workflow) for Node.js.
+
+## Platform axios
+
+### Why `@pipedream/platform` axios?
+
+`axios` is an HTTP client for Node.js ([see these docs](/workflows/building-workflows/code/nodejs/http-requests/) for usage examples).
+
+`axios` has a simple programming API and works well for most use cases. But its default error handling behavior isn't easy to use. When you make an HTTP request and the server responds with an error code in the 4XX or 5XX range of status codes, `axios` returns this stack trace:
+
+
+
+This only communicates the error code, and not any other information (like the body or headers) returned from the server.
+
+Pipedream publishes an `axios` wrapper as a part of [the `@pipedream/platform` package](https://github.com/PipedreamHQ/pipedream/tree/master/platform). This presents the same programming API as `axios`, but implements two helpful features:
+
+1. When the HTTP request succeeds (response code < `400`), it returns only the `data` property of the response object — the HTTP response body. This is typically what users want to see when they make an HTTP request:
+
+
+
+2. When the HTTP request _fails_ (response code >= `400`), it displays a detailed error message in the Pipedream UI (the HTTP response body), and returns the whole `axios` response object so users can review details on the HTTP request and response:
+
+
+
+### Using `@pipedream/platform` axios in component actions
+
+To use `@pipedream/platform` axios in component actions, import it:
+
+```javascript
+import { axios } from "@pipedream/platform"
+```
+
+`@pipedream/platform` axios uses methods [provided by the `$` object](/workflows/contributing/components/api/#actions), so you'll need to pass that as the first argument to `axios` when making HTTP requests, and pass the [standard `axios` request config](https://github.com/axios/axios#request-config) as the second argument.
+
+Here's an example action:
+
+```javascript
+import { axios } from "@pipedream/platform"
+
+export default {
+ key: "my-test-component",
+ name: "My Test component",
+ version: "0.0.1",
+ type: "action",
+ async run({ $ }) {
+ return await axios($, {
+ url: "https://httpstat.us/200",
+ })
+ }
+}
+```
diff --git a/docs-v2/pages/workflows/inspect.mdx b/docs-v2/pages/workflows/building-workflows/inspect.mdx
similarity index 68%
rename from docs-v2/pages/workflows/inspect.mdx
rename to docs-v2/pages/workflows/building-workflows/inspect.mdx
index 1b14721abf2a9..9fc08103d7eda 100644
--- a/docs-v2/pages/workflows/inspect.mdx
+++ b/docs-v2/pages/workflows/building-workflows/inspect.mdx
@@ -4,9 +4,9 @@ import VideoPlayer from "@/components/VideoPlayer";
-[The inspector](#the-inspector) lists the events you send to a [workflow](/workflows/). Once you choose a [trigger](/workflows/steps/triggers/) and send events to it, you'll see those events in the inspector, to the left of your workflow.
+[The inspector](#the-inspector) lists the events you send to a [workflow](/workflows/building-workflows/). Once you choose a [trigger](/workflows/building-workflows/triggers/) and send events to it, you'll see those events in the inspector, to the left of your workflow.
-Clicking on an event from the list lets you [review the incoming event data and workflow execution logs](/workflows/events/#examining-event-data) for that event.
+Clicking on an event from the list lets you [review the incoming event data and workflow execution logs](/workflows/building-workflows/triggers/#examining-event-data) for that event.
You can use the inspector to replay events, delete them, and more.
@@ -32,8 +32,8 @@ The blue button with the arrow **replays** the event against the newest version
## Messages
-Any `console.log()` statements or other output of code steps is attached to the associated code cells. But [`$.flow.exit()`](/code/nodejs/#ending-a-workflow-early) or [errors](/code/nodejs/#errors) end a workflow's execution, so their details appear in the inspector.
+Any `console.log()` statements or other output of code steps is attached to the associated code cells. But [`$.flow.exit()`](/workflows/building-workflows/code/nodejs/#ending-a-workflow-early) or [errors](/workflows/building-workflows/code/nodejs/#errors) end a workflow's execution, so their details appear in the inspector.
## Limits
-Pipedream retains a limited history of events for a given workflow. See the [limits docs](/limits/#event-execution-history) for more information.
\ No newline at end of file
+Pipedream retains a limited history of events for a given workflow. See the [limits docs](/workflows/limits/#event-history) for more information.
diff --git a/docs-v2/pages/workflows/building-workflows/settings/_meta.tsx b/docs-v2/pages/workflows/building-workflows/settings/_meta.tsx
new file mode 100644
index 0000000000000..0c9157a1cadfe
--- /dev/null
+++ b/docs-v2/pages/workflows/building-workflows/settings/_meta.tsx
@@ -0,0 +1,4 @@
+export default {
+ "index": "Overview",
+ "concurrency-and-throttling": "Concurrency and Throttling",
+} as const
diff --git a/docs-v2/pages/workflows/concurrency-and-throttling.mdx b/docs-v2/pages/workflows/building-workflows/settings/concurrency-and-throttling.mdx
similarity index 100%
rename from docs-v2/pages/workflows/concurrency-and-throttling.mdx
rename to docs-v2/pages/workflows/building-workflows/settings/concurrency-and-throttling.mdx
diff --git a/docs-v2/pages/workflows/settings.mdx b/docs-v2/pages/workflows/building-workflows/settings/index.mdx
similarity index 85%
rename from docs-v2/pages/workflows/settings.mdx
rename to docs-v2/pages/workflows/building-workflows/settings/index.mdx
index 82928b717f014..48cd68e03788b 100644
--- a/docs-v2/pages/workflows/settings.mdx
+++ b/docs-v2/pages/workflows/building-workflows/settings/index.mdx
@@ -9,7 +9,7 @@ You can control workflow-specific settings in your workflow's **Settings**:
@@ -25,7 +25,7 @@ If you'd like to pause your workflow from executing completely, you can disable
## Error Handling
-By default, you'll receive notifications when your workflow throws an unhandled error. See the [error docs](/workflows/errors/) for more detail on these notifications.
+By default, you'll receive notifications when your workflow throws an unhandled error. See the [error docs](/workflows/building-workflows/errors/) for more detail on these notifications.
You can disable these notifications for your workflow by disabling the **Notify me on errors** toggle:
@@ -69,22 +69,22 @@ On error, the step will export a `$summary` property that tells you how many tim
If the step execution succeeds during any retry, the execution will proceed to the next step of the workflow.
-If the step fails on all 8 retries and throws a final error, you'll receive [an error notification](/workflows/errors/) through your standard notification channel.
+If the step fails on all 8 retries and throws a final error, you'll receive [an error notification](/workflows/building-workflows/errors/) through your standard notification channel.
### Send error notifications on the first error
-By default, if a step fails on all 8 retries, and throws a final error, you'll receive [an error notification](/workflows/errors/) through your standard notification channel. But sometimes you need to investigate errors as soon as they happen. If you're connecting to your database, and receive an error that the DB is down, you may want to investigate that immediately.
+By default, if a step fails on all 8 retries, and throws a final error, you'll receive [an error notification](/workflows/building-workflows/errors/) through your standard notification channel. But sometimes you need to investigate errors as soon as they happen. If you're connecting to your database, and receive an error that the DB is down, you may want to investigate that immediately.
On any workflow with auto-retry enabled, you can optionally choose to **Send notification on first error**. This is disabled by default so you don't get emails for transient errors, but you can enable for critical workflows where you want visibility into all errors.
-For custom control over error handling, you can implement error logic in code steps (e.g. `try` / `catch` statements in Node.js code), or [create your own custom error workflow](/workflows/errors/#handle-errors-with-custom-logic).
+For custom control over error handling, you can implement error logic in code steps (e.g. `try` / `catch` statements in Node.js code), or [create your own custom error workflow](/workflows/building-workflows/errors/#handle-errors-with-custom-logic).
## Data Retention Controls
By default, Pipedream stores exports, logs, and other data tied to workflow executions. You can view these logs in two places:
-1. [The workflow inspector](/workflows/inspect/#the-inspector)
-2. [Event History](/event-history)
+1. [The workflow inspector](/workflows/building-workflows/inspect/#the-inspector)
+2. [Event History](/workflows/event-history/)
But if you're processing sensitive data, you may not want to store those logs. You can **Disable data retention** in your workflow settings to disable **all** logging. Since Pipedream stores no workflow logs with this setting enabled, you'll see no logs in the inspector or event history UI.
@@ -100,7 +100,7 @@ Refer to our [pricing page](https://pipedream.com/pricing) to understand the lat
**Avoid surfacing events in the builder**
-Even with data retention disabled on your workflow, the builder will still surface inbound events when in build mode. To avoid surfacing potentially sensitive data here as well, refer to [these docs](/workflows/triggers/#pipedream-specific-request-parameters).
+Even with data retention disabled on your workflow, the builder will still surface inbound events when in build mode. To avoid surfacing potentially sensitive data here as well, refer to [these docs](/workflows/building-workflows/triggers/#pipedream-specific-request-parameters).
@@ -108,9 +108,9 @@ Even with data retention disabled on your workflow, the builder will still surfa
### Execution Timeout Limit
-Workflows have a default [execution limit](/limits/#time-per-execution), which defines the time the workflow can run for a single execution until it's timed out.
+Workflows have a default [execution limit](/workflows/limits/#time-per-execution), which defines the time the workflow can run for a single execution until it's timed out.
-If your workflow times out, and needs to run for longer than the [default limit](/limits/#time-per-execution), you can change that limit here.
+If your workflow times out, and needs to run for longer than the [default limit](/workflows/limits/#time-per-execution), you can change that limit here.
### Memory
@@ -121,14 +121,14 @@ Increasing your workflow's memory gives you a proportional increase in CPU, so i
**How can my workflow run faster?**
-See [our guide on running workflows faster](/troubleshooting#how-can-my-workflow-run-faster).
+See [our guide on running workflows faster](/troubleshooting/faq/#how-can-my-workflow-run-faster).
-**Pipedream charges credits proportional to your memory configuration**. When you modify your memory settings, Pipedream will show you the number of credits you'll be charged per execution. [Read more here](/pricing/#how-does-workflow-memory-affect-credits).
+**Pipedream charges credits proportional to your memory configuration**. When you modify your memory settings, Pipedream will show you the number of credits you'll be charged per execution. [Read more here](/pricing/faq/#how-does-workflow-memory-affect-credits).
### Concurrency and Throttling
-[Manage the concurrency and rate](/workflows/concurrency-and-throttling/) at which events from a source trigger your workflow code.
+[Manage the concurrency and rate](/workflows/building-workflows/settings/concurrency-and-throttling/) at which events from a source trigger your workflow code.
## Eliminate cold starts
@@ -170,7 +170,7 @@ Incoming requests are handled by a single worker, one at a time. If you only rec
But you might have a higher-volume app that receives two concurrent requests. In that case, Pipedream spins up **two** workers to handle each request.
-For many user-facing (even internal) applications, the number of requests over time can be modeled with a [Poisson distrubution](https://en.wikipedia.org/wiki/Poisson_distribution). You can use that distribution to estimate the number of workers you need at an average time, or set it higher if you want to ensure a specific percentage of requests hit a dedicated worker. You can also save a record of all workflow runs to your own database, with the timestamp they ran ([see `steps.trigger.context.ts`](/workflows/events/#stepstriggercontext)), and look at your own pattern of requests, to compute the optimal number of workers.
+For many user-facing (even internal) applications, the number of requests over time can be modeled with a [Poisson distrubution](https://en.wikipedia.org/wiki/Poisson_distribution). You can use that distribution to estimate the number of workers you need at an average time, or set it higher if you want to ensure a specific percentage of requests hit a dedicated worker. You can also save a record of all workflow runs to your own database, with the timestamp they ran ([see `steps.trigger.context.ts`](/workflows/building-workflows/triggers/#stepstriggercontext)), and look at your own pattern of requests, to compute the optimal number of workers.
### Do compute budgets apply to dedicated workers?
diff --git a/docs-v2/pages/workflows/sharing.mdx b/docs-v2/pages/workflows/building-workflows/sharing.mdx
similarity index 97%
rename from docs-v2/pages/workflows/sharing.mdx
rename to docs-v2/pages/workflows/building-workflows/sharing.mdx
index dcb2ef1cf2d21..93ad5aded0514 100644
--- a/docs-v2/pages/workflows/sharing.mdx
+++ b/docs-v2/pages/workflows/building-workflows/sharing.mdx
@@ -86,7 +86,7 @@ On the next screen, you'll be prompted for additional information about your tem
- **Developer name**: This is probably you — this name will be displayed as the author of the template.
- **Template name**: The name of the template.
- **Brief description**: A short description of the template, which will be displayed on the listing page (maximum 256 characters). [See here](https://pipedream.com/templates) for examples.
-- **Longer description**: Use Markdown to create a more in-depth description. We recommend including distinct sections as H2s, for you to provide an **Overview**, **Steps**, and **Use Cases**. This will be displayed on the details page for the template. Here's an example: [Notion Voice Notes (Google Drive)](https://pipedream.com/templates/notion-voice-notes-google-drive-mpt_VdXF5V).
+- **Longer description**: Use Markdown to create a more in-depth description. We recommend including distinct sections as H2s, for you to provide an **Overview**, **Steps**, and **Use Cases**. This will be displayed on the details page for the template. Here's an example: [Notion Voice Notes (Google Drive)](https://pipedream.com/templates/notion-voice-notes-google-drive-version-mpt_2WRFKY).
- **Use cases**: Select one or more categories that align with the use cases for your template to help users discover it.
- **Affiliate token**: If you're a [Pipedream affiliate](https://pipedream.com/affiliates), you can enter your unique token here to earn commissions on any users who sign up for Pipedream after using your template.
@@ -97,7 +97,7 @@ On the next screen, you'll be prompted for additional information about your tem
-## Frequently Asked Questions
+## FAQ
### If changes are made to the original workflow, will copied versions of the workflow from the shared link also change?
@@ -141,4 +141,4 @@ If you're trying to migrate all resources from one workspace to another [please
### Are step notes included when I share a workflow?
-Yes any [step notes](/workflows/steps/#step-notes) you've added to your workflow are included in the copied version.
+Yes any [step notes](/workflows/#step-notes) you've added to your workflow are included in the copied version.
diff --git a/docs-v2/pages/sources.mdx b/docs-v2/pages/workflows/building-workflows/sources.mdx
similarity index 84%
rename from docs-v2/pages/sources.mdx
rename to docs-v2/pages/workflows/building-workflows/sources.mdx
index 9bd2961a01c2f..00d29d9af8fd7 100644
--- a/docs-v2/pages/sources.mdx
+++ b/docs-v2/pages/workflows/building-workflows/sources.mdx
@@ -5,14 +5,14 @@ import VideoPlayer from '@/components/VideoPlayer'
-Event sources operate primarily as workflow triggers. When you add a new app-based [trigger](/workflows/steps/triggers/) to your workflow, you're creating an event source.
+Event sources operate primarily as workflow triggers. When you add a new app-based [trigger](/workflows/building-workflows/triggers/) to your workflow, you're creating an event source.

Event sources run as their own resources, separate from workflows, for two reasons:
- A single event sources can trigger more than one workflow. If you have a data source that you want to run _multiple_ workflows, you can create an event source once and use it as the trigger for each workflow.
-- If you need to consume events emitted by event sources in your own application, you don't need to run a workflow: you can use Pipedream's [REST API](/api/rest/) or a [private, real-time SSE stream](/api/sse/) to access the event data directly.
+- If you need to consume events emitted by event sources in your own application, you don't need to run a workflow: you can use Pipedream's [REST API](/rest-api/) or a [private, real-time SSE stream](/workflows/data-management/destinations/sse/) to access the event data directly.
You can view your event sources at [https://pipedream.com/sources](https://pipedream.com/sources). Here, you'll see the events a specific source has emitted, as well as the logs and configuration for that source.
@@ -32,11 +32,11 @@ You can create event sources from the Pipedream UI or CLI.
Visit [https://pipedream.com/sources](https://pipedream.com/sources) and click the **New +** button at the top right to create a new event source. You'll see a list of sources tied to apps (like Twitter and Github) and generic interfaces (like HTTP). Select your source, and you'll be asked to connect any necessary accounts (for example, the Twitter source requires you authorize Pipedream access to your Twitter account), and enter the values for any configuration settings tied to the source.
-Once you've created a source, you can use it to trigger [Pipedream workflows](/workflows/) or [consume its events](#consuming-events-from-sources) using Pipedream's APIs.
+Once you've created a source, you can use it to trigger [Pipedream workflows](/workflows/building-workflows/) or [consume its events](#consuming-events-from-sources) using Pipedream's APIs.
### Creating a source from the CLI
-[Download the CLI](/cli/install/) and run:
+[Download the CLI](/workflows/cli/install/) and run:
```bash
pd deploy
@@ -44,19 +44,19 @@ pd deploy
This will bring up an interactive menu prompting you to select a source. Once selected, you'll be asked to connect any necessary accounts (for example, the Twitter source requires you authorize Pipedream access to your Twitter account), and enter the values for any configuration settings tied to the source.
-Once you've created a source, you can use it to trigger [Pipedream workflows](/workflows/) or [consume its events](#consuming-events-from-sources) using Pipedream's APIs.
+Once you've created a source, you can use it to trigger [Pipedream workflows](/workflows/building-workflows/) or [consume its events](#consuming-events-from-sources) using Pipedream's APIs.
## Consuming events from sources
You can view the events for a source in the sources UI, under the **Events** section of that source.
-You can also trigger a [Pipedream workflow](/workflows/) every time your source emits a new event. This lets you run workflows for every new tweet, every new item in an RSS feed, and more.
+You can also trigger a [Pipedream workflow](/workflows/building-workflows/) every time your source emits a new event. This lets you run workflows for every new tweet, every new item in an RSS feed, and more.
Finally, you can consume events programmatically, outside the Pipedream platform, in a few different ways:
-- In real-time, using the [SSE stream](/api/sse/) linked to your source
-- In real-time, via the CLI's [`pd events` command](/cli/reference#pd-events)
-- In batch, using the [REST API](/api/rest/)
+- In real-time, using the [SSE stream](/workflows/data-management/destinations/sse/) linked to your source
+- In real-time, via the CLI's [`pd events` command](/workflows/cli/reference/#pd-events)
+- In batch, using the [REST API](/rest-api/)
## Example: HTTP source
@@ -70,13 +70,13 @@ When you create an HTTP source:
HTTP sources are essentially [request bins](https://requestbin.com) that can be managed via API.
-HTTP sources are a good example of how you can turn an event stream into an API: the HTTP requests are the **event stream**, generated from your application, client browsers, webhooks, etc. Then, you can retrieve HTTP requests via Pipedream's [**REST API**](/api/rest/), or stream them directly to other apps using the [SSE interface](/api/sse/).
+HTTP sources are a good example of how you can turn an event stream into an API: the HTTP requests are the **event stream**, generated from your application, client browsers, webhooks, etc. Then, you can retrieve HTTP requests via Pipedream's [**REST API**](/rest-api/), or stream them directly to other apps using the [SSE interface](/workflows/data-management/destinations/sse/).
[**See the Github quickstart for more information on HTTP event sources**](https://github.com/PipedreamHQ/pipedream/tree/master/components/http#quickstart).
## Example: Cron jobs
-You can also use event sources to run any Node code on a schedule, allowing you to poll a service or API for data and emit that data as an event. The emitted events can trigger Pipedream workflows, and can be retrieved using Pipedream's [**REST API**](/api/rest/) or [SSE interface](/api/sse/).
+You can also use event sources to run any Node code on a schedule, allowing you to poll a service or API for data and emit that data as an event. The emitted events can trigger Pipedream workflows, and can be retrieved using Pipedream's [**REST API**](/rest-api/) or [SSE interface](/workflows/data-management/destinations/sse/).
## Example: RSS
@@ -105,14 +105,14 @@ Not all sources support pre-fetched events currently, but you can still generate

### Generate a real event manually
-If there aren't any existing events for the source to fetch, the next best way to produce a test event for your workflow is to generate one in the relevant application.
+If there aren't any existing events for the source to fetch, the next best way to produce a test event for your workflow is to generate one in the relevant application.
For example, if your workflow is triggered by [New Files in Dropbox](https://pipedream.com/apps/dropbox/triggers/new-file), try adding a file to your Dropbox account.

### Generate a sample test event
-Certain event sources support the ability to generate test events using static sample event data.
+Certain event sources support the ability to generate test events using static sample event data.
#### Hardcoded sample events
For example, the [New Message from Discord source](https://pipedream.com/apps/discord/triggers/new-message) references [this static event](https://github.com/PipedreamHQ/pipedream/blob/master/components/discord/sources/new-message/test-event.mjs), which is a hardcoded file with purely representative data. The goal for this feature is to provide your workflow with the **expected event shape** to expect, but **without the expected values**.
@@ -143,13 +143,13 @@ Generating test data manually can result in typos or missing fields that your wo
## Publishing a new event source, or modifying an existing source
-Anyone can create an event source or edit an existing one. The code for all event sources is public, and kept in the [`PipedreamHQ/pipedream` repo](https://github.com/PipedreamHQ/pipedream). [Read this quickstart](/components/quickstart/nodejs/sources/) and see the [event source API docs](/components/api/) to learn more about the source development process.
+Anyone can create an event source or edit an existing one. The code for all event sources is public, and kept in the [`PipedreamHQ/pipedream` repo](https://github.com/PipedreamHQ/pipedream). [Read this quickstart](/workflows/contributing/components/quickstart/nodejs/sources/) and see the [event source API docs](/workflows/contributing/components/api/) to learn more about the source development process.
You can chat about source development with the Pipedream team in the `#contribute` channel of our [public Slack](https://join.slack.com/t/pipedream-users/shared_invite/zt-ernlymsn-UHfPg~Dfp08uGkAd8dpkww), and in the `#dev` topic in the [Pipedream community](https://pipedream.com/community/c/dev/11).
## Limits
-Event sources are subject to the [same limits as Pipedream workflows](/limits/), except:
+Event sources are subject to the [same limits as Pipedream workflows](/workflows/limits/), except:
- Sources have a default timeout of 5 min.
- Memory is fixed at 256MB.
diff --git a/docs-v2/pages/workflows/triggers.mdx b/docs-v2/pages/workflows/building-workflows/triggers.mdx
similarity index 65%
rename from docs-v2/pages/workflows/triggers.mdx
rename to docs-v2/pages/workflows/building-workflows/triggers.mdx
index fd00740af7d02..80872ac96332e 100644
--- a/docs-v2/pages/workflows/triggers.mdx
+++ b/docs-v2/pages/workflows/building-workflows/triggers.mdx
@@ -22,19 +22,19 @@ If there's a specific trigger you'd like supported, please [let us know](https:/
## App-based Triggers
-You can trigger a workflow on events from apps like Twitter, Google Calendar, and more using [event sources](/sources/). Event sources run as separate resources from your workflow, which allows you to trigger _multiple_ workflows using the same source. Here, we'll refer to event sources and workflow triggers interchangeably.
+You can trigger a workflow on events from apps like Twitter, Google Calendar, and more using [event sources](/workflows/building-workflows/triggers/). Event sources run as separate resources from your workflow, which allows you to trigger _multiple_ workflows using the same source. Here, we'll refer to event sources and workflow triggers interchangeably.
When you create a workflow, click **Add Trigger** to view the available triggers:
-
+
This will open a new menu to search and choose a trigger for your workflow:
-
+
Search by **app name** to find triggers associated with your app. For Google Calendar, for example, you can run your workflow every time a new event is **added** to your calendar, each time an event **starts**, **ends**, and more:
-
+
Once you select your trigger, you'll be asked to connect any necessary accounts (for example, Google Calendar sources require you authorize Pipedream access to your Google account), and enter the values for any configuration settings.
@@ -48,23 +48,23 @@ Then you can select a specific test event and manually trigger your workflow wit
You'll notice the docs use the terms **event source** and **trigger** interchangeably above. It's useful to clarify the distinction in the context of workflows.
-[Event sources](/sources/) run code that collects events from some app or service and emits events as the source produces them. An event source can be used to **trigger** any number of workflows.
+[Event sources](/workflows/building-workflows/triggers/) run code that collects events from some app or service and emits events as the source produces them. An event source can be used to **trigger** any number of workflows.
For example, you might create a single source to listen for new Twitter mentions for a keyword, then trigger multiple workflows each time a new tweet is found: one to [send new tweets to Slack](https://pipedream.com/@pravin/twitter-mentions-slack-p_dDCA5e/edit), another to [save those tweets to an Amazon S3 bucket](https://pipedream.com/@dylan/twitter-to-s3-p_KwCZGA/readme), etc.
**This model allows you to separate the data produced by a service (the event source) from the logic to process those events in different contexts (the workflow)**.
-Moreover, you can access events emitted by sources using Pipedream's [SSE](/api/sse/) and [REST APIs](/api/rest/). This allows you to access these events in your own app, outside Pipedream's platform.
+Moreover, you can access events emitted by sources using Pipedream's [SSE](/workflows/data-management/destinations/sse/) and [REST APIs](/rest-api/). This allows you to access these events in your own app, outside Pipedream's platform.
### Can I add multiple triggers to a workflow?
Yes, you can add any number of triggers to a workflow. Click the top right menu in the trigger step and select **Add trigger**.
-
+
### Shape of the `steps.trigger.event` object
-In all workflows, you have access to [event data](/workflows/events/#event-format) using the variable `steps.trigger.event`.
+In all workflows, you have access to [event data](/workflows/building-workflows/triggers/#event-format) using the variable `steps.trigger.event`.
The shape of the event is specific to the source. For example, RSS sources produce events with a `url` and `title` property representing the data provided by new items from a feed. Google Calendar sources produce events with a meeting title, start date, etc.
@@ -72,22 +72,22 @@ The shape of the event is specific to the source. For example, RSS sources produ
When you select the **HTTP** trigger:
-
+
Pipedream creates a URL endpoint specific to your workflow:
-
+
You can send any HTTP requests to this endpoint, from anywhere on the web. You can configure the endpoint as the destination URL for a webhook or send HTTP traffic from your application - we'll accept any [valid HTTP request](#valid-requests).
-Pipedream also supports [custom domains](/workflows/domains). This lets you host endpoints on `https://endpoint.yourdomain.com` instead of the default \`{process.env.ENDPOINT_BASE_URL}\` domain.
+Pipedream also supports [custom domains](/workflows/domains/). This lets you host endpoints on `https://endpoint.yourdomain.com` instead of the default \`{process.env.ENDPOINT_BASE_URL}\` domain.
### Accessing HTTP request data
-You can access properties of the HTTP request, like the method, payload, headers, and more, in [the `event` object](/workflows/events/#event-format), accessible in any [code](/code/) or [action](/components#actions) step.
+You can access properties of the HTTP request, like the method, payload, headers, and more, in [the `event` object](/workflows/building-workflows/triggers/#event-format), accessible in any [code](/workflows/building-workflows/code/) or [action](/workflows/contributing/components/#actions) step.
### Valid Requests
@@ -125,7 +125,7 @@ curl -H 'Authorization: Bearer ' https://myendpoint.m.pipedream.net
#### OAuth
-You can also authorize requests using [Pipedream OAuth clients](/rest-api/auth#oauth):
+You can also authorize requests using [Pipedream OAuth clients](/rest-api/auth/#oauth):
1. Open the **Configure** section of the HTTP trigger.
2. Select **OAuth**.
@@ -133,7 +133,7 @@ You can also authorize requests using [Pipedream OAuth clients](/rest-api/auth#o

-Next, you'll need to [generate an OAuth access token](/rest-api/auth#how-to-get-an-access-token).
+Next, you'll need to [generate an OAuth access token](/rest-api/auth/#how-to-get-an-access-token).
When making HTTP requests, pass the OAuth access token as a `Bearer` token in the `Authorization` header:
@@ -147,7 +147,7 @@ You can use the Pipedream SDK to automatically refresh access tokens and invoke
```typescript
import { createBackendClient, HTTPAuthType } from "@pipedream/sdk/server";
-
+
// These secrets should be saved securely and passed to your environment
const pd = createBackendClient({
credentials: {
@@ -224,13 +224,13 @@ For example, you could require JWT tokens and validate those tokens using the [`
### Custom domains
-To configure endpoints on your own domain, e.g. `endpoint.yourdomain.com` instead of the default `*.m.pipedream.net` domain, see the [custom domains](/workflows/domains) docs.
+To configure endpoints on your own domain, e.g. `endpoint.yourdomain.com` instead of the default `*.m.pipedream.net` domain, see the [custom domains](/workflows/domains/) docs.
### How Pipedream handles JSON payloads
When you send JSON in the HTTP payload, or when JSON data is sent in the payload from a webhook provider, **Pipedream converts that JSON to its equivalent JavaScript object**. The trigger data can be referenced using [the `steps` object](#shape-of-the-stepstriggerevent-object).
-In the [Inspector](/workflows/inspect/), we present `steps.trigger.event` cleanly, indenting nested properties, to make the payload easy to read. Since `steps.trigger.event` is a JavaScript object, it's easy to reference and manipulate properties of the payload using dot-notation.
+In the [Inspector](/workflows/building-workflows/inspect/), we present `steps.trigger.event` cleanly, indenting nested properties, to make the payload easy to read. Since `steps.trigger.event` is a JavaScript object, it's easy to reference and manipulate properties of the payload using dot-notation.
### How Pipedream handles `multipart/form-data`
@@ -263,21 +263,21 @@ These params can be set as headers or query string parameters on any request to
Set to `1` to prevent logging any data for this execution. Pipedream will execute all steps of the workflow, but no data will be logged to Pipedream. No event will show up in the inspector or the Event History UI.
-If you need to disable logging for _all_ requests, use the workflow's [Data Retention controls](/workflows/settings/#data-retention-controls), instead.
+If you need to disable logging for _all_ requests, use the workflow's [Data Retention controls](/workflows/building-workflows/settings/#data-retention-controls), instead.
#### `x-pd-notrigger`
-Set to `1` to send an event to the workflow for testing. Pipedream will **not** trigger the production version of the workflow, but will display the event in the [list of test events](/workflows/events/#selecting-a-test-event) on the HTTP trigger.
+Set to `1` to send an event to the workflow for testing. Pipedream will **not** trigger the production version of the workflow, but will display the event in the [list of test events](/workflows/building-workflows/triggers/#selecting-a-test-event) on the HTTP trigger.
#### Limits
-You can send any content, up to the [HTTP payload size limit](/limits/#http-request-body-size), as a part of the form request. The content of uploaded images or other binary files does not contribute to this limit — the contents of the file will be uploaded at a Pipedream URL you have access to within your source or workflow. See the section on [Large File Support](#large-file-support) for more detail.
+You can send any content, up to the [HTTP payload size limit](/workflows/limits/#http-request-body-size), as a part of the form request. The content of uploaded images or other binary files does not contribute to this limit — the contents of the file will be uploaded at a Pipedream URL you have access to within your source or workflow. See the section on [Large File Support](#large-file-support) for more detail.
### Sending large payloads
_If you're uploading files, like images or videos, you should use the [large file upload interface](#large-file-support), instead_.
-By default, the body of HTTP requests sent to a source or workflow is limited to {process.env.PAYLOAD_SIZE_LIMIT}. **But you can send an HTTP payload of any size to a [workflow](/workflows/) or an [event source](/sources/) by including the `pipedream_upload_body=1` query string or an `x-pd-upload-body: 1` HTTP header in your request**.
+By default, the body of HTTP requests sent to a source or workflow is limited to {process.env.PAYLOAD_SIZE_LIMIT}. **But you can send an HTTP payload of any size to a [workflow](/workflows/building-workflows/) or an [event source](/workflows/building-workflows/triggers/) by including the `pipedream_upload_body=1` query string or an `x-pd-upload-body: 1` HTTP header in your request**.
```bash
curl -d '{ "name": "Yoda" }' \
@@ -292,7 +292,7 @@ In workflows, Pipedream saves the raw payload data in a file whose URL you can r

-Within your workflow, you can download the contents of this data using the **Send HTTP Request** action, or [by saving the data as a file to the `/tmp` directory](/code/nodejs/working-with-files/).
+Within your workflow, you can download the contents of this data using the **Send HTTP Request** action, or [by saving the data as a file to the `/tmp` directory](/workflows/building-workflows/code/nodejs/working-with-files/).
#### Example: Download the HTTP payload using the Send HTTP Request action
@@ -306,7 +306,7 @@ The payload from the trigger of the workflow is exported to the variable `steps.
#### Example: Download the HTTP payload to the `/tmp` directory
-[This workflow](https://pipedream.com/new?h=tch_5ofXkX) downloads the HTTP payload, saving it as a file to the [`/tmp` directory](/code/nodejs/working-with-files/#the-tmp-directory).
+[This workflow](https://pipedream.com/new?h=tch_5ofXkX) downloads the HTTP payload, saving it as a file to the [`/tmp` directory](/workflows/building-workflows/code/nodejs/working-with-files/#the-tmp-directory).
```javascript
import stream from "stream";
@@ -325,7 +325,7 @@ export default defineComponent({
})
```
-You can [read this file](/code/nodejs/working-with-files/#reading-a-file-from-tmp) in subsequent steps of your workflow.
+You can [read this file](/workflows/building-workflows/code/nodejs/working-with-files/#reading-a-file-from-tmp) in subsequent steps of your workflow.
#### How the payload data is saved
@@ -333,19 +333,19 @@ Your raw payload is saved to a Pipedream-owned [Amazon S3 bucket](https://aws.am
#### Limits
-**You can upload payloads up to 5TB in size**. However, payloads that large may trigger [other Pipedream limits](/limits/). Please [reach out](https://pipedream.com/support/) with any specific questions or issues.
+**You can upload payloads up to 5TB in size**. However, payloads that large may trigger [other Pipedream limits](/workflows/limits/). Please [reach out](https://pipedream.com/support/) with any specific questions or issues.
### Large File Support
_This interface is best used for uploading large files, like images or videos. If you're sending JSON or other data directly in the HTTP payload, and encountering a **Request Entity Too Large** error, review the section above for [sending large payloads](#sending-large-payloads)_.
-You can upload any file to a [workflow](/workflows/) or an [event source](/sources/) by making a `multipart/form-data` HTTP request with the file as one of the form parts. **Pipedream saves that file to a Pipedream-owned [Amazon S3 bucket](https://aws.amazon.com/s3/), generating a [signed URL](https://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURL.html) that allows you to access to that file for up to 30 minutes**. After 30 minutes, the signed URL will be invalidated, and the file will be deleted.
+You can upload any file to a [workflow](/workflows/building-workflows/) or an [event source](/workflows/building-workflows/triggers/) by making a `multipart/form-data` HTTP request with the file as one of the form parts. **Pipedream saves that file to a Pipedream-owned [Amazon S3 bucket](https://aws.amazon.com/s3/), generating a [signed URL](https://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURL.html) that allows you to access to that file for up to 30 minutes**. After 30 minutes, the signed URL will be invalidated, and the file will be deleted.
In workflows, these file URLs are provided in the `steps.trigger.event.body` variable, so you can download the file using the URL within your workflow, or pass the URL on to another third-party system for it to process.

-Within your workflow, you can download the contents of this data using the **Send HTTP Request** action, or [by saving the data as a file to the `/tmp` directory](/code/nodejs/working-with-files/).
+Within your workflow, you can download the contents of this data using the **Send HTTP Request** action, or [by saving the data as a file to the `/tmp` directory](/workflows/building-workflows/code/nodejs/working-with-files/).
#### Example: upload a file using `cURL`
@@ -357,7 +357,7 @@ curl -F 'image=@my_image.png' https://myendpoint.m.pipedream.net
The `-F` tells `cURL` we're sending form data, with a single "part": a field named `image`, with the content of the image as the value (the `@` allows `cURL` to reference a local file).
-When you send this image to a workflow, Pipedream [parses the form data](#how-pipedream-handles-multipartform-data) and converts it to a JavaScript object, `event.body`. Select the event from the [inspector](/workflows/inspect/#the-inspector), and you'll see the `image` property under `event.body`:
+When you send this image to a workflow, Pipedream [parses the form data](#how-pipedream-handles-multipartform-data) and converts it to a JavaScript object, `event.body`. Select the event from the [inspector](/workflows/building-workflows/inspect/#the-inspector), and you'll see the `image` property under `event.body`:

@@ -367,7 +367,7 @@ Within the `image` property of `event.body`, you'll see the value of this URL in
#### Example: Download this file to the `/tmp` directory
-[This workflow](https://pipedream.com/@dylburger/example-download-an-image-to-tmp-p_KwC2Ad/edit) downloads an image passed in the `image` field in the form request, saving it to the [`/tmp` directory](/code/nodejs/working-with-files/#the-tmp-directory).
+[This workflow](https://pipedream.com/@dylburger/example-download-an-image-to-tmp-p_KwC2Ad/edit) downloads an image passed in the `image` field in the form request, saving it to the [`/tmp` directory](/workflows/building-workflows/code/nodejs/working-with-files/#the-tmp-directory).
```javascript
import stream from "stream";
@@ -390,7 +390,7 @@ await pipeline(
Since large files are uploaded using a `Content-Type` of `multipart/form-data`, the limits that apply to [form data](#how-pipedream-handles-multipartform-data) also apply here.
-The content of the file itself does not contribute to the HTTP payload limit imposed for forms. **You can upload files up to 5TB in size**. However, files that large may trigger [other Pipedream limits](/limits/). Please [reach out](https://pipedream.com/support/) with any specific questions or issues.
+The content of the file itself does not contribute to the HTTP payload limit imposed for forms. **You can upload files up to 5TB in size**. However, files that large may trigger [other Pipedream limits](/workflows/limits/). Please [reach out](https://pipedream.com/support/) with any specific questions or issues.
### Cross-Origin HTTP Requests
@@ -420,7 +420,7 @@ When you're processing HTTP requests, you often don't need to issue any special
**How can my workflow run faster?**
-See [our guide on running workflows faster](/troubleshooting#how-can-my-workflow-run-faster).
+See [our guide on running workflows faster](/troubleshooting/faq/#how-can-my-workflow-run-faster).
#### Customizing the HTTP response
@@ -459,7 +459,7 @@ The value of the `body` property can be either a string, object, a [Buffer](http
In the case where you return a Readable stream:
- You must `await` the `$.respond` function (`await $.respond({ ... }`)
-- The stream must close and be finished reading within your [workflow execution timeout](/limits/#time-per-execution).
+- The stream must close and be finished reading within your [workflow execution timeout](/workflows/limits/#time-per-execution).
- You cannot return a Readable and use the [`immediate: true`](#returning-a-response-immediately) property of `$.respond`.
#### Timing of `$.respond()` execution
@@ -557,7 +557,7 @@ We'll also issue a 404 response on workflows with an HTTP trigger that have been
#### Too Many Requests
-If you send too many requests to your HTTP source within a small period of time, we may issue a `429 Too Many Requests` response. [Review our limits](/limits/) to understand the conditions where you might be throttled.
+If you send too many requests to your HTTP source within a small period of time, we may issue a `429 Too Many Requests` response. [Review our limits](/workflows/limits/) to understand the conditions where you might be throttled.
You can also [reach out](https://pipedream.com/support/) to inquire about raising this rate limit.
@@ -573,7 +573,7 @@ You can write scheduled job to send an HTTP request, send a scheduled email, run
To create a new scheduled job, create a new workflow and search for the **Schedule** trigger:
-
+
By default, your trigger will be turned **Off**. **To enable it, select either of the scheduling options**:
@@ -586,41 +586,41 @@ If you're running a scheduled job once a day, you probably don't want to wait un
### Job History
-You'll see the history of job executions under the **Job History** section of the [Inspector](/workflows/inspect/).
+You'll see the history of job executions under the **Job History** section of the [Inspector](/workflows/building-workflows/inspect/).
Clicking on a specific job shows the execution details for that job — all the logs and observability associated with that run of the workflow.
### Trigger a notification to an external service (email, Slack, etc.)
-You can send yourself a notification — for example, an email or a Slack message — at any point in a workflow by using the relevant [Action](/components#actions) or [Destination](/destinations/).
+You can send yourself a notification — for example, an email or a Slack message — at any point in a workflow by using the relevant [Action](/workflows/contributing/components/#actions) or [Destination](/workflows/data-management/destinations/).
-If you'd like to email yourself when a job finishes successfully, you can use the [Email Destination](/destinations/email/). You can send yourself a Slack message using the Slack Action, or trigger an [HTTP request](/destinations/http/) to an external service.
+If you'd like to email yourself when a job finishes successfully, you can use the [Email Destination](/workflows/data-management/destinations/email/). You can send yourself a Slack message using the Slack Action, or trigger an [HTTP request](/workflows/data-management/destinations/http/) to an external service.
-You can also [write code](/code/) to trigger any complex notification logic you'd like.
+You can also [write code](/workflows/building-workflows/code/) to trigger any complex notification logic you'd like.
### Troubleshooting your scheduled jobs
When you run a scheduled job, you may need to troubleshoot errors or other execution issues. Pipedream offers built-in, step-level logs that show you detailed execution information that should aid troubleshooting.
-Any time a scheduled job runs, you'll see a new execution appear in the [Inspector](/workflows/inspect/). This shows you when the job ran, how long it took to run, and any errors that might have occurred. **Click on any of these lines in the Inspector to view the details for a given run**.
+Any time a scheduled job runs, you'll see a new execution appear in the [Inspector](/workflows/building-workflows/inspect/). This shows you when the job ran, how long it took to run, and any errors that might have occurred. **Click on any of these lines in the Inspector to view the details for a given run**.
-Code steps show [logs](/code/nodejs/#logs) below the step itself. Any time you run `console.log()` or other functions that print output, you should see the logs appear directly below the step where the code ran.
+Code steps show [logs](/workflows/building-workflows/code/nodejs/#logs) below the step itself. Any time you run `console.log()` or other functions that print output, you should see the logs appear directly below the step where the code ran.
-[Actions](/components#actions) and [Destinations](/destinations/) also show execution details relevant to the specific Action or Destination. For example, when you use the [HTTP Destination](/destinations/http/) to make an HTTP request, you'll see the HTTP request and response details tied to that Destination step:
+[Actions](/workflows/contributing/components/#actions) and [Destinations](/workflows/data-management/destinations/) also show execution details relevant to the specific Action or Destination. For example, when you use the [HTTP Destination](/workflows/data-management/destinations/http/) to make an HTTP request, you'll see the HTTP request and response details tied to that Destination step:
## Email
When you select the **Email** trigger:
-
+
Pipedream creates an email address specific to your workflow. Any email sent to this address triggers your workflow:
-
+
As soon as you send an email to the workflow-specific address, Pipedream parses its body, headers, and attachments into a JavaScript object it exposes in the `steps.trigger.event` variable that you can access within your workflow. This transformation can take a few seconds to perform. Once done, Pipedream will immediately trigger your workflow with the transformed payload.
-[Read more about the shape of the email trigger event](/workflows/events/#email).
+[Read more about the shape of the email trigger event](/workflows/building-workflows/triggers/#email).
### Sending large emails
@@ -650,7 +650,7 @@ export default defineComponent({
#### Example: Download the email to the `/tmp` directory, read it and parse it
-[This workflow](https://pipedream.com/new?h=tch_jPfaEJ) downloads the email, saving it as a file to the [`/tmp` directory](/code/nodejs/working-with-files/#the-tmp-directory). Then it reads the same file (as an example), and parses it using the [`mailparser` library](https://nodemailer.com/extras/mailparser/):
+[This workflow](https://pipedream.com/new?h=tch_jPfaEJ) downloads the email, saving it as a file to the [`/tmp` directory](/workflows/building-workflows/code/nodejs/working-with-files/#the-tmp-directory). Then it reads the same file (as an example), and parses it using the [`mailparser` library](https://nodemailer.com/extras/mailparser/):
```javascript
import stream from "stream";
@@ -682,11 +682,11 @@ Your email is saved to a Pipedream-owned [Amazon S3 bucket](https://aws.amazon.c
### Email attachments
-You can attach any files to your email, up to [the total email size limit](/limits/#email-triggers).
+You can attach any files to your email, up to [the total email size limit](/workflows/limits/#email-triggers).
Attachments are stored in `steps.trigger.event.attachments`, which provides an array of attachment objects. Each attachment in that array exposes key properties:
-- `contentUrl`: a URL that hosts your attachment. You can [download this file to the `/tmp` directory](/code/nodejs/http-requests/#download-a-file-to-the-tmp-directory) and process it in your workflow.
+- `contentUrl`: a URL that hosts your attachment. You can [download this file to the `/tmp` directory](/workflows/building-workflows/code/nodejs/http-requests/#download-a-file-to-the-tmp-directory) and process it in your workflow.
- `content`: If the attachment contains text-based content, Pipedream renders the attachment in `content`, up to 10,000 bytes.
- `contentTruncated`: `true` if the attachment contained text-based content larger than 10,000 bytes. If `true`, the data in `content` will be truncated, and you should fetch the full attachment from `contentUrl`.
@@ -715,17 +715,138 @@ Email attachments are saved to S3, and are accessible in your workflows over [pr
If the presigned URL for the attachment has expired, then you'll need to send another email to create a brand new pre-signed URL.
-If you're using email attachments in combination with [`$.flow.delay`](/code/nodejs/delay/) or [`$.flow.rerun`](/code/nodejs/rerun/) which introduces a gap of time between steps in your workflow, then there's a chance the email attachment's URL will expire.
+If you're using email attachments in combination with [`$.flow.delay`](/workflows/building-workflows/code/nodejs/delay/) or [`$.flow.rerun`](/workflows/building-workflows/code/nodejs/rerun/) which introduces a gap of time between steps in your workflow, then there's a chance the email attachment's URL will expire.
-To overcome this, we suggest uploading your email attachments to your Project's [File Store](/projects/file-stores/) for persistent storage.
+To overcome this, we suggest uploading your email attachments to your Project's [File Store](/workflows/projects/file-stores/) for persistent storage.
## RSS
Choose the RSS trigger to watch an RSS feed for new items:
-
+
+
+This will create an RSS [event source](/workflows/building-workflows/triggers/) that polls the feed for new items on the schedule you select. Every time a new item is found, your workflow will run.
+
+## Events
+
+Events trigger workflow executions. The event that triggers your workflow depends on the trigger you select for your workflow:
+
+- [HTTP triggers](/workflows/building-workflows/triggers/#http) invoke your workflow on HTTP requests.
+- [Cron triggers](/workflows/building-workflows/triggers/#schedule) invoke your workflow on a time schedule (e.g., on an interval).
+- [Email triggers](/workflows/building-workflows/triggers/#email) invoke your workflow on inbound emails.
+- [Event sources](/workflows/building-workflows/triggers/#app-based-triggers) invoke your workflow on events from apps like Twitter, Google Calendar, and more.
+
+### Selecting a test event
+
+When you test any step in your workflow, Pipedream passes the test event you select in the trigger step:
+
+
+
+You can select any event you've previously sent to your trigger as your test event, or send a new one.
+
+### Examining event data
+
+When you select an event, you'll see [the incoming event data](#event-format) and the [event context](#stepstriggercontext) for that event:
+
+
+
+Pipedream parses your incoming data and exposes it in the variable [`steps.trigger.event`](#event-format), which you can access in any [workflow step](/workflows/#steps).
+
+### Copying references to event data
+
+When you're [examining event data](#examining-event-data), you'll commonly want to copy the name of the variable that points to the data you need to reference in another step.
+
+Hover over the property whose data you want to reference, and click the **Copy Path** button to its right:
+
+
+
+### Copying the values of event data
+
+You can also copy the value of specific properties of your event data. Hover over the property whose data you want to copy, and click the **Copy Value** button to its right:
+
+
+
+### Event format
+
+When you send an event to your workflow, Pipedream takes the trigger data — for example, the HTTP payload, headers, etc. — and adds our own Pipedream metadata to it.
+
+**This data is exposed in the `steps.trigger.event` variable. You can reference this variable in any step of your workflow**.
+
+You can reference your event data in any [code](/workflows/building-workflows/code/) or [action](/workflows/contributing/components/#actions) step. See those docs or the general [docs on passing data between steps](/workflows/#steps) for more information.
-This will create an RSS [event source](/sources/) that polls the feed for new items on the schedule you select. Every time a new item is found, your workflow will run.
+The specific shape of `steps.trigger.event` depends on the trigger type:
+
+#### HTTP
+
+| Property | Description |
+| ----------- | :---------------------------------------------------: |
+| `body` | A string or object representation of the HTTP payload |
+| `client_ip` | IP address of the client that made the request |
+| `headers` | HTTP headers, represented as an object |
+| `method` | HTTP method |
+| `path` | HTTP request path |
+| `query` | Query string |
+| `url` | Request host + path |
+
+#### Cron Scheduler
+
+| Property | Description |
+| --------------------- | :---------------------------------------------------------------------------------------------: |
+| `interval_seconds` | The number of seconds between scheduled executions |
+| `cron` | When you've configured a custom cron schedule, the cron string |
+| `timestamp` | The epoch timestamp when the workflow ran |
+| `timezone_configured` | An object with formatted datetime data for the given execution, tied to the schedule's timezone |
+| `timezone_utc` | An object with formatted datetime data for the given execution, tied to the UTC timezone |
+
+#### Email
+
+We use Amazon SES to receive emails for the email trigger. You can find the shape of the event in the [SES docs](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/receiving-email-notifications-contents.html).
+
+### `steps.trigger.context`
+
+`steps.trigger.event` contain your event's **data**. `steps.trigger.context` contains _metadata_ about the workflow and the execution tied to this event.
+
+You can use the data in `steps.trigger.context` to uniquely identify the Pipedream event ID, the timestamp at which the event invoked the workflow, and more:
+
+| Property | Description |
+| ------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------: |
+| `deployment_id` | A globally-unique string representing the current version of the workflow |
+| `emitter_id` | The ID of the workflow trigger that emitted this event, e.g. the [event source](/workflows/building-workflows/triggers/) ID. |
+| `id` | A unique, Pipedream-provided identifier for the event that triggered this workflow |
+| `owner_id` | The Pipedream-assigned [workspace ID](/workflows/workspaces/#finding-your-workspaces-id) that owns the workflow |
+| `platform_version` | The version of the Pipedream execution environment this event ran on |
+| `replay` | A boolean, whether the event was replayed via the UI |
+| `trace_id` | Holds the same value for all executions tied to an original event. [See below for more details](#how-do-i-retrieve-the-execution-id-for-a-workflow). |
+| `ts` | The ISO 8601 timestamp at which the event invoked the workflow |
+| `workflow_id` | The workflow ID |
+| `workflow_name` | The workflow name |
+
+#### How do I retrieve the execution ID for a workflow?
+
+Pipedream exposes two identifies for workflow executions: one for the execution, and one for the "trace".
+
+`steps.trigger.context.id` should be unique for every execution of a workflow.
+
+`steps.trigger.context.trace_id` will hold the same value for all executions tied to the same original event, e.g. if you have auto-retry enabled and it retries a workflow three times, the `id` will change, but the `trace_id` will remain the same. For example, if you call `$.flow.suspend()` on a workflow, we run a new execution after the suspend, so you'd see two total executions: `id` will be unique before and after the suspend, but `trace_id` will be the same.
+
+You may notice other properties in `context`. These are used internally by Pipedream, and are subject to change.
+
+### Event retention
+
+On the Free and Basic plans, each workflow retains at most 100 events or 7 days of history.
+
+- After 100 events have been processed, Pipedream will delete the oldest event data as new events arrive, keeping only the last 100 events.
+- Or if an event is older than 7 days, Pipedream will delete the event data.
+
+Other paid plans have longer retention. [See the pricing page](https://pipedream.com/pricing) for details.
+
+Events are also stored in [event history](/workflows/event-history/) for up to 30 days, depending on your plan. [See the pricing page](https://pipedream.com/pricing) for the retention on your plan.
+
+Events that are [delayed](/workflows/building-workflows/control-flow/delay/) or [suspended](/glossary/#suspend) are retained for the duration of the delay. After the delay, the workflow is executed, and the event data is retained according to the rules above.
+
+
+For an extended history of events across all of your workflows, included processed events, with the ability to filter by status and time range, please see the [Event History](/workflows/event-history/).
+
## Don't see a trigger you need?
diff --git a/docs-v2/pages/workflows/using-props.mdx b/docs-v2/pages/workflows/building-workflows/using-props.mdx
similarity index 100%
rename from docs-v2/pages/workflows/using-props.mdx
rename to docs-v2/pages/workflows/building-workflows/using-props.mdx
diff --git a/docs-v2/pages/cli/_meta.tsx b/docs-v2/pages/workflows/cli/_meta.tsx
similarity index 100%
rename from docs-v2/pages/cli/_meta.tsx
rename to docs-v2/pages/workflows/cli/_meta.tsx
diff --git a/docs-v2/pages/cli/install.mdx b/docs-v2/pages/workflows/cli/install.mdx
similarity index 95%
rename from docs-v2/pages/cli/install.mdx
rename to docs-v2/pages/workflows/cli/install.mdx
index 06f9059cef225..ef80352484eba 100644
--- a/docs-v2/pages/cli/install.mdx
+++ b/docs-v2/pages/workflows/cli/install.mdx
@@ -22,7 +22,7 @@ Run the following command:
curl https://cli.pipedream.com/install | sh
```
-This will automatically download and install the `pd` CLI to your Mac. You can also [download the macOS build](https://cli.pipedream.com/darwin/amd64/latest/pd.zip), unzip that archive, and place the `pd` binary somewhere in [your `PATH`](https://opensource.com/article/17/6/set-path-linux).
+This will automatically download and install the `pd` CLI to your Mac. You can also [download the macOS build](https://cli.pipedream.com/darwin/amd64/latest/pd.zip), unzip that archive, and place the `pd` binary somewhere in [your `PATH`](https://opensource.com/article/17/6/set-path-linux).
If this returns a permissions error, you may need to run:
@@ -52,7 +52,7 @@ Download the appropriate [Linux CLI build](#cli-builds) for your architecture. U
## CLI Builds
-Pipedream publishes the following builds of the CLI. If you need to use the CLI on another OS or architecture, [please reach out](https://docs.pipedream.com/support/).
+Pipedream publishes the following builds of the CLI. If you need to use the CLI on another OS or architecture, [please reach out](https://pipedream.com/support/).
| Operating System | Architecture | link |
| ---------------- | ------------ | ----------------------------------------------------------------- |
@@ -77,5 +77,4 @@ The `pd` binary is available via Nix flake [here](https://github.com/planet-a-ve
Run `pd` to see a list of all commands, or `pd help ` to display help docs for a specific command.
-See the [CLI reference](/cli/reference/) for detailed usage and examples for each command.
-
+See the [CLI reference](/workflows/cli/reference/) for detailed usage and examples for each command.
diff --git a/docs-v2/pages/cli/login.mdx b/docs-v2/pages/workflows/cli/login.mdx
similarity index 72%
rename from docs-v2/pages/cli/login.mdx
rename to docs-v2/pages/workflows/cli/login.mdx
index c792a8c7502ef..0abfcbbad0b3d 100644
--- a/docs-v2/pages/cli/login.mdx
+++ b/docs-v2/pages/workflows/cli/login.mdx
@@ -12,7 +12,7 @@ If you already have a Pipedream account, run
pd login
```
-This will open up a new window in your default browser. If you're already logged into your Pipedream account in this browser, this will immediately link the CLI to your account, writing your API key for that account to your [`pd` config file](/cli/reference/#cli-config-file).
+This will open up a new window in your default browser. If you're already logged into your Pipedream account in this browser, this will immediately link the CLI to your account, writing your API key for that account to your [`pd` config file](/workflows/cli/reference/#cli-config-file).
Otherwise, you'll be asked to login.
@@ -23,7 +23,7 @@ Once you're done, go back to your shell and you should see confirmation that you
Logged in as dylburger (dylan@pipedream.com)
```
-Then [follow this guide](/cli/reference/#creating-a-profile-for-a-workspace) to learn how to find your workspace ID and associate it with a `pd` profile.
+Then [follow this guide](/workflows/cli/reference/#creating-a-profile-for-a-workspace) to learn how to find your workspace ID and associate it with a `pd` profile.
## Signing up for Pipedream via the CLI
@@ -33,7 +33,7 @@ If you haven't signed up for a Pipedream account, you can create an account usin
pd signup
```
-This will open up a new window in your default browser. You'll be asked to sign up for Pipedream here. Once you do, your account will be linked to the CLI, writing your API key for that account to your [`pd` config file](/cli/reference/#cli-config-file).
+This will open up a new window in your default browser. You'll be asked to sign up for Pipedream here. Once you do, your account will be linked to the CLI, writing your API key for that account to your [`pd` config file](/workflows/cli/reference/#cli-config-file).
Once you're done, go back to your shell and you should see confirmation that your account is linked:
@@ -50,9 +50,8 @@ You can log out of the CLI by running:
pd logout
```
-This will remove your API key from the [`pd` config file](/cli/reference/#cli-config-file).
+This will remove your API key from the [`pd` config file](/workflows/cli/reference/#cli-config-file).
## Using the CLI to manage multiple accounts
-If you have multiple Pipedream accounts, you can use [profiles](/cli/reference/#profiles) to ensure the CLI can manage resources for each.
-
+If you have multiple Pipedream accounts, you can use [profiles](/workflows/cli/reference/#profiles) to ensure the CLI can manage resources for each.
diff --git a/docs-v2/pages/cli/reference.mdx b/docs-v2/pages/workflows/cli/reference.mdx
similarity index 83%
rename from docs-v2/pages/cli/reference.mdx
rename to docs-v2/pages/workflows/cli/reference.mdx
index f8baf00127ce6..fbf27e8000cc0 100644
--- a/docs-v2/pages/cli/reference.mdx
+++ b/docs-v2/pages/workflows/cli/reference.mdx
@@ -2,7 +2,7 @@
## Installing the CLI
-[See the CLI installation docs](/cli/install/) to learn how to install the CLI for your OS / architecture.
+[See the CLI installation docs](/workflows/cli/install/) to learn how to install the CLI for your OS / architecture.
## Command Reference
@@ -59,7 +59,7 @@ or author a component locally and deploy that local file:
pd deploy http.js
```
-[Read more about authoring your own event sources](/components/quickstart/nodejs/sources/).
+[Read more about authoring your own event sources](/workflows/contributing/components/quickstart/nodejs/sources/).
### `pd describe`
@@ -103,7 +103,7 @@ pd events -n 100 SOURCE_ID_OR_NAME
pd events -f SOURCE_ID_OR_NAME
```
-`pd events -f` connects to the [SSE stream tied to your source](/api/sse/) and displays events as the source produces them.
+`pd events -f` connects to the [SSE stream tied to your source](/workflows/data-management/destinations/sse/) and displays events as the source produces them.
```bash
pd events -n N -f SOURCE_ID_OR_NAME
@@ -121,7 +121,7 @@ Generate new app and component files from templates.
#### `pd init app`
-Creates a directory and [an app file](/components/guidelines/#app-files) from a template
+Creates a directory and [an app file](/workflows/contributing/components/guidelines/#app-files) from a template
```bash
# Creates google_calendar/ directory and google_calendar.mjs file
@@ -130,7 +130,7 @@ pd init app google_calendar
#### `pd init action`
-Creates a new directory and [a component action](/components#actions) from a template.
+Creates a new directory and [a component action](/workflows/contributing/components/#actions) from a template.
```bash
# Creates add-new-event/ directory and add-new-event.mjs file
@@ -139,14 +139,14 @@ pd init action add-new-event
#### `pd init source`
-Creates a new directory and [an event source](/sources/) from a template.
+Creates a new directory and [an event source](/workflows/building-workflows/triggers/) from a template.
```bash
# Creates cancelled-event/ directory and cancelled_event.mjs file
pd init source cancelled-event
```
-You can attach [database](/components/api/#db), [HTTP](/components/api/#http), or [Timer](/components/api/#timer) props to your template using the following flags:
+You can attach [database](/workflows/contributing/components/api/#db), [HTTP](/workflows/contributing/components/api/#http), or [Timer](/workflows/contributing/components/api/#timer) props to your template using the following flags:
| Prop type | Flag |
| --------- | --------- |
@@ -196,13 +196,13 @@ pd list st
### `pd login`
-Log in to Pipedream CLI and persist API key locally. See [Logging into the CLI](/cli/login/) for more information.
+Log in to Pipedream CLI and persist API key locally. See [Logging into the CLI](/workflows/cli/login/) for more information.
### `pd logout`
Unsets the local API key tied to your account.
-Running `pd logout` without any arguments removes the default API key from your [config file](/cli/reference/#cli-config-file).
+Running `pd logout` without any arguments removes the default API key from your [config file](/workflows/cli/reference/#cli-config-file).
You can remove the API key for a specific profile by running:
@@ -214,7 +214,7 @@ pd logout -p PROFILE
Event sources produce logs that can be useful for troubleshooting issues with that source. `pd logs` displays logs for a source.
-Running `pd logs ` connects to the [SSE logs stream tied to your source](/sources/logs/), displaying new logs as the source produces them.
+Running `pd logs ` connects to the [SSE logs stream tied to your source](/workflows/building-workflows/triggers/), displaying new logs as the source produces them.
Any errors thrown by the source will also appear here.
@@ -234,7 +234,7 @@ pd publish my-action.js
### `pd signup`
-Sign up for Pipedream via the CLI and persist your API key locally. See the docs on [Signing up for Pipedream via the CLI](/cli/login/#signing-up-for-pipedream-via-the-cli) for more information.
+Sign up for Pipedream via the CLI and persist your API key locally. See the docs on [Signing up for Pipedream via the CLI](/workflows/cli/login/#signing-up-for-pipedream-via-the-cli) for more information.
### `pd unpublish`
@@ -279,7 +279,7 @@ Profiles allow you to work with multiple, named Pipedream accounts via the CLI.
### Creating a new profile
-When you [login to the CLI](/cli/login/), the CLI writes the API key for that account to your config file, in the `api_key` field:
+When you [login to the CLI](/workflows/cli/login/), the CLI writes the API key for that account to your config file, in the `api_key` field:
```bash
api_key = abc123
@@ -302,9 +302,9 @@ You can also run `pd signup -p ` if you'd like to sign up for a new Pip
### Creating a profile for a workspace
-If you're working with resources in an [workspace](/workspaces/), you'll need to add an `org_id` to your profile.
+If you're working with resources in an [workspace](/workflows/workspaces/), you'll need to add an `org_id` to your profile.
-1. [Retrieve your workspaces's ID](/workspaces/#finding-your-workspaces-id)
+1. [Retrieve your workspaces's ID](/workflows/workspaces/#finding-your-workspaces-id)
2. Open up your [Pipedream config file](#cli-config-file) and create a new [profile](#profiles) with the following information:
```bash
@@ -352,4 +352,3 @@ Otherwise, it will be found in `$HOME/.config/pipedream`.
Pipedream tracks CLI usage data to report errors and usage stats. We use this data exclusively for the purpose of internal analytics (see [our privacy policy](https://pipedream.com/privacy) for more information).
If you'd like to opt-out of CLI analytics, set the `PD_CLI_DO_NOT_TRACK` environment variable to `true` or `1`.
-
diff --git a/docs-v2/pages/workflows/contributing/_meta.tsx b/docs-v2/pages/workflows/contributing/_meta.tsx
new file mode 100644
index 0000000000000..84706974aef5d
--- /dev/null
+++ b/docs-v2/pages/workflows/contributing/_meta.tsx
@@ -0,0 +1,4 @@
+export default {
+ "index": "Overview",
+ "components": "Components",
+} as const
diff --git a/docs-v2/pages/components/_meta.tsx b/docs-v2/pages/workflows/contributing/components/_meta.tsx
similarity index 100%
rename from docs-v2/pages/components/_meta.tsx
rename to docs-v2/pages/workflows/contributing/components/_meta.tsx
diff --git a/docs-v2/pages/components/actions-quickstart.mdx b/docs-v2/pages/workflows/contributing/components/actions-quickstart.mdx
similarity index 90%
rename from docs-v2/pages/components/actions-quickstart.mdx
rename to docs-v2/pages/workflows/contributing/components/actions-quickstart.mdx
index b8f75cfa0a0af..709269fede014 100644
--- a/docs-v2/pages/components/actions-quickstart.mdx
+++ b/docs-v2/pages/workflows/contributing/components/actions-quickstart.mdx
@@ -6,7 +6,7 @@ import Callout from '@/components/Callout'
## Overview
-This document is intended for developers who want to author and edit [Pipedream Actions](/components/#actions). After completing this quickstart, you'll understand how to:
+This document is intended for developers who want to author and edit [Pipedream Actions](/workflows/contributing/components/#actions). After completing this quickstart, you'll understand how to:
- Develop Pipedream components
- Publish private actions and use them in workflows
@@ -16,16 +16,16 @@ This document is intended for developers who want to author and edit [Pipedream
- Use Pipedream managed auth for a 3rd party app
-If you previously developed actions using Pipedream's UI, we recommend reviewing our [migration guide](/components/migrating/) after completing this quickstart.
+If you previously developed actions using Pipedream's UI, we recommend reviewing our [migration guide](/workflows/contributing/components/migrating/) after completing this quickstart.
## Prerequisites
- Create a free account at [https://pipedream.com](https://pipedream.com)
-- Download and install the [Pipedream CLI](/cli/install/)
-- Once the CLI is installed, [link your Pipedream account](/cli/login/#existing-pipedream-account) to the CLI by running `pd login` in your terminal
+- Download and install the [Pipedream CLI](/workflows/cli/install/)
+- Once the CLI is installed, [link your Pipedream account](/workflows/cli/login/#existing-pipedream-account) to the CLI by running `pd login` in your terminal
-> **NOTE:** See the [CLI reference](/cli/reference/) for detailed usage and examples beyond those covered below.
+> **NOTE:** See the [CLI reference](/workflows/cli/reference/) for detailed usage and examples beyond those covered below.
## Walkthrough
@@ -57,7 +57,7 @@ We recommend that you complete the examples below in order.
### hello world!
-The following code represents a simple component that can be published as an action ([learn more](/components/api/) about the component structure). When used in a workflow, it will export `hello world!` as the return value for the step.
+The following code represents a simple component that can be published as an action ([learn more](/workflows/contributing/components/api/) about the component structure). When used in a workflow, it will export `hello world!` as the return value for the step.
```javascript
export default {
@@ -96,7 +96,7 @@ To test the action:
3. Click the **+** button to add a step to your workflow
4. Click on **My Actions** and then select the **Action Demo** action to add it to your workflow.
- 
+ 
5. Deploy your workflow
6. Click **RUN NOW** to execute your workflow and action
@@ -109,7 +109,7 @@ Keep the browser tab open. We'll return to this workflow in the rest of the exam
### hello [name]!
-Next, let's update the component to capture some user input. First, add a `string` [prop](/components/api/#props) called `name` to the component.
+Next, let's update the component to capture some user input. First, add a `string` [prop](/workflows/contributing/components/api/#props) called `name` to the component.
```java
export default {
@@ -340,7 +340,7 @@ export default {
};
```
-Then add an [app prop](/components/api/#app-props) to use Pipedream managed auth with this component. For this example, we'll add an app prop for Github:
+Then add an [app prop](/workflows/contributing/components/api/#app-props) to use Pipedream managed auth with this component. For this example, we'll add an app prop for Github:
```javascript
import { Octokit } from "@octokit/rest";
@@ -397,7 +397,7 @@ export default {
};
```
-In order to help users understand what's happening with each action step, we recommend surfacing a brief summary with `$summary` ([read more](/components/api/#actions) about exporting data using `$.export`).
+In order to help users understand what's happening with each action step, we recommend surfacing a brief summary with `$summary` ([read more](/workflows/contributing/components/api/#actions) about exporting data using `$.export`).
```javascript
import { Octokit } from "@octokit/rest";
@@ -486,6 +486,6 @@ Select an existing account or connect a new one, and then deploy your workflow a
## What's Next?
-You're ready to start authoring and publishing actions on Pipedream! You can also check out the [detailed component reference](/components/api/#component-api) at any time!
+You're ready to start authoring and publishing actions on Pipedream! You can also check out the [detailed component reference](/workflows/contributing/components/api/#component-api) at any time!
If you have any questions or feedback, please [reach out](https://pipedream.com/community)!
diff --git a/docs-v2/pages/components/api.mdx b/docs-v2/pages/workflows/contributing/components/api.mdx
similarity index 92%
rename from docs-v2/pages/components/api.mdx
rename to docs-v2/pages/workflows/contributing/components/api.mdx
index 24c0c6c12fa2a..4177c1d6f2923 100644
--- a/docs-v2/pages/components/api.mdx
+++ b/docs-v2/pages/workflows/contributing/components/api.mdx
@@ -3,10 +3,10 @@ import Callout from '@/components/Callout'
# Component API Reference
-Our TypeScript component API is in **beta**. If you're interested in developing TypeScript components and providing feedback, [see our TypeScript docs](/components/typescript/).
+Our TypeScript component API is in **beta**. If you're interested in developing TypeScript components and providing feedback, [see our TypeScript docs](/workflows/contributing/components/typescript/).
-This document was created to help developers author and use [Pipedream components](/components/). Not only can you develop [sources](/components/quickstart/nodejs/sources/) (workflow triggers) and [actions](/components/quickstart/nodejs/actions/) using the component API, but you can also develop [Node.js steps](/code/nodejs/) right in your workflows - without leaving your browser! You can publish components to your account for private use, or [contribute them to the Pipedream registry](/apps/contributing/) for anyone to run.
+This document was created to help developers author and use [Pipedream components](/workflows/contributing/components/). Not only can you develop [sources](/workflows/contributing/components/quickstart/nodejs/sources/) (workflow triggers) and [actions](/workflows/contributing/components/quickstart/nodejs/actions/) using the component API, but you can also develop [Node.js steps](/workflows/building-workflows/code/nodejs/) right in your workflows - without leaving your browser! You can publish components to your account for private use, or [contribute them to the Pipedream registry](/workflows/contributing/) for anyone to run.
While sources and actions share the same core component API, they differ in both how they're used and written, so certain parts of the component API apply only to one or the other. [This section of the docs](#differences-between-sources-and-actions) explains the core differences. When this document uses the term "component", the corresponding feature applies to both sources and actions. If a specific feature applies to only sources _or_ actions, the correct term will be used.
@@ -20,14 +20,14 @@ Components are Node.js modules that run on Pipedream's serverless infrastructure
- Trigger Node.js code on HTTP requests, timers, cron schedules, or manually
- Emit data on each event to inspect it. Trigger Pipedream hosted workflows or access it outside of Pipedream via API
-- Accept user input on deploy via [CLI](/cli/reference/#pd-deploy), [API](/rest-api/#overview), or [UI](https://pipedream.com/sources)
+- Accept user input on deploy via [CLI](/workflows/cli/reference/#pd-deploy), [API](/workflows/rest-api), or [UI](https://pipedream.com/sources)
- Connect to [{process.env.PUBLIC_APPS}+ apps](https://pipedream.com/apps) using Pipedream managed auth
- Use most npm packages with no `npm install` or `package.json` required
- Store and retrieve state using the [built-in key-value store](#db)
### Quickstarts
-To help you get started, we created a step-by-step walkthrough for developing both [sources](/components/quickstart/nodejs/sources/) and [actions](/components/quickstart/nodejs/actions/). We recommend starting with those docs and using the API reference below as you develop.
+To help you get started, we created a step-by-step walkthrough for developing both [sources](/workflows/contributing/components/quickstart/nodejs/sources/) and [actions](/workflows/contributing/components/quickstart/nodejs/actions/). We recommend starting with those docs and using the API reference below as you develop.
### Differences between sources and actions
@@ -49,9 +49,9 @@ Sources and actions share the same component API. However, certain features of t
### Getting Started with the CLI
-Several examples below use the Pipedream CLI. To install it, [follow the instructions for your OS / architecture](/cli/install/).
+Several examples below use the Pipedream CLI. To install it, [follow the instructions for your OS / architecture](/workflows/cli/install/).
-See the [CLI reference](/cli/reference/) for detailed usage and examples beyond those covered below.
+See the [CLI reference](/workflows/cli/reference/) for detailed usage and examples beyond those covered below.
### Example Components
@@ -89,7 +89,7 @@ export default {
| `name` | `string` | required | The name of the component, a string which identifies components deployed to users' accounts. This name will show up in the Pipedream UI, in CLI output (for example, from `pd list` commands), etc. It will also be converted to a unique slug on deploy to reference a specific component instance (it will be auto-incremented if not unique within a user account). |
| `key` | `string` | recommended | The `key` uniquely identifies a component within a namespace. The default namespace for components is your account.
When publishing components to the Pipedream registry, the `key` must be unique across registry components and should follow the pattern:
`app_name_slug`-`slugified-component-name` |
| `type` | `string` | required | When publishing an action, `type: "action"` is required. When publishing a source, use `type: "source"`. |
-| `version` | `string` | required | The component version. There are no constraints on the version, but [semantic versioning](https://semver.org/) is required for any components published to the [Pipedream registry](/components/guidelines/). |
+| `version` | `string` | required | The component version. There are no constraints on the version, but [semantic versioning](https://semver.org/) is required for any components published to the [Pipedream registry](/workflows/contributing/components/guidelines/). |
| `description` | `string` | recommended | The description will appear in the Pipedream UI to aid in discovery and to contextualize instantiated components |
| `props` | `object` | optional | [Props](#props) are custom attributes you can register on a component. When a value is passed to a prop attribute, it becomes a property on that component instance. You can reference these properties in component code using `this` (e.g., `this.propName`). |
| `methods` | `object` | optional | Define component methods for the component instance. They can be referenced via `this` (e.g., `this.methodName()`). |
@@ -107,7 +107,7 @@ Props are custom attributes you can register on a component. When a value is pas
| [Interface](#interface-props) | Attaches a Pipedream interface to your component (e.g., an HTTP interface or timer) |
| [Service](#service-props) | Attaches a Pipedream service to your component (e.g., a key-value database to maintain state) |
| [App](#app-props) | Enables managed auth for a component |
-| [Data Store](/data-stores/#using-data-stores-in-code-steps) | Provides access to a Pipedream [data store](/data-stores/) |
+| [Data Store](/workflows/data-management/data-stores/#using-data-stores-in-code-steps) | Provides access to a Pipedream [data store](/workflows/data-management/data-stores/) |
| [HTTP Request](#http-request-prop)| Enables components to execute HTTP requests based on user input |
| [Alert](#alert-prop)| Renders an informational alert in the prop form to help users configure the source or action |
@@ -303,11 +303,11 @@ When you define a prop in an app file, and that prop depends on the value of ano
You create Trello _boards_ for new projects. Boards contain _lists_. For example, this **Active** board contains two lists:
-
+
In Pipedream, users can choose from lists on a specific board:
-
+
Both **Board** and **Lists** are defined in the Trello app file:
@@ -624,7 +624,7 @@ props: {
#### App Props
-App props are normally defined in an [app file](/components/guidelines/#app-files), separate from individual components. See [the `components/` directory of the pipedream GitHub repo](https://github.com/PipedreamHQ/pipedream/tree/master/components) for example app files.
+App props are normally defined in an [app file](/workflows/contributing/components/guidelines/#app-files), separate from individual components. See [the `components/` directory of the pipedream GitHub repo](https://github.com/PipedreamHQ/pipedream/tree/master/components) for example app files.
**Definition**
@@ -642,7 +642,7 @@ props: {
| Property | Type | Required? | Description |
| ----------------- | -------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `type` | `string` | required | Value must be `app` |
-| `app` | `string` | required | Value must be set to the name slug for an app registered on Pipedream. [App files](/components/guidelines/#app-files) are programmatically generated for all integrated apps on Pipedream. To find your app's slug, visit the `components` directory of [the Pipedream GitHub repo](https://github.com/PipedreamHQ/pipedream/tree/master/components), find the app file (the file that ends with `.app.mjs`), and find the `app` property at the root of that module. If you don't see an app listed, please [open an issue here](https://github.com/PipedreamHQ/pipedream/issues/new?assignees=&labels=app%2C+enhancement&template=app---service-integration.md&title=%5BAPP%5D). |
+| `app` | `string` | required | Value must be set to the name slug for an app registered on Pipedream. [App files](/workflows/contributing/components/guidelines/#app-files) are programmatically generated for all integrated apps on Pipedream. To find your app's slug, visit the `components` directory of [the Pipedream GitHub repo](https://github.com/PipedreamHQ/pipedream/tree/master/components), find the app file (the file that ends with `.app.mjs`), and find the `app` property at the root of that module. If you don't see an app listed, please [open an issue here](https://github.com/PipedreamHQ/pipedream/issues/new?assignees=&labels=app%2C+enhancement&template=app---service-integration.md&title=%5BAPP%5D). |
| `propDefinitions` | `object` | optional | An object that contains objects with predefined user input props. See the section on User Input Props above to learn about the shapes that can be defined and how to reference in components using the `propDefinition` property |
| `methods` | `object` | optional | Define app-specific methods. Methods can be referenced within the app object context via `this` (e.g., `this.methodName()`) and within a component via `this.myAppPropName` (e.g., `this.myAppPropName.methodName()`). |
@@ -690,7 +690,7 @@ export default {
};
```
-For more examples, see the [docs on making HTTP requests with Node.js](/code/nodejs/http-requests/#send-a-get-request-to-fetch-data).
+For more examples, see the [docs on making HTTP requests with Node.js](/workflows/building-workflows/code/nodejs/http-requests/#send-a-get-request-to-fetch-data).
#### Alert Prop
@@ -719,13 +719,13 @@ export default defineComponent({
Refer to GitHub's component sources in the `pipedream` repo for an [example implementation](https://github.com/PipedreamHQ/pipedream/blob/b447d71f658d10d6a7432e8f5153bbda56ba9810/components/github/sources/common/common-flex.mjs#L27).
-
+
#### Limits on props
When a user configures a prop with a value, it can hold at most {process.env.CONFIGURED_PROPS_SIZE_LIMIT} data. Consider this when accepting large input in these fields (such as a base64 string).
-The {process.env.CONFIGURED_PROPS_SIZE_LIMIT} limit applies only to static values entered as raw text. In workflows, users can pass expressions (referencing data in a prior step). In that case the prop value is simply the text of the expression, for example `{{steps.nodejs.$return_value}}`, well below the limit. The value of these expressions is evaluated at runtime, and are subject to [different limits](/limits/).
+The {process.env.CONFIGURED_PROPS_SIZE_LIMIT} limit applies only to static values entered as raw text. In workflows, users can pass expressions (referencing data in a prior step). In that case the prop value is simply the text of the expression, for example `{{steps.nodejs.$return_value}}`, well below the limit. The value of these expressions is evaluated at runtime, and are subject to [different limits](/workflows/limits/).
### Methods
@@ -878,7 +878,7 @@ When your workflow runs, you'll see the named exports appear below your step, wi
##### Returning HTTP responses with `$.respond`
-`$.respond` lets you issue HTTP responses from your workflow. [See the full `$.respond` docs for more information](/workflows/triggers/#customizing-the-http-response).
+`$.respond` lets you issue HTTP responses from your workflow. [See the full `$.respond` docs for more information](/workflows/building-workflows/triggers/#customizing-the-http-response).
```javascript
async run({ $ }) {
@@ -903,7 +903,7 @@ async run({ $ }) {
`$.summary` is used to surface brief, user-friendly summaries about what happened when an action step succeeds. For example, when [adding items to a Spotify playlist](https://github.com/PipedreamHQ/pipedream/blob/master/components/spotify/actions/add-items-to-playlist/add-items-to-playlist.mjs#L51):
-
+
Example implementation:
@@ -920,43 +920,43 @@ $.export(
##### `$.send`
-`$.send` allows you to send data to [Pipedream destinations](/destinations/).
+`$.send` allows you to send data to [Pipedream destinations](/workflows/data-management/destinations/).
**`$.send.http`**
-[See the HTTP destination docs](/destinations/http/#using-sendhttp-in-component-actions).
+[See the HTTP destination docs](/workflows/data-management/destinations/http/#using-sendhttp-in-component-actions).
**`$.send.email`**
-[See the Email destination docs](/destinations/email/#using-sendemail-in-component-actions).
+[See the Email destination docs](/workflows/data-management/destinations/email/#using-sendemail-in-component-actions).
**`$.send.s3`**
-[See the S3 destination docs](/destinations/s3/#using-sends3-in-component-actions).
+[See the S3 destination docs](/workflows/data-management/destinations/s3/#using-sends3-in-component-actions).
**`$.send.emit`**
-[See the Emit destination docs](/destinations/emit/#using-sendemit-in-component-actions).
+[See the Emit destination docs](/workflows/data-management/destinations/emit/#using-sendemit-in-component-actions).
**`$.send.sse`**
-[See the SSE destination docs](/destinations/sse/#using-sendsse-in-component-actions).
+[See the SSE destination docs](/workflows/data-management/destinations/sse/#using-sendsse-in-component-actions).
##### `$.context`
-`$.context` exposes [the same properties as `steps.trigger.context`](/workflows/events/#stepstriggercontext), and more. Action authors can use it to get context about the calling workflow and the execution.
+`$.context` exposes [the same properties as `steps.trigger.context`](/workflows/building-workflows/triggers/#stepstriggercontext), and more. Action authors can use it to get context about the calling workflow and the execution.
-All properties from [`steps.trigger.context`](/workflows/events/#stepstriggercontext) are exposed, as well as:
+All properties from [`steps.trigger.context`](/workflows/building-workflows/triggers/#stepstriggercontext) are exposed, as well as:
| Property | Description |
| ---------- | :-----------------------------------------------------------------------------------------------------------------------------------------------------: |
-| `deadline` | An epoch millisecond timestamp marking the point when the workflow is configured to [timeout](/limits/#time-per-execution). |
+| `deadline` | An epoch millisecond timestamp marking the point when the workflow is configured to [timeout](/workflows/limits/#time-per-execution). |
| `JIT` | Stands for "just in time" (environment). `true` if the user is testing the step, `false` if the step is running in production. |
-| `run` | An object containing metadata about the current run number. See [the docs on `$.flow.rerun`](/workflows/events/#stepstriggercontext) for more detail. |
+| `run` | An object containing metadata about the current run number. See [the docs on `$.flow.rerun`](/workflows/building-workflows/triggers/#stepstriggercontext) for more detail. |
### Environment variables
-[Environment variables](/environment-variables/) are not accessible within sources or actions directly. Since components can be used by anyone, you cannot guarantee that a user will have a specific variable set in their environment.
+[Environment variables](/workflows/building-workflows/environment-variables/) are not accessible within sources or actions directly. Since components can be used by anyone, you cannot guarantee that a user will have a specific variable set in their environment.
In sources, you can use [`secret` props](#props) to reference sensitive data.
@@ -1026,7 +1026,7 @@ pd deploy my-source.js
##### From Pipedream Github Repo
-You can explore the components available to deploy in [Pipedream's GitHub repo](https://github.com/pipedreamhq/pipedream/tree/master/components).
+You can explore the components available to deploy in [Pipedream's GitHub repo](https://github.com/PipedreamHQ/pipedream/tree/master/components).
```bash
pd deploy
@@ -1052,11 +1052,11 @@ pd deploy https://raw.githubusercontent.com/PipedreamHQ/pipedream/master/compone
#### CLI - Update
-View the [CLI command reference](/cli/reference/#command-reference).
+View the [CLI command reference](/workflows/cli/reference/#command-reference).
#### CLI - Delete
-View the [CLI command reference](/cli/reference/#command-reference).
+View the [CLI command reference](/workflows/cli/reference/#command-reference).
#### UI - Deploy
@@ -1096,7 +1096,7 @@ You can delete a component via the UI at [https://pipedream.com/sources](https:/
#### API
-See the [REST API docs](/rest-api/).
+See the [REST API docs](/workflows/building-workflows/rest-api/).
### Managing Actions
@@ -1197,11 +1197,11 @@ When you navigate to your source [in the UI](https://pipedream.com/sources), you
#### Workflows
-[Trigger hosted Node.js workflows](/workflows/) on each event. Integrate with {process.env.PUBLIC_APPS}+ apps including Google Sheets, Discord, Slack, AWS, and more!
+[Trigger hosted Node.js workflows](/workflows/building-workflows/) on each event. Integrate with {process.env.PUBLIC_APPS}+ apps including Google Sheets, Discord, Slack, AWS, and more!
#### API
-Events can be retrieved using the [REST API](/rest-api) or [SSE stream tied to your component](/api/sse/). This makes it easy to retrieve data processed by your component from another app. Typically, you'll want to use the [REST API](/rest-api) to retrieve events in batch, and connect to the [SSE stream](/api/sse/) to process them in real time.
+Events can be retrieved using the [REST API](/rest-api/) or [SSE stream tied to your component](/workflows/data-management/destinations/sse/). This makes it easy to retrieve data processed by your component from another app. Typically, you'll want to use the [REST API](/rest-api/) to retrieve events in batch, and connect to the [SSE stream](/workflows/data-management/destinations/sse/) to process them in real time.
#### CLI
diff --git a/docs-v2/pages/components/guidelines.mdx b/docs-v2/pages/workflows/contributing/components/guidelines.mdx
similarity index 93%
rename from docs-v2/pages/components/guidelines.mdx
rename to docs-v2/pages/workflows/contributing/components/guidelines.mdx
index 65e83b6f65fcb..e02b8c95da32a 100644
--- a/docs-v2/pages/components/guidelines.mdx
+++ b/docs-v2/pages/workflows/contributing/components/guidelines.mdx
@@ -107,13 +107,13 @@ filters events for only new star activity so the user doesn't have to.
There may be cases where it's valuable to create a generic component that
provides users with broad latitude (e.g., see the [custom
-webhook](https://github.com/pipedreamhq/pipedream/blob/master/components/github/sources/custom-webhook-events)
+webhook](https://github.com/PipedreamHQ/pipedream/blob/master/components/github/sources/custom-webhook-events)
event source for GitHub). However, as a general heuristic, we found that tightly
scoped components are easier for users to understand and use.
### Required Metadata
-Registry [components](/components/api/#component-structure) require a unique
+Registry [components](/workflows/contributing/components/api/#component-structure) require a unique
`key` and `version`, and a friendly `name` and `description`. Action components
require a `type` field to be set to `action` (sources will require a type to be
set in the future).
@@ -190,12 +190,12 @@ Registry components are organized by app in the `components` directory of the
(-) (i.e., in kebab case)
You can explore examples in the [components
-directory](https://github.com/pipedreamhq/pipedream/tree/master/components).
+directory](https://github.com/PipedreamHQ/pipedream/tree/master/components).
#### Using APIs vs Client Libraries
If the app has a well-supported [Node.js client
-library](/components/api/#using-npm-packages), feel free to use that instead of
+library](/workflows/contributing/components/api/#using-npm-packages), feel free to use that instead of
manually constructing API requests.
### `package.json`
@@ -321,7 +321,7 @@ logic should:
#### Capturing Sensitive Data
If users are required to enter sensitive data, always use
-[secret](/components/api/#general) props.
+[secret](/workflows/contributing/components/api/#general) props.
### Promoting Reusability
@@ -336,7 +336,7 @@ out](https://pipedream.com/community/c/dev/11).
##### Prop Definitions
Whenever possible, reuse existing [prop
-definitions](/components/api/#prop-definitions-example).
+definitions](/workflows/contributing/components/api/#prop-definitions-example).
If a prop definition does not exist and you are adding an app-specific prop that
may be reused in future components, add it as a prop definition to the app file.
@@ -344,7 +344,7 @@ Prop definitions will also be surfaced for apps the Pipedream marketplace.
##### Methods
-Whenever possible, reuse [methods](/components/api/#methods) defined in the app
+Whenever possible, reuse [methods](/workflows/contributing/components/api/#methods) defined in the app
file. If you need to use an API for which a method is not defined and it may be
used in future components, define a new method in the app file.
@@ -436,7 +436,7 @@ simply as possible.
### Labels
-Use [prop](/components/api/#user-input-props) labels to customize the name of a
+Use [prop](/workflows/contributing/components/api/#user-input-props) labels to customize the name of a
prop or propDefinition (independent of the variable name in the code). The label
should mirror the name users of an app are familiar with; i.e., it should mirror
the equivalent label in the app’s UI. This applies to usage in labels,
@@ -445,7 +445,7 @@ but its label is set to “Search Term”.
### Descriptions
-Include a description for [props](/components/api/#user-input-props) if it helps
+Include a description for [props](/workflows/contributing/components/api/#user-input-props) if it helps
the user understand what they need to do. Use Markdown as appropriate to improve
the clarity of the description or instructions. When using Markdown:
@@ -470,11 +470,11 @@ Examples:
understand what values they can enter, with specific values highlighted using
backticks and links to external content.
- 
+ 
### Optional vs Required Props
-Use optional [props](/components/api/#user-input-props) whenever possible to
+Use optional [props](/workflows/contributing/components/api/#user-input-props) whenever possible to
minimize the input fields required to use a component.
For example, the Twitter search mentions source only requires that a user
@@ -482,11 +482,11 @@ connect their account and enter a search term. The remaining fields are optional
for users who want to filter the results, but they do not require any action to
activate the source:
-
+
### Default Values
-Provide [default values](/components/api/#user-input-props) whenever possible.
+Provide [default values](/workflows/contributing/components/api/#user-input-props) whenever possible.
NOTE: the best default for a source doesn’t always map to the default
recommended by the app. For example, Twitter defaults search results to an
algorithm that balances recency and popularity. However, the best default for
@@ -495,7 +495,7 @@ the use case on Pipedream is recency.
### Async Options
Avoid asking users to enter ID values. Use [async
-options](/components/api/#async-options-example) (with label/value definitions)
+options](/workflows/contributing/components/api/#async-options-example) (with label/value definitions)
so users can make selections from a drop down menu. For example, Todoist
identifies projects by numeric IDs (e.g., 12345). The async option to select a
project displays the name of the project as the label, so that’s the value the
@@ -503,7 +503,7 @@ user sees when interacting with the source (e.g., “My Project”). The code
referencing the selection receives the numeric ID (12345).
Async options should also support
-[pagination](/components/api/#async-options-example) (so users can navigate
+[pagination](/workflows/contributing/components/api/#async-options-example) (so users can navigate
across multiple pages of options for long lists). See
[Hubspot](https://github.com/PipedreamHQ/pipedream/blob/a9b45d8be3b84504dc22bb2748d925f0d5c1541f/components/hubspot/hubspot.app.mjs#L136)
for an example of offset-based pagination. See
@@ -512,7 +512,7 @@ for an example of cursor-based pagination.
### Dynamic Props
-[Dynamic props](/components/api/#dynamic-props) can improve the user experience
+[Dynamic props](/workflows/contributing/components/api/#dynamic-props) can improve the user experience
for components. They let you render props in Pipedream dynamically, based on the
value of other props, and can be used to collect more specific information that
can make it easier to use the component. See the Google Sheets example in the
@@ -521,8 +521,8 @@ linked component API docs.
### Interface & Service Props
In the interest of consistency, use the following naming patterns when defining
-[interface](/components/api/#interface-props) and
-[service](/components/api/#service-props) props in source components:
+[interface](/workflows/contributing/components/api/#interface-props) and
+[service](/workflows/contributing/components/api/#service-props) props in source components:
| Prop | **Recommended Prop Variable Name** |
| ------------------- | ---------------------------------- |
@@ -537,7 +537,7 @@ event source for Twitter).
## Source Guidelines
-These guidelines are specific to [source](/sources/) development.
+These guidelines are specific to [source](/workflows/building-workflows/triggers/) development.
### Webhook vs Polling Sources
@@ -567,7 +567,7 @@ search criteria”.
### Emit a Summary
-Always [emit a summary](/components/api/#emit) for each event. For example, the
+Always [emit a summary](/workflows/contributing/components/api/#emit) for each event. For example, the
summary for each new Tweet emitted by the Search Mentions source is the content
of the Tweet itself.
@@ -576,7 +576,7 @@ format as the summary.
### Deduping
-Use built-in [deduping strategies](/components/api/#dedupe-strategies) whenever
+Use built-in [deduping strategies](/workflows/contributing/components/api/#dedupe-strategies) whenever
possible (`unique`, `greatest`, `last`) vs developing custom deduping code.
Develop custom deduping code if the existing strategies do not support the
requirements for a source.
@@ -673,9 +673,9 @@ of just letting the error bubble up).
#### Hooks
-[Hooks](/components/api/#hooks) are methods that are automatically invoked by
+[Hooks](/workflows/contributing/components/api/#hooks) are methods that are automatically invoked by
Pipedream at different stages of the [component
-lifecycle](/components/api/#source-lifecycle). Webhook subscriptions are
+lifecycle](/workflows/contributing/components/api/#source-lifecycle). Webhook subscriptions are
typically created when components are instantiated or activated via the
`activate()` hook, and deleted when components are deactivated or deleted via
the `deactivate()` hook.
@@ -683,7 +683,7 @@ the `deactivate()` hook.
#### Helper Methods
Whenever possible, create methods in the app file to manage [creating and
-deleting webhook subscriptions](/components/api/#hooks).
+deleting webhook subscriptions](/workflows/contributing/components/api/#hooks).
| **Description** | **Method Name** |
| --------------------------------------- | --------------- |
@@ -724,12 +724,12 @@ By default, the standard `axios` package doesn't return useful debugging data to
the user when it `throw`s errors on HTTP 4XX and 5XX status codes. This makes it
hard for the user to troubleshoot the issue.
-Instead, [use `@pipedream/platform` axios](/pipedream-axios/).
+Instead, [use `@pipedream/platform` axios](/workflows/building-workflows/http/#platform-axios).
#### Return JavaScript Objects
When you `return` data from an action, it's exposed as a [step
-export](/workflows/steps/#step-exports) for users to reference in future steps
+export](/workflows/#step-exports) for users to reference in future steps
of their workflow. Return JavaScript objects in all cases, unless there's a
specific reason not to.
@@ -765,7 +765,7 @@ number of records to return.
### Use `$.summary` to Summarize What Happened
-[Describe what happened](/components/api/#returning-data-from-steps) when an
+[Describe what happened](/workflows/contributing/components/api/#returning-data-from-steps) when an
action succeeds by following these guidelines:
- Use plain language and provide helpful and contextually relevant information
@@ -783,7 +783,7 @@ exporting a reference to the file.
## Database Components
-Pipedream supports a special category of apps called ["databases"](/databases),
+Pipedream supports a special category of apps called ["databases"](/workflows/data-management/databases/),
such as
[MySQL](https://github.com/PipedreamHQ/pipedream/tree/master/components/mysql),
[PostgreSQL](https://github.com/PipedreamHQ/pipedream/tree/master/components/postgresql),
@@ -795,7 +795,7 @@ comply with some requirements. The most important features are:
against their DB
2. Proxied execution of commands against a DB, which guarantees that such
requests are always being made from the same range of static IPs (see the
- [shared static IPs docs](/databases#send-requests-from-a-shared-static-ip))
+ [shared static IPs docs](/workflows/data-management/databases#send-requests-from-a-shared-static-ip))
When dealing with database components, the Pipedream runtime performs certain
actions internally to make these features work. For this reason, these
diff --git a/docs-v2/pages/components/index.mdx b/docs-v2/pages/workflows/contributing/components/index.mdx
similarity index 82%
rename from docs-v2/pages/components/index.mdx
rename to docs-v2/pages/workflows/contributing/components/index.mdx
index bb61ed3273806..123f403f316ef 100644
--- a/docs-v2/pages/components/index.mdx
+++ b/docs-v2/pages/workflows/contributing/components/index.mdx
@@ -7,10 +7,10 @@ import VideoPlayer from '@/components/VideoPlayer'
Components are [Node.js modules](api/#component-structure) that run on Pipedream's serverless infrastructure. They can use Pipedream managed auth for [{process.env.PUBLIC_APPS}+ apps](https://pipedream.com/explore) (for both OAuth and key-based APIs) and [use most npm packages](api/#using-npm-packages) with no `npm install` or `package.json` required.
-Components are most commonly used as the building blocks of Pipedream workflows, but they can also be used like typical serverless functions. You can explore curated components for popular apps in Pipedream's [Marketplace](https://pipedream.com/explore) and [GitHub repo](https://github.com/pipedreamhq/pipedream/tree/master/components) or you can author and share your own.
+Components are most commonly used as the building blocks of Pipedream workflows, but they can also be used like typical serverless functions. You can explore curated components for popular apps in Pipedream's [Marketplace](https://pipedream.com/explore) and [GitHub repo](https://github.com/PipedreamHQ/pipedream/tree/master/components) or you can author and share your own.
-Our TypeScript component API is in **beta**. If you're interested in developing TypeScript components and providing feedback, [see our TypeScript docs](/components/typescript/).
+Our TypeScript component API is in **beta**. If you're interested in developing TypeScript components and providing feedback, [see our TypeScript docs](/workflows/contributing/components/typescript/).
## Component Types
@@ -19,13 +19,13 @@ Pipedream supports two types of components — [sources](#sources) and [actions]
### Sources
-[Sources](/sources/) must be instantiated and they run as independent resources on Pipedream. They are commonly used as workflow triggers (but can also be used as standalone serverless functions).
+[Sources](/workflows/building-workflows/triggers/) must be instantiated and they run as independent resources on Pipedream. They are commonly used as workflow triggers (but can also be used as standalone serverless functions).
**Capabilities**
- Accept user input on deploy via `props`
- [Trigger](api/#interface-props) on HTTP requests, timers, cron schedules, or manually
-- Emit events that can be inspected, trigger Pipedream [workflows](/workflows/) and that can be consumed in your own app via [API](/api/)
+- Emit events that can be inspected, trigger Pipedream [workflows](/workflows/building-workflows/) and that can be consumed in your own app via [API](/rest-api/)
- Store and retrieve state using the [built-in key-value store](api/#db)
- Use any of Pipedream's built-in [deduping strategies](api/#dedupe-strategies)
- Deploy via Pipedream's UI, CLI or API
@@ -51,24 +51,24 @@ The Add Single Row action for Google Sheets is a prebuilt component in Pipedream
Components may be instantiated or added to workflows via Pipedream's UI.
-- Sources may be instantiated and consumed via [UI](https://pipedream.com/sources/new), [CLI](/cli/reference/#pd-deploy) or API
+- Sources may be instantiated and consumed via [UI](https://pipedream.com/sources/new), [CLI](/workflows/cli/reference/#pd-deploy) or API
- Actions may be added to [workflows](https://pipedream.com/new)
### Using Private Actions
-Private action components published from the [CLI](/cli/reference/#pd-publish) or from a [Node.js Code Step](/code/nodejs/sharing-code) are available for use across your workflows.
+Private action components published from the [CLI](/workflows/cli/reference/#pd-publish) or from a [Node.js Code Step](/workflows/building-workflows/code/nodejs/sharing-code/) are available for use across your workflows.
To use a published action, add a new step to your workflow and click **My Actions**. Your privately published action components will appear in this list.
-
+
### Using Private Sources
-Private source components deployed from your account via the [CLI](/cli/reference/#pd-deploy) will automatically create a new Source in your account with the prop configuration you specified.
+Private source components deployed from your account via the [CLI](/workflows/cli/reference/#pd-deploy) will automatically create a new Source in your account with the prop configuration you specified.
Then in the workflow builder, when creating the trigger, select the *Existing* sources tab in the upper right corner to select your deployed source:
-
+
You can also deploy new instances of a source from the [Components dashboard](https://res.cloudinary.com/pipedreamin/image/upload/v1618550730/docs/components/image-20210411165325045_ia5sd5.png). To deploy a new instance of a source, click the menu on the right hand side and select **Create source**.
@@ -76,7 +76,7 @@ You can also deploy new instances of a source from the [Components dashboard](ht
## Developing Components
-Develop components locally using your preferred code editor (and maintain your code in your own GitHub repo) and deploy or publish using Pipedream's [CLI](/cli/reference/#pd-deploy).
+Develop components locally using your preferred code editor (and maintain your code in your own GitHub repo) and deploy or publish using Pipedream's [CLI](/workflows/cli/reference/#pd-deploy).
- Sources may be deployed directly from local code or published to your account and instantiated via Pipedream's UI
- Actions may only be published — published actions may be added to workflows via Pipedream's UI
@@ -88,18 +88,18 @@ Published components are only available to your own account by default. If publi
- A free [Pipedream](https://pipedream.com) account
- A free [GitHub](https://github.com) account
- Basic proficiency with Node.js or Javascript
-- Pipedream [CLI](/cli/reference/)
+- Pipedream [CLI](/workflows/cli/reference/)
Finally, the target app must be integrated with Pipedream. You can explore all apps supported by Pipedream in the [marketplace](https://pipedream.com/explore). If your app is not listed, please [create a GitHub issue](https://github.com/PipedreamHQ/pipedream/issues/new?assignees=&labels=app%2C+enhancement&template=app---service-integration.md&title=%5BAPP%5D) to request it and [reach out](https://pipedream.com/community/c/dev/11) to our team to let us know that you're blocked on source or action development.
### Quickstart Guides
-- [Sources](/components/sources-quickstart/)
-- [Actions](/components/actions-quickstart/)
+- [Sources](/workflows/contributing/components/sources-quickstart/)
+- [Actions](/workflows/contributing/components/actions-quickstart/)
### Component API Reference
-After getting familiar with source/action development using the quickstart guides, check out [the Component API Reference](/components/api/) and [examples on GitHub](https://github.com/pipedreamhq/pipedream/tree/master/components) to learn more.
+After getting familiar with source/action development using the quickstart guides, check out [the Component API Reference](/workflows/contributing/components/api/) and [examples on GitHub](https://github.com/PipedreamHQ/pipedream/tree/master/components) to learn more.
## Managing Privately Published Components
@@ -127,7 +127,7 @@ Contribute to the Pipedream community by publishing and sharing new components,
### Verified Components
-Pipedream maintains a source-available registry of components (sources and actions) that have been curated for the community. Registered components are verified by Pipedream through the [GitHub PR process](/apps/contributing/#contribution-process) and:
+Pipedream maintains a source-available registry of components (sources and actions) that have been curated for the community. Registered components are verified by Pipedream through the [GitHub PR process](/workflows/contributing/#contribution-process) and:
- Can be trusted by end users
- Follow consistent patterns for usability
diff --git a/docs-v2/pages/components/sources-quickstart.mdx b/docs-v2/pages/workflows/contributing/components/sources-quickstart.mdx
similarity index 96%
rename from docs-v2/pages/components/sources-quickstart.mdx
rename to docs-v2/pages/workflows/contributing/components/sources-quickstart.mdx
index 2e708471b88eb..29b50b8c12611 100644
--- a/docs-v2/pages/components/sources-quickstart.mdx
+++ b/docs-v2/pages/workflows/contributing/components/sources-quickstart.mdx
@@ -36,15 +36,15 @@ We recommend that you execute the examples in order — each one builds on the c
**Step 1.** Create a free account at [https://pipedream.com](https://pipedream.com). Just sign in with your Google or Github account.
-**Step 2.** [Download and install the Pipedream CLI](/cli/install/).
+**Step 2.** [Download and install the Pipedream CLI](/workflows/cli/install/).
-**Step 3.** Once the CLI is installed, [link your Pipedream account to the CLI](/cli/login/#existing-pipedream-account):
+**Step 3.** Once the CLI is installed, [link your Pipedream account to the CLI](/workflows/cli/login/#existing-pipedream-account):
```bash
pd login
```
-See the [CLI reference](/cli/reference/) for detailed usage and examples beyond those covered below.
+See the [CLI reference](/workflows/cli/reference/) for detailed usage and examples beyond those covered below.
## CLI Development Mode
@@ -67,7 +67,7 @@ If you need to update a deployed instance of a source, pass it's ID to the `dc`
pd dev --dc dc_123456 components/sources/my-source.mjs
```
-See the [CLI reference](/cli/reference/) for detailed usage and examples beyond those covered below.
+See the [CLI reference](/workflows/cli/reference/) for detailed usage and examples beyond those covered below.
## Hello World!
@@ -106,7 +106,7 @@ Open the URL returned by the CLI (`https://pipedream.com/sources/dc_v3uXKz` in t
Then click **RUN NOW** to invoke your source. Your event will appear in real-time, and you can select it to inspect the emitted data.
-
+
### Maintain state across executions
@@ -165,7 +165,7 @@ export default {
Save the changes to your local file. Your component on Pipedream should automatically update. Return to the Pipedream UI and press **RUN NOW** — you should see the execution count appear in the event list.
-
+
### Invoke your code on a schedule
@@ -212,7 +212,7 @@ export default {
Save the changes to your file (your component on Pipedream should automatically update). and then, return to the Pipedream UI and **reload the page**. You should now see the timer settings in the summary and a countdown to the next execution (you can still run your component manually). Your component will now run every 15 minutes.
-
+
**Note**: if you'd like to change the schedule of your deployed component, visit the **Configuration** tab in the Pipedream UI and change the schedule accordingly. Changing the value of `intervalSeconds` within the component's code will not change the schedule of the running instance of the component. You can also set one value as the default `intervalSeconds` in the component's code, but run
@@ -298,7 +298,7 @@ curl -d '{ "message": "hello world!" }' \
"INSERT-YOUR-ENDPOINT-URL-HERE"
```
-
+
## Emit new RSS items on a schedule (~10 mins)
@@ -679,6 +679,6 @@ Save and reload your source in the Pipedream UI. You should now see a countdown
## What's Next?
-You're ready to start authoring and deploying components on Pipedream! You can also check out the [detailed component reference](/components/api/) at any time!
+You're ready to start authoring and deploying components on Pipedream! You can also check out the [detailed component reference](/workflows/contributing/components/api/) at any time!
-If you have any questions or feedback, please join our [public Slack](https://pipedream.com/support).
\ No newline at end of file
+If you have any questions or feedback, please join our [public Slack](https://pipedream.com/support).
diff --git a/docs-v2/pages/components/typescript.mdx b/docs-v2/pages/workflows/contributing/components/typescript.mdx
similarity index 88%
rename from docs-v2/pages/components/typescript.mdx
rename to docs-v2/pages/workflows/contributing/components/typescript.mdx
index 078907744b11a..d2cf6fa10d317 100644
--- a/docs-v2/pages/components/typescript.mdx
+++ b/docs-v2/pages/workflows/contributing/components/typescript.mdx
@@ -14,19 +14,19 @@ During the beta, the `@pipedream/types` package and other TypeScript configurati
## Why TypeScript?
-Most Pipedream components in [the registry](https://github.com/PipedreamHQ/pipedream/) are written in Node.js. Writing components in TypeScript can reduce bugs and speed up development, with very few changes to your code.
+Most Pipedream components in [the registry](https://github.com/PipedreamHQ/pipedream) are written in Node.js. Writing components in TypeScript can reduce bugs and speed up development, with very few changes to your code.
If you haven't written TypeScript, start with [this tutorial](https://www.typescriptlang.org/docs/handbook/typescript-from-scratch.html).
## Quickstart
-If you've never developed Pipedream components before, [start here](/components/).
+If you've never developed Pipedream components before, [start here](/workflows/contributing/components/).
### Developing TypeScript components in the `PipedreamHQ/pipedream` registry
-1. [Fork and clone the repo](https://github.com/PipedreamHQ/pipedream/).
+1. [Fork and clone the repo](https://github.com/PipedreamHQ/pipedream).
2. Run `pnpm install` to install dependencies.
@@ -38,13 +38,13 @@ If you've never developed Pipedream components before, [start here](/components/
```bash
npm run build
-```
+```
The build process should print the compiled JS files to your console and produce them at the `/dist` directory.
For example, if you compile a TypeScript file at `pipedream/components/rss/sources/new-item-in-feed/new-item-in-feed.ts`, the corresponding JS file will be produced at `pipedream/components/rss/dist/sources/new-item-in-feed/new-item-in-feed.js`.
-6. Use [the Pipedream CLI](/cli/reference/) to `pd publish` or `pd dev` the JavaScript components emitted by step 5 by the full path to the file.
+6. Use [the Pipedream CLI](/workflows/cli/reference/) to `pd publish` or `pd dev` the JavaScript components emitted by step 5 by the full path to the file.
```bash
pd publish pipedream/components/rss/dist/sources/new-item-in-feed/new-item-in-feed.js
@@ -77,10 +77,10 @@ yarn add --dev @pipedream/types
You'll need a minimal configuration to compile TypeScript components in your application. In the Pipedream registry, we use this setup:
-- The `tsconfig.json` in the root of the repo contains [references](https://www.typescriptlang.org/docs/handbook/project-references.html) to component app directories. For example, the root config provides a reference to the `components/rss` directory, which contains its own `tsconfig.json` file.
+- The `tsconfig.json` in the root of the repo contains [references](https://www.typescriptlang.org/docs/handbook/project-references.html) to component app directories. For example, the root config provides a reference to the `components/rss` directory, which contains its own `tsconfig.json` file.
- `npm run build` compiles the TypeScript in all directories in `references`.
- The `tsconfig.json` in each component app directory contains the app-specific TypeScript configuration.
-- The GitHub actions in `.github/workflows` compile and publish our components.
+- The GitHub actions in `.github/workflows` compile and publish our components.
See [the RSS sources and actions](https://github.com/PipedreamHQ/pipedream/tree/master/components/rss) for an example app configuration.
@@ -88,7 +88,7 @@ See [the RSS sources and actions](https://github.com/PipedreamHQ/pipedream/tree/
We welcome PRs in [the `PipedreamHQ/pipedream` repo](https://github.com/PipedreamHQ/pipedream), where we store all sources and actions, the `@pipedream/types` package, these docs, and other Pipedream code. Here are a few known issues durin the **beta**:
-- `this` is strictly-typed within `methods`, `run`, `hooks`, and everywhere you have access to `this` in [the component API](/components/api/). But this typing can be improved. For example, we don't yet map props to their appropriate TypeScript type (everything is typed with `any`).
+- `this` is strictly-typed within `methods`, `run`, `hooks`, and everywhere you have access to `this` in [the component API](/workflows/contributing/components/api/). But this typing can be improved. For example, we don't yet map props to their appropriate TypeScript type (everything is typed with `any`).
- The compile -> publish lifecycle hasn't been fully-automated when you're developing in the `pipedream` repo. Currently, you have to run `npm run build` from the repo root, then use the `pd` CLI to publish components after compilation. It would be nice to run `tsc-watch` and have that compile and publish the new version of the component using the `--onSuccess` flag, publishing any sources or actions accordingly.
- We should add a linter (like `dtslint`) to all TypeScript components). Currently, `dtslint` is configured only for the `@pipedream/types` package.
diff --git a/docs-v2/pages/apps/contributing.mdx b/docs-v2/pages/workflows/contributing/index.mdx
similarity index 83%
rename from docs-v2/pages/apps/contributing.mdx
rename to docs-v2/pages/workflows/contributing/index.mdx
index 135ef97b2ee14..d450cc5f33a41 100644
--- a/docs-v2/pages/apps/contributing.mdx
+++ b/docs-v2/pages/workflows/contributing/index.mdx
@@ -3,16 +3,16 @@ import { FileTree } from 'nextra/components'
# Pipedream Registry
-When developing workflows with pre-built actions and triggers, under the hood you're using [components](/components/) from the [Pipedream Registry Github Repository](https://github.com/pipedreamhq/pipedream).
+When developing workflows with pre-built actions and triggers, under the hood you're using [components](/workflows/contributing/components/) from the [Pipedream Registry Github Repository](https://github.com/PipedreamHQ/pipedream).
-Components contributed to the [Pipedream Registry Github Repository](https://github.com/pipedreamhq/pipedream) are published to the [Pipedream marketplace](https://pipedream.com/apps) and are listed in
+Components contributed to the [Pipedream Registry Github Repository](https://github.com/PipedreamHQ/pipedream) are published to the [Pipedream marketplace](https://pipedream.com/apps) and are listed in
the Pipedream UI when building workflows.
What is a component?
-If you haven't yet, we recommend starting with our Component Development Quickstart Guides for [sources](/components/quickstart/nodejs/sources/)
-and [actions](/components/quickstart/nodejs/actions/) to learn how to build components and privately publish them to your account.
+If you haven't yet, we recommend starting with our Component Development Quickstart Guides for [sources](/workflows/contributing/components/quickstart/nodejs/sources/)
+and [actions](/workflows/contributing/components/quickstart/nodejs/actions/) to learn how to build components and privately publish them to your account.
## Registry Components Structure
@@ -54,14 +54,14 @@ Once the Pipedream team integrates the app, we'll create a directory for the app
## Contribution Process
-Anyone from the community can build [sources](/sources/) and [actions](/components#actions) for integrated apps.
+Anyone from the community can build [sources](/workflows/building-workflows/triggers/) and [actions](/workflows/contributing/components/#actions) for integrated apps.
To submit new components or update existing components:
-1. Fork the public [Pipedream Registry Github Repository](https://github.com/pipedreamhq/pipedream).
+1. Fork the public [Pipedream Registry Github Repository](https://github.com/PipedreamHQ/pipedream).
2. Create a new component within the corresponding app's directory within the `components` directory (if applicable).
3. [Create a PR for the Pipedream team to review](https://github.com/PipedreamHQ/pipedream/compare).
-4. Address any feedback provided by Pipedream based on the best practice [Component Guidelines & Patterns](/components/guidelines/).
+4. Address any feedback provided by Pipedream based on the best practice [Component Guidelines & Patterns](/workflows/contributing/components/guidelines/).
5. Once the review is complete and approved, Pipedream will merge the PR to the `master` branch
6. The component will be available for use within workflows for all Pipedream developers! 🎉
@@ -85,15 +85,15 @@ actions for Pipedream's registry.
| Name | App | Type |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | -------------------------------------------- |
-| [New Card](https://github.com/pipedreamhq/pipedream/blob/master/components/trello/sources/new-card/new-card.mjs) | Trello | Webhook |
-| [New or Modified Files](https://github.com/pipedreamhq/pipedream/blob/master/components/google_drive/sources/new-or-modified-files/new-or-modified-files.mjs) | Google Drive | Webhook + Polling |
-| [New Submission](https://github.com/pipedreamhq/pipedream/blob/master/components/jotform/sources/new-submission/new-submission.mjs) | Jotform | Webhook (with no unique hook ID) |
+| [New Card](https://github.com/PipedreamHQ/pipedream/blob/master/components/trello/sources/new-card/new-card.mjs) | Trello | Webhook |
+| [New or Modified Files](https://github.com/PipedreamHQ/pipedream/blob/master/components/google_drive/sources/new-or-modified-files/new-or-modified-files.mjs) | Google Drive | Webhook + Polling |
+| [New Submission](https://github.com/PipedreamHQ/pipedream/blob/master/components/jotform/sources/new-submission/new-submission.mjs) | Jotform | Webhook (with no unique hook ID) |
### Reference Actions
| Name | App |
| ----------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- |
| [Add Multiple Rows](https://github.com/PipedreamHQ/pipedream/blob/master/components/google_sheets/actions/add-multiple-rows/add-multiple-rows.mjs) | Google Sheets |
-| [Send Message](https://github.com/PipedreamHQ/pipedream/blob/master/components/discord_webhook/actions/send-message/send-message.mjs) | Discord |
+| [Send Message](https://github.com/PipedreamHQ/pipedream/blob/master/components/discord_bot/actions/send-message/send-message.mjs) | Discord |
| [Append Text](https://github.com/PipedreamHQ/pipedream/blob/master/components/google_docs/actions/append-text/append-text.mjs) | Google Docs |
| [`GET` request](https://github.com/PipedreamHQ/pipedream/blob/master/components/http/actions/get-request/get-request.mjs) | HTTP |
diff --git a/docs-v2/pages/workflows/data-management/_meta.tsx b/docs-v2/pages/workflows/data-management/_meta.tsx
new file mode 100644
index 0000000000000..aad88f99440fd
--- /dev/null
+++ b/docs-v2/pages/workflows/data-management/_meta.tsx
@@ -0,0 +1,6 @@
+export default {
+ "data-stores": "Data Stores",
+ "file-stores": "File Stores",
+ "destinations": "Destinations",
+ "databases": "Databases",
+} as const
diff --git a/docs-v2/pages/data-stores.mdx b/docs-v2/pages/workflows/data-management/data-stores.mdx
similarity index 83%
rename from docs-v2/pages/data-stores.mdx
rename to docs-v2/pages/workflows/data-management/data-stores.mdx
index 34e5d746b5f3c..a6763e5710ae3 100644
--- a/docs-v2/pages/data-stores.mdx
+++ b/docs-v2/pages/workflows/data-management/data-stores.mdx
@@ -20,7 +20,7 @@ Data stores are useful for:
You can connect to the same data store across workflows, so they're also great for sharing state across different services.
-You can use pre-built, no-code actions to store, update, and clear data, or interact with data stores programmatically in [Node.js](/code/nodejs/using-data-stores/) or [Python](/code/python/using-data-stores/).
+You can use pre-built, no-code actions to store, update, and clear data, or interact with data stores programmatically in [Node.js](/workflows/building-workflows/code/nodejs/using-data-stores/) or [Python](/workflows/building-workflows/code/python/using-data-stores/).
## Using pre-built Data Store actions
@@ -34,7 +34,7 @@ To insert data into a data store:
2. Search for the **Data Stores** app and select it.
3. Select the **Add or update a single record** pre-built action.
-
+
Configure the action:
@@ -42,13 +42,13 @@ Configure the action:
2. **Key** - the unique ID for this data that you'll use for lookup later
3. **Value** - The data to store at the specified `key`
-
+
For example, to store the timestamp when the workflow was initially triggered, set the **Key** to **Triggered At** and the **Value** to `{{steps.trigger.context.ts}}`.
-The **Key** must evaluate to a string. You can pass a static string, reference [exports](/workflows/steps/#step-exports) from a previous step, or use [any valid expression](/workflows/using-props/#entering-expressions).
+The **Key** must evaluate to a string. You can pass a static string, reference [exports](/workflows/#step-exports) from a previous step, or use [any valid expression](/workflows/building-workflows/using-props/#entering-expressions).
-
+
Need to store multiple records in one action? Use the **Add or update multiple
@@ -63,7 +63,7 @@ The **Get record** action will retrieve the latest value of a data point in one
2. Search for the **Data Stores** app and select it.
3. Select the **Add or update a single record** pre-built action.
-
+
Configure the action:
@@ -72,13 +72,13 @@ Configure the action:
3. **Create new record if key is not found** - if the specified key isn't found, you can create a new record
4. **Value** - The data to store at the specified `key`
-
+
### Deleting Data
To delete a single record from your data store, use the **Delete a single record** action in a step:
-
+
Then configure the action:
@@ -87,7 +87,7 @@ Then configure the action:
For example, you can delete the data at the **Triggered At** key that we've created in the steps above:
-
+
Deleting a record does not delete the entire data store. [To delete an entire data store, use the Pipedream Data Stores Dashboard](#deleting-data-stores).
@@ -126,7 +126,7 @@ Then remove the data store from any linked steps.
## Using data stores in code steps
-Refer to the [Node.js](/code/nodejs/using-data-stores/) and [Python](/code/python/using-data-stores/) data store docs to learn how to use data stores in code steps. You can get, set, delete and perform any other data store operations in code. You cannot use data stores in [Bash](/code/bash/) or [Go](/code/go/) code steps.
+Refer to the [Node.js](/workflows/building-workflows/code/nodejs/using-data-stores/) and [Python](/workflows/building-workflows/code/python/using-data-stores/) data store docs to learn how to use data stores in code steps. You can get, set, delete and perform any other data store operations in code. You cannot use data stores in [Bash](/workflows/building-workflows/code/bash/) or [Go](/workflows/building-workflows/code/go/) code steps.
## Compression
@@ -152,7 +152,7 @@ You'll find your workspace's limits in the **Data Stores** section of usage dash
## Atomic operations
Data store operations are not atomic or transactional, which can lead to race conditions.
-To ensure atomic operations, be sure to limit access to a data store key to a [single workflow with a single worker](/workflows/concurrency-and-throttling) or use a service that supports atomic operations from among our [integrated apps](https://pipedream.com/apps).
+To ensure atomic operations, be sure to limit access to a data store key to a [single workflow with a single worker](/workflows/building-workflows/settings/concurrency-and-throttling/) or use a service that supports atomic operations from among our [integrated apps](https://pipedream.com/apps).
## Supported data types
@@ -178,7 +178,7 @@ The following Node.js example action will export the data in chunks via an HTTP
`chunkSize`.
-- Adjust your [workflow memory and timeout settings](/workflows/settings/) according to the size of the data in your data store. Set the memory at 512 MB and timeout to 60 seconds and adjust higher if needed.
+- Adjust your [workflow memory and timeout settings](/workflows/building-workflows/settings/) according to the size of the data in your data store. Set the memory at 512 MB and timeout to 60 seconds and adjust higher if needed.
- Monitor the exports of this step after each execution for any potential errors preventing a full export. Run the step as many times as needed until all your data is exported.
diff --git a/docs-v2/pages/databases/_meta.tsx b/docs-v2/pages/workflows/data-management/databases/_meta.tsx
similarity index 100%
rename from docs-v2/pages/databases/_meta.tsx
rename to docs-v2/pages/workflows/data-management/databases/_meta.tsx
diff --git a/docs-v2/pages/databases/index.mdx b/docs-v2/pages/workflows/data-management/databases/index.mdx
similarity index 84%
rename from docs-v2/pages/databases/index.mdx
rename to docs-v2/pages/workflows/data-management/databases/index.mdx
index a3f914cbe424e..e5c58704aea65 100644
--- a/docs-v2/pages/databases/index.mdx
+++ b/docs-v2/pages/workflows/data-management/databases/index.mdx
@@ -11,11 +11,11 @@ Pipedream workflows run in the AWS `us-east-1` network, sending requests from st
**Unless your database is publicly accessible, you'll likely need to add specific IPs to its allow-list.** To do this, you can configure your database connection to use either a shared or dedicated static IP address from Pipedream:
### Create a Dedicated Static IP for Outbound Traffic
-- [Virtual Private Clouds (VPCs)](/workflows/vpc) in Pipedream let you deploy any workflow to a private network and is the most secure and recommended approach to using a static IP.
+- [Virtual Private Clouds (VPCs)](/workflows/vpc/) in Pipedream let you deploy any workflow to a private network and is the most secure and recommended approach to using a static IP.
- Once configured, the VPC will give you a dedicated egress IP that's unique to your workspace, and is available to any workflow within your workspace.
### Send Requests from a Shared Static IP
-- When configuring your database connection as a [connected account](/connected-accounts) to Pipedream, you can choose to route network requests through a static IP block for [any app that's supported by Pipedream's SQL Proxy](#supported-databases)
+- When configuring your database connection as a [connected account](/integrations/connected-accounts) to Pipedream, you can choose to route network requests through a static IP block for [any app that's supported by Pipedream's SQL Proxy](#supported-databases)
- Pipedream's SQL Proxy routes requests to your database from the IP block below.
#### Supported Databases
@@ -33,9 +33,9 @@ Add the following IP block to your database allow-list:
```
-## Frequently Asked Questions
+## FAQ
### What's the difference between using a shared static IP with the SQL Proxy vs a dedicated IP using a VPC?
Both the SQL Proxy and VPCs enable secure database connections from a static IP.
- VPCs offer enhanced isolation and security by providing a **dedicated** static IP for workflows within your workspace
-- The SQL proxy routes requests to your database connections through a set of **shared** static IPs
\ No newline at end of file
+- The SQL proxy routes requests to your database connections through a set of **shared** static IPs
diff --git a/docs-v2/pages/databases/working-with-sql.mdx b/docs-v2/pages/workflows/data-management/databases/working-with-sql.mdx
similarity index 100%
rename from docs-v2/pages/databases/working-with-sql.mdx
rename to docs-v2/pages/workflows/data-management/databases/working-with-sql.mdx
diff --git a/docs-v2/pages/destinations/_meta.tsx b/docs-v2/pages/workflows/data-management/destinations/_meta.tsx
similarity index 100%
rename from docs-v2/pages/destinations/_meta.tsx
rename to docs-v2/pages/workflows/data-management/destinations/_meta.tsx
diff --git a/docs-v2/pages/destinations/email.mdx b/docs-v2/pages/workflows/data-management/destinations/email.mdx
similarity index 82%
rename from docs-v2/pages/destinations/email.mdx
rename to docs-v2/pages/workflows/data-management/destinations/email.mdx
index da6dc6c37699a..4a14254b64123 100644
--- a/docs-v2/pages/destinations/email.mdx
+++ b/docs-v2/pages/workflows/data-management/destinations/email.mdx
@@ -2,7 +2,7 @@
The Email Destination allows you send an email to _yourself_ — the email address tied to the account you signed up with — at any step of a workflow.
-You can use this to email yourself when you receive a specific event, for example when a user signs up on your app. You can send yourself an email when a cron job finishes running, or when a job fails. Anywhere you need an email notification, you can use the Email Destination!
+You can use this to email yourself when you receive a specific event, for example when a user signs up on your app. You can send yourself an email when a cron job finishes running, or when a job fails. Anywhere you need an email notification, you can use the Email Destination!
@@ -15,7 +15,7 @@ You can use this to email yourself when you receive a specific event, for exampl
### Using `$.send.email` in workflows
-You can send data to an Email Destination in [Node.js code steps](/code/nodejs/), too, using the `$.send.email()` function. **This allows you to send emails to yourself programmatically, if you need more control than actions provide**.
+You can send data to an Email Destination in [Node.js code steps](/workflows/building-workflows/code/nodejs/), too, using the `$.send.email()` function. **This allows you to send emails to yourself programmatically, if you need more control than actions provide**.
`$.send.email()` takes the same parameters as the corresponding action:
@@ -37,7 +37,7 @@ Like with any `$.send` function, you can use `$.send.email()` conditionally, wit
### Using `$.send.email` in component actions
-If you're authoring a [component action](/components#actions), you can deliver data to an email destination using `$.send.email`.
+If you're authoring a [component action](/workflows/contributing/components/#actions), you can deliver data to an email destination using `$.send.email`.
`$.send.email` functions the same as [`$.send.email` in workflow code steps](#using-sendemail-in-workflows):
@@ -56,4 +56,3 @@ export default defineComponent({
## Delivery details
All emails come from **notifications@pipedream.com**.
-
diff --git a/docs-v2/pages/destinations/emit.mdx b/docs-v2/pages/workflows/data-management/destinations/emit.mdx
similarity index 89%
rename from docs-v2/pages/destinations/emit.mdx
rename to docs-v2/pages/workflows/data-management/destinations/emit.mdx
index e88889b9dbdc5..2a693efd57e72 100644
--- a/docs-v2/pages/destinations/emit.mdx
+++ b/docs-v2/pages/workflows/data-management/destinations/emit.mdx
@@ -1,11 +1,11 @@
# Emit events
-Like [event sources](/sources/), workflows can emit events. These events can trigger other workflows, or be consumed using Pipedream's [REST API](/rest-api/#get-workflow-emits).
+Like [event sources](/workflows/building-workflows/triggers/), workflows can emit events. These events can trigger other workflows, or be consumed using Pipedream's [REST API](/rest-api/#get-workflow-emits).
## Using `$.send.emit()` in workflows
-You can emit arbitrary events from any [Node.js code steps](/code/nodejs/) using `$.send.emit()`.
+You can emit arbitrary events from any [Node.js code steps](/workflows/building-workflows/code/nodejs/) using `$.send.emit()`.
```javascript
export default defineComponent({
@@ -47,7 +47,7 @@ export default defineComponent({
## Using `$.send.emit()` in component actions
-If you're authoring a [component action](/components#actions), you can emit data using `$.send.emit()`.
+If you're authoring a [component action](/workflows/contributing/components/#actions), you can emit data using `$.send.emit()`.
`$.send.emit()` functions the same as [`$.send.emit()` in workflow code steps](#using-sendemit-in-workflows):
@@ -111,7 +111,7 @@ export default defineComponent({
});
```
-This should trigger your listener, and you should see the same event in [the event inspector](/workflows/inspect/#the-inspector).
+This should trigger your listener, and you should see the same event in [the event inspector](/workflows/building-workflows/inspect/#the-inspector).
**Note**: Please upvote [this issue](https://github.com/PipedreamHQ/pipedream/issues/682) to see support for _adding_ emitted events as a workflow trigger in the UI.
@@ -124,4 +124,3 @@ This can be helpful when you want a workflow to process data asynchronously usin
## Emit logs / troubleshooting
Below your code step, you'll see both the data that was sent in the emit. If you ran `$.send.emit()` multiple times within the same code step, you'll see the data that was emitted for each.
-
diff --git a/docs-v2/pages/destinations/http.mdx b/docs-v2/pages/workflows/data-management/destinations/http.mdx
similarity index 91%
rename from docs-v2/pages/destinations/http.mdx
rename to docs-v2/pages/workflows/data-management/destinations/http.mdx
index a161c03594dc7..591d238aa0dd4 100644
--- a/docs-v2/pages/destinations/http.mdx
+++ b/docs-v2/pages/workflows/data-management/destinations/http.mdx
@@ -7,7 +7,7 @@ HTTP Destinations allow you to send data to another HTTP endpoint URL outside of
## Using `$.send.http` in workflows
-You can send HTTP requests in [Node.js code steps](/code/nodejs/) using `$.send.http()`.
+You can send HTTP requests in [Node.js code steps](/workflows/building-workflows/code/nodejs/) using `$.send.http()`.
```javascript
export default defineComponent({
@@ -67,7 +67,7 @@ you won't have to `await` the execution of the HTTP requests in your workflow. W
## Using `$.send.http` in component actions
-If you're authoring a [component action](/components#actions), you can deliver data to an HTTP destination using `$.send.http`.
+If you're authoring a [component action](/workflows/contributing/components/#actions), you can deliver data to an HTTP destination using `$.send.http`.
`$.send.http` functions the same as [`$.send.http` in workflow code steps](#using-sendhttp-in-workflows):
@@ -98,7 +98,7 @@ Below your code step, you'll see both the data that was sent in the HTTP request
Since HTTP requests sent with `$.send.http()` are sent asynchronously, after your workflow runs, **you cannot access the HTTP response in your workflow**.
-If you need to access the HTTP response data in your workflow, [use `axios`](/code/nodejs/http-requests/) or another HTTP client.
+If you need to access the HTTP response data in your workflow, [use `axios`](/workflows/building-workflows/code/nodejs/http-requests/) or another HTTP client.
## Timeout
@@ -113,11 +113,11 @@ Currently, Pipedream will not retry any failed request. If your HTTP destination
## IP addresses for Pipedream HTTP requests
-These IP addresses are tied to **requests sent with `$.send.http` only, not other HTTP requests made from workflows**. To whitelist standard HTTP requests from Pipedream workflows, [use VPCs](/workflows/vpc).
+These IP addresses are tied to **requests sent with `$.send.http` only, not other HTTP requests made from workflows**. To whitelist standard HTTP requests from Pipedream workflows, [use VPCs](/workflows/vpc/).
When you make an HTTP request using `$.send.http()`, the traffic will come from one of the following IP addresses:
-This list may change over time. If you've previously whitelisted these IP addresses and are having trouble sending HTTP requests to your target service, please check to ensure this list matches your firewall rules.
\ No newline at end of file
+This list may change over time. If you've previously whitelisted these IP addresses and are having trouble sending HTTP requests to your target service, please check to ensure this list matches your firewall rules.
diff --git a/docs-v2/pages/destinations/index.mdx b/docs-v2/pages/workflows/data-management/destinations/index.mdx
similarity index 70%
rename from docs-v2/pages/destinations/index.mdx
rename to docs-v2/pages/workflows/data-management/destinations/index.mdx
index 6c67db9d1c533..2a6e95ea6814d 100644
--- a/docs-v2/pages/destinations/index.mdx
+++ b/docs-v2/pages/workflows/data-management/destinations/index.mdx
@@ -1,6 +1,6 @@
# Destinations
-**Destinations**, like [actions](/components#actions), abstract the delivery and connection logic required to send events to services like Amazon S3, or targets like HTTP and email.
+**Destinations**, like [actions](/workflows/contributing/components/#actions), abstract the delivery and connection logic required to send events to services like Amazon S3, or targets like HTTP and email.
However, Destinations are different than actions in two ways:
@@ -13,21 +13,21 @@ The docs below discuss features common to all Destinations. See the [docs for a
## Available Destinations
-- [HTTP](/destinations/http/)
-- [Email](/destinations/email/)
-- [S3](/destinations/s3/)
-- [SSE](/destinations/sse/)
-- [Emit to another listener](/destinations/emit/)
+- [HTTP](/workflows/data-management/destinations/http/)
+- [Email](/workflows/data-management/destinations/email/)
+- [S3](/workflows/data-management/destinations/s3/)
+- [SSE](/workflows/data-management/destinations/sse/)
+- [Emit to another listener](/workflows/data-management/destinations/emit/)
## Using destinations
### Using destinations in workflows
-You can send data to Destinations in [Node.js code steps](/code/nodejs/), too, using `$.send` functions.
+You can send data to Destinations in [Node.js code steps](/workflows/building-workflows/code/nodejs/), too, using `$.send` functions.
`$.send` is an object provided by Pipedream that exposes destination-specific functions like `$.send.http()`, `$.send.s3()`, and more. This allows you to send data to destinations programmatically, if you need more control than the default actions provide.
-Let's use `$.send.http()` to send an HTTP POST request like we did in the Action example above. [Add a new action](/workflows/steps/actions), then search for "**Run custom code**":
+Let's use `$.send.http()` to send an HTTP POST request like we did in the Action example above. [Add a new action](/workflows/building-workflows/actions/), then search for "**Run custom code**":
Create a new HTTP endpoint URL (try creating a new Pipedream workflow and adding an HTTP trigger), and add the code below to your code step, with the URL you created:
@@ -45,7 +45,7 @@ export default defineComponent({
})
```
-See the docs for the [HTTP destination](/destinations/http/) to learn more about all the options you can pass to the `$.send.http()` function.
+See the docs for the [HTTP destination](/workflows/data-management/destinations/http/) to learn more about all the options you can pass to the `$.send.http()` function.
Again, it's important to remember that **Destination delivery is asynchronous**. If you iterate over an array of values and send an HTTP request for each:
@@ -70,7 +70,7 @@ you won't have to `await` the execution of the HTTP requests in your workflow. W
### Using destinations in actions
-If you're authoring a [component action](/components#actions), you can deliver data to destinations, too. `$.send` isn't directly available to actions like it is for workflow code steps. Instead, you use `$.send` to access the destination-specific functions:
+If you're authoring a [component action](/workflows/contributing/components/#actions), you can deliver data to destinations, too. `$.send` isn't directly available to actions like it is for workflow code steps. Instead, you use `$.send` to access the destination-specific functions:
```javascript
export default {
@@ -90,11 +90,10 @@ export default {
}
```
-[See the component action API docs](/components/api/#actions) for more details.
+[See the component action API docs](/workflows/contributing/components/api/#actions) for more details.
## Asynchronous Delivery
Events are delivered to destinations _asynchronously_ — that is, separate from the execution of your workflow. **This means you're not waiting for network or connection I/O in the middle of your function, which can be costly**.
Some destination payloads, like HTTP, are delivered within seconds. For other destinations, like S3 and SQL, we collect individual events into a batch and send the batch to the destination. See the [docs for a specific destination](#available-destinations) for the relevant batch delivery frequency.
-
diff --git a/docs-v2/pages/destinations/s3.mdx b/docs-v2/pages/workflows/data-management/destinations/s3.mdx
similarity index 93%
rename from docs-v2/pages/destinations/s3.mdx
rename to docs-v2/pages/workflows/data-management/destinations/s3.mdx
index a4c9edaa8947d..93f27e0fcce2b 100644
--- a/docs-v2/pages/destinations/s3.mdx
+++ b/docs-v2/pages/workflows/data-management/destinations/s3.mdx
@@ -6,9 +6,9 @@ import PublicIPs from '@/components/PublicIPs'
## Using `$.send.s3` in workflows
-You can send data to an S3 Destination in [Node.js code steps](/code/nodejs/) using `$.send.s3()`.
+You can send data to an S3 Destination in [Node.js code steps](/workflows/building-workflows/code/nodejs/) using `$.send.s3()`.
-`$.send.s3()` takes the following parameters:
+`$.send.s3()` takes the following parameters:
```javascript
$.send.s3({
@@ -22,7 +22,7 @@ Like with any `$.send` function, you can use `$.send.s3()` conditionally, within
## Using `$.send.s3` in component actions
-If you're authoring a [component action](/components#actions), you can deliver data to an S3 destination using `$.send.s3`.
+If you're authoring a [component action](/workflows/contributing/components/#actions), you can deliver data to an S3 destination using `$.send.s3`.
`$.send.s3` functions the same as [`$.send.s3` in workflow code steps](#using-sends3-in-workflows):
@@ -101,4 +101,3 @@ S3 provides a mechanism to [limit operations only from specific IP addresses](ht
This list may change over time. If you've previously whitelisted these IP addresses and are having trouble uploading S3 objects, please check to ensure this list matches your firewall rules.
-
diff --git a/docs-v2/pages/destinations/sse.mdx b/docs-v2/pages/workflows/data-management/destinations/sse.mdx
similarity index 94%
rename from docs-v2/pages/destinations/sse.mdx
rename to docs-v2/pages/workflows/data-management/destinations/sse.mdx
index faa09e684900e..affc3170c2daa 100644
--- a/docs-v2/pages/destinations/sse.mdx
+++ b/docs-v2/pages/workflows/data-management/destinations/sse.mdx
@@ -1,6 +1,6 @@
# Server-Sent Events (SSE)
-Pipedream supports [Server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events) (SSE) as a destination, enabling you to send events from a workflow directly to a client subscribed to the event stream.
+Pipedream supports [Server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events) (SSE) as a destination, enabling you to send events from a workflow directly to a client subscribed to the event stream.
## What is SSE?
@@ -16,7 +16,7 @@ Beyond web browsers, any program that's able to create an [`EventSource` interfa
## Sending data to an SSE Destination in workflows
-You can send data to an SSE Destination in [Node.js code steps](/code/nodejs/) using the `$.send.sse()` function.
+You can send data to an SSE Destination in [Node.js code steps](/workflows/building-workflows/code/nodejs/) using the `$.send.sse()` function.
1. Add a new step to your workflow
2. Select the option to **Run custom code** and choose the Node.js runtime.
@@ -28,7 +28,7 @@ export default defineComponent({
$.send.sse({
channel: "events", // Required, corresponds to the event in the SSE spec
payload: { // Required, the event payload
- name: "Luke Skywalker"
+ name: "Luke Skywalker"
}
});
}
@@ -61,7 +61,7 @@ you won't have to `await` the execution of the SSE Destination requests in your
## Using `$.send.sse` in component actions
-If you're authoring a [component action](/components#actions), you can send events to an SSE destination using `$.send.sse`.
+If you're authoring a [component action](/workflows/contributing/components/#actions), you can send events to an SSE destination using `$.send.sse`.
`$.send.sse` functions the same as [`$.send.sse` in workflow code steps](#sending-data-to-an-sse-destination-in-workflows):
@@ -86,7 +86,7 @@ Once you've sent events to an SSE Destination, you can start receiving a stream
First, it's important to note that all events sent to an SSE destination within a workflow are sent to an SSE event stream specific to that workflow. The event stream is tied to the workflow's ID, which you can find by examining the URL of the pipeline in the Pipedream UI. For example, the `p_aBcDeF` in this URL is the pipeline ID:
-
+
**Note that the `p_` prefix is part of the workflow ID**.
@@ -110,7 +110,7 @@ If you've already sent events to your SSE destination, you should see those even
It's easy to setup a simple webpage to `console.log()` all events from an event stream. You can find a lot more examples of how to work with SSE on the web, but this should help you understand the basic concepts.
-You'll need to create two files in the same directory on your machine: an `index.html` file for the HTML.
+You'll need to create two files in the same directory on your machine: an `index.html` file for the HTML.
**index.html**
diff --git a/docs-v2/pages/projects/file-stores/_meta.tsx b/docs-v2/pages/workflows/data-management/file-stores/_meta.tsx
similarity index 51%
rename from docs-v2/pages/projects/file-stores/_meta.tsx
rename to docs-v2/pages/workflows/data-management/file-stores/_meta.tsx
index 9529176dad391..f9e7d5f2243d3 100644
--- a/docs-v2/pages/projects/file-stores/_meta.tsx
+++ b/docs-v2/pages/workflows/data-management/file-stores/_meta.tsx
@@ -1,3 +1,3 @@
export default {
- "index": "File Stores",
+ "index": "Overview",
} as const
diff --git a/docs-v2/pages/projects/file-stores/index.mdx b/docs-v2/pages/workflows/data-management/file-stores/index.mdx
similarity index 99%
rename from docs-v2/pages/projects/file-stores/index.mdx
rename to docs-v2/pages/workflows/data-management/file-stores/index.mdx
index ad4fa845ea6b1..254febe8a18a2 100644
--- a/docs-v2/pages/projects/file-stores/index.mdx
+++ b/docs-v2/pages/workflows/data-management/file-stores/index.mdx
@@ -117,7 +117,7 @@ export default defineComponent({
})
```
-Once the file has been opened, you can [read, write, delete the file and more](/projects/file-stores/reference/).
+Once the file has been opened, you can [read, write, delete the file and more](/workflows/projects/file-stores/reference/).
### Uploading files to File Stores
@@ -318,7 +318,7 @@ Deleting files is irreversible
It's not possible to restore deleted files. Please take care when deleting files.
-## Frequently Asked Questions
+## FAQ
### Are there size limits for files within File Stores?
diff --git a/docs-v2/pages/projects/file-stores/reference.mdx b/docs-v2/pages/workflows/data-management/file-stores/reference.mdx
similarity index 100%
rename from docs-v2/pages/projects/file-stores/reference.mdx
rename to docs-v2/pages/workflows/data-management/file-stores/reference.mdx
diff --git a/docs-v2/pages/workflows/domains.mdx b/docs-v2/pages/workflows/domains.mdx
index 4578607496bbf..8d0da7c81cd7d 100644
--- a/docs-v2/pages/workflows/domains.mdx
+++ b/docs-v2/pages/workflows/domains.mdx
@@ -1,6 +1,6 @@
# Custom Domains
-By default, all new [Pipedream HTTP endpoints](/workflows/triggers/#http) are hosted on the **{process.env.ENDPOINT_BASE_URL}** domain. But you can configure any domain you want: instead of `https://endpoint.m.pipedream.net`, the endpoint would be available on `https://endpoint.example.com`.
+By default, all new [Pipedream HTTP endpoints](/workflows/building-workflows/triggers/#http) are hosted on the **{process.env.ENDPOINT_BASE_URL}** domain. But you can configure any domain you want: instead of `https://endpoint.m.pipedream.net`, the endpoint would be available on `https://endpoint.example.com`.
## Configuring a new custom domain
diff --git a/docs-v2/pages/environment-variables.mdx b/docs-v2/pages/workflows/environment-variables.mdx
similarity index 85%
rename from docs-v2/pages/environment-variables.mdx
rename to docs-v2/pages/workflows/environment-variables.mdx
index e737cca52cbe9..4271eed10e2cf 100644
--- a/docs-v2/pages/environment-variables.mdx
+++ b/docs-v2/pages/workflows/environment-variables.mdx
@@ -6,12 +6,12 @@ Environment variables (env vars) enable you to separate secrets and other static
You shouldn't include API keys or other sensitive data directly in your workflow's code. By referencing the value of an environment variable instead, your workflow includes a reference to that variable — for example, `process.env.API_KEY` instead of the API key itself.
-You can reference env vars and secrets in [workflow code](/code/) or in the object explorer when passing data to steps, and you can define them either globally for the entire workspace, or scope them to individual projects.
+You can reference env vars and secrets in [workflow code](/workflows/building-workflows/code/) or in the object explorer when passing data to steps, and you can define them either globally for the entire workspace, or scope them to individual projects.
| Scope | Description |
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Workspace** | All environment variables are available to all workflows within the workspace. All workspace members can manage workspace-wide variables [in the UI](https://pipedream.com/settings/env-vars). |
-| **Project** | Environment variables defined within a project are only accessible to the workflows within that project. Only workspace members who have [access to the project](/projects/#access-controls) can manage project variables. |
+| **Project** | Environment variables defined within a project are only accessible to the workflows within that project. Only workspace members who have [access to the project](/workflows/projects/access-controls) can manage project variables. |
## Creating and updating environment variables
@@ -104,7 +104,7 @@ When referencing env vars directly in code within your Pipedream workflow, you c
## Referencing environment variables in actions
-[Actions](/components#actions) are pre-built code steps that let you provide input in a form, selecting the correct params to send to the action.
+[Actions](/workflows/contributing/components/#actions) are pre-built code steps that let you provide input in a form, selecting the correct params to send to the action.
You can reference the value of environment variables using `{{process.env.YOUR_ENV_VAR}}`. You'll see a list of your environment variables in the object explorer when selecting a variable to pass to a step.
@@ -115,10 +115,10 @@ You can reference the value of environment variables using `{{process.env.YOUR_E
/>
- [Private components](https://pipedream.com/docs/components#using-components) (actions or triggers) do not have direct access to workspace or project variables as public components or code steps. Add a prop specifically for the variable you need. For sensitive data like API keys, [configure the prop as a secret](https://pipedream.com/docs/components/api#props). In your prop configuration, set the value to `{{process.env.YOUR_ENV_VAR}}` to securely reference the environment variable.
+ [Private components](/workflows/contributing/components/#using-components) (actions or triggers) do not have direct access to workspace or project variables as public components or code steps. Add a prop specifically for the variable you need. For sensitive data like API keys, [configure the prop as a secret](/workflows/contributing/components/api/#props). In your prop configuration, set the value to `{{process.env.YOUR_ENV_VAR}}` to securely reference the environment variable.
-## Frequently Asked Questions
+## FAQ
### What if I define the same variable key in my workspace env vars and project env vars?
@@ -126,7 +126,7 @@ The project-scoped variable will take priority if the same variable key exists a
### What happens if I share a workflow that references an environment variable?
-If you [share a workflow](/workflows/sharing/) that references an environment variable, **only the reference is included, and not the actual value**.
+If you [share a workflow](/workflows/building-workflows/sharing/) that references an environment variable, **only the reference is included, and not the actual value**.
## Limits
diff --git a/docs-v2/pages/event-history.mdx b/docs-v2/pages/workflows/event-history.mdx
similarity index 96%
rename from docs-v2/pages/event-history.mdx
rename to docs-v2/pages/workflows/event-history.mdx
index abbaaa43cfbc0..ad1830588de03 100644
--- a/docs-v2/pages/event-history.mdx
+++ b/docs-v2/pages/workflows/event-history.mdx
@@ -17,7 +17,7 @@ The filters at the top of the screen allow you to search all events processed by
You can filter by the event's **Status**, **time of initiation** or by the **Workflow name**.
-The filters are scoped to the current [workspace](/workspaces/). If you're not seeing the events or workflow you're expecting, try [switching workspaces](/workspaces/#switching-between-workspaces).
+The filters are scoped to the current [workspace](/workflows/workspaces/). If you're not seeing the events or workflow you're expecting, try [switching workspaces](/workflows/workspaces/#switching-between-workspaces).
### Filtering by status
@@ -92,7 +92,7 @@ When you replay multiple events at once, they'll be replayed in the order they w
The number of events recorded and available for viewing in the Event History depends on your plan. [Please see the pricing page](https://pipedream.com/pricing) for more details.
-## Frequently asked questions
+## FAQ
### Is Event History available on all plans?
diff --git a/docs-v2/pages/workflows/events.mdx b/docs-v2/pages/workflows/events.mdx
deleted file mode 100644
index be175680f5542..0000000000000
--- a/docs-v2/pages/workflows/events.mdx
+++ /dev/null
@@ -1,122 +0,0 @@
-import Callout from '@/components/Callout'
-
-# Events
-
-Events trigger workflow executions. The event that triggers your workflow depends on the trigger you select for your workflow:
-
-- [HTTP triggers](/workflows/triggers#http) invoke your workflow on HTTP requests.
-- [Cron triggers](/workflows/triggers#schedule) invoke your workflow on a time schedule (e.g., on an interval).
-- [Email triggers](/workflows/triggers#email) invoke your workflow on inbound emails.
-- [Event sources](/workflows/triggers#app-based-triggers) invoke your workflow on events from apps like Twitter, Google Calendar, and more.
-
-## Selecting a test event
-
-When you test any step in your workflow, Pipedream passes the test event you select in the trigger step:
-
-
-
-You can select any event you've previously sent to your trigger as your test event, or send a new one.
-
-## Examining event data
-
-When you select an event, you'll see [the incoming event data](#event-format) and the [event context](#stepstriggercontext) for that event:
-
-
-
-Pipedream parses your incoming data and exposes it in the variable [`steps.trigger.event`](#event-format), which you can access in any [workflow step](/workflows/steps/).
-
-## Copying references to event data
-
-When you're [examining event data](#examining-event-data), you'll commonly want to copy the name of the variable that points to the data you need to reference in another step.
-
-Hover over the property whose data you want to reference, and click the **Copy Path** button to its right:
-
-
-
-## Copying the values of event data
-
-You can also copy the value of specific properties of your event data. Hover over the property whose data you want to copy, and click the **Copy Value** button to its right:
-
-
-
-## Event format
-
-When you send an event to your workflow, Pipedream takes the trigger data — for example, the HTTP payload, headers, etc. — and adds our own Pipedream metadata to it.
-
-**This data is exposed in the `steps.trigger.event` variable. You can reference this variable in any step of your workflow**.
-
-You can reference your event data in any [code](/code/) or [action](/components#actions) step. See those docs or the general [docs on passing data between steps](/workflows/steps/) for more information.
-
-The specific shape of `steps.trigger.event` depends on the trigger type:
-
-### HTTP
-
-| Property | Description |
-| ----------- | :---------------------------------------------------: |
-| `body` | A string or object representation of the HTTP payload |
-| `client_ip` | IP address of the client that made the request |
-| `headers` | HTTP headers, represented as an object |
-| `method` | HTTP method |
-| `path` | HTTP request path |
-| `query` | Query string |
-| `url` | Request host + path |
-
-### Cron Scheduler
-
-| Property | Description |
-| --------------------- | :---------------------------------------------------------------------------------------------: |
-| `interval_seconds` | The number of seconds between scheduled executions |
-| `cron` | When you've configured a custom cron schedule, the cron string |
-| `timestamp` | The epoch timestamp when the workflow ran |
-| `timezone_configured` | An object with formatted datetime data for the given execution, tied to the schedule's timezone |
-| `timezone_utc` | An object with formatted datetime data for the given execution, tied to the UTC timezone |
-
-### Email
-
-We use Amazon SES to receive emails for the email trigger. You can find the shape of the event in the [SES docs](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/receiving-email-notifications-contents.html).
-
-## `steps.trigger.context`
-
-`steps.trigger.event` contain your event's **data**. `steps.trigger.context` contains _metadata_ about the workflow and the execution tied to this event.
-
-You can use the data in `steps.trigger.context` to uniquely identify the Pipedream event ID, the timestamp at which the event invoked the workflow, and more:
-
-| Property | Description |
-| ------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------: |
-| `deployment_id` | A globally-unique string representing the current version of the workflow |
-| `emitter_id` | The ID of the workflow trigger that emitted this event, e.g. the [event source](/sources) ID. |
-| `id` | A unique, Pipedream-provided identifier for the event that triggered this workflow |
-| `owner_id` | The Pipedream-assigned [workspace ID](/workspaces/#finding-your-workspaces-id) that owns the workflow |
-| `platform_version` | The version of the Pipedream execution environment this event ran on |
-| `replay` | A boolean, whether the event was replayed via the UI |
-| `trace_id` | Holds the same value for all executions tied to an original event. [See below for more details](#how-do-i-retrieve-the-execution-id-for-a-workflow). |
-| `ts` | The ISO 8601 timestamp at which the event invoked the workflow |
-| `workflow_id` | The workflow ID |
-| `workflow_name` | The workflow name |
-
-### How do I retrieve the execution ID for a workflow?
-
-Pipedream exposes two identifies for workflow executions: one for the execution, and one for the "trace".
-
-`steps.trigger.context.id` should be unique for every execution of a workflow.
-
-`steps.trigger.context.trace_id` will hold the same value for all executions tied to the same original event, e.g. if you have auto-retry enabled and it retries a workflow three times, the `id` will change, but the `trace_id` will remain the same. For example, if you call `$.flow.suspend()` on a workflow, we run a new execution after the suspend, so you'd see two total executions: `id` will be unique before and after the suspend, but `trace_id` will be the same.
-
-You may notice other properties in `context`. These are used internally by Pipedream, and are subject to change.
-
-## Event retention
-
-On the Free and Basic plans, each workflow retains at most 100 events or 7 days of history.
-
-- After 100 events have been processed, Pipedream will delete the oldest event data as new events arrive, keeping only the last 100 events.
-- Or if an event is older than 7 days, Pipedream will delete the event data.
-
-Other paid plans have longer retention. [See the pricing page](https://pipedream.com/pricing) for details.
-
-Events are also stored in [event history](/event-history) for up to 30 days, depending on your plan. [See the pricing page](https://pipedream.com/pricing) for the retention on your plan.
-
-Events that are [delayed](/workflows/control-flow/delay) or [suspended](/glossary#suspend) are retained for the duration of the delay. After the delay, the workflow is executed, and the event data is retained according to the rules above.
-
-
-For an extended history of events across all of your workflows, included processed events, with the ability to filter by status and time range, please see the [Event History](/event-history/).
-
diff --git a/docs-v2/pages/projects/git.mdx b/docs-v2/pages/workflows/git.mdx
similarity index 94%
rename from docs-v2/pages/projects/git.mdx
rename to docs-v2/pages/workflows/git.mdx
index a92e66d921fe0..0ece3087c74ec 100644
--- a/docs-v2/pages/projects/git.mdx
+++ b/docs-v2/pages/workflows/git.mdx
@@ -15,10 +15,6 @@ Capabilities include:
- Edit in Pipedream or use a local editor and synchronize via GitHub (e.g., edit code, find and replace across multiple steps or workflows)
- Organize workflows into projects with support for nested folders
-
-Follow our [quickstart guide](/quickstart/github-sync/) to start building projects on Pipedream using GitHub Sync.
-
-
## Getting Started
### Create a new project and enable GitHub Sync
@@ -117,7 +113,7 @@ Pipedream will attempt to automatically merge changes. If there are conflicts, y
Not available for v1 workflows
-Legacy (v1) workflows are not supported in projects. [Follow this guide to migrate your v1 workflows to v2 workflows](/migrate-from-v1/).
+Legacy (v1) workflows are not supported in projects.
First, select the workflow(s) you want to move from the [workflows listing page](https://pipedream.com/workflows) and click **Move** in the top action menu:
@@ -176,7 +172,7 @@ GitHub Sync is available on Business plan
To use this public IP address and connect to GitHub Enterprise Cloud hosted repositories, you'll need to have a Pipedream Business plan. [View our plans](https://pipedream.com/pricing).
-## Frequently Asked Questions
+## FAQ
### How are Pipedream workflows synchronized to GitHub?
@@ -199,9 +195,9 @@ Yes, you can use the GitHub Syncing feature to develop your workflows from YAML
Then pushing changes to the `production` branch will trigger a deploy for your Pipedream workflows.
### Why am I seeing the error "could not resolve step[index].uses: component-key@version" when merging to production?
-This error occurs when a workflow references a [private component](https://pipedream.com/docs/components#using-private-actions) without properly prefixing the component key with your workspace name in the `workflow.yaml` configuration file. Pipedream requires this prefix to correctly identify and resolve components specific to your workspace.
+This error occurs when a workflow references a [private component](/workflows/contributing/components/#using-private-actions) without properly prefixing the component key with your workspace name in the `workflow.yaml` configuration file. Pipedream requires this prefix to correctly identify and resolve components specific to your workspace.
-For example, if you modified a [registry action](https://pipedream.com/docs/apps/contributing) and published it privately, the correct component key should be formatted as `@workspacename/component-key@version` (e.g., `@pipedream/github-update-issue@0.1.0`).
+For example, if you modified a [registry action](/workflows/contributing/) and published it privately, the correct component key should be formatted as `@workspacename/component-key@version` (e.g., `@pipedream/github-update-issue@0.1.0`).
To resolve this error:
@@ -210,7 +206,7 @@ To resolve this error:
3. Add your workspace name prefix to the component key, ensuring it follows the format `@workspacename/component-key@version`.
4. Commit your changes and push them to your repository.
5. Open your project in the Pipedream UI and select your development branch.
-6. Click on **Merge to Production** and verify the deployment success in the [Changelog](https://pipedream.com/docs/projects/git#use-the-changelog).
+6. Click on **Merge to Production** and verify the deployment success in the [Changelog](/workflows/git/#use-the-changelog).
7. If the issue persists, [reach out to Pipedream Support](https://pipedream.com/support) for further assistance.
### Why am I seeing an error about "private auth mismatch" when trying to merge a branch to production?
@@ -223,7 +219,7 @@ This error occurs when **both** of the below conditions are met:
Since Pipedream can't verify the person who merged that change should have access to use the connected account in a workflow in this case, we block these deploys.
To resolve this error:
-1. Make sure all the connected accounts in the project's workflows are [accessible to the entire workspace](/connected-accounts/#access-control)
+1. Make sure all the connected accounts in the project's workflows are [accessible to the entire workspace](/integrations/connected-accounts/#access-control)
2. Re-trigger a sync with Pipedream by making a nominal change to the workflow **from outside the Pipedream UI** (via github.com or locally), then merge that change to production
### Can I sync an existing GitHub Repository with workflows to a new Pipedream Project?
diff --git a/docs-v2/pages/workflows/images/v2-editor-query-param.png b/docs-v2/pages/workflows/images/v2-editor-query-param.png
deleted file mode 100644
index 13d95a434b26d..0000000000000
Binary files a/docs-v2/pages/workflows/images/v2-editor-query-param.png and /dev/null differ
diff --git a/docs-v2/pages/workflows/index.mdx b/docs-v2/pages/workflows/index.mdx
index 5515ade0a3c77..27315ae2064e9 100644
--- a/docs-v2/pages/workflows/index.mdx
+++ b/docs-v2/pages/workflows/index.mdx
@@ -1,15 +1,101 @@
import VideoPlayer from '@/components/VideoPlayer';
+import Callout from '@/components/Callout'
# What are workflows?
-Workflows make it easy to integrate your apps, data, and APIs - all with no servers or infrastructure to manage. They're sequences of [steps](/workflows/steps) [triggered by an event](/workflows/triggers), like an HTTP request, or new rows in a Google sheet.
+Workflows make it easy to integrate your apps, data, and APIs - all with no servers or infrastructure to manage. They're sequences of [steps](/workflows/#steps) [triggered by an event](/workflows/building-workflows/triggers/), like an HTTP request, or new rows in a Google sheet.
-You can use [pre-built actions](/workflows/actions/) or custom [Node.js](/code/nodejs/), [Python](/code/python/), [Golang](/code/go/), or [Bash](/code/bash/) code in workflows and connect to any of our {process.env.PUBLIC_APPS} integrated apps.
+You can use [pre-built actions](/workflows/building-workflows/actions/) or custom [Node.js](/workflows/building-workflows/code/nodejs/), [Python](/workflows/building-workflows/code/python/), [Golang](/workflows/building-workflows/code/go/), or [Bash](/workflows/building-workflows/code/bash/) code in workflows and connect to any of our {process.env.PUBLIC_APPS} integrated apps.
Read [our quickstart](/quickstart/) or watch our videos on [Pipedream University](https://pipedream.com/university) to learn more.
-## How do I create a new workflow?
+## Steps
-To create a new workflow, first [create a project](/projects/). Then click **New**, title your workflow, and start adding steps.
+Steps are the building blocks you use to create workflows.
+
+- Use [triggers](/workflows/building-workflows/triggers/), [code](/workflows/building-workflows/code/), and [pre-built actions](/workflows/contributing/components/#actions)
+- Steps are run linearly, in the order they appear in your workflow
+- You can pass data between steps using [the `steps` object](#step-exports)
+- Observe the logs, errors, timing, and other execution details for every step
+
+### Triggers
+
+Every workflow begins with a [trigger](/workflows/building-workflows/triggers/) step. Trigger steps initiate the execution of a workflow; i.e., workflows execute on each trigger event. For example, you can create an [HTTP trigger](/workflows/building-workflows/triggers/#http) to accept HTTP requests. We give you a unique URL where you can send HTTP requests, and your workflow is executed on each request.
+
+You can add [multiple triggers](/workflows/building-workflows/triggers/#can-i-add-multiple-triggers-to-a-workflow) to a workflow, allowing you to run it on distinct events.
+
+### Code, Actions
+
+[Actions](/workflows/contributing/components/#actions) and [code](/workflows/building-workflows/code/) steps drive the logic of your workflow. Anytime your workflow runs, Pipedream executes each step of your workflow in order. Actions are prebuilt code steps that let you connect to hundreds of APIs without writing code. When you need more control than the default actions provide, code steps let you write any custom Node.js code.
+
+Code and action steps cannot precede triggers, since they'll have no data to operate on.
+
+Once you save a workflow, we deploy it to our servers. Each event triggers the workflow code, whether you have the workflow open in your browser, or not.
+
+## Step Names
+
+Steps have names, which appear at the top of the step:
+
+
+
+When you [share data between steps](#step-exports), you'll use this name to reference that shared data. For example, `steps.trigger.event` contains the event that triggered your workflow. If you exported a property called `myData` from this code step, you'd reference that in other steps using `steps.code.myData`. See the docs on [step exports](#step-exports) to learn more.
+
+You can rename a step by clicking on its name and typing a new one in its place:
+
+
+
+After changing a step name, you'll need to update any references to the old step. In this example, you'd now reference this step as `steps.get_data`.
+
+
+Step names cannot contain spaces or dashes. Please use underscores or camel casing for your step names, like `getData` or `get_data`.
+
+
+## Passing data to steps from the workflow builder
+
+You can generate form based inputs for steps using `props`. This allows the step reuse in across many workflows with different provided arguments - all without changing code.
+
+Learn more about using `props` in our [Node.js code step documentation.](/workflows/building-workflows/code/nodejs/#passing-props-to-code-steps)
+
+
+Passing props from the workflow builder to workflow steps are only available in Node.js code steps.
+
+We do not currently offer this feature for Python, Bash or Go powered code steps.
+
+
+## Step Exports
+
+Step exports allow you to pass data between steps. Any data exported from a step must be JSON serializable; the data must be able to stored as JSON so it can be read by downstream steps.
+
+For examples of supported data types in your steps language, see the examples below.
+
+* [Node.js (Javascript)](/workflows/building-workflows/code/nodejs/#sharing-data-between-steps)
+* [Python](/workflows/building-workflows/code/python/#sharing-data-between-steps)
+* [Bash](/workflows/building-workflows/code/bash/#sharing-data-between-steps)
+* [Go](/workflows/building-workflows/code/go/#sharing-data-between-steps)
+
+## Step Notes
+
+Pipedream lets you add notes to individual steps in your workflow so you can include helpful context to other workspace members or even yourself, and you can even write markdown!
+
+
+
+### Adding or editing a note
+1. Enter build mode on any workflow
+2. Click into the overflow menu (3 dots) at the top right of any step
+3. Select **Add note** (or **Edit note** if making changes to an existing note)
+4. Add any text or markdown, then click **Update**
+
+
+
+
+
+### Showing notes
+Any step that has a note will have a **Note** section in the top panel in the editor pane.
+
+
+
+### Current limitations
+
+- Step notes are only accessible in Build mode, not in the Inspector.
diff --git a/docs-v2/pages/limits.mdx b/docs-v2/pages/workflows/limits.mdx
similarity index 85%
rename from docs-v2/pages/limits.mdx
rename to docs-v2/pages/workflows/limits.mdx
index 088f9fb77b53e..4bc6bebde4be6 100644
--- a/docs-v2/pages/limits.mdx
+++ b/docs-v2/pages/workflows/limits.mdx
@@ -56,7 +56,7 @@ You'll find your workspace's limits in the **Data Stores** section of usage dash
## HTTP Triggers
-The following limits apply to [HTTP triggers](/workflows/triggers/#http).
+The following limits apply to [HTTP triggers](/workflows/building-workflows/triggers/#http).
### HTTP Request Body Size
@@ -66,8 +66,8 @@ Your endpoint will issue a `413 Payload Too Large` status code when the body of
**Pipedream supports two different ways to bypass this limit**. Both of these interfaces support uploading data up to `5TB`, though you may encounter other platform limits.
-- You can send large HTTP payloads by passing the `pipedream_upload_body=1` query string or an `x-pd-upload-body: 1` HTTP header in your HTTP request. [Read more here](/workflows/triggers/#sending-large-payloads).
-- You can upload multiple large files, like images and videos, using the [large file upload interface](/workflows/triggers/#large-file-support).
+- You can send large HTTP payloads by passing the `pipedream_upload_body=1` query string or an `x-pd-upload-body: 1` HTTP header in your HTTP request. [Read more here](/workflows/building-workflows/triggers/#sending-large-payloads).
+- You can upload multiple large files, like images and videos, using the [large file upload interface](/workflows/building-workflows/triggers/#large-file-support).
### QPS (Queries Per Second)
@@ -81,17 +81,17 @@ We'll also accept short bursts of traffic, as long as you remain close to an ave
## Email Triggers
-Currently, most of the [limits that apply to HTTP triggers](#http-triggers) also apply to [email triggers](/workflows/triggers/#email).
+Currently, most of the [limits that apply to HTTP triggers](#http-triggers) also apply to [email triggers](/workflows/building-workflows/triggers/#email).
The only limit that differs between email and HTTP triggers is the payload size: the total size of an email sent to a workflow - its body, headers, and attachments - is limited to {process.env.EMAIL_PAYLOAD_SIZE_LIMIT}.
## Memory
-By default, workflows run with {process.env.MEMORY_LIMIT} of memory. You can modify a workflow's memory [in your workflow's Settings](/workflows/settings/#memory), up to {process.env.MEMORY_ABSOLUTE_LIMIT}.
+By default, workflows run with {process.env.MEMORY_LIMIT} of memory. You can modify a workflow's memory [in your workflow's Settings](/workflows/building-workflows/settings/#memory), up to {process.env.MEMORY_ABSOLUTE_LIMIT}.
Increasing your workflow's memory gives you a proportional increase in CPU. If your workflow is limited by memory or compute, increasing your workflow's memory can reduce its overall runtime and make it more performant.
-**Pipedream charges credits proportional to your memory configuration**. [Read more here](/pricing/#how-does-workflow-memory-affect-credits).
+**Pipedream charges credits proportional to your memory configuration**. [Read more here](/pricing/faq/#how-does-workflow-memory-affect-credits).
## Disk
@@ -117,11 +117,11 @@ You can increase the timeout limit, up to a max value set by your plan:
| Free tiers | 300 seconds (5 min) |
| Paid tiers | 750 seconds (12.5 min) |
-Events that trigger a **Timeout** error will appear in red in the [Inspector](/workflows/inspect/). You'll see the timeout error, also in red, in the cell at which the code timed out.
+Events that trigger a **Timeout** error will appear in red in the [Inspector](/workflows/building-workflows/inspect/). You'll see the timeout error, also in red, in the cell at which the code timed out.
-### Event / Execution History
+### Event History
-The [Inspector](/workflows/inspect/#the-inspector) shows the execution history for a given workflow. Events have a limited retention period, depending on your plan:
+The [Inspector](/workflows/building-workflows/inspect/#the-inspector) shows the execution history for a given workflow. Events have a limited retention period, depending on your plan:
| Tier | Events retained per workflow |
| :--------: | :------------------------------------------------------------------------------: |
@@ -132,7 +132,7 @@ The execution details for a specific event also expires after {process.env.INSPE
### Logs, Step Exports, and other observability
-The total size of `console.log()` statements, [step exports](/workflows/steps/#step-exports), and the original event data sent to the workflow cannot exceed a combined size of {process.env.FUNCTION_PAYLOAD_LIMIT}. If you produce logs or step exports larger than this - for example, passing around large API responses, CSVs, or other data - you may encounter a **Function Payload Limit Exceeded** in your workflow.
+The total size of `console.log()` statements, [step exports](/workflows/#step-exports), and the original event data sent to the workflow cannot exceed a combined size of {process.env.FUNCTION_PAYLOAD_LIMIT}. If you produce logs or step exports larger than this - for example, passing around large API responses, CSVs, or other data - you may encounter a **Function Payload Limit Exceeded** in your workflow.
This limit cannot be raised.
diff --git a/docs-v2/pages/workflows/managing/images/add-new-env-var.png b/docs-v2/pages/workflows/managing/images/add-new-env-var.png
deleted file mode 100644
index 7cdfea9eae72a..0000000000000
Binary files a/docs-v2/pages/workflows/managing/images/add-new-env-var.png and /dev/null differ
diff --git a/docs-v2/pages/workflows/managing/images/add-remove-env-var.png b/docs-v2/pages/workflows/managing/images/add-remove-env-var.png
deleted file mode 100644
index 5d6ce43249499..0000000000000
Binary files a/docs-v2/pages/workflows/managing/images/add-remove-env-var.png and /dev/null differ
diff --git a/docs-v2/pages/workflows/managing/images/attachment-file-data.png b/docs-v2/pages/workflows/managing/images/attachment-file-data.png
deleted file mode 100644
index cfea2a7c323d0..0000000000000
Binary files a/docs-v2/pages/workflows/managing/images/attachment-file-data.png and /dev/null differ
diff --git a/docs-v2/pages/workflows/managing/images/edit-environment.png b/docs-v2/pages/workflows/managing/images/edit-environment.png
deleted file mode 100644
index 860998686487b..0000000000000
Binary files a/docs-v2/pages/workflows/managing/images/edit-environment.png and /dev/null differ
diff --git a/docs-v2/pages/workflows/managing/images/env-var-error.png b/docs-v2/pages/workflows/managing/images/env-var-error.png
deleted file mode 100644
index 401992d6b1ff3..0000000000000
Binary files a/docs-v2/pages/workflows/managing/images/env-var-error.png and /dev/null differ
diff --git a/docs-v2/pages/workflows/managing/images/env-vars-object-explorer.png b/docs-v2/pages/workflows/managing/images/env-vars-object-explorer.png
deleted file mode 100644
index 2e7fef119a0cf..0000000000000
Binary files a/docs-v2/pages/workflows/managing/images/env-vars-object-explorer.png and /dev/null differ
diff --git a/docs-v2/pages/workflows/managing/images/env-vars.gif b/docs-v2/pages/workflows/managing/images/env-vars.gif
deleted file mode 100644
index 24b4efd38596b..0000000000000
Binary files a/docs-v2/pages/workflows/managing/images/env-vars.gif and /dev/null differ
diff --git a/docs-v2/pages/workflows/managing/images/params-hamburger-menu.png b/docs-v2/pages/workflows/managing/images/params-hamburger-menu.png
deleted file mode 100644
index 6f070d61b64ed..0000000000000
Binary files a/docs-v2/pages/workflows/managing/images/params-hamburger-menu.png and /dev/null differ
diff --git a/docs-v2/pages/workflows/managing/images/shared-with-me.png b/docs-v2/pages/workflows/managing/images/shared-with-me.png
deleted file mode 100644
index 0c2d00ca39d2a..0000000000000
Binary files a/docs-v2/pages/workflows/managing/images/shared-with-me.png and /dev/null differ
diff --git a/docs-v2/pages/workflows/managing/images/workflow-settings.png b/docs-v2/pages/workflows/managing/images/workflow-settings.png
deleted file mode 100644
index 859dad03dfa43..0000000000000
Binary files a/docs-v2/pages/workflows/managing/images/workflow-settings.png and /dev/null differ
diff --git a/docs-v2/pages/workflows/projects/_meta.tsx b/docs-v2/pages/workflows/projects/_meta.tsx
new file mode 100644
index 0000000000000..090dea761c1aa
--- /dev/null
+++ b/docs-v2/pages/workflows/projects/_meta.tsx
@@ -0,0 +1,5 @@
+export default {
+ "index": "Overview",
+ "access-controls": "Access Controls",
+ "secrets": "Variables and Secrets",
+} as const
diff --git a/docs-v2/pages/workflows/projects/access-controls.mdx b/docs-v2/pages/workflows/projects/access-controls.mdx
new file mode 100644
index 0000000000000..29483d2dc5e28
--- /dev/null
+++ b/docs-v2/pages/workflows/projects/access-controls.mdx
@@ -0,0 +1,73 @@
+import Callout from "@/components/Callout";
+
+# Access Controls
+
+The [projects list view](https://pipedream.com/projects) contains **Owner** and **Access** columns.
+
+**Owner** indicates who within the workspace owns each project. This is typically the person who created the project.
+
+
+
+
+ Projects created before February 2024 don't automatically have owners, which
+ has no functional impact.
+
+
+**Access** indicates which workspace members have access to each project, and this can be displayed as "me", "Workspace", or "N members".
+
+
+
+## Permissions
+
+Workspace owners and admins are able to perform all actions in projects, whereas workspace members are restricted from performing certain actions in projects.
+
+| Operation | Project creator | Workspace members |
+| ------------------------------------------------------------ | :-------------: | :---------------: |
+| View in [projects listing](https://pipedream.com/projects) | ✅ | ✅ |
+| View in [Event History](https://pipedream.com/event-history) | ✅ | ✅ |
+| View in global search | ✅ | ✅ |
+| Manage project workflows | ✅ | ✅ |
+| Manage project files | ✅ | ✅ |
+| Manage project variables | ✅ | ✅ |
+| Manage member access | ✅ | ❌ |
+| Manage GitHub Sync settings | ✅ | ❌ |
+| Delete project | ✅ | ❌ |
+
+
+ **Workspace admins and owners have the same permissions as project creators
+ for all projects in the workspace.**
+
+
+## Managing access
+
+
+ By default, all projects are accessible to all workspace members. Workspaces
+ on the [Business plan](https://pipedream.com/pricing) can restrict access for
+ individual projects to specific workspace members.
+
+
+You can easily modify the access rules for a project directly from the [project list view](https://pipedream.com/projects), either by clicking the access badge in the project row (fig 1) or clicking the 3 dots to open the action menu, then selecting **Manage Access** (fig 2).
+
+Via the access badge (fig 1):
+
+
+
+Via the action menu (fig 2):
+
+
+
+From here, a slideout drawer reveals the access management configuration:
+
+
+
+Toggle the **Restrict access to this project** switch to manage access:
+
+
+
+Select specific members of the workspace to grant access:
+
+
+
+You can always see who has access and remove access if necessary:
+
+
diff --git a/docs-v2/pages/workflows/projects/index.mdx b/docs-v2/pages/workflows/projects/index.mdx
new file mode 100644
index 0000000000000..6198e80d6aca3
--- /dev/null
+++ b/docs-v2/pages/workflows/projects/index.mdx
@@ -0,0 +1,80 @@
+import Callout from "@/components/Callout";
+
+# Projects
+
+A workspace can contain one or more _projects_. Projects are a way to organize your workflows into specific groupings or categories.
+
+
+
+
+
+
+## Getting started with projects
+
+### Creating projects
+
+To create a new project, first [open the Projects section in the dashboard](https://pipedream.com/projects).
+
+Then click **Create project** to start a new project.
+
+Enter in your desired name for the project in the prompt, then click **Create**.
+
+That's it, you now have a dedicated new project created within your workspace. Now you can create workflows within this project, or move workflows into it or create folders for further organization.
+
+### Creating folders and workflows in projects
+
+Within a given project, you can create folders for your workflows.
+
+Open your project, and then click the **New** button for a dropdown to create a workflow in your current project.
+
+
+Helpful hotkeys to speed up your development
+
+- `C then F` creates a new folder.
+- `C then W` creates a new workflow.
+
+
+
+Folders can also contain sub-folders, which allows you to create a filing system to organize your workflows.
+
+### Moving workflows into folders
+
+To move workflows into folders, simply drag and drop the workflow into the folder.
+
+You can move workflows or folders up a level by dragging and dropping the workflow to the folder icon at the top of the list.
+
+### Importing workflows into projects
+
+
+ This only applies to Pipedream accounts that created workflows before the
+ projects feature was released.
+
+
+To import a workflow from the general **Workflows** area of your dashboard into a project:
+
+1. Open the Workflows area in the dashboard
+2. Select one or more workflows you'd like to import into a project
+3. Click *Move* in the top right and select a project to move them to
+
+
+
+### Moving workflows between projects
+
+To move a workflow from one project to another project, first check the workflow and then click **Move** to open a dropdown of projects. Select the project to move this workflow to, and click **Move** once more to complete the move.
+
+
+
+
+Github Sync limitation
+
+At this time it's not possible to move workflows out of GitHub Synchronized Projects.
+
+
+
+## Finding your project's ID
+
+Visit your project's **Settings** and copy the project ID.
diff --git a/docs-v2/pages/workflows/projects/secrets.mdx b/docs-v2/pages/workflows/projects/secrets.mdx
new file mode 100644
index 0000000000000..9df7b0b11f2bd
--- /dev/null
+++ b/docs-v2/pages/workflows/projects/secrets.mdx
@@ -0,0 +1,13 @@
+import Callout from "@/components/Callout";
+
+# Project variables and secrets
+
+Environment variables defined at the global workspace level are accessible to all workspace members and workflows within the workspace. To restrict access to sensitive variables or secrets, define them at the project-level and [configure access controls for the project](/workflows/projects/access-controls#managing-access).
+
+[See here](/workflows/environment-variables/) for info on creating, managing, and using environment variables and secrets.
+
+
+ **Project variables override workspace variables**. When the same variable is
+ defined at both the workspace and project levels (for example,
+ `process.env.BASE_DOMAIN`), the **project** variable takes precedence.
+
diff --git a/docs-v2/pages/workflows/steps.mdx b/docs-v2/pages/workflows/steps.mdx
deleted file mode 100644
index 90263cfe3e06c..0000000000000
--- a/docs-v2/pages/workflows/steps.mdx
+++ /dev/null
@@ -1,92 +0,0 @@
-import Callout from '@/components/Callout'
-
-# Steps
-
-Steps are the building blocks you use to create workflows.
-
-- Use [triggers](/workflows/triggers/), [code](/code/), and [pre-built actions](/components#actions)
-- Steps are run linearly, in the order they appear in your workflow
-- You can pass data between steps using [the `steps` object](#step-exports)
-- Observe the logs, errors, timing, and other execution details for every step
-
-## Types of Steps
-
-### Triggers
-
-Every workflow begins with a [trigger](/workflows/triggers/) step. Trigger steps initiate the execution of a workflow; i.e., workflows execute on each trigger event. For example, you can create an [HTTP trigger](/workflows/triggers/#http) to accept HTTP requests. We give you a unique URL where you can send HTTP requests, and your workflow is executed on each request.
-
-You can add [multiple triggers](/workflows/triggers/#can-i-add-multiple-triggers-to-a-workflow) to a workflow, allowing you to run it on distinct events.
-
-### Code, Actions
-
-[Actions](/components#actions) and [code](/code/) steps drive the logic of your workflow. Anytime your workflow runs, Pipedream executes each step of your workflow in order. Actions are prebuilt code steps that let you connect to hundreds of APIs without writing code. When you need more control than the default actions provide, code steps let you write any custom Node.js code.
-
-Code and action steps cannot precede triggers, since they'll have no data to operate on.
-
-Once you save a workflow, we deploy it to our servers. Each event triggers the workflow code, whether you have the workflow open in your browser, or not.
-
-## Step Names
-
-Steps have names, which appear at the top of the step:
-
-
-
-When you [share data between steps](#step-exports), you'll use this name to reference that shared data. For example, `steps.trigger.event` contains the event that triggered your workflow. If you exported a property called `myData` from this code step, you'd reference that in other steps using `steps.code.myData`. See the docs on [step exports](#step-exports) to learn more.
-
-You can rename a step by clicking on its name and typing a new one in its place:
-
-
-
-After changing a step name, you'll need to update any references to the old step. In this example, you'd now reference this step as `steps.get_data`.
-
-
-Step names cannot contain spaces or dashes. Please use underscores or camel casing for your step names, like `getData` or `get_data`.
-
-
-## Passing data to steps from the workflow builder
-
-You can generate form based inputs for steps using `props`. This allows the step reuse in across many workflows with different provided arguments - all without changing code.
-
-Learn more about using `props` in our [Node.js code step documentation.](/code/nodejs/#passing-props-to-code-steps)
-
-
-Passing props from the workflow builder to workflow steps are only available in Node.js code steps.
-
-We do not currently offer this feature for Python, Bash or Go powered code steps.
-
-
-## Step Exports
-
-Step exports allow you to pass data between steps. Any data exported from a step must be JSON serializable; the data must be able to stored as JSON so it can be read by downstream steps.
-
-For examples of supported data types in your steps language, see the examples below.
-
-* [Node.js (Javascript)](/code/nodejs/#sharing-data-between-steps)
-* [Python](/code/python/#sharing-data-between-steps)
-* [Bash](/code/bash/#sharing-data-between-steps)
-* [Go](/code/go/#sharing-data-between-steps)
-
-## Step Notes
-
-Pipedream lets you add notes to individual steps in your workflow so you can include helpful context to other workspace members or even yourself, and you can even write markdown!
-
-
-
-### Adding or editing a note
-1. Enter build mode on any workflow
-2. Click into the overflow menu (3 dots) at the top right of any step
-3. Select **Add note** (or **Edit note** if making changes to an existing note)
-4. Add any text or markdown, then click **Update**
-
-
-
-
-
-### Showing notes
-Any step that has a note will have a **Note** section in the top panel in the editor pane.
-
-
-
-### Current limitations
-
-- Step notes are only accessible in Build mode, not in the Inspector.
diff --git a/docs-v2/pages/workflows/switch-to-v2.mdx b/docs-v2/pages/workflows/switch-to-v2.mdx
deleted file mode 100644
index 4d913c620b36d..0000000000000
--- a/docs-v2/pages/workflows/switch-to-v2.mdx
+++ /dev/null
@@ -1,35 +0,0 @@
-# Classic Workflow Editor (v2)
-
-The newest version of the workflow builder streamlines your development by keeping editing steps to a dedicated pane with tabs for easy switching without scrolling.
-
-However, if you're more comfortable with the classic linear workflow builder, you can switch to this older version by using a query parameter in the URL.
-
-## Switching to the Classic Workflow Editor
-
-To switch to the Classic editor, and with the workflow editor open, add the query parameter `?v2=1` to your workflow's URL. Then refresh the page.
-
-
-
-The URL should be formatted like so:
-
-```
-https://pipedream.com/@your-org/projects/proj_123456/your-workflow-name-p_123456/build?v2=1
-```
-
-## Switching to the New Workflow Editor
-
-To switch back to the new editor, you can remove the `?v2=1` query parameter, or replace it with `?v3=1`.
-
-### FAQs
-
-#### Are v2 workflows compatible with v3 workflows?
-
-Yes, only the builder editor experience has been changed. The underlying workflow structure is exactly the same.
-
-#### Are there any limitations to using the v2 editor?
-
-Not yet, but soon the v3 editor will feature branching and looping, which will not be available in the v2 editor.
-
-#### Are there any plans to sunset the v2 editor?
-
-Not at this time, but the new editor is the new default for new workflows.
diff --git a/docs-v2/pages/workflows/vpc.mdx b/docs-v2/pages/workflows/vpc.mdx
index 1050ed5bf8696..b7dbe881ced18 100644
--- a/docs-v2/pages/workflows/vpc.mdx
+++ b/docs-v2/pages/workflows/vpc.mdx
@@ -1,6 +1,6 @@
import VideoPlayer from '@/components/VideoPlayer';
-# Virtual Private Clouds (VPCs)
+# Virtual Private Clouds
@@ -52,15 +52,15 @@ If you're interested in running Pipedream workflows in your own infrastructure,
## Limitations
-- Only workflows can run in VPCs (other resources like sources or data stores are not currently supported). For example, [sources](/sources/) cannot yet run in VPCs.
+- Only workflows can run in VPCs (other resources like sources or data stores are not currently supported). For example, [sources](/workflows/building-workflows/triggers/) cannot yet run in VPCs.
- Creating a new network can take up to 5 minutes. Deploying your first workflow into a new network and testing that workflow for the first time can take up to 1 min. Subsequent operations should be as fast as normal.
- VPCs only provide static IPs for outbound network requests. This feature does not provide a static IP for or otherwise restrict inbound requests.
- You can't set a default network for all new workflows in a workspace or project (you must select the network every time you create a new workflow). Please [reach out](https://pipedream.com/support) if you're interesting in imposing controls like this in your workspace.
-- Workflows running in a VPC will still route specific requests routed through [the shared Pipedream network](/destinations/http/#ip-addresses-for-pipedream-http-requests):
- - [`$.send.http()`](/destinations/http/) requests
+- Workflows running in a VPC will still route specific requests routed through [the shared Pipedream network](/workflows/data-management/destinations/http/#ip-addresses-for-pipedream-http-requests):
+ - [`$.send.http()`](/workflows/data-management/destinations/http/) requests
- Async options requests (these are requests that are made to populate options in drop down menus for actions while a building a workflow — e.g., the option to “select a Google Sheet” when using the “add row to Google Sheets” action)
-## Frequently Asked Questions
+## FAQ
### Will HTTP requests sent from Node.js, Python and the HTTP request steps use the assigned static IP address?
diff --git a/docs-v2/pages/workspaces/_meta.tsx b/docs-v2/pages/workflows/workspaces/_meta.tsx
similarity index 100%
rename from docs-v2/pages/workspaces/_meta.tsx
rename to docs-v2/pages/workflows/workspaces/_meta.tsx
diff --git a/docs-v2/pages/workspaces/domain-verification.mdx b/docs-v2/pages/workflows/workspaces/domain-verification.mdx
similarity index 77%
rename from docs-v2/pages/workspaces/domain-verification.mdx
rename to docs-v2/pages/workflows/workspaces/domain-verification.mdx
index 52f513f800f2c..8c175cd574a79 100644
--- a/docs-v2/pages/workspaces/domain-verification.mdx
+++ b/docs-v2/pages/workflows/workspaces/domain-verification.mdx
@@ -2,7 +2,7 @@ import Callout from '@/components/Callout'
# Domain Verification
-Pipedream requires that you verify ownership of your email domain in order to [configure SAML SSO](/workspaces/sso) for your workspace. If your email is `foo@example.com`, you need to verify ownership of `example.com`. If configuring Google OAuth (not SAML), you can disregard this section.
+Pipedream requires that you verify ownership of your email domain in order to [configure SAML SSO](/workflows/workspaces/sso/) for your workspace. If your email is `foo@example.com`, you need to verify ownership of `example.com`. If configuring Google OAuth (not SAML), you can disregard this section.
## Getting started
@@ -16,4 +16,4 @@ Pipedream requires that you verify ownership of your email domain in order to [c
Make sure to verify all your domains. There's no limit on the number of domains you can verify for SSO, so if you use `example.com`, `example.net`, and `foo.example.com`, make sure to verify each one.
-
\ No newline at end of file
+
diff --git a/docs-v2/pages/workspaces/index.mdx b/docs-v2/pages/workflows/workspaces/index.mdx
similarity index 95%
rename from docs-v2/pages/workspaces/index.mdx
rename to docs-v2/pages/workflows/workspaces/index.mdx
index 8e5ca283dbe1f..179da66eff475 100644
--- a/docs-v2/pages/workspaces/index.mdx
+++ b/docs-v2/pages/workflows/workspaces/index.mdx
@@ -14,7 +14,7 @@ To create a new workspace,
1. Open the dropdown menu in the top left of the Pipedream dashboard
2. Select **New workspace**
-3. You'll be prompted to name the workspace (you can [change the name later](/workspaces/#renaming-a-workspace))
+3. You'll be prompted to name the workspace (you can [change the name later](/workflows/workspaces/#renaming-a-workspace))
## Workspace settings
@@ -57,7 +57,7 @@ Visit your [workspace settings](https://pipedream.com/settings/account) and scro
As a workspace admin or owner on the [Business plan](https://pipedream.com/pricing), you're able to **require** that all members in your workspace must enable 2FA on their account.
1. Open the Authentication tab in your [workspace settings](https://pipedream.com/settings/authentication) (you must be an admin or owner to make changes here)
-2. Make sure you're in the [correct workspace](/workspaces/#switching-between-workspaces)
+2. Make sure you're in the [correct workspace](/workflows/workspaces/#switching-between-workspaces)
3. Click the toggle under **Require 2FA** — this will open a confirmation modal with some additional information
4. Once you enable the change in the modal, **all workspace members (including admins and owners) will immediately be required to configure 2FA on their account**. All new and existing workspace members will be required to set up 2FA the next time they sign in.
@@ -76,9 +76,9 @@ Workspaces on the Business plan can configure Single Sign-On, so your users can
Pipedream supports SSO with Google, Okta, and any provider that supports the SAML protocol. See the guides below to configure SSO for your identity provider:
-- [Okta](/workspaces/sso/okta/)
-- [Google](/workspaces/sso/google/)
-- [Other SAML provider](/workspaces/sso/saml/)
+- [Okta](./sso/okta)
+- [Google](./sso/google/)
+- [Other SAML provider](./sso/saml/)
### SCIM
diff --git a/docs-v2/pages/workspaces/sso/_meta.tsx b/docs-v2/pages/workflows/workspaces/sso/_meta.tsx
similarity index 100%
rename from docs-v2/pages/workspaces/sso/_meta.tsx
rename to docs-v2/pages/workflows/workspaces/sso/_meta.tsx
diff --git a/docs-v2/pages/workspaces/sso/google.mdx b/docs-v2/pages/workflows/workspaces/sso/google.mdx
similarity index 97%
rename from docs-v2/pages/workspaces/sso/google.mdx
rename to docs-v2/pages/workflows/workspaces/sso/google.mdx
index 5d98d62191865..44aca88b5eaec 100644
--- a/docs-v2/pages/workspaces/sso/google.mdx
+++ b/docs-v2/pages/workflows/workspaces/sso/google.mdx
@@ -6,7 +6,7 @@ Pipedream supports Single Sign-On (SSO) with Google Workspace. This guide shows
## Requirements
-- SSO is only supported for [workspaces](/workspaces/) on the Business plan. Visit the [Pipedream pricing page](https://pipedream.com/pricing) to upgrade.
+- SSO is only supported for [workspaces](/workflows/workspaces/) on the Business plan. Visit the [Pipedream pricing page](https://pipedream.com/pricing) to upgrade.
- You need an administrator of your Pipedream workspace and someone who can [create SAML apps in Google Workspace](https://apps.google.com/supportwidget/articlehome?hl=en&article_url=https%3A%2F%2Fsupport.google.com%2Fa%2Fanswer%2F6087519%3Fhl%3Den&assistant_id=generic-unu&product_context=6087519&product_name=UnuFlow&trigger_context=a) to configure SSO.
## Configuration
diff --git a/docs-v2/pages/workspaces/sso/index.mdx b/docs-v2/pages/workflows/workspaces/sso/index.mdx
similarity index 88%
rename from docs-v2/pages/workspaces/sso/index.mdx
rename to docs-v2/pages/workflows/workspaces/sso/index.mdx
index 7796fc8bb673d..107a321730876 100644
--- a/docs-v2/pages/workspaces/sso/index.mdx
+++ b/docs-v2/pages/workflows/workspaces/sso/index.mdx
@@ -2,7 +2,7 @@ import Callout from '@/components/Callout'
# Single Sign-On Overview
-Pipedream supports Single Sign-On (SSO) with [Okta](./okta), [Google](./google), or [any provider](./saml) that supports SAML or Google OAuth, which allows IT and workspace administrators easier controls to manage access and security.
+Pipedream supports Single Sign-On (SSO) with [Okta](./sso/okta/), [Google](./sso/google/), or [any provider](./sso/saml/) that supports SAML or Google OAuth, which allows IT and workspace administrators easier controls to manage access and security.
Using SSO with your Identity Provider (IdP) centralizes user login management and provides a single point of control for IT teams and employees.
@@ -21,7 +21,7 @@ The below content is for workspace admins and owners. Only workspace admins and
In order to configure SAML SSO for your workspace, you first need to verify ownership of the email domain. If configuring Google OAuth (not SAML), you can skip this section.
-[Refer to the guide here](./domain-verification) to verify your email domain.
+[Refer to the guide here](/workflows/workspaces/domain-verification/) to verify your email domain.
## Setting up SSO
@@ -31,7 +31,7 @@ Navigate to the [Authentication section](https://pipedream.com/settings/domains)
1. First, make sure you've verified the domain(s) you intend to use for SSO ([see above](#verifying-your-email-domain))
2. Click the **Enable SSO** toggle and select **SAML**
-3. If setting up SAML SSO, you'll need to enter a metadata URL, which contains all the necessary configuration for Pipedream. Refer to the provider-specific docs for the detailed walk-through ([Okta](./okta), [Google Workspace](./google), [any other SAML provider](./saml)).
+3. If setting up SAML SSO, you'll need to enter a metadata URL, which contains all the necessary configuration for Pipedream. Refer to the provider-specific docs for the detailed walk-through ([Okta](./sso/okta/), [Google Workspace](./sso/google/), [any other SAML provider](./sso/saml/)).
4. Click **Save**
### Google OAuth
diff --git a/docs-v2/pages/workspaces/sso/okta.mdx b/docs-v2/pages/workflows/workspaces/sso/okta.mdx
similarity index 96%
rename from docs-v2/pages/workspaces/sso/okta.mdx
rename to docs-v2/pages/workflows/workspaces/sso/okta.mdx
index 4aeb4a949edbe..879c80285d350 100644
--- a/docs-v2/pages/workspaces/sso/okta.mdx
+++ b/docs-v2/pages/workflows/workspaces/sso/okta.mdx
@@ -7,7 +7,7 @@ Pipedream supports Single Sign-On (SSO) with Okta. This guide shows you how to c
## Requirements
-- SSO is only supported for [workspaces](/workspaces/) on the Business plan. Visit the [Pipedream pricing page](https://pipedream.com/pricing) to upgrade.
+- SSO is only supported for [workspaces](/workflows/workspaces/) on the Business plan. Visit the [Pipedream pricing page](https://pipedream.com/pricing) to upgrade.
- You must be an administrator of your Pipedream workspace
- You must have an Okta account
diff --git a/docs-v2/pages/workspaces/sso/saml.mdx b/docs-v2/pages/workflows/workspaces/sso/saml.mdx
similarity index 94%
rename from docs-v2/pages/workspaces/sso/saml.mdx
rename to docs-v2/pages/workflows/workspaces/sso/saml.mdx
index f5226d13ffca1..40e1fc616619a 100644
--- a/docs-v2/pages/workspaces/sso/saml.mdx
+++ b/docs-v2/pages/workflows/workspaces/sso/saml.mdx
@@ -2,11 +2,11 @@
Pipedream supports Single Sign-On (SSO) with any identity provider that supports SAML 2.0. This guide shows you how to configure SSO in Pipedream to authenticate with your SAML provider.
-If you use [Okta](/workspaces/sso/okta/) or [Google Workspace](/workspaces/sso/google/), please review the guides for those apps.
+If you use [Okta](./okta/) or [Google Workspace](./google/), please review the guides for those apps.
## Requirements
-- SSO is only supported for [workspaces](/workspaces/) on the Business plan. Visit the [Pipedream pricing page](https://pipedream.com/pricing) to upgrade.
+- SSO is only supported for [workspaces](/workflows/workspaces/) on the Business plan. Visit the [Pipedream pricing page](https://pipedream.com/pricing) to upgrade.
- You need an administrator of your Pipedream workspace and someone who can create SAML apps in your identity provider to configure SSO.
## SAML metadata
diff --git a/docs-v2/pages/workspaces/images/context-switcher.png b/docs-v2/pages/workspaces/images/context-switcher.png
deleted file mode 100644
index 69378be803b74..0000000000000
Binary files a/docs-v2/pages/workspaces/images/context-switcher.png and /dev/null differ
diff --git a/docs-v2/pages/workspaces/images/create-an-org.gif b/docs-v2/pages/workspaces/images/create-an-org.gif
deleted file mode 100644
index 4b8b1f5a1ab0a..0000000000000
Binary files a/docs-v2/pages/workspaces/images/create-an-org.gif and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/console-log-test.png b/docs-v2/pages/your-first-workflow/images/console-log-test.png
deleted file mode 100644
index 11bcf82890b64..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/console-log-test.png and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/create-rb.png b/docs-v2/pages/your-first-workflow/images/create-rb.png
deleted file mode 100644
index 92142ebd3dd46..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/create-rb.png and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/destination-details.png b/docs-v2/pages/your-first-workflow/images/destination-details.png
deleted file mode 100644
index 7693cdcaa6f51..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/destination-details.png and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/empty-title-description.png b/docs-v2/pages/your-first-workflow/images/empty-title-description.png
deleted file mode 100644
index 1533298ec52d1..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/empty-title-description.png and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/event-body.png b/docs-v2/pages/your-first-workflow/images/event-body.png
deleted file mode 100644
index 761f2096d1f19..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/event-body.png and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/event-headers-expanded.png b/docs-v2/pages/your-first-workflow/images/event-headers-expanded.png
deleted file mode 100644
index ee60542347f6a..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/event-headers-expanded.png and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/event-headers.png b/docs-v2/pages/your-first-workflow/images/event-headers.png
deleted file mode 100644
index 07861f3f69ad3..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/event-headers.png and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/event-new-key.png b/docs-v2/pages/your-first-workflow/images/event-new-key.png
deleted file mode 100644
index 2a33ca56975da..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/event-new-key.png and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/example-event.png b/docs-v2/pages/your-first-workflow/images/example-event.png
deleted file mode 100644
index 4edf692870109..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/example-event.png and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/first-pipeline-request.png b/docs-v2/pages/your-first-workflow/images/first-pipeline-request.png
deleted file mode 100644
index df8d96d2c32f1..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/first-pipeline-request.png and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/hurlit.png b/docs-v2/pages/your-first-workflow/images/hurlit.png
deleted file mode 100644
index 6c63077848723..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/hurlit.png and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/inspector-destinations.png b/docs-v2/pages/your-first-workflow/images/inspector-destinations.png
deleted file mode 100644
index e665db99ef071..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/inspector-destinations.png and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/lodash-mean.png b/docs-v2/pages/your-first-workflow/images/lodash-mean.png
deleted file mode 100644
index 175e7b4abd44e..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/lodash-mean.png and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/new-code-cell.png b/docs-v2/pages/your-first-workflow/images/new-code-cell.png
deleted file mode 100644
index 3e06d409c169a..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/new-code-cell.png and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/new-destination.png b/docs-v2/pages/your-first-workflow/images/new-destination.png
deleted file mode 100644
index f9fea4965b454..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/new-destination.png and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/new-pipeline-url.png b/docs-v2/pages/your-first-workflow/images/new-pipeline-url.png
deleted file mode 100644
index a1c378fdd4b0e..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/new-pipeline-url.png and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/new-pipeline.png b/docs-v2/pages/your-first-workflow/images/new-pipeline.png
deleted file mode 100644
index 0bf9a1387757f..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/new-pipeline.png and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/new-step.png b/docs-v2/pages/your-first-workflow/images/new-step.png
deleted file mode 100644
index 8147b2d483333..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/new-step.png and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/new-title-description.png b/docs-v2/pages/your-first-workflow/images/new-title-description.png
deleted file mode 100644
index 3f306aa2c1597..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/new-title-description.png and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/new-url.png b/docs-v2/pages/your-first-workflow/images/new-url.png
deleted file mode 100644
index 0cdfda154a861..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/new-url.png and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/rb-url.png b/docs-v2/pages/your-first-workflow/images/rb-url.png
deleted file mode 100644
index dfe41ed6b3387..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/rb-url.png and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/response-from-destination.png b/docs-v2/pages/your-first-workflow/images/response-from-destination.png
deleted file mode 100644
index 03c688de50e51..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/response-from-destination.png and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/save.png b/docs-v2/pages/your-first-workflow/images/save.png
deleted file mode 100644
index 7aaef25105f07..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/save.png and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/sent-to-destination.png b/docs-v2/pages/your-first-workflow/images/sent-to-destination.png
deleted file mode 100644
index bf7179e9b9e7a..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/sent-to-destination.png and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/source.png b/docs-v2/pages/your-first-workflow/images/source.png
deleted file mode 100644
index aac10306ed081..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/source.png and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/sql-destination-details.png b/docs-v2/pages/your-first-workflow/images/sql-destination-details.png
deleted file mode 100644
index 5708541b805da..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/sql-destination-details.png and /dev/null differ
diff --git a/docs-v2/pages/your-first-workflow/images/sql-tab.png b/docs-v2/pages/your-first-workflow/images/sql-tab.png
deleted file mode 100644
index 33ddd6dba4ab5..0000000000000
Binary files a/docs-v2/pages/your-first-workflow/images/sql-tab.png and /dev/null differ
diff --git a/docs-v2/pages/images/daily-invocations-tooltip.png b/docs-v2/public/images/account/daily-invocations-tooltip.png
similarity index 100%
rename from docs-v2/pages/images/daily-invocations-tooltip.png
rename to docs-v2/public/images/account/daily-invocations-tooltip.png
diff --git a/docs-v2/pages/images/usage-by-resource.png b/docs-v2/public/images/account/usage-by-resource.png
similarity index 100%
rename from docs-v2/pages/images/usage-by-resource.png
rename to docs-v2/public/images/account/usage-by-resource.png
diff --git a/docs-v2/pages/workflows/images/actions/update-action-button.png b/docs-v2/public/images/actions/update-action-button.png
similarity index 100%
rename from docs-v2/pages/workflows/images/actions/update-action-button.png
rename to docs-v2/public/images/actions/update-action-button.png
diff --git a/docs-v2/pages/code/nodejs/images/v3/code/nodejs/auth/refresh-fields-after-connecting-slack.png b/docs-v2/public/images/auth/refresh-fields-after-connecting-slack.png
similarity index 100%
rename from docs-v2/pages/code/nodejs/images/v3/code/nodejs/auth/refresh-fields-after-connecting-slack.png
rename to docs-v2/public/images/auth/refresh-fields-after-connecting-slack.png
diff --git a/docs-v2/pages/code/nodejs/images/v3/code/nodejs/auth/slack-field-rendered.png b/docs-v2/public/images/auth/slack-field-rendered.png
similarity index 100%
rename from docs-v2/pages/code/nodejs/images/v3/code/nodejs/auth/slack-field-rendered.png
rename to docs-v2/public/images/auth/slack-field-rendered.png
diff --git a/docs-v2/pages/components/images/image-20200819210516311.png b/docs-v2/public/images/components/image-20200819210516311.png
similarity index 100%
rename from docs-v2/pages/components/images/image-20200819210516311.png
rename to docs-v2/public/images/components/image-20200819210516311.png
diff --git a/docs-v2/pages/components/images/image-20210326151557417.png b/docs-v2/public/images/components/image-20210326151557417.png
similarity index 100%
rename from docs-v2/pages/components/images/image-20210326151557417.png
rename to docs-v2/public/images/components/image-20210326151557417.png
diff --git a/docs-v2/pages/components/images/image-20210326151706682.png b/docs-v2/public/images/components/image-20210326151706682.png
similarity index 100%
rename from docs-v2/pages/components/images/image-20210326151706682.png
rename to docs-v2/public/images/components/image-20210326151706682.png
diff --git a/docs-v2/pages/components/images/image-20210326151930885.png b/docs-v2/public/images/components/image-20210326151930885.png
similarity index 100%
rename from docs-v2/pages/components/images/image-20210326151930885.png
rename to docs-v2/public/images/components/image-20210326151930885.png
diff --git a/docs-v2/pages/components/images/info-alert-prop-github.png b/docs-v2/public/images/components/info-alert-prop-github.png
similarity index 100%
rename from docs-v2/pages/components/images/info-alert-prop-github.png
rename to docs-v2/public/images/components/info-alert-prop-github.png
diff --git a/docs-v2/pages/components/images/quickstart/hello-world-1.gif b/docs-v2/public/images/components/quickstart/hello-world-1.gif
similarity index 100%
rename from docs-v2/pages/components/images/quickstart/hello-world-1.gif
rename to docs-v2/public/images/components/quickstart/hello-world-1.gif
diff --git a/docs-v2/pages/components/images/quickstart/hello-world-2.gif b/docs-v2/public/images/components/quickstart/hello-world-2.gif
similarity index 100%
rename from docs-v2/pages/components/images/quickstart/hello-world-2.gif
rename to docs-v2/public/images/components/quickstart/hello-world-2.gif
diff --git a/docs-v2/pages/components/images/quickstart/hello-world-3.gif b/docs-v2/public/images/components/quickstart/hello-world-3.gif
similarity index 100%
rename from docs-v2/pages/components/images/quickstart/hello-world-3.gif
rename to docs-v2/public/images/components/quickstart/hello-world-3.gif
diff --git a/docs-v2/pages/components/images/quickstart/hello-world-4.gif b/docs-v2/public/images/components/quickstart/hello-world-4.gif
similarity index 100%
rename from docs-v2/pages/components/images/quickstart/hello-world-4.gif
rename to docs-v2/public/images/components/quickstart/hello-world-4.gif
diff --git a/docs-v2/pages/components/images/quickstart/uncompressed/hello-world-1.gif b/docs-v2/public/images/components/quickstart/uncompressed/hello-world-1.gif
similarity index 100%
rename from docs-v2/pages/components/images/quickstart/uncompressed/hello-world-1.gif
rename to docs-v2/public/images/components/quickstart/uncompressed/hello-world-1.gif
diff --git a/docs-v2/pages/components/images/quickstart/uncompressed/hello-world-2.gif b/docs-v2/public/images/components/quickstart/uncompressed/hello-world-2.gif
similarity index 100%
rename from docs-v2/pages/components/images/quickstart/uncompressed/hello-world-2.gif
rename to docs-v2/public/images/components/quickstart/uncompressed/hello-world-2.gif
diff --git a/docs-v2/pages/components/images/quickstart/uncompressed/hello-world-3.gif b/docs-v2/public/images/components/quickstart/uncompressed/hello-world-3.gif
similarity index 100%
rename from docs-v2/pages/components/images/quickstart/uncompressed/hello-world-3.gif
rename to docs-v2/public/images/components/quickstart/uncompressed/hello-world-3.gif
diff --git a/docs-v2/pages/components/images/quickstart/uncompressed/hello-world-4.gif b/docs-v2/public/images/components/quickstart/uncompressed/hello-world-4.gif
similarity index 100%
rename from docs-v2/pages/components/images/quickstart/uncompressed/hello-world-4.gif
rename to docs-v2/public/images/components/quickstart/uncompressed/hello-world-4.gif
diff --git a/docs-v2/pages/components/images/spotify-$summary-example.png b/docs-v2/public/images/components/spotify-$summary-example.png
similarity index 100%
rename from docs-v2/pages/components/images/spotify-$summary-example.png
rename to docs-v2/public/images/components/spotify-$summary-example.png
diff --git a/docs-v2/pages/components/images/trello-board-example.png b/docs-v2/public/images/components/trello-board-example.png
similarity index 100%
rename from docs-v2/pages/components/images/trello-board-example.png
rename to docs-v2/public/images/components/trello-board-example.png
diff --git a/docs-v2/pages/components/images/trello-props.png b/docs-v2/public/images/components/trello-props.png
similarity index 100%
rename from docs-v2/pages/components/images/trello-props.png
rename to docs-v2/public/images/components/trello-props.png
diff --git a/docs-v2/pages/components/images/v3/using-private-actions.png b/docs-v2/public/images/components/v3/using-private-actions.png
similarity index 100%
rename from docs-v2/pages/components/images/v3/using-private-actions.png
rename to docs-v2/public/images/components/v3/using-private-actions.png
diff --git a/docs-v2/pages/components/images/v3/using-private-sources.png b/docs-v2/public/images/components/v3/using-private-sources.png
similarity index 100%
rename from docs-v2/pages/components/images/v3/using-private-sources.png
rename to docs-v2/public/images/components/v3/using-private-sources.png
diff --git a/docs-v2/pages/workflows/control-flow/images/2024-07-21_20.51.37.gif b/docs-v2/public/images/control-flow/2024-07-21_20.51.37.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/2024-07-21_20.51.37.gif
rename to docs-v2/public/images/control-flow/2024-07-21_20.51.37.gif
diff --git a/docs-v2/pages/workflows/control-flow/images/2024-07-21_20.55.09.gif b/docs-v2/public/images/control-flow/2024-07-21_20.55.09.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/2024-07-21_20.55.09.gif
rename to docs-v2/public/images/control-flow/2024-07-21_20.55.09.gif
diff --git a/docs-v2/pages/workflows/control-flow/images/Inspect.gif b/docs-v2/public/images/control-flow/Inspect.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/Inspect.gif
rename to docs-v2/public/images/control-flow/Inspect.gif
diff --git a/docs-v2/pages/workflows/control-flow/images/add_if_else.gif b/docs-v2/public/images/control-flow/add_if_else.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/add_if_else.gif
rename to docs-v2/public/images/control-flow/add_if_else.gif
diff --git a/docs-v2/pages/workflows/control-flow/images/add_step_to_branch.gif b/docs-v2/public/images/control-flow/add_step_to_branch.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/add_step_to_branch.gif
rename to docs-v2/public/images/control-flow/add_step_to_branch.gif
diff --git a/docs-v2/pages/workflows/control-flow/images/billing_1credit_a.png b/docs-v2/public/images/control-flow/billing_1credit_a.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/billing_1credit_a.png
rename to docs-v2/public/images/control-flow/billing_1credit_a.png
diff --git a/docs-v2/pages/workflows/control-flow/images/billing_1credit_b.png b/docs-v2/public/images/control-flow/billing_1credit_b.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/billing_1credit_b.png
rename to docs-v2/public/images/control-flow/billing_1credit_b.png
diff --git a/docs-v2/pages/workflows/control-flow/images/billing_3credits.png b/docs-v2/public/images/control-flow/billing_3credits.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/billing_3credits.png
rename to docs-v2/public/images/control-flow/billing_3credits.png
diff --git a/docs-v2/pages/workflows/control-flow/images/change_in_state.gif b/docs-v2/public/images/control-flow/change_in_state.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/change_in_state.gif
rename to docs-v2/public/images/control-flow/change_in_state.gif
diff --git a/docs-v2/pages/workflows/images/delay/delay-step-props.png b/docs-v2/public/images/control-flow/delay-step-props.png
similarity index 100%
rename from docs-v2/pages/workflows/images/delay/delay-step-props.png
rename to docs-v2/public/images/control-flow/delay-step-props.png
diff --git a/docs-v2/pages/workflows/control-flow/images/end_workflow.png b/docs-v2/public/images/control-flow/end_workflow.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/end_workflow.png
rename to docs-v2/public/images/control-flow/end_workflow.png
diff --git a/docs-v2/pages/workflows/control-flow/images/executed_path.png b/docs-v2/public/images/control-flow/executed_path.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/executed_path.png
rename to docs-v2/public/images/control-flow/executed_path.png
diff --git a/docs-v2/pages/workflows/control-flow/images/execution_path_a_linear.png b/docs-v2/public/images/control-flow/execution_path_a_linear.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/execution_path_a_linear.png
rename to docs-v2/public/images/control-flow/execution_path_a_linear.png
diff --git a/docs-v2/pages/workflows/control-flow/images/execution_path_b_nonlinear.png b/docs-v2/public/images/control-flow/execution_path_b_nonlinear.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/execution_path_b_nonlinear.png
rename to docs-v2/public/images/control-flow/execution_path_b_nonlinear.png
diff --git a/docs-v2/pages/workflows/control-flow/images/ifelse-configuration.png b/docs-v2/public/images/control-flow/ifelse-configuration.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/ifelse-configuration.png
rename to docs-v2/public/images/control-flow/ifelse-configuration.png
diff --git a/docs-v2/pages/workflows/control-flow/images/nesting.png b/docs-v2/public/images/control-flow/nesting.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/nesting.png
rename to docs-v2/public/images/control-flow/nesting.png
diff --git a/docs-v2/pages/workflows/control-flow/images/out_of_date.gif b/docs-v2/public/images/control-flow/out_of_date.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/out_of_date.gif
rename to docs-v2/public/images/control-flow/out_of_date.gif
diff --git a/docs-v2/pages/workflows/control-flow/images/parallel/01_trigger.gif b/docs-v2/public/images/control-flow/parallel/01_trigger.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/parallel/01_trigger.gif
rename to docs-v2/public/images/control-flow/parallel/01_trigger.gif
diff --git a/docs-v2/pages/workflows/control-flow/images/parallel/02_add_parallel.gif b/docs-v2/public/images/control-flow/parallel/02_add_parallel.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/parallel/02_add_parallel.gif
rename to docs-v2/public/images/control-flow/parallel/02_add_parallel.gif
diff --git a/docs-v2/pages/workflows/control-flow/images/parallel/03_configure_and_test.gif b/docs-v2/public/images/control-flow/parallel/03_configure_and_test.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/parallel/03_configure_and_test.gif
rename to docs-v2/public/images/control-flow/parallel/03_configure_and_test.gif
diff --git a/docs-v2/pages/workflows/control-flow/images/parallel/04_add_steps.gif b/docs-v2/public/images/control-flow/parallel/04_add_steps.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/parallel/04_add_steps.gif
rename to docs-v2/public/images/control-flow/parallel/04_add_steps.gif
diff --git a/docs-v2/pages/workflows/control-flow/images/parallel/05_test_end_phase.gif b/docs-v2/public/images/control-flow/parallel/05_test_end_phase.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/parallel/05_test_end_phase.gif
rename to docs-v2/public/images/control-flow/parallel/05_test_end_phase.gif
diff --git a/docs-v2/pages/workflows/control-flow/images/parallel/06_use_exports_in_parent_flow.gif b/docs-v2/public/images/control-flow/parallel/06_use_exports_in_parent_flow.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/parallel/06_use_exports_in_parent_flow.gif
rename to docs-v2/public/images/control-flow/parallel/06_use_exports_in_parent_flow.gif
diff --git a/docs-v2/pages/workflows/control-flow/images/parallel/07_deploy_and_run.gif b/docs-v2/public/images/control-flow/parallel/07_deploy_and_run.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/parallel/07_deploy_and_run.gif
rename to docs-v2/public/images/control-flow/parallel/07_deploy_and_run.gif
diff --git a/docs-v2/pages/workflows/control-flow/images/parallel/add_branch.png b/docs-v2/public/images/control-flow/parallel/add_branch.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/parallel/add_branch.png
rename to docs-v2/public/images/control-flow/parallel/add_branch.png
diff --git a/docs-v2/pages/workflows/control-flow/images/parallel/add_parallel_block.png b/docs-v2/public/images/control-flow/parallel/add_parallel_block.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/parallel/add_parallel_block.png
rename to docs-v2/public/images/control-flow/parallel/add_parallel_block.png
diff --git a/docs-v2/pages/workflows/control-flow/images/parallel/parallel.png b/docs-v2/public/images/control-flow/parallel/parallel.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/parallel/parallel.png
rename to docs-v2/public/images/control-flow/parallel/parallel.png
diff --git a/docs-v2/pages/workflows/control-flow/images/parallel/rename_branch.png b/docs-v2/public/images/control-flow/parallel/rename_branch.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/parallel/rename_branch.png
rename to docs-v2/public/images/control-flow/parallel/rename_branch.png
diff --git a/docs-v2/pages/workflows/control-flow/images/passing_data.png b/docs-v2/public/images/control-flow/passing_data.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/passing_data.png
rename to docs-v2/public/images/control-flow/passing_data.png
diff --git a/docs-v2/pages/workflows/control-flow/images/reason.png b/docs-v2/public/images/control-flow/reason.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/reason.png
rename to docs-v2/public/images/control-flow/reason.png
diff --git a/docs-v2/pages/workflows/control-flow/images/reference_end_exports.gif b/docs-v2/public/images/control-flow/reference_end_exports.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/reference_end_exports.gif
rename to docs-v2/public/images/control-flow/reference_end_exports.gif
diff --git a/docs-v2/pages/workflows/control-flow/images/referencing_data.png b/docs-v2/public/images/control-flow/referencing_data.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/referencing_data.png
rename to docs-v2/public/images/control-flow/referencing_data.png
diff --git a/docs-v2/pages/workflows/control-flow/images/return_response_after_block.png b/docs-v2/public/images/control-flow/return_response_after_block.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/return_response_after_block.png
rename to docs-v2/public/images/control-flow/return_response_after_block.png
diff --git a/docs-v2/pages/workflows/control-flow/images/return_response_conditional.png b/docs-v2/public/images/control-flow/return_response_conditional.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/return_response_conditional.png
rename to docs-v2/public/images/control-flow/return_response_conditional.png
diff --git a/docs-v2/pages/workflows/control-flow/images/return_response_in_block.png b/docs-v2/public/images/control-flow/return_response_in_block.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/return_response_in_block.png
rename to docs-v2/public/images/control-flow/return_response_in_block.png
diff --git a/docs-v2/pages/workflows/control-flow/images/rule_builder_groups.png b/docs-v2/public/images/control-flow/rule_builder_groups.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/rule_builder_groups.png
rename to docs-v2/public/images/control-flow/rule_builder_groups.png
diff --git a/docs-v2/pages/workflows/control-flow/images/rule_builder_multiple.png b/docs-v2/public/images/control-flow/rule_builder_multiple.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/rule_builder_multiple.png
rename to docs-v2/public/images/control-flow/rule_builder_multiple.png
diff --git a/docs-v2/pages/workflows/control-flow/images/rule_builder_overview.png b/docs-v2/public/images/control-flow/rule_builder_overview.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/rule_builder_overview.png
rename to docs-v2/public/images/control-flow/rule_builder_overview.png
diff --git a/docs-v2/pages/workflows/control-flow/images/rule_builder_simple.png b/docs-v2/public/images/control-flow/rule_builder_simple.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/rule_builder_simple.png
rename to docs-v2/public/images/control-flow/rule_builder_simple.png
diff --git a/docs-v2/pages/workflows/control-flow/images/segment_delay.png b/docs-v2/public/images/control-flow/segment_delay.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/segment_delay.png
rename to docs-v2/public/images/control-flow/segment_delay.png
diff --git a/docs-v2/pages/workflows/control-flow/images/segment_linear.png b/docs-v2/public/images/control-flow/segment_linear.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/segment_linear.png
rename to docs-v2/public/images/control-flow/segment_linear.png
diff --git a/docs-v2/pages/workflows/control-flow/images/segment_non_linear.png b/docs-v2/public/images/control-flow/segment_non_linear.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/segment_non_linear.png
rename to docs-v2/public/images/control-flow/segment_non_linear.png
diff --git a/docs-v2/pages/workflows/control-flow/images/select_different_event.gif b/docs-v2/public/images/control-flow/select_different_event.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/select_different_event.gif
rename to docs-v2/public/images/control-flow/select_different_event.gif
diff --git a/docs-v2/pages/workflows/control-flow/images/state_error.png b/docs-v2/public/images/control-flow/state_error.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/state_error.png
rename to docs-v2/public/images/control-flow/state_error.png
diff --git a/docs-v2/pages/workflows/control-flow/images/state_stale.png b/docs-v2/public/images/control-flow/state_stale.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/state_stale.png
rename to docs-v2/public/images/control-flow/state_stale.png
diff --git a/docs-v2/pages/workflows/control-flow/images/state_success.png b/docs-v2/public/images/control-flow/state_success.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/state_success.png
rename to docs-v2/public/images/control-flow/state_success.png
diff --git a/docs-v2/pages/workflows/control-flow/images/switch/add_another_case.gif b/docs-v2/public/images/control-flow/switch/add_another_case.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/switch/add_another_case.gif
rename to docs-v2/public/images/control-flow/switch/add_another_case.gif
diff --git a/docs-v2/pages/workflows/control-flow/images/switch/add_switch.gif b/docs-v2/public/images/control-flow/switch/add_switch.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/switch/add_switch.gif
rename to docs-v2/public/images/control-flow/switch/add_switch.gif
diff --git a/docs-v2/pages/workflows/control-flow/images/switch/build_and_test_alternate_paths.gif b/docs-v2/public/images/control-flow/switch/build_and_test_alternate_paths.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/switch/build_and_test_alternate_paths.gif
rename to docs-v2/public/images/control-flow/switch/build_and_test_alternate_paths.gif
diff --git a/docs-v2/pages/workflows/control-flow/images/switch/deploy_and_test.gif b/docs-v2/public/images/control-flow/switch/deploy_and_test.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/switch/deploy_and_test.gif
rename to docs-v2/public/images/control-flow/switch/deploy_and_test.gif
diff --git a/docs-v2/pages/workflows/control-flow/images/switch/export_data_to_parent.gif b/docs-v2/public/images/control-flow/switch/export_data_to_parent.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/switch/export_data_to_parent.gif
rename to docs-v2/public/images/control-flow/switch/export_data_to_parent.gif
diff --git a/docs-v2/pages/workflows/control-flow/images/switch/switch-configuration.png b/docs-v2/public/images/control-flow/switch/switch-configuration.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/switch/switch-configuration.png
rename to docs-v2/public/images/control-flow/switch/switch-configuration.png
diff --git a/docs-v2/pages/workflows/control-flow/images/switch/test_and_build_success_path.gif b/docs-v2/public/images/control-flow/switch/test_and_build_success_path.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/switch/test_and_build_success_path.gif
rename to docs-v2/public/images/control-flow/switch/test_and_build_success_path.gif
diff --git a/docs-v2/pages/workflows/control-flow/images/switch/test_different_trigger_events.gif b/docs-v2/public/images/control-flow/switch/test_different_trigger_events.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/switch/test_different_trigger_events.gif
rename to docs-v2/public/images/control-flow/switch/test_different_trigger_events.gif
diff --git a/docs-v2/pages/workflows/control-flow/images/switch/trigger.gif b/docs-v2/public/images/control-flow/switch/trigger.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/switch/trigger.gif
rename to docs-v2/public/images/control-flow/switch/trigger.gif
diff --git a/docs-v2/pages/workflows/control-flow/images/test_and_deploy.gif b/docs-v2/public/images/control-flow/test_and_deploy.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/test_and_deploy.gif
rename to docs-v2/public/images/control-flow/test_and_deploy.gif
diff --git a/docs-v2/pages/workflows/control-flow/images/test_end_phase.gif b/docs-v2/public/images/control-flow/test_end_phase.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/test_end_phase.gif
rename to docs-v2/public/images/control-flow/test_end_phase.gif
diff --git a/docs-v2/pages/workflows/control-flow/images/trigger.gif b/docs-v2/public/images/control-flow/trigger.gif
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/trigger.gif
rename to docs-v2/public/images/control-flow/trigger.gif
diff --git a/docs-v2/pages/workflows/control-flow/images/unknown_execution_path.png b/docs-v2/public/images/control-flow/unknown_execution_path.png
similarity index 100%
rename from docs-v2/pages/workflows/control-flow/images/unknown_execution_path.png
rename to docs-v2/public/images/control-flow/unknown_execution_path.png
diff --git a/docs-v2/pages/images/v3/data-stores/add-or-update-a-single-record.png b/docs-v2/public/images/data-stores/add-or-update-a-single-record.png
similarity index 100%
rename from docs-v2/pages/images/v3/data-stores/add-or-update-a-single-record.png
rename to docs-v2/public/images/data-stores/add-or-update-a-single-record.png
diff --git a/docs-v2/pages/images/v3/data-stores/configure-data-store-retrieve-record.png b/docs-v2/public/images/data-stores/configure-data-store-retrieve-record.png
similarity index 100%
rename from docs-v2/pages/images/v3/data-stores/configure-data-store-retrieve-record.png
rename to docs-v2/public/images/data-stores/configure-data-store-retrieve-record.png
diff --git a/docs-v2/pages/images/v3/data-stores/configuring-data-store-update-action.png b/docs-v2/public/images/data-stores/configuring-data-store-update-action.png
similarity index 100%
rename from docs-v2/pages/images/v3/data-stores/configuring-data-store-update-action.png
rename to docs-v2/public/images/data-stores/configuring-data-store-update-action.png
diff --git a/docs-v2/pages/images/v3/data-stores/delete-a-single-record.png b/docs-v2/public/images/data-stores/delete-a-single-record.png
similarity index 100%
rename from docs-v2/pages/images/v3/data-stores/delete-a-single-record.png
rename to docs-v2/public/images/data-stores/delete-a-single-record.png
diff --git a/docs-v2/pages/images/v3/data-stores/get-a-record-action-selection.png b/docs-v2/public/images/data-stores/get-a-record-action-selection.png
similarity index 100%
rename from docs-v2/pages/images/v3/data-stores/get-a-record-action-selection.png
rename to docs-v2/public/images/data-stores/get-a-record-action-selection.png
diff --git a/docs-v2/pages/code/nodejs/images/v3/code/nodejs/data-stores/nodejs-example.png b/docs-v2/public/images/data-stores/nodejs-example.png
similarity index 100%
rename from docs-v2/pages/code/nodejs/images/v3/code/nodejs/data-stores/nodejs-example.png
rename to docs-v2/public/images/data-stores/nodejs-example.png
diff --git a/docs-v2/pages/images/v3/data-stores/select-delete-a-record.png b/docs-v2/public/images/data-stores/select-delete-a-record.png
similarity index 100%
rename from docs-v2/pages/images/v3/data-stores/select-delete-a-record.png
rename to docs-v2/public/images/data-stores/select-delete-a-record.png
diff --git a/docs-v2/pages/images/v3/data-stores/update-data-store-key-by-reference.png b/docs-v2/public/images/data-stores/update-data-store-key-by-reference.png
similarity index 100%
rename from docs-v2/pages/images/v3/data-stores/update-data-store-key-by-reference.png
rename to docs-v2/public/images/data-stores/update-data-store-key-by-reference.png
diff --git a/docs-v2/pages/destinations/images/conditional-payload-expression.png b/docs-v2/public/images/destinations/conditional-payload-expression.png
similarity index 100%
rename from docs-v2/pages/destinations/images/conditional-payload-expression.png
rename to docs-v2/public/images/destinations/conditional-payload-expression.png
diff --git a/docs-v2/pages/destinations/images/dollar-event-body-payload.png b/docs-v2/public/images/destinations/dollar-event-body-payload.png
similarity index 100%
rename from docs-v2/pages/destinations/images/dollar-event-body-payload.png
rename to docs-v2/public/images/destinations/dollar-event-body-payload.png
diff --git a/docs-v2/pages/destinations/images/dollar-event-payload.png b/docs-v2/public/images/destinations/dollar-event-payload.png
similarity index 100%
rename from docs-v2/pages/destinations/images/dollar-event-payload.png
rename to docs-v2/public/images/destinations/dollar-event-payload.png
diff --git a/docs-v2/pages/destinations/images/email-payload.png b/docs-v2/public/images/destinations/email-payload.png
similarity index 100%
rename from docs-v2/pages/destinations/images/email-payload.png
rename to docs-v2/public/images/destinations/email-payload.png
diff --git a/docs-v2/pages/destinations/http/images/new-code-step.png b/docs-v2/public/images/destinations/new-code-step.png
similarity index 100%
rename from docs-v2/pages/destinations/http/images/new-code-step.png
rename to docs-v2/public/images/destinations/new-code-step.png
diff --git a/docs-v2/pages/destinations/http/images/new-code.png b/docs-v2/public/images/destinations/new-code.png
similarity index 100%
rename from docs-v2/pages/destinations/http/images/new-code.png
rename to docs-v2/public/images/destinations/new-code.png
diff --git a/docs-v2/pages/destinations/images/pipeline-id.png b/docs-v2/public/images/destinations/pipeline-id.png
similarity index 100%
rename from docs-v2/pages/destinations/images/pipeline-id.png
rename to docs-v2/public/images/destinations/pipeline-id.png
diff --git a/docs-v2/pages/destinations/http/images/webhook-action-params.png b/docs-v2/public/images/destinations/webhook-action-params.png
similarity index 100%
rename from docs-v2/pages/destinations/http/images/webhook-action-params.png
rename to docs-v2/public/images/destinations/webhook-action-params.png
diff --git a/docs-v2/pages/destinations/http/images/webhook-action.png b/docs-v2/public/images/destinations/webhook-action.png
similarity index 100%
rename from docs-v2/pages/destinations/http/images/webhook-action.png
rename to docs-v2/public/images/destinations/webhook-action.png
diff --git a/docs-v2/pages/examples/images/configured-task-scheduler-step.png b/docs-v2/public/images/examples/configured-task-scheduler-step.png
similarity index 100%
rename from docs-v2/pages/examples/images/configured-task-scheduler-step.png
rename to docs-v2/public/images/examples/configured-task-scheduler-step.png
diff --git a/docs-v2/pages/examples/images/create-task-scheduler.gif b/docs-v2/public/images/examples/create-task-scheduler.gif
similarity index 100%
rename from docs-v2/pages/examples/images/create-task-scheduler.gif
rename to docs-v2/public/images/examples/create-task-scheduler.gif
diff --git a/docs-v2/pages/examples/images/email-reference.png b/docs-v2/public/images/examples/email-reference.png
similarity index 100%
rename from docs-v2/pages/examples/images/email-reference.png
rename to docs-v2/public/images/examples/email-reference.png
diff --git a/docs-v2/pages/examples/images/endpoint.png b/docs-v2/public/images/examples/endpoint.png
similarity index 100%
rename from docs-v2/pages/examples/images/endpoint.png
rename to docs-v2/public/images/examples/endpoint.png
diff --git a/docs-v2/pages/examples/images/find-task-scheduler-step.gif b/docs-v2/public/images/examples/find-task-scheduler-step.gif
similarity index 100%
rename from docs-v2/pages/examples/images/find-task-scheduler-step.gif
rename to docs-v2/public/images/examples/find-task-scheduler-step.gif
diff --git a/docs-v2/pages/examples/images/select-task-scheduler-as-trigger.gif b/docs-v2/public/images/examples/select-task-scheduler-as-trigger.gif
similarity index 100%
rename from docs-v2/pages/examples/images/select-task-scheduler-as-trigger.gif
rename to docs-v2/public/images/examples/select-task-scheduler-as-trigger.gif
diff --git a/docs-v2/pages/examples/images/task-scheduler-event.png b/docs-v2/public/images/examples/task-scheduler-event.png
similarity index 100%
rename from docs-v2/pages/examples/images/task-scheduler-event.png
rename to docs-v2/public/images/examples/task-scheduler-event.png
diff --git a/docs-v2/pages/examples/images/toggle-trigger-step-on.gif b/docs-v2/public/images/examples/toggle-trigger-step-on.gif
similarity index 100%
rename from docs-v2/pages/examples/images/toggle-trigger-step-on.gif
rename to docs-v2/public/images/examples/toggle-trigger-step-on.gif
diff --git a/docs-v2/pages/images/v3/http/configure-slack-pre-built-action-props.png b/docs-v2/public/images/http/configure-slack-pre-built-action-props.png
similarity index 100%
rename from docs-v2/pages/images/v3/http/configure-slack-pre-built-action-props.png
rename to docs-v2/public/images/http/configure-slack-pre-built-action-props.png
diff --git a/docs-v2/pages/images/v3/http/connect-slack-account-to-http-request-action.png b/docs-v2/public/images/http/connect-slack-account-to-http-request-action.png
similarity index 100%
rename from docs-v2/pages/images/v3/http/connect-slack-account-to-http-request-action.png
rename to docs-v2/public/images/http/connect-slack-account-to-http-request-action.png
diff --git a/docs-v2/pages/pipedream-axios/images/default-axios-stack.png b/docs-v2/public/images/http/default-axios-stack.png
similarity index 100%
rename from docs-v2/pages/pipedream-axios/images/default-axios-stack.png
rename to docs-v2/public/images/http/default-axios-stack.png
diff --git a/docs-v2/pages/pipedream-axios/images/pipedream-axios-stack.png b/docs-v2/public/images/http/pipedream-axios-stack.png
similarity index 100%
rename from docs-v2/pages/pipedream-axios/images/pipedream-axios-stack.png
rename to docs-v2/public/images/http/pipedream-axios-stack.png
diff --git a/docs-v2/pages/pipedream-axios/images/pipedream-axios-success.png b/docs-v2/public/images/http/pipedream-axios-success.png
similarity index 100%
rename from docs-v2/pages/pipedream-axios/images/pipedream-axios-success.png
rename to docs-v2/public/images/http/pipedream-axios-success.png
diff --git a/docs-v2/pages/images/v3/http/select-an-app-inside-http-request-builder.png b/docs-v2/public/images/http/select-an-app-inside-http-request-builder.png
similarity index 100%
rename from docs-v2/pages/images/v3/http/select-an-app-inside-http-request-builder.png
rename to docs-v2/public/images/http/select-an-app-inside-http-request-builder.png
diff --git a/docs-v2/pages/images/v3/http/selecting-pre-buillt-actions.png b/docs-v2/public/images/http/selecting-pre-built-actions.png
similarity index 100%
rename from docs-v2/pages/images/v3/http/selecting-pre-buillt-actions.png
rename to docs-v2/public/images/http/selecting-pre-built-actions.png
diff --git a/docs-v2/pages/images/v3/http/selecting-the-http-request-builder-action.png b/docs-v2/public/images/http/selecting-the-http-request-builder-action.png
similarity index 100%
rename from docs-v2/pages/images/v3/http/selecting-the-http-request-builder-action.png
rename to docs-v2/public/images/http/selecting-the-http-request-builder-action.png
diff --git a/docs-v2/pages/images/v3/http/selecting-the-slack-api-http-request-builder.png b/docs-v2/public/images/http/selecting-the-slack-api-http-request-builder.png
similarity index 100%
rename from docs-v2/pages/images/v3/http/selecting-the-slack-api-http-request-builder.png
rename to docs-v2/public/images/http/selecting-the-slack-api-http-request-builder.png
diff --git a/docs-v2/pages/images/v3/http/viewing-authorization-configuration.png b/docs-v2/public/images/http/viewing-authorization-configuration.png
similarity index 100%
rename from docs-v2/pages/images/v3/http/viewing-authorization-configuration.png
rename to docs-v2/public/images/http/viewing-authorization-configuration.png
diff --git a/docs-v2/pages/connected-accounts/images/add-new-app.png b/docs-v2/public/images/integrations/add-new-app.png
similarity index 100%
rename from docs-v2/pages/connected-accounts/images/add-new-app.png
rename to docs-v2/public/images/integrations/add-new-app.png
diff --git a/docs-v2/pages/connected-accounts/images/api-key.png b/docs-v2/public/images/integrations/api-key.png
similarity index 100%
rename from docs-v2/pages/connected-accounts/images/api-key.png
rename to docs-v2/public/images/integrations/api-key.png
diff --git a/docs-v2/pages/connected-accounts/images/connect-existing-account.png b/docs-v2/public/images/integrations/connect-existing-account.png
similarity index 100%
rename from docs-v2/pages/connected-accounts/images/connect-existing-account.png
rename to docs-v2/public/images/integrations/connect-existing-account.png
diff --git a/docs-v2/pages/connected-accounts/images/manage-connected-account.png b/docs-v2/public/images/integrations/manage-connected-account.png
similarity index 100%
rename from docs-v2/pages/connected-accounts/images/manage-connected-account.png
rename to docs-v2/public/images/integrations/manage-connected-account.png
diff --git a/docs-v2/pages/connected-accounts/images/search-for-slack.png b/docs-v2/public/images/integrations/search-for-slack.png
similarity index 100%
rename from docs-v2/pages/connected-accounts/images/search-for-slack.png
rename to docs-v2/public/images/integrations/search-for-slack.png
diff --git a/docs-v2/pages/connected-accounts/images/select-external-auth.png b/docs-v2/public/images/integrations/select-external-auth.png
similarity index 100%
rename from docs-v2/pages/connected-accounts/images/select-external-auth.png
rename to docs-v2/public/images/integrations/select-external-auth.png
diff --git a/docs-v2/pages/connected-accounts/images/slack-connect-account.png b/docs-v2/public/images/integrations/slack-connect-account.png
similarity index 100%
rename from docs-v2/pages/connected-accounts/images/slack-connect-account.png
rename to docs-v2/public/images/integrations/slack-connect-account.png
diff --git a/docs-v2/pages/connected-accounts/images/slack-token.png b/docs-v2/public/images/integrations/slack-token.png
similarity index 100%
rename from docs-v2/pages/connected-accounts/images/slack-token.png
rename to docs-v2/public/images/integrations/slack-token.png
diff --git a/docs-v2/pages/migrate-from-v1/images/app-props-example.png b/docs-v2/public/images/migrate-from-v1/app-props-example.png
similarity index 100%
rename from docs-v2/pages/migrate-from-v1/images/app-props-example.png
rename to docs-v2/public/images/migrate-from-v1/app-props-example.png
diff --git a/docs-v2/pages/migrate-from-v1/images/builder-mode-sample.png b/docs-v2/public/images/migrate-from-v1/builder-mode-sample.png
similarity index 100%
rename from docs-v2/pages/migrate-from-v1/images/builder-mode-sample.png
rename to docs-v2/public/images/migrate-from-v1/builder-mode-sample.png
diff --git a/docs-v2/pages/migrate-from-v1/images/custom-http-response-option.png b/docs-v2/public/images/migrate-from-v1/custom-http-response-option.png
similarity index 100%
rename from docs-v2/pages/migrate-from-v1/images/custom-http-response-option.png
rename to docs-v2/public/images/migrate-from-v1/custom-http-response-option.png
diff --git a/docs-v2/pages/migrate-from-v1/images/custom-string-prop.png b/docs-v2/public/images/migrate-from-v1/custom-string-prop.png
similarity index 100%
rename from docs-v2/pages/migrate-from-v1/images/custom-string-prop.png
rename to docs-v2/public/images/migrate-from-v1/custom-string-prop.png
diff --git a/docs-v2/pages/images/demo-poster.png b/docs-v2/public/images/migrate-from-v1/demo-poster.png
similarity index 100%
rename from docs-v2/pages/images/demo-poster.png
rename to docs-v2/public/images/migrate-from-v1/demo-poster.png
diff --git a/docs-v2/pages/migrate-from-v1/images/inspector-sample.png b/docs-v2/public/images/migrate-from-v1/inspector-sample.png
similarity index 100%
rename from docs-v2/pages/migrate-from-v1/images/inspector-sample.png
rename to docs-v2/public/images/migrate-from-v1/inspector-sample.png
diff --git a/docs-v2/pages/migrate-from-v1/images/new-builder-context-switcher.gif b/docs-v2/public/images/migrate-from-v1/new-builder-context-switcher.gif
similarity index 100%
rename from docs-v2/pages/migrate-from-v1/images/new-builder-context-switcher.gif
rename to docs-v2/public/images/migrate-from-v1/new-builder-context-switcher.gif
diff --git a/docs-v2/pages/migrate-from-v1/images/test-workflow-portions.png b/docs-v2/public/images/migrate-from-v1/test-workflow-portions.png
similarity index 100%
rename from docs-v2/pages/migrate-from-v1/images/test-workflow-portions.png
rename to docs-v2/public/images/migrate-from-v1/test-workflow-portions.png
diff --git a/docs-v2/pages/migrate-from-v1/images/testing-individual-events.gif b/docs-v2/public/images/migrate-from-v1/testing-individual-events.gif
similarity index 100%
rename from docs-v2/pages/migrate-from-v1/images/testing-individual-events.gif
rename to docs-v2/public/images/migrate-from-v1/testing-individual-events.gif
diff --git a/docs-v2/pages/code/nodejs/images/v3/code/nodejs/ai-code-generation/generating-slack-actions-with-ai.png b/docs-v2/public/images/nodejs/ai-code-generation/generating-slack-actions-with-ai.png
similarity index 100%
rename from docs-v2/pages/code/nodejs/images/v3/code/nodejs/ai-code-generation/generating-slack-actions-with-ai.png
rename to docs-v2/public/images/nodejs/ai-code-generation/generating-slack-actions-with-ai.png
diff --git a/docs-v2/pages/code/nodejs/images/v3/code/nodejs/configuration-error-example.png b/docs-v2/public/images/nodejs/configuration-error-example.png
similarity index 100%
rename from docs-v2/pages/code/nodejs/images/v3/code/nodejs/configuration-error-example.png
rename to docs-v2/public/images/nodejs/configuration-error-example.png
diff --git a/docs-v2/pages/code/nodejs/images/v3/code/nodejs/first-name-prop-example.png b/docs-v2/public/images/nodejs/first-name-prop-example.png
similarity index 100%
rename from docs-v2/pages/code/nodejs/images/v3/code/nodejs/first-name-prop-example.png
rename to docs-v2/public/images/nodejs/first-name-prop-example.png
diff --git a/docs-v2/pages/projects/images/access-badge-click.png b/docs-v2/public/images/projects/access-badge-click.png
similarity index 100%
rename from docs-v2/pages/projects/images/access-badge-click.png
rename to docs-v2/public/images/projects/access-badge-click.png
diff --git a/docs-v2/pages/projects/images/import-workflows-into-projects.png b/docs-v2/public/images/projects/import-workflows-into-projects.png
similarity index 100%
rename from docs-v2/pages/projects/images/import-workflows-into-projects.png
rename to docs-v2/public/images/projects/import-workflows-into-projects.png
diff --git a/docs-v2/pages/projects/images/manage-access-overflow-menu.png b/docs-v2/public/images/projects/manage-access-overflow-menu.png
similarity index 100%
rename from docs-v2/pages/projects/images/manage-access-overflow-menu.png
rename to docs-v2/public/images/projects/manage-access-overflow-menu.png
diff --git a/docs-v2/pages/projects/images/project-listing-access.png b/docs-v2/public/images/projects/project-listing-access.png
similarity index 100%
rename from docs-v2/pages/projects/images/project-listing-access.png
rename to docs-v2/public/images/projects/project-listing-access.png
diff --git a/docs-v2/pages/projects/images/project-listing-owner.png b/docs-v2/public/images/projects/project-listing-owner.png
similarity index 100%
rename from docs-v2/pages/projects/images/project-listing-owner.png
rename to docs-v2/public/images/projects/project-listing-owner.png
diff --git a/docs-v2/pages/projects/images/slideout-member-dropdown.png b/docs-v2/public/images/projects/slideout-member-dropdown.png
similarity index 100%
rename from docs-v2/pages/projects/images/slideout-member-dropdown.png
rename to docs-v2/public/images/projects/slideout-member-dropdown.png
diff --git a/docs-v2/pages/projects/images/slideout-member-list.png b/docs-v2/public/images/projects/slideout-member-list.png
similarity index 100%
rename from docs-v2/pages/projects/images/slideout-member-list.png
rename to docs-v2/public/images/projects/slideout-member-list.png
diff --git a/docs-v2/pages/projects/images/slideout-restricted.png b/docs-v2/public/images/projects/slideout-restricted.png
similarity index 100%
rename from docs-v2/pages/projects/images/slideout-restricted.png
rename to docs-v2/public/images/projects/slideout-restricted.png
diff --git a/docs-v2/pages/projects/images/slideout-workspace-share.png b/docs-v2/public/images/projects/slideout-workspace-share.png
similarity index 100%
rename from docs-v2/pages/projects/images/slideout-workspace-share.png
rename to docs-v2/public/images/projects/slideout-workspace-share.png
diff --git a/docs-v2/pages/code/python/images/v3/auth/connected-slack-account.png b/docs-v2/public/images/python/auth/connected-slack-account.png
similarity index 100%
rename from docs-v2/pages/code/python/images/v3/auth/connected-slack-account.png
rename to docs-v2/public/images/python/auth/connected-slack-account.png
diff --git a/docs-v2/pages/code/python/images/v3/auth/step-selector-python-example.png b/docs-v2/public/images/python/auth/step-selector-python-example.png
similarity index 100%
rename from docs-v2/pages/code/python/images/v3/auth/step-selector-python-example.png
rename to docs-v2/public/images/python/auth/step-selector-python-example.png
diff --git a/docs-v2/pages/code/python/images/v3/print-logs.png b/docs-v2/public/images/python/print-logs.png
similarity index 100%
rename from docs-v2/pages/code/python/images/v3/print-logs.png
rename to docs-v2/public/images/python/print-logs.png
diff --git a/docs-v2/pages/quickstart/images/action-configuration-complete.png b/docs-v2/public/images/quickstart/action-configuration-complete.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/action-configuration-complete.png
rename to docs-v2/public/images/quickstart/action-configuration-complete.png
diff --git a/docs-v2/pages/quickstart/images/action_diff.png b/docs-v2/public/images/quickstart/action_diff.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/action_diff.png
rename to docs-v2/public/images/quickstart/action_diff.png
diff --git a/docs-v2/pages/quickstart/images/add-step.png b/docs-v2/public/images/quickstart/add-step.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/add-step.png
rename to docs-v2/public/images/quickstart/add-step.png
diff --git a/docs-v2/pages/quickstart/images/add-timestamp.png b/docs-v2/public/images/quickstart/add-timestamp.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/add-timestamp.png
rename to docs-v2/public/images/quickstart/add-timestamp.png
diff --git a/docs-v2/pages/quickstart/images/add-trigger.png b/docs-v2/public/images/quickstart/add-trigger.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/add-trigger.png
rename to docs-v2/public/images/quickstart/add-trigger.png
diff --git a/docs-v2/pages/quickstart/images/add_action.png b/docs-v2/public/images/quickstart/add_action.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/add_action.png
rename to docs-v2/public/images/quickstart/add_action.png
diff --git a/docs-v2/pages/quickstart/images/additional-props.png b/docs-v2/public/images/quickstart/additional-props.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/additional-props.png
rename to docs-v2/public/images/quickstart/additional-props.png
diff --git a/docs-v2/pages/quickstart/images/autocomplete-message.png b/docs-v2/public/images/quickstart/autocomplete-message.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/autocomplete-message.png
rename to docs-v2/public/images/quickstart/autocomplete-message.png
diff --git a/docs-v2/pages/quickstart/images/basic_workflow.png b/docs-v2/public/images/quickstart/basic_workflow.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/basic_workflow.png
rename to docs-v2/public/images/quickstart/basic_workflow.png
diff --git a/docs-v2/pages/quickstart/images/changelog.png b/docs-v2/public/images/quickstart/changelog.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/changelog.png
rename to docs-v2/public/images/quickstart/changelog.png
diff --git a/docs-v2/pages/quickstart/images/commit_changes_1.png b/docs-v2/public/images/quickstart/commit_changes_1.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/commit_changes_1.png
rename to docs-v2/public/images/quickstart/commit_changes_1.png
diff --git a/docs-v2/pages/quickstart/images/commit_diff_1.png b/docs-v2/public/images/quickstart/commit_diff_1.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/commit_diff_1.png
rename to docs-v2/public/images/quickstart/commit_diff_1.png
diff --git a/docs-v2/pages/quickstart/images/commit_diff_2.png b/docs-v2/public/images/quickstart/commit_diff_2.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/commit_diff_2.png
rename to docs-v2/public/images/quickstart/commit_diff_2.png
diff --git a/docs-v2/pages/quickstart/images/configure-project.png b/docs-v2/public/images/quickstart/configure-project.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/configure-project.png
rename to docs-v2/public/images/quickstart/configure-project.png
diff --git a/docs-v2/pages/quickstart/images/configure-workflow.png b/docs-v2/public/images/quickstart/configure-workflow.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/configure-workflow.png
rename to docs-v2/public/images/quickstart/configure-workflow.png
diff --git a/docs-v2/pages/quickstart/images/configure_project.png b/docs-v2/public/images/quickstart/configure_project.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/configure_project.png
rename to docs-v2/public/images/quickstart/configure_project.png
diff --git a/docs-v2/pages/quickstart/images/configure_project_1.png b/docs-v2/public/images/quickstart/configure_project_1.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/configure_project_1.png
rename to docs-v2/public/images/quickstart/configure_project_1.png
diff --git a/docs-v2/pages/quickstart/images/configure_project_2.png b/docs-v2/public/images/quickstart/configure_project_2.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/configure_project_2.png
rename to docs-v2/public/images/quickstart/configure_project_2.png
diff --git a/docs-v2/pages/quickstart/images/configure_workflow.png b/docs-v2/public/images/quickstart/configure_workflow.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/configure_workflow.png
rename to docs-v2/public/images/quickstart/configure_workflow.png
diff --git a/docs-v2/pages/quickstart/images/connect-google-sheets-account.png b/docs-v2/public/images/quickstart/connect-google-sheets-account.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/connect-google-sheets-account.png
rename to docs-v2/public/images/quickstart/connect-google-sheets-account.png
diff --git a/docs-v2/pages/quickstart/images/copy-path.png b/docs-v2/public/images/quickstart/copy-path.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/copy-path.png
rename to docs-v2/public/images/quickstart/copy-path.png
diff --git a/docs-v2/pages/quickstart/images/create-http-trigger.png b/docs-v2/public/images/quickstart/create-http-trigger.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/create-http-trigger.png
rename to docs-v2/public/images/quickstart/create-http-trigger.png
diff --git a/docs-v2/pages/quickstart/images/create-project.png b/docs-v2/public/images/quickstart/create-project.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/create-project.png
rename to docs-v2/public/images/quickstart/create-project.png
diff --git a/docs-v2/pages/quickstart/images/create-trigger.png b/docs-v2/public/images/quickstart/create-trigger.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/create-trigger.png
rename to docs-v2/public/images/quickstart/create-trigger.png
diff --git a/docs-v2/pages/quickstart/images/create_pr.png b/docs-v2/public/images/quickstart/create_pr.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/create_pr.png
rename to docs-v2/public/images/quickstart/create_pr.png
diff --git a/docs-v2/pages/quickstart/create_project.png b/docs-v2/public/images/quickstart/create_project.png
similarity index 100%
rename from docs-v2/pages/quickstart/create_project.png
rename to docs-v2/public/images/quickstart/create_project.png
diff --git a/docs-v2/pages/quickstart/images/data-inserted.png b/docs-v2/public/images/quickstart/data-inserted.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/data-inserted.png
rename to docs-v2/public/images/quickstart/data-inserted.png
diff --git a/docs-v2/pages/quickstart/images/deploy-workflow.png b/docs-v2/public/images/quickstart/deploy-workflow.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/deploy-workflow.png
rename to docs-v2/public/images/quickstart/deploy-workflow.png
diff --git a/docs-v2/pages/quickstart/images/deployed-workflow.png b/docs-v2/public/images/quickstart/deployed-workflow.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/deployed-workflow.png
rename to docs-v2/public/images/quickstart/deployed-workflow.png
diff --git a/docs-v2/pages/quickstart/images/edit_1.png b/docs-v2/public/images/quickstart/edit_1.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/edit_1.png
rename to docs-v2/public/images/quickstart/edit_1.png
diff --git a/docs-v2/pages/quickstart/images/edit_2.png b/docs-v2/public/images/quickstart/edit_2.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/edit_2.png
rename to docs-v2/public/images/quickstart/edit_2.png
diff --git a/docs-v2/pages/quickstart/images/edit_in_github.png b/docs-v2/public/images/quickstart/edit_in_github.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/edit_in_github.png
rename to docs-v2/public/images/quickstart/edit_in_github.png
diff --git a/docs-v2/pages/quickstart/images/edit_production.png b/docs-v2/public/images/quickstart/edit_production.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/edit_production.png
rename to docs-v2/public/images/quickstart/edit_production.png
diff --git a/docs-v2/pages/quickstart/images/empty-sheet.png b/docs-v2/public/images/quickstart/empty-sheet.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/empty-sheet.png
rename to docs-v2/public/images/quickstart/empty-sheet.png
diff --git a/docs-v2/pages/quickstart/images/expand-sentiment-results.png b/docs-v2/public/images/quickstart/expand-sentiment-results.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/expand-sentiment-results.png
rename to docs-v2/public/images/quickstart/expand-sentiment-results.png
diff --git a/docs-v2/pages/quickstart/images/generate-test-event.png b/docs-v2/public/images/quickstart/generate-test-event.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/generate-test-event.png
rename to docs-v2/public/images/quickstart/generate-test-event.png
diff --git a/docs-v2/pages/quickstart/images/github-sync-v3/commit-changes-2.png b/docs-v2/public/images/quickstart/github-sync-v3/commit-changes-2.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/github-sync-v3/commit-changes-2.png
rename to docs-v2/public/images/quickstart/github-sync-v3/commit-changes-2.png
diff --git a/docs-v2/pages/quickstart/images/github-sync-v3/commit-changes.png b/docs-v2/public/images/quickstart/github-sync-v3/commit-changes.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/github-sync-v3/commit-changes.png
rename to docs-v2/public/images/quickstart/github-sync-v3/commit-changes.png
diff --git a/docs-v2/pages/quickstart/images/github-sync-v3/commit-diff-2.png b/docs-v2/public/images/quickstart/github-sync-v3/commit-diff-2.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/github-sync-v3/commit-diff-2.png
rename to docs-v2/public/images/quickstart/github-sync-v3/commit-diff-2.png
diff --git a/docs-v2/pages/quickstart/images/github-sync-v3/commit-diff.png b/docs-v2/public/images/quickstart/github-sync-v3/commit-diff.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/github-sync-v3/commit-diff.png
rename to docs-v2/public/images/quickstart/github-sync-v3/commit-diff.png
diff --git a/docs-v2/pages/quickstart/images/github-sync-v3/merge-to-prod-2.png b/docs-v2/public/images/quickstart/github-sync-v3/merge-to-prod-2.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/github-sync-v3/merge-to-prod-2.png
rename to docs-v2/public/images/quickstart/github-sync-v3/merge-to-prod-2.png
diff --git a/docs-v2/pages/quickstart/images/github-sync-v3/merge-to-prod.png b/docs-v2/public/images/quickstart/github-sync-v3/merge-to-prod.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/github-sync-v3/merge-to-prod.png
rename to docs-v2/public/images/quickstart/github-sync-v3/merge-to-prod.png
diff --git a/docs-v2/pages/quickstart/images/github-sync-v3/sample-workflow.png b/docs-v2/public/images/quickstart/github-sync-v3/sample-workflow.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/github-sync-v3/sample-workflow.png
rename to docs-v2/public/images/quickstart/github-sync-v3/sample-workflow.png
diff --git a/docs-v2/pages/quickstart/images/github-sync-v3/view-branch.png b/docs-v2/public/images/quickstart/github-sync-v3/view-branch.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/github-sync-v3/view-branch.png
rename to docs-v2/public/images/quickstart/github-sync-v3/view-branch.png
diff --git a/docs-v2/pages/quickstart/images/google-oauth.png b/docs-v2/public/images/quickstart/google-oauth.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/google-oauth.png
rename to docs-v2/public/images/quickstart/google-oauth.png
diff --git a/docs-v2/pages/quickstart/images/google-permissions.png b/docs-v2/public/images/quickstart/google-permissions.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/google-permissions.png
rename to docs-v2/public/images/quickstart/google-permissions.png
diff --git a/docs-v2/pages/quickstart/images/has-headers.png b/docs-v2/public/images/quickstart/has-headers.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/has-headers.png
rename to docs-v2/public/images/quickstart/has-headers.png
diff --git a/docs-v2/pages/quickstart/images/inspect-executions.png b/docs-v2/public/images/quickstart/inspect-executions.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/inspect-executions.png
rename to docs-v2/public/images/quickstart/inspect-executions.png
diff --git a/docs-v2/pages/quickstart/images/inspect-trigger-event.png b/docs-v2/public/images/quickstart/inspect-trigger-event.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/inspect-trigger-event.png
rename to docs-v2/public/images/quickstart/inspect-trigger-event.png
diff --git a/docs-v2/pages/quickstart/images/live-test.png b/docs-v2/public/images/quickstart/live-test.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/live-test.png
rename to docs-v2/public/images/quickstart/live-test.png
diff --git a/docs-v2/pages/quickstart/images/merge_pr.png b/docs-v2/public/images/quickstart/merge_pr.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/merge_pr.png
rename to docs-v2/public/images/quickstart/merge_pr.png
diff --git a/docs-v2/pages/quickstart/images/merge_to_production_1.png b/docs-v2/public/images/quickstart/merge_to_production_1.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/merge_to_production_1.png
rename to docs-v2/public/images/quickstart/merge_to_production_1.png
diff --git a/docs-v2/pages/quickstart/images/merge_to_production_2.png b/docs-v2/public/images/quickstart/merge_to_production_2.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/merge_to_production_2.png
rename to docs-v2/public/images/quickstart/merge_to_production_2.png
diff --git a/docs-v2/pages/quickstart/images/merging_to_production.png b/docs-v2/public/images/quickstart/merging_to_production.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/merging_to_production.png
rename to docs-v2/public/images/quickstart/merging_to_production.png
diff --git a/docs-v2/pages/quickstart/images/message-completed.png b/docs-v2/public/images/quickstart/message-completed.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/message-completed.png
rename to docs-v2/public/images/quickstart/message-completed.png
diff --git a/docs-v2/pages/quickstart/images/new-code-step-added.png b/docs-v2/public/images/quickstart/new-code-step-added.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/new-code-step-added.png
rename to docs-v2/public/images/quickstart/new-code-step-added.png
diff --git a/docs-v2/pages/quickstart/images/new-workflow.png b/docs-v2/public/images/quickstart/new-workflow.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/new-workflow.png
rename to docs-v2/public/images/quickstart/new-workflow.png
diff --git a/docs-v2/pages/quickstart/images/new_workflow.png b/docs-v2/public/images/quickstart/new_workflow.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/new_workflow.png
rename to docs-v2/public/images/quickstart/new_workflow.png
diff --git a/docs-v2/pages/quickstart/images/pr_deployed.png b/docs-v2/public/images/quickstart/pr_deployed.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/pr_deployed.png
rename to docs-v2/public/images/quickstart/pr_deployed.png
diff --git a/docs-v2/pages/quickstart/images/production.png b/docs-v2/public/images/quickstart/production.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/production.png
rename to docs-v2/public/images/quickstart/production.png
diff --git a/docs-v2/pages/quickstart/images/rename-code-step.gif b/docs-v2/public/images/quickstart/rename-code-step.gif
similarity index 100%
rename from docs-v2/pages/quickstart/images/rename-code-step.gif
rename to docs-v2/public/images/quickstart/rename-code-step.gif
diff --git a/docs-v2/pages/quickstart/images/rename-code-step.png b/docs-v2/public/images/quickstart/rename-code-step.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/rename-code-step.png
rename to docs-v2/public/images/quickstart/rename-code-step.png
diff --git a/docs-v2/pages/quickstart/images/review_pr.png b/docs-v2/public/images/quickstart/review_pr.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/review_pr.png
rename to docs-v2/public/images/quickstart/review_pr.png
diff --git a/docs-v2/pages/quickstart/images/save-http-trigger.png b/docs-v2/public/images/quickstart/save-http-trigger.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/save-http-trigger.png
rename to docs-v2/public/images/quickstart/save-http-trigger.png
diff --git a/docs-v2/pages/quickstart/images/select-add-single-row.png b/docs-v2/public/images/quickstart/select-add-single-row.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/select-add-single-row.png
rename to docs-v2/public/images/quickstart/select-add-single-row.png
diff --git a/docs-v2/pages/quickstart/images/select-google-sheets-app.png b/docs-v2/public/images/quickstart/select-google-sheets-app.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/select-google-sheets-app.png
rename to docs-v2/public/images/quickstart/select-google-sheets-app.png
diff --git a/docs-v2/pages/quickstart/images/select-sheet-name.png b/docs-v2/public/images/quickstart/select-sheet-name.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/select-sheet-name.png
rename to docs-v2/public/images/quickstart/select-sheet-name.png
diff --git a/docs-v2/pages/quickstart/images/select-spreadsheet.png b/docs-v2/public/images/quickstart/select-spreadsheet.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/select-spreadsheet.png
rename to docs-v2/public/images/quickstart/select-spreadsheet.png
diff --git a/docs-v2/pages/quickstart/images/sentiment-results.png b/docs-v2/public/images/quickstart/sentiment-results.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/sentiment-results.png
rename to docs-v2/public/images/quickstart/sentiment-results.png
diff --git a/docs-v2/pages/quickstart/images/step-selector-code.png b/docs-v2/public/images/quickstart/step-selector-code.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/step-selector-code.png
rename to docs-v2/public/images/quickstart/step-selector-code.png
diff --git a/docs-v2/pages/quickstart/images/test-code-step.png b/docs-v2/public/images/quickstart/test-code-step.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/test-code-step.png
rename to docs-v2/public/images/quickstart/test-code-step.png
diff --git a/docs-v2/pages/quickstart/images/test-successful.png b/docs-v2/public/images/quickstart/test-successful.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/test-successful.png
rename to docs-v2/public/images/quickstart/test-successful.png
diff --git a/docs-v2/pages/quickstart/images/timestamp-added.png b/docs-v2/public/images/quickstart/timestamp-added.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/timestamp-added.png
rename to docs-v2/public/images/quickstart/timestamp-added.png
diff --git a/docs-v2/pages/quickstart/images/trigger-continue.png b/docs-v2/public/images/quickstart/trigger-continue.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/trigger-continue.png
rename to docs-v2/public/images/quickstart/trigger-continue.png
diff --git a/docs-v2/pages/quickstart/images/unique-url.png b/docs-v2/public/images/quickstart/unique-url.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/unique-url.png
rename to docs-v2/public/images/quickstart/unique-url.png
diff --git a/docs-v2/pages/quickstart/images/v3/async-props.png b/docs-v2/public/images/quickstart/v3/async-props.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/v3/async-props.png
rename to docs-v2/public/images/quickstart/v3/async-props.png
diff --git a/docs-v2/pages/quickstart/images/v3/autocomplete-export.png b/docs-v2/public/images/quickstart/v3/autocomplete-export.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/v3/autocomplete-export.png
rename to docs-v2/public/images/quickstart/v3/autocomplete-export.png
diff --git a/docs-v2/pages/quickstart/images/v3/copy-sentiment-path.png b/docs-v2/public/images/quickstart/v3/copy-sentiment-path.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/v3/copy-sentiment-path.png
rename to docs-v2/public/images/quickstart/v3/copy-sentiment-path.png
diff --git a/docs-v2/pages/quickstart/images/v3/deploy-workflow.png b/docs-v2/public/images/quickstart/v3/deploy-workflow.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/v3/deploy-workflow.png
rename to docs-v2/public/images/quickstart/v3/deploy-workflow.png
diff --git a/docs-v2/pages/quickstart/images/v3/paste-sentiment-score.png b/docs-v2/public/images/quickstart/v3/paste-sentiment-score.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/v3/paste-sentiment-score.png
rename to docs-v2/public/images/quickstart/v3/paste-sentiment-score.png
diff --git a/docs-v2/pages/quickstart/images/v3/select-headers.png b/docs-v2/public/images/quickstart/v3/select-headers.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/v3/select-headers.png
rename to docs-v2/public/images/quickstart/v3/select-headers.png
diff --git a/docs-v2/pages/quickstart/images/v3/select-sentiment-step.png b/docs-v2/public/images/quickstart/v3/select-sentiment-step.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/v3/select-sentiment-step.png
rename to docs-v2/public/images/quickstart/v3/select-sentiment-step.png
diff --git a/docs-v2/pages/quickstart/images/v3/select-spreadsheet-name.png b/docs-v2/public/images/quickstart/v3/select-spreadsheet-name.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/v3/select-spreadsheet-name.png
rename to docs-v2/public/images/quickstart/v3/select-spreadsheet-name.png
diff --git a/docs-v2/pages/quickstart/images/v3/select-spreadsheet.png b/docs-v2/public/images/quickstart/v3/select-spreadsheet.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/v3/select-spreadsheet.png
rename to docs-v2/public/images/quickstart/v3/select-spreadsheet.png
diff --git a/docs-v2/pages/quickstart/images/v3/select-ts-export.png b/docs-v2/public/images/quickstart/v3/select-ts-export.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/v3/select-ts-export.png
rename to docs-v2/public/images/quickstart/v3/select-ts-export.png
diff --git a/docs-v2/pages/quickstart/images/v3/successful-test-results.png b/docs-v2/public/images/quickstart/v3/successful-test-results.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/v3/successful-test-results.png
rename to docs-v2/public/images/quickstart/v3/successful-test-results.png
diff --git a/docs-v2/pages/quickstart/images/v3/timestamp.png b/docs-v2/public/images/quickstart/v3/timestamp.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/v3/timestamp.png
rename to docs-v2/public/images/quickstart/v3/timestamp.png
diff --git a/docs-v2/pages/quickstart/images/view_branch_on_github_1.png b/docs-v2/public/images/quickstart/view_branch_on_github_1.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/view_branch_on_github_1.png
rename to docs-v2/public/images/quickstart/view_branch_on_github_1.png
diff --git a/docs-v2/pages/quickstart/images/view_branch_on_github_2.png b/docs-v2/public/images/quickstart/view_branch_on_github_2.png
similarity index 100%
rename from docs-v2/pages/quickstart/images/view_branch_on_github_2.png
rename to docs-v2/public/images/quickstart/view_branch_on_github_2.png
diff --git a/docs-v2/pages/rest-api/images/source-id.png b/docs-v2/public/images/rest-api/source-id.png
similarity index 100%
rename from docs-v2/pages/rest-api/images/source-id.png
rename to docs-v2/public/images/rest-api/source-id.png
diff --git a/docs-v2/pages/rest-api/images/webhook-proxy.png b/docs-v2/public/images/rest-api/webhook-proxy.png
similarity index 100%
rename from docs-v2/pages/rest-api/images/webhook-proxy.png
rename to docs-v2/public/images/rest-api/webhook-proxy.png
diff --git a/docs-v2/pages/workflows/images/triggers/add-multiple-triggers.png b/docs-v2/public/images/triggers/add-multiple-triggers.png
similarity index 100%
rename from docs-v2/pages/workflows/images/triggers/add-multiple-triggers.png
rename to docs-v2/public/images/triggers/add-multiple-triggers.png
diff --git a/docs-v2/pages/workflows/images/triggers/add-trigger-button.png b/docs-v2/public/images/triggers/add-trigger-button.png
similarity index 100%
rename from docs-v2/pages/workflows/images/triggers/add-trigger-button.png
rename to docs-v2/public/images/triggers/add-trigger-button.png
diff --git a/docs-v2/pages/workflows/images/triggers/email-trigger.png b/docs-v2/public/images/triggers/email-trigger.png
similarity index 100%
rename from docs-v2/pages/workflows/images/triggers/email-trigger.png
rename to docs-v2/public/images/triggers/email-trigger.png
diff --git a/docs-v2/pages/workflows/images/triggers/gcal-triggers.png b/docs-v2/public/images/triggers/gcal-triggers.png
similarity index 100%
rename from docs-v2/pages/workflows/images/triggers/gcal-triggers.png
rename to docs-v2/public/images/triggers/gcal-triggers.png
diff --git a/docs-v2/pages/workflows/images/triggers/http-trigger-url.png b/docs-v2/public/images/triggers/http-trigger-url.png
similarity index 100%
rename from docs-v2/pages/workflows/images/triggers/http-trigger-url.png
rename to docs-v2/public/images/triggers/http-trigger-url.png
diff --git a/docs-v2/pages/workflows/images/triggers/retrieve-large-payload.png b/docs-v2/public/images/triggers/retrieve-large-payload.png
similarity index 100%
rename from docs-v2/pages/workflows/images/triggers/retrieve-large-payload.png
rename to docs-v2/public/images/triggers/retrieve-large-payload.png
diff --git a/docs-v2/pages/workflows/images/triggers/select-a-trigger.png b/docs-v2/public/images/triggers/select-a-trigger.png
similarity index 100%
rename from docs-v2/pages/workflows/images/triggers/select-a-trigger.png
rename to docs-v2/public/images/triggers/select-a-trigger.png
diff --git a/docs-v2/pages/workflows/images/events/select-an-event.png b/docs-v2/public/images/triggers/select-an-event.png
similarity index 100%
rename from docs-v2/pages/workflows/images/events/select-an-event.png
rename to docs-v2/public/images/triggers/select-an-event.png
diff --git a/docs-v2/pages/workflows/images/triggers/select-email-trigger.png b/docs-v2/public/images/triggers/select-email-trigger.png
similarity index 100%
rename from docs-v2/pages/workflows/images/triggers/select-email-trigger.png
rename to docs-v2/public/images/triggers/select-email-trigger.png
diff --git a/docs-v2/pages/workflows/images/triggers/select-http-trigger.png b/docs-v2/public/images/triggers/select-http-trigger.png
similarity index 100%
rename from docs-v2/pages/workflows/images/triggers/select-http-trigger.png
rename to docs-v2/public/images/triggers/select-http-trigger.png
diff --git a/docs-v2/pages/workflows/images/triggers/select-rss-trigger.png b/docs-v2/public/images/triggers/select-rss-trigger.png
similarity index 100%
rename from docs-v2/pages/workflows/images/triggers/select-rss-trigger.png
rename to docs-v2/public/images/triggers/select-rss-trigger.png
diff --git a/docs-v2/pages/workflows/images/triggers/select-schedule-trigger.png b/docs-v2/public/images/triggers/select-schedule-trigger.png
similarity index 100%
rename from docs-v2/pages/workflows/images/triggers/select-schedule-trigger.png
rename to docs-v2/public/images/triggers/select-schedule-trigger.png
diff --git a/docs-v2/public/images/workflows/actions/update-action-button.png b/docs-v2/public/images/workflows/actions/update-action-button.png
new file mode 100644
index 0000000000000..5b242f04efd5b
Binary files /dev/null and b/docs-v2/public/images/workflows/actions/update-action-button.png differ
diff --git a/docs-v2/public/images/workflows/default-axios-stack.png b/docs-v2/public/images/workflows/default-axios-stack.png
new file mode 100644
index 0000000000000..88035fa157dd0
Binary files /dev/null and b/docs-v2/public/images/workflows/default-axios-stack.png differ
diff --git a/docs-v2/public/images/workflows/delay/delay-step-props.png b/docs-v2/public/images/workflows/delay/delay-step-props.png
new file mode 100644
index 0000000000000..423f5bd031136
Binary files /dev/null and b/docs-v2/public/images/workflows/delay/delay-step-props.png differ
diff --git a/docs-v2/public/images/workflows/pipedream-axios-stack.png b/docs-v2/public/images/workflows/pipedream-axios-stack.png
new file mode 100644
index 0000000000000..2460c06f49991
Binary files /dev/null and b/docs-v2/public/images/workflows/pipedream-axios-stack.png differ
diff --git a/docs-v2/public/images/workflows/pipedream-axios-success.png b/docs-v2/public/images/workflows/pipedream-axios-success.png
new file mode 100644
index 0000000000000..66f64c63ad679
Binary files /dev/null and b/docs-v2/public/images/workflows/pipedream-axios-success.png differ
diff --git a/docs-v2/public/images/workflows/select-an-event.png b/docs-v2/public/images/workflows/select-an-event.png
new file mode 100644
index 0000000000000..0baad2f053759
Binary files /dev/null and b/docs-v2/public/images/workflows/select-an-event.png differ
diff --git a/docs-v2/pages/workflows/images/sharing/create-share-link.png b/docs-v2/public/images/workflows/sharing/create-share-link.png
similarity index 100%
rename from docs-v2/pages/workflows/images/sharing/create-share-link.png
rename to docs-v2/public/images/workflows/sharing/create-share-link.png
diff --git a/docs-v2/pages/workflows/images/sharing/publish-as-template.png b/docs-v2/public/images/workflows/sharing/publish-as-template.png
similarity index 100%
rename from docs-v2/pages/workflows/images/sharing/publish-as-template.png
rename to docs-v2/public/images/workflows/sharing/publish-as-template.png
diff --git a/docs-v2/pages/workflows/images/sharing/sharing-workflow-button.png b/docs-v2/public/images/workflows/sharing/sharing-workflow-button.png
similarity index 100%
rename from docs-v2/pages/workflows/images/sharing/sharing-workflow-button.png
rename to docs-v2/public/images/workflows/sharing/sharing-workflow-button.png
diff --git a/docs-v2/public/images/workflows/steps/adding-step-note.gif b/docs-v2/public/images/workflows/steps/adding-step-note.gif
new file mode 100644
index 0000000000000..1311366f7bf89
Binary files /dev/null and b/docs-v2/public/images/workflows/steps/adding-step-note.gif differ
diff --git a/docs-v2/pages/workflows/images/steps/step-name.png b/docs-v2/public/images/workflows/steps/step-name.png
similarity index 100%
rename from docs-v2/pages/workflows/images/steps/step-name.png
rename to docs-v2/public/images/workflows/steps/step-name.png
diff --git a/docs-v2/pages/workflows/images/steps/step-notes.png b/docs-v2/public/images/workflows/steps/step-notes.png
similarity index 100%
rename from docs-v2/pages/workflows/images/steps/step-notes.png
rename to docs-v2/public/images/workflows/steps/step-notes.png
diff --git a/docs-v2/public/images/workflows/triggers/add-multiple-triggers.png b/docs-v2/public/images/workflows/triggers/add-multiple-triggers.png
new file mode 100644
index 0000000000000..1c46b2f7c6e6d
Binary files /dev/null and b/docs-v2/public/images/workflows/triggers/add-multiple-triggers.png differ
diff --git a/docs-v2/public/images/workflows/triggers/add-trigger-button.png b/docs-v2/public/images/workflows/triggers/add-trigger-button.png
new file mode 100644
index 0000000000000..0d95bb535b2b9
Binary files /dev/null and b/docs-v2/public/images/workflows/triggers/add-trigger-button.png differ
diff --git a/docs-v2/public/images/workflows/triggers/email-trigger.png b/docs-v2/public/images/workflows/triggers/email-trigger.png
new file mode 100644
index 0000000000000..79ec9bbb34237
Binary files /dev/null and b/docs-v2/public/images/workflows/triggers/email-trigger.png differ
diff --git a/docs-v2/public/images/workflows/triggers/gcal-triggers.png b/docs-v2/public/images/workflows/triggers/gcal-triggers.png
new file mode 100644
index 0000000000000..f9d0737824687
Binary files /dev/null and b/docs-v2/public/images/workflows/triggers/gcal-triggers.png differ
diff --git a/docs-v2/public/images/workflows/triggers/http-trigger-url.png b/docs-v2/public/images/workflows/triggers/http-trigger-url.png
new file mode 100644
index 0000000000000..b3c30b9b82cf8
Binary files /dev/null and b/docs-v2/public/images/workflows/triggers/http-trigger-url.png differ
diff --git a/docs-v2/public/images/workflows/triggers/retrieve-large-payload.png b/docs-v2/public/images/workflows/triggers/retrieve-large-payload.png
new file mode 100644
index 0000000000000..a5805a36af075
Binary files /dev/null and b/docs-v2/public/images/workflows/triggers/retrieve-large-payload.png differ
diff --git a/docs-v2/public/images/workflows/triggers/select-a-trigger.png b/docs-v2/public/images/workflows/triggers/select-a-trigger.png
new file mode 100644
index 0000000000000..f44082ed79dd2
Binary files /dev/null and b/docs-v2/public/images/workflows/triggers/select-a-trigger.png differ
diff --git a/docs-v2/public/images/workflows/triggers/select-email-trigger.png b/docs-v2/public/images/workflows/triggers/select-email-trigger.png
new file mode 100644
index 0000000000000..324edd1085058
Binary files /dev/null and b/docs-v2/public/images/workflows/triggers/select-email-trigger.png differ
diff --git a/docs-v2/public/images/workflows/triggers/select-http-trigger.png b/docs-v2/public/images/workflows/triggers/select-http-trigger.png
new file mode 100644
index 0000000000000..dda1e2c4f697c
Binary files /dev/null and b/docs-v2/public/images/workflows/triggers/select-http-trigger.png differ
diff --git a/docs-v2/public/images/workflows/triggers/select-rss-trigger.png b/docs-v2/public/images/workflows/triggers/select-rss-trigger.png
new file mode 100644
index 0000000000000..530086617ba7f
Binary files /dev/null and b/docs-v2/public/images/workflows/triggers/select-rss-trigger.png differ
diff --git a/docs-v2/public/images/workflows/triggers/select-schedule-trigger.png b/docs-v2/public/images/workflows/triggers/select-schedule-trigger.png
new file mode 100644
index 0000000000000..9aca826a4d9c5
Binary files /dev/null and b/docs-v2/public/images/workflows/triggers/select-schedule-trigger.png differ
diff --git a/docs-v2/validate-mdx-links.mjs b/docs-v2/validate-mdx-links.mjs
index 34ac71cfe0c13..411d3242059a4 100755
--- a/docs-v2/validate-mdx-links.mjs
+++ b/docs-v2/validate-mdx-links.mjs
@@ -111,7 +111,7 @@ function extractAnchors(content, filePath) {
const basePath = "/" + relativePath.replace(/\.mdx$/, "");
const baseDir = dirname(basePath);
- // For basePath /code/nodejs.mdx -> /code/nodejs
+ // For basePath /core/workflows/code/nodejs.mdx -> /core/workflows/code/nodejs
const normalizedBasePath = normalizePath(basePath);
anchors.add(normalizedBasePath.toLowerCase());
diff --git a/docs-v2/vercel.json b/docs-v2/vercel.json
index 8d512d50050d3..79c837e0deb44 100644
--- a/docs-v2/vercel.json
+++ b/docs-v2/vercel.json
@@ -12,15 +12,15 @@
},
{
"source": "/docs/notebook/actions/",
- "destination": "/workflows/steps/actions/"
+ "destination": "/workflows/building-workflows/actions/"
},
{
"source": "/docs/cron",
- "destination": "/workflows/steps/triggers"
+ "destination": "/workflows/building-workflows/triggers/"
},
{
"source": "/docs/notebook",
- "destination": "/workflows/steps"
+ "destination": "/workflows/"
},
{
"source": "/docs/workflows/fork",
@@ -28,55 +28,55 @@
},
{
"source": "/docs/notebook/fork",
- "destination": "/workflows/copy"
+ "destination": "/workflows/building-workflows/sharing/"
},
{
"source": "/docs/notebook/inspector/",
- "destination": "/workflows/events/inspect/"
+ "destination": "/workflows/building-workflows/inspect/"
},
{
"source": "/docs/notebook/destinations/s3/",
- "destination": "/destinations/s3/"
+ "destination": "/workflows/data-management/destinations/s3/"
},
{
"source": "/docs/notebook/destinations/sse/",
- "destination": "/destinations/sse/"
+ "destination": "/workflows/data-management/destinations/sse/"
},
{
"source": "/docs/notebook/destinations/snowflake/",
- "destination": "/destinations/snowflake/"
+ "destination": "/workflows/data-management/databases/"
},
{
"source": "/docs/notebook/destinations/http/",
- "destination": "/destinations/http/"
+ "destination": "/workflows/data-management/destinations/http/"
},
{
"source": "/docs/notebook/destinations/email/",
- "destination": "/destinations/email/"
+ "destination": "/workflows/data-management/destinations/email/"
},
{
"source": "/docs/notebook/destinations/",
- "destination": "/destinations/"
+ "destination": "/workflows/data-management/destinations/"
},
{
"source": "/docs/notebook/code/",
- "destination": "/workflows/steps/code/"
+ "destination": "/workflows/building-workflows/code/"
},
{
"source": "/docs/notebook/observability/",
- "destination": "/workflows/events/inspect/"
+ "destination": "/workflows/building-workflows/inspect/"
},
{
"source": "/docs/notebook/sources/",
- "destination": "/workflows/steps/triggers/"
+ "destination": "/workflows/building-workflows/triggers/"
},
{
"source": "/docs/security/",
- "destination": "/docs/privacy-and-security/"
+ "destination": "/privacy-and-security/"
},
{
"source": "/docs/notebook/sql/",
- "destination": "/destinations/"
+ "destination": "/workflows/data-management/databases/working-with-sql/"
},
{
"source": "/docs/what-is-pipedream/",
@@ -108,19 +108,19 @@
},
{
"source": "/docs/workflows/steps/code/async/",
- "destination": "/docs/code/nodejs/async/"
+ "destination": "/workflows/building-workflows/code/nodejs/async/"
},
{
"source": "/docs/workflows/steps/code/state",
- "destination": "https://pipedream.com/docs/v1/workflows/steps/code/state"
+ "destination": "/docs/workflows/#step-exports"
},
{
"source": "/docs/workflows/steps/params/",
- "destination": "/docs/workflows/steps/using-props/"
+ "destination": "/workflows/building-workflows/using-props"
},
{
"source": "/docs/pricing/#developer-tier",
- "destination": "/docs/pricing/#free-tier"
+ "destination": "/pricing/#free-tier"
},
{
"source": "/docs/apps/discord/",
@@ -164,159 +164,159 @@
},
{
"source": "/docs/apps/all-apps/",
- "destination": "/docs/apps/"
+ "destination": "/integrations/apps/"
},
{
"source": "/docs/workflows/events/cold-starts/",
- "destination": "/workflows/settings/#eliminate-cold-starts"
+ "destination": "/workflows/building-workflows/settings/#eliminate-cold-starts"
},
{
"source": "/docs/workflows/examples/waiting-to-execute-next-step-of-workflow/",
- "destination": "/docs/code/nodejs/delay/"
+ "destination": "/workflows/building-workflows/code/nodejs/delay/"
},
{
"source": "/docs/workflows/networking/",
- "destination": "/docs/workflows/vpc/"
+ "destination": "/workflows/vpc/"
},
{
"source": "/docs/code/python/#making-a-get-request",
- "destination": "/docs/code/python/http-requests/#making-a-get-request"
+ "destination": "/workflows/building-workflows/code/python/http-requests/#making-a-get-request"
},
{
"source": "/docs/code/python/#making-a-post-request",
- "destination": "/docs/code/python/http-requests/#making-a-post-request"
+ "destination": "/workflows/building-workflows/code/python/http-requests/#making-a-post-request"
},
{
"source": "/docs/code/python/#sending-files",
- "destination": "/docs/code/python/http-requests/#sending-files"
+ "destination": "/workflows/building-workflows/code/python/http-requests/#sending-files"
},
{
"source": "/docs/code/python/#writing-a-file-to-tmp",
- "destination": "/docs/code/python/working-with-files/#writing-a-file-to-tmp"
+ "destination": "/workflows/building-workflows/code/python/working-with-files/#writing-a-file-to-tmp"
},
{
"source": "/docs/code/python/#reading-a-file-from-tmp",
- "destination": "/docs/code/python/working-with-files/#reading-a-file-from-tmp"
+ "destination": "/workflows/building-workflows/code/python/working-with-files/#reading-a-file-from-tmp"
},
{
"source": "/docs/code/python/#listing-files-in-tmp",
- "destination": "/docs/code/python/working-with-files/#listing-files-in-tmp"
+ "destination": "/workflows/building-workflows/code/python/working-with-files/#listing-files-in-tmp"
},
{
"source": "/docs/api",
- "destination": "/docs/rest-api"
+ "destination": "/rest-api/"
},
{
"source": "/docs/api/rest",
- "destination": "/docs/rest-api"
+ "destination": "/rest-api/"
},
{
"source": "/docs/api/rest/(.*)",
- "destination": "/docs/rest-api/$1"
+ "destination": "/rest-api/$1"
},
{
"source": "/docs/api/auth",
- "destination": "/docs/rest-api/auth"
+ "destination": "/rest-api/auth/"
},
{
"source": "/docs/components/quickstart/nodejs/actions",
- "destination": "/docs/components/actions-quickstart"
+ "destination": "/workflows/contributing/components/actions-quickstart/"
},
{
"source": "/docs/github-sync",
- "destination": "/docs/quickstart/github-sync"
+ "destination": "/workflows/git/"
},
{
"source": "/docs/workflows/events/inspect",
- "destination": "/docs/workflows/inspect"
+ "destination": "/workflows/building-workflows/inspect/"
},
{
"source": "/docs/workflows/steps/triggers",
- "destination": "/docs/workflows/triggers"
+ "destination": "/workflows/building-workflows/triggers/"
},
{
"source": "/docs/workflows/steps/actions",
- "destination": "/docs/workflows/actions"
+ "destination": "/workflows/building-workflows/actions/"
},
{
"source": "/docs/workflows/flow-control",
- "destination": "/docs/workflows/control-flow"
+ "destination": "/docs/workflows/control-flow/"
},
{
"source": "/docs/workspaces/okta",
- "destination": "/docs/workspaces/sso/okta"
+ "destination": "/workflows/workspaces/sso/okta/"
},
{
"source": "/docs/workspaces/google",
- "destination": "/docs/workspaces/sso/google"
+ "destination": "/workflows/workspaces/sso/google/"
},
{
"source": "/docs/workspaces/saml",
- "destination": "/docs/workspaces/sso/saml"
+ "destination": "/workflows/workspaces/sso/saml/"
},
{
"source": "/docs/workspaces/saml",
- "destination": "/docs/workspaces/sso/saml"
+ "destination": "/workflows/workspaces/sso/saml/"
},
{
"source": "/docs/workflows/built-in-functions",
- "destination": "/docs/workflows/flow-control"
+ "destination": "/workflows/building-workflows/actions/"
},
{
"source": "/docs/workspaces-and-credits-faq",
- "destination": "https://pipedream.com/pricing"
+ "destination": "/pricing/faq/"
},
{
"source": "/docs/quickstart/run-workflow-on-a-schedule",
- "destination": "/docs/quickstart"
+ "destination": "/quickstart/"
},
{
"source": "/docs/apps/guide/requesting-additional-oauth-scopes",
- "destination": "/docs/connected-accounts/oauth-clients"
+ "destination": "/integrations/oauth-clients/"
},
{
"source": "/docs/workflows/networking",
- "destination": "/docs/databases#connecting-to-restricted-databases"
+ "destination": "/workflows/data-management/databases/"
},
{
"source": "/docs/connected-accounts/api",
- "destination": "/docs/connect/api#accounts"
+ "destination": "/connect/api/#accounts/"
},
{
"source": "/docs/connect/quickstart#use-connect-link",
- "destination": "/docs/connect/quickstart#or-use-connect-link"
+ "destination": "/connect/managed-auth/quickstart/#or-use-connect-link"
},
{
"source": "/docs/connect/quickstart#connect-a-users-account",
- "destination": "/docs/connect/quickstart#connect-your-users-account"
+ "destination": "/connect/managed-auth/quickstart/#connect-your-users-account"
},
{
"source": "/docs/connect/connect-link",
- "destination": "/docs/connect/managed-auth/connect-link"
+ "destination": "/connect/managed-auth/connect-link/"
},
{
"source": "/docs/connect/customize-your-app",
- "destination": "/docs/connect/managed-auth/customization"
+ "destination": "/connect/managed-auth/customization/"
},
{
"source": "/docs/connect/oauth-clients",
- "destination": "/docs/connect/managed-auth/oauth-clients"
+ "destination": "/connect/managed-auth/oauth-clients/"
},
{
"source": "/docs/connect/quickstart",
- "destination": "/docs/connect/managed-auth/quickstart"
+ "destination": "/connect/managed-auth/quickstart/"
},
{
"source": "/docs/connect/tokens",
- "destination": "/docs/connect/managed-auth/tokens"
+ "destination": "/connect/managed-auth/tokens/"
},
{
"source": "/docs/connect/webhooks",
- "destination": "/docs/connect/managed-auth/webhooks"
+ "destination": "/connect/managed-auth/webhooks/"
},
{
"source": "/connect/oauth-clients#using-your-own-oauth-client",
- "destination": "/connect/managed-auth/oauth-clients#using-a-custom-oauth-client"
+ "destination": "/connect/managed-auth/oauth-clients/#using-a-custom-oauth-client"
}
]
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 37b064e4a9259..7ff4254e46b4b 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -14503,9 +14503,6 @@ importers:
'@docsearch/react':
specifier: ^3.6.1
version: 3.8.0(@algolia/client-search@5.17.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)
- '@pipedream/sdk':
- specifier: ^0.1.9
- version: 0.1.9
'@vercel/analytics':
specifier: ^1.3.1
version: 1.4.1(next@14.2.19(@babel/core@8.0.0-alpha.13)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(vue@2.7.16)
@@ -16708,24 +16705,12 @@ packages:
engines: {node: '>=6'}
hasBin: true
- '@hapi/boom@10.0.1':
- resolution: {integrity: sha512-ERcCZaEjdH3OgSJlyjVk8pHIFeus91CjKP3v+MpgBNp5IvGzP2l/bRiD78nqYcKPaZdbKkK5vDBVPd2ohHBlsA==}
-
- '@hapi/bourne@3.0.0':
- resolution: {integrity: sha512-Waj1cwPXJDucOib4a3bAISsKJVb15MKi9IvmTI/7ssVEm6sywXGjVJDhl6/umt1pK1ZS7PacXU3A1PmFKHEZ2w==}
-
- '@hapi/hoek@11.0.7':
- resolution: {integrity: sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==}
-
'@hapi/hoek@9.3.0':
resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==}
'@hapi/topo@5.1.0':
resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==}
- '@hapi/wreck@18.1.0':
- resolution: {integrity: sha512-0z6ZRCmFEfV/MQqkQomJ7sl/hyxvcZM7LtuVqN3vdAO4vM9eBbowl0kaqQj9EJJQab+3Uuh1GxbGIBFy4NfJ4w==}
-
'@headlessui/react@2.2.0':
resolution: {integrity: sha512-RzCEg+LXsuI7mHiSomsu/gBJSjpupm6A1qIZ5sWjd7JhARNlMiSA4kKfJpCKwU9tE+zMRterhhrP74PvfJrpXQ==}
engines: {node: '>=10'}
@@ -17481,10 +17466,6 @@ packages:
'@pipedream/ramp@0.1.2':
resolution: {integrity: sha512-vYC5OPJo+kxhYYav5y0Mb7WihbLqNdoUO/CnOH1rHfKKNI4E23LLLLICn3VAl0gRc7xbWLHf4Nmcyjw7qf5k7Q==}
- '@pipedream/sdk@0.1.9':
- resolution: {integrity: sha512-f8FXEaoBqIOQpI4vVOO8OrHRAjwQYO4pKIwMUcGRkzS5KJ6cZ/7JYYGyXEu7NcS+y1VfyegtbJWu4tWacDjQZg==}
- engines: {node: '>=18.0.0'}
-
'@pipedream/sdk@1.3.3':
resolution: {integrity: sha512-sh0dZWdQlh7IprVs1Ka04+jMmpwTKf5SlyvaAJFmSbcvJ7So1fj/YLuU3BMXU91ehA1R6DGb66Yr+QzBsANcSA==}
engines: {node: '>=18.0.0'}
@@ -26865,9 +26846,6 @@ packages:
simple-lru-cache@0.0.2:
resolution: {integrity: sha512-uEv/AFO0ADI7d99OHDmh1QfYzQk/izT1vCmu/riQfh7qjBVUUgRT87E5s5h7CxWCA/+YoZerykpEthzVrW3LIw==}
- simple-oauth2@5.1.0:
- resolution: {integrity: sha512-gWDa38Ccm4MwlG5U7AlcJxPv3lvr80dU7ARJWrGdgvOKyzSj1gr3GBPN1rABTedAYvC/LsGYoFuFxwDBPtGEbw==}
-
simple-swizzle@0.2.2:
resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
@@ -32476,26 +32454,12 @@ snapshots:
protobufjs: 7.4.0
yargs: 17.7.2
- '@hapi/boom@10.0.1':
- dependencies:
- '@hapi/hoek': 11.0.7
-
- '@hapi/bourne@3.0.0': {}
-
- '@hapi/hoek@11.0.7': {}
-
'@hapi/hoek@9.3.0': {}
'@hapi/topo@5.1.0':
dependencies:
'@hapi/hoek': 9.3.0
- '@hapi/wreck@18.1.0':
- dependencies:
- '@hapi/boom': 10.0.1
- '@hapi/bourne': 3.0.0
- '@hapi/hoek': 11.0.7
-
'@headlessui/react@2.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
'@floating-ui/react': 0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -33612,12 +33576,6 @@ snapshots:
transitivePeerDependencies:
- debug
- '@pipedream/sdk@0.1.9':
- dependencies:
- simple-oauth2: 5.1.0
- transitivePeerDependencies:
- - supports-color
-
'@pipedream/sdk@1.3.3':
dependencies:
'@rails/actioncable': 8.0.0
@@ -45837,15 +45795,6 @@ snapshots:
simple-lru-cache@0.0.2: {}
- simple-oauth2@5.1.0:
- dependencies:
- '@hapi/hoek': 11.0.7
- '@hapi/wreck': 18.1.0
- debug: 4.4.0
- joi: 17.13.3
- transitivePeerDependencies:
- - supports-color
-
simple-swizzle@0.2.2:
dependencies:
is-arrayish: 0.3.2