{process.env.PD_EGRESS_IP_RANGE}
diff --git a/docs-v2/pages/destinations/http.mdx b/docs-v2/pages/destinations/http.mdx
index 70b0c2679d81c..c5ef2307c5c05 100644
--- a/docs-v2/pages/destinations/http.mdx
+++ b/docs-v2/pages/destinations/http.mdx
@@ -112,13 +112,12 @@ 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).
+
+
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.
-
-
-These IP addresses are tied specifically to the `$.send.http()` service. If you send traffic directly from a workflow, it will be sent from one of Pipedream's general range of IP addresses. [See our hosting docs for more information](/privacy-and-security/#hosting-details).
-
-
+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
diff --git a/docs-v2/pages/privacy-and-security/best-practices.mdx b/docs-v2/pages/privacy-and-security/best-practices.mdx
index 77846fa98647c..dac77a201837a 100644
--- a/docs-v2/pages/privacy-and-security/best-practices.mdx
+++ b/docs-v2/pages/privacy-and-security/best-practices.mdx
@@ -1,10 +1,10 @@
# Security Best Practices
-Pipedream implements a range of [privacy and security measures](/privacy-and-security/) meant to protect your data from unauthorized access. Since Pipedream [workflows](/workflows/), [event sources](/sources/), and other resources can run any Node.js code and process any event data, you also have a responsibility to ensure you handle that code and data securely. We've outlined a handful of best practices for that below.
+Pipedream implements a range of [privacy and security measures](/privacy-and-security/) meant to protect your data from unauthorized access. Since Pipedream [workflows](/workflows/), [event sources](/sources/), and other resources can run any code and process any event data, you also have a responsibility to ensure you handle that code and data securely. We've outlined a handful of best practices for that below.
## Store secrets as Pipedream connected accounts or environment variables
-Even if your workflow code is private, you should never store secrets like API keys in code. These secrets should be stored in one of two ways:
+Never store secrets like API keys directly in code. These secrets should be stored in one of two ways:
- [If Pipedream integrates with the app](https://pipedream.com/apps), use [connected accounts](/connected-accounts/) to link your apps / APIs.
- If you need to store credentials for an app Pipedream doesn't support, or you need to store arbitrary configuration data, use [environment variables](/environment-variables/).
@@ -13,21 +13,19 @@ Read more about how Pipedream secures connected accounts / environment variables
## Deliver data to Pipedream securely
-Whenever possible, encrypt data in transit to Pipedream. For example, use HTTPS endpoints when sending HTTP traffic to a workflow.
+Always send data over HTTPS to Pipedream endpoints.
## Send data out of Pipedream securely
When you connect to APIs in a workflow, or deliver data to third-party destinations, encrypt that data in transit. For example, use HTTPS endpoints when sending HTTP traffic to third parties.
-## Add authentication to incoming event data
+## Require authorization for HTTP triggers
-You can add many public-facing triggers to your workflows. For example, when you add an HTTP trigger to your workflow, anyone with the associated trigger URL can invoke it. You should protect your workflow with an authentication mechanism like [Basic Auth](https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication), JWT, or others.
+HTTP triggers are public by default, and require no authorization or token to invoke.
-The easiest way to do this is to use the [Validate Webhook Auth action](https://pipedream.com/apps/http/actions/validate-webhook-auth). This supports common auth options, and you don't have to write any code to configure it.
+For many workflows, you should [configure authorization](/workflows/triggers#authorizing-http-requests) to ensure that only authorized parties can invoke your HTTP trigger.
-If you need to implement custom logic in code, see [this workflow](https://pipedream.com/new?h=tch_OaJfNv) for a shared API key example. This reads the header `x-api-key` and compares it to the [environment variable](/environment-variables/) called `YOUR_WEBHOOK_API_KEY`. If the `x-api-key` header does not match this variable, it returns a `401 Unauthorized` error and exits the workflow early.
-
-This pattern is typical for protecting workflows: add the authentication logic in a step at the top of your workflow, ending early if auth fails. If auth succeeds, Pipedream runs the remaining steps of your workflow.
+For third-party services like webhooks, that authorize requests using their own mechanism, use the [Validate Webhook Auth action](https://pipedream.com/apps/http/actions/validate-webhook-auth). This supports common auth options, and you don't have to write any code to configure it.
## Validate signatures for incoming events, where available
diff --git a/docs-v2/pages/privacy-and-security/index.mdx b/docs-v2/pages/privacy-and-security/index.mdx
index b0a3736f9cd9c..9564dea0a0773 100644
--- a/docs-v2/pages/privacy-and-security/index.mdx
+++ b/docs-v2/pages/privacy-and-security/index.mdx
@@ -22,7 +22,7 @@ If you suspect Pipedream resources are being used for illegal purposes, or other
### SOC 2
-Pipedream undergoes regular third-party audits. We have demonstrated SOC 2 compliance and can provide a SOC 2 Type 2 report upon request. Please reach out to support@pipedream.com to request the latest report.
+Pipedream undergoes annual third-party audits. We have demonstrated SOC 2 compliance and can provide a SOC 2 Type 2 report upon request. Please reach out to support@pipedream.com to request the latest report.
We use [Drata](https://drata.com) to continuosly monitor our infrastructure's compliance with standards like SOC 2, and you can visit our [Security Report](https://app.drata.com/security-report/b45c2f79-1968-496b-8a10-321115b55845/27f61ebf-57e1-4917-9536-780faed1f236) to see a list of policies and processes we implement and track within Drata.
@@ -86,6 +86,61 @@ No credentials are logged in your source or workflow by default. If you log thei
You can delete your OAuth grants or key-based credentials at any time by visiting [https://pipedream.com/accounts](https://pipedream.com/accounts). Deleting OAuth grants within Pipedream **do not** revoke Pipedream's access to your account. You must revoke that access wherever you manage OAuth grants in your third party application.
+## Pipedream REST API security, OAuth clients
+
+The Pipedream API supports two methods of authentication: [OAuth](/rest-api/auth#oauth) and [User API keys](/rest-api/auth#user-api-keys). **We recommend using OAuth clients** for a few reasons:
+
+✅ OAuth clients are tied to the workspace, administered by workspace admins
+✅ Tokens are short-lived
+✅ OAuth clients support scopes, limiting access to specific operations
+
+When testing the API or using the CLI, you can use your user API key. This key is tied to your user account and provides full access to any resources your user has access to, across workspaces.
+
+### OAuth clients
+
+Pipedream supports client credentials OAuth clients, which exchange a client ID and client secret for a short-lived access token. These clients are not tied to individual end users, and are meant to be used server-side. You must store these credentials securely on your server, never allowing them to be exposed in client-side code.
+
+Client secrets are salted and hashed before being saved to the database. The hashed secret is encrypted at rest. Pipedream does not store the client secret in plaintext.
+
+You can revoke a specific client secret at any time by visiting [https://pipedream.com/settings/api](https://pipedream.com/settings/api).
+
+### OAuth tokens
+
+Since Pipedream uses client credentials grants, access tokens must not be shared with end users or stored anywhere outside of your server environment.
+
+Access tokens are issued as JWTs, signed with an ED25519 private key. The public key used to verify these tokens is available at [https:/api.pipedream.com/.well-known/jwks.json](https://pipedream.com/.well-known/jwks.json). See [this workflow template](https://pipedream.com/new?h=tch_rBf76M) for example code you can use to validate these tokens.
+
+Access tokens are hashed before being saved in the Pipedream database, and are encrypted at rest.
+
+Access tokens expire after 1 hour. Tokens can be revoked at any time.
+
+## Pipedream Connect
+
+[Pipedream Connect](/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**.
+
+### Client-side SDK
+
+Pipedream provides a [client-side SDK](/connect/api#typescript-sdk-browser) to initiate authorization or accept API keys on behalf of your users in environments that can run JavaScript. You can see the code for that SDK [here](https://github.com/PipedreamHQ/pipedream/tree/master/packages/sdk).
+
+When you initiate authorization, you must:
+
+1. [Create a server-side token for a specific end user](/connect/api#create-a-new-token)
+2. Initiate auth with that token, connecting an account for a specific user
+
+These tokens can only initiate the auth connection flow. They have no permissions to access credentials or perform other operations against the REST API. They are meant to be scoped to a specific user, for use in clients that need to initiate auth flows.
+
+Tokens expire after 4 hours, at which point you must create a new token for that specific user.
+
+### Connect Link
+
+You can also use [Connect Link](/connect/quickstart#use-connect-link) to generate a URL that initiates the authorization flow for a specific user. This is useful when you want to initiate the auth flow from a client-side environment that can't run JavaScript, or include the link in an email, chat message, etc.
+
+Like tokens, Connect Links are coupled to specific users, and expire after 4 hours.
+
+### REST API
+
+The Pipedream Connect API is a subset of the [Pipedream REST API](/rest-api/). See the [REST API Security](#pipedream-rest-api-security-oauth-clients) section for more information on how we secure the API.
+
## Execution environment
The **execution environment** refers to the environment in which your sources, workflows, and other Pipedream code is executed.
diff --git a/docs-v2/pages/projects/index.mdx b/docs-v2/pages/projects/index.mdx
index 3ddd71ed76e6c..86b7709da1e6d 100644
--- a/docs-v2/pages/projects/index.mdx
+++ b/docs-v2/pages/projects/index.mdx
@@ -75,6 +75,10 @@ At this time it's not possible to move workflows out of GitHub Synchronized Proj
ALPHA FEATURE
-- This feature is in alpha and isn't available by default. -
-
- To enable this feature, open your accounts
- Alpha Features settings and
- enable the
- {{ this.feature }}
- setting.
-
- This feature is experimental and is subject to change. -
-BETA FEATURE
-- This feature is in Beta and isn't available by default. -
-
- To enable this feature, open your
- Experimental Features settings and
- check the box next to
- {{ this.feature }}
- .
-
- This feature is experimental and is subject to change. -
-
- Alternatively, search for the PyPI package you're intending to use, and
- use the shorthand import module shortcut to import them
- into a Python step.
-
| PyPI Package Name | -Import into Pipedream with | -
|---|---|
| - {{ mapping[0] }} - - | -
- import {{ mapping[1] }}
- |
-
- {{ data.tagline || $description || 'Welcome to your VuePress site' }} -
- -
-
{{ feature.details }}
-
-
- ←
-
- {{ prev.title || prev.path }}
-
-
{{ getMsg() }}- -
-
-
-
-
-
-Pipedream's [built-in actions](/workflows/steps/actions/) are great for running common API operations without having to write code, but sometimes you need code-level control in a workflow. You can [write this code yourself](/code/), or you can let Pipedream generate it for you with AI.
-
-This feature is new, and [we welcome feedback](https://pipedream.com/support). Please let us know what we can improve or add to make this more useful for you.
-
-[[toc]]
-
-## Getting Started
-
-Access the feature either from within a Node.js code cell or from any app in the step selector.
-
-
-
-A window should pop up and ask for your prompt. Write exactly what you want to do within that step. **Be verbose** and see our tips for [getting the best results](#getting-the-best-results).
-
-- **Bad**: "Send a Slack message"
-- **Good**: "Send a Slack message in the following format: `Hello, ${name}`. Let me select the channel from a list of available options."
-
-Once you're done, hit **Enter** or click **Generate**.
-
-Code will immediately start streaming to the editor. You can modify the prompt and re-generate the code if it doesn't look right, or click **Use this code** to add it to your code cell and test it.
-
-Pipedream will automatically refresh the step to show connected accounts and any input fields (props) above the step.
-
-
-
-Edit the code however you’d like. Once you’re done, test the code. You’ll see the option to provide a :+1: or :-1: on the code, which helps us learn what’s working and what’s not.
-
-## Editing existing code
-
-You can also edit existing code with AI. Click the **Edit with AI** button at the top-right of any Node.js code step. You'll see the code gen window appear with the original code from your step. Enter a prompt to suggest an edit, and we'll give you the modified code.
-
-
-
-## Getting the best results
-
-**Generating code works best with clear, precise, and detailed instructions of what you want to do in your step.** The code gen service understands the [Pipedream component API](/components/api/) and references the API docs of [integrated apps](https://pipedream.com/apps). For example, you can tell it to include specific [props](/components/api/#props) (input) or [async options](/components/api/#async-options-example), and reference specific API endpoints you want to use for the selected app.
-
-### Examples
-
-#### Slack
-
-Send a message to the `#general` channel that says, "This message was sent with AI-generate code!" Format it as a Slack block, with a header named, "Hello, world!"
-
-**Output**:
-
-```javascript
-import { axios } from "@pipedream/platform";
-
-export default defineComponent({
- props: {
- slack: {
- type: "app",
- app: "slack",
- },
- },
- async run({ steps, $ }) {
- return await axios($, {
- method: "POST",
- url: `https://slack.com/api/chat.postMessage`,
- headers: {
- Authorization: `Bearer ${this.slack.$auth.oauth_access_token}`,
- },
- data: {
- channel: "#general",
- blocks: [
- {
- type: "header",
- text: {
- type: "plain_text",
- text: "Hello, world!",
- },
- },
- {
- type: "section",
- text: {
- type: "mrkdwn",
- text: "This message was sent with AI-generated code!",
- },
- },
- ],
- },
- });
- },
-});
-```
-
-#### Stripe
-
-Get the subscription information about a specific customer based on their email address
-
-**Output:**
-
-```javascript
-import { axios } from "@pipedream/platform";
-
-export default defineComponent({
- props: {
- stripe: {
- type: "app",
- app: "stripe",
- },
- email: {
- type: "string",
- label: "Email Address",
- description:
- "The email address of the customer to get subscription information for",
- },
- },
- async run({ steps, $ }) {
- const customerResponse = await axios($, {
- method: "GET",
- url: `https://api.stripe.com/v1/customers`,
- headers: {
- Authorization: `Bearer ${this.stripe.$auth.api_key}`,
- },
- params: {
- email: this.email,
- },
- });
-
- if (customerResponse.data.length === 0) {
- throw new Error("Customer not found");
- }
-
- const customerId = customerResponse.data[0].id;
-
- return await axios($, {
- method: "GET",
- url: `https://api.stripe.com/v1/subscriptions`,
- headers: {
- Authorization: `Bearer ${this.stripe.$auth.api_key}`,
- },
- params: {
- customer: customerId,
- },
- });
- },
-});
-```
-
-## Current limitations, and what we're working on next
-
-- Currently supports Pipedream actions, not triggers
-- Only supports Node.js output. Python coming soon.
-- It supports single steps, and not entire workflows (also coming soon)
diff --git a/docs/docs/code/nodejs/async/README.md b/docs/docs/code/nodejs/async/README.md
deleted file mode 100644
index 47db010d8ea3a..0000000000000
--- a/docs/docs/code/nodejs/async/README.md
+++ /dev/null
@@ -1,118 +0,0 @@
----
-short_description: How to write code that requires waiting for an asynchronous action.
-thumbnail: https://res.cloudinary.com/pipedreamin/image/upload/v1646841376/docs/icons/icons8-time-96_kupxpi.png
----
-
-# Running asynchronous code in Node.js
-
-
-
-
-
-
-
-
-
-
-
-
-{{steps.nodejs.$return_value}}
-
-
-| Operations | Workspace Owner & Admin | Other Members |
-| -------------------------------------------------- | :---------------------: | :----------------: |
-| View on [Accounts](https://pipedream.com/accounts) | :white_check_mark: | :x: |
-| Add to a new trigger or step | :x: | :x: |
-| Modify existing steps | :x: | :x: |
-| Test exising steps | :white_check_mark: | :white_check_mark: |
-| Manage access | :x: | :x: |
-| Reconnect | :x: | :x: |
-| Delete | :white_check_mark: | :x: |
-
-
-
-| Operations | Workspace Owner & Admin | Other Members |
-| -------------------------------------------------- | :---------------------: | :----------------: |
-| View on [Accounts](https://pipedream.com/accounts) | :white_check_mark: | :white_check_mark: |
-| Add to a new trigger or step | :white_check_mark: | :white_check_mark: |
-| Modify existing steps | :white_check_mark: | :white_check_mark: |
-| Test exising steps | :white_check_mark: | :white_check_mark: |
-| Manage access | :x: | :x: |
-| Reconnect | :x: | :x: |
-| Delete | :white_check_mark: | :x: |
-
-### Frequently Asked Questions
-
-::: warning Why isn't my connected account showing up in the legacy workflow builder?
-
-In order to use a connected account in the legacy (v1) workflow builder, the account must be shared with the entire workspace. Private accounts are accessible in the latest version of the workflow builder.
-
-:::
-
-#### What is the "Owner" column?
-
-The owner column on the Accounts page indicates who in the workspace originally connected the account (that is the only person who has permissions to manage access).
-
-#### Why is there no "Owner" for certain connected accounts?
-
-Accounts that were connected before August 2023 don't have an owner associated with them, and are shared with the entire workspace. In order to manage access for any of those accounts, we'll first prompt you to reconnect.
-
-#### How can I restrict access to a connected account that's already shared with the workspace?
-
-See above for info on [managing access](#managing-access).
-
-#### Can I still work with other people on a single workflow, even if I don't want them to have access to my connected account?
-
-Yes, see the section on [collaborating with others](#collaborating-with-others).
-
-## Accessing credentials via API
-
-You can access credentials for any connected account via API, letting you build services anywhere and use Pipedream to handle auth. See [the guide for accessing credentials via API](/connected-accounts/api/) for more details.
-
-## Passing external credentials at runtime
-
-If you use a secrets store like [HashiCorp Vault](https://www.vaultproject.io/) or [AWS Secrets Manager](https://aws.amazon.com/secrets-manager/), store credentials in a database, or use a service like [Nango](https://www.nango.dev/) to manage auth, you can retrieve these secrets at runtime and pass them to any step. [See the full guide here](/connected-accounts/external-auth/).
-
-## Account security
-
-[See our security docs](/privacy-and-security/#third-party-oauth-grants-api-keys-and-environment-variables) for details on how Pipedream secures your connected accounts.
-
-## Requesting a new app or service
-
-1. Visit [https://pipedream.com/support](https://pipedream.com/support)
-2. Scroll to the bottom, where you'll see a Support form.
-3. Select **App / Integration questions** and submit the request.
-
-
diff --git a/docs/docs/connected-accounts/api/README.md b/docs/docs/connected-accounts/api/README.md
deleted file mode 100644
index 6beacc7353387..0000000000000
--- a/docs/docs/connected-accounts/api/README.md
+++ /dev/null
@@ -1,181 +0,0 @@
-# Accessing credentials via API
-
-When you [connect an account](/connected-accounts/#connecting-accounts), you can use its credentials in workflows, authorizing requests to any app. Pipedream manages the OAuth process for [OAuth apps](/connected-accounts/#oauth), ensuring you always have a fresh access token for requests.
-
-You can also access account credentials from the Pipedream API, using them in any other tool or app where you need auth.
-
-::: tip The credentials API is in beta
-
-Accessing credentials via API is in **beta**, and we're looking for feedback. Please [let us know](https://pipedream.com/support) how you're using it, what's not working, and what else you'd like to see.
-
-During the beta:
-
-- All API calls to `/v1/accounts/*` are free.
-- The API is subject to change.
-
-:::
-
-[[toc]]
-
-## Using the credentials API
-
-1. [Connect your account](/connected-accounts/#connecting-a-new-account)
-2. On [https://pipedream.com/accounts](https://pipedream.com/accounts), find your account and click the `...` to the right of the account,
-3. **Copy Account ID**
-
-
-
-
-
-
-{{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/steps/using-props/#entering-expressions).
-
-
-
-:::tip
-
-Need to store multiple records in one action? Use the **Add or update multiple records** action instead.
-
-:::
-
-### Retrieving Data
-
-The **Get record** action will retrieve the latest value of a data point in one of your data stores.
-
-1. Add a new step to your workflow.
-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:
-
-1. **Select or create a Data Store** — create a new data store or choose an existing data store.
-2. **Key** - the unique ID for this data that you'll use for lookup later
-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:
-
-1. **Select a Data Store** - select the data store that contains the record to be deleted
-2. **Key** - the key that identifies the individual record
-
-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).
-
-## Managing data stores
-
-You can view the contents of your data stores at any time in the [Pipedream Data Stores dashboard](https://pipedream.com/data-stores/). You can also add, edit, or delete data store records manually from this view.
-
-### Editing data store values manually
-
-1. Select the data store
-2. Click the pencil icon on the far right of the record you want to edit. This will open a text box that will allow you to edit the contents of the value. When you're finished with your edits, save by clicking the checkmark icon.
-
-
-
-### Deleting data stores
-
-You can delete a data store from this dashboard as well. On the far right in the data store row, click the trash can icon.
-
-
-
-**Deleting a data store is irreversible**.
-
-::: warning
-If the **Delete** option is greyed out and unclickable, you have workflows using the data store in a step. Click the **>** to the left of the data store's name to expand the linked workflows.
-
-
-
-
-{{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:
-
-
-
-
-
-{{event.body}} - the HTTP payload that triggered our original workflow - so we have access to the same data in Workflow #2.
-- If you configured a **Secret** when creating your Task Scheduler, click on the optional `secret` label at the bottom of the step and add it.
-
-
-
-
-{{event.body}} to the Task Scheduler, you can reference that in Workflow #2 using {{event.message.email}}:
-
-
-
-
-
-
-
-
-
-
-
-### Connecting apps
-
-In the v2 builder, you can connect apps with your code using [props](/components/api/#props).
-
-Above the `run` function, define an app prop that your Node.js step integrates with:
-
-```javascript
-import { axios } from "@pipedream/platform";
-
-export default defineComponent({
- props: {
- slack: {
- type: "app",
- app: "slack",
- },
- },
- async run({ steps, $ }) {
- return await axios($, {
- url: `https://slack.com/api/users.profile.get`,
- headers: {
- Authorization: `Bearer ${this.slack.$auth.oauth_access_token}`,
- },
- });
- },
-});
-```
-
-After testing the step, you'll see the Slack app will appear in the **Configuration** section on the left hand side. In this section you can choose which Slack account you'd like to use in the step.
-
-
-
-### HTTP Response
-
-You can still return an HTTP response from an HTTP-triggered workflow.
-
-Use [`$.respond`](/workflows/steps/triggers/#http) to send a JSON or string response from the HTTP call that triggered the workflow.
-
-```javascript
-export default defineComponent({
- async run({ steps, $ }) {
- $.respond({
- status: 200,
- headers: {},
- body: {
- message: "hello world!",
- },
- });
- },
-});
-```
-
-Please note, you'll also need to configure the HTTP trigger step to also allow custom responses. Use the dropdown in the **HTTP Response** section of the HTTP trigger to select the **Return a custom response from your workflow** option:
-
-
-
-## Known Gaps & Limitations
-
-However, some features from the original builder are not currently available in v2. The Pipedream team is working to quickly address these items, but if you have feedback that isn't listed here, please [reach out](https://pipedream.com/support).
-
-### Sharing workflows
-
-At this time, sharing is not yet implemented in v2 of the workflow builder. As workaround, create your workflows in a organization which make workflows available to your team members.
-
-If you need assistance transferring workflows across accounts, [please contact us](https://pipedream.com/support).
-
-### `$checkpoint`
-
-The `$checkpoint` functionality to save data between workflow runs is not supported in v2, and has been replaced by [Data Stores](/code/nodejs/using-data-stores/).
-
-### Public workflows
-
-At this time, all v2 workflows are private. Unfortunately at this time there is no workaround. We'll announce when a workaround for this limitation is available.
-
-If you're working with Pipedream support to troubleshoot your workflow, you can share it with the support team under your workflow's **Settings**.
-
-### Rolling back a specific version
-
-In v2, you can test and save your progress on a workflow _without_ deploying it.
-
-However, after deploying it's not possible to rollback to a prior version of a deployed workflow.
-
-You can still edit a deployed workflow, just like in v1 but automatic version rollbacks are not currently possible.
-
-### Replaying production events
-
-In the v2 builder, you can still view individual events that trigger your v2 workflows in the **Inspector** events log. You can delete specific events or all of them in one click as well.
-
-To replay past events against your deploy v2 workflows, open the event's menu and click **Replay Event**. This will rerun your workflow with this same event.
-
-## FAQs
-
-### What are the benefits of the new (v2) workflow builder?
-
-- **Edit & test** your workflows in separate editing mode without impacting live workflows
-- **Support for multiple languages** including Node, Python, Golang & bash
-- **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
-
-### What are the limitations of the new (v2) workflow builder?
-
-- `$checkpoint` has been removed from v2 workflows, but [Data Stores](/code/nodejs/using-data-stores/) provides a similar API.
-- Sharing workflows is not supported
-- Making workflows public is not supported
-
-### Are v2 workflows backwards compatible?
-
-No, v2 workflows are not currently compatible with the v1 builder.
-
-However, pre-built component actions are still compatible across both versions. If you do encounter a gap from v1 actions in the v2 builder, [reach out to us](https://pipedream.com/support).
-
-### Is the Component API changing as well? Will I need to rewrite Components?
-
-No. Any components in the public registry or any private components you have published in your account are compatible with v2.
-
-The v2 workflow builder utilizes the same Component API allowing you to create components from within your workflows, which was not possible in v1.
-
-### Will I still be able to open and edit v1 workflows?
-
-Yes, absolutely you will still be able to view and edit v1 workflows. There is no need to immediately change your workflows from v1 to v2.
-
-### How do I migrate v1 workflows to v2 workflows?
-
-At this time we do not have an automated process to change v1 to v2. To create a v2 equivalent workflow, you can recompose your v1 workflow in the v2 builder.
-
-However, if it uses custom Node.js code steps, be sure to [follow the changes we describe in the guide above](/migrate-from-v1/#node-js-code-step-changes).
-
-### When will the new (v2) workflow builder be the default builder for all customers?
-
-By default, existing users will still default to the v1 builder. You can create new v2 workflows from the dropdown menu next to the New workflow button.
-
-if you'd like to default to the v2 builder when creating new workflows, you can change the **Builder Version** in [your account settings](https://pipedream.com/settings/account).
-
-### When will I no longer be able to create v1 workflows?
-
-There is currently no deprecation date for v1 workflows. We will continue to support of v1 workflows until we have feature parity with v2.
-
-When this date becomes clear we will provide assistance to automatically and assist migrate v1 to v2 workflows for you.
diff --git a/docs/docs/migrate-from-v1/images/app-props-example.png b/docs/docs/migrate-from-v1/images/app-props-example.png
deleted file mode 100644
index ae0a1aabbc034..0000000000000
Binary files a/docs/docs/migrate-from-v1/images/app-props-example.png and /dev/null differ
diff --git a/docs/docs/migrate-from-v1/images/builder-mode-sample.png b/docs/docs/migrate-from-v1/images/builder-mode-sample.png
deleted file mode 100644
index fbb7877c25362..0000000000000
Binary files a/docs/docs/migrate-from-v1/images/builder-mode-sample.png and /dev/null differ
diff --git a/docs/docs/migrate-from-v1/images/custom-http-response-option.png b/docs/docs/migrate-from-v1/images/custom-http-response-option.png
deleted file mode 100644
index 174cd7e6eac3e..0000000000000
Binary files a/docs/docs/migrate-from-v1/images/custom-http-response-option.png and /dev/null differ
diff --git a/docs/docs/migrate-from-v1/images/custom-string-prop.png b/docs/docs/migrate-from-v1/images/custom-string-prop.png
deleted file mode 100644
index c1789ce67c5d8..0000000000000
Binary files a/docs/docs/migrate-from-v1/images/custom-string-prop.png and /dev/null differ
diff --git a/docs/docs/migrate-from-v1/images/demo-poster.png b/docs/docs/migrate-from-v1/images/demo-poster.png
deleted file mode 100644
index 75190d0b4dec5..0000000000000
Binary files a/docs/docs/migrate-from-v1/images/demo-poster.png and /dev/null differ
diff --git a/docs/docs/migrate-from-v1/images/inspector-sample.png b/docs/docs/migrate-from-v1/images/inspector-sample.png
deleted file mode 100644
index 504cbb6f8f55c..0000000000000
Binary files a/docs/docs/migrate-from-v1/images/inspector-sample.png and /dev/null differ
diff --git a/docs/docs/migrate-from-v1/images/new-builder-context-switcher.gif b/docs/docs/migrate-from-v1/images/new-builder-context-switcher.gif
deleted file mode 100644
index 1f7093a7f77ed..0000000000000
Binary files a/docs/docs/migrate-from-v1/images/new-builder-context-switcher.gif and /dev/null differ
diff --git a/docs/docs/migrate-from-v1/images/test-workflow-portions.png b/docs/docs/migrate-from-v1/images/test-workflow-portions.png
deleted file mode 100644
index 315920027327f..0000000000000
Binary files a/docs/docs/migrate-from-v1/images/test-workflow-portions.png and /dev/null differ
diff --git a/docs/docs/migrate-from-v1/images/testing-individual-events.gif b/docs/docs/migrate-from-v1/images/testing-individual-events.gif
deleted file mode 100644
index 20cc473ffe4d0..0000000000000
Binary files a/docs/docs/migrate-from-v1/images/testing-individual-events.gif and /dev/null differ
diff --git a/docs/docs/new-feature-or-bug/README.md b/docs/docs/new-feature-or-bug/README.md
deleted file mode 100644
index da8af1216bece..0000000000000
--- a/docs/docs/new-feature-or-bug/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-prev: false
-next: false
----
-
-# New Features / Bugs
-
-To request a new feature or app integration, or to report a new bug, please [see the instructions here](https://github.com/PipedreamHQ/pipedream#found-a-bug-have-a-feature-to-suggest).
diff --git a/docs/docs/nodejs20-faq-2024-02/README.md b/docs/docs/nodejs20-faq-2024-02/README.md
deleted file mode 100644
index 53bfda250b484..0000000000000
--- a/docs/docs/nodejs20-faq-2024-02/README.md
+++ /dev/null
@@ -1,311 +0,0 @@
-# Update to the Node.js runtime on Pipedream (February 2024)
-
-Effective 2024-02-01, the Node.js runtime will no longer load Amazon-specific certificate authority (CA) certificates by default.
-
-[[toc]]
-
-### Will this impact my workflows?
-
-**Existing workflows that are not re-deployed will NOT be impacted.**
-
-Only workflow that meet all of following criteria will be impacted:
-
-- Is re-deployed or deployed after 2024-02-01
-- Connects to an [AWS RDS](https://aws.amazon.com/rds/)-managed database (e.g., PostgreSQL, MySQL, or Microsoft SQL Server)
-- Has server identity verification enabled (e.g., the `rejectUnauthorized` connection option is set to `true`)
-
-::: tip
-Workflows deployed on or after 2024-02-01 that do *not* integrate with AWS RDS will not be impacted.
-:::
-
-### Why are Amazon-specific CA certificates no longer loaded by default?
-
-Pipedream's runtime, which is based on the [Amazon Web Services](https://aws.amazon.com/) (AWS) Lambda Node.js runtime, is being upgraded to support Node.js 20. Starting with Node.js 20, Lambda no longer loads and validates Amazon-specific CA certificates by default. This improves cold start performance.
-
-For more information, see [Amazon's blog post](https://aws.amazon.com/blogs/compute/node-js-20-x-runtime-now-available-in-aws-lambda/).
-
-### How will this impact my workflows?
-
-Starting 2024-02-01, relevant database connection attempts will return a message like this:
-
-
-
-### What do I need to do?
-
-If you are not planning to update and re-deploy a workflow [impacted by this update](#will-this-impact-my-workflows), you do not need to do anything.
-
-Otherwise, to successfully connect to your database, you can disable server identity verification or include CA certificates for your database.
-
-For more information on secure connections and CAs, see the AWS docs: [Using SSL/TLS to encrypt a connection to a DB instance](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html)
-
-Below are instructions for updating a workflow that connects to a [**MySQL**](#mysql), [**PostgreSQL**](#postgresql), or [**Microsoft SQL Server**](#microsoft-sql-server) DB instance.
-
-#### MySQL
-
-**Using a Pipedream action**:
-
-- Option A: Disable server identity verification
- 1. If given the option, update the action to the latest version by clicking the "Update" button in the workflow step. The lastest version of MySQL actions disable server identity verification by default.
-
- 
-
-- Option B: Use the [MySQL (SSL)](https://pipedream.com/apps/mysql-ssl) app
- 1. Replace your MySQL action with the corresponding MySQL (SSL) action.
- 2. [Connect](/connected-accounts/#connecting-accounts) your MySQL (SSL) account, specifying the `key`, `cert`, `ca`, and `rejectUnauthorized` connection options.
-
-**Using a custom code step**:
-
-- Option A: Disable server identity verification
- 1. Set the `rejectUnauthorized` connection option to `false`. For example:
-
- ```javascript
- const connection = await mysql.createConnection({
- host,
- user,
- password,
- database,
- ssl: {
- rejectUnauthorized: false,
- }
- });
- ```
-
-- Option B: Use the [MySQL (SSL)](https://pipedream.com/apps/mysql-ssl) app
- 1. Replace the `mysql` app prop with a `mysql_ssl` app prop.
- 2. Use the SSL connection options contained in the `$auth` object.
-
- Here's an example of an updated code step that uses the **`mysql_ssl`** app and the [`mysql2` npm package](https://www.npmjs.com/package/mysql2):
-
- ```javascript
- import mysql from 'mysql2/promise';
- export default defineComponent({
- props: {
- mysql: {
- type: "app",
- app: "mysql_ssl",
- }
- },
- async run({steps, $}) {
- const { host, port, username, password, database, ca, cert, key, rejectUnauthorized } = this.mysql.$auth;
- const connection = await mysql.createConnection({
- host,
- port,
- user: username,
- password,
- database,
- ssl: {
- rejectUnauthorized,
- ca,
- cert,
- key,
- }
- });
- const [rows] = await connection.execute('SELECT NOW()');
- return rows;
- },
- })
- ```
-
-#### PostgreSQL
-
-**Using a Pipedream action**:
-
-1. If given the option, update the action to the latest version by clicking the "Update" button in the workflow step.
-
- 
-
-2. Set the **Reject Unauthorized** field to `false`.
-
- 
-
-**Using a custom code step**:
-
-- Option A: Disable server identity verification
- 1. Set the `rejectUnauthorized` connection option to `false`. For example:
-
- ```javascript
- const client = new Client({
- host,
- database,
- user,
- password,
- ssl: {
- rejectUnauthorized: false,
- },
- });
- ```
-
-- Option B: Include all Amazon CA certificates
- 1. Read the certificate file with all Amazon CA certificates located at `/var/runtime/ca-cert.pem`.
- 2. Include the CA certificates in the database connection options.
-
- Here's an example code step that uses the [`pg` npm package](https://www.npmjs.com/package/pg):
-
- ```javascript
- import { Client } from "pg";
- import fs from "fs";
- export default defineComponent({
- props: {
- postgresql: {
- type: "app",
- app: "postgresql",
- }
- },
- async run({steps, $}) {
- const { host, user, password, port, database } = this.postgresql.$auth;
- const client = new Client({
- host,
- database,
- user,
- password,
- port,
- ssl: {
- rejectUnauthorized: true,
- ca: fs.readFileSync("/var/runtime/ca-cert.pem")
- },
- });
- await client.connect();
- const results = (await client.query("SELECT NOW()")).rows;
- $.export("results", results);
- await client.end();
- },
- });
- ```
-
-- Option C: Include your region's certificate bundle
- 1. Download the [certificate bundle for your AWS region](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html#UsingWithRDS.SSL.RegionCertificates).
- 2. Import the certificate bundle into your workflow as an [attachment](/workflows/settings/#attachments).
- 3. Include the CA certificates in the database connection options.
-
- Here's an example code step that uses the `pg` npm package:
-
- ```javascript
- import { Client } from "pg";
- import fs from "fs";
- export default defineComponent({
- props: {
- postgresql: {
- type: "app",
- app: "postgresql",
- }
- },
- async run({steps, $}) {
- const { host, user, password, port, database } = this.postgresql.$auth;
- const client = new Client({
- host,
- database,
- user,
- password,
- port,
- ssl: {
- rejectUnauthorized: true,
- ca: fs.readFileSync(steps.trigger.context.attachments["
-
-
-
-
-
-You can also review and merge changes directly from GitHub using the standard pull request process.
-
-::: warning Pull request reviews cannot be required
-
-PR reviews cannot be required. That feature is on the roadmap for the Business tier.
-
-:::
-
-### Commit changes
-
-To commit changes without merging to production, select **Commit Changes** from the Git Actions menu:
-
-
-
-You can review the diff and enter a commit message:
-
-
-
-### Pull changes and resolve conflicts
-
-If remote changes are detected, you'll be prompted to pull the changes:
-
-.
-
-:::
-
-When you complete connecting your Google account, the window should close and you should return to Pipedream. Your connected account should automatically be selected. Next, select your spreadsheet from the dropdown menu:
-
-
-
-Then select the sheet name (the default sheet name in Google Sheets is **Sheet1**):
-
-
-
-Next, select if the spreadsheet has headers in the first row. When a header row exists, Pipedream will automatically retrieve the header labels to make it easy to enter data (if not, you can manually construct an array of values). Since the sheet for this example contains headers, select **Yes**.
-
-
-
-Pipedream will retrieve the headers and generate a form to enter data in your sheet:
-
-
-
-First, let's use the object explorer to pass the timestamp for the workflow event as the value for the first column. This data can be found in the context object on the trigger.
-
-When you click into the **Timestamp** field, Pipedream will display an object explorer to make it easy to find data. Scroll or search to find the `ts` key under `steps.trigger.context`.
-
-
-
-Click **select path** to insert a reference to {{steps.trigger.context.ts}}:
-
-
-
-Next, let's use autocomplete to enter a value for the **Message** column. First, add double braces `{{` — Pipedream will automatically add the closing braces `}}`.
-
-Then, type `steps.trigger.event.body.message` between the pairs of braces. Pipedream will provide autocomplete suggestions as you type. Press **Tab** to use a suggestion and then click `.` to get suggestions for the next key. The final value in the **Message** field should be {{steps.trigger.event.body.message}}.
-
-
-
-Finally, let's copy a reference from a previous step. Scroll up to the `sentiment` step and expand the results:
-
-
-
-Next, click the **Copy Path** link next to the score.
-
-
-
-Paste the value into the **Sentiment Score** field — Pipedream will automatically wrap the reference in double braces {{ }}.
-
-
-
-Now that the configuration is complete, click **Test** to validate the configuration for this step. When the test is complete, you will see a success message and a summary of the action performed:
-
-
-
-If you load your spreadsheet, you should see the data Pipedream inserted.
-
-
-
-Next, return to your workflow and click **Deploy** to run your workflow on every trigger event.
-
-
-
-When your workflow deploys, you will be redirected to the **Inspector**. Your workflow is now live.
-
-
-
-To validate your workflow is working as expected, send a new request to your workflow: You can edit and run the following `cURL` command:
-
-```bash
-curl -d '{
- "message": "Wow!!! Pipedream IS awesome and easy to use!!!"
-}' -H "Content-Type: application/json" YOUR-TRIGGER-URL-GOES-HERE
-```
-
-The event will instantly appear in the event list. Select it to inspect the workflow execution.
-
-
-
-Finally, you can return to Google Sheets to validate that the new data was automatically inserted.
-
-
-
-## Next Steps
-
-Congratulations! You completed the quickstart and should now understand the basic patterns for workflow development. Next, try creating your own workflows, explore the quickstart for [GitHub Sync](./github-sync/) and check out the rest of the [docs](/)!
diff --git a/docs/docs/quickstart/create-new-workflow.md b/docs/docs/quickstart/create-new-workflow.md
deleted file mode 100644
index 2db62ed833abd..0000000000000
--- a/docs/docs/quickstart/create-new-workflow.md
+++ /dev/null
@@ -1,5 +0,0 @@
-### Create a new workflow
-
-First, create a new workflow by clicking **New** from [https://pipedream.com/workflows](https://pipedream.com/workflows):
-
-
diff --git a/docs/docs/quickstart/create_project.png b/docs/docs/quickstart/create_project.png
deleted file mode 100644
index b494829dadd36..0000000000000
Binary files a/docs/docs/quickstart/create_project.png and /dev/null differ
diff --git a/docs/docs/quickstart/get-started.png b/docs/docs/quickstart/get-started.png
deleted file mode 100644
index 9bd9f18000fbb..0000000000000
Binary files a/docs/docs/quickstart/get-started.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/README.md b/docs/docs/quickstart/github-sync/README.md
deleted file mode 100644
index 44a41d81a084b..0000000000000
--- a/docs/docs/quickstart/github-sync/README.md
+++ /dev/null
@@ -1,162 +0,0 @@
-# Quickstart - Github Sync
-
-The purpose of this guide is to help you start building projects on Pipedream using **GitHub Sync**.
-
-This guide assumes you:
-
-- Have a Pipedream account
-- Have a GitHub account
-- Understand the basics of workflow development on Pipedream
-- Are familiar with git-concepts (branches, commits, merges, etc)
-- Are on an [eligible plan](https://pipedream.com/pricing/)
-
-::: tip
-
-If you are new to Pipedream, we recommend starting with the [basics of workflow development](/quickstart/).
-
-:::
-
-::: tip
-
-Users on the Free and Basic plan may preview GitHub Sync by enabling the feature **when creating a new project.** You will not be able to merge to production without upgrading. When you upgrade, you may enable or disable GitHub sync for projects at any time.
-
-:::
-
-[[toc]]
-
-## Create a new project
-
-Follow the steps below to create a new project and configure GitHub Sync.
-
-::: tip
-
-This example uses Pipedream's OAuth integration with GitHub which will automaticallly create a a new, empty repo in GitHub. The OAuth integration requires the granting of extensive scopes so Pipedream can create and manage the integration. If you prefer not to use OAuth and configure the integration manually, follow the steps in Pipedream's docs to configure the integration using deploy keys. Deploy keys allow you to restrict Pipedream's access to a specific repo.
-
-:::
-
-Go to `https://pipedream.com/projects` and click on **Create Project**.
-
-
-Enter a project name or click the icon to generate a random name and check the box to **Configure GitHub Sync**.
-
-
-Select or connect a GitHub account, username and repo name and click **Create Project**.
-
-
-
-## Create a branch to make edits
-
-Once your project is ready, click on the **Edit** button.
-
-
-
-Since this is a new project, you will prompted to create a branch. You may accept the default branch name or customize it.
-
-
-
-In the future, when you click **Edit**, Pipedream will load development mode for the last branch you were editing for the project. You may also create or select a different branch from the drop down menu.
-
-::: tip
-
-When GitHub Sync is enabled, project resources may only be edited in a branch.
-
-:::
-
-## Create a workflow in the editable branch
-
-Once the branch is created, click the **New** button to create a workflow.
-
-
-
-For this example, name the workflow and click **Create Workflow** to use the default settings.
-
-
-
-Build a simple workflow with an HTTP trigger and Node code step.
-
-
-
-
-At this point, your workflow is saved, but changes have not been commited to GitHub. To do that, click on the dropdown menu and select **Commit**.
-
-
-
-You may add an option commit message and complete the commit.
-
-
-
-Next, make an edit to the code (e.g., add a comment). Commit your changes again. Notice that the commit diff highlights the specific changes that will be committed.
-
-
-
-## View your project on GitHub
-
-Open the git actions menu and select **View branch on GitHub**.
-
-
-
-You can explore the files created, including the YAML file with the workflow definition and the javascript file with the code for the Node step.
-
-
-
-::: tip
-
-Optionally navigate to the file with the code step and make an edit to the file and commit your changes to the branch (e.g., add another comment). When you return to Pipedream, you'll notice the git actions button will prompt you to pull changes. Pipedream's integration with GitHub is bi-directional, so you can make edits outside of Pipedream (including locally) and sync them via GitHub. Note: there are currently restrictions on local development (e.g., you can only edit existing resources -- you can't create new workflows locally).
-
-:::
-
-## Merge your changes to production
-
-Merge to production to deploy the workflow to Pipedream.
-
-
-
-Pipedream will show you the full diff of all commited changes and the current state of Production. When your changes are merged, Pipedream will route you to the `production` branch for the project where you can view and inspect live, running workflows and events.
-
-
-
-NOTE: When you merge, changes for all resources in the project will be merged. That means one or more workflows may be updated, enabled, disabled, etc.
-
-## Edit a previously merged branch
-
-To edit a previously merged branch, you may create a new branch or click **Edit** when viewing the `production`to continue editing the last used branch.
-
-
-
-Open the workflow in Pipedream's editor and add an HTTP request action to the end of the workflow. Configure the action to `GET` the URL `https://example.com`.
-
-
-
-This time, we'll merge directly to production without commiting separately. Click **Merge to Production** to view the diff, commit and merge.
-
-
-
-You may also view the repo on GitHub to see how the action configuration is represented in the YAML of the workflow definition. Try other actions, including actions that use connected accounts and explore how they're represented in the GitHub code.
-
-## Make an edit and merge from GitHub
-
-As the final step of this quickstart, view the repository on GitHub and navigate to the code step. Click the edit icon and made a simple change (e.g., add a comment).
-
-
-
-Commit and create a PR.
-
-
-
-Then open the PR, review the changes and merge.
-
-
-
-When you return to Pipedream, the changes will be merged to `production` and deployed.
-
-
-
-## Use the changelog
-
-If you have any issues, including errors when merging or deploying, check the changelog. It communicates the state of all operations from both Pipedream and GitHub and will surface errors and issues (including where actions were initiated from and by whom).
-
-
-
-## More resources
-
-We hope that helps you get started with GitHub. Next, we suggest reading the docs and exploring the feature in more depth. If you have any issues or feedback, please reach out to Support, on public Slack or on Discourse.
\ No newline at end of file
diff --git a/docs/docs/quickstart/github-sync/images/action_diff.png b/docs/docs/quickstart/github-sync/images/action_diff.png
deleted file mode 100644
index 3560598d1eb53..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/action_diff.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/images/add_action.png b/docs/docs/quickstart/github-sync/images/add_action.png
deleted file mode 100644
index e28fb37e875e7..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/add_action.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/images/basic_workflow.png b/docs/docs/quickstart/github-sync/images/basic_workflow.png
deleted file mode 100644
index a4116e697dc4c..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/basic_workflow.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/images/changelog.png b/docs/docs/quickstart/github-sync/images/changelog.png
deleted file mode 100644
index 703a79450113a..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/changelog.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/images/commit_changes_1.png b/docs/docs/quickstart/github-sync/images/commit_changes_1.png
deleted file mode 100644
index a8eaecf5abd9c..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/commit_changes_1.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/images/commit_diff_1.png b/docs/docs/quickstart/github-sync/images/commit_diff_1.png
deleted file mode 100644
index 6cec8e54e36ae..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/commit_diff_1.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/images/commit_diff_2.png b/docs/docs/quickstart/github-sync/images/commit_diff_2.png
deleted file mode 100644
index c2195615bf57a..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/commit_diff_2.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/images/configure_project.png b/docs/docs/quickstart/github-sync/images/configure_project.png
deleted file mode 100644
index 51fd1c1418658..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/configure_project.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/images/configure_project_1.png b/docs/docs/quickstart/github-sync/images/configure_project_1.png
deleted file mode 100644
index 55738ef8ab52c..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/configure_project_1.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/images/configure_project_2.png b/docs/docs/quickstart/github-sync/images/configure_project_2.png
deleted file mode 100644
index 1b9a7d786ecd1..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/configure_project_2.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/images/configure_workflow.png b/docs/docs/quickstart/github-sync/images/configure_workflow.png
deleted file mode 100644
index 4fd73d592958c..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/configure_workflow.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/images/create_pr.png b/docs/docs/quickstart/github-sync/images/create_pr.png
deleted file mode 100644
index 76984483f9d58..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/create_pr.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/images/create_project.png b/docs/docs/quickstart/github-sync/images/create_project.png
deleted file mode 100644
index b494829dadd36..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/create_project.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/images/edit_1.png b/docs/docs/quickstart/github-sync/images/edit_1.png
deleted file mode 100644
index cad21ed19a5c5..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/edit_1.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/images/edit_2.png b/docs/docs/quickstart/github-sync/images/edit_2.png
deleted file mode 100644
index 28c55af88536a..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/edit_2.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/images/edit_in_github.png b/docs/docs/quickstart/github-sync/images/edit_in_github.png
deleted file mode 100644
index 9b583c11c8ace..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/edit_in_github.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/images/edit_production.png b/docs/docs/quickstart/github-sync/images/edit_production.png
deleted file mode 100644
index 86a0d656b3c2c..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/edit_production.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/images/merge_pr.png b/docs/docs/quickstart/github-sync/images/merge_pr.png
deleted file mode 100644
index 85cdfaf8b16b7..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/merge_pr.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/images/merge_to_production_1.png b/docs/docs/quickstart/github-sync/images/merge_to_production_1.png
deleted file mode 100644
index ec70ca6420614..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/merge_to_production_1.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/images/merge_to_production_2.png b/docs/docs/quickstart/github-sync/images/merge_to_production_2.png
deleted file mode 100644
index 000f90928c18b..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/merge_to_production_2.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/images/merging_to_production.png b/docs/docs/quickstart/github-sync/images/merging_to_production.png
deleted file mode 100644
index 42040d2a62994..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/merging_to_production.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/images/new_workflow.png b/docs/docs/quickstart/github-sync/images/new_workflow.png
deleted file mode 100644
index f7e3e46efaced..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/new_workflow.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/images/pr_deployed.png b/docs/docs/quickstart/github-sync/images/pr_deployed.png
deleted file mode 100644
index f598de9f1c62f..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/pr_deployed.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/images/production.png b/docs/docs/quickstart/github-sync/images/production.png
deleted file mode 100644
index 1c285358aa4fe..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/production.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/images/review_pr.png b/docs/docs/quickstart/github-sync/images/review_pr.png
deleted file mode 100644
index 4ce9c0da7025b..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/review_pr.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/images/view_branch_on_github_1.png b/docs/docs/quickstart/github-sync/images/view_branch_on_github_1.png
deleted file mode 100644
index c36bcd2ce2d80..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/view_branch_on_github_1.png and /dev/null differ
diff --git a/docs/docs/quickstart/github-sync/images/view_branch_on_github_2.png b/docs/docs/quickstart/github-sync/images/view_branch_on_github_2.png
deleted file mode 100644
index 033109f44bcef..0000000000000
Binary files a/docs/docs/quickstart/github-sync/images/view_branch_on_github_2.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220123213645943.png b/docs/docs/quickstart/image-20220123213645943.png
deleted file mode 100644
index 29717d7bb0c53..0000000000000
Binary files a/docs/docs/quickstart/image-20220123213645943.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220123213843066.png b/docs/docs/quickstart/image-20220123213843066.png
deleted file mode 100644
index 006fd8d7b3017..0000000000000
Binary files a/docs/docs/quickstart/image-20220123213843066.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220123214244795.png b/docs/docs/quickstart/image-20220123214244795.png
deleted file mode 100644
index fb64ae656dcaf..0000000000000
Binary files a/docs/docs/quickstart/image-20220123214244795.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220123214505923.png b/docs/docs/quickstart/image-20220123214505923.png
deleted file mode 100644
index e0f9f3fc66349..0000000000000
Binary files a/docs/docs/quickstart/image-20220123214505923.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220123215443936.png b/docs/docs/quickstart/image-20220123215443936.png
deleted file mode 100644
index b133eba0c772c..0000000000000
Binary files a/docs/docs/quickstart/image-20220123215443936.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220123215558412.png b/docs/docs/quickstart/image-20220123215558412.png
deleted file mode 100644
index 7de2323b5702e..0000000000000
Binary files a/docs/docs/quickstart/image-20220123215558412.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220123220018170.png b/docs/docs/quickstart/image-20220123220018170.png
deleted file mode 100644
index 5dc6ec9c83d72..0000000000000
Binary files a/docs/docs/quickstart/image-20220123220018170.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220123220128877.png b/docs/docs/quickstart/image-20220123220128877.png
deleted file mode 100644
index b9a6d23dbdfd7..0000000000000
Binary files a/docs/docs/quickstart/image-20220123220128877.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220123221849231.png b/docs/docs/quickstart/image-20220123221849231.png
deleted file mode 100644
index 44523dcc949bd..0000000000000
Binary files a/docs/docs/quickstart/image-20220123221849231.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220123222247217.png b/docs/docs/quickstart/image-20220123222247217.png
deleted file mode 100644
index 2b2f610b8e32f..0000000000000
Binary files a/docs/docs/quickstart/image-20220123222247217.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220123222340361.png b/docs/docs/quickstart/image-20220123222340361.png
deleted file mode 100644
index 713f6e8fa8fd3..0000000000000
Binary files a/docs/docs/quickstart/image-20220123222340361.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220123222643042.png b/docs/docs/quickstart/image-20220123222643042.png
deleted file mode 100644
index a0c43ff3be22f..0000000000000
Binary files a/docs/docs/quickstart/image-20220123222643042.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220125184754078.png b/docs/docs/quickstart/image-20220125184754078.png
deleted file mode 100644
index ddaa1e9184045..0000000000000
Binary files a/docs/docs/quickstart/image-20220125184754078.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220125185156527.png b/docs/docs/quickstart/image-20220125185156527.png
deleted file mode 100644
index b393cd434b447..0000000000000
Binary files a/docs/docs/quickstart/image-20220125185156527.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220125185305043.png b/docs/docs/quickstart/image-20220125185305043.png
deleted file mode 100644
index b3152d40db080..0000000000000
Binary files a/docs/docs/quickstart/image-20220125185305043.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220125185354469.png b/docs/docs/quickstart/image-20220125185354469.png
deleted file mode 100644
index 232b3bfec345e..0000000000000
Binary files a/docs/docs/quickstart/image-20220125185354469.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220125185544800.png b/docs/docs/quickstart/image-20220125185544800.png
deleted file mode 100644
index 727fa5c0f830a..0000000000000
Binary files a/docs/docs/quickstart/image-20220125185544800.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220125185952120.png b/docs/docs/quickstart/image-20220125185952120.png
deleted file mode 100644
index 4428ff8faa277..0000000000000
Binary files a/docs/docs/quickstart/image-20220125185952120.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220125190643112.png b/docs/docs/quickstart/image-20220125190643112.png
deleted file mode 100644
index 66bdff163689d..0000000000000
Binary files a/docs/docs/quickstart/image-20220125190643112.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220125190740937.png b/docs/docs/quickstart/image-20220125190740937.png
deleted file mode 100644
index c718f90838ac3..0000000000000
Binary files a/docs/docs/quickstart/image-20220125190740937.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220125191025880.png b/docs/docs/quickstart/image-20220125191025880.png
deleted file mode 100644
index 5a949e35c55ae..0000000000000
Binary files a/docs/docs/quickstart/image-20220125191025880.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220125191155907.png b/docs/docs/quickstart/image-20220125191155907.png
deleted file mode 100644
index 6cbafcf8d5a38..0000000000000
Binary files a/docs/docs/quickstart/image-20220125191155907.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220125191627775.png b/docs/docs/quickstart/image-20220125191627775.png
deleted file mode 100644
index c81e86623f1b5..0000000000000
Binary files a/docs/docs/quickstart/image-20220125191627775.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220125191907876.png b/docs/docs/quickstart/image-20220125191907876.png
deleted file mode 100644
index ae21a3da2fd08..0000000000000
Binary files a/docs/docs/quickstart/image-20220125191907876.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220125192301634.png b/docs/docs/quickstart/image-20220125192301634.png
deleted file mode 100644
index f35a50e97991c..0000000000000
Binary files a/docs/docs/quickstart/image-20220125192301634.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220125192410390.png b/docs/docs/quickstart/image-20220125192410390.png
deleted file mode 100644
index bf08516829abd..0000000000000
Binary files a/docs/docs/quickstart/image-20220125192410390.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220125192709058.png b/docs/docs/quickstart/image-20220125192709058.png
deleted file mode 100644
index 7df5e20d116a8..0000000000000
Binary files a/docs/docs/quickstart/image-20220125192709058.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220125192818879.png b/docs/docs/quickstart/image-20220125192818879.png
deleted file mode 100644
index ba55c705518e4..0000000000000
Binary files a/docs/docs/quickstart/image-20220125192818879.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220125192944518.png b/docs/docs/quickstart/image-20220125192944518.png
deleted file mode 100644
index f50607fb6476b..0000000000000
Binary files a/docs/docs/quickstart/image-20220125192944518.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220125193340378.png b/docs/docs/quickstart/image-20220125193340378.png
deleted file mode 100644
index dae1d3d213630..0000000000000
Binary files a/docs/docs/quickstart/image-20220125193340378.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220125193450007.png b/docs/docs/quickstart/image-20220125193450007.png
deleted file mode 100644
index dae1d3d213630..0000000000000
Binary files a/docs/docs/quickstart/image-20220125193450007.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220125193507453.png b/docs/docs/quickstart/image-20220125193507453.png
deleted file mode 100644
index 14b1b8133de2d..0000000000000
Binary files a/docs/docs/quickstart/image-20220125193507453.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220125194354113.png b/docs/docs/quickstart/image-20220125194354113.png
deleted file mode 100644
index 85efb88a20040..0000000000000
Binary files a/docs/docs/quickstart/image-20220125194354113.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220125194510308.png b/docs/docs/quickstart/image-20220125194510308.png
deleted file mode 100644
index 08107205a8629..0000000000000
Binary files a/docs/docs/quickstart/image-20220125194510308.png and /dev/null differ
diff --git a/docs/docs/quickstart/image-20220125200445675.png b/docs/docs/quickstart/image-20220125200445675.png
deleted file mode 100644
index 4737f631221e0..0000000000000
Binary files a/docs/docs/quickstart/image-20220125200445675.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/action-configuration-complete.png b/docs/docs/quickstart/images/action-configuration-complete.png
deleted file mode 100644
index 98f7fc38e43c9..0000000000000
Binary files a/docs/docs/quickstart/images/action-configuration-complete.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/add-step.png b/docs/docs/quickstart/images/add-step.png
deleted file mode 100644
index 72b48177d4457..0000000000000
Binary files a/docs/docs/quickstart/images/add-step.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/add-timestamp.png b/docs/docs/quickstart/images/add-timestamp.png
deleted file mode 100644
index 566a78519622c..0000000000000
Binary files a/docs/docs/quickstart/images/add-timestamp.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/add-trigger.png b/docs/docs/quickstart/images/add-trigger.png
deleted file mode 100644
index 1530f85e0bb42..0000000000000
Binary files a/docs/docs/quickstart/images/add-trigger.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/additional-props.png b/docs/docs/quickstart/images/additional-props.png
deleted file mode 100644
index b1e4aea70e831..0000000000000
Binary files a/docs/docs/quickstart/images/additional-props.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/autocomplete-message.png b/docs/docs/quickstart/images/autocomplete-message.png
deleted file mode 100644
index a4d30712f6178..0000000000000
Binary files a/docs/docs/quickstart/images/autocomplete-message.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/configure-project.png b/docs/docs/quickstart/images/configure-project.png
deleted file mode 100644
index 9ff40967889b5..0000000000000
Binary files a/docs/docs/quickstart/images/configure-project.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/configure-workflow.png b/docs/docs/quickstart/images/configure-workflow.png
deleted file mode 100644
index 45d7afb2a8d87..0000000000000
Binary files a/docs/docs/quickstart/images/configure-workflow.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/connect-google-sheets-account.png b/docs/docs/quickstart/images/connect-google-sheets-account.png
deleted file mode 100644
index caa2c79bded47..0000000000000
Binary files a/docs/docs/quickstart/images/connect-google-sheets-account.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/copy-path.png b/docs/docs/quickstart/images/copy-path.png
deleted file mode 100644
index ec24a23ee9f62..0000000000000
Binary files a/docs/docs/quickstart/images/copy-path.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/create-project.png b/docs/docs/quickstart/images/create-project.png
deleted file mode 100644
index cf60bb63b80f9..0000000000000
Binary files a/docs/docs/quickstart/images/create-project.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/data-inserted.png b/docs/docs/quickstart/images/data-inserted.png
deleted file mode 100644
index e85baf594f5da..0000000000000
Binary files a/docs/docs/quickstart/images/data-inserted.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/deploy-workflow.png b/docs/docs/quickstart/images/deploy-workflow.png
deleted file mode 100644
index b37c72807782e..0000000000000
Binary files a/docs/docs/quickstart/images/deploy-workflow.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/deployed-workflow.png b/docs/docs/quickstart/images/deployed-workflow.png
deleted file mode 100644
index 80c7e55324218..0000000000000
Binary files a/docs/docs/quickstart/images/deployed-workflow.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/empty-sheet.png b/docs/docs/quickstart/images/empty-sheet.png
deleted file mode 100644
index 8d0d915d0970a..0000000000000
Binary files a/docs/docs/quickstart/images/empty-sheet.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/expand-sentiment-results.png b/docs/docs/quickstart/images/expand-sentiment-results.png
deleted file mode 100644
index 7bb88cf3c96c0..0000000000000
Binary files a/docs/docs/quickstart/images/expand-sentiment-results.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/generate-test-event.png b/docs/docs/quickstart/images/generate-test-event.png
deleted file mode 100644
index bc682594f69d0..0000000000000
Binary files a/docs/docs/quickstart/images/generate-test-event.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/google-oauth.png b/docs/docs/quickstart/images/google-oauth.png
deleted file mode 100644
index fafd330b672e6..0000000000000
Binary files a/docs/docs/quickstart/images/google-oauth.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/google-permissions.png b/docs/docs/quickstart/images/google-permissions.png
deleted file mode 100644
index 0162a44a068c9..0000000000000
Binary files a/docs/docs/quickstart/images/google-permissions.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/has-headers.png b/docs/docs/quickstart/images/has-headers.png
deleted file mode 100644
index 91ce17e74bf21..0000000000000
Binary files a/docs/docs/quickstart/images/has-headers.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/inspect-executions.png b/docs/docs/quickstart/images/inspect-executions.png
deleted file mode 100644
index 800021ee35839..0000000000000
Binary files a/docs/docs/quickstart/images/inspect-executions.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/inspect-trigger-event.png b/docs/docs/quickstart/images/inspect-trigger-event.png
deleted file mode 100644
index be4105db565eb..0000000000000
Binary files a/docs/docs/quickstart/images/inspect-trigger-event.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/live-test.png b/docs/docs/quickstart/images/live-test.png
deleted file mode 100644
index ad7fc298e5858..0000000000000
Binary files a/docs/docs/quickstart/images/live-test.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/message-completed.png b/docs/docs/quickstart/images/message-completed.png
deleted file mode 100644
index c62d4b170a784..0000000000000
Binary files a/docs/docs/quickstart/images/message-completed.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/new-workflow.png b/docs/docs/quickstart/images/new-workflow.png
deleted file mode 100644
index 6d9c05bdc59cd..0000000000000
Binary files a/docs/docs/quickstart/images/new-workflow.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/rename-code-step.png b/docs/docs/quickstart/images/rename-code-step.png
deleted file mode 100644
index e647b79fb9fe5..0000000000000
Binary files a/docs/docs/quickstart/images/rename-code-step.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/save-trigger.png b/docs/docs/quickstart/images/save-trigger.png
deleted file mode 100644
index ac5131d287862..0000000000000
Binary files a/docs/docs/quickstart/images/save-trigger.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/select-add-single-row.png b/docs/docs/quickstart/images/select-add-single-row.png
deleted file mode 100644
index 312c991d33e9b..0000000000000
Binary files a/docs/docs/quickstart/images/select-add-single-row.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/select-google-sheets-app.png b/docs/docs/quickstart/images/select-google-sheets-app.png
deleted file mode 100644
index 55a17bd78cec3..0000000000000
Binary files a/docs/docs/quickstart/images/select-google-sheets-app.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/select-sheet-name.png b/docs/docs/quickstart/images/select-sheet-name.png
deleted file mode 100644
index 27fc3f7e14b01..0000000000000
Binary files a/docs/docs/quickstart/images/select-sheet-name.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/select-spreadsheet.png b/docs/docs/quickstart/images/select-spreadsheet.png
deleted file mode 100644
index cb6be0f45083b..0000000000000
Binary files a/docs/docs/quickstart/images/select-spreadsheet.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/sentiment-results.png b/docs/docs/quickstart/images/sentiment-results.png
deleted file mode 100644
index 3aef07456a996..0000000000000
Binary files a/docs/docs/quickstart/images/sentiment-results.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/step-selector-code.png b/docs/docs/quickstart/images/step-selector-code.png
deleted file mode 100644
index 0db2ae3062292..0000000000000
Binary files a/docs/docs/quickstart/images/step-selector-code.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/test-code-step.png b/docs/docs/quickstart/images/test-code-step.png
deleted file mode 100644
index 5c720d256d56f..0000000000000
Binary files a/docs/docs/quickstart/images/test-code-step.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/test-successful.png b/docs/docs/quickstart/images/test-successful.png
deleted file mode 100644
index 363d0a947119c..0000000000000
Binary files a/docs/docs/quickstart/images/test-successful.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/timestamp-added.png b/docs/docs/quickstart/images/timestamp-added.png
deleted file mode 100644
index 7821017fbc4fb..0000000000000
Binary files a/docs/docs/quickstart/images/timestamp-added.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/trigger-continue.png b/docs/docs/quickstart/images/trigger-continue.png
deleted file mode 100644
index b105c873b7cf7..0000000000000
Binary files a/docs/docs/quickstart/images/trigger-continue.png and /dev/null differ
diff --git a/docs/docs/quickstart/images/unique-url.png b/docs/docs/quickstart/images/unique-url.png
deleted file mode 100644
index e820405d736a8..0000000000000
Binary files a/docs/docs/quickstart/images/unique-url.png and /dev/null differ
diff --git a/docs/docs/quickstart/next.png b/docs/docs/quickstart/next.png
deleted file mode 100644
index 90ca885001dec..0000000000000
Binary files a/docs/docs/quickstart/next.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329003353166.png b/docs/docs/quickstart/v2/README/image-20220329003353166.png
deleted file mode 100644
index fce70118c917c..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329003353166.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329003440947.png b/docs/docs/quickstart/v2/README/image-20220329003440947.png
deleted file mode 100644
index dda533905cae3..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329003440947.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329003539441.png b/docs/docs/quickstart/v2/README/image-20220329003539441.png
deleted file mode 100644
index c9568719338bd..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329003539441.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329003748162.png b/docs/docs/quickstart/v2/README/image-20220329003748162.png
deleted file mode 100644
index 25c35ae2fe107..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329003748162.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329003918421.png b/docs/docs/quickstart/v2/README/image-20220329003918421.png
deleted file mode 100644
index 3ab548331a24d..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329003918421.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329004022863.png b/docs/docs/quickstart/v2/README/image-20220329004022863.png
deleted file mode 100644
index 9c2efff743147..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329004022863.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329004301119.png b/docs/docs/quickstart/v2/README/image-20220329004301119.png
deleted file mode 100644
index f0371643d6f74..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329004301119.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329004604153.png b/docs/docs/quickstart/v2/README/image-20220329004604153.png
deleted file mode 100644
index 0c382e5cdbdd4..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329004604153.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329004656744.png b/docs/docs/quickstart/v2/README/image-20220329004656744.png
deleted file mode 100644
index e8441a3bf75d4..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329004656744.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329004810702.png b/docs/docs/quickstart/v2/README/image-20220329004810702.png
deleted file mode 100644
index cf7eae2007c0b..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329004810702.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329004904474.png b/docs/docs/quickstart/v2/README/image-20220329004904474.png
deleted file mode 100644
index c0f59a1defd2b..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329004904474.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329005354310.png b/docs/docs/quickstart/v2/README/image-20220329005354310.png
deleted file mode 100644
index 43bddd3cd17f8..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329005354310.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329005435230.png b/docs/docs/quickstart/v2/README/image-20220329005435230.png
deleted file mode 100644
index 5644505c598e2..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329005435230.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329005510143.png b/docs/docs/quickstart/v2/README/image-20220329005510143.png
deleted file mode 100644
index 8927756ab333b..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329005510143.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329005808138.png b/docs/docs/quickstart/v2/README/image-20220329005808138.png
deleted file mode 100644
index 4e81f48e531bb..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329005808138.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329010012345.png b/docs/docs/quickstart/v2/README/image-20220329010012345.png
deleted file mode 100644
index 4e81f48e531bb..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329010012345.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329010103998.png b/docs/docs/quickstart/v2/README/image-20220329010103998.png
deleted file mode 100644
index 989e7ee3932f8..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329010103998.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329010133943.png b/docs/docs/quickstart/v2/README/image-20220329010133943.png
deleted file mode 100644
index 9b608f120f648..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329010133943.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329010200367.png b/docs/docs/quickstart/v2/README/image-20220329010200367.png
deleted file mode 100644
index 1f272dc2e671c..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329010200367.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329010234048.png b/docs/docs/quickstart/v2/README/image-20220329010234048.png
deleted file mode 100644
index c559f4fa01be6..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329010234048.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329010348936.png b/docs/docs/quickstart/v2/README/image-20220329010348936.png
deleted file mode 100644
index a1453f204bcd3..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329010348936.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329010418111.png b/docs/docs/quickstart/v2/README/image-20220329010418111.png
deleted file mode 100644
index a1453f204bcd3..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329010418111.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329010525727.png b/docs/docs/quickstart/v2/README/image-20220329010525727.png
deleted file mode 100644
index 942c10cee108a..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329010525727.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329010637137.png b/docs/docs/quickstart/v2/README/image-20220329010637137.png
deleted file mode 100644
index 171c303d122ee..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329010637137.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329010721164.png b/docs/docs/quickstart/v2/README/image-20220329010721164.png
deleted file mode 100644
index 9522380c0dec9..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329010721164.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329010858873.png b/docs/docs/quickstart/v2/README/image-20220329010858873.png
deleted file mode 100644
index c439a4f8008d8..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329010858873.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329011023749.png b/docs/docs/quickstart/v2/README/image-20220329011023749.png
deleted file mode 100644
index e51a4b9a6390d..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329011023749.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329011056106.png b/docs/docs/quickstart/v2/README/image-20220329011056106.png
deleted file mode 100644
index 8e356bd0119cb..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329011056106.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329011135355.png b/docs/docs/quickstart/v2/README/image-20220329011135355.png
deleted file mode 100644
index 0212402065201..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329011135355.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329011205036.png b/docs/docs/quickstart/v2/README/image-20220329011205036.png
deleted file mode 100644
index 280ad1339b7d4..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329011205036.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329011311120.png b/docs/docs/quickstart/v2/README/image-20220329011311120.png
deleted file mode 100644
index 280ad1339b7d4..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329011311120.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329011323514.png b/docs/docs/quickstart/v2/README/image-20220329011323514.png
deleted file mode 100644
index 45380c3e161b1..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329011323514.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329011500931.png b/docs/docs/quickstart/v2/README/image-20220329011500931.png
deleted file mode 100644
index 880f0ac035f2c..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329011500931.png and /dev/null differ
diff --git a/docs/docs/quickstart/v2/README/image-20220329011543065.png b/docs/docs/quickstart/v2/README/image-20220329011543065.png
deleted file mode 100644
index 8d5e36481e042..0000000000000
Binary files a/docs/docs/quickstart/v2/README/image-20220329011543065.png and /dev/null differ
diff --git a/docs/docs/scheduling-future-tasks/README.md b/docs/docs/scheduling-future-tasks/README.md
deleted file mode 100644
index fab05f7531f7c..0000000000000
--- a/docs/docs/scheduling-future-tasks/README.md
+++ /dev/null
@@ -1,180 +0,0 @@
-# Scheduling future tasks
-
-Pipedream includes an event source which exposes an HTTP API for scheduling one-time tasks. You can schedule tasks at any timestamp, with second-level precision, up to one year in the future.
-
-[Click here to create this source](https://pipedream.com/sources?action=create&key=pipedream-new-scheduled-tasks), or visit [https://pipedream.com/sources/new](https://pipedream.com/sources/new), select the **Pipedream** app, and the **New Scheduled Tasks** source.
-
-To [schedule a new task](#scheduling-a-task), just send an HTTP `POST` request to your source's endpoint, at the `/schedule` path, with the following format:
-
-```javascript
-{
- "timestamp": "2020-08-21T04:29:00.951Z", // timestamp: an ISO 8601 timestamp
- "message": { "name": "Luke" } // message: any object or string
-}
-```
-
-When the timestamp arrives and the task is invoked, the source will emit the payload passed in your original, scheduled request. This allows you to trigger [a Pipedream workflow](/workflows/) at the scheduled time, passing the `message` and `timestamp` to the workflow as an [incoming event](/workflows/events/).
-
-You can also listen for these events in your own app / infra, by [subscribing to your source's SSE stream](/api/sse/). Each time a scheduled task is emitted from your Pipedream source, it also emits a message to that SSE stream. Any application (a Docker container, a Rails app, etc.) listening to that SSE stream can react to that message to run whatever code you'd like.
-
-[[toc]]
-
-## HTTP API
-
-This source exposes an HTTP endpoint where you can send `POST` requests to schedule new tasks. Your endpoint URL should appear as the **Endpoint** in your source's details, in the **Events** tab.
-
-### Scheduling a task
-
-```
-POST /schedule
-```
-
-#### Pipedream built-in action
-
-Use the **Pipedream Task Scheduler - Schedule Task** Helper Functions action to schedule a new task.
-
-#### Node.js
-
-Use the following code in a Node.js code step:
-
-```javascript
-import { axios } from "@pipedream/platform"
-
-export default defineComponent({
- props: {
- numSeconds: {
- type: "integer",
- label: "Num Seconds",
- description: "How many seconds in the future would you like to schedule the task?",
- },
- secret: {
- type: "string",
- optional: true,
- },
- taskSchedulerURL: {
- type: "string",
- label: "Task Scheduler URL",
- description: "Enter the URL as it appears in the **Endpoint** field of your Task Scheduler source",
- },
- message: {
- type: "string",
- description: "The message / payload to send to your task scheduler. Can be any string or JavaScript object. This message will be emitted by the task scheduler at the specified number of seconds in the future.",
- },
- },
- async run({ $ }) {
- const timestamp = (new Date(+new Date() + (this.numSeconds * 1000))).toISOString()
-
- const headers = {
- "Content-Type": "application/json",
- };
- if (this.secret) {
- headers["x-pd-secret"] = this.secret;
- }
-
- return await axios($, {
- url: `${this.taskSchedulerURL}/schedule`,
- method: "POST",
- headers,
- data: {
- timestamp,
- message: this.message,
- },
- });
- },
-})
-```
-
-#### `cURL`
-
-To schedule a new task, `POST` a JSON object with an [ISO 8601](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) `timestamp` and a `message` to the **`/schedule` path** of your source's HTTP endpoint:
-
-```javascript
-{
- "timestamp": "2020-08-21T04:29:00.951Z", // timestamp: an ISO 8601 timestamp
- "message": { "name": "Luke" } // message can be any object or string
-}
-```
-
-Optionally, if you configured a secret in your source, you'll need to pass that in the `x-pd-secret` header. For example:
-
-```bash
-curl -X POST \
- -H 'Content-Type: application/json' \
- -H 'x-pd-secret: 123' \
- -d '{ "timestamp": "2020-09-18T04:40:59Z", "message": "foo" }' \
- https://endpoint.m.pipedream.net/schedule
-```
-
-Successful task schedule requests yield a `200 OK` response, noting the task was successfully scheduled.
-
-### Cancelling a scheduled task
-
-```
-POST /cancel
-```
-
-When you schedule a task, you'll receive a unique ID assigned to that task in the `id` field of the HTTP response body. That `id` can be passed to the `/cancel` endpoint to cancel that task before its scheduled time arrives.
-
-#### Node.js
-
-Cancel tasks using the following code in a Node.js code step:
-
-```javascript
-import { axios } from "@pipedream/platform"
-
-export default defineComponent({
- props: {
- secret: {
- type: "string",
- optional: true,
- },
- taskSchedulerURL: {
- type: "string",
- label: "Task Scheduler URL",
- description: "Enter the URL as it appears in the **Endpoint** field of your Task Scheduler source",
- },
- taskId: {
- type: "string",
- description: "The ID of the task you'd like to cancel",
- },
- },
- async run({ $ }) {
- const headers = {
- "Content-Type": "application/json",
- };
- if (this.secret) {
- headers["x-pd-secret"] = this.secret;
- }
-
- return await axios($, {
- url: `${this.taskSchedulerURL}/cancel`,
- method: "DELETE",
- headers,
- data: {
- id: this.taskId,
- },
- });
- },
-})
-```
-
-#### `cURL`
-
-```bash
-curl -X POST \
- -H 'Content-Type: application/json' \
- -H 'x-pd-secret: 123' \
- -d '{ "id": "8fceb45b-0241-4d04-9f3f-334679586370" }' \
- https://endpoint.m.pipedream.net/cancel
-```
-
-## Processing scheduled tasks
-
-Scheduled tasks are emitted by the event source as events, which you can consume with
-
-- [Pipedream workflows](/workflows/)
-- [A source-specific SSE stream](/api/sse/)
-- [The Pipedream REST API](/api/rest/)
-- [The Pipedream CLI](/cli/reference/#installing-the-cli)
-
-[See the docs on consuming events from sources](/sources/#consuming-events-from-sources) for more information.
\ No newline at end of file
diff --git a/docs/docs/shopify-faq-2023-10/README.md b/docs/docs/shopify-faq-2023-10/README.md
deleted file mode 100644
index 8a530150bb6b5..0000000000000
--- a/docs/docs/shopify-faq-2023-10/README.md
+++ /dev/null
@@ -1,94 +0,0 @@
-# Update to the Shopify Integration on Pipedream (October 2023)
-
-Effective 2023-10-15, Shopify will no longer allow their customers to access **[Protected Customer Data](https://www.shopify.com/partners/blog/data-protection)** on Pipedream.
-
-[[toc]]
-
-### What is Protected Customer Data?
-**Refer to Shopify's docs for the latest**, but [here is what they say](https://www.shopify.com/partners/blog/data-protection):
-> Protected customer data includes any data that relates directly to a customer or prospective customer, as represented in the API resources. This includes information like total order value, line items in an order, and order shipping events. Apps that require this level of data must implement our [data protection requirements](https://shopify.dev/apps/store/data-protection/protected-customer-data?shpxid=aa95abd6-7955-4C12-6DB9-B3C3859B16AE), including informing merchants of your app’s data use and purpose, applying customer consent decisions, opt-out requests, and more.
-
-> Protected customer fields require individual configuration and approval, in addition to approval for protected customer data. This includes information like name, address, email, and phone number. Apps that require this layer of data will need to abide by [additional requirements](https://shopify.dev/apps/store/data-protection/protected-customer-data?shpxid=aa95abd6-7955-4C12-6DB9-B3C3859B16AE#requirements), including encrypting your data back ups, keeping test and production data separate, and more.
-
-### Why is this data no longer available in Pipedream?
-We've invested significant Product and Engineering time to get our app approved based on Shopify’s requirements, and unfortunately they’ve been unwilling to support the use case of an app-agnostic platform like Pipedream.
-
-### How will this impact my workflows?
-Starting 2023-10-15, the relevant API calls will return a message like this:
-
-
-
-### What do I need to do?
-
-#### Use a custom Shopify app
-- Create a custom Shopify app for your Shopify store and connect it to Pipedream using the [Shopify Developer App](https://pipedream.com/apps/shopify-developer-app#getting-started)
-- Custom apps that are not distributed on Shopify’s app store do not have to meet any of their review requirements, but [can only be connected to a single Shopify store](https://shopify.dev/docs/apps/distribution)
-- Each “app” represents a unique connected account for the Shopify Developer app in Pipedream
-- All of the triggers and actions from the main Shopify app are supported on the [Shopify Developer App](https://pipedream.com/apps/shopify-developer-app/#popular-shopify-developer-app-triggers) (including those that access Protected Customer Data)
-- You’ll need to modify each workflow that uses Shopify to use the Shopify Developer app instead of the main Shopify app
-
-Here's an example of a code step using the **`shopify`** app:
-
-``` javascript
-import { axios } from "@pipedream/platform"
-export default defineComponent({
- props: {
- // Note the prop definition
- shopify: {
- type: "app",
- app: "shopify",
- },
- customerEmail: {
- type: "string"
- label: "Customer Email"
- }
- },
- async run({steps, $}) {
- return await axios($, {
- // Note the version
- url: `https://${this.shopify.$auth.shop_id}.myshopify.com/admin/api/2022-07/customers/search.json`,
- headers: {
- // Note the reference to the auth token
- "X-Shopify-Access-Token": `${this.shopify.$auth.oauth_access_token}`,
- "Content-Type": `application/json`,
- },
- params: {
- query: `email:${this.customerEmail}`
- }
- })
- },
-})
-```
-
-And here's an example of the updated code step that uses a custom app with the **`shopify_developer_app`** instead:
-
-``` javascript
-import { axios } from "@pipedream/platform"
-export default defineComponent({
- props: {
- // Note the updated prop definition
- shopify_developer_app: {
- type: "app",
- app: "shopify_developer_app",
- },
- customerEmail: {
- type: "string"
- label: "Customer Email"
- }
- },
- async run({steps, $}) {
- return await axios($, {
- // Note the updated version
- url: `https://${this.shopify_developer_app.$auth.shop_id}.myshopify.com/admin/api/2023-07/customers/search.json`,
- headers: {
- // Note the updated reference to the auth token
- "X-Shopify-Access-Token": `${this.shopify_developer_app.$auth.access_token}`,
- "Content-Type": `application/json`,
- },
- params: {
- query: `email:${this.customerEmail}`
- }
- })
- },
-})
-```
\ No newline at end of file
diff --git a/docs/docs/snippets/public-node-ips.txt b/docs/docs/snippets/public-node-ips.txt
deleted file mode 100644
index a5762a82581d2..0000000000000
--- a/docs/docs/snippets/public-node-ips.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-3.208.254.105
-3.212.246.173
-3.223.179.131
-3.227.157.189
-3.232.105.55
-3.234.187.126
-18.235.13.182
-34.225.84.31
-52.2.233.8
-52.23.40.208
-52.202.86.9
-52.207.145.190
-54.86.100.50
-54.88.18.81
-54.161.28.250
-107.22.76.172
diff --git a/docs/docs/sources/README.md b/docs/docs/sources/README.md
deleted file mode 100644
index a37628dfaa98c..0000000000000
--- a/docs/docs/sources/README.md
+++ /dev/null
@@ -1,156 +0,0 @@
-# Sources
-
-
-
-
-
-
-
-
-This email includes a link to the error so you can see the data and logs associated with the run. When you inspect the data in the Pipedream UI, you'll see details on the error below the step that threw the error, e.g. the full stack trace.
-
-### Duplicate errors do not trigger duplicate emails
-
-High-volume errors can lead to lots of notifications, so Pipedream only sends at most one email, per error, per workflow, per 24 hour period.
-
-For example, if your workflow throws a `TypeError`, we'll send you an email, but if it continues to throw that same `TypeError`, we won't email you about the duplicate errors until the next day. If a different workflow throws a `TypeError`, you **will** receive an email about that.
-
-## Test mode vs. live mode
-
-When you're editing and testing your workflow, any unhandled errors will **not** raise errors as emails, nor are they forwarded to [error listeners](#process-errors-with-custom-logic-instead-of-email). Error notifications are only sent when a deployed workflow encounters an error on a live event.
-
-## Process errors with custom logic, instead of email
-
-Pipedream exposes a global stream of all errors, raised from all workflows. You can subscribe to this stream, triggering a workflow on every event. This lets you handle errors in a custom way. Instead of sending all errors to email, you can send them to Slack, Discord, AWS, or any other service, and handle them in any custom way.
-
-Watch this video to learn more, or check out the step-by-step docs below.
-
-
-
-
-
-
-## Auto-retry Errors
-
-Customers on the [**Advanced** Plan](https://pipedream.com/pricing) can automatically retry workflows on errors. If any step in your workflow throws an error, Pipedream will retry the workflow from that failed step, re-rerunning the step up to 8 times over a 10 hour span with an [exponential backoff](https://en.wikipedia.org/wiki/Exponential_backoff) strategy.
-
-On error, the step will export a `$summary` property that tells you how many times the step has been retried, and an `$attempt` object with the following properties:
-
-1. `error` — All the details of the error the step threw — the error, the stack, etc.
-2. `cancel_url` — You can call this URL to cancel the retry
-3. `rerun_url` — You can call this URL to proceed with the execution immediately
-4. `resume_ts` — An ISO 8601 timestamp that tells you the timestamp of the next retry
-
-
-
-
-
-
-
-
-
-
-
-
-
-Success!
-To customize this response, check out our docs here
-``` - -When you're processing HTTP requests, you often don't need to issue any special response to the client. We issue this default response so you don't have to write any code to do it yourself. - -#### Customizing the HTTP response - -If you need to issue a custom HTTP response from a workflow, you can either: - -- Use the **Return HTTP response** action, available on the **HTTP / Webhook** app, or -- **Use the `$.respond()` function in a Code or Action step**. - -#### Using the HTTP Response Action - -The HTTP Response action lets you return HTTP responses without the need to write code. You can customize the response status code, and optionally specify response headers and body. - -This action uses `$.respond()` and will always [respond immediately](#returning-a-response-immediately) when called in your workflow. A [response error](#errors-with-http-responses) will still occur if your workflow throws an Error before this action runs. - -#### Using custom code with `$.respond()` - -You can return HTTP responses in Node.js code with the `$.respond()` function. - -`$.respond()` takes a single argument: an object with properties that specify the body, headers, and HTTP status code you'd like to respond with: - -```javascript -defineComponent({ - async run({ steps, $ }) { - await $.respond({ - status: 200, - headers: { "my-custom-header": "value" }, - body: { message: "My custom response" }, // This can be any string, object, Buffer, or Readable stream - }); - }, -}); -``` - -The value of the `body` property can be either a string, object, a [Buffer](https://nodejs.org/api/buffer.html#buffer_buffer) (binary data), or a [Readable stream](https://nodejs.org/api/stream.html#stream_readable_streams). Attempting to return any other data may yield an error. - -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). -- You cannot return a Readable and use the [`immediate: true`](#returning-a-response-immediately) property of `$.respond`. - -#### Timing of `$.respond()` execution - -You may notice some response latency calling workflows that use `$.respond()` from your HTTP client. By default, `$.respond()` is called at the end of your workflow, after all other code is done executing, so it may take some time to issue the response back. - -If you need to issue an HTTP response in the middle of a workflow, see the section on [returning a response immediately](#returning-a-response-immediately). - -#### Returning a response immediately - -You can issue an HTTP response within a workflow, and continue the rest of the workflow execution, by setting the `immediate` property to `true`: - -```javascript -defineComponent({ - async run({ steps, $ }) { - await $.respond({ - immediate: true, - status: 200, - headers: { "my-custom-header": "value" }, - body: { message: "My custom response" }, - }); - }, -}); -``` - -Passing `immediate: true` tells `$.respond()` to issue a response back to the client at this point in the workflow. After the HTTP response has been issued, the remaining code in your workflow runs. - -This can be helpful, for example, when you're building a Slack bot. When you send a message to a bot, Slack requires a `200 OK` response be issued immediately, to confirm receipt: - -```javascript -defineComponent({ - async run({ steps, $ }) { - await $.respond({ - immediate: true, - status: 200, - body: "", - }); - }, -}); -``` - -Once you issue the response, you'll probably want to process the message from the user and respond back with another message or data requested by the user. - -[Here's an example workflow](https://pipedream.com/@dylburger/issue-http-response-immediately-continue-running-workflow-p_pWCWGJ) that shows how to use `immediate: true` and run code after the HTTP response is issued. - -#### Errors with HTTP Responses - -If you use `$.respond()` in a workflow, **you must always make sure `$.respond()` is called in your code**. If you make an HTTP request to a workflow, and run code where `$.respond()` is _not_ called, your endpoint URL will issue a `400 Bad Request` error with the following body: - -``` -No $.respond called in workflow -``` - -This might happen if: - -- You call `$.respond()` conditionally, where it does not run under certain conditions. -- Your workflow throws an Error before you run `$.respond()`. -- You return data in the `body` property that isn't a string, object, or Buffer. - -If you can't handle the `400 Bad Request` error in the application calling your workflow, you can implement `try` / `finally` logic to ensure `$.respond()` always gets called with some default message. For example: - -```javascript -defineComponent({ - async run({ steps, $ }) { - try { - // Your code here that might throw an exception or not run - throw new Error("Whoops, something unexpected happened."); - } finally { - await $.respond({ - status: 200, - body: { - msg: "Default response", - }, - }); - } - }, -}); -``` - -### Errors - -Occasionally, you may encounter errors when sending requests to your endpoint: - -#### Request Entity Too Large - -The endpoint will issue a `413 Payload Too Large` status code when the body of your request exceeds `{{$site.themeConfig.PAYLOAD_SIZE_LIMIT}}`. - -In this case, the request will still appear in the inspector, with information on the error. - -#### API key does not exist - -Your API key is the host part of the endpoint, e.g. the `eniqtww30717` in `eniqtww30717.m.pipedream.net`. If you attempt to send a request to an endpoint that does not exist, we'll return a `404 Not Found` error. - -We'll also issue a 404 response on workflows with an HTTP trigger that have been disabled. - -#### 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. - -You can also [reach out](https://pipedream.com/support/) to inquire about raising this rate limit. - -If you control the application sending requests, you should implement [a backoff strategy](https://medium.com/clover-platform-blog/conquering-api-rate-limiting-dcac5552714d) to temporarily slow the rate of events. - -### Validating requests - -Since you have access to the entire request object, and can issue any HTTP response from a workflow, you can implement custom logic to validate requests using any [Node.js code](/code/nodejs/). - -For example, you can [require requests pass a specific secret in a header](https://pipedream.com/@dylburger/end-a-workflow-early-on-invalid-secret-p_YyCmmK/edit). Just copy the workflow and add your secret as the value of the the **Secret** param. Add the rest of your code in steps below this initial one. Requests must contain the secret: - -```bash -curl -H 'X-Pipedream-Secret: abc123' https://myendpoint.m.pipedream.net -``` - -Otherwise, the workflow will [end early](/code/nodejs/#ending-a-workflow-early). - -Since you can [run any code](/code/) in a workflow, you can implement more complex validation. For example, you could require JWT tokens and validate those tokens using the [`jsonwebtoken` package](https://www.npmjs.com/package/jsonwebtoken) at the start of your workflow. - -## Schedule - -Pipedream allows you to run hosted scheduled jobs — commonly-referred to as a "cron job" — [for free](/pricing/). You can think of workflows like scripts that run on a schedule. - -You can write scheduled job to send an HTTP request, send a scheduled email, run any Node.js or Python code, connect to any API, and much more. Pipedream manages the servers where these jobs run, so you don't have to worry about setting up a server of your own or operating some service just to run code on a schedule. You write the workflow, we take care of the rest. - -### Choosing a Schedule trigger - -To create a new scheduled job, create a new workflow and search for the **Schedule** trigger: - -
-
-
-
-{{...}}{{event.foo}}{{JSON.stringify(event.foo)}}{{event.full_text}}{{...}}{{...}}{{{{...}}{{JSON.stringify(event.foo)}}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-