Skip to content

Commit f5bcfc9

Browse files
authored
feat(sdk-package): call apis directly from client sdk (#14699)
Currently, the Pipedream Connect SDK only supports calling API endpoints from the server. This means that all client side calls need to be proxied by a trusted server. This PR adds support for calling most API endpoints directly from the client.
1 parent c5eb625 commit f5bcfc9

File tree

15 files changed

+1783
-735
lines changed

15 files changed

+1783
-735
lines changed

packages/sdk/CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
<!-- markdownlint-disable MD024 -->
22
# Changelog
33

4+
## [1.0.6] - 2024-11-20
5+
6+
### Changed
7+
8+
- Use client Connect tokens to make api calls directly from the client.
9+
- Deprecated the `environments` property on `createFrontendClient` since it is now
10+
stored in the token
11+
412
## [1.0.5] - 2024-11-18
513

614
### Changed

packages/sdk/package-lock.json

Lines changed: 70 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/sdk/package.json

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,27 @@
11
{
22
"name": "@pipedream/sdk",
3-
"version": "1.0.5",
3+
"version": "1.0.6",
44
"description": "Pipedream SDK",
5-
"main": "dist/server/index.js",
6-
"module": "dist/server/index.js",
7-
"types": "dist/server/index.d.ts",
8-
"browser": "./dist/browser/index.js",
5+
"main": "dist/server/server/index.js",
6+
"module": "dist/server/server/index.js",
7+
"types": "dist/server/server/index.d.ts",
8+
"browser": "./dist/browser/browser/index.js",
99
"exports": {
1010
".": {
11-
"browser": "./dist/browser/index.js",
12-
"import": "./dist/server/index.js",
13-
"require": "./dist/server/index.js",
14-
"default": "./dist/server/index.js"
11+
"browser": "./dist/browser/browser/index.js",
12+
"import": "./dist/server/server/index.js",
13+
"require": "./dist/server/server/index.js",
14+
"default": "./dist/server/server/index.js"
15+
},
16+
"./server": {
17+
"import": "./dist/server/server/index.js",
18+
"require": "./dist/server/server/index.js",
19+
"types": "./dist/server/server/index.d.ts"
20+
},
21+
"./browser": {
22+
"import": "./dist/browser/browser/index.js",
23+
"require": "./dist/browser/browser/index.js",
24+
"types": "./dist/browser/browser/index.d.ts"
1525
}
1626
},
1727
"engines": {
@@ -25,28 +35,35 @@
2535
"access": "public"
2636
},
2737
"scripts": {
38+
"lint": "eslint --fix --ext .ts src",
2839
"prepublish": "rm -rf dist && npm run build",
2940
"build": "npm run build:node && npm run build:browser",
3041
"build:node": "tsc -p tsconfig.node.json",
3142
"build:browser": "tsc -p tsconfig.browser.json",
3243
"test": "jest",
33-
"watch": "nodemon --watch src --ext ts --exec 'npm run build'"
44+
"watch": "nodemon --watch src --ext ts --exec 'npm run build'",
45+
"cli": "node dist/server/server/cli.js"
3446
},
3547
"files": [
3648
"dist"
3749
],
3850
"devDependencies": {
3951
"@types/fetch-mock": "^7.3.8",
4052
"@types/jest": "^29.5.13",
41-
"@types/node": "^20.14.9",
53+
"@types/node": "^20.17.6",
54+
"@types/rails__actioncable": "^6.1.11",
4255
"@types/simple-oauth2": "^5.0.7",
56+
"@types/ws": "^8.5.13",
4357
"jest": "^29.7.0",
4458
"jest-fetch-mock": "^3.0.3",
4559
"nodemon": "^3.1.7",
4660
"ts-jest": "^29.2.5",
4761
"typescript": "^5.5.2"
4862
},
4963
"dependencies": {
50-
"simple-oauth2": "^5.1.0"
64+
"@rails/actioncable": "^8.0.0",
65+
"commander": "^12.1.0",
66+
"simple-oauth2": "^5.1.0",
67+
"ws": "^8.18.0"
5168
}
5269
}

packages/sdk/src/browser/async.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { AsyncResponseManager } from "../shared/async";
2+
import type { AsyncResponseManagerOpts } from "../shared/async";
3+
4+
export type BrowserAsyncResponseManagerOpts = {
5+
apiHost: string;
6+
getConnectToken: () => Promise<string>;
7+
};
8+
9+
export class BrowserAsyncResponseManager extends AsyncResponseManager {
10+
private browserOpts: BrowserAsyncResponseManagerOpts;
11+
12+
constructor(opts: BrowserAsyncResponseManagerOpts) {
13+
super();
14+
this.browserOpts = opts;
15+
}
16+
17+
protected override async getOpts(): Promise<AsyncResponseManagerOpts> {
18+
const token = await this.browserOpts.getConnectToken();
19+
const url = `wss://${this.browserOpts.apiHost}/websocket?ctok=${token}`;
20+
return {
21+
url,
22+
};
23+
}
24+
}

0 commit comments

Comments
 (0)