Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
1625ecf
chore(internal): more robust bootstrap script
stainless-app[bot] Apr 23, 2026
ee1ac34
chore(formatter): run prettier and eslint separately
stainless-app[bot] Apr 26, 2026
6197029
chore(internal): codegen related update
stainless-app[bot] Apr 28, 2026
e7a078f
feat: support setting headers via env
stainless-app[bot] Apr 28, 2026
94cc158
chore(format): run eslint and prettier separately
stainless-app[bot] Apr 29, 2026
11c441f
codegen metadata
stainless-app[bot] May 1, 2026
90a80f7
codegen metadata
stainless-app[bot] May 1, 2026
ce91d48
chore: redact api-key headers in debug logs
stainless-app[bot] May 8, 2026
c659b6c
ci: pin GitHub Actions to commit SHAs
stainless-app[bot] May 13, 2026
297d6eb
feat(api): add journeys CRUD/publish/versioning, templates sub-resour…
stainless-app[bot] May 14, 2026
c5769b4
feat: [SUP-607] Add DELETE endpoint for Courier Create tenant templates
stainless-app[bot] May 15, 2026
a182e73
codegen metadata
stainless-app[bot] May 18, 2026
03e957a
codegen metadata
stainless-app[bot] May 18, 2026
2b66f73
codegen metadata
stainless-app[bot] May 18, 2026
4dc51bc
codegen metadata
stainless-app[bot] May 18, 2026
c9a62bf
feat: [C-18380] Journeys API reference: copy + naming cleanup
stainless-app[bot] May 19, 2026
2140f59
chore(tests): remove redundant File import
stainless-app[bot] May 19, 2026
9bedc1a
fix(typescript): upgrade tsc-multi so that it works with Node 26
stainless-app[bot] May 19, 2026
7eab464
codegen metadata
stainless-app[bot] May 19, 2026
b5006e2
release: 7.11.0
stainless-app[bot] May 19, 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
14 changes: 7 additions & 7 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ jobs:
runs-on: ${{ github.repository == 'stainless-sdks/courier-typescript' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
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
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Set up Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: '20'

Expand All @@ -43,10 +43,10 @@ jobs:
contents: read
id-token: write
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Set up Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: '20'

Expand All @@ -61,7 +61,7 @@ jobs:
github.repository == 'stainless-sdks/courier-typescript' &&
!startsWith(github.ref, 'refs/heads/stl/')
id: github-oidc
uses: actions/github-script@v8
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
with:
script: core.setOutput('github_token', await core.getIDToken());

Expand All @@ -80,10 +80,10 @@ jobs:
runs-on: ${{ github.repository == 'stainless-sdks/courier-typescript' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Set up Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: '20'

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/publish-npm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v6
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Set up Node
uses: actions/setup-node@v3
uses: actions/setup-node@3235b876344d2a9aa001b8d1453c930bba69e610 # v3.9.1
with:
node-version: '20'

Expand Down
3 changes: 1 addition & 2 deletions .github/workflows/release-doctor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,10 @@ jobs:
if: github.repository == 'trycourier/courier-node' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || startsWith(github.head_ref, 'release-please') || github.head_ref == 'next')

steps:
- uses: actions/checkout@v6
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Check release environment
run: |
bash ./bin/check-release-environment
env:
NPM_TOKEN: ${{ secrets.COURIER_NPM_TOKEN || secrets.NPM_TOKEN }}

2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "7.10.2"
".": "7.11.0"
}
8 changes: 4 additions & 4 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 103
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/courier%2Fcourier-3f78581b4e078a1f620d9f587f18d77bcde6d20f56b0e4ae798648f4236494fb.yml
openapi_spec_hash: 6bd33e0396d85e11bb46f0d549af93a3
config_hash: afcc4f6f8c33ca3f338589e32e086f56
configured_endpoints: 117
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/courier/courier-8e7ad3d889c555ff9c381518b627b24b85e3eb7376bdc3689adc7a96ec78e537.yml
openapi_spec_hash: 53b3680aae719487c56efaa782bbe5b2
config_hash: 10bd597dd6cc89023541bc551b6532b8
26 changes: 26 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,31 @@
# Changelog

## 7.11.0 (2026-05-19)

Full Changelog: [v7.10.2...v7.11.0](https://github.com/trycourier/courier-node/compare/v7.10.2...v7.11.0)

### Features

* [C-18380] Journeys API reference: copy + naming cleanup ([c9a62bf](https://github.com/trycourier/courier-node/commit/c9a62bfc0acd7ca403b5dac30872d8fbb1bd36e5))
* [SUP-607] Add DELETE endpoint for Courier Create tenant templates ([c5769b4](https://github.com/trycourier/courier-node/commit/c5769b4bfd047d0b3914f35403a2a6bac9a207c4))
* **api:** add journeys CRUD/publish/versioning, templates sub-resource, types ([297d6eb](https://github.com/trycourier/courier-node/commit/297d6eb106b494cb56f3722a124a096736f1f83a))
* support setting headers via env ([e7a078f](https://github.com/trycourier/courier-node/commit/e7a078f8e44790bf9332c5c06891d3fa9b148ee7))


### Bug Fixes

* **typescript:** upgrade tsc-multi so that it works with Node 26 ([9bedc1a](https://github.com/trycourier/courier-node/commit/9bedc1a1c47359a0751e52f5f3c52592d7c896ed))


### Chores

* **format:** run eslint and prettier separately ([94cc158](https://github.com/trycourier/courier-node/commit/94cc1583b4dcfe832929c142efaf5bf8b371b42f))
* **formatter:** run prettier and eslint separately ([ee1ac34](https://github.com/trycourier/courier-node/commit/ee1ac34270e0607eb8f6f6ea884b37a7c9167e3d))
* **internal:** codegen related update ([6197029](https://github.com/trycourier/courier-node/commit/619702960b9076a75bc7138a5218d06f4b3c5dc3))
* **internal:** more robust bootstrap script ([1625ecf](https://github.com/trycourier/courier-node/commit/1625ecf85ab5a9550217acb1b6655c9ea5611fa3))
* redact api-key headers in debug logs ([ce91d48](https://github.com/trycourier/courier-node/commit/ce91d48d8a4be2500a03433a03bafd8142d78e08))
* **tests:** remove redundant File import ([2140f59](https://github.com/trycourier/courier-node/commit/2140f596a0a5436be9dceeac7d1ae40143ce12c7))

## 7.10.2 (2026-04-14)

Full Changelog: [v7.10.1...v7.10.2](https://github.com/trycourier/courier-node/compare/v7.10.1...v7.10.2)
Expand Down
60 changes: 54 additions & 6 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -178,15 +178,62 @@ Methods:

Types:

- <code><a href="./src/resources/journeys.ts">Journey</a></code>
- <code><a href="./src/resources/journeys.ts">JourneysInvokeRequest</a></code>
- <code><a href="./src/resources/journeys.ts">JourneysInvokeResponse</a></code>
- <code><a href="./src/resources/journeys.ts">JourneysListResponse</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">CreateJourneyRequest</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">Journey</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneyAINode</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneyAPIInvokeTriggerNode</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneyConditionAtom</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneyConditionGroup</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneyConditionNestedGroup</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneyConditionsField</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneyDelayDurationNode</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneyDelayUntilNode</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneyExitNode</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneyFetchGetDeleteNode</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneyFetchPostPutNode</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneyMergeStrategy</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneyNode</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneyPublishRequest</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneyResponse</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneySegmentTriggerNode</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneySendNode</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneyState</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneyTemplateCreateRequest</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneyTemplateGetResponse</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneyTemplateListResponse</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneyTemplatePublishRequest</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneyTemplateReplaceRequest</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneyTemplateSummary</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneyThrottleDynamicNode</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneyThrottleStaticNode</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneyVersionItem</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneyVersionsListResponse</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneysInvokeRequest</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneysInvokeResponse</a></code>
- <code><a href="./src/resources/journeys/journeys.ts">JourneysListResponse</a></code>

Methods:

- <code title="get /journeys">client.journeys.<a href="./src/resources/journeys.ts">list</a>({ ...params }) -> JourneysListResponse</code>
- <code title="post /journeys/{templateId}/invoke">client.journeys.<a href="./src/resources/journeys.ts">invoke</a>(templateID, { ...params }) -> JourneysInvokeResponse</code>
- <code title="post /journeys">client.journeys.<a href="./src/resources/journeys/journeys.ts">create</a>({ ...params }) -> JourneyResponse</code>
- <code title="get /journeys/{templateId}">client.journeys.<a href="./src/resources/journeys/journeys.ts">retrieve</a>(templateID, { ...params }) -> JourneyResponse</code>
- <code title="get /journeys">client.journeys.<a href="./src/resources/journeys/journeys.ts">list</a>({ ...params }) -> JourneysListResponse</code>
- <code title="delete /journeys/{templateId}">client.journeys.<a href="./src/resources/journeys/journeys.ts">archive</a>(templateID) -> void</code>
- <code title="post /journeys/{templateId}/invoke">client.journeys.<a href="./src/resources/journeys/journeys.ts">invoke</a>(templateID, { ...params }) -> JourneysInvokeResponse</code>
- <code title="get /journeys/{templateId}/versions">client.journeys.<a href="./src/resources/journeys/journeys.ts">listVersions</a>(templateID) -> JourneyVersionsListResponse</code>
- <code title="post /journeys/{templateId}/publish">client.journeys.<a href="./src/resources/journeys/journeys.ts">publish</a>(templateID, { ...params }) -> JourneyResponse</code>
- <code title="put /journeys/{templateId}">client.journeys.<a href="./src/resources/journeys/journeys.ts">replace</a>(templateID, { ...params }) -> JourneyResponse</code>

## Templates

Methods:

- <code title="post /journeys/{templateId}/templates">client.journeys.templates.<a href="./src/resources/journeys/templates.ts">create</a>(templateID, { ...params }) -> JourneyTemplateGetResponse</code>
- <code title="get /journeys/{templateId}/templates/{notificationId}">client.journeys.templates.<a href="./src/resources/journeys/templates.ts">retrieve</a>(notificationID, { ...params }) -> JourneyTemplateGetResponse</code>
- <code title="get /journeys/{templateId}/templates">client.journeys.templates.<a href="./src/resources/journeys/templates.ts">list</a>(templateID, { ...params }) -> JourneyTemplateListResponse</code>
- <code title="delete /journeys/{templateId}/templates/{notificationId}">client.journeys.templates.<a href="./src/resources/journeys/templates.ts">archive</a>(notificationID, { ...params }) -> void</code>
- <code title="get /journeys/{templateId}/templates/{notificationId}/versions">client.journeys.templates.<a href="./src/resources/journeys/templates.ts">listVersions</a>(notificationID, { ...params }) -> NotificationTemplateVersionListResponse</code>
- <code title="post /journeys/{templateId}/templates/{notificationId}/publish">client.journeys.templates.<a href="./src/resources/journeys/templates.ts">publish</a>(notificationID, { ...params }) -> void</code>
- <code title="put /journeys/{templateId}/templates/{notificationId}">client.journeys.templates.<a href="./src/resources/journeys/templates.ts">replace</a>(notificationID, { ...params }) -> JourneyTemplateGetResponse</code>

# Brands

Expand Down Expand Up @@ -445,6 +492,7 @@ Methods:

- <code title="get /tenants/{tenant_id}/templates/{template_id}">client.tenants.templates.<a href="./src/resources/tenants/templates/templates.ts">retrieve</a>(templateID, { ...params }) -> BaseTemplateTenantAssociation</code>
- <code title="get /tenants/{tenant_id}/templates">client.tenants.templates.<a href="./src/resources/tenants/templates/templates.ts">list</a>(tenantID, { ...params }) -> TemplateListResponse</code>
- <code title="delete /tenants/{tenant_id}/templates/{template_id}">client.tenants.templates.<a href="./src/resources/tenants/templates/templates.ts">delete</a>(templateID, { ...params }) -> void</code>
- <code title="post /tenants/{tenant_id}/templates/{template_id}/publish">client.tenants.templates.<a href="./src/resources/tenants/templates/templates.ts">publish</a>(templateID, { ...params }) -> PostTenantTemplatePublishResponse</code>
- <code title="put /tenants/{tenant_id}/templates/{template_id}">client.tenants.templates.<a href="./src/resources/tenants/templates/templates.ts">replace</a>(templateID, { ...params }) -> PutTenantTemplateResponse</code>

Expand Down
3 changes: 0 additions & 3 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
// @ts-check
import tseslint from 'typescript-eslint';
import unusedImports from 'eslint-plugin-unused-imports';
import prettier from 'eslint-plugin-prettier';

export default tseslint.config(
{
Expand All @@ -14,11 +13,9 @@ export default tseslint.config(
plugins: {
'@typescript-eslint': tseslint.plugin,
'unused-imports': unusedImports,
prettier,
},
rules: {
'no-unused-vars': 'off',
'prettier/prettier': 'error',
'unused-imports/no-unused-imports': 'error',
'no-restricted-imports': [
'error',
Expand Down
5 changes: 2 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@trycourier/courier",
"version": "7.10.2",
"version": "7.11.0",
"description": "The official TypeScript library for the Courier API",
"author": "Courier <support@courier.com>",
"types": "dist/index.d.ts",
Expand Down Expand Up @@ -36,15 +36,14 @@
"@typescript-eslint/eslint-plugin": "8.31.1",
"@typescript-eslint/parser": "8.31.1",
"eslint": "^9.39.1",
"eslint-plugin-prettier": "^5.4.1",
"eslint-plugin-unused-imports": "^4.1.4",
"iconv-lite": "^0.6.3",
"jest": "^29.4.0",
"prettier": "^3.0.0",
"publint": "^0.2.12",
"ts-jest": "^29.1.0",
"ts-node": "^10.5.0",
"tsc-multi": "https://github.com/stainless-api/tsc-multi/releases/download/v1.1.9/tsc-multi.tgz",
"tsc-multi": "https://github.com/stainless-api/tsc-multi/releases/download/v1.1.11/tsc-multi.tgz",
"tsconfig-paths": "^4.0.0",
"tslib": "^2.8.1",
"typescript": "5.8.3",
Expand Down
2 changes: 1 addition & 1 deletion scripts/bootstrap
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ set -e

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

if [ -f "Brewfile" ] && [ "$(uname -s)" = "Darwin" ] && [ "$SKIP_BREW" != "1" ] && [ -t 0 ]; then
if [ -f "Brewfile" ] && [ "$(uname -s)" = "Darwin" ] && [ "${SKIP_BREW:-}" != "1" ] && [ -t 0 ]; then
brew bundle check >/dev/null 2>&1 || {
echo -n "==> Install Homebrew dependencies? (y/N): "
read -r response
Expand Down
9 changes: 3 additions & 6 deletions scripts/fast-format
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,7 @@ if ! [ -z "$ESLINT_FILES" ]; then
fi

echo "==> Running prettier --write"
# format things eslint didn't
PRETTIER_FILES="$(grep '\.\(js\|json\)$' "$FILE_LIST" || true)"
if ! [ -z "$PRETTIER_FILES" ]; then
echo "$PRETTIER_FILES" | xargs ./node_modules/.bin/prettier \
--write --cache --cache-strategy metadata --no-error-on-unmatched-pattern \
'!**/dist' '!**/*.ts' '!**/*.mts' '!**/*.cts' '!**/*.js' '!**/*.mjs' '!**/*.cjs'
if ! [ -z "$FILE_LIST" ]; then
cat "$FILE_LIST" | xargs ./node_modules/.bin/prettier \
--write --cache --cache-strategy metadata --no-error-on-unmatched-pattern --ignore-unknown
fi
3 changes: 1 addition & 2 deletions scripts/format
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,4 @@ echo "==> Running eslint --fix"
./node_modules/.bin/eslint --fix .

echo "==> Running prettier --write"
# format things eslint didn't
./node_modules/.bin/prettier --write --cache --cache-strategy metadata . '!**/dist' '!**/*.ts' '!**/*.mts' '!**/*.cts' '!**/*.js' '!**/*.mjs' '!**/*.cjs'
./node_modules/.bin/prettier --write --cache --cache-strategy metadata .
3 changes: 3 additions & 0 deletions scripts/lint
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ set -e

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

echo "==> Running prettier --check"
./node_modules/.bin/prettier --check .

echo "==> Running eslint"
./node_modules/.bin/eslint .

Expand Down
9 changes: 8 additions & 1 deletion scripts/utils/postprocess-files.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,19 @@ async function postprocess() {

// strip out lib="dom", types="node", and types="react" references; these
// are needed at build time, but would pollute the user's TS environment
const transformed = code.replace(
let transformed = code.replace(
/^ *\/\/\/ *<reference +(lib="dom"|types="(node|react)").*?\n/gm,
// replace with same number of characters to avoid breaking source maps
(match) => ' '.repeat(match.length - 1) + '\n',
);

// TypeScript's declaration emitter collapses /** @ts-ignore */ onto the same
// line as the type declaration, which doesn't work. So we convert to // @ts-ignore
// on its own line to properly suppresses errors.
if (file.endsWith('.d.ts') || file.endsWith('.d.mts') || file.endsWith('.d.cts')) {
transformed = transformed.replace(/\/\*\* @ts-ignore\b[^*]*\*\/ /gm, '// @ts-ignore\n');
}

if (transformed !== code) {
console.error(`wrote ${path.relative(process.cwd(), file)}`);
await fs.promises.writeFile(file, transformed, 'utf8');
Expand Down
Loading
Loading