Skip to content

Commit d5b37df

Browse files
committed
## Typescript SDK Changes Detected:
* `novu.translations.create()`: * `request.createtranslationrequestdto.content` **Changed** **Breaking** ⚠️ * `response.content` **Changed** **Breaking** ⚠️ * `novu.translations.retrieve()`: `response.content` **Changed** **Breaking** ⚠️ * `novu.translations.upload()`: `request` **Changed** **Breaking** ⚠️ * `novu.translations.master.retrieve()`: `response` **Changed** **Breaking** ⚠️ * `novu.translations.master.import()`: * `request.importmasterjsonrequestdto.masterJson` **Changed** **Breaking** ⚠️ * `novu.translations.master.upload()`: `requestbody` **Added** **Breaking** ⚠️ * `novu.trigger()`: `response.jobdata` **Added** * `novu.triggerBroadcast()`: * `request.triggereventtoallrequestdto.context` **Added** * `response.jobdata` **Added** * `novu.triggerBulk()`: `response.[].jobData` **Added**
1 parent 1a58a95 commit d5b37df

File tree

64 files changed

+862
-465
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+862
-465
lines changed

.speakeasy/gen.lock

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
lockVersion: 2.0.0
22
id: 6bff3a53-3f0b-40b4-942f-ff70dc583ae5
33
management:
4-
docChecksum: 632fa4de0d14dd4b63f8adc2b7803ecb
4+
docChecksum: 33031a438b3fd64e12d2d4c915cbaed4
55
docVersion: 3.11.0
6-
speakeasyVersion: 1.658.2
6+
speakeasyVersion: 1.659.0
77
generationVersion: 2.755.9
8-
releaseVersion: 3.11.0
9-
configChecksum: 2131471616bee99291e536df9e67b63b
8+
releaseVersion: 3.12.0
9+
configChecksum: e3d831ca9fc8f01066d424cc71a548f0
1010
repoURL: https://github.com/novuhq/novu-ts.git
1111
installationURL: https://github.com/novuhq/novu-ts
1212
published: true
@@ -33,6 +33,7 @@ features:
3333
retries: 2.83.0
3434
sdkHooks: 0.3.0
3535
unions: 2.86.0
36+
uploadStreams: 0.1.0
3637
generatedFiles:
3738
- .gitattributes
3839
- .npmignore
@@ -89,6 +90,7 @@ generatedFiles:
8990
- docs/models/components/content.md
9091
- docs/models/components/contentissueenum.md
9192
- docs/models/components/context.md
93+
- docs/models/components/context2.md
9294
- docs/models/components/controlsmetadatadto.md
9395
- docs/models/components/controlvalues.md
9496
- docs/models/components/controlvariables.md
@@ -204,6 +206,7 @@ generatedFiles:
204206
- docs/models/components/integrationresponsedto.md
205207
- docs/models/components/issues.md
206208
- docs/models/components/issuetype.md
209+
- docs/models/components/jobdata.md
207210
- docs/models/components/lastpublishedby.md
208211
- docs/models/components/layoutcontrolsdto.md
209212
- docs/models/components/layoutcontrolvaluesdto.md
@@ -212,7 +215,6 @@ generatedFiles:
212215
- docs/models/components/layoutpreviewrequestdto.md
213216
- docs/models/components/layoutresponsedto.md
214217
- docs/models/components/layoutresponsedtosortfield.md
215-
- docs/models/components/layouts.md
216218
- docs/models/components/listcontextsresponsedto.md
217219
- docs/models/components/listlayoutresponsedto.md
218220
- docs/models/components/listsubscribersresponsedto.md
@@ -226,7 +228,6 @@ generatedFiles:
226228
- docs/models/components/markmessageactionasseendto.md
227229
- docs/models/components/markmessageactionasseendtopayload.md
228230
- docs/models/components/markmessageactionasseendtostatus.md
229-
- docs/models/components/masterjson.md
230231
- docs/models/components/messageaction.md
231232
- docs/models/components/messageactionresult.md
232233
- docs/models/components/messageactionstatusenum.md
@@ -237,7 +238,6 @@ generatedFiles:
237238
- docs/models/components/messagemarkasrequestdto.md
238239
- docs/models/components/messagemarkasrequestdtomarkas.md
239240
- docs/models/components/messageresponsedto.md
240-
- docs/models/components/messageresponsedtocontent.md
241241
- docs/models/components/messageresponsedtooverrides.md
242242
- docs/models/components/messageresponsedtopayload.md
243243
- docs/models/components/messagesresponsedto.md
@@ -366,14 +366,14 @@ generatedFiles:
366366
- docs/models/components/translationgroupdto.md
367367
- docs/models/components/translationgroupdtoresourcetype.md
368368
- docs/models/components/translationresponsedto.md
369-
- docs/models/components/translationresponsedtocontent.md
370369
- docs/models/components/translationresponsedtoresourcetype.md
371370
- docs/models/components/triggereventrequestdto.md
372371
- docs/models/components/triggereventresponsedto.md
373372
- docs/models/components/triggereventresponsedtostatus.md
374373
- docs/models/components/triggereventtoallrequestdto.md
375374
- docs/models/components/triggereventtoallrequestdtoactor.md
376375
- docs/models/components/triggereventtoallrequestdtochannels.md
376+
- docs/models/components/triggereventtoallrequestdtocontext.md
377377
- docs/models/components/triggereventtoallrequestdtooverrides.md
378378
- docs/models/components/triggereventtoallrequestdtotenant.md
379379
- docs/models/components/triggerrecipientstypeenum.md
@@ -399,8 +399,6 @@ generatedFiles:
399399
- docs/models/components/updatetopicrequestdto.md
400400
- docs/models/components/updateworkflowdto.md
401401
- docs/models/components/updateworkflowdtosteps.md
402-
- docs/models/components/uploadtranslationsrequestdto.md
403-
- docs/models/components/uploadtranslationsrequestdtoresourcetype.md
404402
- docs/models/components/uploadtranslationsresponsedto.md
405403
- docs/models/components/user.md
406404
- docs/models/components/userall.md
@@ -430,7 +428,6 @@ generatedFiles:
430428
- docs/models/components/workflowresponsedtosortfield.md
431429
- docs/models/components/workflowresponsedtosteps.md
432430
- docs/models/components/workflowresponsedtoupdatedby.md
433-
- docs/models/components/workflows.md
434431
- docs/models/components/workflowstatusenum.md
435432
- docs/models/errors/errordto.md
436433
- docs/models/errors/five.md
@@ -477,6 +474,8 @@ generatedFiles:
477474
- docs/models/operations/eventscontrollertriggerbulkresponse.md
478475
- docs/models/operations/eventscontrollertriggerrequest.md
479476
- docs/models/operations/eventscontrollertriggerresponse.md
477+
- docs/models/operations/files.md
478+
- docs/models/operations/filet.md
480479
- docs/models/operations/inboundwebhookscontrollerhandlewebhookrequest.md
481480
- docs/models/operations/integrationscontrollerautoconfigureintegrationrequest.md
482481
- docs/models/operations/integrationscontrollerautoconfigureintegrationresponse.md
@@ -584,14 +583,17 @@ generatedFiles:
584583
- docs/models/operations/translationcontrollercreatetranslationendpointrequest.md
585584
- docs/models/operations/translationcontrollerdeletetranslationendpointpathparamresourcetype.md
586585
- docs/models/operations/translationcontrollerdeletetranslationendpointrequest.md
586+
- docs/models/operations/translationcontrollerdeletetranslationgroupendpointpathparamresourcetype.md
587587
- docs/models/operations/translationcontrollerdeletetranslationgroupendpointrequest.md
588588
- docs/models/operations/translationcontrollergetmasterjsonendpointrequest.md
589589
- docs/models/operations/translationcontrollergetsingletranslationrequest.md
590590
- docs/models/operations/translationcontrollergettranslationgroupendpointpathparamresourcetype.md
591591
- docs/models/operations/translationcontrollergettranslationgroupendpointrequest.md
592592
- docs/models/operations/translationcontrollerimportmasterjsonendpointrequest.md
593593
- docs/models/operations/translationcontrolleruploadmasterjsonendpointrequest.md
594+
- docs/models/operations/translationcontrolleruploadmasterjsonendpointrequestbody.md
594595
- docs/models/operations/translationcontrolleruploadtranslationfilesrequest.md
596+
- docs/models/operations/translationcontrolleruploadtranslationfilesrequestbody.md
595597
- docs/models/operations/workflowcontrollercreaterequest.md
596598
- docs/models/operations/workflowcontrollercreateresponse.md
597599
- docs/models/operations/workflowcontrollergetworkflowrequest.md
@@ -967,7 +969,6 @@ generatedFiles:
967969
- src/models/components/updatesubscriberonlineflagrequestdto.ts
968970
- src/models/components/updatetopicrequestdto.ts
969971
- src/models/components/updateworkflowdto.ts
970-
- src/models/components/uploadtranslationsrequestdto.ts
971972
- src/models/components/uploadtranslationsresponsedto.ts
972973
- src/models/components/webhookresultdto.ts
973974
- src/models/components/workflowcreationsourceenum.ts
@@ -1144,7 +1145,7 @@ examples:
11441145
EventsController_broadcastEventToAll:
11451146
speakeasy-default-events-controller-broadcast-event-to-all:
11461147
requestBody:
1147-
application/json: {"name": "<value>", "payload": {"comment_id": "string", "post": {"text": "string"}}, "overrides": {"fcm": {"data": {"key": "value"}}}, "actor": {"firstName": "John", "lastName": "Doe", "email": "[email protected]", "phone": "+1234567890", "avatar": "https://example.com/avatar.jpg", "locale": "en-US", "timezone": "America/New_York", "subscriberId": "<id>"}}
1148+
application/json: {"name": "<value>", "payload": {"comment_id": "string", "post": {"text": "string"}}, "overrides": {"fcm": {"data": {"key": "value"}}}, "actor": {"firstName": "John", "lastName": "Doe", "email": "[email protected]", "phone": "+1234567890", "avatar": "https://example.com/avatar.jpg", "locale": "en-US", "timezone": "America/New_York", "subscriberId": "<id>"}, "context": {"key": "org-acme"}}
11481149
responses:
11491150
"200":
11501151
application/json: {"acknowledged": false, "status": "invalid_recipients"}
@@ -2222,10 +2223,10 @@ examples:
22222223
TranslationController_createTranslationEndpoint:
22232224
speakeasy-default-translation-controller-create-translation-endpoint:
22242225
requestBody:
2225-
application/json: {"resourceId": "welcome-email", "resourceType": "workflow", "locale": "en_US", "content": {}}
2226+
application/json: {"resourceId": "welcome-email", "resourceType": "workflow", "locale": "en_US", "content": {"welcome.title": "Welcome", "welcome.message": "Hello there!"}}
22262227
responses:
22272228
"200":
2228-
application/json: {"resourceId": "welcome-email", "resourceType": "workflow", "locale": "en_US", "content": {}, "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z"}
2229+
application/json: {"resourceId": "welcome-email", "resourceType": "workflow", "locale": "en_US", "content": {"welcome.title": "Welcome", "welcome.message": "Hello there!"}, "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z"}
22292230
TranslationController_getSingleTranslation:
22302231
speakeasy-default-translation-controller-get-single-translation:
22312232
parameters:
@@ -2235,7 +2236,7 @@ examples:
22352236
locale: "en_US"
22362237
responses:
22372238
"200":
2238-
application/json: {"resourceId": "welcome-email", "resourceType": "workflow", "locale": "en_US", "content": {}, "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z"}
2239+
application/json: {"resourceId": "welcome-email", "resourceType": "workflow", "locale": "en_US", "content": {"welcome.title": "Welcome", "welcome.message": "Hello there!"}, "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z"}
22392240
TranslationController_deleteTranslationEndpoint:
22402241
speakeasy-default-translation-controller-delete-translation-endpoint:
22412242
parameters:
@@ -2246,7 +2247,7 @@ examples:
22462247
TranslationController_uploadTranslationFiles:
22472248
speakeasy-default-translation-controller-upload-translation-files:
22482249
requestBody:
2249-
multipart/form-data: {"resourceId": "welcome-email", "resourceType": "workflow"}
2250+
multipart/form-data: {"resourceId": "welcome-email", "resourceType": "workflow", "files": []}
22502251
responses:
22512252
"200":
22522253
application/json: {"totalFiles": 3, "successfulUploads": 2, "failedUploads": 1, "errors": ["Invalid JSON in file: es-ES.json"]}
@@ -2272,16 +2273,18 @@ examples:
22722273
locale: "en_US"
22732274
responses:
22742275
"200":
2275-
application/json: {"workflows": {}, "layouts": {}}
2276+
application/json: {"workflows": {"welcome-email": {"welcome.title": "Welcome to our platform", "welcome.message": "Hello there!"}, "password-reset": {"reset.title": "Reset your password", "reset.message": "Click the link to reset"}}, "layouts": {"default-layout": {"layout.title": "Default layout", "layout.message": "Hello there!"}}}
22762277
TranslationController_importMasterJsonEndpoint:
22772278
speakeasy-default-translation-controller-import-master-json-endpoint:
22782279
requestBody:
2279-
application/json: {"locale": "en_US", "masterJson": {}}
2280+
application/json: {"locale": "en_US", "masterJson": {"workflows": {"welcome-email": {"welcome.title": "Welcome to our platform", "welcome.message": "Hello there!"}, "password-reset": {"reset.title": "Reset your password", "reset.message": "Click the link to reset"}}}}
22802281
responses:
22812282
"200":
22822283
application/json: {"success": true, "message": "Successfully imported translations for 2 resources: welcome-email, password-reset", "successful": ["welcome-email", "password-reset"], "failed": ["missing-workflow"]}
22832284
TranslationController_uploadMasterJsonEndpoint:
22842285
speakeasy-default-translation-controller-upload-master-json-endpoint:
2286+
requestBody:
2287+
multipart/form-data: {"file": "x-file: example.file"}
22852288
responses:
22862289
"200":
22872290
application/json: {"success": true, "message": "Successfully imported translations for 2 resources: welcome-email, password-reset", "successful": ["welcome-email", "password-reset"], "failed": ["missing-workflow"]}
@@ -2438,3 +2441,4 @@ generatedTests:
24382441
TopicsController_removeSubscribers: "2024-12-24T08:36:06+01:00"
24392442
TestingController_idempotency: "2024-12-24T08:36:06+01:00"
24402443
TestingController_idempotencyGet: "2024-12-24T08:36:06+01:00"
2444+
releaseNotes: "## Typescript SDK Changes Detected:\n* `novu.translations.create()`: \n * `request.createtranslationrequestdto.content` **Changed** **Breaking** :warning:\n * `response.content` **Changed** **Breaking** :warning:\n* `novu.translations.retrieve()`: `response.content` **Changed** **Breaking** :warning:\n* `novu.translations.upload()`: `request` **Changed** **Breaking** :warning:\n* `novu.translations.master.retrieve()`: `response` **Changed** **Breaking** :warning:\n* `novu.translations.master.import()`: \n * `request.importmasterjsonrequestdto.masterJson` **Changed** **Breaking** :warning:\n* `novu.translations.master.upload()`: `requestbody` **Added** **Breaking** :warning:\n* `novu.trigger()`: `response.jobdata` **Added**\n* `novu.triggerBroadcast()`: \n * `request.triggereventtoallrequestdto.context` **Added**\n * `response.jobdata` **Added**\n* `novu.triggerBulk()`: `response.[].jobData` **Added**\n"

.speakeasy/gen.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ generation:
2525
generateNewTests: false
2626
skipResponseBodyAssertions: false
2727
typescript:
28-
version: 3.11.0
28+
version: 3.12.0
2929
acceptHeaderEnum: true
3030
additionalDependencies:
3131
dependencies: {}

.speakeasy/workflow.lock

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
1-
speakeasyVersion: 1.658.2
1+
speakeasyVersion: 1.659.0
22
sources:
33
json-development:
44
sourceNamespace: json-development
5-
sourceRevisionDigest: sha256:c431205e676c4621df67226728ab5ad441e60096745aff6589321a0d2e5f564d
6-
sourceBlobDigest: sha256:3e9e29d2d2a5d4794f6bd7ffa0603592f1027450c9e3f97b13a79efb2fc55930
5+
sourceRevisionDigest: sha256:a36ab151daad6ec481b94c202e1aac49d8b4b023a36a2da8fc2cf22db69167f6
6+
sourceBlobDigest: sha256:ceff55eba986e98068ad74b96a89ef70d8aa116aebb177432aaa7ef29da66cc6
77
tags:
88
- latest
9-
- speakeasy-sdk-regen-1763543835
9+
- speakeasy-sdk-regen-1763598033
1010
- 3.11.0
1111
targets:
1212
my-first-target:
1313
source: json-development
1414
sourceNamespace: json-development
15-
sourceRevisionDigest: sha256:c431205e676c4621df67226728ab5ad441e60096745aff6589321a0d2e5f564d
16-
sourceBlobDigest: sha256:3e9e29d2d2a5d4794f6bd7ffa0603592f1027450c9e3f97b13a79efb2fc55930
15+
sourceRevisionDigest: sha256:a36ab151daad6ec481b94c202e1aac49d8b4b023a36a2da8fc2cf22db69167f6
16+
sourceBlobDigest: sha256:ceff55eba986e98068ad74b96a89ef70d8aa116aebb177432aaa7ef29da66cc6
1717
codeSamplesNamespace: code-samples-typescript
18-
codeSamplesRevisionDigest: sha256:08b20be1cc9605698b2f0f6adca3d4eb4ede68d398e4323e795980d89a1cbaa2
18+
codeSamplesRevisionDigest: sha256:54b84cea025f88222a91189c7f672ad5325821e6a50ba1d2532749ef416fbae4
1919
workflow:
2020
workflowVersion: 1.0.0
2121
speakeasyVersion: latest

README.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ For more information about the API: [Novu Documentation](https://docs.novu.co)
4949
* [Server Selection](#server-selection)
5050
* [Custom HTTP Client](#custom-http-client)
5151
* [Authentication](#authentication)
52+
* [File uploads](#file-uploads)
5253
* [Retries](#retries)
5354
* [Debugging](#debugging)
5455
* [Development](#development)
@@ -185,6 +186,9 @@ async function run() {
185186
timezone: "America/New_York",
186187
subscriberId: "<id>",
187188
},
189+
context: {
190+
"key": "org-acme",
191+
},
188192
});
189193

190194
console.log(result);
@@ -777,6 +781,42 @@ run();
777781
```
778782
<!-- End Authentication [security] -->
779783

784+
<!-- Start File uploads [file-upload] -->
785+
## File uploads
786+
787+
Certain SDK methods accept files as part of a multi-part request. It is possible and typically recommended to upload files as a stream rather than reading the entire contents into memory. This avoids excessive memory consumption and potentially crashing with out-of-memory errors when working with very large files. The following example demonstrates how to attach a file stream to a request.
788+
789+
> [!TIP]
790+
>
791+
> Depending on your JavaScript runtime, there are convenient utilities that return a handle to a file without reading the entire contents into memory:
792+
>
793+
> - **Node.js v20+:** Since v20, Node.js comes with a native `openAsBlob` function in [`node:fs`](https://nodejs.org/docs/latest-v20.x/api/fs.html#fsopenasblobpath-options).
794+
> - **Bun:** The native [`Bun.file`](https://bun.sh/docs/api/file-io#reading-files-bun-file) function produces a file handle that can be used for streaming file uploads.
795+
> - **Browsers:** All supported browsers return an instance to a [`File`](https://developer.mozilla.org/en-US/docs/Web/API/File) when reading the value from an `<input type="file">` element.
796+
> - **Node.js v18:** A file stream can be created using the `fileFrom` helper from [`fetch-blob/from.js`](https://www.npmjs.com/package/fetch-blob).
797+
798+
```typescript
799+
import { Novu } from "@novu/api";
800+
801+
const novu = new Novu({
802+
secretKey: "YOUR_SECRET_KEY_HERE",
803+
});
804+
805+
async function run() {
806+
const result = await novu.translations.upload({
807+
resourceId: "welcome-email",
808+
resourceType: "workflow",
809+
files: [],
810+
});
811+
812+
console.log(result);
813+
}
814+
815+
run();
816+
817+
```
818+
<!-- End File uploads [file-upload] -->
819+
780820
<!-- Start Retries [retries] -->
781821
## Retries
782822

RELEASES.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,4 +288,14 @@ Based on:
288288
### Generated
289289
- [typescript v3.11.0] .
290290
### Releases
291-
- [NPM v3.11.0] https://www.npmjs.com/package/@novu/api/v/3.11.0 - .
291+
- [NPM v3.11.0] https://www.npmjs.com/package/@novu/api/v/3.11.0 - .
292+
293+
## 2025-11-21 00:19:51
294+
### Changes
295+
Based on:
296+
- OpenAPI Doc
297+
- Speakeasy CLI 1.659.0 (2.755.9) https://github.com/speakeasy-api/speakeasy
298+
### Generated
299+
- [typescript v3.12.0] .
300+
### Releases
301+
- [NPM v3.12.0] https://www.npmjs.com/package/@novu/api/v/3.12.0 - .

USAGE.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ async function run() {
8888
timezone: "America/New_York",
8989
subscriberId: "<id>",
9090
},
91+
context: {
92+
"key": "org-acme",
93+
},
9194
});
9295

9396
console.log(result);

docs/models/components/content.md

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,24 @@
11
# Content
22

3-
Translation content as JSON object
3+
Content of the message, can be an email block or a string
44

5-
## Example Usage
65

7-
```typescript
8-
import { Content } from "@novu/api/models/components";
6+
## Supported Types
7+
8+
### `components.EmailBlock[]`
99

10-
let value: Content = {};
10+
```typescript
11+
const value: components.EmailBlock[] = [
12+
{
13+
type: "button",
14+
content: "<value>",
15+
},
16+
];
1117
```
1218

13-
## Fields
19+
### `string`
20+
21+
```typescript
22+
const value: string = "<value>";
23+
```
1424

15-
| Field | Type | Required | Description |
16-
| ----------- | ----------- | ----------- | ----------- |

docs/models/components/context2.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Context2
2+
3+
Rich context object with id and optional data
4+
5+
## Example Usage
6+
7+
```typescript
8+
import { Context2 } from "@novu/api/models/components";
9+
10+
let value: Context2 = {
11+
id: "org-acme",
12+
data: {
13+
"name": "Acme Corp",
14+
"region": "us-east-1",
15+
},
16+
};
17+
```
18+
19+
## Fields
20+
21+
| Field | Type | Required | Description | Example |
22+
| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- |
23+
| `id` | *string* | :heavy_check_mark: | N/A | org-acme |
24+
| `data` | Record<string, *any*> | :heavy_minus_sign: | Optional additional context data | {<br/>"name": "Acme Corp",<br/>"region": "us-east-1"<br/>} |

0 commit comments

Comments
 (0)