Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
776 commits
Select commit Hold shift + click to select a range
d23673f
codegen metadata
stainless-app[bot] Feb 26, 2026
4917412
codegen metadata
stainless-app[bot] Feb 26, 2026
b07e2d8
codegen metadata
stainless-app[bot] Feb 26, 2026
632450c
codegen metadata
stainless-app[bot] Feb 26, 2026
b2468b4
codegen metadata
stainless-app[bot] Feb 26, 2026
f0d6140
codegen metadata
stainless-app[bot] Feb 26, 2026
74bbc2b
codegen metadata
stainless-app[bot] Feb 26, 2026
b1a7a48
codegen metadata
stainless-app[bot] Feb 26, 2026
3528114
codegen metadata
stainless-app[bot] Feb 26, 2026
e587cee
codegen metadata
stainless-app[bot] Feb 26, 2026
14e0d74
codegen metadata
stainless-app[bot] Feb 26, 2026
648382f
codegen metadata
stainless-app[bot] Feb 26, 2026
762b1ee
codegen metadata
stainless-app[bot] Feb 26, 2026
774e0fa
codegen metadata
stainless-app[bot] Feb 27, 2026
c1e93bf
codegen metadata
stainless-app[bot] Feb 27, 2026
1d1898b
codegen metadata
stainless-app[bot] Feb 27, 2026
f9d27f7
codegen metadata
stainless-app[bot] Feb 27, 2026
2c22e72
codegen metadata
stainless-app[bot] Feb 27, 2026
26b1d41
codegen metadata
stainless-app[bot] Feb 27, 2026
840a295
codegen metadata
stainless-app[bot] Feb 27, 2026
44bc0f3
codegen metadata
stainless-app[bot] Feb 27, 2026
4ee511e
codegen metadata
stainless-app[bot] Feb 27, 2026
444b1fc
codegen metadata
stainless-app[bot] Feb 27, 2026
08e6e8c
codegen metadata
stainless-app[bot] Feb 27, 2026
fa98a54
chore(internal): move stringifyQuery implementation to internal function
stainless-app[bot] Feb 27, 2026
bbcd0f1
codegen metadata
stainless-app[bot] Feb 27, 2026
555549a
codegen metadata
stainless-app[bot] Feb 27, 2026
6232afb
codegen metadata
stainless-app[bot] Feb 27, 2026
d60eadc
codegen metadata
stainless-app[bot] Feb 27, 2026
90422be
codegen metadata
stainless-app[bot] Feb 27, 2026
4af2bbd
codegen metadata
stainless-app[bot] Feb 27, 2026
080e9bc
codegen metadata
stainless-app[bot] Feb 27, 2026
a1cc44c
codegen metadata
stainless-app[bot] Feb 27, 2026
142bb6d
codegen metadata
stainless-app[bot] Feb 28, 2026
cd0bb65
codegen metadata
stainless-app[bot] Feb 28, 2026
c7473c6
codegen metadata
stainless-app[bot] Feb 28, 2026
8ba55c0
codegen metadata
stainless-app[bot] Feb 28, 2026
646004b
codegen metadata
stainless-app[bot] Feb 28, 2026
035ce62
codegen metadata
stainless-app[bot] Feb 28, 2026
795ed83
codegen metadata
stainless-app[bot] Feb 28, 2026
31f7406
codegen metadata
stainless-app[bot] Feb 28, 2026
b0d1a1d
codegen metadata
stainless-app[bot] Feb 28, 2026
5094b6c
codegen metadata
stainless-app[bot] Feb 28, 2026
1d94b50
codegen metadata
stainless-app[bot] Feb 28, 2026
40a1144
codegen metadata
stainless-app[bot] Feb 28, 2026
fdbe102
codegen metadata
stainless-app[bot] Feb 28, 2026
19a91d9
codegen metadata
stainless-app[bot] Feb 28, 2026
edd0691
codegen metadata
stainless-app[bot] Feb 28, 2026
4e038a2
codegen metadata
stainless-app[bot] Feb 28, 2026
fd70a71
codegen metadata
stainless-app[bot] Feb 28, 2026
e618b4c
codegen metadata
stainless-app[bot] Feb 28, 2026
0968936
codegen metadata
stainless-app[bot] Mar 1, 2026
8a4c3af
codegen metadata
stainless-app[bot] Mar 1, 2026
6522a85
codegen metadata
stainless-app[bot] Mar 1, 2026
1e17e75
codegen metadata
stainless-app[bot] Mar 1, 2026
5f86f25
codegen metadata
stainless-app[bot] Mar 1, 2026
5ee5e24
codegen metadata
stainless-app[bot] Mar 1, 2026
71c946d
codegen metadata
stainless-app[bot] Mar 1, 2026
6f061b9
codegen metadata
stainless-app[bot] Mar 1, 2026
6c246f5
codegen metadata
stainless-app[bot] Mar 1, 2026
9dca300
codegen metadata
stainless-app[bot] Mar 1, 2026
d6bba6f
codegen metadata
stainless-app[bot] Mar 1, 2026
9f8688f
codegen metadata
stainless-app[bot] Mar 1, 2026
643c0d2
codegen metadata
stainless-app[bot] Mar 1, 2026
70783e4
codegen metadata
stainless-app[bot] Mar 1, 2026
b88550a
codegen metadata
stainless-app[bot] Mar 1, 2026
6b066c3
codegen metadata
stainless-app[bot] Mar 1, 2026
24f61df
codegen metadata
stainless-app[bot] Mar 1, 2026
21e1702
codegen metadata
stainless-app[bot] Mar 1, 2026
3a790d2
codegen metadata
stainless-app[bot] Mar 2, 2026
8ac32b6
codegen metadata
stainless-app[bot] Mar 2, 2026
356a4c8
codegen metadata
stainless-app[bot] Mar 2, 2026
fcc032b
codegen metadata
stainless-app[bot] Mar 2, 2026
9d2cedb
codegen metadata
stainless-app[bot] Mar 2, 2026
0c830d4
codegen metadata
stainless-app[bot] Mar 2, 2026
e27f95a
codegen metadata
stainless-app[bot] Mar 2, 2026
b2234c1
codegen metadata
stainless-app[bot] Mar 2, 2026
93ea9f7
codegen metadata
stainless-app[bot] Mar 2, 2026
28123c6
codegen metadata
stainless-app[bot] Mar 2, 2026
58ae073
codegen metadata
stainless-app[bot] Mar 2, 2026
1afbca7
codegen metadata
stainless-app[bot] Mar 2, 2026
65eafc8
codegen metadata
stainless-app[bot] Mar 2, 2026
6f99cd8
codegen metadata
stainless-app[bot] Mar 2, 2026
1b2c10f
codegen metadata
stainless-app[bot] Mar 2, 2026
556319b
codegen metadata
stainless-app[bot] Mar 2, 2026
bd07735
codegen metadata
stainless-app[bot] Mar 2, 2026
5b6112e
codegen metadata
stainless-app[bot] Mar 2, 2026
1a4116a
codegen metadata
stainless-app[bot] Mar 2, 2026
dd01959
codegen metadata
stainless-app[bot] Mar 2, 2026
f5eb685
codegen metadata
stainless-app[bot] Mar 2, 2026
6c33d00
codegen metadata
stainless-app[bot] Mar 3, 2026
4d1f6b7
codegen metadata
stainless-app[bot] Mar 3, 2026
0b8c220
codegen metadata
stainless-app[bot] Mar 3, 2026
5f42573
codegen metadata
stainless-app[bot] Mar 3, 2026
dda3ce0
codegen metadata
stainless-app[bot] Mar 3, 2026
f6e6c7a
codegen metadata
stainless-app[bot] Mar 3, 2026
98a0dab
codegen metadata
stainless-app[bot] Mar 3, 2026
ec9bf17
codegen metadata
stainless-app[bot] Mar 3, 2026
7775dab
codegen metadata
stainless-app[bot] Mar 3, 2026
70b9b0d
codegen metadata
stainless-app[bot] Mar 3, 2026
a00ab64
codegen metadata
stainless-app[bot] Mar 3, 2026
de203b3
codegen metadata
stainless-app[bot] Mar 3, 2026
f95e346
codegen metadata
stainless-app[bot] Mar 3, 2026
576aa5c
codegen metadata
stainless-app[bot] Mar 3, 2026
788aac9
codegen metadata
stainless-app[bot] Mar 3, 2026
d9eef49
codegen metadata
stainless-app[bot] Mar 3, 2026
dd22368
codegen metadata
stainless-app[bot] Mar 3, 2026
6e8569c
codegen metadata
stainless-app[bot] Mar 3, 2026
fabba0e
codegen metadata
stainless-app[bot] Mar 3, 2026
722011d
codegen metadata
stainless-app[bot] Mar 3, 2026
2e83b0f
codegen metadata
stainless-app[bot] Mar 3, 2026
cddc44f
codegen metadata
stainless-app[bot] Mar 4, 2026
3cc727a
codegen metadata
stainless-app[bot] Mar 4, 2026
0be8bc0
codegen metadata
stainless-app[bot] Mar 4, 2026
5602acb
codegen metadata
stainless-app[bot] Mar 4, 2026
a56a887
codegen metadata
stainless-app[bot] Mar 4, 2026
4dc2c97
codegen metadata
stainless-app[bot] Mar 4, 2026
2bff95f
codegen metadata
stainless-app[bot] Mar 4, 2026
7dc375d
codegen metadata
stainless-app[bot] Mar 4, 2026
26aa471
codegen metadata
stainless-app[bot] Mar 4, 2026
4105077
codegen metadata
stainless-app[bot] Mar 4, 2026
1f0bdac
codegen metadata
stainless-app[bot] Mar 4, 2026
c3380f6
codegen metadata
stainless-app[bot] Mar 4, 2026
49ed6a8
codegen metadata
stainless-app[bot] Mar 4, 2026
99685bc
codegen metadata
stainless-app[bot] Mar 4, 2026
9c1be0b
codegen metadata
stainless-app[bot] Mar 4, 2026
16adfe6
codegen metadata
stainless-app[bot] Mar 4, 2026
a85dcd4
codegen metadata
stainless-app[bot] Mar 4, 2026
624fad2
codegen metadata
stainless-app[bot] Mar 4, 2026
f0226a4
codegen metadata
stainless-app[bot] Mar 4, 2026
a51e575
codegen metadata
stainless-app[bot] Mar 4, 2026
56efe94
codegen metadata
stainless-app[bot] Mar 4, 2026
3a17b0f
codegen metadata
stainless-app[bot] Mar 5, 2026
7e737de
codegen metadata
stainless-app[bot] Mar 5, 2026
9acecd3
codegen metadata
stainless-app[bot] Mar 5, 2026
7c3581f
codegen metadata
stainless-app[bot] Mar 5, 2026
40d3fa5
codegen metadata
stainless-app[bot] Mar 5, 2026
3b39d1e
codegen metadata
stainless-app[bot] Mar 5, 2026
c933c01
codegen metadata
stainless-app[bot] Mar 5, 2026
992daed
codegen metadata
stainless-app[bot] Mar 5, 2026
566f892
codegen metadata
stainless-app[bot] Mar 5, 2026
0265562
codegen metadata
stainless-app[bot] Mar 5, 2026
205240f
codegen metadata
stainless-app[bot] Mar 5, 2026
d76208a
codegen metadata
stainless-app[bot] Mar 5, 2026
e401e24
codegen metadata
stainless-app[bot] Mar 5, 2026
51e7dcd
codegen metadata
stainless-app[bot] Mar 5, 2026
df3ef9d
codegen metadata
stainless-app[bot] Mar 5, 2026
9daa485
codegen metadata
stainless-app[bot] Mar 5, 2026
566b748
codegen metadata
stainless-app[bot] Mar 5, 2026
d515a70
codegen metadata
stainless-app[bot] Mar 6, 2026
2a600a6
codegen metadata
stainless-app[bot] Mar 6, 2026
4a25ea7
codegen metadata
stainless-app[bot] Mar 6, 2026
dcf8e87
codegen metadata
stainless-app[bot] Mar 6, 2026
e8dfb8b
codegen metadata
stainless-app[bot] Mar 6, 2026
7a6ecaf
codegen metadata
stainless-app[bot] Mar 6, 2026
88d33b8
codegen metadata
stainless-app[bot] Mar 6, 2026
fbb980d
codegen metadata
stainless-app[bot] Mar 6, 2026
f7a28fc
codegen metadata
stainless-app[bot] Mar 6, 2026
1868224
codegen metadata
stainless-app[bot] Mar 6, 2026
b88f703
codegen metadata
stainless-app[bot] Mar 6, 2026
fc4329a
codegen metadata
stainless-app[bot] Mar 6, 2026
325bb6a
codegen metadata
stainless-app[bot] Mar 6, 2026
2e8dfa3
codegen metadata
stainless-app[bot] Mar 6, 2026
2074da4
codegen metadata
stainless-app[bot] Mar 6, 2026
9671948
codegen metadata
stainless-app[bot] Mar 6, 2026
7d943c9
codegen metadata
stainless-app[bot] Mar 6, 2026
777c526
codegen metadata
stainless-app[bot] Mar 6, 2026
ab79f2f
codegen metadata
stainless-app[bot] Mar 6, 2026
c0a0238
codegen metadata
stainless-app[bot] Mar 6, 2026
7bbaf98
codegen metadata
stainless-app[bot] Mar 6, 2026
3b2834b
codegen metadata
stainless-app[bot] Mar 7, 2026
8a5b36d
codegen metadata
stainless-app[bot] Mar 7, 2026
0b8f63e
chore(internal): codegen related update
stainless-app[bot] Mar 7, 2026
1445d82
codegen metadata
stainless-app[bot] Mar 7, 2026
5df7978
codegen metadata
stainless-app[bot] Mar 7, 2026
be1887c
codegen metadata
stainless-app[bot] Mar 7, 2026
22767fe
codegen metadata
stainless-app[bot] Mar 7, 2026
e34d08c
codegen metadata
stainless-app[bot] Mar 7, 2026
4b4beff
codegen metadata
stainless-app[bot] Mar 7, 2026
1eecfd8
codegen metadata
stainless-app[bot] Mar 7, 2026
6914f1a
codegen metadata
stainless-app[bot] Mar 7, 2026
3148787
codegen metadata
stainless-app[bot] Mar 7, 2026
e02baaa
codegen metadata
stainless-app[bot] Mar 7, 2026
7ea996d
codegen metadata
stainless-app[bot] Mar 7, 2026
43fe77c
codegen metadata
stainless-app[bot] Mar 7, 2026
20752cf
codegen metadata
stainless-app[bot] Mar 7, 2026
4fe26f8
codegen metadata
stainless-app[bot] Mar 7, 2026
c79f69f
chore(ci): skip uploading artifacts on stainless-internal branches
stainless-app[bot] Mar 7, 2026
56529a8
fix(client): preserve URL params already embedded in path
stainless-app[bot] Mar 7, 2026
1451e87
codegen metadata
stainless-app[bot] Mar 7, 2026
f06650e
codegen metadata
stainless-app[bot] Mar 8, 2026
0ded41f
codegen metadata
stainless-app[bot] Mar 8, 2026
8e4ea5a
codegen metadata
stainless-app[bot] Mar 8, 2026
0722c66
codegen metadata
stainless-app[bot] Mar 8, 2026
8bfe32d
codegen metadata
stainless-app[bot] Mar 8, 2026
a22ae13
codegen metadata
stainless-app[bot] Mar 8, 2026
3451eaa
codegen metadata
stainless-app[bot] Mar 8, 2026
a60cce9
codegen metadata
stainless-app[bot] Mar 8, 2026
922ce18
codegen metadata
stainless-app[bot] Mar 8, 2026
9a2e629
codegen metadata
stainless-app[bot] Mar 8, 2026
127e438
codegen metadata
stainless-app[bot] Mar 8, 2026
93d7d5c
codegen metadata
stainless-app[bot] Mar 8, 2026
7398bd3
codegen metadata
stainless-app[bot] Mar 8, 2026
4bd1bae
codegen metadata
stainless-app[bot] Mar 8, 2026
d3a141e
codegen metadata
stainless-app[bot] Mar 8, 2026
dd76acf
codegen metadata
stainless-app[bot] Mar 8, 2026
4af92e3
codegen metadata
stainless-app[bot] Mar 8, 2026
acb9bf0
codegen metadata
stainless-app[bot] Mar 8, 2026
194a914
codegen metadata
stainless-app[bot] Mar 8, 2026
bb56488
codegen metadata
stainless-app[bot] Mar 8, 2026
8c480bb
codegen metadata
stainless-app[bot] Mar 8, 2026
3b114ee
codegen metadata
stainless-app[bot] Mar 9, 2026
4878a25
codegen metadata
stainless-app[bot] Mar 9, 2026
73b1d05
codegen metadata
stainless-app[bot] Mar 9, 2026
81aa548
codegen metadata
stainless-app[bot] Mar 9, 2026
a85ed78
codegen metadata
stainless-app[bot] Mar 9, 2026
95fd7f1
codegen metadata
stainless-app[bot] Mar 9, 2026
487e181
codegen metadata
stainless-app[bot] Mar 9, 2026
9cee99b
codegen metadata
stainless-app[bot] Mar 9, 2026
6260c4f
codegen metadata
stainless-app[bot] Mar 9, 2026
8d2311b
codegen metadata
stainless-app[bot] Mar 9, 2026
40a64a0
codegen metadata
stainless-app[bot] Mar 9, 2026
0d531d7
codegen metadata
stainless-app[bot] Mar 9, 2026
29d1f19
codegen metadata
stainless-app[bot] Mar 9, 2026
c6174dc
codegen metadata
stainless-app[bot] Mar 9, 2026
e7ebe52
codegen metadata
stainless-app[bot] Mar 9, 2026
f50f490
codegen metadata
stainless-app[bot] Mar 9, 2026
701226b
codegen metadata
stainless-app[bot] Mar 9, 2026
119f533
codegen metadata
stainless-app[bot] Mar 9, 2026
3515222
codegen metadata
stainless-app[bot] Mar 9, 2026
06c0d7e
codegen metadata
stainless-app[bot] Mar 10, 2026
335e645
codegen metadata
stainless-app[bot] Mar 10, 2026
1015728
codegen metadata
stainless-app[bot] Mar 10, 2026
148dc26
codegen metadata
stainless-app[bot] Mar 10, 2026
7baa4c6
codegen metadata
stainless-app[bot] Mar 10, 2026
3d46895
chore(internal): update dependencies to address dependabot vulnerabil…
stainless-app[bot] Mar 10, 2026
40cf5fd
codegen metadata
stainless-app[bot] Mar 10, 2026
af3408a
codegen metadata
stainless-app[bot] Mar 10, 2026
a980826
codegen metadata
stainless-app[bot] Mar 10, 2026
90f0623
codegen metadata
stainless-app[bot] Mar 10, 2026
e3bb241
codegen metadata
stainless-app[bot] Mar 10, 2026
7cd768a
codegen metadata
stainless-app[bot] Mar 10, 2026
7355c79
codegen metadata
stainless-app[bot] Mar 10, 2026
cba2d67
codegen metadata
stainless-app[bot] Mar 10, 2026
83bf919
codegen metadata
stainless-app[bot] Mar 10, 2026
ede6659
chore(internal): tweak CI branches
stainless-app[bot] Mar 17, 2026
6c7fd81
chore(internal): update gitignore
stainless-app[bot] Mar 24, 2026
0f4fb57
chore(ci): skip lint on metadata-only changes
stainless-app[bot] Mar 25, 2026
f1dfc41
chore(internal): codegen related update
stainless-app[bot] Mar 28, 2026
602e1a4
release: 0.2.4
stainless-app[bot] Mar 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 16 additions & 10 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
name: CI
on:
push:
branches-ignore:
- 'generated'
- 'codegen/**'
- 'integrated/**'
- 'stl-preview-head/**'
- 'stl-preview-base/**'
branches:
- '**'
- '!integrated/**'
- '!stl-preview-head/**'
- '!stl-preview-base/**'
- '!generated'
- '!codegen/**'
- 'codegen/stl/**'
pull_request:
branches-ignore:
- 'stl-preview-head/**'
Expand All @@ -17,7 +19,7 @@ jobs:
timeout-minutes: 10
name: lint
runs-on: ${{ github.repository == 'stainless-sdks/tembo-typescript' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata')
steps:
- uses: actions/checkout@v6

Expand All @@ -36,7 +38,7 @@ jobs:
timeout-minutes: 5
name: build
runs-on: ${{ github.repository == 'stainless-sdks/tembo-typescript' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata')
permissions:
contents: read
id-token: write
Expand All @@ -55,14 +57,18 @@ jobs:
run: ./scripts/build

- name: Get GitHub OIDC Token
if: github.repository == 'stainless-sdks/tembo-typescript'
if: |-
github.repository == 'stainless-sdks/tembo-typescript' &&
!startsWith(github.ref, 'refs/heads/stl/')
id: github-oidc
uses: actions/github-script@v8
with:
script: core.setOutput('github_token', await core.getIDToken());

- name: Upload tarball
if: github.repository == 'stainless-sdks/tembo-typescript'
if: |-
github.repository == 'stainless-sdks/tembo-typescript' &&
!startsWith(github.ref, 'refs/heads/stl/')
env:
URL: https://pkg.stainless.com/s
AUTH: ${{ steps.github-oidc.outputs.github_token }}
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
.prism.log
.stdy.log
node_modules
yarn-error.log
codegen.log
Expand Down
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.2.3"
".": "0.2.4"
}
4 changes: 2 additions & 2 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 5
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/tembo%2Ftembo-9b8cb3dfa5ac0831288e44315d73abbc569bd8e16c362c3cd301ac0e075e9005.yml
openapi_spec_hash: b8703b1d6f38472eb6259b00274ceb3e
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/tembo%2Ftembo-d0470e549143350eff47a1ed14a20494f23f9b73cbf2d3ba5f9a8d0a1d37dc51.yml
openapi_spec_hash: d96053bb51891201f023fc55d1d8a8e8
config_hash: 8fba1d45a848bce88e9564ab8a960838
21 changes: 21 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,26 @@
# Changelog

## 0.2.4 (2026-03-28)

Full Changelog: [v0.2.3...v0.2.4](https://github.com/tembo/sdk/compare/v0.2.3...v0.2.4)

### Bug Fixes

* **client:** preserve URL params already embedded in path ([56529a8](https://github.com/tembo/sdk/commit/56529a847ccd6028e30f7bebcd46b58046e2a297))
* **docs/contributing:** correct pnpm link command ([75edc3f](https://github.com/tembo/sdk/commit/75edc3f544adce0837d96a23da45693712bf8351))


### Chores

* **ci:** skip lint on metadata-only changes ([0f4fb57](https://github.com/tembo/sdk/commit/0f4fb5747f69b0c0a4e99dd82f3f75e8c9db9980))
* **ci:** skip uploading artifacts on stainless-internal branches ([c79f69f](https://github.com/tembo/sdk/commit/c79f69f39500a34b0fa1893a609a00a060f81ccb))
* **internal:** codegen related update ([f1dfc41](https://github.com/tembo/sdk/commit/f1dfc41778e3179db22dcbf4e5705579b08e390a))
* **internal:** codegen related update ([0b8f63e](https://github.com/tembo/sdk/commit/0b8f63e4fb0d01fd53493a455d1c7c6086463a81))
* **internal:** move stringifyQuery implementation to internal function ([fa98a54](https://github.com/tembo/sdk/commit/fa98a54e9875cc40ae2f31f2adbc2fd2b325a12b))
* **internal:** tweak CI branches ([ede6659](https://github.com/tembo/sdk/commit/ede6659f8aa825fa58c1cc62ff0fa0f74df52dd0))
* **internal:** update dependencies to address dependabot vulnerabilities ([3d46895](https://github.com/tembo/sdk/commit/3d4689542463a7d74896c8c2a64b27478d81a35f))
* **internal:** update gitignore ([6c7fd81](https://github.com/tembo/sdk/commit/6c7fd819771812f517bfd9a018b2fa7e0a72f984))

## 0.2.3 (2026-01-31)

Full Changelog: [v0.2.2...v0.2.3](https://github.com/tembo/sdk/compare/v0.2.2...v0.2.3)
Expand Down
8 changes: 1 addition & 7 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,17 +60,11 @@ $ yarn link @tembo-io/sdk
# With pnpm
$ pnpm link --global
$ cd ../my-package
$ pnpm link -global @tembo-io/sdk
$ pnpm link --global @tembo-io/sdk
```

## Running tests

Most tests require you to [set up a mock server](https://github.com/stoplightio/prism) against the OpenAPI spec to run the tests.

```sh
$ npx prism mock path/to/your/openapi.yml
```

```sh
$ yarn run test
```
Expand Down
13 changes: 12 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@tembo-io/sdk",
"version": "0.2.3",
"version": "0.2.4",
"description": "The official TypeScript library for the Tembo API",
"author": "Tembo <darren@tembo.io>",
"types": "dist/index.d.ts",
Expand Down Expand Up @@ -50,6 +50,17 @@
"typescript": "5.8.3",
"typescript-eslint": "8.31.1"
},
"overrides": {
"minimatch": "^9.0.5"
},
"pnpm": {
"overrides": {
"minimatch": "^9.0.5"
}
},
"resolutions": {
"minimatch": "^9.0.5"
},
"exports": {
".": {
"import": "./dist/index.mjs",
Expand Down
41 changes: 0 additions & 41 deletions scripts/mock

This file was deleted.

46 changes: 0 additions & 46 deletions scripts/test
Original file line number Diff line number Diff line change
Expand Up @@ -4,53 +4,7 @@ set -e

cd "$(dirname "$0")/.."

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color

function prism_is_running() {
curl --silent "http://localhost:4010" >/dev/null 2>&1
}

kill_server_on_port() {
pids=$(lsof -t -i tcp:"$1" || echo "")
if [ "$pids" != "" ]; then
kill "$pids"
echo "Stopped $pids."
fi
}

function is_overriding_api_base_url() {
[ -n "$TEST_API_BASE_URL" ]
}

if ! is_overriding_api_base_url && ! prism_is_running ; then
# When we exit this script, make sure to kill the background mock server process
trap 'kill_server_on_port 4010' EXIT

# Start the dev server
./scripts/mock --daemon
fi

if is_overriding_api_base_url ; then
echo -e "${GREEN}✔ Running tests against ${TEST_API_BASE_URL}${NC}"
echo
elif ! prism_is_running ; then
echo -e "${RED}ERROR:${NC} The test suite will not run without a mock Prism server"
echo -e "running against your OpenAPI spec."
echo
echo -e "To run the server, pass in the path or url of your OpenAPI"
echo -e "spec to the prism command:"
echo
echo -e " \$ ${YELLOW}npm exec --package=@stainless-api/prism-cli@5.15.0 -- prism mock path/to/your.openapi.yml${NC}"
echo

exit 1
else
echo -e "${GREEN}✔ Mock prism server is running with your OpenAPI spec${NC}"
echo
fi

echo "==> Running tests"
./node_modules/.bin/jest "$@"
52 changes: 28 additions & 24 deletions src/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import type { APIResponseProps } from './internal/parse';
import { getPlatformHeaders } from './internal/detect-platform';
import * as Shims from './internal/shims';
import * as Opts from './internal/request-options';
import { stringifyQuery } from './internal/utils/query';
import { VERSION } from './version';
import * as Errors from './core/error';
import * as Uploads from './core/uploads';
Expand Down Expand Up @@ -223,21 +224,8 @@ export class Tembo {
/**
* Basic re-implementation of `qs.stringify` for primitive types.
*/
protected stringifyQuery(query: Record<string, unknown>): string {
return Object.entries(query)
.filter(([_, value]) => typeof value !== 'undefined')
.map(([key, value]) => {
if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
}
if (value === null) {
return `${encodeURIComponent(key)}=`;
}
throw new Errors.TemboError(
`Cannot stringify type ${typeof value}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`,
);
})
.join('&');
protected stringifyQuery(query: object | Record<string, unknown>): string {
return stringifyQuery(query);
}

private getUserAgent(): string {
Expand Down Expand Up @@ -269,12 +257,13 @@ export class Tembo {
: new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));

const defaultQuery = this.defaultQuery();
if (!isEmptyObj(defaultQuery)) {
query = { ...defaultQuery, ...query };
const pathQuery = Object.fromEntries(url.searchParams);
if (!isEmptyObj(defaultQuery) || !isEmptyObj(pathQuery)) {
query = { ...pathQuery, ...defaultQuery, ...query };
}

if (typeof query === 'object' && query && !Array.isArray(query)) {
url.search = this.stringifyQuery(query as Record<string, unknown>);
url.search = this.stringifyQuery(query);
}

return url.toString();
Expand Down Expand Up @@ -458,7 +447,7 @@ export class Tembo {
loggerFor(this).info(`${responseInfo} - ${retryMessage}`);

const errText = await response.text().catch((err: any) => castToError(err).message);
const errJSON = safeJSON(errText);
const errJSON = safeJSON(errText) as any;
const errMessage = errJSON ? undefined : errText;

loggerFor(this).debug(
Expand Down Expand Up @@ -499,9 +488,10 @@ export class Tembo {
controller: AbortController,
): Promise<Response> {
const { signal, method, ...options } = init || {};
if (signal) signal.addEventListener('abort', () => controller.abort());
const abort = this._makeAbort(controller);
if (signal) signal.addEventListener('abort', abort, { once: true });

const timeout = setTimeout(() => controller.abort(), ms);
const timeout = setTimeout(abort, ms);

const isReadableBody =
((globalThis as any).ReadableStream && options.body instanceof (globalThis as any).ReadableStream) ||
Expand Down Expand Up @@ -578,9 +568,9 @@ export class Tembo {
}
}

// If the API asks us to wait a certain amount of time (and it's a reasonable amount),
// just do what it says, but otherwise calculate a default
if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {
// If the API asks us to wait a certain amount of time, just do what it
// says, but otherwise calculate a default
if (timeoutMillis === undefined) {
const maxRetries = options.maxRetries ?? this.maxRetries;
timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);
}
Expand Down Expand Up @@ -668,6 +658,12 @@ export class Tembo {
return headers.values;
}

private _makeAbort(controller: AbortController) {
// note: we can't just inline this method inside `fetchWithTimeout()` because then the closure
// would capture all request options, and cause a memory leak.
return () => controller.abort();
}

private buildBody({ options: { body, headers: rawHeaders } }: { options: FinalRequestOptions }): {
bodyHeaders: HeadersLike;
body: BodyInit | undefined;
Expand Down Expand Up @@ -700,6 +696,14 @@ export class Tembo {
(Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))
) {
return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body as AsyncIterable<Uint8Array>) };
} else if (
typeof body === 'object' &&
headers.values.get('content-type') === 'application/x-www-form-urlencoded'
) {
return {
bodyHeaders: { 'content-type': 'application/x-www-form-urlencoded' },
body: this.stringifyQuery(body),
};
} else {
return this.#encoder({ body, headers });
}
Expand Down
6 changes: 6 additions & 0 deletions src/internal/parse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,12 @@ export async function defaultParseResponse<T>(client: Tembo, props: APIResponseP
const mediaType = contentType?.split(';')[0]?.trim();
const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');
if (isJSON) {
const contentLength = response.headers.get('content-length');
if (contentLength === '0') {
// if there is no content we can't do anything
return undefined as T;
}

const json = await response.json();
return json as T;
}
Expand Down
1 change: 1 addition & 0 deletions src/internal/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ export * from './utils/env';
export * from './utils/log';
export * from './utils/uuid';
export * from './utils/sleep';
export * from './utils/query';
23 changes: 23 additions & 0 deletions src/internal/utils/query.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

import { TemboError } from '../../core/error';

/**
* Basic re-implementation of `qs.stringify` for primitive types.
*/
export function stringifyQuery(query: object | Record<string, unknown>) {
return Object.entries(query)
.filter(([_, value]) => typeof value !== 'undefined')
.map(([key, value]) => {
if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
}
if (value === null) {
return `${encodeURIComponent(key)}=`;
}
throw new TemboError(
`Cannot stringify type ${typeof value}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`,
);
})
.join('&');
}
Loading
Loading