Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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: 116
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/courier/courier-389afcb57163d4391f72d240c33a82d0522b958400603f137981480cda54558a.yml
openapi_spec_hash: c861d7fcd81ad5bfdaf8da0f5a84f497
config_hash: e40fec72c1ab30fded57c222ace689b5
18 changes: 18 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
# Changelog

## 7.11.0 (2026-05-14)

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

### Features

* **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))


### 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))

## 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
59 changes: 53 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
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
3 changes: 1 addition & 2 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,7 +36,6 @@
"@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",
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