Skip to content

Commit 7c19ad6

Browse files
Adding SDK examples to components API docs
1 parent e51b8b1 commit 7c19ad6

File tree

3 files changed

+235
-55
lines changed

3 files changed

+235
-55
lines changed

docs-v2/pages/connect/api-proxy.mdx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { Tabs } from 'nextra/components'
21
import Callout from '@/components/Callout'
32

43
# Connect API Proxy

docs-v2/pages/connect/components.mdx

Lines changed: 230 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,68 @@ You can skip steps 1 and 2 if you already know the component you want to use or
3838

3939
<Steps>
4040

41+
### Authenticate to the Pipedream API
42+
43+
Before sending requests to the API, make sure to authenticate using a Pipedream OAuth client:
44+
45+
<Tabs items={['Node.js', 'HTTP (cURL)']}>
46+
<Tabs.Tab>
47+
```javascript
48+
// Initialize the Pipedream client with the SDK
49+
50+
import { createBackendClient } from "@pipedream/sdk/server";
51+
52+
const pd = createBackendClient({
53+
environment: "development | production",
54+
credentials: {
55+
clientId: "{oauth_client_id}",
56+
clientSecret: "{oauth_client_secret}",
57+
},
58+
projectId: "{your_project_id}"
59+
});
60+
```
61+
</Tabs.Tab>
62+
<Tabs.Tab>
63+
```bash
64+
# Get an access token for the REST API
65+
66+
curl -X POST https://api.pipedream.com/v1/oauth/token \
67+
-H "Content-Type: application/json" \
68+
-d '{
69+
"grant_type": "client_credentials",
70+
"client_id": "{your_oauth_client_id}",
71+
"client_secret": "{your_oauth_client_secret}"
72+
}'
73+
```
74+
</Tabs.Tab>
75+
</Tabs>
76+
77+
<Callout type="info">
78+
All subsequent examples assume that you've either initialized the SDK client or have a valid access token.
79+
</Callout>
80+
4181
### Find the app you want to use
4282

4383
In order to find the right trigger or action to configure and run, you first need to find the app. In this example, we'll search for `gitlab`.
4484

45-
```text
46-
GET /v1/connect/apps?q=gitlab
85+
<Tabs items={['Node.js', 'HTTP (cURL)']}>
86+
<Tabs.Tab>
87+
```javascript
88+
const apps = await pd.getApps({ q: "gitlab" });
89+
90+
// Parse and return the data you need
91+
```
92+
</Tabs.Tab>
93+
<Tabs.Tab>
94+
```bash
95+
curl -X https://api.pipedream.com/v1/apps?q=gitlab \
96+
-H "Content-Type: application/json" \
97+
-H "Authorization: Bearer {access_token}"
98+
99+
# Parse and return the data you need
47100
```
101+
</Tabs.Tab>
102+
</Tabs>
48103

49104
Here's the response:
50105

@@ -77,9 +132,25 @@ Here's the response:
77132

78133
Once you have the app you want to use, now you can list the triggers and/or actions for that app. We'll list the actions for Gitlab and we'll pass the `name_slug` `gitlab` as the `app`.
79134

80-
```text
81-
GET /actions?app=gitlab
135+
<Tabs items={['Node.js', 'HTTP (cURL)']}>
136+
<Tabs.Tab>
137+
```javascript
138+
const components = await pd.getComponents({ q: "gitlab" });
139+
140+
// Parse and return the data you need
82141
```
142+
</Tabs.Tab>
143+
<Tabs.Tab>
144+
```bash
145+
curl -X https://api.pipedream.com/v1/connect/{project_id}/actions?app=gitlab \
146+
-H "Content-Type: application/json" \
147+
-H "X-PD-Environment: development" \
148+
-H "Authorization: Bearer {access_token}"
149+
150+
# Parse and return the data you need
151+
```
152+
</Tabs.Tab>
153+
</Tabs>
83154

84155
Here's the response:
85156

@@ -156,9 +227,25 @@ details.
156227
As an example, the following API call will return the structure of the **List
157228
Commits** action for Gitlab:
158229

159-
```text
160-
GET /v1/connect/components/gitlab-list-commits
230+
<Tabs items={['Node.js', 'HTTP (cURL)']}>
231+
<Tabs.Tab>
232+
```javascript
233+
const component = await pd.getComponent({ key: "gitlab-list-commits" });
234+
235+
// Parse and return the data you need
236+
```
237+
</Tabs.Tab>
238+
<Tabs.Tab>
239+
```bash
240+
curl -X https://api.pipedream.com/v1/connect/{project_id}/components/gitlab-list-commits \
241+
-H "Content-Type: application/json" \
242+
-H "X-PD-Environment: development" \
243+
-H "Authorization: Bearer {access_token}"
244+
245+
# Parse and return the data you need
161246
```
247+
</Tabs.Tab>
248+
</Tabs>
162249

163250
The response will contain the component's structure, including its user-friendly name,
164251
version, and most importantly, the configuration options the component accepts
@@ -217,10 +304,6 @@ steps, focused on getting the right input parameters (aka
217304
Configuring each prop for a component often involves an API call to retrieve the possible values,
218305
unless the values that a prop can take are static or free-form. The endpoint is accessible at:
219306

220-
```text
221-
POST /v1/connect/components/configure
222-
```
223-
224307
Typically, the options for a prop are linked to a specific user's account. Each
225308
of these props implements an `options` method that retrieves the necessary
226309
options from the third-party API, formats them, and sends them back in the
@@ -232,31 +315,56 @@ The payload for the configuration API call must contain the following fields:
232315
2. `id`: the component's unique ID (aka **key**)
233316
3. `prop_name`: the name of the prop you want to configure
234317
4. `configured_props`: an object containing the props that have already been
235-
configured. The initial configuration call must contain the ID of the account
236-
(aka `authProvisionId`) that your user has connected to the target app (see
237-
[this section](workflows#configure-accounts-to-use-your-end-users-auth) for
238-
more details on how to create these accounts).
318+
configured. The initial configuration call must contain the ID of the account
319+
(aka `authProvisionId`) that your user has connected to the target app (see
320+
[this section](workflows#configure-accounts-to-use-your-end-users-auth) for
321+
more details on how to create these accounts).
239322

240323
We'll use the [**List Commits** component for
241324
Gitlab](https://github.com/PipedreamHQ/pipedream/blob/master/components/gitlab/actions/list-commits/list-commits.mjs#L4)
242325
as an example, to illustrate a call that retrieves the options for the
243-
`projectId` prop of that component. The payload sent to the configuration API
244-
would look like this:
245-
246-
```json
247-
{
248-
"external_user_id": "demo-34c13d13-a31e-4a3d-8b63-0ac954671095",
249-
"id": "gitlab-list-commits",
250-
"prop_name": "projectId",
251-
"configured_props": {
252-
"gitlab": {
253-
"authProvisionId": "apn_oOhaBlD"
326+
`projectId` prop of that component:
327+
328+
<Tabs items={['Node.js', 'HTTP (cURL)']}>
329+
<Tabs.Tab>
330+
```javascript
331+
const { options } = await pd.configureComponent({
332+
externalUserId: "abc-123",
333+
id: "gitlab-list-commits",
334+
propName: "projectId",
335+
configuredProps: {
336+
gitlab: {
337+
authProvisionId: "apn_kVh9AoD",
254338
}
255339
}
256-
}
340+
});
341+
342+
// Parse and return the data you need
343+
```
344+
</Tabs.Tab>
345+
<Tabs.Tab>
346+
```bash
347+
curl -X POST https://api.pipedream.com/v1/connect/{project_id}/components/configure \
348+
-H "Content-Type: application/json" \
349+
-H "X-PD-Environment: development" \
350+
-H "Authorization: Bearer {access_token}" \
351+
-d '{
352+
"external_user_id": "abc-123",
353+
"id": "gitlab-list-commits",
354+
"prop_name": "projectId",
355+
"configured_props": {
356+
"gitlab": {
357+
"authProvisionId": "apn_kVh9AoD"
358+
}
359+
}
360+
}'
361+
# Parse and return the data you need
257362
```
363+
</Tabs.Tab>
364+
</Tabs>
365+
258366

259-
The response will contain the possible values (and their human-readable labels
367+
The response contains the possible values (and their human-readable labels
260368
when applicable) for the prop, as well as any possible errors that might have
261369
occurred. The response for the request above would look like this:
262370

@@ -348,7 +456,7 @@ The set of props that a component can accept might not be static, and may change
348456
depending on the values of prior props. Props that behave this way are called
349457
[dynamic props](/components/api#dynamic-props), and they need to be configured
350458
in a different way. Props that are dynamic will have a `reloadProps` attribute
351-
set to `true` in the component's code.
459+
set to `true` in the component's definition.
352460

353461
After configuring a dynamic prop, the set of subsequent props must be recomputed
354462
(or reloaded), which is possible using the following API call:
@@ -452,8 +560,8 @@ supports two types of components: [actions](/components#actions) and
452560

453561
Actions are components that perform a task by taking an input either during
454562
[configuration](#configure-the-component) and/or during invocation (usually both), and
455-
produce a result. Sources are very similar, but the difference is that they are
456-
not invoked directly by Pipedream users, but rather by events that happen on a
563+
produces a result. Sources are very similar, but the difference is that they are
564+
not invoked directly by end users directly, but rather by events that happen on a
457565
third-party service. For example, the "New File" source for Google Drive will be
458566
triggered every time a new file is created in a specific folder in Google Drive,
459567
then will emit an event for you to consume.
@@ -472,11 +580,11 @@ used for configuring a prop, with the exception of the `prop_name` attribute
472580
```json
473581
{
474582
"async_handle": "xFfBakdTGTkI",
475-
"external_user_id": "demo-20a1b80e-23a5-4d4d-a8ef-c91cdbd0dad9",
583+
"external_user_id": "abc-123",
476584
"id": "gitlab-list-commits",
477585
"configured_props": {
478586
"gitlab": {
479-
"authProvisionId": "apn_JjhWOl0"
587+
"authProvisionId": "apn_kVh9AoD"
480588
},
481589
"projectId": 45672541,
482590
"refName": "main"
@@ -487,9 +595,45 @@ used for configuring a prop, with the exception of the `prop_name` attribute
487595
To run the action with this configuration, simply send it as the request payload
488596
to the following endpoint:
489597

490-
```text
491-
POST /v1/connect/actions/run
598+
<Tabs items={['Node.js', 'HTTP (cURL)']}>
599+
<Tabs.Tab>
600+
```javascript
601+
const resp = await pd.runAction({
602+
externalUserId: "abc-123",
603+
id: "gitlab-list-commits",
604+
configuredProps: {
605+
gitlab: {
606+
authProvisionId: "apn_kVh9AoD",
607+
},
608+
projectId: 45672541,
609+
refName: "main"
610+
}
611+
});
612+
613+
// Parse and return the data you need
614+
```
615+
</Tabs.Tab>
616+
<Tabs.Tab>
617+
```bash
618+
curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
619+
-H "Content-Type: application/json" \
620+
-H "X-PD-Environment: development" \
621+
-H "Authorization: Bearer {access_token}" \
622+
-d '{
623+
"external_user_id": "abc-123",
624+
"id": "gitlab-list-commits",
625+
"prop_name": "projectId",
626+
"configured_props": {
627+
"gitlab": {
628+
"authProvisionId": "apn_kVh9AoD"
629+
}
630+
}
631+
}'
632+
633+
# Parse and return the data you need
492634
```
635+
</Tabs.Tab>
636+
</Tabs>
493637

494638
The output of executing the action will be a JSON object containing the
495639
following fields:
@@ -534,19 +678,17 @@ above:
534678

535679
Because sources are exercised by events that happen on a third-party service,
536680
their semantics are different from actions. Once a source is configured, it must
537-
be deployed in order to start listening for events. You might be asking where do
538-
those events go, and you'd be right to ask. That's the reason why when deploying
539-
a source you must provide a URL where the source will send these events, similar
540-
to how a webhook works.
681+
be deployed in order to start listening for events. When deploying a source, you
682+
can define either a webhook URL or a Pipedream workflow ID to consume those events.
541683

542684
Deploying a source is done by sending a payload similar to the one used for
543-
running an action, with the addition of the webhook URL mentioned above. Using
685+
running an action, with the addition of the webhook URL or workflow ID. Using
544686
the **New Issue (Instant)** source for Gitlab as an example, the payload would
545687
look something like this:
546688

547689
```json
548690
{
549-
"external_user_id": "demo-20a1b80e-23a5-4d4d-a8ef-c91cdbd0dad9",
691+
"external_user_id": "abc-123",
550692
"id": "gitlab-new-issue",
551693
"prop_name": "http",
552694
"configured_props": {
@@ -559,11 +701,53 @@ look something like this:
559701
}
560702
```
561703

562-
The endpoint to deploy a source is:
704+
Deploy a source for your users:
705+
706+
<Tabs items={['Node.js', 'HTTP (cURL)']}>
707+
<Tabs.Tab>
708+
```javascript
709+
const { data: deployedTrigger } = await pd.deployTrigger({
710+
externalUserId: "abc-123",
711+
id: "gitlab-new-issue",
712+
propName: "projectId",
713+
configuredProps: {
714+
gitlab: {
715+
authProvisionId: "apn_kVh9AoD",
716+
}
717+
},
718+
webhookUrl: "https://events.example.com/gitlab-new-issue"
719+
});
563720

564-
```text
565-
POST /v1/connect/triggers/deploy
721+
const {
722+
id: triggerId, // The unique ID of the deployed trigger
723+
name: triggerName, // The name of the deployed trigger
724+
owner_id: userId, // The unique ID in Pipedream of your user
725+
} = deployedTrigger;
726+
727+
// Parse and return the data you need
566728
```
729+
</Tabs.Tab>
730+
<Tabs.Tab>
731+
```bash
732+
curl -X POST https://api.pipedream.com/v1/connect/{project_id}/components/triggers/deploy \
733+
-H "Content-Type: application/json" \
734+
-H "X-PD-Environment: development" \
735+
-H "Authorization: Bearer {access_token}" \
736+
-d '{
737+
"external_user_id": "abc-123",
738+
"id": "gitlab-new-issue",
739+
"prop_name": "projectId",
740+
"configured_props": {
741+
"gitlab": {
742+
"authProvisionId": "apn_kVh9AoD"
743+
}
744+
},
745+
"webhook_url": "https://events.example.com/gitlab-new-issue"
746+
}'
747+
# Parse and return the data you need
748+
```
749+
</Tabs.Tab>
750+
</Tabs>
567751

568752
If the source deployment succeeds, the response will contain the information
569753
regarding the state of the source, including all the component's props metadata,
@@ -622,11 +806,9 @@ this:
622806
}
623807
```
624808

625-
In the example above, the source ID is `dc_dAuGmW7`, which can be used to delete
626-
the source in the future:
809+
In the example above, the source ID is `dc_dAuGmW7`, which can be used to delete,
810+
retrieve, or update the source in the future.
627811

628-
```text
629-
DELETE /v1/connect/deployed-triggers/dc_dAuGmW7?external_user_id=demo-20a1b80e-23a5-4d4d-a8ef-c91cdbd0dad9
630-
```
812+
Refer to the [full Connect API reference](/connect/api#components) for questions and additional examples.
631813

632814
</Steps>

0 commit comments

Comments
 (0)