diff --git a/.gitignore b/.gitignore index fa07b6d6..80e4fd98 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +**/__pycache__/ +**/.speakeasy/temp/ +**/.speakeasy/logs/ .speakeasy/reports .venv/ venv/ diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 86b4be74..8738e71f 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,12 +1,12 @@ lockVersion: 2.0.0 id: f83d894c-c934-499f-8a8d-e128395ae8ff management: - docChecksum: 02c4dfb7254bebadb858de4e234c25b2 - docVersion: "1.0" - speakeasyVersion: 1.531.0 - generationVersion: 2.568.2 - releaseVersion: 0.4.3 - configChecksum: 0d40d7d32fc9a24ef742524398565c30 + docChecksum: e77a8e9ad7c0dd62c5bcc319bbe58698 + docVersion: 2.1.13 + speakeasyVersion: 1.544.0 + generationVersion: 2.599.0 + releaseVersion: 1.0.0 + configChecksum: 2f871a5d86be0872b0092f00a2d6dcc8 repoURL: https://github.com/novuhq/novu-py.git installationURL: https://github.com/novuhq/novu-py.git published: true @@ -14,8 +14,9 @@ features: python: acceptHeaders: 3.0.0 additionalDependencies: 1.0.0 + additionalProperties: 1.0.1 constsAndDefaults: 1.0.5 - core: 5.12.6 + core: 5.18.0 defaultEnabledRetries: 0.2.0 deprecations: 3.0.2 devContainers: 3.0.0 @@ -26,12 +27,12 @@ features: globalSecurity: 3.0.3 globalSecurityCallbacks: 1.0.0 globalSecurityFlattening: 1.0.0 - globalServerURLs: 3.1.0 + globalServerURLs: 3.1.1 groups: 3.0.0 methodArguments: 1.0.2 nameOverrides: 3.0.1 nullables: 1.0.1 - pagination: 3.0.4 + pagination: 3.0.5 responseFormat: 1.0.1 retries: 3.0.2 sdkHooks: 1.0.1 @@ -48,20 +49,21 @@ generatedFiles: - docs/models/activitygraphstatesresponse.md - docs/models/activitynotificationexecutiondetailresponsedto.md - docs/models/activitynotificationjobresponsedto.md + - docs/models/activitynotificationjobresponsedtopayload.md - docs/models/activitynotificationjobresponsedtotype.md - docs/models/activitynotificationresponsedto.md - docs/models/activitynotificationresponsedtopayload.md - docs/models/activitynotificationresponsedtoto.md - docs/models/activitynotificationstepresponsedto.md + - docs/models/activitynotificationstepresponsedtometadata.md - docs/models/activitynotificationstepresponsedtoreplycallback.md - docs/models/activitynotificationsubscriberresponsedto.md - docs/models/activitynotificationtemplateresponsedto.md - docs/models/activitystatsresponsedto.md + - docs/models/activitytopicdto.md - docs/models/actor.md - docs/models/actorfeeditemdto.md - docs/models/actortypeenum.md - - docs/models/addsubscribersrequestdto.md - - docs/models/assignsubscribertotopicdto.md - docs/models/backoffunit.md - docs/models/builderfieldtypeenum.md - docs/models/bulkcreatesubscriberresponsedto.md @@ -75,6 +77,8 @@ generatedFiles: - docs/models/channels.md - docs/models/channelsettingsdto.md - docs/models/channeltypeenum.md + - docs/models/chatorpushproviderenum.md + - docs/models/constraintvalidation.md - docs/models/content.md - docs/models/controls.md - docs/models/controlvariables.md @@ -82,8 +86,9 @@ generatedFiles: - docs/models/createintegrationrequestdto.md - docs/models/createintegrationrequestdtochannel.md - docs/models/createsubscriberrequestdto.md - - docs/models/createtopicrequestdto.md - - docs/models/createtopicresponsedto.md + - docs/models/createtopicsubscriptionsrequestdto.md + - docs/models/createtopicsubscriptionsresponsedto.md + - docs/models/createupdatetopicrequestdto.md - docs/models/credentialsdto.md - docs/models/data.md - docs/models/delayregularmetadata.md @@ -93,11 +98,14 @@ generatedFiles: - docs/models/delayscheduledmetadatatype.md - docs/models/deletemessageresponsedto.md - docs/models/deletemessageresponsedtostatus.md + - docs/models/deletetopicresponsedto.md + - docs/models/deletetopicsubscriptionsrequestdto.md + - docs/models/deletetopicsubscriptionsresponsedto.md - docs/models/digestmetadatadto.md + - docs/models/digestmetadatadtounit.md - docs/models/digestregularmetadata.md - - docs/models/digestregularmetadatatype.md - - docs/models/digestregularmetadataunit.md - docs/models/digesttimedconfigdto.md + - docs/models/digesttimedconfigdtoweekdays.md - docs/models/digesttimedmetadata.md - docs/models/digesttimedmetadatatype.md - docs/models/digesttimedmetadataunit.md @@ -107,7 +115,6 @@ generatedFiles: - docs/models/emailblockstyles.md - docs/models/emailblocktypeenum.md - docs/models/errordto.md - - docs/models/errors.md - docs/models/eventscontrollerbroadcasteventtoallrequest.md - docs/models/eventscontrollerbroadcasteventtoallresponse.md - docs/models/eventscontrollercancelrequest.md @@ -118,17 +125,14 @@ generatedFiles: - docs/models/eventscontrollertriggerresponse.md - docs/models/executiondetailssourceenum.md - docs/models/executiondetailsstatusenum.md - - docs/models/failedassignmentsdto.md - docs/models/failedoperationdto.md - docs/models/feedidentifier.md - docs/models/feedresponsedto.md - docs/models/fieldfilterpartdto.md - - docs/models/filtertopicsresponsedto.md + - docs/models/five.md + - docs/models/four.md - docs/models/getsubscriberpreferencesdto.md - - docs/models/gettopicresponsedto.md - - docs/models/globalpreferencedto.md - docs/models/integrationresponsedto.md - - docs/models/integrationresponsedtochannel.md - docs/models/integrationscontrollercreateintegrationrequest.md - docs/models/integrationscontrollercreateintegrationresponse.md - docs/models/integrationscontrollergetactiveintegrationsrequest.md @@ -145,14 +149,18 @@ generatedFiles: - docs/models/integrationscontrollerupdateintegrationbyidresponse.md - docs/models/issues.md - docs/models/listsubscribersresponsedto.md + - docs/models/listtopicsresponsedto.md + - docs/models/listtopicsubscriptionsresponsedto.md - docs/models/markallmessageasrequestdto.md - docs/models/markas.md - docs/models/markmessageactionasseendto.md - docs/models/markmessageactionasseendtopayload.md - docs/models/markmessageactionasseendtostatus.md + - docs/models/message.md + - docs/models/message4.md + - docs/models/message5.md - docs/models/messageaction.md - docs/models/messageactionresult.md - - docs/models/messageactionresultpayload.md - docs/models/messageactionstatusenum.md - docs/models/messagebutton.md - docs/models/messagecta.md @@ -169,10 +177,14 @@ generatedFiles: - docs/models/messagescontrollerdeletemessagesbytransactionidresponse.md - docs/models/messagescontrollergetmessagesrequest.md - docs/models/messagescontrollergetmessagesresponse.md + - docs/models/messagesresponsedto.md - docs/models/messagestatusenum.md - docs/models/messagetemplate.md - docs/models/messagetemplatedto.md + - docs/models/messagevalidationerrordto4.md + - docs/models/messagevalidationerrordto5.md - docs/models/metadata.md + - docs/models/metadto.md - docs/models/monthlytype.md - docs/models/monthlytypeenum.md - docs/models/notificationfeeditemdto.md @@ -189,9 +201,9 @@ generatedFiles: - docs/models/notificationstepdata.md - docs/models/notificationstepdatametadata.md - docs/models/notificationstepdto.md - - docs/models/notificationstepdtometadata.md - docs/models/notificationtrigger.md - docs/models/notificationtriggerdto.md + - docs/models/notificationtriggerdtotype.md - docs/models/notificationtriggertype.md - docs/models/notificationtriggervariable.md - docs/models/on.md @@ -207,25 +219,29 @@ generatedFiles: - docs/models/patchsubscriberpreferencesdto.md - docs/models/patchsubscriberrequestdto.md - docs/models/payload.md - - docs/models/preferencechannels.md + - docs/models/preferenceoverridesourceenum.md - docs/models/providerid.md - docs/models/providersidenum.md - docs/models/queryparamchannel.md + - docs/models/queryparamorderdirection.md - docs/models/removesubscriberresponsedto.md - - docs/models/removesubscribersrequestdto.md - - docs/models/renametopicrequestdto.md - - docs/models/renametopicresponsedto.md - docs/models/replycallback.md - docs/models/security.md - - docs/models/source.md - docs/models/status.md - docs/models/stepfilterdto.md + - docs/models/stepfilterdtovalue.md + - docs/models/stepsoverrides.md - docs/models/steptypeenum.md + - docs/models/subscriber.md - docs/models/subscriberchanneldto.md - - docs/models/subscriberchanneldtoproviderid.md + - docs/models/subscriberdto.md - docs/models/subscriberfeedresponsedto.md + - docs/models/subscriberglobalpreferencedto.md - docs/models/subscriberpayloaddto.md - docs/models/subscriberpayloaddtodata.md + - docs/models/subscriberpreferencechannels.md + - docs/models/subscriberpreferenceoverridedto.md + - docs/models/subscriberpreferencesworkflowinfodto.md - docs/models/subscriberresponsedto.md - docs/models/subscriberscontrollercreatesubscriberrequest.md - docs/models/subscriberscontrollercreatesubscriberresponse.md @@ -233,6 +249,8 @@ generatedFiles: - docs/models/subscriberscontrollergetsubscriberpreferencesresponse.md - docs/models/subscriberscontrollergetsubscriberrequest.md - docs/models/subscriberscontrollergetsubscriberresponse.md + - docs/models/subscriberscontrollerlistsubscribertopicsrequest.md + - docs/models/subscriberscontrollerlistsubscribertopicsresponse.md - docs/models/subscriberscontrollerpatchsubscriberrequest.md - docs/models/subscriberscontrollerpatchsubscriberresponse.md - docs/models/subscriberscontrollerremovesubscriberrequest.md @@ -271,33 +289,42 @@ generatedFiles: - docs/models/subscribersv1controllerupdatesubscriberonlineflagresponse.md - docs/models/subscribersv1controllerupdatesubscriberrequest.md - docs/models/subscribersv1controllerupdatesubscriberresponse.md + - docs/models/subscriberworkflowpreferencedto.md + - docs/models/subscriptiondto.md + - docs/models/subscriptionerrordto.md + - docs/models/subscriptionsdeleteerrordto.md - docs/models/tenant.md - docs/models/tenantpayloaddto.md - docs/models/tenantpayloaddtodata.md - docs/models/textalignenum.md - docs/models/timedconfig.md - - docs/models/timedconfigweekdays.md - docs/models/tlsoptions.md - docs/models/to.md - docs/models/topicdto.md - docs/models/topicpayloaddto.md - - docs/models/topicscontrollerassignrequest.md - - docs/models/topicscontrollerassignresponse.md - - docs/models/topicscontrollercreatetopicrequest.md - - docs/models/topicscontrollercreatetopicresponse.md + - docs/models/topicresponsedto.md + - docs/models/topicscontrollercreatetopicsubscriptionsrequest.md + - docs/models/topicscontrollercreatetopicsubscriptionsresponse.md - docs/models/topicscontrollerdeletetopicrequest.md - docs/models/topicscontrollerdeletetopicresponse.md + - docs/models/topicscontrollerdeletetopicsubscriptionsrequest.md + - docs/models/topicscontrollerdeletetopicsubscriptionsresponse.md - docs/models/topicscontrollergettopicrequest.md - docs/models/topicscontrollergettopicresponse.md - - docs/models/topicscontrollergettopicsubscriberrequest.md - - docs/models/topicscontrollergettopicsubscriberresponse.md + - docs/models/topicscontrollerlisttopicsqueryparamorderdirection.md - docs/models/topicscontrollerlisttopicsrequest.md - docs/models/topicscontrollerlisttopicsresponse.md - - docs/models/topicscontrollerremovesubscribersrequest.md - - docs/models/topicscontrollerremovesubscribersresponse.md - - docs/models/topicscontrollerrenametopicrequest.md - - docs/models/topicscontrollerrenametopicresponse.md + - docs/models/topicscontrollerlisttopicsubscriptionsqueryparamorderdirection.md + - docs/models/topicscontrollerlisttopicsubscriptionsrequest.md + - docs/models/topicscontrollerlisttopicsubscriptionsresponse.md + - docs/models/topicscontrollerupdatetopicrequest.md + - docs/models/topicscontrollerupdatetopicresponse.md + - docs/models/topicscontrollerupserttopicrequest.md + - docs/models/topicscontrollerupserttopicresponse.md - docs/models/topicsubscriberdto.md + - docs/models/topicsubscriptionresponsedto.md + - docs/models/topicsv1controllergettopicsubscriberrequest.md + - docs/models/topicsv1controllergettopicsubscriberresponse.md - docs/models/triggereventrequestdto.md - docs/models/triggereventresponsedto.md - docs/models/triggereventtoallrequestdto.md @@ -311,18 +338,16 @@ generatedFiles: - docs/models/updatedsubscriberdto.md - docs/models/updateintegrationrequestdto.md - docs/models/updatesubscriberchannelrequestdto.md - - docs/models/updatesubscriberchannelrequestdtoproviderid.md - docs/models/updatesubscriberonlineflagrequestdto.md - docs/models/updatesubscriberrequestdto.md + - docs/models/updatetopicrequestdto.md - docs/models/utils/retryconfig.md - docs/models/validationerrordto.md - - docs/models/validationerrordtovalue.md + - docs/models/validationerrordtomessage.md - docs/models/value.md - docs/models/weekdays.md - - docs/models/workflowinfodto.md - docs/models/workflowintegrationstatus.md - docs/models/workfloworiginenum.md - - docs/models/workflowpreferencedto.md - docs/models/workflowresponse.md - docs/models/workflowresponsedata.md - docs/sdks/authentication/README.md @@ -334,10 +359,12 @@ generatedFiles: - docs/sdks/novumessages/README.md - docs/sdks/novunotifications/README.md - docs/sdks/novusubscribers/README.md + - docs/sdks/novutopics/README.md - docs/sdks/preferences/README.md - docs/sdks/properties/README.md - docs/sdks/stats/README.md - docs/sdks/subscribers/README.md + - docs/sdks/subscriptions/README.md - docs/sdks/topics/README.md - docs/sdks/webhooks/README.md - poetry.toml @@ -367,11 +394,10 @@ generatedFiles: - src/novu_py/models/activitynotificationsubscriberresponsedto.py - src/novu_py/models/activitynotificationtemplateresponsedto.py - src/novu_py/models/activitystatsresponsedto.py + - src/novu_py/models/activitytopicdto.py - src/novu_py/models/actorfeeditemdto.py - src/novu_py/models/actortypeenum.py - - src/novu_py/models/addsubscribersrequestdto.py - src/novu_py/models/apierror.py - - src/novu_py/models/assignsubscribertotopicdto.py - src/novu_py/models/builderfieldtypeenum.py - src/novu_py/models/bulkcreatesubscriberresponsedto.py - src/novu_py/models/bulksubscribercreatedto.py @@ -382,15 +408,21 @@ generatedFiles: - src/novu_py/models/channelctatypeenum.py - src/novu_py/models/channelsettingsdto.py - src/novu_py/models/channeltypeenum.py + - src/novu_py/models/chatorpushproviderenum.py + - src/novu_py/models/constraintvalidation.py - src/novu_py/models/createdsubscriberdto.py - src/novu_py/models/createintegrationrequestdto.py - src/novu_py/models/createsubscriberrequestdto.py - - src/novu_py/models/createtopicrequestdto.py - - src/novu_py/models/createtopicresponsedto.py + - src/novu_py/models/createtopicsubscriptionsrequestdto.py + - src/novu_py/models/createtopicsubscriptionsresponsedto.py + - src/novu_py/models/createupdatetopicrequestdto.py - src/novu_py/models/credentialsdto.py - src/novu_py/models/delayregularmetadata.py - src/novu_py/models/delayscheduledmetadata.py - src/novu_py/models/deletemessageresponsedto.py + - src/novu_py/models/deletetopicresponsedto.py + - src/novu_py/models/deletetopicsubscriptionsrequestdto.py + - src/novu_py/models/deletetopicsubscriptionsresponsedto.py - src/novu_py/models/digestmetadatadto.py - src/novu_py/models/digestregularmetadata.py - src/novu_py/models/digesttimedconfigdto.py @@ -407,14 +439,10 @@ generatedFiles: - src/novu_py/models/eventscontroller_triggerop.py - src/novu_py/models/executiondetailssourceenum.py - src/novu_py/models/executiondetailsstatusenum.py - - src/novu_py/models/failedassignmentsdto.py - src/novu_py/models/failedoperationdto.py - src/novu_py/models/feedresponsedto.py - src/novu_py/models/fieldfilterpartdto.py - - src/novu_py/models/filtertopicsresponsedto.py - src/novu_py/models/getsubscriberpreferencesdto.py - - src/novu_py/models/gettopicresponsedto.py - - src/novu_py/models/globalpreferencedto.py - src/novu_py/models/integrationresponsedto.py - src/novu_py/models/integrationscontroller_createintegrationop.py - src/novu_py/models/integrationscontroller_getactiveintegrationsop.py @@ -424,6 +452,8 @@ generatedFiles: - src/novu_py/models/integrationscontroller_setintegrationasprimaryop.py - src/novu_py/models/integrationscontroller_updateintegrationbyidop.py - src/novu_py/models/listsubscribersresponsedto.py + - src/novu_py/models/listtopicsresponsedto.py + - src/novu_py/models/listtopicsubscriptionsresponsedto.py - src/novu_py/models/markallmessageasrequestdto.py - src/novu_py/models/markmessageactionasseendto.py - src/novu_py/models/messageaction.py @@ -437,9 +467,11 @@ generatedFiles: - src/novu_py/models/messagescontroller_deletemessageop.py - src/novu_py/models/messagescontroller_deletemessagesbytransactionidop.py - src/novu_py/models/messagescontroller_getmessagesop.py + - src/novu_py/models/messagesresponsedto.py - src/novu_py/models/messagestatusenum.py - src/novu_py/models/messagetemplate.py - src/novu_py/models/messagetemplatedto.py + - src/novu_py/models/metadto.py - src/novu_py/models/monthlytypeenum.py - src/novu_py/models/notificationfeeditemdto.py - src/novu_py/models/notificationgroup.py @@ -454,27 +486,30 @@ generatedFiles: - src/novu_py/models/notificationtriggervariable.py - src/novu_py/models/ordinalenum.py - src/novu_py/models/ordinalvalueenum.py - - src/novu_py/models/overrides.py - src/novu_py/models/patchpreferencechannelsdto.py - src/novu_py/models/patchsubscriberpreferencesdto.py - src/novu_py/models/patchsubscriberrequestdto.py - - src/novu_py/models/preferencechannels.py + - src/novu_py/models/preferenceoverridesourceenum.py - src/novu_py/models/providersidenum.py - src/novu_py/models/removesubscriberresponsedto.py - - src/novu_py/models/removesubscribersrequestdto.py - - src/novu_py/models/renametopicrequestdto.py - - src/novu_py/models/renametopicresponsedto.py - src/novu_py/models/replycallback.py - src/novu_py/models/security.py - src/novu_py/models/stepfilterdto.py + - src/novu_py/models/stepsoverrides.py - src/novu_py/models/steptypeenum.py - src/novu_py/models/subscriberchanneldto.py + - src/novu_py/models/subscriberdto.py - src/novu_py/models/subscriberfeedresponsedto.py + - src/novu_py/models/subscriberglobalpreferencedto.py - src/novu_py/models/subscriberpayloaddto.py + - src/novu_py/models/subscriberpreferencechannels.py + - src/novu_py/models/subscriberpreferenceoverridedto.py + - src/novu_py/models/subscriberpreferencesworkflowinfodto.py - src/novu_py/models/subscriberresponsedto.py - src/novu_py/models/subscriberscontroller_createsubscriberop.py - src/novu_py/models/subscriberscontroller_getsubscriberop.py - src/novu_py/models/subscriberscontroller_getsubscriberpreferencesop.py + - src/novu_py/models/subscriberscontroller_listsubscribertopicsop.py - src/novu_py/models/subscriberscontroller_patchsubscriberop.py - src/novu_py/models/subscriberscontroller_removesubscriberop.py - src/novu_py/models/subscriberscontroller_searchsubscribersop.py @@ -493,20 +528,27 @@ generatedFiles: - src/novu_py/models/subscribersv1controller_updatesubscriberchannelop.py - src/novu_py/models/subscribersv1controller_updatesubscriberonlineflagop.py - src/novu_py/models/subscribersv1controller_updatesubscriberop.py + - src/novu_py/models/subscriberworkflowpreferencedto.py + - src/novu_py/models/subscriptiondto.py + - src/novu_py/models/subscriptionerrordto.py + - src/novu_py/models/subscriptionsdeleteerrordto.py - src/novu_py/models/tenantpayloaddto.py - src/novu_py/models/textalignenum.py - src/novu_py/models/timedconfig.py - src/novu_py/models/topicdto.py - src/novu_py/models/topicpayloaddto.py - - src/novu_py/models/topicscontroller_assignop.py - - src/novu_py/models/topicscontroller_createtopicop.py + - src/novu_py/models/topicresponsedto.py + - src/novu_py/models/topicscontroller_createtopicsubscriptionsop.py - src/novu_py/models/topicscontroller_deletetopicop.py + - src/novu_py/models/topicscontroller_deletetopicsubscriptionsop.py - src/novu_py/models/topicscontroller_gettopicop.py - - src/novu_py/models/topicscontroller_gettopicsubscriberop.py - src/novu_py/models/topicscontroller_listtopicsop.py - - src/novu_py/models/topicscontroller_removesubscribersop.py - - src/novu_py/models/topicscontroller_renametopicop.py + - src/novu_py/models/topicscontroller_listtopicsubscriptionsop.py + - src/novu_py/models/topicscontroller_updatetopicop.py + - src/novu_py/models/topicscontroller_upserttopicop.py - src/novu_py/models/topicsubscriberdto.py + - src/novu_py/models/topicsubscriptionresponsedto.py + - src/novu_py/models/topicsv1controller_gettopicsubscriberop.py - src/novu_py/models/triggereventrequestdto.py - src/novu_py/models/triggereventresponsedto.py - src/novu_py/models/triggereventtoallrequestdto.py @@ -517,15 +559,15 @@ generatedFiles: - src/novu_py/models/updatesubscriberchannelrequestdto.py - src/novu_py/models/updatesubscriberonlineflagrequestdto.py - src/novu_py/models/updatesubscriberrequestdto.py + - src/novu_py/models/updatetopicrequestdto.py - src/novu_py/models/validationerrordto.py - - src/novu_py/models/workflowinfodto.py - src/novu_py/models/workfloworiginenum.py - - src/novu_py/models/workflowpreferencedto.py - src/novu_py/models/workflowresponse.py - src/novu_py/notifications.py - src/novu_py/novu_messages.py - src/novu_py/novu_notifications.py - src/novu_py/novu_subscribers.py + - src/novu_py/novu_topics.py - src/novu_py/preferences.py - src/novu_py/properties.py - src/novu_py/py.typed @@ -533,11 +575,13 @@ generatedFiles: - src/novu_py/sdkconfiguration.py - src/novu_py/stats.py - src/novu_py/subscribers.py + - src/novu_py/subscriptions.py - src/novu_py/topics.py - src/novu_py/types/__init__.py - src/novu_py/types/basemodel.py - src/novu_py/utils/__init__.py - src/novu_py/utils/annotations.py + - src/novu_py/utils/datetimes.py - src/novu_py/utils/enums.py - src/novu_py/utils/eventstreaming.py - src/novu_py/utils/forms.py @@ -556,18 +600,18 @@ examples: EventsController_trigger: speakeasy-default-events-controller-trigger: requestBody: - application/json: {"name": "workflow_identifier", "payload": {"comment_id": "string", "post": {"text": "string"}}, "overrides": {"fcm": {"data": {"key": "value"}}}, "to": {"subscriberId": ""}} + application/json: {"name": "workflow_identifier", "payload": {"comment_id": "string", "post": {"text": "string"}}, "overrides": {"steps": {"email-step": {"providers": {"sendgrid": {"templateId": "1234567890"}}}}, "providers": {"sendgrid": {"templateId": "1234567890"}}}, "to": {"subscriberId": ""}} responses: "201": application/json: {"acknowledged": false, "status": "no_tenant_found"} "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} EventsController_cancel: speakeasy-default-events-controller-cancel: parameters: @@ -578,71 +622,71 @@ examples: "200": application/json: true "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} EventsController_broadcastEventToAll: speakeasy-default-events-controller-broadcast-event-to-all: requestBody: - application/json: {"name": "", "payload": {"comment_id": "string", "post": {"text": "string"}}} + application/json: {"name": "", "payload": {"comment_id": "string", "post": {"text": "string"}}, "overrides": {"steps": {"email-step": {"providers": {"sendgrid": {"templateId": "1234567890"}}}}, "providers": {"sendgrid": {"templateId": "1234567890"}}, "fcm": {"data": {"key": "value"}}}} responses: "200": application/json: {"acknowledged": true, "status": "trigger_not_active"} "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} EventsController_triggerBulk: speakeasy-default-events-controller-trigger-bulk: requestBody: - application/json: {"events": [{"name": "workflow_identifier", "payload": {"comment_id": "string", "post": {"text": "string"}}, "overrides": {"fcm": {"data": {"key": "value"}}}, "to": {"subscriberId": ""}}, {"name": "workflow_identifier", "payload": {"comment_id": "string", "post": {"text": "string"}}, "overrides": {"fcm": {"data": {"key": "value"}}}, "to": [{"topicKey": "", "type": "Subscriber"}]}, {"name": "workflow_identifier", "payload": {"comment_id": "string", "post": {"text": "string"}}, "overrides": {"fcm": {"data": {"key": "value"}}}, "to": ["SUBSCRIBER_ID", "SUBSCRIBER_ID"]}]} + application/json: {"events": [{"name": "workflow_identifier", "payload": {"comment_id": "string", "post": {"text": "string"}}, "overrides": {"steps": {"email-step": {"providers": {"sendgrid": {"templateId": "1234567890"}}}}, "providers": {"sendgrid": {"templateId": "1234567890"}}}, "to": {"subscriberId": ""}}, {"name": "workflow_identifier", "payload": {"comment_id": "string", "post": {"text": "string"}}, "overrides": {"steps": {"email-step": {"providers": {"sendgrid": {"templateId": "1234567890"}}}}, "providers": {"sendgrid": {"templateId": "1234567890"}}}, "to": [{"topicKey": "", "type": "Subscriber"}]}, {"name": "workflow_identifier", "payload": {"comment_id": "string", "post": {"text": "string"}}, "overrides": {"steps": {"email-step": {"providers": {"sendgrid": {"templateId": "1234567890"}}}}, "providers": {"sendgrid": {"templateId": "1234567890"}}}, "to": ["SUBSCRIBER_ID", "SUBSCRIBER_ID"]}]} responses: "201": application/json: [{"acknowledged": true, "status": "error"}, {"acknowledged": true, "status": "no_workflow_active_steps_defined"}, {"acknowledged": true, "status": "trigger_not_active"}] "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} SubscribersController_searchSubscribers: speakeasy-default-subscribers-controller-search-subscribers: responses: "200": - application/json: {"data": [{"subscriberId": "", "channels": [{"providerId": "mattermost", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}, {"providerId": "discord", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}], "_organizationId": "", "_environmentId": "", "deleted": true, "createdAt": "1720058356791", "updatedAt": "1744033581170"}], "next": "", "previous": ""} + application/json: {"data": [{"channels": [{"providerId": "mattermost", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}, {"providerId": "discord", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}], "subscriberId": "", "_organizationId": "", "_environmentId": "", "deleted": true, "createdAt": "1720058356791", "updatedAt": "1744033581170"}], "next": "", "previous": ""} "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} SubscribersController_createSubscriber: speakeasy-default-subscribers-controller-create-subscriber: requestBody: application/json: {"subscriberId": ""} responses: "201": - application/json: {"subscriberId": "", "channels": [{"providerId": "fcm", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}, {"providerId": "getstream", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}], "_organizationId": "", "_environmentId": "", "deleted": true, "createdAt": "1714711457124", "updatedAt": "1744053072731"} + application/json: {"channels": [{"providerId": "fcm", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}, {"providerId": "getstream", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}], "subscriberId": "", "_organizationId": "", "_environmentId": "", "deleted": true, "createdAt": "1714711457124", "updatedAt": "1744053072731"} "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} SubscribersController_getSubscriber: speakeasy-default-subscribers-controller-get-subscriber: parameters: @@ -651,15 +695,15 @@ examples: header: {} responses: "200": - application/json: {"subscriberId": "", "channels": [{"providerId": "push-webhook", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}, {"providerId": "zulip", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}], "_organizationId": "", "_environmentId": "", "deleted": true, "createdAt": "1715401776393", "updatedAt": "1744030523549"} + application/json: {"channels": [{"providerId": "push-webhook", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}, {"providerId": "zulip", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}], "subscriberId": "", "_organizationId": "", "_environmentId": "", "deleted": true, "createdAt": "1715401776393", "updatedAt": "1744030523549"} "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} SubscribersController_patchSubscriber: speakeasy-default-subscribers-controller-patch-subscriber: parameters: @@ -670,15 +714,15 @@ examples: application/json: {} responses: "200": - application/json: {"subscriberId": "", "channels": [{"providerId": "getstream", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}, {"providerId": "zulip", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}], "_organizationId": "", "_environmentId": "", "deleted": false, "createdAt": "1741791916459", "updatedAt": "1744039985994"} + application/json: {"channels": [{"providerId": "getstream", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}, {"providerId": "zulip", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}], "subscriberId": "", "_organizationId": "", "_environmentId": "", "deleted": false, "createdAt": "1741791916459", "updatedAt": "1744039985994"} "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} SubscribersController_removeSubscriber: speakeasy-default-subscribers-controller-remove-subscriber: parameters: @@ -689,13 +733,13 @@ examples: "200": application/json: {"acknowledged": true, "status": "success"} "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} SubscribersV1Controller_listSubscribers: speakeasy-default-subscribers-v1-controller-list-subscribers: parameters: @@ -706,13 +750,13 @@ examples: "200": application/json: {"page": 7685.78, "hasMore": false, "pageSize": 6783.17, "data": []} "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} SubscribersV1Controller_updateSubscriber: speakeasy-default-subscribers-v1-controller-update-subscriber: parameters: @@ -723,15 +767,15 @@ examples: application/json: {"email": "john.doe@example.com", "firstName": "John", "lastName": "Doe", "phone": "+1234567890", "avatar": "https://example.com/avatar.jpg", "locale": "en-US", "data": {"preferences": {"notifications": true, "theme": "dark"}, "tags": ["premium", "newsletter"]}} responses: "200": - application/json: {"subscriberId": "", "channels": [{"providerId": "getstream", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}, {"providerId": "grafana-on-call", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}], "_organizationId": "", "_environmentId": "", "deleted": true, "createdAt": "1719853140686", "updatedAt": "1744050520885"} + application/json: {"channels": [{"providerId": "getstream", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}, {"providerId": "grafana-on-call", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}], "subscriberId": "", "_organizationId": "", "_environmentId": "", "deleted": true, "createdAt": "1719853140686", "updatedAt": "1744050520885"} "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} SubscribersV1Controller_bulkCreateSubscribers: speakeasy-default-subscribers-v1-controller-bulk-create-subscribers: requestBody: @@ -740,13 +784,13 @@ examples: "201": application/json: {"updated": [{"subscriberId": ""}, {"subscriberId": ""}, {"subscriberId": ""}], "created": [{"subscriberId": ""}, {"subscriberId": ""}, {"subscriberId": ""}], "failed": [{}, {}]} "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} SubscribersController_getSubscriberPreferences: speakeasy-default-subscribers-controller-get-subscriber-preferences: parameters: @@ -757,13 +801,13 @@ examples: "200": application/json: {"global": {"enabled": false, "channels": {}}, "workflows": [{"enabled": false, "channels": {}, "overrides": [], "workflow": {"slug": "", "identifier": "", "name": ""}}, {"enabled": true, "channels": {}, "overrides": [], "workflow": {"slug": "", "identifier": "", "name": ""}}]} "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} SubscribersController_updateSubscriberPreferences: speakeasy-default-subscribers-controller-update-subscriber-preferences: parameters: @@ -776,13 +820,13 @@ examples: "200": application/json: {"global": {"enabled": false, "channels": {}}, "workflows": [{"enabled": true, "channels": {}, "overrides": [{"channel": "chat", "source": "template"}, {"channel": "push", "source": "subscriber"}, {"channel": "push", "source": "template"}], "workflow": {"slug": "", "identifier": "", "name": ""}}, {"enabled": true, "channels": {}, "overrides": [], "workflow": {"slug": "", "identifier": "", "name": ""}}]} "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} SubscribersV1Controller_updateSubscriberChannel: speakeasy-default-subscribers-v1-controller-update-subscriber-channel: parameters: @@ -793,15 +837,15 @@ examples: application/json: {"providerId": "pushpad", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}} responses: "200": - application/json: {"subscriberId": "", "channels": [{"providerId": "zulip", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}, {"providerId": "pusher-beams", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}], "_organizationId": "", "_environmentId": "", "deleted": false, "createdAt": "1727951104784", "updatedAt": "1744069275590"} + application/json: {"channels": [{"providerId": "zulip", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}, {"providerId": "pusher-beams", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}], "subscriberId": "", "_organizationId": "", "_environmentId": "", "deleted": false, "createdAt": "1727951104784", "updatedAt": "1744069275590"} "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} SubscribersV1Controller_modifySubscriberChannel: speakeasy-default-subscribers-v1-controller-modify-subscriber-channel: parameters: @@ -812,15 +856,15 @@ examples: application/json: {"providerId": "zulip", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}} responses: "200": - application/json: {"subscriberId": "", "channels": [{"providerId": "pushpad", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}, {"providerId": "apns", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}], "_organizationId": "", "_environmentId": "", "deleted": false, "createdAt": "1743982112081", "updatedAt": "1744032062462"} + application/json: {"channels": [{"providerId": "pushpad", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}, {"providerId": "apns", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}], "subscriberId": "", "_organizationId": "", "_environmentId": "", "deleted": false, "createdAt": "1743982112081", "updatedAt": "1744032062462"} "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} SubscribersV1Controller_deleteSubscriberCredentials: speakeasy-default-subscribers-v1-controller-delete-subscriber-credentials: parameters: @@ -830,13 +874,13 @@ examples: header: {} responses: "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} SubscribersV1Controller_chatAccessOauth: speakeasy-default-subscribers-v1-controller-chat-access-oauth: parameters: @@ -849,13 +893,13 @@ examples: header: {} responses: "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} SubscribersV1Controller_chatOauthCallback: speakeasy-default-subscribers-v1-controller-chat-oauth-callback: parameters: @@ -873,13 +917,13 @@ examples: "302": application/json: "" "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} SubscribersV1Controller_markActionAsSeen: speakeasy-default-subscribers-v1-controller-mark-action-as-seen: parameters: @@ -892,15 +936,15 @@ examples: application/json: {"status": "done"} responses: "201": - application/json: {"_templateId": "", "_environmentId": "", "_messageTemplateId": "", "_organizationId": "", "_notificationId": "", "_subscriberId": "", "subscriber": {"subscriberId": "", "channels": [{"providerId": "push-webhook", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}, {"providerId": "ryver", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}], "_organizationId": "", "_environmentId": "", "deleted": true, "createdAt": "1743007624709", "updatedAt": "1743997591410"}, "createdAt": "1720590167407", "content": {"type": "text", "content": ""}, "transactionId": "", "channel": "sms", "read": true, "seen": true, "cta": {"data": {}}, "status": "sent"} + application/json: {"_templateId": "", "_environmentId": "", "_messageTemplateId": "", "_organizationId": "", "_notificationId": "", "_subscriberId": "", "subscriber": {"channels": [{"providerId": "push-webhook", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}, {"providerId": "ryver", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}], "subscriberId": "", "_organizationId": "", "_environmentId": "", "deleted": true, "createdAt": "1743007624709", "updatedAt": "1743997591410"}, "template": {"name": "", "description": "disrespect after ouch meager stupendous failing incidentally fast considering ridge", "active": false, "draft": true, "preferenceSettings": {"email": true, "sms": false, "in_app": true, "chat": false, "push": true}, "critical": true, "tags": ["", "", ""], "steps": [], "_organizationId": "", "_creatorId": "", "_environmentId": "", "triggers": [], "_notificationGroupId": "", "deleted": true, "deletedAt": "", "deletedBy": ""}, "createdAt": "1720590167407", "content": "", "transactionId": "", "channel": "sms", "read": true, "seen": true, "cta": {"data": {}}, "status": "sent"} "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} SubscribersV1Controller_markAllUnreadAsRead: speakeasy-default-subscribers-v1-controller-mark-all-unread-as-read: parameters: @@ -913,13 +957,13 @@ examples: "201": application/json: 4603.37 "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} SubscribersV1Controller_markMessagesAs: speakeasy-default-subscribers-v1-controller-mark-messages-as: parameters: @@ -930,15 +974,15 @@ examples: application/json: {"messageId": "", "markAs": "unread"} responses: "201": - application/json: [{"_templateId": "", "_environmentId": "", "_messageTemplateId": "", "_organizationId": "", "_notificationId": "", "_subscriberId": "", "subscriber": {"subscriberId": "", "channels": [{"providerId": "pusher-beams", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}, {"providerId": "ryver", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}], "_organizationId": "", "_environmentId": "", "deleted": true, "createdAt": "1730582314935", "updatedAt": "1744052377348"}, "createdAt": "1733881358725", "content": {"type": "button", "content": ""}, "transactionId": "", "channel": "email", "read": false, "seen": true, "cta": {"data": {}}, "status": "error"}] + application/json: [{"_templateId": "", "_environmentId": "", "_messageTemplateId": "", "_organizationId": "", "_notificationId": "", "_subscriberId": "", "subscriber": {"channels": [{"providerId": "pusher-beams", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}, {"providerId": "ryver", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}], "subscriberId": "", "_organizationId": "", "_environmentId": "", "deleted": true, "createdAt": "1730582314935", "updatedAt": "1744052377348"}, "template": {"name": "", "description": "milestone before destock over mostly ravage", "active": true, "draft": false, "preferenceSettings": {"email": true, "sms": false, "in_app": true, "chat": false, "push": true}, "critical": true, "tags": [""], "steps": [{}], "_organizationId": "", "_creatorId": "", "_environmentId": "", "triggers": [{"type": "event", "identifier": "", "variables": [{"name": ""}, {"name": ""}, {"name": ""}]}], "_notificationGroupId": "", "deleted": true, "deletedAt": "", "deletedBy": ""}, "createdAt": "1733881358725", "content": "", "transactionId": "", "channel": "email", "read": false, "seen": true, "cta": {"data": {}}, "status": "error"}] "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} SubscribersV1Controller_getNotificationsFeed: "": parameters: @@ -950,13 +994,13 @@ examples: header: {} responses: "200": - application/json: {"totalCount": 5, "hasMore": true, "data": [{"_id": "615c1f2f9b0c5b001f8e4e3b", "_templateId": "template_12345", "_environmentId": "env_67890", "_messageTemplateId": "message_template_54321", "_organizationId": "org_98765", "_notificationId": "notification_123456", "_subscriberId": "subscriber_112233", "_feedId": "feed_445566", "_jobId": "job_778899", "createdAt": "2024-12-10T10:10:59.639Z", "updatedAt": "2024-12-10T10:10:59.639Z", "actor": {"data": null, "type": "system_icon"}, "transactionId": "transaction_123456", "templateIdentifier": "template_abcdef", "providerId": "provider_xyz", "content": "This is a test notification content.", "subject": "Test Notification Subject", "channel": "push", "read": false, "seen": true, "deleted": false, "deviceTokens": ["token1", "token2"], "cta": {"data": {}}, "status": "sent", "payload": {"key": "value"}, "overrides": {"overrideKey": "overrideValue"}}, {"_id": "615c1f2f9b0c5b001f8e4e3b", "_templateId": "template_12345", "_environmentId": "env_67890", "_messageTemplateId": "message_template_54321", "_organizationId": "org_98765", "_notificationId": "notification_123456", "_subscriberId": "subscriber_112233", "_feedId": "feed_445566", "_jobId": "job_778899", "createdAt": "2024-12-10T10:10:59.639Z", "updatedAt": "2024-12-10T10:10:59.639Z", "actor": {"data": null, "type": "system_icon"}, "transactionId": "transaction_123456", "templateIdentifier": "template_abcdef", "providerId": "provider_xyz", "content": "This is a test notification content.", "subject": "Test Notification Subject", "channel": "push", "read": false, "seen": true, "deleted": false, "deviceTokens": ["token1", "token2"], "cta": {"data": {}}, "status": "sent", "payload": {"key": "value"}, "overrides": {"overrideKey": "overrideValue"}}, {"_id": "615c1f2f9b0c5b001f8e4e3b", "_templateId": "template_12345", "_environmentId": "env_67890", "_messageTemplateId": "message_template_54321", "_organizationId": "org_98765", "_notificationId": "notification_123456", "_subscriberId": "subscriber_112233", "_feedId": "feed_445566", "_jobId": "job_778899", "createdAt": "2024-12-10T10:10:59.639Z", "updatedAt": "2024-12-10T10:10:59.639Z", "actor": {"data": null, "type": "system_icon"}, "transactionId": "transaction_123456", "templateIdentifier": "template_abcdef", "providerId": "provider_xyz", "content": "This is a test notification content.", "subject": "Test Notification Subject", "channel": "in_app", "read": false, "seen": true, "deleted": false, "deviceTokens": ["token1", "token2"], "cta": {"data": {}}, "status": "sent", "payload": {"key": "value"}, "overrides": {"overrideKey": "overrideValue"}}], "pageSize": 2, "page": 1} + application/json: {"totalCount": 5, "hasMore": true, "data": [{"_id": "615c1f2f9b0c5b001f8e4e3b", "_templateId": "template_12345", "_environmentId": "env_67890", "_messageTemplateId": "message_template_54321", "_organizationId": "org_98765", "_notificationId": "notification_123456", "_subscriberId": "subscriber_112233", "_feedId": "feed_445566", "_jobId": "job_778899", "createdAt": "2024-12-10T10:10:59.639Z", "updatedAt": "2024-12-10T10:10:59.639Z", "actor": {"data": null, "type": "system_icon"}, "transactionId": "transaction_123456", "templateIdentifier": "template_abcdef", "providerId": "provider_xyz", "content": "This is a test notification content.", "subject": "Test Notification Subject", "channel": "push", "read": false, "seen": true, "deviceTokens": ["token1", "token2"], "cta": {"data": {}}, "status": "sent", "payload": {"key": "value"}, "overrides": {"overrideKey": "overrideValue"}}, {"_id": "615c1f2f9b0c5b001f8e4e3b", "_templateId": "template_12345", "_environmentId": "env_67890", "_messageTemplateId": "message_template_54321", "_organizationId": "org_98765", "_notificationId": "notification_123456", "_subscriberId": "subscriber_112233", "_feedId": "feed_445566", "_jobId": "job_778899", "createdAt": "2024-12-10T10:10:59.639Z", "updatedAt": "2024-12-10T10:10:59.639Z", "actor": {"data": null, "type": "system_icon"}, "transactionId": "transaction_123456", "templateIdentifier": "template_abcdef", "providerId": "provider_xyz", "content": "This is a test notification content.", "subject": "Test Notification Subject", "channel": "push", "read": false, "seen": true, "deviceTokens": ["token1", "token2"], "cta": {"data": {}}, "status": "sent", "payload": {"key": "value"}, "overrides": {"overrideKey": "overrideValue"}}, {"_id": "615c1f2f9b0c5b001f8e4e3b", "_templateId": "template_12345", "_environmentId": "env_67890", "_messageTemplateId": "message_template_54321", "_organizationId": "org_98765", "_notificationId": "notification_123456", "_subscriberId": "subscriber_112233", "_feedId": "feed_445566", "_jobId": "job_778899", "createdAt": "2024-12-10T10:10:59.639Z", "updatedAt": "2024-12-10T10:10:59.639Z", "actor": {"data": null, "type": "system_icon"}, "transactionId": "transaction_123456", "templateIdentifier": "template_abcdef", "providerId": "provider_xyz", "content": "This is a test notification content.", "subject": "Test Notification Subject", "channel": "in_app", "read": false, "seen": true, "deviceTokens": ["token1", "token2"], "cta": {"data": {}}, "status": "sent", "payload": {"key": "value"}, "overrides": {"overrideKey": "overrideValue"}}], "pageSize": 2, "page": 1} "414": application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Must be a valid email address"], "value": "invalidEmail"}, "fieldName2": {"messages": ["Must be at least 18 years old"], "value": 17}, "fieldName3": {"messages": ["Must be a boolean value"], "value": true}, "fieldName4": {"messages": ["Must be a valid object"], "value": {"key": "value"}}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Must be a valid email address"], "value": "invalidEmail"}, "fieldName2": {"messages": ["Must be at least 18 years old"], "value": 17}, "fieldName3": {"messages": ["Must be a boolean value"], "value": true}, "fieldName4": {"messages": ["Must be a valid object"], "value": [{"key": "value"}]}}} "500": application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} SubscribersV1Controller_getUnseenCount: @@ -972,13 +1016,13 @@ examples: "200": application/json: {"count": 2166.35} "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} SubscribersV1Controller_updateSubscriberOnlineFlag: speakeasy-default-subscribers-v1-controller-update-subscriber-online-flag: parameters: @@ -989,28 +1033,28 @@ examples: application/json: {"isOnline": false} responses: "200": - application/json: {"subscriberId": "", "channels": [{"providerId": "one-signal", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}, {"providerId": "mattermost", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}], "_organizationId": "", "_environmentId": "", "deleted": false, "createdAt": "1739004539514", "updatedAt": "1744001143904"} + application/json: {"channels": [{"providerId": "one-signal", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}, {"providerId": "mattermost", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}], "subscriberId": "", "_organizationId": "", "_environmentId": "", "deleted": false, "createdAt": "1739004539514", "updatedAt": "1744001143904"} "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} IntegrationsController_listIntegrations: speakeasy-default-integrations-controller-list-integrations: responses: "200": application/json: [{"_environmentId": "", "_organizationId": "", "name": "", "identifier": "", "providerId": "", "channel": "sms", "credentials": {}, "active": false, "deleted": true, "primary": true}, {"_environmentId": "", "_organizationId": "", "name": "", "identifier": "", "providerId": "", "channel": "in_app", "credentials": {}, "active": false, "deleted": false, "primary": true}, {"_environmentId": "", "_organizationId": "", "name": "", "identifier": "", "providerId": "", "channel": "chat", "credentials": {}, "active": true, "deleted": true, "primary": false}] "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} IntegrationsController_createIntegration: speakeasy-default-integrations-controller-create-integration: requestBody: @@ -1019,13 +1063,13 @@ examples: "201": application/json: {"_environmentId": "", "_organizationId": "", "name": "", "identifier": "", "providerId": "", "channel": "chat", "credentials": {}, "active": true, "deleted": true, "primary": true} "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} IntegrationsController_updateIntegrationById: speakeasy-default-integrations-controller-update-integration-by-id: parameters: @@ -1038,13 +1082,13 @@ examples: "200": application/json: {"_environmentId": "", "_organizationId": "", "name": "", "identifier": "", "providerId": "", "channel": "push", "credentials": {}, "active": false, "deleted": true, "primary": false} "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} IntegrationsController_removeIntegration: speakeasy-default-integrations-controller-remove-integration: parameters: @@ -1055,13 +1099,13 @@ examples: "200": application/json: [{"_environmentId": "", "_organizationId": "", "name": "", "identifier": "", "providerId": "", "channel": "chat", "credentials": {}, "active": true, "deleted": false, "primary": false}, {"_environmentId": "", "_organizationId": "", "name": "", "identifier": "", "providerId": "", "channel": "chat", "credentials": {}, "active": true, "deleted": false, "primary": false}] "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} IntegrationsController_setIntegrationAsPrimary: speakeasy-default-integrations-controller-set-integration-as-primary: parameters: @@ -1072,26 +1116,26 @@ examples: "200": application/json: {"_environmentId": "", "_organizationId": "", "name": "", "identifier": "", "providerId": "", "channel": "email", "credentials": {}, "active": false, "deleted": false, "primary": true} "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} IntegrationsController_getActiveIntegrations: speakeasy-default-integrations-controller-get-active-integrations: responses: "200": application/json: [{"_environmentId": "", "_organizationId": "", "name": "", "identifier": "", "providerId": "", "channel": "email", "credentials": {}, "active": true, "deleted": true, "primary": true}, {"_environmentId": "", "_organizationId": "", "name": "", "identifier": "", "providerId": "", "channel": "chat", "credentials": {}, "active": false, "deleted": true, "primary": true}, {"_environmentId": "", "_organizationId": "", "name": "", "identifier": "", "providerId": "", "channel": "chat", "credentials": {}, "active": false, "deleted": true, "primary": true}] "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} IntegrationsController_getWebhookSupportStatus: speakeasy-default-integrations-controller-get-webhook-support-status: parameters: @@ -1102,13 +1146,13 @@ examples: "200": application/json: true "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} MessagesController_getMessages: speakeasy-default-messages-controller-get-messages: parameters: @@ -1118,15 +1162,15 @@ examples: header: {} responses: "200": - application/json: {"hasMore": true, "data": [{"_environmentId": "", "_organizationId": "", "_subscriberId": "", "transactionId": "", "jobs": [{"_id": "", "type": "sms", "executionDetails": [], "step": {"_id": "", "active": false, "filters": [{"isNegated": true, "type": "MULTI_LIST", "value": "AND", "children": [{"field": "", "value": "", "operator": "NOT_LIKE", "on": "subscriber"}, {"field": "", "value": "", "operator": "LARGER_EQUAL", "on": "subscriber"}, {"field": "", "value": "", "operator": "NOT_IN", "on": "subscriber"}]}, {"isNegated": true, "type": "NUMBER", "value": "AND", "children": []}], "_templateId": ""}, "overrides": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "providerId": "fcm", "status": ""}]}, {"_environmentId": "", "_organizationId": "", "_subscriberId": "", "transactionId": "", "jobs": [{"_id": "", "type": "push", "executionDetails": [], "step": {"_id": "", "active": false, "filters": [{"isNegated": false, "type": "STATEMENT", "value": "OR", "children": [{"field": "", "value": "", "operator": "NOT_BETWEEN", "on": "payload"}]}, {"isNegated": false, "type": "GROUP", "value": "OR", "children": [{"field": "", "value": "", "operator": "LIKE", "on": "subscriber"}, {"field": "", "value": "", "operator": "SMALLER", "on": "subscriber"}, {"field": "", "value": "", "operator": "ALL_IN", "on": "payload"}]}, {"isNegated": false, "type": "DATE", "value": "AND", "children": []}], "_templateId": ""}, "overrides": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "providerId": "sendchamp", "status": ""}, {"_id": "", "type": "push", "executionDetails": [{"_id": "", "status": "Queued", "detail": "", "isRetry": true, "isTest": false, "providerId": "twilio", "source": "Webhook"}, {"_id": "", "status": "ReadConfirmation", "detail": "", "isRetry": false, "isTest": false, "providerId": "azure-sms", "source": "Payload"}], "step": {"_id": "", "active": false, "filters": [], "_templateId": ""}, "overrides": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "providerId": "netcore", "status": ""}, {"_id": "", "type": "trigger", "executionDetails": [{"_id": "", "status": "Pending", "detail": "", "isRetry": false, "isTest": true, "providerId": "mandrill", "source": "Webhook"}, {"_id": "", "status": "Queued", "detail": "", "isRetry": false, "isTest": true, "providerId": "nexmo", "source": "Payload"}], "step": {"_id": "", "active": false, "filters": [{"isNegated": false, "type": "TEXT", "value": "OR", "children": [{"field": "", "value": "", "operator": "SMALLER_EQUAL", "on": "subscriber"}, {"field": "", "value": "", "operator": "BETWEEN", "on": "subscriber"}, {"field": "", "value": "", "operator": "ALL_IN", "on": "payload"}]}, {"isNegated": true, "type": "NUMBER", "value": "AND", "children": [{"field": "", "value": "", "operator": "LARGER_EQUAL", "on": "payload"}]}, {"isNegated": true, "type": "STATEMENT", "value": "OR", "children": [{"field": "", "value": "", "operator": "EQUAL", "on": "subscriber"}, {"field": "", "value": "", "operator": "BETWEEN", "on": "subscriber"}]}], "_templateId": ""}, "overrides": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "providerId": "messagebird", "status": ""}]}, {"_environmentId": "", "_organizationId": "", "_subscriberId": "", "transactionId": "", "jobs": [{"_id": "", "type": "email", "executionDetails": [{"_id": "", "status": "Success", "detail": "", "isRetry": false, "isTest": true, "providerId": "mailtrap", "source": "Credentials"}], "step": {"_id": "", "active": true, "filters": [], "_templateId": ""}, "overrides": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "providerId": "simpletexting", "status": ""}, {"_id": "", "type": "trigger", "executionDetails": [], "step": {"_id": "", "active": false, "filters": [{"isNegated": true, "type": "MULTI_LIST", "value": "AND", "children": [{"field": "", "value": "", "operator": "LIKE", "on": "subscriber"}, {"field": "", "value": "", "operator": "NOT_LIKE", "on": "subscriber"}]}, {"isNegated": false, "type": "STATEMENT", "value": "OR", "children": [{"field": "", "value": "", "operator": "EQUAL", "on": "payload"}, {"field": "", "value": "", "operator": "SMALLER_EQUAL", "on": "subscriber"}, {"field": "", "value": "", "operator": "SMALLER_EQUAL", "on": "subscriber"}]}, {"isNegated": false, "type": "BOOLEAN", "value": "OR", "children": [{"field": "", "value": "", "operator": "SMALLER", "on": "payload"}, {"field": "", "value": "", "operator": "ANY_IN", "on": "payload"}, {"field": "", "value": "", "operator": "EQUAL", "on": "subscriber"}]}], "_templateId": ""}, "overrides": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "providerId": "isend-sms", "status": ""}]}], "pageSize": 4193.05, "page": 7727.4} + application/json: {"hasMore": true, "data": [{"_templateId": "", "_environmentId": "", "_messageTemplateId": "", "_organizationId": "", "_notificationId": "", "_subscriberId": "", "subscriber": {"channels": [{"providerId": "push-webhook", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}, {"providerId": "zulip", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}], "subscriberId": "", "_organizationId": "", "_environmentId": "", "deleted": true, "createdAt": "1718470726696", "updatedAt": "1747099473852"}, "template": {"name": "", "description": "confirm desk eek velvety merrily now up coolly", "active": false, "draft": false, "preferenceSettings": {"email": true, "sms": false, "in_app": true, "chat": false, "push": true}, "critical": false, "tags": ["", ""], "steps": [{}], "_organizationId": "", "_creatorId": "", "_environmentId": "", "triggers": [], "_notificationGroupId": "", "deleted": false, "deletedAt": "", "deletedBy": ""}, "createdAt": "1736805604215", "content": "", "transactionId": "", "channel": "in_app", "read": true, "seen": false, "cta": {}, "status": "warning"}, {"_templateId": "", "_environmentId": "", "_messageTemplateId": "", "_organizationId": "", "_notificationId": "", "_subscriberId": "", "subscriber": {"channels": [{"providerId": "whatsapp-business", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}, {"providerId": "msteams", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}, {"providerId": "one-signal", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}], "subscriberId": "", "_organizationId": "", "_environmentId": "", "deleted": false, "createdAt": "1722949222236", "updatedAt": "1747054468444"}, "template": {"name": "", "description": "considering frequent brr crystallize tightly onto furthermore boyfriend", "active": false, "draft": false, "preferenceSettings": {"email": true, "sms": false, "in_app": true, "chat": false, "push": true}, "critical": false, "tags": [""], "steps": [{}], "_organizationId": "", "_creatorId": "", "_environmentId": "", "triggers": [{"type": "event", "identifier": "", "variables": [{"name": ""}]}], "_notificationGroupId": "", "deleted": false, "deletedAt": "", "deletedBy": ""}, "createdAt": "1738497503316", "content": "", "transactionId": "", "channel": "email", "read": false, "seen": true, "cta": {}, "status": "sent"}, {"_templateId": "", "_environmentId": "", "_messageTemplateId": "", "_organizationId": "", "_notificationId": "", "_subscriberId": "", "subscriber": {"channels": [{"providerId": "discord", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}, {"providerId": "one-signal", "credentials": {"webhookUrl": "https://example.com/webhook", "channel": "general", "deviceTokens": ["token1", "token2", "token3"], "alertUid": "12345-abcde", "title": "Critical Alert", "imageUrl": "https://example.com/image.png", "state": "resolved", "externalUrl": "https://example.com/details"}, "_integrationId": ""}], "subscriberId": "", "_organizationId": "", "_environmentId": "", "deleted": false, "createdAt": "1736838903509", "updatedAt": "1747113914602"}, "template": {"name": "", "description": "question gray little plump yahoo lasting handy decide", "active": true, "draft": false, "preferenceSettings": {"email": true, "sms": false, "in_app": true, "chat": false, "push": true}, "critical": true, "tags": ["", ""], "steps": [{}, {}], "_organizationId": "", "_creatorId": "", "_environmentId": "", "triggers": [], "_notificationGroupId": "", "deleted": true, "deletedAt": "", "deletedBy": ""}, "createdAt": "1730851823772", "content": [{"type": "button", "content": ""}, {"type": "text", "content": ""}, {"type": "text", "content": ""}], "transactionId": "", "channel": "sms", "read": true, "seen": true, "cta": {}, "status": "warning"}], "pageSize": 4193.05, "page": 7727.4} "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} MessagesController_deleteMessage: speakeasy-default-messages-controller-delete-message: parameters: @@ -1137,13 +1181,13 @@ examples: "200": application/json: {"acknowledged": false, "status": "deleted"} "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} MessagesController_deleteMessagesByTransactionId: speakeasy-default-messages-controller-delete-messages-by-transaction-id: parameters: @@ -1153,13 +1197,13 @@ examples: header: {} responses: "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} NotificationsController_listNotifications: speakeasy-default-notifications-controller-list-notifications: parameters: @@ -1171,13 +1215,13 @@ examples: "200": application/json: {"hasMore": false, "data": [{"_environmentId": "", "_organizationId": "", "_subscriberId": "", "transactionId": "", "jobs": [{"_id": "", "type": "email", "executionDetails": [], "step": {"_id": "", "active": true, "filters": [{"isNegated": false, "type": "BOOLEAN", "value": "OR", "children": []}, {"isNegated": true, "type": "LIST", "value": "OR", "children": [{"field": "", "value": "", "operator": "LARGER", "on": "subscriber"}, {"field": "", "value": "", "operator": "NOT_EQUAL", "on": "subscriber"}]}], "_templateId": ""}, "overrides": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "providerId": "postmark", "status": ""}, {"_id": "", "type": "custom", "executionDetails": [{"_id": "", "status": "ReadConfirmation", "detail": "", "isRetry": true, "isTest": true, "providerId": "plivo", "source": "Webhook"}, {"_id": "", "status": "Success", "detail": "", "isRetry": false, "isTest": true, "providerId": "ryver", "source": "Credentials"}], "step": {"_id": "", "active": true, "filters": [{"isNegated": true, "type": "NUMBER", "value": "AND", "children": [{"field": "", "value": "", "operator": "ALL_IN", "on": "subscriber"}]}, {"isNegated": false, "type": "MULTI_LIST", "value": "AND", "children": [{"field": "", "value": "", "operator": "EQUAL", "on": "subscriber"}, {"field": "", "value": "", "operator": "SMALLER", "on": "subscriber"}, {"field": "", "value": "", "operator": "NOT_LIKE", "on": "subscriber"}]}, {"isNegated": false, "type": "GROUP", "value": "OR", "children": []}], "_templateId": ""}, "overrides": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "providerId": "ring-central", "status": ""}, {"_id": "", "type": "digest", "executionDetails": [{"_id": "", "status": "Queued", "detail": "", "isRetry": false, "isTest": true, "providerId": "resend", "source": "Credentials"}, {"_id": "", "status": "ReadConfirmation", "detail": "", "isRetry": false, "isTest": true, "providerId": "simpletexting", "source": "Internal"}, {"_id": "", "status": "Queued", "detail": "", "isRetry": false, "isTest": true, "providerId": "nodemailer", "source": "Internal"}], "step": {"_id": "", "active": false, "filters": [{"isNegated": true, "type": "DATE", "value": "AND", "children": [{"field": "", "value": "", "operator": "ALL_IN", "on": "subscriber"}, {"field": "", "value": "", "operator": "LIKE", "on": "payload"}]}, {"isNegated": false, "type": "STATEMENT", "value": "OR", "children": [{"field": "", "value": "", "operator": "LARGER", "on": "subscriber"}, {"field": "", "value": "", "operator": "IN", "on": "payload"}, {"field": "", "value": "", "operator": "NOT_BETWEEN", "on": "subscriber"}]}], "_templateId": ""}, "overrides": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "providerId": "mailjet", "status": ""}]}, {"_environmentId": "", "_organizationId": "", "_subscriberId": "", "transactionId": "", "jobs": [{"_id": "", "type": "trigger", "executionDetails": [{"_id": "", "status": "Failed", "detail": "", "isRetry": true, "isTest": false, "providerId": "plivo", "source": "Internal"}, {"_id": "", "status": "Success", "detail": "", "isRetry": true, "isTest": false, "providerId": "whatsapp-business", "source": "Internal"}], "step": {"_id": "", "active": true, "filters": [{"isNegated": true, "type": "GROUP", "value": "AND", "children": [{"field": "", "value": "", "operator": "NOT_EQUAL", "on": "subscriber"}, {"field": "", "value": "", "operator": "LARGER_EQUAL", "on": "subscriber"}]}], "_templateId": ""}, "overrides": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "providerId": "ses", "status": ""}, {"_id": "", "type": "trigger", "executionDetails": [{"_id": "", "status": "Failed", "detail": "", "isRetry": false, "isTest": true, "providerId": "isend-sms", "source": "Webhook"}, {"_id": "", "status": "Queued", "detail": "", "isRetry": true, "isTest": false, "providerId": "sendinblue", "source": "Payload"}, {"_id": "", "status": "Pending", "detail": "", "isRetry": true, "isTest": true, "providerId": "generic-sms", "source": "Internal"}], "step": {"_id": "", "active": false, "filters": [{"isNegated": false, "type": "STATEMENT", "value": "AND", "children": [{"field": "", "value": "", "operator": "BETWEEN", "on": "subscriber"}]}, {"isNegated": false, "type": "STATEMENT", "value": "OR", "children": []}], "_templateId": ""}, "overrides": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "providerId": "plunk", "status": ""}]}], "pageSize": 2139.89, "page": 3875.74} "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} NotificationsController_getNotification: speakeasy-default-notifications-controller-get-notification: parameters: @@ -1188,39 +1232,39 @@ examples: "200": application/json: {"_environmentId": "", "_organizationId": "", "_subscriberId": "", "transactionId": "", "jobs": [{"_id": "", "type": "custom", "executionDetails": [{"_id": "", "status": "Warning", "detail": "", "isRetry": true, "isTest": false, "providerId": "azure-sms", "source": "Credentials"}], "step": {"_id": "", "active": false, "filters": [], "_templateId": ""}, "overrides": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "providerId": "apns", "status": ""}, {"_id": "", "type": "custom", "executionDetails": [], "step": {"_id": "", "active": true, "filters": [], "_templateId": ""}, "overrides": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "providerId": "bandwidth", "status": ""}]} "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} NotificationsController_getActivityGraphStats: speakeasy-default-notifications-controller-get-activity-graph-stats: responses: "200": application/json: [{"_id": "", "count": 4718.99, "templates": ["", "", ""], "channels": []}, {"_id": "", "count": 3081.94, "templates": ["", ""], "channels": ["email", "email"]}] "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} NotificationsController_getActivityStats: speakeasy-default-notifications-controller-get-activity-stats: responses: "200": application/json: {"weeklySent": 3704.56, "monthlySent": 9198.31} "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} TopicsController_createTopic: speakeasy-default-topics-controller-create-topic: requestBody: @@ -1255,6 +1299,18 @@ examples: application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Must be a valid email address"], "value": "invalidEmail"}, "fieldName2": {"messages": ["Must be at least 18 years old"], "value": 17}, "fieldName3": {"messages": ["Must be a boolean value"], "value": true}, "fieldName4": {"messages": ["Must be a valid object"], "value": {"key": "value"}}}} "500": application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + speakeasy-default-topics-controller-list-topics: + responses: + "200": + application/json: {"data": [{"_id": "64da692e9a94fb2e6449ad06", "key": "product-updates", "name": "Product Updates", "createdAt": "2023-08-15T00:00:00.000Z", "updatedAt": "2023-08-15T00:00:00.000Z"}, {"_id": "64da692e9a94fb2e6449ad06", "key": "product-updates", "name": "Product Updates", "createdAt": "2023-08-15T00:00:00.000Z", "updatedAt": "2023-08-15T00:00:00.000Z"}, {"_id": "64da692e9a94fb2e6449ad06", "key": "product-updates", "name": "Product Updates", "createdAt": "2023-08-15T00:00:00.000Z", "updatedAt": "2023-08-15T00:00:00.000Z"}], "next": "", "previous": ""} + "414": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + "400": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + "422": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + "500": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} TopicsController_deleteTopic: speakeasy-default-topics-controller-delete-topic: parameters: @@ -1263,13 +1319,15 @@ examples: header: {} responses: "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + "200": + application/json: {"acknowledged": true} TopicsController_getTopic: speakeasy-default-topics-controller-get-topic: parameters: @@ -1278,15 +1336,15 @@ examples: header: {} responses: "200": - application/json: {"_organizationId": "", "_environmentId": "", "key": "", "name": "", "subscribers": [""]} + application/json: {"_id": "64da692e9a94fb2e6449ad06", "key": "product-updates", "name": "Product Updates", "createdAt": "2023-08-15T00:00:00.000Z", "updatedAt": "2023-08-15T00:00:00.000Z"} "414": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "400": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} "422": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": - application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} TopicsController_renameTopic: speakeasy-default-topics-controller-rename-topic: parameters: @@ -1360,5 +1418,131 @@ examples: application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} "500": application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "Resource not found.", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + SubscribersController_listSubscriberTopics: + speakeasy-default-subscribers-controller-list-subscriber-topics: + parameters: + path: + subscriberId: "" + query: {} + header: {} + responses: + "200": + application/json: {"data": [{"_id": "64da692e9a94fb2e6449ad08", "createdAt": "2021-01-01T00:00:00.000Z", "topic": {"_id": "64da692e9a94fb2e6449ad06", "key": "product-updates", "name": "Product Updates", "createdAt": "2023-08-15T00:00:00.000Z", "updatedAt": "2023-08-15T00:00:00.000Z"}, "subscriber": {"_id": "64da692e9a94fb2e6449ad07", "subscriberId": "user-123", "avatar": "https://example.com/avatar.png", "firstName": "John", "lastName": "Doe", "email": "john@example.com"}}, {"_id": "64da692e9a94fb2e6449ad08", "createdAt": "2021-01-01T00:00:00.000Z", "topic": {"_id": "64da692e9a94fb2e6449ad06", "key": "product-updates", "name": "Product Updates", "createdAt": "2023-08-15T00:00:00.000Z", "updatedAt": "2023-08-15T00:00:00.000Z"}, "subscriber": {"_id": "64da692e9a94fb2e6449ad07", "subscriberId": "user-123", "avatar": "https://example.com/avatar.png", "firstName": "John", "lastName": "Doe", "email": "john@example.com"}}, {"_id": "64da692e9a94fb2e6449ad08", "createdAt": "2021-01-01T00:00:00.000Z", "topic": {"_id": "64da692e9a94fb2e6449ad06", "key": "product-updates", "name": "Product Updates", "createdAt": "2023-08-15T00:00:00.000Z", "updatedAt": "2023-08-15T00:00:00.000Z"}, "subscriber": {"_id": "64da692e9a94fb2e6449ad07", "subscriberId": "user-123", "avatar": "https://example.com/avatar.png", "firstName": "John", "lastName": "Doe", "email": "john@example.com"}}], "next": "", "previous": ""} + "414": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + "400": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + "422": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + "500": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + TopicsController_upsertTopic: + speakeasy-default-topics-controller-upsert-topic: + requestBody: + application/json: {"key": "task:12345", "name": "Task Title"} + responses: + "200": + application/json: {"_id": "64da692e9a94fb2e6449ad06", "key": "product-updates", "name": "Product Updates", "createdAt": "2023-08-15T00:00:00.000Z", "updatedAt": "2023-08-15T00:00:00.000Z"} + "414": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + "400": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + "422": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + "500": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + TopicsController_updateTopic: + speakeasy-default-topics-controller-update-topic: + parameters: + path: + topicKey: "" + header: {} + requestBody: + application/json: {"name": "Updated Topic Name"} + responses: + "200": + application/json: {"_id": "64da692e9a94fb2e6449ad06", "key": "product-updates", "name": "Product Updates", "createdAt": "2023-08-15T00:00:00.000Z", "updatedAt": "2023-08-15T00:00:00.000Z"} + "414": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + "400": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + "422": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + "500": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + TopicsController_listTopicSubscriptions: + speakeasy-default-topics-controller-list-topic-subscriptions: + parameters: + path: + topicKey: "" + query: {} + header: {} + responses: + "200": + application/json: {"data": [{"_id": "64da692e9a94fb2e6449ad08", "createdAt": "2021-01-01T00:00:00.000Z", "topic": {"_id": "64da692e9a94fb2e6449ad06", "key": "product-updates", "name": "Product Updates", "createdAt": "2023-08-15T00:00:00.000Z", "updatedAt": "2023-08-15T00:00:00.000Z"}, "subscriber": {"_id": "64da692e9a94fb2e6449ad07", "subscriberId": "user-123", "avatar": "https://example.com/avatar.png", "firstName": "John", "lastName": "Doe", "email": "john@example.com"}}, {"_id": "64da692e9a94fb2e6449ad08", "createdAt": "2021-01-01T00:00:00.000Z", "topic": {"_id": "64da692e9a94fb2e6449ad06", "key": "product-updates", "name": "Product Updates", "createdAt": "2023-08-15T00:00:00.000Z", "updatedAt": "2023-08-15T00:00:00.000Z"}, "subscriber": {"_id": "64da692e9a94fb2e6449ad07", "subscriberId": "user-123", "avatar": "https://example.com/avatar.png", "firstName": "John", "lastName": "Doe", "email": "john@example.com"}}, {"_id": "64da692e9a94fb2e6449ad08", "createdAt": "2021-01-01T00:00:00.000Z", "topic": {"_id": "64da692e9a94fb2e6449ad06", "key": "product-updates", "name": "Product Updates", "createdAt": "2023-08-15T00:00:00.000Z", "updatedAt": "2023-08-15T00:00:00.000Z"}, "subscriber": {"_id": "64da692e9a94fb2e6449ad07", "subscriberId": "user-123", "avatar": "https://example.com/avatar.png", "firstName": "John", "lastName": "Doe", "email": "john@example.com"}}], "next": "", "previous": ""} + "414": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + "400": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + "422": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + "500": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + TopicsController_createTopicSubscriptions: + speakeasy-default-topics-controller-create-topic-subscriptions: + parameters: + path: + topicKey: "" + header: {} + requestBody: + application/json: {"subscriberIds": ["subscriberId1", "subscriberId2"]} + responses: + "201": + application/json: {"data": [{"_id": "64f5e95d3d7946d80d0cb679", "topic": {"_id": "64f5e95d3d7946d80d0cb677", "key": "product-updates", "name": "Product Updates"}, "subscriber": {"_id": "64da692e9a94fb2e6449ad07", "subscriberId": "user-123", "avatar": "https://example.com/avatar.png", "firstName": "John", "lastName": "Doe", "email": "john@example.com"}, "createdAt": "2025-04-24T05:40:21Z", "updatedAt": "2025-04-24T05:40:21Z"}], "meta": {"totalCount": 3, "successful": 2, "failed": 1}, "errors": [{"subscriberId": "invalid-subscriber-id", "code": "SUBSCRIBER_NOT_FOUND", "message": "Subscriber with ID invalid-subscriber-id could not be found"}, {"subscriberId": "invalid-subscriber-id", "code": "SUBSCRIBER_NOT_FOUND", "message": "Subscriber with ID invalid-subscriber-id could not be found"}]} + "414": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + "400": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + "422": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + "500": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + TopicsController_deleteTopicSubscriptions: + speakeasy-default-topics-controller-delete-topic-subscriptions: + parameters: + path: + topicKey: "" + header: {} + requestBody: + application/json: {"subscriberIds": ["subscriberId1", "subscriberId2"]} + responses: + "200": + application/json: {"data": [{"_id": "64f5e95d3d7946d80d0cb679", "topic": {"_id": "64f5e95d3d7946d80d0cb677", "key": "product-updates", "name": "Product Updates"}, "subscriber": {"_id": "64da692e9a94fb2e6449ad07", "subscriberId": "user-123", "avatar": "https://example.com/avatar.png", "firstName": "John", "lastName": "Doe", "email": "john@example.com"}, "createdAt": "2025-04-24T05:40:21Z", "updatedAt": "2025-04-24T05:40:21Z"}, {"_id": "64f5e95d3d7946d80d0cb679", "topic": {"_id": "64f5e95d3d7946d80d0cb677", "key": "product-updates", "name": "Product Updates"}, "subscriber": {"_id": "64da692e9a94fb2e6449ad07", "subscriberId": "user-123", "avatar": "https://example.com/avatar.png", "firstName": "John", "lastName": "Doe", "email": "john@example.com"}, "createdAt": "2025-04-24T05:40:21Z", "updatedAt": "2025-04-24T05:40:21Z"}], "meta": {"totalCount": 3, "successful": 2, "failed": 1}, "errors": [{"subscriberId": "invalid-subscriber-id", "code": "SUBSCRIBER_NOT_FOUND", "message": "Subscriber with ID invalid-subscriber-id could not be found"}, {"subscriberId": "invalid-subscriber-id", "code": "SUBSCRIBER_NOT_FOUND", "message": "Subscriber with ID invalid-subscriber-id could not be found"}, {"subscriberId": "invalid-subscriber-id", "code": "SUBSCRIBER_NOT_FOUND", "message": "Subscriber with ID invalid-subscriber-id could not be found"}]} + "414": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + "400": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + "422": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + "500": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + TopicsV1Controller_getTopicSubscriber: + speakeasy-default-topics-v1-controller-get-topic-subscriber: + parameters: + path: + externalSubscriberId: "" + topicKey: "" + header: {} + responses: + "200": + application/json: {"_organizationId": "org_123456789", "_environmentId": "env_123456789", "_subscriberId": "sub_123456789", "_topicId": "topic_123456789", "topicKey": "my_topic_key", "externalSubscriberId": "external_subscriber_123"} + "414": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + "400": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} + "422": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123", "errors": {"fieldName1": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName2": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName3": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName4": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName5": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}, "fieldName6": {"messages": ["Field is required", "Invalid format"], "value": "xx xx xx "}}} + "500": + application/json: {"statusCode": 404, "timestamp": "2024-12-12T13:00:00Z", "path": "/api/v1/resource", "message": "xx xx xx ", "ctx": {"workflowId": "some_wf_id", "stepId": "some_wf_id"}, "errorId": "abc123"} examplesVersion: 1.0.1 generatedTests: {} diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 8e7420e8..7882db55 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -14,11 +14,12 @@ generation: parameterOrderingFeb2024: true requestResponseComponentNamesFeb2024: true securityFeb2025: false + sharedErrorComponentsApr2025: false auth: oAuth2ClientCredentialsEnabled: true oAuth2PasswordEnabled: true python: - version: 0.4.3 + version: 1.0.0 additionalDependencies: dev: - pytest>=6.0.0 diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 384096ae..6dabb84d 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -1,21 +1,21 @@ -speakeasyVersion: 1.531.0 +speakeasyVersion: 1.544.0 sources: novu-OAS: sourceNamespace: novu-oas - sourceRevisionDigest: sha256:88323d9cfc8891c52cbb6fd648149eefe23e2234c35da8cdc77437a875686ed9 - sourceBlobDigest: sha256:4eaaf3fc29cc6ebbebde8743c0de136f9606cada7bce9e274364f92a4a6aac9b + sourceRevisionDigest: sha256:d768dc266d91bebe7bad59cc2890ed6677a20b94125865cfd63a06890f7d97e9 + sourceBlobDigest: sha256:9524401e1388e5bedfc6d0de43cdc3e7ac5ea4a0711c64d3c60ae3205799a124 tags: - latest - - speakeasy-sdk-regen-1744157053 - - "1.0" + - speakeasy-sdk-regen-1744243452 + - 2.1.13 targets: novu: source: novu-OAS sourceNamespace: novu-oas - sourceRevisionDigest: sha256:88323d9cfc8891c52cbb6fd648149eefe23e2234c35da8cdc77437a875686ed9 - sourceBlobDigest: sha256:4eaaf3fc29cc6ebbebde8743c0de136f9606cada7bce9e274364f92a4a6aac9b + sourceRevisionDigest: sha256:d768dc266d91bebe7bad59cc2890ed6677a20b94125865cfd63a06890f7d97e9 + sourceBlobDigest: sha256:9524401e1388e5bedfc6d0de43cdc3e7ac5ea4a0711c64d3c60ae3205799a124 codeSamplesNamespace: novu-oas-python-code-samples - codeSamplesRevisionDigest: sha256:ae5962bd977063c990197492217df0b89c34b96742fb7ca448e7ec31c8ce7696 + codeSamplesRevisionDigest: sha256:a91a70232f36b0d1dd7bb45978f4f8ada1633ae68052204e1140b2ef78b3b4a6 workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/README.md b/README.md index 3751f011..51618808 100644 --- a/README.md +++ b/README.md @@ -168,13 +168,22 @@ with Novu( "text": "string", }, }, - overrides={ - "fcm": { - "data": { - "key": "value", + overrides=novu_py.Overrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", }, }, - }, + ), to=novu_py.SubscriberPayloadDto( subscriber_id="", ), @@ -207,13 +216,22 @@ async def main(): "text": "string", }, }, - overrides={ - "fcm": { - "data": { - "key": "value", + overrides=novu_py.Overrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", }, }, - }, + ), to=novu_py.SubscriberPayloadDto( subscriber_id="", ), @@ -268,6 +286,7 @@ asyncio.run(main()) ```python # Synchronous Example +import novu_py from novu_py import Novu @@ -275,15 +294,38 @@ with Novu( secret_key="YOUR_SECRET_KEY_HERE", ) as novu: - res = novu.trigger_broadcast(trigger_event_to_all_request_dto={ - "name": "", - "payload": { + res = novu.trigger_broadcast(trigger_event_to_all_request_dto=novu_py.TriggerEventToAllRequestDto( + name="", + payload={ "comment_id": "string", "post": { "text": "string", }, }, - }) + overrides=novu_py.TriggerEventToAllRequestDtoOverrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + **{ + "fcm": { + "data": { + "key": "value", + }, + }, + }, + ), + )) # Handle response print(res) @@ -295,6 +337,7 @@ The same SDK client can also be used to make asychronous requests by importing a ```python # Asynchronous Example import asyncio +import novu_py from novu_py import Novu async def main(): @@ -303,15 +346,38 @@ async def main(): secret_key="YOUR_SECRET_KEY_HERE", ) as novu: - res = await novu.trigger_broadcast_async(trigger_event_to_all_request_dto={ - "name": "", - "payload": { + res = await novu.trigger_broadcast_async(trigger_event_to_all_request_dto=novu_py.TriggerEventToAllRequestDto( + name="", + payload={ "comment_id": "string", "post": { "text": "string", }, }, - }) + overrides=novu_py.TriggerEventToAllRequestDtoOverrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + **{ + "fcm": { + "data": { + "key": "value", + }, + }, + }, + ), + )) # Handle response print(res) @@ -341,13 +407,22 @@ with Novu( "text": "string", }, }, - overrides={ - "fcm": { - "data": { - "key": "value", + overrides=novu_py.Overrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", }, }, - }, + ), to=novu_py.SubscriberPayloadDto( subscriber_id="", ), @@ -360,13 +435,22 @@ with Novu( "text": "string", }, }, - overrides={ - "fcm": { - "data": { - "key": "value", + overrides=novu_py.Overrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", }, }, - }, + ), to=[ novu_py.TopicPayloadDto( topic_key="", @@ -382,13 +466,22 @@ with Novu( "text": "string", }, }, - overrides={ - "fcm": { - "data": { - "key": "value", + overrides=novu_py.Overrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", }, }, - }, + ), to=[ "SUBSCRIBER_ID", "SUBSCRIBER_ID", @@ -426,13 +519,22 @@ async def main(): "text": "string", }, }, - overrides={ - "fcm": { - "data": { - "key": "value", + overrides=novu_py.Overrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", }, }, - }, + ), to=novu_py.SubscriberPayloadDto( subscriber_id="", ), @@ -445,13 +547,22 @@ async def main(): "text": "string", }, }, - overrides={ - "fcm": { - "data": { - "key": "value", + overrides=novu_py.Overrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", }, }, - }, + ), to=[ novu_py.TopicPayloadDto( topic_key="", @@ -467,13 +578,22 @@ async def main(): "text": "string", }, }, - overrides={ - "fcm": { - "data": { - "key": "value", + overrides=novu_py.Overrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", }, }, - }, + ), to=[ "SUBSCRIBER_ID", "SUBSCRIBER_ID", @@ -556,7 +676,7 @@ asyncio.run(main()) #### [subscribers.messages](docs/sdks/novumessages/README.md) * [update_as_seen](docs/sdks/novumessages/README.md#update_as_seen) - Mark message action as seen -* [mark_all](docs/sdks/novumessages/README.md#mark_all) - Marks all the subscriber messages as read, unread, seen or unseen. Optionally you can pass feed id (or array) to mark messages of a particular feed. +* [mark_all](docs/sdks/novumessages/README.md#mark_all) - Marks all the subscriber messages as read, unread, seen or unseen. * [mark_all_as](docs/sdks/novumessages/README.md#mark_all_as) - Mark a subscriber messages as seen, read, unseen or unread #### [subscribers.notifications](docs/sdks/novunotifications/README.md) @@ -573,19 +693,27 @@ asyncio.run(main()) * [update_online_flag](docs/sdks/properties/README.md#update_online_flag) - Update subscriber online status +#### [subscribers.topics](docs/sdks/novutopics/README.md) + +* [list](docs/sdks/novutopics/README.md#list) - List topics a subscriber is subscribed to + ### [topics](docs/sdks/topics/README.md) -* [create](docs/sdks/topics/README.md#create) - Topic creation -* [list](docs/sdks/topics/README.md#list) - Get topic list filtered -* [delete](docs/sdks/topics/README.md#delete) - Delete topic -* [retrieve](docs/sdks/topics/README.md#retrieve) - Get topic -* [rename](docs/sdks/topics/README.md#rename) - Rename a topic +* [list](docs/sdks/topics/README.md#list) - Get topics list +* [create](docs/sdks/topics/README.md#create) - Create or update a topic +* [get](docs/sdks/topics/README.md#get) - Get topic by key +* [update](docs/sdks/topics/README.md#update) - Update topic by key +* [delete](docs/sdks/topics/README.md#delete) - Delete topic by key #### [topics.subscribers](docs/sdks/novusubscribers/README.md) -* [assign](docs/sdks/novusubscribers/README.md#assign) - Subscribers addition * [retrieve](docs/sdks/novusubscribers/README.md#retrieve) - Check topic subscriber -* [remove](docs/sdks/novusubscribers/README.md#remove) - Subscribers removal + +#### [topics.subscriptions](docs/sdks/subscriptions/README.md) + +* [list](docs/sdks/subscriptions/README.md#list) - List topic subscriptions +* [create](docs/sdks/subscriptions/README.md#create) - Create topic subscriptions, if the topic does not exist, it will be created. +* [delete](docs/sdks/subscriptions/README.md#delete) - Delete topic subscriptions @@ -640,13 +768,22 @@ with Novu( "text": "string", }, }, - overrides={ - "fcm": { - "data": { - "key": "value", + overrides=novu_py.Overrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", }, }, - }, + ), to=novu_py.SubscriberPayloadDto( subscriber_id="", ), @@ -678,13 +815,22 @@ with Novu( "text": "string", }, }, - overrides={ - "fcm": { - "data": { - "key": "value", + overrides=novu_py.Overrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", }, }, - }, + ), to=novu_py.SubscriberPayloadDto( subscriber_id="", ), @@ -741,13 +887,22 @@ with Novu( "text": "string", }, }, - overrides={ - "fcm": { - "data": { - "key": "value", + overrides=novu_py.Overrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", }, }, - }, + ), to=novu_py.SubscriberPayloadDto( subscriber_id="", ), @@ -806,13 +961,22 @@ with Novu( "text": "string", }, }, - overrides={ - "fcm": { - "data": { - "key": "value", + overrides=novu_py.Overrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", }, }, - }, + ), to=novu_py.SubscriberPayloadDto( subscriber_id="", ), @@ -832,7 +996,7 @@ from novu_py import Novu with Novu( - server_url="https://api.novu.co", + server_url="https://eu.api.novu.co", secret_key="YOUR_SECRET_KEY_HERE", ) as novu: @@ -844,13 +1008,22 @@ with Novu( "text": "string", }, }, - overrides={ - "fcm": { - "data": { - "key": "value", + overrides=novu_py.Overrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", }, }, - }, + ), to=novu_py.SubscriberPayloadDto( subscriber_id="", ), @@ -972,13 +1145,22 @@ with Novu( "text": "string", }, }, - overrides={ - "fcm": { - "data": { - "key": "value", + overrides=novu_py.Overrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", }, }, - }, + ), to=novu_py.SubscriberPayloadDto( subscriber_id="", ), diff --git a/RELEASES.md b/RELEASES.md index 867e451c..716bc616 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -78,4 +78,14 @@ Based on: ### Generated - [python v0.4.3] . ### Releases -- [PyPI v0.4.3] https://pypi.org/project/novu-py/0.4.3 - . \ No newline at end of file +- [PyPI v0.4.3] https://pypi.org/project/novu-py/0.4.3 - . + +## 2025-05-13 12:32:53 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.544.0 (2.599.0) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v1.0.0] . +### Releases +- [PyPI v1.0.0] https://pypi.org/project/novu-py/1.0.0 - . \ No newline at end of file diff --git a/USAGE.md b/USAGE.md index ba2973ba..a2bbb400 100644 --- a/USAGE.md +++ b/USAGE.md @@ -19,13 +19,22 @@ with Novu( "text": "string", }, }, - overrides={ - "fcm": { - "data": { - "key": "value", + overrides=novu_py.Overrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", }, }, - }, + ), to=novu_py.SubscriberPayloadDto( subscriber_id="", ), @@ -58,13 +67,22 @@ async def main(): "text": "string", }, }, - overrides={ - "fcm": { - "data": { - "key": "value", + overrides=novu_py.Overrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", }, }, - }, + ), to=novu_py.SubscriberPayloadDto( subscriber_id="", ), @@ -119,6 +137,7 @@ asyncio.run(main()) ```python # Synchronous Example +import novu_py from novu_py import Novu @@ -126,15 +145,38 @@ with Novu( secret_key="YOUR_SECRET_KEY_HERE", ) as novu: - res = novu.trigger_broadcast(trigger_event_to_all_request_dto={ - "name": "", - "payload": { + res = novu.trigger_broadcast(trigger_event_to_all_request_dto=novu_py.TriggerEventToAllRequestDto( + name="", + payload={ "comment_id": "string", "post": { "text": "string", }, }, - }) + overrides=novu_py.TriggerEventToAllRequestDtoOverrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + **{ + "fcm": { + "data": { + "key": "value", + }, + }, + }, + ), + )) # Handle response print(res) @@ -146,6 +188,7 @@ The same SDK client can also be used to make asychronous requests by importing a ```python # Asynchronous Example import asyncio +import novu_py from novu_py import Novu async def main(): @@ -154,15 +197,38 @@ async def main(): secret_key="YOUR_SECRET_KEY_HERE", ) as novu: - res = await novu.trigger_broadcast_async(trigger_event_to_all_request_dto={ - "name": "", - "payload": { + res = await novu.trigger_broadcast_async(trigger_event_to_all_request_dto=novu_py.TriggerEventToAllRequestDto( + name="", + payload={ "comment_id": "string", "post": { "text": "string", }, }, - }) + overrides=novu_py.TriggerEventToAllRequestDtoOverrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + **{ + "fcm": { + "data": { + "key": "value", + }, + }, + }, + ), + )) # Handle response print(res) @@ -192,13 +258,22 @@ with Novu( "text": "string", }, }, - overrides={ - "fcm": { - "data": { - "key": "value", + overrides=novu_py.Overrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", }, }, - }, + ), to=novu_py.SubscriberPayloadDto( subscriber_id="", ), @@ -211,13 +286,22 @@ with Novu( "text": "string", }, }, - overrides={ - "fcm": { - "data": { - "key": "value", + overrides=novu_py.Overrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", }, }, - }, + ), to=[ novu_py.TopicPayloadDto( topic_key="", @@ -233,13 +317,22 @@ with Novu( "text": "string", }, }, - overrides={ - "fcm": { - "data": { - "key": "value", + overrides=novu_py.Overrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", }, }, - }, + ), to=[ "SUBSCRIBER_ID", "SUBSCRIBER_ID", @@ -277,13 +370,22 @@ async def main(): "text": "string", }, }, - overrides={ - "fcm": { - "data": { - "key": "value", + overrides=novu_py.Overrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", }, }, - }, + ), to=novu_py.SubscriberPayloadDto( subscriber_id="", ), @@ -296,13 +398,22 @@ async def main(): "text": "string", }, }, - overrides={ - "fcm": { - "data": { - "key": "value", + overrides=novu_py.Overrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", }, }, - }, + ), to=[ novu_py.TopicPayloadDto( topic_key="", @@ -318,13 +429,22 @@ async def main(): "text": "string", }, }, - overrides={ - "fcm": { - "data": { - "key": "value", + overrides=novu_py.Overrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", }, }, - }, + ), to=[ "SUBSCRIBER_ID", "SUBSCRIBER_ID", diff --git a/docs/models/activitynotificationjobresponsedto.md b/docs/models/activitynotificationjobresponsedto.md index 21e4e13c..7aca8d45 100644 --- a/docs/models/activitynotificationjobresponsedto.md +++ b/docs/models/activitynotificationjobresponsedto.md @@ -11,7 +11,7 @@ | `execution_details` | List[[models.ActivityNotificationExecutionDetailResponseDto](../models/activitynotificationexecutiondetailresponsedto.md)] | :heavy_check_mark: | Execution details of the job | | | `step` | [models.ActivityNotificationStepResponseDto](../models/activitynotificationstepresponsedto.md) | :heavy_check_mark: | Step details of the job | | | `overrides` | Dict[str, *Any*] | :heavy_minus_sign: | Optional context object for additional error details. | {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
} | -| `payload` | [Optional[models.Payload]](../models/payload.md) | :heavy_minus_sign: | Optional payload for the job | | +| `payload` | [Optional[models.ActivityNotificationJobResponseDtoPayload]](../models/activitynotificationjobresponsedtopayload.md) | :heavy_minus_sign: | Optional payload for the job | | | `provider_id` | [models.ProvidersIDEnum](../models/providersidenum.md) | :heavy_check_mark: | Provider ID of the job | | | `status` | *str* | :heavy_check_mark: | Status of the job | | | `updated_at` | *Optional[str]* | :heavy_minus_sign: | Updated time of the notification | | \ No newline at end of file diff --git a/docs/models/activitynotificationjobresponsedtopayload.md b/docs/models/activitynotificationjobresponsedtopayload.md new file mode 100644 index 00000000..8ffb7ff5 --- /dev/null +++ b/docs/models/activitynotificationjobresponsedtopayload.md @@ -0,0 +1,9 @@ +# ActivityNotificationJobResponseDtoPayload + +Optional payload for the job + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/activitynotificationresponsedto.md b/docs/models/activitynotificationresponsedto.md index b124e12c..f0747cff 100644 --- a/docs/models/activitynotificationresponsedto.md +++ b/docs/models/activitynotificationresponsedto.md @@ -21,4 +21,5 @@ | `payload` | [Optional[models.ActivityNotificationResponseDtoPayload]](../models/activitynotificationresponsedtopayload.md) | :heavy_minus_sign: | Payload of the notification | | `tags` | List[*str*] | :heavy_minus_sign: | Tags associated with the notification | | `controls` | [Optional[models.Controls]](../models/controls.md) | :heavy_minus_sign: | Controls associated with the notification | -| `to` | [Optional[models.ActivityNotificationResponseDtoTo]](../models/activitynotificationresponsedtoto.md) | :heavy_minus_sign: | To field for subscriber definition | \ No newline at end of file +| `to` | [Optional[models.ActivityNotificationResponseDtoTo]](../models/activitynotificationresponsedtoto.md) | :heavy_minus_sign: | To field for subscriber definition | +| `topics` | List[[models.ActivityTopicDto](../models/activitytopicdto.md)] | :heavy_minus_sign: | Topics of the notification | \ No newline at end of file diff --git a/docs/models/activitynotificationstepresponsedto.md b/docs/models/activitynotificationstepresponsedto.md index c78dca86..34b73ecf 100644 --- a/docs/models/activitynotificationstepresponsedto.md +++ b/docs/models/activitynotificationstepresponsedto.md @@ -9,7 +9,7 @@ | `active` | *bool* | :heavy_check_mark: | Whether the step is active or not | | `reply_callback` | [Optional[models.ActivityNotificationStepResponseDtoReplyCallback]](../models/activitynotificationstepresponsedtoreplycallback.md) | :heavy_minus_sign: | Reply callback settings | | `control_variables` | [Optional[models.ControlVariables]](../models/controlvariables.md) | :heavy_minus_sign: | Control variables | -| `metadata` | [Optional[models.Metadata]](../models/metadata.md) | :heavy_minus_sign: | Metadata for the workflow step | +| `metadata` | [Optional[models.ActivityNotificationStepResponseDtoMetadata]](../models/activitynotificationstepresponsedtometadata.md) | :heavy_minus_sign: | Metadata for the workflow step | | `issues` | [Optional[models.Issues]](../models/issues.md) | :heavy_minus_sign: | Step issues | | `filters` | List[[models.StepFilterDto](../models/stepfilterdto.md)] | :heavy_check_mark: | Filter criteria for the step | | `template` | [Optional[models.MessageTemplateDto]](../models/messagetemplatedto.md) | :heavy_minus_sign: | Optional template for the step | diff --git a/docs/models/activitynotificationstepresponsedtometadata.md b/docs/models/activitynotificationstepresponsedtometadata.md new file mode 100644 index 00000000..7c567d1f --- /dev/null +++ b/docs/models/activitynotificationstepresponsedtometadata.md @@ -0,0 +1,9 @@ +# ActivityNotificationStepResponseDtoMetadata + +Metadata for the workflow step + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/activitytopicdto.md b/docs/models/activitytopicdto.md new file mode 100644 index 00000000..899a00c6 --- /dev/null +++ b/docs/models/activitytopicdto.md @@ -0,0 +1,9 @@ +# ActivityTopicDto + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------- | ------------------------------------- | ------------------------------------- | ------------------------------------- | +| `topic_id` | *str* | :heavy_check_mark: | Internal Topic ID of the notification | +| `topic_key` | *str* | :heavy_check_mark: | Topic Key of the notification | \ No newline at end of file diff --git a/docs/models/assignsubscribertotopicdto.md b/docs/models/assignsubscribertotopicdto.md deleted file mode 100644 index 4f5aad19..00000000 --- a/docs/models/assignsubscribertotopicdto.md +++ /dev/null @@ -1,9 +0,0 @@ -# AssignSubscriberToTopicDto - - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -| `succeeded` | List[*str*] | :heavy_check_mark: | List of successfully assigned subscriber IDs | -| `failed` | [Optional[models.FailedAssignmentsDto]](../models/failedassignmentsdto.md) | :heavy_minus_sign: | Details about failed assignments | \ No newline at end of file diff --git a/docs/models/channel.md b/docs/models/channel.md index 4698a57a..3734c047 100644 --- a/docs/models/channel.md +++ b/docs/models/channel.md @@ -1,6 +1,6 @@ # Channel -The channel type which is overridden +The channel type for the integration, which defines how the integration communicates (e.g., email, SMS). ## Values diff --git a/docs/models/channelsettingsdto.md b/docs/models/channelsettingsdto.md index f417f75b..8e577904 100644 --- a/docs/models/channelsettingsdto.md +++ b/docs/models/channelsettingsdto.md @@ -5,7 +5,7 @@ | Field | Type | Required | Description | | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | -| `provider_id` | [models.ProviderID](../models/providerid.md) | :heavy_check_mark: | The provider identifier for the credentials | +| `provider_id` | [models.ChatOrPushProviderEnum](../models/chatorpushproviderenum.md) | :heavy_check_mark: | The provider identifier for the credentials | | `integration_identifier` | *Optional[str]* | :heavy_minus_sign: | The integration identifier | | `credentials` | [models.ChannelCredentials](../models/channelcredentials.md) | :heavy_check_mark: | Credentials payload for the specified provider | | `integration_id` | *str* | :heavy_check_mark: | The unique identifier of the integration associated with this channel. | \ No newline at end of file diff --git a/docs/models/updatesubscriberchannelrequestdtoproviderid.md b/docs/models/chatorpushproviderenum.md similarity index 95% rename from docs/models/updatesubscriberchannelrequestdtoproviderid.md rename to docs/models/chatorpushproviderenum.md index 88f6e909..49d5cecc 100644 --- a/docs/models/updatesubscriberchannelrequestdtoproviderid.md +++ b/docs/models/chatorpushproviderenum.md @@ -1,4 +1,4 @@ -# UpdateSubscriberChannelRequestDtoProviderID +# ChatOrPushProviderEnum The provider identifier for the credentials diff --git a/docs/models/constraintvalidation.md b/docs/models/constraintvalidation.md new file mode 100644 index 00000000..990405de --- /dev/null +++ b/docs/models/constraintvalidation.md @@ -0,0 +1,9 @@ +# ConstraintValidation + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | +| `messages` | List[*str*] | :heavy_check_mark: | List of validation error messages | [
"Field is required",
"Invalid format"
] | +| `value` | [OptionalNullable[models.Value]](../models/value.md) | :heavy_minus_sign: | Value that failed validation | xx xx xx | \ No newline at end of file diff --git a/docs/models/content.md b/docs/models/content.md index fa591347..083c664a 100644 --- a/docs/models/content.md +++ b/docs/models/content.md @@ -5,10 +5,10 @@ Content of the message, can be an email block or a string ## Supported Types -### `models.EmailBlock` +### `List[models.EmailBlock]` ```python -value: models.EmailBlock = /* values here */ +value: List[models.EmailBlock] = /* values here */ ``` ### `str` diff --git a/docs/models/createtopicrequestdto.md b/docs/models/createtopicrequestdto.md deleted file mode 100644 index 1d0158b0..00000000 --- a/docs/models/createtopicrequestdto.md +++ /dev/null @@ -1,9 +0,0 @@ -# CreateTopicRequestDto - - -## Fields - -| Field | Type | Required | Description | -| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | -| `key` | *str* | :heavy_check_mark: | User defined custom key and provided by the user that will be an unique identifier for the Topic created. | -| `name` | *str* | :heavy_check_mark: | User defined custom name and provided by the user that will name the Topic created. | \ No newline at end of file diff --git a/docs/models/createtopicresponsedto.md b/docs/models/createtopicresponsedto.md deleted file mode 100644 index a7ed25ec..00000000 --- a/docs/models/createtopicresponsedto.md +++ /dev/null @@ -1,9 +0,0 @@ -# CreateTopicResponseDto - - -## Fields - -| Field | Type | Required | Description | -| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | -| `id` | *Optional[str]* | :heavy_minus_sign: | The unique identifier for the Topic created. | -| `key` | *str* | :heavy_check_mark: | User defined custom key and provided by the user that will be an unique identifier for the Topic created. | \ No newline at end of file diff --git a/docs/models/addsubscribersrequestdto.md b/docs/models/createtopicsubscriptionsrequestdto.md similarity index 59% rename from docs/models/addsubscribersrequestdto.md rename to docs/models/createtopicsubscriptionsrequestdto.md index 70de0b78..24e72ff7 100644 --- a/docs/models/addsubscribersrequestdto.md +++ b/docs/models/createtopicsubscriptionsrequestdto.md @@ -1,8 +1,8 @@ -# AddSubscribersRequestDto +# CreateTopicSubscriptionsRequestDto ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | -| `subscribers` | List[*str*] | :heavy_check_mark: | List of subscriber identifiers that will be associated to the topic | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `subscriber_ids` | List[*str*] | :heavy_check_mark: | List of subscriber identifiers to subscribe to the topic (max: 100) | [
"subscriberId1",
"subscriberId2"
] | \ No newline at end of file diff --git a/docs/models/createtopicsubscriptionsresponsedto.md b/docs/models/createtopicsubscriptionsresponsedto.md new file mode 100644 index 00000000..143cf73e --- /dev/null +++ b/docs/models/createtopicsubscriptionsresponsedto.md @@ -0,0 +1,10 @@ +# CreateTopicSubscriptionsResponseDto + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | +| `data` | List[[models.SubscriptionDto](../models/subscriptiondto.md)] | :heavy_check_mark: | The list of successfully created subscriptions | +| `meta` | [models.MetaDto](../models/metadto.md) | :heavy_check_mark: | Metadata about the operation | +| `errors` | List[[models.SubscriptionErrorDto](../models/subscriptionerrordto.md)] | :heavy_minus_sign: | The list of errors for failed subscription attempts | \ No newline at end of file diff --git a/docs/models/createupdatetopicrequestdto.md b/docs/models/createupdatetopicrequestdto.md new file mode 100644 index 00000000..9ed9283e --- /dev/null +++ b/docs/models/createupdatetopicrequestdto.md @@ -0,0 +1,9 @@ +# CreateUpdateTopicRequestDto + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `key` | *str* | :heavy_check_mark: | The unique key identifier for the topic. The key must contain only alphanumeric characters (a-z, A-Z, 0-9), hyphens (-), underscores (_), colons (:), or be a valid email address. | task:12345 | +| `name` | *Optional[str]* | :heavy_minus_sign: | The display name for the topic | Task Title | \ No newline at end of file diff --git a/docs/models/deletetopicresponsedto.md b/docs/models/deletetopicresponsedto.md new file mode 100644 index 00000000..9f990c0c --- /dev/null +++ b/docs/models/deletetopicresponsedto.md @@ -0,0 +1,8 @@ +# DeleteTopicResponseDto + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | +| `acknowledged` | *bool* | :heavy_check_mark: | Indicates if the operation was acknowledged | true | \ No newline at end of file diff --git a/docs/models/deletetopicsubscriptionsrequestdto.md b/docs/models/deletetopicsubscriptionsrequestdto.md new file mode 100644 index 00000000..87f8df6d --- /dev/null +++ b/docs/models/deletetopicsubscriptionsrequestdto.md @@ -0,0 +1,8 @@ +# DeleteTopicSubscriptionsRequestDto + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | +| `subscriber_ids` | List[*str*] | :heavy_check_mark: | List of subscriber identifiers to unsubscribe from the topic (max: 100) | [
"subscriberId1",
"subscriberId2"
] | \ No newline at end of file diff --git a/docs/models/deletetopicsubscriptionsresponsedto.md b/docs/models/deletetopicsubscriptionsresponsedto.md new file mode 100644 index 00000000..8a7bd5bc --- /dev/null +++ b/docs/models/deletetopicsubscriptionsresponsedto.md @@ -0,0 +1,10 @@ +# DeleteTopicSubscriptionsResponseDto + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | +| `data` | List[[models.SubscriptionDto](../models/subscriptiondto.md)] | :heavy_check_mark: | The list of successfully deleted subscriptions | +| `meta` | [models.MetaDto](../models/metadto.md) | :heavy_check_mark: | Metadata about the operation | +| `errors` | List[[models.SubscriptionsDeleteErrorDto](../models/subscriptionsdeleteerrordto.md)] | :heavy_minus_sign: | The list of errors for failed deletion attempts | \ No newline at end of file diff --git a/docs/models/digestmetadatadto.md b/docs/models/digestmetadatadto.md index 0488244e..d32284bb 100644 --- a/docs/models/digestmetadatadto.md +++ b/docs/models/digestmetadatadto.md @@ -7,7 +7,7 @@ | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | | `digest_key` | *Optional[str]* | :heavy_minus_sign: | Optional key for the digest | | `amount` | *Optional[float]* | :heavy_minus_sign: | Amount for the digest | -| `unit` | [Optional[models.Unit]](../models/unit.md) | :heavy_minus_sign: | Unit of the digest | +| `unit` | [Optional[models.DigestMetadataDtoUnit]](../models/digestmetadatadtounit.md) | :heavy_minus_sign: | Unit of the digest | | `type` | [models.DigestTypeEnum](../models/digesttypeenum.md) | :heavy_check_mark: | The Digest Type | | `events` | List[Dict[str, *Any*]] | :heavy_minus_sign: | Optional array of events associated with the digest, represented as key-value pairs | | `backoff` | *Optional[bool]* | :heavy_minus_sign: | Regular digest: Indicates if backoff is enabled for the regular digest | diff --git a/docs/models/digestregularmetadataunit.md b/docs/models/digestmetadatadtounit.md similarity index 83% rename from docs/models/digestregularmetadataunit.md rename to docs/models/digestmetadatadtounit.md index 89dc4f29..45270c39 100644 --- a/docs/models/digestregularmetadataunit.md +++ b/docs/models/digestmetadatadtounit.md @@ -1,4 +1,6 @@ -# DigestRegularMetadataUnit +# DigestMetadataDtoUnit + +Unit of the digest ## Values diff --git a/docs/models/digestregularmetadata.md b/docs/models/digestregularmetadata.md index fdfbf06b..728a2713 100644 --- a/docs/models/digestregularmetadata.md +++ b/docs/models/digestregularmetadata.md @@ -3,13 +3,13 @@ ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | -| `amount` | *Optional[float]* | :heavy_minus_sign: | N/A | -| `unit` | [Optional[models.DigestRegularMetadataUnit]](../models/digestregularmetadataunit.md) | :heavy_minus_sign: | N/A | -| `digest_key` | *Optional[str]* | :heavy_minus_sign: | N/A | -| `type` | [models.DigestRegularMetadataType](../models/digestregularmetadatatype.md) | :heavy_check_mark: | N/A | -| `backoff` | *Optional[bool]* | :heavy_minus_sign: | N/A | -| `backoff_amount` | *Optional[float]* | :heavy_minus_sign: | N/A | -| `backoff_unit` | [Optional[models.BackoffUnit]](../models/backoffunit.md) | :heavy_minus_sign: | N/A | -| `update_mode` | *Optional[bool]* | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | +| `amount` | *Optional[float]* | :heavy_minus_sign: | N/A | +| `unit` | [Optional[models.Unit]](../models/unit.md) | :heavy_minus_sign: | N/A | +| `digest_key` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `type` | [models.Type](../models/type.md) | :heavy_check_mark: | N/A | +| `backoff` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `backoff_amount` | *Optional[float]* | :heavy_minus_sign: | N/A | +| `backoff_unit` | [Optional[models.BackoffUnit]](../models/backoffunit.md) | :heavy_minus_sign: | N/A | +| `update_mode` | *Optional[bool]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/digestregularmetadatatype.md b/docs/models/digestregularmetadatatype.md deleted file mode 100644 index bf480269..00000000 --- a/docs/models/digestregularmetadatatype.md +++ /dev/null @@ -1,9 +0,0 @@ -# DigestRegularMetadataType - - -## Values - -| Name | Value | -| --------- | --------- | -| `REGULAR` | regular | -| `BACKOFF` | backoff | \ No newline at end of file diff --git a/docs/models/digesttimedconfigdto.md b/docs/models/digesttimedconfigdto.md index 77bc0738..7e54f01c 100644 --- a/docs/models/digesttimedconfigdto.md +++ b/docs/models/digesttimedconfigdto.md @@ -3,12 +3,12 @@ ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | -| `at_time` | *Optional[str]* | :heavy_minus_sign: | Time at which the digest is triggered | -| `week_days` | List[[models.WeekDays](../models/weekdays.md)] | :heavy_minus_sign: | Days of the week for the digest | -| `month_days` | List[*float*] | :heavy_minus_sign: | Specific days of the month for the digest | -| `ordinal` | [Optional[models.OrdinalEnum]](../models/ordinalenum.md) | :heavy_minus_sign: | Ordinal position for the digest | -| `ordinal_value` | [Optional[models.OrdinalValueEnum]](../models/ordinalvalueenum.md) | :heavy_minus_sign: | Value of the ordinal | -| `monthly_type` | [Optional[models.MonthlyTypeEnum]](../models/monthlytypeenum.md) | :heavy_minus_sign: | Type of monthly schedule | -| `cron_expression` | *Optional[str]* | :heavy_minus_sign: | Cron expression for scheduling | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `at_time` | *Optional[str]* | :heavy_minus_sign: | Time at which the digest is triggered | +| `week_days` | List[[models.DigestTimedConfigDtoWeekDays](../models/digesttimedconfigdtoweekdays.md)] | :heavy_minus_sign: | Days of the week for the digest | +| `month_days` | List[*float*] | :heavy_minus_sign: | Specific days of the month for the digest | +| `ordinal` | [Optional[models.OrdinalEnum]](../models/ordinalenum.md) | :heavy_minus_sign: | Ordinal position for the digest | +| `ordinal_value` | [Optional[models.OrdinalValueEnum]](../models/ordinalvalueenum.md) | :heavy_minus_sign: | Value of the ordinal | +| `monthly_type` | [Optional[models.MonthlyTypeEnum]](../models/monthlytypeenum.md) | :heavy_minus_sign: | Type of monthly schedule | +| `cron_expression` | *Optional[str]* | :heavy_minus_sign: | Cron expression for scheduling | \ No newline at end of file diff --git a/docs/models/timedconfigweekdays.md b/docs/models/digesttimedconfigdtoweekdays.md similarity index 90% rename from docs/models/timedconfigweekdays.md rename to docs/models/digesttimedconfigdtoweekdays.md index ec675b31..60759108 100644 --- a/docs/models/timedconfigweekdays.md +++ b/docs/models/digesttimedconfigdtoweekdays.md @@ -1,4 +1,4 @@ -# TimedConfigWeekDays +# DigestTimedConfigDtoWeekDays ## Values diff --git a/docs/models/errordto.md b/docs/models/errordto.md index ca90692d..801f3e25 100644 --- a/docs/models/errordto.md +++ b/docs/models/errordto.md @@ -8,6 +8,6 @@ | `status_code` | *float* | :heavy_check_mark: | HTTP status code of the error response. | 404 | | `timestamp` | *str* | :heavy_check_mark: | Timestamp of when the error occurred. | 2024-12-12T13:00:00Z | | `path` | *str* | :heavy_check_mark: | The path where the error occurred. | /api/v1/resource | -| `message` | *str* | :heavy_check_mark: | A detailed error message. | Resource not found. | +| `message` | [OptionalNullable[models.Message]](../models/message.md) | :heavy_minus_sign: | Value that failed validation | xx xx xx | | `ctx` | Dict[str, *Any*] | :heavy_minus_sign: | Optional context object for additional error details. | {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
} | | `error_id` | *Optional[str]* | :heavy_minus_sign: | Optional unique identifier for the error, useful for tracking using Sentry and
New Relic, only available for 500. | abc123 | \ No newline at end of file diff --git a/docs/models/failedassignmentsdto.md b/docs/models/failedassignmentsdto.md deleted file mode 100644 index c1bc4f9a..00000000 --- a/docs/models/failedassignmentsdto.md +++ /dev/null @@ -1,8 +0,0 @@ -# FailedAssignmentsDto - - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | -| `not_found` | List[*str*] | :heavy_minus_sign: | List of subscriber IDs that were not found | \ No newline at end of file diff --git a/docs/models/filtertopicsresponsedto.md b/docs/models/filtertopicsresponsedto.md deleted file mode 100644 index efc06ce0..00000000 --- a/docs/models/filtertopicsresponsedto.md +++ /dev/null @@ -1,11 +0,0 @@ -# FilterTopicsResponseDto - - -## Fields - -| Field | Type | Required | Description | Example | -| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | -| `data` | List[[models.TopicDto](../models/topicdto.md)] | :heavy_check_mark: | The list of topics | [] | -| `page` | *float* | :heavy_check_mark: | The current page number | 1 | -| `page_size` | *float* | :heavy_check_mark: | The number of items per page | 10 | -| `total_count` | *float* | :heavy_check_mark: | The total number of items | 10 | \ No newline at end of file diff --git a/docs/models/validationerrordtovalue.md b/docs/models/five.md similarity index 70% rename from docs/models/validationerrordtovalue.md rename to docs/models/five.md index f6c40b20..7f035aa8 100644 --- a/docs/models/validationerrordtovalue.md +++ b/docs/models/five.md @@ -1,4 +1,4 @@ -# ValidationErrorDtoValue +# Five ## Supported Types @@ -27,9 +27,3 @@ value: bool = /* values here */ value: Dict[str, Any] = /* values here */ ``` -### `List[Dict[str, Any]]` - -```python -value: List[Dict[str, Any]] = /* values here */ -``` - diff --git a/docs/models/messageactionresultpayload.md b/docs/models/four.md similarity index 68% rename from docs/models/messageactionresultpayload.md rename to docs/models/four.md index 42af3bf8..52fab1ff 100644 --- a/docs/models/messageactionresultpayload.md +++ b/docs/models/four.md @@ -1,6 +1,4 @@ -# MessageActionResultPayload - -Payload of the action result +# Four ## Fields diff --git a/docs/models/getsubscriberpreferencesdto.md b/docs/models/getsubscriberpreferencesdto.md index 2e2bc6c5..5acd905f 100644 --- a/docs/models/getsubscriberpreferencesdto.md +++ b/docs/models/getsubscriberpreferencesdto.md @@ -3,7 +3,7 @@ ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | -| `global_` | [models.GlobalPreferenceDto](../models/globalpreferencedto.md) | :heavy_check_mark: | Global preference settings | -| `workflows` | List[[models.WorkflowPreferenceDto](../models/workflowpreferencedto.md)] | :heavy_check_mark: | Workflow-specific preference settings | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `global_` | [models.SubscriberGlobalPreferenceDto](../models/subscriberglobalpreferencedto.md) | :heavy_check_mark: | Global preference settings | +| `workflows` | List[[models.SubscriberWorkflowPreferenceDto](../models/subscriberworkflowpreferencedto.md)] | :heavy_check_mark: | Workflow-specific preference settings | \ No newline at end of file diff --git a/docs/models/gettopicresponsedto.md b/docs/models/gettopicresponsedto.md deleted file mode 100644 index 85fcae9f..00000000 --- a/docs/models/gettopicresponsedto.md +++ /dev/null @@ -1,13 +0,0 @@ -# GetTopicResponseDto - - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | -| `organization_id` | *str* | :heavy_check_mark: | N/A | -| `environment_id` | *str* | :heavy_check_mark: | N/A | -| `key` | *str* | :heavy_check_mark: | N/A | -| `name` | *str* | :heavy_check_mark: | N/A | -| `subscribers` | List[*str*] | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/globalpreferencedto.md b/docs/models/globalpreferencedto.md deleted file mode 100644 index 93d47a5f..00000000 --- a/docs/models/globalpreferencedto.md +++ /dev/null @@ -1,9 +0,0 @@ -# GlobalPreferenceDto - - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| `enabled` | *bool* | :heavy_check_mark: | Whether notifications are enabled globally | -| `channels` | [models.PreferenceChannels](../models/preferencechannels.md) | :heavy_check_mark: | Channel-specific preference settings | \ No newline at end of file diff --git a/docs/models/integrationresponsedto.md b/docs/models/integrationresponsedto.md index ed78d73d..a6349e96 100644 --- a/docs/models/integrationresponsedto.md +++ b/docs/models/integrationresponsedto.md @@ -11,7 +11,7 @@ | `name` | *str* | :heavy_check_mark: | The name of the integration, which is used to identify it in the user interface. | | `identifier` | *str* | :heavy_check_mark: | A unique string identifier for the integration, often used for API calls or internal references. | | `provider_id` | *str* | :heavy_check_mark: | The identifier for the provider of the integration (e.g., "mailgun", "twilio"). | -| `channel` | [models.IntegrationResponseDtoChannel](../models/integrationresponsedtochannel.md) | :heavy_check_mark: | The channel type for the integration, which defines how the integration communicates (e.g., email, SMS). | +| `channel` | [models.Channel](../models/channel.md) | :heavy_check_mark: | The channel type for the integration, which defines how the integration communicates (e.g., email, SMS). | | `credentials` | [models.CredentialsDto](../models/credentialsdto.md) | :heavy_check_mark: | The credentials required for the integration to function, including API keys and other sensitive information. | | `active` | *bool* | :heavy_check_mark: | Indicates whether the integration is currently active. An active integration will process events and messages. | | `deleted` | *bool* | :heavy_check_mark: | Indicates whether the integration has been marked as deleted (soft delete). | diff --git a/docs/models/integrationresponsedtochannel.md b/docs/models/integrationresponsedtochannel.md deleted file mode 100644 index 25e24d23..00000000 --- a/docs/models/integrationresponsedtochannel.md +++ /dev/null @@ -1,14 +0,0 @@ -# IntegrationResponseDtoChannel - -The channel type for the integration, which defines how the integration communicates (e.g., email, SMS). - - -## Values - -| Name | Value | -| -------- | -------- | -| `IN_APP` | in_app | -| `EMAIL` | email | -| `SMS` | sms | -| `CHAT` | chat | -| `PUSH` | push | \ No newline at end of file diff --git a/docs/models/listtopicsresponsedto.md b/docs/models/listtopicsresponsedto.md new file mode 100644 index 00000000..9524e4bf --- /dev/null +++ b/docs/models/listtopicsresponsedto.md @@ -0,0 +1,10 @@ +# ListTopicsResponseDto + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | +| `data` | List[[models.TopicResponseDto](../models/topicresponsedto.md)] | :heavy_check_mark: | List of returned Topics | +| `next` | *Nullable[str]* | :heavy_check_mark: | The cursor for the next page of results, or null if there are no more pages. | +| `previous` | *Nullable[str]* | :heavy_check_mark: | The cursor for the previous page of results, or null if this is the first page. | \ No newline at end of file diff --git a/docs/models/listtopicsubscriptionsresponsedto.md b/docs/models/listtopicsubscriptionsresponsedto.md new file mode 100644 index 00000000..d91aef17 --- /dev/null +++ b/docs/models/listtopicsubscriptionsresponsedto.md @@ -0,0 +1,10 @@ +# ListTopicSubscriptionsResponseDto + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `data` | List[[models.TopicSubscriptionResponseDto](../models/topicsubscriptionresponsedto.md)] | :heavy_check_mark: | List of returned Topic Subscriptions | +| `next` | *Nullable[str]* | :heavy_check_mark: | The cursor for the next page of results, or null if there are no more pages. | +| `previous` | *Nullable[str]* | :heavy_check_mark: | The cursor for the previous page of results, or null if this is the first page. | \ No newline at end of file diff --git a/docs/models/message.md b/docs/models/message.md new file mode 100644 index 00000000..f5380005 --- /dev/null +++ b/docs/models/message.md @@ -0,0 +1,37 @@ +# Message + +Value that failed validation + + +## Supported Types + +### `str` + +```python +value: str = /* values here */ +``` + +### `float` + +```python +value: float = /* values here */ +``` + +### `bool` + +```python +value: bool = /* values here */ +``` + +### `models.Message4` + +```python +value: models.Message4 = /* values here */ +``` + +### `List[Nullable[models.Message5]]` + +```python +value: List[Nullable[models.Message5]] = /* values here */ +``` + diff --git a/docs/models/message4.md b/docs/models/message4.md new file mode 100644 index 00000000..f6e72997 --- /dev/null +++ b/docs/models/message4.md @@ -0,0 +1,7 @@ +# Message4 + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/message5.md b/docs/models/message5.md new file mode 100644 index 00000000..1b6dae6a --- /dev/null +++ b/docs/models/message5.md @@ -0,0 +1,29 @@ +# Message5 + + +## Supported Types + +### `str` + +```python +value: str = /* values here */ +``` + +### `float` + +```python +value: float = /* values here */ +``` + +### `bool` + +```python +value: bool = /* values here */ +``` + +### `Dict[str, Any]` + +```python +value: Dict[str, Any] = /* values here */ +``` + diff --git a/docs/models/messageactionresult.md b/docs/models/messageactionresult.md index 64fb8739..a66deb06 100644 --- a/docs/models/messageactionresult.md +++ b/docs/models/messageactionresult.md @@ -3,7 +3,7 @@ ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -| `payload` | [Optional[models.MessageActionResultPayload]](../models/messageactionresultpayload.md) | :heavy_minus_sign: | Payload of the action result | -| `type` | [Optional[models.ButtonTypeEnum]](../models/buttontypeenum.md) | :heavy_minus_sign: | Type of button for the action result | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `payload` | [Optional[models.Payload]](../models/payload.md) | :heavy_minus_sign: | Payload of the action result | +| `type` | [Optional[models.ButtonTypeEnum]](../models/buttontypeenum.md) | :heavy_minus_sign: | Type of button for the action result | \ No newline at end of file diff --git a/docs/models/messagecta.md b/docs/models/messagecta.md index 0f8f46b5..5cfa02cb 100644 --- a/docs/models/messagecta.md +++ b/docs/models/messagecta.md @@ -6,5 +6,5 @@ | Field | Type | Required | Description | | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | | `type` | [Optional[models.ChannelCTATypeEnum]](../models/channelctatypeenum.md) | :heavy_minus_sign: | Type of call to action | -| `data` | [models.MessageCTAData](../models/messagectadata.md) | :heavy_check_mark: | Data associated with the call to action | +| `data` | [Optional[models.MessageCTAData]](../models/messagectadata.md) | :heavy_minus_sign: | Data associated with the call to action | | `action` | [Optional[models.MessageAction]](../models/messageaction.md) | :heavy_minus_sign: | Action associated with the call to action | \ No newline at end of file diff --git a/docs/models/messageresponsedto.md b/docs/models/messageresponsedto.md index 60a534d9..303ec082 100644 --- a/docs/models/messageresponsedto.md +++ b/docs/models/messageresponsedto.md @@ -3,37 +3,39 @@ ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | -| `id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for the message | -| `template_id` | *str* | :heavy_check_mark: | Template ID associated with the message | -| `environment_id` | *str* | :heavy_check_mark: | Environment ID where the message is sent | -| `message_template_id` | *str* | :heavy_check_mark: | Message template ID | -| `organization_id` | *str* | :heavy_check_mark: | Organization ID associated with the message | -| `notification_id` | *str* | :heavy_check_mark: | Notification ID associated with the message | -| `subscriber_id` | *str* | :heavy_check_mark: | Subscriber ID associated with the message | -| `subscriber` | [Optional[models.SubscriberResponseDto]](../models/subscriberresponsedto.md) | :heavy_minus_sign: | Subscriber details, if available | -| `template` | [Optional[models.WorkflowResponse]](../models/workflowresponse.md) | :heavy_minus_sign: | Workflow template associated with the message | -| `template_identifier` | *Optional[str]* | :heavy_minus_sign: | Identifier for the message template | -| `created_at` | *str* | :heavy_check_mark: | Creation date of the message | -| `last_seen_date` | *Optional[str]* | :heavy_minus_sign: | Last seen date of the message, if available | -| `last_read_date` | *Optional[str]* | :heavy_minus_sign: | Last read date of the message, if available | -| `content` | [models.Content](../models/content.md) | :heavy_check_mark: | Content of the message, can be an email block or a string | -| `transaction_id` | *str* | :heavy_check_mark: | Transaction ID associated with the message | -| `subject` | *Optional[str]* | :heavy_minus_sign: | Subject of the message, if applicable | -| `channel` | [models.ChannelTypeEnum](../models/channeltypeenum.md) | :heavy_check_mark: | Channel type through which the message is sent | -| `read` | *bool* | :heavy_check_mark: | Indicates if the message has been read | -| `seen` | *bool* | :heavy_check_mark: | Indicates if the message has been seen | -| `email` | *Optional[str]* | :heavy_minus_sign: | Email address associated with the message, if applicable | -| `phone` | *Optional[str]* | :heavy_minus_sign: | Phone number associated with the message, if applicable | -| `direct_webhook_url` | *Optional[str]* | :heavy_minus_sign: | Direct webhook URL for the message, if applicable | -| `provider_id` | *Optional[str]* | :heavy_minus_sign: | Provider ID associated with the message, if applicable | -| `device_tokens` | List[*str*] | :heavy_minus_sign: | Device tokens associated with the message, if applicable | -| `title` | *Optional[str]* | :heavy_minus_sign: | Title of the message, if applicable | -| `cta` | [models.MessageCTA](../models/messagecta.md) | :heavy_check_mark: | Call to action associated with the message | -| `feed_id` | *OptionalNullable[str]* | :heavy_minus_sign: | Feed ID associated with the message, if applicable | -| `status` | [models.MessageStatusEnum](../models/messagestatusenum.md) | :heavy_check_mark: | Status of the message | -| `error_id` | *Optional[str]* | :heavy_minus_sign: | Error ID if the message has an error | -| `error_text` | *Optional[str]* | :heavy_minus_sign: | Error text if the message has an error | -| `payload` | [Optional[models.MessageResponseDtoPayload]](../models/messageresponsedtopayload.md) | :heavy_minus_sign: | The payload that was used to send the notification trigger | -| `overrides` | [Optional[models.MessageResponseDtoOverrides]](../models/messageresponsedtooverrides.md) | :heavy_minus_sign: | Provider specific overrides used when triggering the notification | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for the message | +| `template_id` | *str* | :heavy_check_mark: | Template ID associated with the message | +| `environment_id` | *str* | :heavy_check_mark: | Environment ID where the message is sent | +| `message_template_id` | *str* | :heavy_check_mark: | Message template ID | +| `organization_id` | *str* | :heavy_check_mark: | Organization ID associated with the message | +| `notification_id` | *str* | :heavy_check_mark: | Notification ID associated with the message | +| `subscriber_id` | *str* | :heavy_check_mark: | Subscriber ID associated with the message | +| `subscriber` | [Optional[models.SubscriberResponseDto]](../models/subscriberresponsedto.md) | :heavy_minus_sign: | Subscriber details, if available | +| `template` | [Optional[models.WorkflowResponse]](../models/workflowresponse.md) | :heavy_minus_sign: | Workflow template associated with the message | +| `template_identifier` | *Optional[str]* | :heavy_minus_sign: | Identifier for the message template | +| `created_at` | *str* | :heavy_check_mark: | Creation date of the message | +| `delivered_at` | List[*str*] | :heavy_minus_sign: | Array of delivery dates for the message, if the message has multiple delivery dates, for example after being snoozed | +| `last_seen_date` | *Optional[str]* | :heavy_minus_sign: | Last seen date of the message, if available | +| `last_read_date` | *Optional[str]* | :heavy_minus_sign: | Last read date of the message, if available | +| `content` | [models.Content](../models/content.md) | :heavy_check_mark: | Content of the message, can be an email block or a string | +| `transaction_id` | *str* | :heavy_check_mark: | Transaction ID associated with the message | +| `subject` | *Optional[str]* | :heavy_minus_sign: | Subject of the message, if applicable | +| `channel` | [models.ChannelTypeEnum](../models/channeltypeenum.md) | :heavy_check_mark: | Channel type through which the message is sent | +| `read` | *bool* | :heavy_check_mark: | Indicates if the message has been read | +| `seen` | *bool* | :heavy_check_mark: | Indicates if the message has been seen | +| `snoozed_until` | *Optional[str]* | :heavy_minus_sign: | Date when the message will be unsnoozed | +| `email` | *Optional[str]* | :heavy_minus_sign: | Email address associated with the message, if applicable | +| `phone` | *Optional[str]* | :heavy_minus_sign: | Phone number associated with the message, if applicable | +| `direct_webhook_url` | *Optional[str]* | :heavy_minus_sign: | Direct webhook URL for the message, if applicable | +| `provider_id` | *Optional[str]* | :heavy_minus_sign: | Provider ID associated with the message, if applicable | +| `device_tokens` | List[*str*] | :heavy_minus_sign: | Device tokens associated with the message, if applicable | +| `title` | *Optional[str]* | :heavy_minus_sign: | Title of the message, if applicable | +| `cta` | [models.MessageCTA](../models/messagecta.md) | :heavy_check_mark: | Call to action associated with the message | +| `feed_id` | *OptionalNullable[str]* | :heavy_minus_sign: | Feed ID associated with the message, if applicable | +| `status` | [models.MessageStatusEnum](../models/messagestatusenum.md) | :heavy_check_mark: | Status of the message | +| `error_id` | *Optional[str]* | :heavy_minus_sign: | Error ID if the message has an error | +| `error_text` | *Optional[str]* | :heavy_minus_sign: | Error text if the message has an error | +| `payload` | [Optional[models.MessageResponseDtoPayload]](../models/messageresponsedtopayload.md) | :heavy_minus_sign: | The payload that was used to send the notification trigger | +| `overrides` | [Optional[models.MessageResponseDtoOverrides]](../models/messageresponsedtooverrides.md) | :heavy_minus_sign: | Provider specific overrides used when triggering the notification | \ No newline at end of file diff --git a/docs/models/messagescontrollergetmessagesresponse.md b/docs/models/messagescontrollergetmessagesresponse.md index 9dd37bb0..62fba110 100644 --- a/docs/models/messagescontrollergetmessagesresponse.md +++ b/docs/models/messagescontrollergetmessagesresponse.md @@ -3,7 +3,7 @@ ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | -| `headers` | Dict[str, List[*str*]] | :heavy_check_mark: | N/A | -| `result` | [models.ActivitiesResponseDto](../models/activitiesresponsedto.md) | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `headers` | Dict[str, List[*str*]] | :heavy_check_mark: | N/A | +| `result` | [models.MessagesResponseDto](../models/messagesresponsedto.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/messagesresponsedto.md b/docs/models/messagesresponsedto.md new file mode 100644 index 00000000..4a261c4a --- /dev/null +++ b/docs/models/messagesresponsedto.md @@ -0,0 +1,12 @@ +# MessagesResponseDto + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `total_count` | *Optional[float]* | :heavy_minus_sign: | Total number of messages available | +| `has_more` | *bool* | :heavy_check_mark: | Indicates if there are more messages available | +| `data` | List[[models.MessageResponseDto](../models/messageresponsedto.md)] | :heavy_check_mark: | List of messages | +| `page_size` | *float* | :heavy_check_mark: | Number of messages per page | +| `page` | *float* | :heavy_check_mark: | Current page number | \ No newline at end of file diff --git a/docs/models/messagevalidationerrordto4.md b/docs/models/messagevalidationerrordto4.md new file mode 100644 index 00000000..00c167d9 --- /dev/null +++ b/docs/models/messagevalidationerrordto4.md @@ -0,0 +1,7 @@ +# MessageValidationErrorDto4 + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/messagevalidationerrordto5.md b/docs/models/messagevalidationerrordto5.md new file mode 100644 index 00000000..a09243b2 --- /dev/null +++ b/docs/models/messagevalidationerrordto5.md @@ -0,0 +1,29 @@ +# MessageValidationErrorDto5 + + +## Supported Types + +### `str` + +```python +value: str = /* values here */ +``` + +### `float` + +```python +value: float = /* values here */ +``` + +### `bool` + +```python +value: bool = /* values here */ +``` + +### `Dict[str, Any]` + +```python +value: Dict[str, Any] = /* values here */ +``` + diff --git a/docs/models/metadata.md b/docs/models/metadata.md index aaf53f72..efb25de9 100644 --- a/docs/models/metadata.md +++ b/docs/models/metadata.md @@ -1,9 +1,31 @@ # Metadata -Metadata for the workflow step +Metadata associated with the workflow step. Can vary based on the type of step. -## Fields +## Supported Types + +### `models.DigestRegularMetadata` + +```python +value: models.DigestRegularMetadata = /* values here */ +``` + +### `models.DigestTimedMetadata` + +```python +value: models.DigestTimedMetadata = /* values here */ +``` + +### `models.DelayRegularMetadata` + +```python +value: models.DelayRegularMetadata = /* values here */ +``` + +### `models.DelayScheduledMetadata` + +```python +value: models.DelayScheduledMetadata = /* values here */ +``` -| Field | Type | Required | Description | -| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/metadto.md b/docs/models/metadto.md new file mode 100644 index 00000000..cf6acbad --- /dev/null +++ b/docs/models/metadto.md @@ -0,0 +1,10 @@ +# MetaDto + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- | +| `total_count` | *float* | :heavy_check_mark: | The total count of subscriber IDs provided | 3 | +| `successful` | *float* | :heavy_check_mark: | The count of successfully created subscriptions | 2 | +| `failed` | *float* | :heavy_check_mark: | The count of failed subscription attempts | 1 | \ No newline at end of file diff --git a/docs/models/notificationfeeditemdto.md b/docs/models/notificationfeeditemdto.md index 0d902388..e6a1c36e 100644 --- a/docs/models/notificationfeeditemdto.md +++ b/docs/models/notificationfeeditemdto.md @@ -26,7 +26,6 @@ | `channel` | [models.ChannelTypeEnum](../models/channeltypeenum.md) | :heavy_check_mark: | Channel type through which the message is sent | | | `read` | *bool* | :heavy_check_mark: | Indicates whether the notification has been read by the subscriber. | false | | `seen` | *bool* | :heavy_check_mark: | Indicates whether the notification has been seen by the subscriber. | true | -| `deleted` | *bool* | :heavy_check_mark: | Indicates whether the notification has been deleted. | false | | `device_tokens` | List[*str*] | :heavy_minus_sign: | Device tokens for push notifications, if applicable. | [
"token1",
"token2"
] | | `cta` | [models.MessageCTA](../models/messagecta.md) | :heavy_check_mark: | Call-to-action information associated with the notification. | | | `status` | [models.NotificationFeedItemDtoStatus](../models/notificationfeeditemdtostatus.md) | :heavy_check_mark: | Current status of the notification. | sent | diff --git a/docs/models/notificationscontrollerlistnotificationsrequest.md b/docs/models/notificationscontrollerlistnotificationsrequest.md index 237e5732..22ec2f37 100644 --- a/docs/models/notificationscontrollerlistnotificationsrequest.md +++ b/docs/models/notificationscontrollerlistnotificationsrequest.md @@ -13,6 +13,7 @@ | `page` | *Optional[float]* | :heavy_minus_sign: | Page number for pagination | | `limit` | *Optional[float]* | :heavy_minus_sign: | Limit for pagination | | `transaction_id` | *Optional[str]* | :heavy_minus_sign: | Transaction ID for filtering | +| `topic_key` | *Optional[str]* | :heavy_minus_sign: | Topic Key for filtering notifications by topic | | `after` | *Optional[str]* | :heavy_minus_sign: | Date filter for records after this timestamp. Defaults to earliest date allowed by subscription plan | | `before` | *Optional[str]* | :heavy_minus_sign: | Date filter for records before this timestamp. Defaults to current time of request (now) | | `idempotency_key` | *Optional[str]* | :heavy_minus_sign: | A header for idempotency purposes | \ No newline at end of file diff --git a/docs/models/notificationstepdto.md b/docs/models/notificationstepdto.md index 21e5c76d..c7283101 100644 --- a/docs/models/notificationstepdto.md +++ b/docs/models/notificationstepdto.md @@ -3,17 +3,17 @@ ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | -| `id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for the notification step. | -| `uuid` | *Optional[str]* | :heavy_minus_sign: | Universally unique identifier for the notification step. | -| `name` | *Optional[str]* | :heavy_minus_sign: | Name of the notification step. | -| `template_id` | *Optional[str]* | :heavy_minus_sign: | ID of the template associated with this notification step. | -| `active` | *Optional[bool]* | :heavy_minus_sign: | Indicates whether the notification step is active. | -| `should_stop_on_fail` | *Optional[bool]* | :heavy_minus_sign: | Determines if the process should stop on failure. | -| `template` | [Optional[models.MessageTemplate]](../models/messagetemplate.md) | :heavy_minus_sign: | Message template used in this notification step. | -| `filters` | List[[models.StepFilterDto](../models/stepfilterdto.md)] | :heavy_minus_sign: | Filters applied to this notification step. | -| `parent_id` | *Optional[str]* | :heavy_minus_sign: | ID of the parent notification step, if applicable. | -| `metadata` | [Optional[models.NotificationStepDtoMetadata]](../models/notificationstepdtometadata.md) | :heavy_minus_sign: | Metadata associated with the workflow step. Can vary based on the type of step. | -| `reply_callback` | [Optional[models.ReplyCallback]](../models/replycallback.md) | :heavy_minus_sign: | Callback information for replies, including whether it is active and the callback URL. | -| `variants` | List[[models.NotificationStepData](../models/notificationstepdata.md)] | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for the notification step. | +| `uuid` | *Optional[str]* | :heavy_minus_sign: | Universally unique identifier for the notification step. | +| `name` | *Optional[str]* | :heavy_minus_sign: | Name of the notification step. | +| `template_id` | *Optional[str]* | :heavy_minus_sign: | ID of the template associated with this notification step. | +| `active` | *Optional[bool]* | :heavy_minus_sign: | Indicates whether the notification step is active. | +| `should_stop_on_fail` | *Optional[bool]* | :heavy_minus_sign: | Determines if the process should stop on failure. | +| `template` | [Optional[models.MessageTemplate]](../models/messagetemplate.md) | :heavy_minus_sign: | Message template used in this notification step. | +| `filters` | List[[models.StepFilterDto](../models/stepfilterdto.md)] | :heavy_minus_sign: | Filters applied to this notification step. | +| `parent_id` | *Optional[str]* | :heavy_minus_sign: | ID of the parent notification step, if applicable. | +| `metadata` | [Optional[models.Metadata]](../models/metadata.md) | :heavy_minus_sign: | Metadata associated with the workflow step. Can vary based on the type of step. | +| `reply_callback` | [Optional[models.ReplyCallback]](../models/replycallback.md) | :heavy_minus_sign: | Callback information for replies, including whether it is active and the callback URL. | +| `variants` | List[[models.NotificationStepData](../models/notificationstepdata.md)] | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/notificationstepdtometadata.md b/docs/models/notificationstepdtometadata.md deleted file mode 100644 index 8375b7eb..00000000 --- a/docs/models/notificationstepdtometadata.md +++ /dev/null @@ -1,31 +0,0 @@ -# NotificationStepDtoMetadata - -Metadata associated with the workflow step. Can vary based on the type of step. - - -## Supported Types - -### `models.DigestRegularMetadata` - -```python -value: models.DigestRegularMetadata = /* values here */ -``` - -### `models.DigestTimedMetadata` - -```python -value: models.DigestTimedMetadata = /* values here */ -``` - -### `models.DelayRegularMetadata` - -```python -value: models.DelayRegularMetadata = /* values here */ -``` - -### `models.DelayScheduledMetadata` - -```python -value: models.DelayScheduledMetadata = /* values here */ -``` - diff --git a/docs/models/notificationtriggerdto.md b/docs/models/notificationtriggerdto.md index dcb7f81c..5ab923c6 100644 --- a/docs/models/notificationtriggerdto.md +++ b/docs/models/notificationtriggerdto.md @@ -5,7 +5,7 @@ | Field | Type | Required | Description | | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | -| `type` | [models.Type](../models/type.md) | :heavy_check_mark: | Type of the trigger | +| `type` | [models.NotificationTriggerDtoType](../models/notificationtriggerdtotype.md) | :heavy_check_mark: | Type of the trigger | | `identifier` | *str* | :heavy_check_mark: | Identifier of the trigger | | `variables` | List[[models.NotificationTriggerVariable](../models/notificationtriggervariable.md)] | :heavy_check_mark: | Variables of the trigger | | `subscriber_variables` | List[[models.NotificationTriggerVariable](../models/notificationtriggervariable.md)] | :heavy_minus_sign: | Subscriber variables of the trigger | \ No newline at end of file diff --git a/docs/models/notificationtriggerdtotype.md b/docs/models/notificationtriggerdtotype.md new file mode 100644 index 00000000..c4dc40bb --- /dev/null +++ b/docs/models/notificationtriggerdtotype.md @@ -0,0 +1,10 @@ +# NotificationTriggerDtoType + +Type of the trigger + + +## Values + +| Name | Value | +| ------- | ------- | +| `EVENT` | event | \ No newline at end of file diff --git a/docs/models/overrides.md b/docs/models/overrides.md index f8cc3f8f..b90f5076 100644 --- a/docs/models/overrides.md +++ b/docs/models/overrides.md @@ -1,9 +1,16 @@ # Overrides +This could be used to override provider specific configurations + ## Fields -| Field | Type | Required | Description | -| -------------------------------------- | -------------------------------------- | -------------------------------------- | -------------------------------------- | -| `channel` | [models.Channel](../models/channel.md) | :heavy_check_mark: | The channel type which is overridden | -| `source` | [models.Source](../models/source.md) | :heavy_check_mark: | The source of overrides | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `steps` | Dict[str, [models.StepsOverrides](../models/stepsoverrides.md)] | :heavy_minus_sign: | This could be used to override provider specific configurations | {
"email-step": {
"providers": {
"sendgrid": {
"templateId": "1234567890"
}
}
}
} | +| `providers` | Dict[str, Dict[str, *Any*]] | :heavy_minus_sign: | Overrides the provider configuration for the entire workflow and all steps | {
"sendgrid": {
"templateId": "1234567890"
}
} | +| ~~`email`~~ | Dict[str, *Any*] | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Override the email provider specific configurations for the entire workflow | | +| ~~`push`~~ | Dict[str, *Any*] | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Override the push provider specific configurations for the entire workflow | | +| ~~`sms`~~ | Dict[str, *Any*] | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Override the sms provider specific configurations for the entire workflow | | +| ~~`chat`~~ | Dict[str, *Any*] | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Override the chat provider specific configurations for the entire workflow | | +| ~~`layout_identifier`~~ | *Optional[str]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Override the layout identifier for the entire workflow | | \ No newline at end of file diff --git a/docs/models/payload.md b/docs/models/payload.md index 4b37dfbb..c3e9cfae 100644 --- a/docs/models/payload.md +++ b/docs/models/payload.md @@ -1,6 +1,6 @@ # Payload -Optional payload for the job +Payload of the action result ## Fields diff --git a/docs/models/preferencechannels.md b/docs/models/preferencechannels.md deleted file mode 100644 index 59901e1f..00000000 --- a/docs/models/preferencechannels.md +++ /dev/null @@ -1,12 +0,0 @@ -# PreferenceChannels - - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `email` | *Optional[bool]* | :heavy_minus_sign: | N/A | -| `sms` | *Optional[bool]* | :heavy_minus_sign: | N/A | -| `in_app` | *Optional[bool]* | :heavy_minus_sign: | N/A | -| `chat` | *Optional[bool]* | :heavy_minus_sign: | N/A | -| `push` | *Optional[bool]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/source.md b/docs/models/preferenceoverridesourceenum.md similarity index 89% rename from docs/models/source.md rename to docs/models/preferenceoverridesourceenum.md index 591a9c27..679580b3 100644 --- a/docs/models/source.md +++ b/docs/models/preferenceoverridesourceenum.md @@ -1,4 +1,4 @@ -# Source +# PreferenceOverrideSourceEnum The source of overrides diff --git a/docs/models/providerid.md b/docs/models/providerid.md index 81ae8b1f..cde99de5 100644 --- a/docs/models/providerid.md +++ b/docs/models/providerid.md @@ -1,6 +1,6 @@ # ProviderID -The provider identifier for the credentials +The ID of the chat or push provider. ## Values diff --git a/docs/models/providersidenum.md b/docs/models/providersidenum.md index b7f73ea5..0cd94bdd 100644 --- a/docs/models/providersidenum.md +++ b/docs/models/providersidenum.md @@ -58,6 +58,7 @@ Provider ID of the job | `BREVO_SMS` | brevo-sms | | `EAZY_SMS` | eazy-sms | | `MOBISHASTRA` | mobishastra | +| `AFRO_MESSAGE` | afro-message | | `FCM` | fcm | | `APNS` | apns | | `EXPO` | expo | diff --git a/docs/models/queryparamorderdirection.md b/docs/models/queryparamorderdirection.md new file mode 100644 index 00000000..b4857a8c --- /dev/null +++ b/docs/models/queryparamorderdirection.md @@ -0,0 +1,11 @@ +# QueryParamOrderDirection + +Direction of sorting + + +## Values + +| Name | Value | +| ------ | ------ | +| `ASC` | ASC | +| `DESC` | DESC | \ No newline at end of file diff --git a/docs/models/renametopicrequestdto.md b/docs/models/renametopicrequestdto.md deleted file mode 100644 index ae659b59..00000000 --- a/docs/models/renametopicrequestdto.md +++ /dev/null @@ -1,8 +0,0 @@ -# RenameTopicRequestDto - - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | -| `name` | *str* | :heavy_check_mark: | User defined custom name and provided by the user to rename the topic. | \ No newline at end of file diff --git a/docs/models/renametopicresponsedto.md b/docs/models/renametopicresponsedto.md deleted file mode 100644 index 62f6a6bd..00000000 --- a/docs/models/renametopicresponsedto.md +++ /dev/null @@ -1,13 +0,0 @@ -# RenameTopicResponseDto - - -## Fields - -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | -| `organization_id` | *str* | :heavy_check_mark: | N/A | -| `environment_id` | *str* | :heavy_check_mark: | N/A | -| `key` | *str* | :heavy_check_mark: | N/A | -| `name` | *str* | :heavy_check_mark: | N/A | -| `subscribers` | List[*str*] | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/stepfilterdto.md b/docs/models/stepfilterdto.md index 03ca3658..c76a4ad7 100644 --- a/docs/models/stepfilterdto.md +++ b/docs/models/stepfilterdto.md @@ -7,5 +7,5 @@ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | | `is_negated` | *bool* | :heavy_check_mark: | N/A | | `type` | [models.BuilderFieldTypeEnum](../models/builderfieldtypeenum.md) | :heavy_check_mark: | N/A | -| `value` | [models.Value](../models/value.md) | :heavy_check_mark: | N/A | +| `value` | [models.StepFilterDtoValue](../models/stepfilterdtovalue.md) | :heavy_check_mark: | N/A | | `children` | List[[models.FieldFilterPartDto](../models/fieldfilterpartdto.md)] | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/stepfilterdtovalue.md b/docs/models/stepfilterdtovalue.md new file mode 100644 index 00000000..44ee2dc4 --- /dev/null +++ b/docs/models/stepfilterdtovalue.md @@ -0,0 +1,9 @@ +# StepFilterDtoValue + + +## Values + +| Name | Value | +| ----- | ----- | +| `AND` | AND | +| `OR` | OR | \ No newline at end of file diff --git a/docs/models/removesubscribersrequestdto.md b/docs/models/stepsoverrides.md similarity index 56% rename from docs/models/removesubscribersrequestdto.md rename to docs/models/stepsoverrides.md index 77e4f25d..bd94f598 100644 --- a/docs/models/removesubscribersrequestdto.md +++ b/docs/models/stepsoverrides.md @@ -1,8 +1,8 @@ -# RemoveSubscribersRequestDto +# StepsOverrides ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | -| `subscribers` | List[*str*] | :heavy_check_mark: | List of subscriber identifiers that will be removed to the topic | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | +| `providers` | Dict[str, Dict[str, *Any*]] | :heavy_check_mark: | Passing the provider id and the provider specific configurations | {
"sendgrid": {
"templateId": "1234567890"
}
} | \ No newline at end of file diff --git a/docs/models/steptypeenum.md b/docs/models/steptypeenum.md index 75ff4e77..48ed1aac 100644 --- a/docs/models/steptypeenum.md +++ b/docs/models/steptypeenum.md @@ -1,6 +1,6 @@ # StepTypeEnum -Channels of the notification +Type of the step ## Values diff --git a/docs/models/subscriber.md b/docs/models/subscriber.md new file mode 100644 index 00000000..bb81d5fb --- /dev/null +++ b/docs/models/subscriber.md @@ -0,0 +1,15 @@ +# Subscriber + +The subscriber information + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | +| `id` | *str* | :heavy_check_mark: | The identifier of the subscriber | 64da692e9a94fb2e6449ad07 | +| `subscriber_id` | *str* | :heavy_check_mark: | The external identifier of the subscriber | user-123 | +| `avatar` | *OptionalNullable[str]* | :heavy_minus_sign: | The avatar URL of the subscriber | https://example.com/avatar.png | +| `first_name` | *OptionalNullable[str]* | :heavy_minus_sign: | The first name of the subscriber | John | +| `last_name` | *OptionalNullable[str]* | :heavy_minus_sign: | The last name of the subscriber | Doe | +| `email` | *OptionalNullable[str]* | :heavy_minus_sign: | The email of the subscriber | john@example.com | \ No newline at end of file diff --git a/docs/models/subscriberchanneldto.md b/docs/models/subscriberchanneldto.md index a1da6b7d..bbed7b34 100644 --- a/docs/models/subscriberchanneldto.md +++ b/docs/models/subscriberchanneldto.md @@ -3,8 +3,8 @@ ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | -| `provider_id` | [models.SubscriberChannelDtoProviderID](../models/subscriberchanneldtoproviderid.md) | :heavy_check_mark: | The ID of the chat or push provider. | -| `integration_identifier` | *Optional[str]* | :heavy_minus_sign: | An optional identifier for the integration. | -| `credentials` | [models.ChannelCredentialsDto](../models/channelcredentialsdto.md) | :heavy_check_mark: | Credentials for the channel. | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `provider_id` | [models.ProviderID](../models/providerid.md) | :heavy_check_mark: | The ID of the chat or push provider. | +| `integration_identifier` | *Optional[str]* | :heavy_minus_sign: | An optional identifier for the integration. | +| `credentials` | [models.ChannelCredentialsDto](../models/channelcredentialsdto.md) | :heavy_check_mark: | Credentials for the channel. | \ No newline at end of file diff --git a/docs/models/subscriberchanneldtoproviderid.md b/docs/models/subscriberchanneldtoproviderid.md deleted file mode 100644 index dfec46ba..00000000 --- a/docs/models/subscriberchanneldtoproviderid.md +++ /dev/null @@ -1,26 +0,0 @@ -# SubscriberChannelDtoProviderID - -The ID of the chat or push provider. - - -## Values - -| Name | Value | -| ------------------- | ------------------- | -| `SLACK` | slack | -| `DISCORD` | discord | -| `MSTEAMS` | msteams | -| `MATTERMOST` | mattermost | -| `RYVER` | ryver | -| `ZULIP` | zulip | -| `GRAFANA_ON_CALL` | grafana-on-call | -| `GETSTREAM` | getstream | -| `ROCKET_CHAT` | rocket-chat | -| `WHATSAPP_BUSINESS` | whatsapp-business | -| `FCM` | fcm | -| `APNS` | apns | -| `EXPO` | expo | -| `ONE_SIGNAL` | one-signal | -| `PUSHPAD` | pushpad | -| `PUSH_WEBHOOK` | push-webhook | -| `PUSHER_BEAMS` | pusher-beams | \ No newline at end of file diff --git a/docs/models/subscriberdto.md b/docs/models/subscriberdto.md new file mode 100644 index 00000000..50cc2daf --- /dev/null +++ b/docs/models/subscriberdto.md @@ -0,0 +1,13 @@ +# SubscriberDto + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | +| `id` | *str* | :heavy_check_mark: | The identifier of the subscriber | 64da692e9a94fb2e6449ad07 | +| `subscriber_id` | *str* | :heavy_check_mark: | The external identifier of the subscriber | user-123 | +| `avatar` | *OptionalNullable[str]* | :heavy_minus_sign: | The avatar URL of the subscriber | https://example.com/avatar.png | +| `first_name` | *OptionalNullable[str]* | :heavy_minus_sign: | The first name of the subscriber | John | +| `last_name` | *OptionalNullable[str]* | :heavy_minus_sign: | The last name of the subscriber | Doe | +| `email` | *OptionalNullable[str]* | :heavy_minus_sign: | The email of the subscriber | john@example.com | \ No newline at end of file diff --git a/docs/models/errors.md b/docs/models/subscriberglobalpreferencedto.md similarity index 55% rename from docs/models/errors.md rename to docs/models/subscriberglobalpreferencedto.md index a39b9dc7..2f033bf1 100644 --- a/docs/models/errors.md +++ b/docs/models/subscriberglobalpreferencedto.md @@ -1,9 +1,9 @@ -# Errors +# SubscriberGlobalPreferenceDto ## Fields | Field | Type | Required | Description | | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -| `messages` | List[*str*] | :heavy_check_mark: | N/A | -| `value` | [Nullable[models.ValidationErrorDtoValue]](../models/validationerrordtovalue.md) | :heavy_check_mark: | N/A | \ No newline at end of file +| `enabled` | *bool* | :heavy_check_mark: | Whether notifications are enabled globally | +| `channels` | [models.SubscriberPreferenceChannels](../models/subscriberpreferencechannels.md) | :heavy_check_mark: | Channel-specific preference settings | \ No newline at end of file diff --git a/docs/models/subscriberpreferencechannels.md b/docs/models/subscriberpreferencechannels.md new file mode 100644 index 00000000..66bc8f62 --- /dev/null +++ b/docs/models/subscriberpreferencechannels.md @@ -0,0 +1,12 @@ +# SubscriberPreferenceChannels + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | +| `email` | *Optional[bool]* | :heavy_minus_sign: | Email channel preference | true | +| `sms` | *Optional[bool]* | :heavy_minus_sign: | SMS channel preference | false | +| `in_app` | *Optional[bool]* | :heavy_minus_sign: | In-app channel preference | true | +| `chat` | *Optional[bool]* | :heavy_minus_sign: | Chat channel preference | false | +| `push` | *Optional[bool]* | :heavy_minus_sign: | Push notification channel preference | true | \ No newline at end of file diff --git a/docs/models/subscriberpreferenceoverridedto.md b/docs/models/subscriberpreferenceoverridedto.md new file mode 100644 index 00000000..aa612e1e --- /dev/null +++ b/docs/models/subscriberpreferenceoverridedto.md @@ -0,0 +1,9 @@ +# SubscriberPreferenceOverrideDto + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| `channel` | [models.ChannelTypeEnum](../models/channeltypeenum.md) | :heavy_check_mark: | Channel type through which the message is sent | +| `source` | [models.PreferenceOverrideSourceEnum](../models/preferenceoverridesourceenum.md) | :heavy_check_mark: | The source of overrides | \ No newline at end of file diff --git a/docs/models/workflowinfodto.md b/docs/models/subscriberpreferencesworkflowinfodto.md similarity index 95% rename from docs/models/workflowinfodto.md rename to docs/models/subscriberpreferencesworkflowinfodto.md index 69cb909b..a2be620f 100644 --- a/docs/models/workflowinfodto.md +++ b/docs/models/subscriberpreferencesworkflowinfodto.md @@ -1,4 +1,4 @@ -# WorkflowInfoDto +# SubscriberPreferencesWorkflowInfoDto ## Fields diff --git a/docs/models/subscriberresponsedto.md b/docs/models/subscriberresponsedto.md index e410f300..3d685e10 100644 --- a/docs/models/subscriberresponsedto.md +++ b/docs/models/subscriberresponsedto.md @@ -8,20 +8,20 @@ | `id` | *Optional[str]* | :heavy_minus_sign: | The internal ID generated by Novu for your subscriber. This ID does not match the `subscriberId` used in your queries. Refer to `subscriberId` for that identifier. | | `first_name` | *Optional[str]* | :heavy_minus_sign: | The first name of the subscriber. | | `last_name` | *Optional[str]* | :heavy_minus_sign: | The last name of the subscriber. | -| `email` | *OptionalNullable[str]* | :heavy_minus_sign: | The email address of the subscriber. | +| `email` | *Optional[str]* | :heavy_minus_sign: | The email address of the subscriber. | | `phone` | *Optional[str]* | :heavy_minus_sign: | The phone number of the subscriber. | | `avatar` | *Optional[str]* | :heavy_minus_sign: | The URL of the subscriber's avatar image. | | `locale` | *Optional[str]* | :heavy_minus_sign: | The locale setting of the subscriber, indicating their preferred language or region. | -| `subscriber_id` | *str* | :heavy_check_mark: | The identifier used to create this subscriber, which typically corresponds to the user ID in your system. | | `channels` | List[[models.ChannelSettingsDto](../models/channelsettingsdto.md)] | :heavy_minus_sign: | An array of channel settings associated with the subscriber. | | ~~`topics`~~ | List[*str*] | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

An array of topics that the subscriber is subscribed to. | | `is_online` | *Optional[bool]* | :heavy_minus_sign: | Indicates whether the subscriber is currently online. | | `last_online_at` | *Optional[str]* | :heavy_minus_sign: | The timestamp indicating when the subscriber was last online, in ISO 8601 format. | +| `v` | *Optional[float]* | :heavy_minus_sign: | The version of the subscriber document. | +| `data` | Dict[str, *Any*] | :heavy_minus_sign: | Additional custom data for the subscriber | +| `timezone` | *Optional[str]* | :heavy_minus_sign: | Timezone of the subscriber | +| `subscriber_id` | *str* | :heavy_check_mark: | The identifier used to create this subscriber, which typically corresponds to the user ID in your system. | | `organization_id` | *str* | :heavy_check_mark: | The unique identifier of the organization to which the subscriber belongs. | | `environment_id` | *str* | :heavy_check_mark: | The unique identifier of the environment associated with this subscriber. | | `deleted` | *bool* | :heavy_check_mark: | Indicates whether the subscriber has been deleted. | | `created_at` | *str* | :heavy_check_mark: | The timestamp indicating when the subscriber was created, in ISO 8601 format. | -| `updated_at` | *str* | :heavy_check_mark: | The timestamp indicating when the subscriber was last updated, in ISO 8601 format. | -| `v` | *Optional[float]* | :heavy_minus_sign: | The version of the subscriber document. | -| `data` | Dict[str, *Any*] | :heavy_minus_sign: | Additional custom data for the subscriber | -| `timezone` | *Optional[str]* | :heavy_minus_sign: | Timezone of the subscriber | \ No newline at end of file +| `updated_at` | *str* | :heavy_check_mark: | The timestamp indicating when the subscriber was last updated, in ISO 8601 format. | \ No newline at end of file diff --git a/docs/models/subscriberscontrollerlistsubscribertopicsrequest.md b/docs/models/subscriberscontrollerlistsubscribertopicsrequest.md new file mode 100644 index 00000000..6555b87c --- /dev/null +++ b/docs/models/subscriberscontrollerlistsubscribertopicsrequest.md @@ -0,0 +1,16 @@ +# SubscribersControllerListSubscriberTopicsRequest + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| `subscriber_id` | *str* | :heavy_check_mark: | The identifier of the subscriber | +| `after` | *Optional[str]* | :heavy_minus_sign: | Cursor for pagination indicating the starting point after which to fetch results. | +| `before` | *Optional[str]* | :heavy_minus_sign: | Cursor for pagination indicating the ending point before which to fetch results. | +| `limit` | *Optional[float]* | :heavy_minus_sign: | Limit the number of items to return (max 100) | +| `order_direction` | [Optional[models.QueryParamOrderDirection]](../models/queryparamorderdirection.md) | :heavy_minus_sign: | Direction of sorting | +| `order_by` | *Optional[str]* | :heavy_minus_sign: | Field to order by | +| `include_cursor` | *Optional[bool]* | :heavy_minus_sign: | Include cursor item in response | +| `key` | *Optional[str]* | :heavy_minus_sign: | Filter by topic key | +| `idempotency_key` | *Optional[str]* | :heavy_minus_sign: | A header for idempotency purposes | \ No newline at end of file diff --git a/docs/models/subscriberscontrollerlistsubscribertopicsresponse.md b/docs/models/subscriberscontrollerlistsubscribertopicsresponse.md new file mode 100644 index 00000000..ce7d2a56 --- /dev/null +++ b/docs/models/subscriberscontrollerlistsubscribertopicsresponse.md @@ -0,0 +1,9 @@ +# SubscribersControllerListSubscriberTopicsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `headers` | Dict[str, List[*str*]] | :heavy_check_mark: | N/A | +| `result` | [models.ListTopicSubscriptionsResponseDto](../models/listtopicsubscriptionsresponsedto.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/subscriberworkflowpreferencedto.md b/docs/models/subscriberworkflowpreferencedto.md new file mode 100644 index 00000000..1c65ed58 --- /dev/null +++ b/docs/models/subscriberworkflowpreferencedto.md @@ -0,0 +1,11 @@ +# SubscriberWorkflowPreferenceDto + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | +| `enabled` | *bool* | :heavy_check_mark: | Whether notifications are enabled for this workflow | +| `channels` | [models.SubscriberPreferenceChannels](../models/subscriberpreferencechannels.md) | :heavy_check_mark: | Channel-specific preference settings for this workflow | +| `overrides` | List[[models.SubscriberPreferenceOverrideDto](../models/subscriberpreferenceoverridedto.md)] | :heavy_check_mark: | List of preference overrides | +| `workflow` | [models.SubscriberPreferencesWorkflowInfoDto](../models/subscriberpreferencesworkflowinfodto.md) | :heavy_check_mark: | Workflow information | \ No newline at end of file diff --git a/docs/models/subscriptiondto.md b/docs/models/subscriptiondto.md new file mode 100644 index 00000000..35d0e80d --- /dev/null +++ b/docs/models/subscriptiondto.md @@ -0,0 +1,12 @@ +# SubscriptionDto + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | +| `id` | *str* | :heavy_check_mark: | The unique identifier of the subscription | 64f5e95d3d7946d80d0cb679 | +| `topic` | [models.TopicDto](../models/topicdto.md) | :heavy_check_mark: | The topic information | | +| `subscriber` | [Nullable[models.Subscriber]](../models/subscriber.md) | :heavy_check_mark: | The subscriber information | | +| `created_at` | *str* | :heavy_check_mark: | The creation date of the subscription | 2025-04-24T05:40:21Z | +| `updated_at` | *str* | :heavy_check_mark: | The last update date of the subscription | 2025-04-24T05:40:21Z | \ No newline at end of file diff --git a/docs/models/subscriptionerrordto.md b/docs/models/subscriptionerrordto.md new file mode 100644 index 00000000..39f028c4 --- /dev/null +++ b/docs/models/subscriptionerrordto.md @@ -0,0 +1,10 @@ +# SubscriptionErrorDto + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | +| `subscriber_id` | *str* | :heavy_check_mark: | The subscriber ID that failed | invalid-subscriber-id | +| `code` | *str* | :heavy_check_mark: | The error code | SUBSCRIBER_NOT_FOUND | +| `message` | *str* | :heavy_check_mark: | The error message | Subscriber with ID invalid-subscriber-id could not be found | \ No newline at end of file diff --git a/docs/models/subscriptionsdeleteerrordto.md b/docs/models/subscriptionsdeleteerrordto.md new file mode 100644 index 00000000..ae2f5262 --- /dev/null +++ b/docs/models/subscriptionsdeleteerrordto.md @@ -0,0 +1,10 @@ +# SubscriptionsDeleteErrorDto + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | +| `subscriber_id` | *str* | :heavy_check_mark: | The subscriber ID that failed | invalid-subscriber-id | +| `code` | *str* | :heavy_check_mark: | The error code | SUBSCRIBER_NOT_FOUND | +| `message` | *str* | :heavy_check_mark: | The error message | Subscriber with ID invalid-subscriber-id could not be found | \ No newline at end of file diff --git a/docs/models/timedconfig.md b/docs/models/timedconfig.md index ae6e8a02..d5be0e6c 100644 --- a/docs/models/timedconfig.md +++ b/docs/models/timedconfig.md @@ -3,11 +3,11 @@ ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -| `at_time` | *Optional[str]* | :heavy_minus_sign: | N/A | -| `week_days` | List[[models.TimedConfigWeekDays](../models/timedconfigweekdays.md)] | :heavy_minus_sign: | N/A | -| `month_days` | List[*str*] | :heavy_minus_sign: | N/A | -| `ordinal` | [Optional[models.Ordinal]](../models/ordinal.md) | :heavy_minus_sign: | N/A | -| `ordinal_value` | [Optional[models.OrdinalValue]](../models/ordinalvalue.md) | :heavy_minus_sign: | N/A | -| `monthly_type` | [Optional[models.MonthlyType]](../models/monthlytype.md) | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | +| `at_time` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `week_days` | List[[models.WeekDays](../models/weekdays.md)] | :heavy_minus_sign: | N/A | +| `month_days` | List[*str*] | :heavy_minus_sign: | N/A | +| `ordinal` | [Optional[models.Ordinal]](../models/ordinal.md) | :heavy_minus_sign: | N/A | +| `ordinal_value` | [Optional[models.OrdinalValue]](../models/ordinalvalue.md) | :heavy_minus_sign: | N/A | +| `monthly_type` | [Optional[models.MonthlyType]](../models/monthlytype.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/topicdto.md b/docs/models/topicdto.md index 9b93c41e..f5318378 100644 --- a/docs/models/topicdto.md +++ b/docs/models/topicdto.md @@ -3,11 +3,8 @@ ## Fields -| Field | Type | Required | Description | -| ------------------ | ------------------ | ------------------ | ------------------ | -| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | -| `organization_id` | *str* | :heavy_check_mark: | N/A | -| `environment_id` | *str* | :heavy_check_mark: | N/A | -| `key` | *str* | :heavy_check_mark: | N/A | -| `name` | *str* | :heavy_check_mark: | N/A | -| `subscribers` | List[*str*] | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| `id` | *str* | :heavy_check_mark: | The internal unique identifier of the topic | 64f5e95d3d7946d80d0cb677 | +| `key` | *str* | :heavy_check_mark: | The key identifier of the topic used in your application. Should be unique on the environment level. | product-updates | +| `name` | *Optional[str]* | :heavy_minus_sign: | The name of the topic | Product Updates | \ No newline at end of file diff --git a/docs/models/topicresponsedto.md b/docs/models/topicresponsedto.md new file mode 100644 index 00000000..d1f00660 --- /dev/null +++ b/docs/models/topicresponsedto.md @@ -0,0 +1,12 @@ +# TopicResponseDto + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `id` | *str* | :heavy_check_mark: | The identifier of the topic | 64da692e9a94fb2e6449ad06 | +| `key` | *str* | :heavy_check_mark: | The unique key of the topic | product-updates | +| `name` | *Optional[str]* | :heavy_minus_sign: | The name of the topic | Product Updates | +| `created_at` | *Optional[str]* | :heavy_minus_sign: | The date the topic was created | 2023-08-15T00:00:00.000Z | +| `updated_at` | *Optional[str]* | :heavy_minus_sign: | The date the topic was last updated | 2023-08-15T00:00:00.000Z | \ No newline at end of file diff --git a/docs/models/topicscontrollerassignrequest.md b/docs/models/topicscontrollerassignrequest.md deleted file mode 100644 index 951bfc1b..00000000 --- a/docs/models/topicscontrollerassignrequest.md +++ /dev/null @@ -1,10 +0,0 @@ -# TopicsControllerAssignRequest - - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | -| `topic_key` | *str* | :heavy_check_mark: | The topic key | -| `idempotency_key` | *Optional[str]* | :heavy_minus_sign: | A header for idempotency purposes | -| `add_subscribers_request_dto` | [models.AddSubscribersRequestDto](../models/addsubscribersrequestdto.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/topicscontrollerassignresponse.md b/docs/models/topicscontrollerassignresponse.md deleted file mode 100644 index d18c8f62..00000000 --- a/docs/models/topicscontrollerassignresponse.md +++ /dev/null @@ -1,9 +0,0 @@ -# TopicsControllerAssignResponse - - -## Fields - -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | -| `headers` | Dict[str, List[*str*]] | :heavy_check_mark: | N/A | -| `result` | [models.AssignSubscriberToTopicDto](../models/assignsubscribertotopicdto.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/topicscontrollercreatetopicrequest.md b/docs/models/topicscontrollercreatetopicrequest.md deleted file mode 100644 index f1ced28a..00000000 --- a/docs/models/topicscontrollercreatetopicrequest.md +++ /dev/null @@ -1,9 +0,0 @@ -# TopicsControllerCreateTopicRequest - - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | -| `idempotency_key` | *Optional[str]* | :heavy_minus_sign: | A header for idempotency purposes | -| `create_topic_request_dto` | [models.CreateTopicRequestDto](../models/createtopicrequestdto.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/topicscontrollercreatetopicresponse.md b/docs/models/topicscontrollercreatetopicresponse.md deleted file mode 100644 index a3b4335b..00000000 --- a/docs/models/topicscontrollercreatetopicresponse.md +++ /dev/null @@ -1,9 +0,0 @@ -# TopicsControllerCreateTopicResponse - - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -| `headers` | Dict[str, List[*str*]] | :heavy_check_mark: | N/A | -| `result` | [models.CreateTopicResponseDto](../models/createtopicresponsedto.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/topicscontrollercreatetopicsubscriptionsrequest.md b/docs/models/topicscontrollercreatetopicsubscriptionsrequest.md new file mode 100644 index 00000000..fb8c8aa6 --- /dev/null +++ b/docs/models/topicscontrollercreatetopicsubscriptionsrequest.md @@ -0,0 +1,10 @@ +# TopicsControllerCreateTopicSubscriptionsRequest + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `topic_key` | *str* | :heavy_check_mark: | The key identifier of the topic | +| `idempotency_key` | *Optional[str]* | :heavy_minus_sign: | A header for idempotency purposes | +| `create_topic_subscriptions_request_dto` | [models.CreateTopicSubscriptionsRequestDto](../models/createtopicsubscriptionsrequestdto.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/topicscontrollercreatetopicsubscriptionsresponse.md b/docs/models/topicscontrollercreatetopicsubscriptionsresponse.md new file mode 100644 index 00000000..549afcc4 --- /dev/null +++ b/docs/models/topicscontrollercreatetopicsubscriptionsresponse.md @@ -0,0 +1,9 @@ +# TopicsControllerCreateTopicSubscriptionsResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| `headers` | Dict[str, List[*str*]] | :heavy_check_mark: | N/A | +| `result` | [models.CreateTopicSubscriptionsResponseDto](../models/createtopicsubscriptionsresponsedto.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/topicscontrollerdeletetopicrequest.md b/docs/models/topicscontrollerdeletetopicrequest.md index 7d39b7f1..c76d9781 100644 --- a/docs/models/topicscontrollerdeletetopicrequest.md +++ b/docs/models/topicscontrollerdeletetopicrequest.md @@ -5,5 +5,5 @@ | Field | Type | Required | Description | | --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- | -| `topic_key` | *str* | :heavy_check_mark: | The topic key | +| `topic_key` | *str* | :heavy_check_mark: | The key identifier of the topic | | `idempotency_key` | *Optional[str]* | :heavy_minus_sign: | A header for idempotency purposes | \ No newline at end of file diff --git a/docs/models/topicscontrollerdeletetopicresponse.md b/docs/models/topicscontrollerdeletetopicresponse.md index a649a34c..4a9ebfcf 100644 --- a/docs/models/topicscontrollerdeletetopicresponse.md +++ b/docs/models/topicscontrollerdeletetopicresponse.md @@ -3,6 +3,7 @@ ## Fields -| Field | Type | Required | Description | -| ---------------------- | ---------------------- | ---------------------- | ---------------------- | -| `headers` | Dict[str, List[*str*]] | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | +| `headers` | Dict[str, List[*str*]] | :heavy_check_mark: | N/A | +| `result` | [models.DeleteTopicResponseDto](../models/deletetopicresponsedto.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/topicscontrollerdeletetopicsubscriptionsrequest.md b/docs/models/topicscontrollerdeletetopicsubscriptionsrequest.md new file mode 100644 index 00000000..e249520d --- /dev/null +++ b/docs/models/topicscontrollerdeletetopicsubscriptionsrequest.md @@ -0,0 +1,10 @@ +# TopicsControllerDeleteTopicSubscriptionsRequest + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `topic_key` | *str* | :heavy_check_mark: | The key identifier of the topic | +| `idempotency_key` | *Optional[str]* | :heavy_minus_sign: | A header for idempotency purposes | +| `delete_topic_subscriptions_request_dto` | [models.DeleteTopicSubscriptionsRequestDto](../models/deletetopicsubscriptionsrequestdto.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/topicscontrollerdeletetopicsubscriptionsresponse.md b/docs/models/topicscontrollerdeletetopicsubscriptionsresponse.md new file mode 100644 index 00000000..da47263b --- /dev/null +++ b/docs/models/topicscontrollerdeletetopicsubscriptionsresponse.md @@ -0,0 +1,9 @@ +# TopicsControllerDeleteTopicSubscriptionsResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| `headers` | Dict[str, List[*str*]] | :heavy_check_mark: | N/A | +| `result` | [models.DeleteTopicSubscriptionsResponseDto](../models/deletetopicsubscriptionsresponsedto.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/topicscontrollergettopicrequest.md b/docs/models/topicscontrollergettopicrequest.md index 203975da..e46c667c 100644 --- a/docs/models/topicscontrollergettopicrequest.md +++ b/docs/models/topicscontrollergettopicrequest.md @@ -5,5 +5,5 @@ | Field | Type | Required | Description | | --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- | -| `topic_key` | *str* | :heavy_check_mark: | The topic key | +| `topic_key` | *str* | :heavy_check_mark: | The key identifier of the topic | | `idempotency_key` | *Optional[str]* | :heavy_minus_sign: | A header for idempotency purposes | \ No newline at end of file diff --git a/docs/models/topicscontrollergettopicresponse.md b/docs/models/topicscontrollergettopicresponse.md index 58e21f53..501544bb 100644 --- a/docs/models/topicscontrollergettopicresponse.md +++ b/docs/models/topicscontrollergettopicresponse.md @@ -3,7 +3,7 @@ ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -| `headers` | Dict[str, List[*str*]] | :heavy_check_mark: | N/A | -| `result` | [models.GetTopicResponseDto](../models/gettopicresponsedto.md) | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | +| `headers` | Dict[str, List[*str*]] | :heavy_check_mark: | N/A | +| `result` | [models.TopicResponseDto](../models/topicresponsedto.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/topicscontrollerlisttopicsqueryparamorderdirection.md b/docs/models/topicscontrollerlisttopicsqueryparamorderdirection.md new file mode 100644 index 00000000..ad4ad461 --- /dev/null +++ b/docs/models/topicscontrollerlisttopicsqueryparamorderdirection.md @@ -0,0 +1,11 @@ +# TopicsControllerListTopicsQueryParamOrderDirection + +Direction of sorting + + +## Values + +| Name | Value | +| ------ | ------ | +| `ASC` | ASC | +| `DESC` | DESC | \ No newline at end of file diff --git a/docs/models/topicscontrollerlisttopicsrequest.md b/docs/models/topicscontrollerlisttopicsrequest.md index 3ae1c84d..e59ee384 100644 --- a/docs/models/topicscontrollerlisttopicsrequest.md +++ b/docs/models/topicscontrollerlisttopicsrequest.md @@ -3,9 +3,14 @@ ## Fields -| Field | Type | Required | Description | Example | -| ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | -| `page` | *Optional[int]* | :heavy_minus_sign: | The page number to retrieve (starts from 0) | 0 | -| `page_size` | *Optional[int]* | :heavy_minus_sign: | The number of items to return per page (default: 10) | 10 | -| `key` | *Optional[str]* | :heavy_minus_sign: | A filter key to apply to the results | exampleKey | -| `idempotency_key` | *Optional[str]* | :heavy_minus_sign: | A header for idempotency purposes | | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `after` | *Optional[str]* | :heavy_minus_sign: | Cursor for pagination indicating the starting point after which to fetch results. | +| `before` | *Optional[str]* | :heavy_minus_sign: | Cursor for pagination indicating the ending point before which to fetch results. | +| `limit` | *Optional[float]* | :heavy_minus_sign: | Limit the number of items to return (max 100) | +| `order_direction` | [Optional[models.TopicsControllerListTopicsQueryParamOrderDirection]](../models/topicscontrollerlisttopicsqueryparamorderdirection.md) | :heavy_minus_sign: | Direction of sorting | +| `order_by` | *Optional[str]* | :heavy_minus_sign: | Field to order by | +| `include_cursor` | *Optional[bool]* | :heavy_minus_sign: | Include cursor item in response | +| `key` | *Optional[str]* | :heavy_minus_sign: | Key of the topic to filter results. | +| `name` | *Optional[str]* | :heavy_minus_sign: | Name of the topic to filter results. | +| `idempotency_key` | *Optional[str]* | :heavy_minus_sign: | A header for idempotency purposes | \ No newline at end of file diff --git a/docs/models/topicscontrollerlisttopicsresponse.md b/docs/models/topicscontrollerlisttopicsresponse.md index 82ba6c92..8ca25f60 100644 --- a/docs/models/topicscontrollerlisttopicsresponse.md +++ b/docs/models/topicscontrollerlisttopicsresponse.md @@ -3,7 +3,7 @@ ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | -| `headers` | Dict[str, List[*str*]] | :heavy_check_mark: | N/A | -| `result` | [models.FilterTopicsResponseDto](../models/filtertopicsresponsedto.md) | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `headers` | Dict[str, List[*str*]] | :heavy_check_mark: | N/A | +| `result` | [models.ListTopicsResponseDto](../models/listtopicsresponsedto.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/topicscontrollerlisttopicsubscriptionsqueryparamorderdirection.md b/docs/models/topicscontrollerlisttopicsubscriptionsqueryparamorderdirection.md new file mode 100644 index 00000000..8969eba9 --- /dev/null +++ b/docs/models/topicscontrollerlisttopicsubscriptionsqueryparamorderdirection.md @@ -0,0 +1,11 @@ +# TopicsControllerListTopicSubscriptionsQueryParamOrderDirection + +Direction of sorting + + +## Values + +| Name | Value | +| ------ | ------ | +| `ASC` | ASC | +| `DESC` | DESC | \ No newline at end of file diff --git a/docs/models/topicscontrollerlisttopicsubscriptionsrequest.md b/docs/models/topicscontrollerlisttopicsubscriptionsrequest.md new file mode 100644 index 00000000..586ee1da --- /dev/null +++ b/docs/models/topicscontrollerlisttopicsubscriptionsrequest.md @@ -0,0 +1,16 @@ +# TopicsControllerListTopicSubscriptionsRequest + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `topic_key` | *str* | :heavy_check_mark: | The key identifier of the topic | +| `after` | *Optional[str]* | :heavy_minus_sign: | Cursor for pagination indicating the starting point after which to fetch results. | +| `before` | *Optional[str]* | :heavy_minus_sign: | Cursor for pagination indicating the ending point before which to fetch results. | +| `limit` | *Optional[float]* | :heavy_minus_sign: | Limit the number of items to return (max 100) | +| `order_direction` | [Optional[models.TopicsControllerListTopicSubscriptionsQueryParamOrderDirection]](../models/topicscontrollerlisttopicsubscriptionsqueryparamorderdirection.md) | :heavy_minus_sign: | Direction of sorting | +| `order_by` | *Optional[str]* | :heavy_minus_sign: | Field to order by | +| `include_cursor` | *Optional[bool]* | :heavy_minus_sign: | Include cursor item in response | +| `subscriber_id` | *Optional[str]* | :heavy_minus_sign: | Filter by subscriber ID | +| `idempotency_key` | *Optional[str]* | :heavy_minus_sign: | A header for idempotency purposes | \ No newline at end of file diff --git a/docs/models/topicscontrollerlisttopicsubscriptionsresponse.md b/docs/models/topicscontrollerlisttopicsubscriptionsresponse.md new file mode 100644 index 00000000..b5a56198 --- /dev/null +++ b/docs/models/topicscontrollerlisttopicsubscriptionsresponse.md @@ -0,0 +1,9 @@ +# TopicsControllerListTopicSubscriptionsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `headers` | Dict[str, List[*str*]] | :heavy_check_mark: | N/A | +| `result` | [models.ListTopicSubscriptionsResponseDto](../models/listtopicsubscriptionsresponsedto.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/topicscontrollerremovesubscribersresponse.md b/docs/models/topicscontrollerremovesubscribersresponse.md deleted file mode 100644 index b34bbf1f..00000000 --- a/docs/models/topicscontrollerremovesubscribersresponse.md +++ /dev/null @@ -1,8 +0,0 @@ -# TopicsControllerRemoveSubscribersResponse - - -## Fields - -| Field | Type | Required | Description | -| ---------------------- | ---------------------- | ---------------------- | ---------------------- | -| `headers` | Dict[str, List[*str*]] | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/topicscontrollerrenametopicresponse.md b/docs/models/topicscontrollerrenametopicresponse.md deleted file mode 100644 index c5f7ee83..00000000 --- a/docs/models/topicscontrollerrenametopicresponse.md +++ /dev/null @@ -1,9 +0,0 @@ -# TopicsControllerRenameTopicResponse - - -## Fields - -| Field | Type | Required | Description | -| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -| `headers` | Dict[str, List[*str*]] | :heavy_check_mark: | N/A | -| `result` | [models.RenameTopicResponseDto](../models/renametopicresponsedto.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/topicscontrollerrenametopicrequest.md b/docs/models/topicscontrollerupdatetopicrequest.md similarity index 84% rename from docs/models/topicscontrollerrenametopicrequest.md rename to docs/models/topicscontrollerupdatetopicrequest.md index bb6e335b..93f031b1 100644 --- a/docs/models/topicscontrollerrenametopicrequest.md +++ b/docs/models/topicscontrollerupdatetopicrequest.md @@ -1,10 +1,10 @@ -# TopicsControllerRenameTopicRequest +# TopicsControllerUpdateTopicRequest ## Fields | Field | Type | Required | Description | | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | -| `topic_key` | *str* | :heavy_check_mark: | The topic key | +| `topic_key` | *str* | :heavy_check_mark: | The key identifier of the topic | | `idempotency_key` | *Optional[str]* | :heavy_minus_sign: | A header for idempotency purposes | -| `rename_topic_request_dto` | [models.RenameTopicRequestDto](../models/renametopicrequestdto.md) | :heavy_check_mark: | N/A | \ No newline at end of file +| `update_topic_request_dto` | [models.UpdateTopicRequestDto](../models/updatetopicrequestdto.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/topicscontrollerupdatetopicresponse.md b/docs/models/topicscontrollerupdatetopicresponse.md new file mode 100644 index 00000000..f81facef --- /dev/null +++ b/docs/models/topicscontrollerupdatetopicresponse.md @@ -0,0 +1,9 @@ +# TopicsControllerUpdateTopicResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | +| `headers` | Dict[str, List[*str*]] | :heavy_check_mark: | N/A | +| `result` | [models.TopicResponseDto](../models/topicresponsedto.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/topicscontrollerremovesubscribersrequest.md b/docs/models/topicscontrollerupserttopicrequest.md similarity index 66% rename from docs/models/topicscontrollerremovesubscribersrequest.md rename to docs/models/topicscontrollerupserttopicrequest.md index a900a2ac..f3fab7a4 100644 --- a/docs/models/topicscontrollerremovesubscribersrequest.md +++ b/docs/models/topicscontrollerupserttopicrequest.md @@ -1,10 +1,9 @@ -# TopicsControllerRemoveSubscribersRequest +# TopicsControllerUpsertTopicRequest ## Fields | Field | Type | Required | Description | | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | -| `topic_key` | *str* | :heavy_check_mark: | The topic key | | `idempotency_key` | *Optional[str]* | :heavy_minus_sign: | A header for idempotency purposes | -| `remove_subscribers_request_dto` | [models.RemoveSubscribersRequestDto](../models/removesubscribersrequestdto.md) | :heavy_check_mark: | N/A | \ No newline at end of file +| `create_update_topic_request_dto` | [models.CreateUpdateTopicRequestDto](../models/createupdatetopicrequestdto.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/topicscontrollerupserttopicresponse.md b/docs/models/topicscontrollerupserttopicresponse.md new file mode 100644 index 00000000..dbb46835 --- /dev/null +++ b/docs/models/topicscontrollerupserttopicresponse.md @@ -0,0 +1,9 @@ +# TopicsControllerUpsertTopicResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | +| `headers` | Dict[str, List[*str*]] | :heavy_check_mark: | N/A | +| `result` | [models.TopicResponseDto](../models/topicresponsedto.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/topicsubscriptionresponsedto.md b/docs/models/topicsubscriptionresponsedto.md new file mode 100644 index 00000000..c3163dae --- /dev/null +++ b/docs/models/topicsubscriptionresponsedto.md @@ -0,0 +1,11 @@ +# TopicSubscriptionResponseDto + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | +| `id` | *str* | :heavy_check_mark: | The identifier of the subscription | 64da692e9a94fb2e6449ad08 | +| `created_at` | *str* | :heavy_check_mark: | The date and time the subscription was created | 2021-01-01T00:00:00.000Z | +| `topic` | [models.TopicResponseDto](../models/topicresponsedto.md) | :heavy_check_mark: | Topic information | | +| `subscriber` | [models.SubscriberDto](../models/subscriberdto.md) | :heavy_check_mark: | Subscriber information | | \ No newline at end of file diff --git a/docs/models/topicscontrollergettopicsubscriberrequest.md b/docs/models/topicsv1controllergettopicsubscriberrequest.md similarity index 94% rename from docs/models/topicscontrollergettopicsubscriberrequest.md rename to docs/models/topicsv1controllergettopicsubscriberrequest.md index 7255c44c..9263c668 100644 --- a/docs/models/topicscontrollergettopicsubscriberrequest.md +++ b/docs/models/topicsv1controllergettopicsubscriberrequest.md @@ -1,4 +1,4 @@ -# TopicsControllerGetTopicSubscriberRequest +# TopicsV1ControllerGetTopicSubscriberRequest ## Fields diff --git a/docs/models/topicscontrollergettopicsubscriberresponse.md b/docs/models/topicsv1controllergettopicsubscriberresponse.md similarity index 95% rename from docs/models/topicscontrollergettopicsubscriberresponse.md rename to docs/models/topicsv1controllergettopicsubscriberresponse.md index d967e356..18753aee 100644 --- a/docs/models/topicscontrollergettopicsubscriberresponse.md +++ b/docs/models/topicsv1controllergettopicsubscriberresponse.md @@ -1,4 +1,4 @@ -# TopicsControllerGetTopicSubscriberResponse +# TopicsV1ControllerGetTopicSubscriberResponse ## Fields diff --git a/docs/models/triggereventrequestdto.md b/docs/models/triggereventrequestdto.md index 6ad8868a..cc8d0c75 100644 --- a/docs/models/triggereventrequestdto.md +++ b/docs/models/triggereventrequestdto.md @@ -7,7 +7,7 @@ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `workflow_id` | *str* | :heavy_check_mark: | The trigger identifier of the workflow you wish to send. This identifier can be found on the workflow page. | workflow_identifier | | `payload` | Dict[str, *Any*] | :heavy_minus_sign: | The payload object is used to pass additional custom information that could be
used to render the workflow, or perform routing rules based on it.
This data will also be available when fetching the notifications feed from the API to display certain parts of the UI. | {
"comment_id": "string",
"post": {
"text": "string"
}
} | -| `overrides` | Dict[str, Dict[str, *Any*]] | :heavy_minus_sign: | This could be used to override provider specific configurations | {
"fcm": {
"data": {
"key": "value"
}
}
} | +| `overrides` | [Optional[models.Overrides]](../models/overrides.md) | :heavy_minus_sign: | This could be used to override provider specific configurations | {
"fcm": {
"data": {
"key": "value"
}
}
} | | `to` | [models.To](../models/to.md) | :heavy_check_mark: | The recipients list of people who will receive the notification. | | | `transaction_id` | *Optional[str]* | :heavy_minus_sign: | A unique identifier for this transaction, we will generate a UUID if not provided. | | | `actor` | [Optional[models.Actor]](../models/actor.md) | :heavy_minus_sign: | It is used to display the Avatar of the provided actor's subscriber id or actor object.

If a new actor object is provided, we will create a new subscriber in our system | | diff --git a/docs/models/triggereventtoallrequestdtooverrides.md b/docs/models/triggereventtoallrequestdtooverrides.md index 1e19e257..afc1fe5d 100644 --- a/docs/models/triggereventtoallrequestdtooverrides.md +++ b/docs/models/triggereventtoallrequestdtooverrides.md @@ -5,5 +5,13 @@ This could be used to override provider specific configurations ## Fields -| Field | Type | Required | Description | -| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `steps` | Dict[str, [models.StepsOverrides](../models/stepsoverrides.md)] | :heavy_minus_sign: | This could be used to override provider specific configurations | {
"email-step": {
"providers": {
"sendgrid": {
"templateId": "1234567890"
}
}
}
} | +| `providers` | Dict[str, Dict[str, *Any*]] | :heavy_minus_sign: | Overrides the provider configuration for the entire workflow and all steps | {
"sendgrid": {
"templateId": "1234567890"
}
} | +| ~~`email`~~ | Dict[str, *Any*] | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Override the email provider specific configurations for the entire workflow | | +| ~~`push`~~ | Dict[str, *Any*] | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Override the push provider specific configurations for the entire workflow | | +| ~~`sms`~~ | Dict[str, *Any*] | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Override the sms provider specific configurations for the entire workflow | | +| ~~`chat`~~ | Dict[str, *Any*] | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Override the chat provider specific configurations for the entire workflow | | +| ~~`layout_identifier`~~ | *Optional[str]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

Override the layout identifier for the entire workflow | | +| `__pydantic_extra__` | Dict[str, Dict[str, *Any*]] | :heavy_minus_sign: | N/A | {
"fcm": {
"data": {
"key": "value"
}
}
} | \ No newline at end of file diff --git a/docs/models/type.md b/docs/models/type.md index c1906ecb..57cb2f81 100644 --- a/docs/models/type.md +++ b/docs/models/type.md @@ -1,10 +1,9 @@ # Type -Type of the trigger - ## Values -| Name | Value | -| ------- | ------- | -| `EVENT` | event | \ No newline at end of file +| Name | Value | +| --------- | --------- | +| `REGULAR` | regular | +| `BACKOFF` | backoff | \ No newline at end of file diff --git a/docs/models/unit.md b/docs/models/unit.md index 8f0e86e4..1ed96b96 100644 --- a/docs/models/unit.md +++ b/docs/models/unit.md @@ -1,7 +1,5 @@ # Unit -Unit of the digest - ## Values diff --git a/docs/models/updatesubscriberchannelrequestdto.md b/docs/models/updatesubscriberchannelrequestdto.md index a365a51f..44f2fbee 100644 --- a/docs/models/updatesubscriberchannelrequestdto.md +++ b/docs/models/updatesubscriberchannelrequestdto.md @@ -3,8 +3,8 @@ ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -| `provider_id` | [models.UpdateSubscriberChannelRequestDtoProviderID](../models/updatesubscriberchannelrequestdtoproviderid.md) | :heavy_check_mark: | The provider identifier for the credentials | -| `integration_identifier` | *Optional[str]* | :heavy_minus_sign: | The integration identifier | -| `credentials` | [models.ChannelCredentials](../models/channelcredentials.md) | :heavy_check_mark: | Credentials payload for the specified provider | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | +| `provider_id` | [models.ChatOrPushProviderEnum](../models/chatorpushproviderenum.md) | :heavy_check_mark: | The provider identifier for the credentials | +| `integration_identifier` | *Optional[str]* | :heavy_minus_sign: | The integration identifier | +| `credentials` | [models.ChannelCredentials](../models/channelcredentials.md) | :heavy_check_mark: | Credentials payload for the specified provider | \ No newline at end of file diff --git a/docs/models/updatetopicrequestdto.md b/docs/models/updatetopicrequestdto.md new file mode 100644 index 00000000..05718b7e --- /dev/null +++ b/docs/models/updatetopicrequestdto.md @@ -0,0 +1,8 @@ +# UpdateTopicRequestDto + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | +| `name` | *str* | :heavy_check_mark: | The display name for the topic | Updated Topic Name | \ No newline at end of file diff --git a/docs/models/validationerrordto.md b/docs/models/validationerrordto.md index 34c5da2a..e1614ec6 100644 --- a/docs/models/validationerrordto.md +++ b/docs/models/validationerrordto.md @@ -3,12 +3,12 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `status_code` | *float* | :heavy_check_mark: | HTTP status code of the error response. | 404 | -| `timestamp` | *str* | :heavy_check_mark: | Timestamp of when the error occurred. | 2024-12-12T13:00:00Z | -| `path` | *str* | :heavy_check_mark: | The path where the error occurred. | /api/v1/resource | -| `message` | *str* | :heavy_check_mark: | A detailed error message. | Resource not found. | -| `ctx` | Dict[str, *Any*] | :heavy_minus_sign: | Optional context object for additional error details. | {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
} | -| `error_id` | *Optional[str]* | :heavy_minus_sign: | Optional unique identifier for the error, useful for tracking using Sentry and
New Relic, only available for 500. | abc123 | -| `errors` | Dict[str, [models.Errors](../models/errors.md)] | :heavy_check_mark: | A record of validation errors keyed by field name | {
"fieldName1": {
"messages": [
"Field is required",
"Must be a valid email address"
],
"value": "invalidEmail"
},
"fieldName2": {
"messages": [
"Must be at least 18 years old"
],
"value": 17
},
"fieldName3": {
"messages": [
"Must be a boolean value"
],
"value": true
},
"fieldName4": {
"messages": [
"Must be a valid object"
],
"value": {
"key": "value"
}
}
} | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `status_code` | *float* | :heavy_check_mark: | HTTP status code of the error response. | 404 | +| `timestamp` | *str* | :heavy_check_mark: | Timestamp of when the error occurred. | 2024-12-12T13:00:00Z | +| `path` | *str* | :heavy_check_mark: | The path where the error occurred. | /api/v1/resource | +| `message` | [OptionalNullable[models.ValidationErrorDtoMessage]](../models/validationerrordtomessage.md) | :heavy_minus_sign: | Value that failed validation | xx xx xx | +| `ctx` | Dict[str, *Any*] | :heavy_minus_sign: | Optional context object for additional error details. | {
"workflowId": "some_wf_id",
"stepId": "some_wf_id"
} | +| `error_id` | *Optional[str]* | :heavy_minus_sign: | Optional unique identifier for the error, useful for tracking using Sentry and
New Relic, only available for 500. | abc123 | +| `errors` | Dict[str, [models.ConstraintValidation](../models/constraintvalidation.md)] | :heavy_check_mark: | A record of validation errors keyed by field name | {
"fieldName1": {
"messages": [
"Field is required",
"Must be a valid email address"
],
"value": "invalidEmail"
},
"fieldName2": {
"messages": [
"Must be at least 18 years old"
],
"value": 17
},
"fieldName3": {
"messages": [
"Must be a boolean value"
],
"value": true
},
"fieldName4": {
"messages": [
"Must be a valid object"
],
"value": {
"key": "value"
}
},
"fieldName5": {
"messages": [
"Field is missing"
],
"value": null
},
"fieldName6": {
"messages": [
"Undefined value"
]
}
} | \ No newline at end of file diff --git a/docs/models/validationerrordtomessage.md b/docs/models/validationerrordtomessage.md new file mode 100644 index 00000000..60cf3d30 --- /dev/null +++ b/docs/models/validationerrordtomessage.md @@ -0,0 +1,37 @@ +# ValidationErrorDtoMessage + +Value that failed validation + + +## Supported Types + +### `str` + +```python +value: str = /* values here */ +``` + +### `float` + +```python +value: float = /* values here */ +``` + +### `bool` + +```python +value: bool = /* values here */ +``` + +### `models.MessageValidationErrorDto4` + +```python +value: models.MessageValidationErrorDto4 = /* values here */ +``` + +### `List[Nullable[models.MessageValidationErrorDto5]]` + +```python +value: List[Nullable[models.MessageValidationErrorDto5]] = /* values here */ +``` + diff --git a/docs/models/value.md b/docs/models/value.md index a56d3320..d61f00e8 100644 --- a/docs/models/value.md +++ b/docs/models/value.md @@ -1,9 +1,37 @@ # Value +Value that failed validation -## Values -| Name | Value | -| ----- | ----- | -| `AND` | AND | -| `OR` | OR | \ No newline at end of file +## Supported Types + +### `str` + +```python +value: str = /* values here */ +``` + +### `float` + +```python +value: float = /* values here */ +``` + +### `bool` + +```python +value: bool = /* values here */ +``` + +### `models.Four` + +```python +value: models.Four = /* values here */ +``` + +### `List[Nullable[models.Five]]` + +```python +value: List[Nullable[models.Five]] = /* values here */ +``` + diff --git a/docs/models/workflowpreferencedto.md b/docs/models/workflowpreferencedto.md deleted file mode 100644 index b5c2a05f..00000000 --- a/docs/models/workflowpreferencedto.md +++ /dev/null @@ -1,11 +0,0 @@ -# WorkflowPreferenceDto - - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| `enabled` | *bool* | :heavy_check_mark: | Whether notifications are enabled for this workflow | -| `channels` | [models.PreferenceChannels](../models/preferencechannels.md) | :heavy_check_mark: | Channel-specific preference settings for this workflow | -| `overrides` | List[[models.Overrides](../models/overrides.md)] | :heavy_check_mark: | List of preference overrides | -| `workflow` | [models.WorkflowInfoDto](../models/workflowinfodto.md) | :heavy_check_mark: | Workflow information | \ No newline at end of file diff --git a/docs/models/workflowresponse.md b/docs/models/workflowresponse.md index 65aa09c5..0b705511 100644 --- a/docs/models/workflowresponse.md +++ b/docs/models/workflowresponse.md @@ -10,7 +10,7 @@ | `description` | *str* | :heavy_check_mark: | N/A | | `active` | *bool* | :heavy_check_mark: | N/A | | `draft` | *bool* | :heavy_check_mark: | N/A | -| `preference_settings` | [models.PreferenceChannels](../models/preferencechannels.md) | :heavy_check_mark: | N/A | +| `preference_settings` | [models.SubscriberPreferenceChannels](../models/subscriberpreferencechannels.md) | :heavy_check_mark: | N/A | | `critical` | *bool* | :heavy_check_mark: | N/A | | `tags` | List[*str*] | :heavy_check_mark: | N/A | | `steps` | List[[models.NotificationStepDto](../models/notificationstepdto.md)] | :heavy_check_mark: | N/A | diff --git a/docs/sdks/credentials/README.md b/docs/sdks/credentials/README.md index b13520a1..48110e69 100644 --- a/docs/sdks/credentials/README.md +++ b/docs/sdks/credentials/README.md @@ -25,7 +25,7 @@ with Novu( ) as novu: res = novu.subscribers.credentials.update(subscriber_id="", update_subscriber_channel_request_dto={ - "provider_id": novu_py.UpdateSubscriberChannelRequestDtoProviderID.PUSHPAD, + "provider_id": novu_py.ChatOrPushProviderEnum.PUSHPAD, "credentials": { "webhook_url": "https://example.com/webhook", "channel": "general", @@ -88,7 +88,7 @@ with Novu( ) as novu: res = novu.subscribers.credentials.append(subscriber_id="", update_subscriber_channel_request_dto={ - "provider_id": novu_py.UpdateSubscriberChannelRequestDtoProviderID.ZULIP, + "provider_id": novu_py.ChatOrPushProviderEnum.ZULIP, "credentials": { "webhook_url": "https://example.com/webhook", "channel": "general", diff --git a/docs/sdks/novu/README.md b/docs/sdks/novu/README.md index 5ea079a6..ebe5e073 100644 --- a/docs/sdks/novu/README.md +++ b/docs/sdks/novu/README.md @@ -41,13 +41,22 @@ with Novu( "text": "string", }, }, - overrides={ - "fcm": { - "data": { - "key": "value", + overrides=novu_py.Overrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", }, }, - }, + ), to=novu_py.SubscriberPayloadDto( subscriber_id="", ), @@ -135,6 +144,7 @@ Trigger a broadcast event to all existing subscribers, could be used to send ann ### Example Usage ```python +import novu_py from novu_py import Novu @@ -142,15 +152,38 @@ with Novu( secret_key="YOUR_SECRET_KEY_HERE", ) as novu: - res = novu.trigger_broadcast(trigger_event_to_all_request_dto={ - "name": "", - "payload": { + res = novu.trigger_broadcast(trigger_event_to_all_request_dto=novu_py.TriggerEventToAllRequestDto( + name="", + payload={ "comment_id": "string", "post": { "text": "string", }, }, - }) + overrides=novu_py.TriggerEventToAllRequestDtoOverrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + **{ + "fcm": { + "data": { + "key": "value", + }, + }, + }, + ), + )) # Handle response print(res) @@ -207,13 +240,22 @@ with Novu( "text": "string", }, }, - overrides={ - "fcm": { - "data": { - "key": "value", + overrides=novu_py.Overrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", }, }, - }, + ), to=novu_py.SubscriberPayloadDto( subscriber_id="", ), @@ -226,13 +268,22 @@ with Novu( "text": "string", }, }, - overrides={ - "fcm": { - "data": { - "key": "value", + overrides=novu_py.Overrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", }, }, - }, + ), to=[ novu_py.TopicPayloadDto( topic_key="", @@ -248,13 +299,22 @@ with Novu( "text": "string", }, }, - overrides={ - "fcm": { - "data": { - "key": "value", + overrides=novu_py.Overrides( + steps={ + "email-step": novu_py.StepsOverrides( + providers={ + "sendgrid": { + "templateId": "1234567890", + }, + }, + ), + }, + providers={ + "sendgrid": { + "templateId": "1234567890", }, }, - }, + ), to=[ "SUBSCRIBER_ID", "SUBSCRIBER_ID", diff --git a/docs/sdks/novumessages/README.md b/docs/sdks/novumessages/README.md index d60d8dc4..995c61e5 100644 --- a/docs/sdks/novumessages/README.md +++ b/docs/sdks/novumessages/README.md @@ -6,7 +6,7 @@ ### Available Operations * [update_as_seen](#update_as_seen) - Mark message action as seen -* [mark_all](#mark_all) - Marks all the subscriber messages as read, unread, seen or unseen. Optionally you can pass feed id (or array) to mark messages of a particular feed. +* [mark_all](#mark_all) - Marks all the subscriber messages as read, unread, seen or unseen. * [mark_all_as](#mark_all_as) - Mark a subscriber messages as seen, read, unseen or unread ## update_as_seen @@ -61,7 +61,7 @@ with Novu( ## mark_all -Marks all the subscriber messages as read, unread, seen or unseen. Optionally you can pass feed id (or array) to mark messages of a particular feed. +Marks all the subscriber messages as read, unread, seen or unseen. ### Example Usage diff --git a/docs/sdks/novusubscribers/README.md b/docs/sdks/novusubscribers/README.md index 70a29664..0fcac4f8 100644 --- a/docs/sdks/novusubscribers/README.md +++ b/docs/sdks/novusubscribers/README.md @@ -5,59 +5,7 @@ ### Available Operations -* [assign](#assign) - Subscribers addition * [retrieve](#retrieve) - Check topic subscriber -* [remove](#remove) - Subscribers removal - -## assign - -Add subscribers to a topic by key - -### Example Usage - -```python -from novu_py import Novu - - -with Novu( - secret_key="YOUR_SECRET_KEY_HERE", -) as novu: - - res = novu.topics.subscribers.assign(topic_key="", add_subscribers_request_dto={ - "subscribers": [ - "", - "", - "", - ], - }) - - # Handle response - print(res) - -``` - -### Parameters - -| Parameter | Type | Required | Description | -| --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | -| `topic_key` | *str* | :heavy_check_mark: | The topic key | -| `add_subscribers_request_dto` | [models.AddSubscribersRequestDto](../../models/addsubscribersrequestdto.md) | :heavy_check_mark: | N/A | -| `idempotency_key` | *Optional[str]* | :heavy_minus_sign: | A header for idempotency purposes | -| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | - -### Response - -**[models.TopicsControllerAssignResponse](../../models/topicscontrollerassignresponse.md)** - -### Errors - -| Error Type | Status Code | Content Type | -| -------------------------------------- | -------------------------------------- | -------------------------------------- | -| models.ErrorDto | 414 | application/json | -| models.ErrorDto | 400, 401, 403, 404, 405, 409, 413, 415 | application/json | -| models.ValidationErrorDto | 422 | application/json | -| models.ErrorDto | 500 | application/json | -| models.APIError | 4XX, 5XX | \*/\* | ## retrieve @@ -91,56 +39,7 @@ with Novu( ### Response -**[models.TopicsControllerGetTopicSubscriberResponse](../../models/topicscontrollergettopicsubscriberresponse.md)** - -### Errors - -| Error Type | Status Code | Content Type | -| -------------------------------------- | -------------------------------------- | -------------------------------------- | -| models.ErrorDto | 414 | application/json | -| models.ErrorDto | 400, 401, 403, 404, 405, 409, 413, 415 | application/json | -| models.ValidationErrorDto | 422 | application/json | -| models.ErrorDto | 500 | application/json | -| models.APIError | 4XX, 5XX | \*/\* | - -## remove - -Remove subscribers from a topic - -### Example Usage - -```python -from novu_py import Novu - - -with Novu( - secret_key="YOUR_SECRET_KEY_HERE", -) as novu: - - res = novu.topics.subscribers.remove(topic_key="", remove_subscribers_request_dto={ - "subscribers": [ - "", - "", - ], - }) - - # Handle response - print(res) - -``` - -### Parameters - -| Parameter | Type | Required | Description | -| --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | -| `topic_key` | *str* | :heavy_check_mark: | The topic key | -| `remove_subscribers_request_dto` | [models.RemoveSubscribersRequestDto](../../models/removesubscribersrequestdto.md) | :heavy_check_mark: | N/A | -| `idempotency_key` | *Optional[str]* | :heavy_minus_sign: | A header for idempotency purposes | -| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | - -### Response - -**[models.TopicsControllerRemoveSubscribersResponse](../../models/topicscontrollerremovesubscribersresponse.md)** +**[models.TopicsV1ControllerGetTopicSubscriberResponse](../../models/topicsv1controllergettopicsubscriberresponse.md)** ### Errors diff --git a/docs/sdks/novutopics/README.md b/docs/sdks/novutopics/README.md new file mode 100644 index 00000000..7cf1af66 --- /dev/null +++ b/docs/sdks/novutopics/README.md @@ -0,0 +1,52 @@ +# NovuTopics +(*subscribers.topics*) + +## Overview + +### Available Operations + +* [list](#list) - List topics a subscriber is subscribed to + +## list + +List topic subscriptions for a subscriber with pagination and filtering + +### Example Usage + +```python +from novu_py import Novu + + +with Novu( + secret_key="YOUR_SECRET_KEY_HERE", +) as novu: + + res = novu.subscribers.topics.list(request={ + "subscriber_id": "", + }) + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | +| `request` | [models.SubscribersControllerListSubscriberTopicsRequest](../../models/subscriberscontrollerlistsubscribertopicsrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.SubscribersControllerListSubscriberTopicsResponse](../../models/subscriberscontrollerlistsubscribertopicsresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| -------------------------------------- | -------------------------------------- | -------------------------------------- | +| models.ErrorDto | 414 | application/json | +| models.ErrorDto | 400, 401, 403, 404, 405, 409, 413, 415 | application/json | +| models.ValidationErrorDto | 422 | application/json | +| models.ErrorDto | 500 | application/json | +| models.APIError | 4XX, 5XX | \*/\* | \ No newline at end of file diff --git a/docs/sdks/subscribers/README.md b/docs/sdks/subscribers/README.md index a7a4c981..ec4cef0e 100644 --- a/docs/sdks/subscribers/README.md +++ b/docs/sdks/subscribers/README.md @@ -61,7 +61,7 @@ with Novu( ## create -Create subscriber with the given data +Create subscriber with the given data, if the subscriber already exists, it will be updated ### Example Usage diff --git a/docs/sdks/subscriptions/README.md b/docs/sdks/subscriptions/README.md new file mode 100644 index 00000000..327067e6 --- /dev/null +++ b/docs/sdks/subscriptions/README.md @@ -0,0 +1,152 @@ +# Subscriptions +(*topics.subscriptions*) + +## Overview + +### Available Operations + +* [list](#list) - List topic subscriptions +* [create](#create) - Create topic subscriptions, if the topic does not exist, it will be created. +* [delete](#delete) - Delete topic subscriptions + +## list + +List topic subscriptions + +### Example Usage + +```python +from novu_py import Novu + + +with Novu( + secret_key="YOUR_SECRET_KEY_HERE", +) as novu: + + res = novu.topics.subscriptions.list(request={ + "topic_key": "", + }) + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | +| `request` | [models.TopicsControllerListTopicSubscriptionsRequest](../../models/topicscontrollerlisttopicsubscriptionsrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.TopicsControllerListTopicSubscriptionsResponse](../../models/topicscontrollerlisttopicsubscriptionsresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| -------------------------------------- | -------------------------------------- | -------------------------------------- | +| models.ErrorDto | 414 | application/json | +| models.ErrorDto | 400, 401, 403, 404, 405, 409, 413, 415 | application/json | +| models.ValidationErrorDto | 422 | application/json | +| models.ErrorDto | 500 | application/json | +| models.APIError | 4XX, 5XX | \*/\* | + +## create + +Create topic subscriptions, if the topic does not exist, it will be created. + +### Example Usage + +```python +from novu_py import Novu + + +with Novu( + secret_key="YOUR_SECRET_KEY_HERE", +) as novu: + + res = novu.topics.subscriptions.create(topic_key="", create_topic_subscriptions_request_dto={ + "subscriber_ids": [ + "subscriberId1", + "subscriberId2", + ], + }) + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| `topic_key` | *str* | :heavy_check_mark: | The key identifier of the topic | +| `create_topic_subscriptions_request_dto` | [models.CreateTopicSubscriptionsRequestDto](../../models/createtopicsubscriptionsrequestdto.md) | :heavy_check_mark: | N/A | +| `idempotency_key` | *Optional[str]* | :heavy_minus_sign: | A header for idempotency purposes | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.TopicsControllerCreateTopicSubscriptionsResponse](../../models/topicscontrollercreatetopicsubscriptionsresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| -------------------------------------- | -------------------------------------- | -------------------------------------- | +| models.ErrorDto | 414 | application/json | +| models.ErrorDto | 400, 401, 403, 404, 405, 409, 413, 415 | application/json | +| models.ValidationErrorDto | 422 | application/json | +| models.ErrorDto | 500 | application/json | +| models.APIError | 4XX, 5XX | \*/\* | + +## delete + +Delete topic subscriptions + +### Example Usage + +```python +from novu_py import Novu + + +with Novu( + secret_key="YOUR_SECRET_KEY_HERE", +) as novu: + + res = novu.topics.subscriptions.delete(topic_key="", delete_topic_subscriptions_request_dto={ + "subscriber_ids": [ + "subscriberId1", + "subscriberId2", + ], + }) + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| `topic_key` | *str* | :heavy_check_mark: | The key identifier of the topic | +| `delete_topic_subscriptions_request_dto` | [models.DeleteTopicSubscriptionsRequestDto](../../models/deletetopicsubscriptionsrequestdto.md) | :heavy_check_mark: | N/A | +| `idempotency_key` | *Optional[str]* | :heavy_minus_sign: | A header for idempotency purposes | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.TopicsControllerDeleteTopicSubscriptionsResponse](../../models/topicscontrollerdeletetopicsubscriptionsresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| -------------------------------------- | -------------------------------------- | -------------------------------------- | +| models.ErrorDto | 414 | application/json | +| models.ErrorDto | 400, 401, 403, 404, 405, 409, 413, 415 | application/json | +| models.ValidationErrorDto | 422 | application/json | +| models.ErrorDto | 500 | application/json | +| models.APIError | 4XX, 5XX | \*/\* | \ No newline at end of file diff --git a/docs/sdks/topics/README.md b/docs/sdks/topics/README.md index 8ddafd91..adbc7cf8 100644 --- a/docs/sdks/topics/README.md +++ b/docs/sdks/topics/README.md @@ -8,15 +8,15 @@ Topics are a way to group subscribers together so that they can be notified of e ### Available Operations -* [create](#create) - Topic creation -* [list](#list) - Get topic list filtered -* [delete](#delete) - Delete topic -* [retrieve](#retrieve) - Get topic -* [rename](#rename) - Rename a topic +* [list](#list) - Get topics list +* [create](#create) - Create or update a topic +* [get](#get) - Get topic by key +* [update](#update) - Update topic by key +* [delete](#delete) - Delete topic by key -## create +## list -Create a topic +Get topics list ### Example Usage @@ -28,9 +28,8 @@ with Novu( secret_key="YOUR_SECRET_KEY_HERE", ) as novu: - res = novu.topics.create(create_topic_request_dto={ - "key": "", - "name": "", + res = novu.topics.list(request={ + "key": "exampleKey", }) # Handle response @@ -40,15 +39,14 @@ with Novu( ### Parameters -| Parameter | Type | Required | Description | -| --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | -| `create_topic_request_dto` | [models.CreateTopicRequestDto](../../models/createtopicrequestdto.md) | :heavy_check_mark: | N/A | -| `idempotency_key` | *Optional[str]* | :heavy_minus_sign: | A header for idempotency purposes | -| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | +| Parameter | Type | Required | Description | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| `request` | [models.TopicsControllerListTopicsRequest](../../models/topicscontrollerlisttopicsrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | ### Response -**[models.TopicsControllerCreateTopicResponse](../../models/topicscontrollercreatetopicresponse.md)** +**[models.TopicsControllerListTopicsResponse](../../models/topicscontrollerlisttopicsresponse.md)** ### Errors @@ -60,9 +58,9 @@ with Novu( | models.ErrorDto | 500 | application/json | | models.APIError | 4XX, 5XX | \*/\* | -## list +## create -Returns a list of topics that can be paginated using the `page` query parameter and filtered by the topic key with the `key` query parameter +Creates a new topic if it does not exist, or updates an existing topic if it already exists ### Example Usage @@ -74,7 +72,10 @@ with Novu( secret_key="YOUR_SECRET_KEY_HERE", ) as novu: - res = novu.topics.list(key="exampleKey") + res = novu.topics.create(create_update_topic_request_dto={ + "key": "task:12345", + "name": "Task Title", + }) # Handle response print(res) @@ -83,17 +84,15 @@ with Novu( ### Parameters -| Parameter | Type | Required | Description | Example | -| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | -| `page` | *Optional[int]* | :heavy_minus_sign: | The page number to retrieve (starts from 0) | 0 | -| `page_size` | *Optional[int]* | :heavy_minus_sign: | The number of items to return per page (default: 10) | 10 | -| `key` | *Optional[str]* | :heavy_minus_sign: | A filter key to apply to the results | exampleKey | -| `idempotency_key` | *Optional[str]* | :heavy_minus_sign: | A header for idempotency purposes | | -| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | | +| Parameter | Type | Required | Description | +| --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| `create_update_topic_request_dto` | [models.CreateUpdateTopicRequestDto](../../models/createupdatetopicrequestdto.md) | :heavy_check_mark: | N/A | +| `idempotency_key` | *Optional[str]* | :heavy_minus_sign: | A header for idempotency purposes | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | ### Response -**[models.TopicsControllerListTopicsResponse](../../models/topicscontrollerlisttopicsresponse.md)** +**[models.TopicsControllerUpsertTopicResponse](../../models/topicscontrollerupserttopicresponse.md)** ### Errors @@ -105,9 +104,9 @@ with Novu( | models.ErrorDto | 500 | application/json | | models.APIError | 4XX, 5XX | \*/\* | -## delete +## get -Delete a topic by its topic key if it has no subscribers +Get topic by key ### Example Usage @@ -119,7 +118,7 @@ with Novu( secret_key="YOUR_SECRET_KEY_HERE", ) as novu: - res = novu.topics.delete(topic_key="") + res = novu.topics.get(topic_key="") # Handle response print(res) @@ -130,13 +129,13 @@ with Novu( | Parameter | Type | Required | Description | | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | -| `topic_key` | *str* | :heavy_check_mark: | The topic key | +| `topic_key` | *str* | :heavy_check_mark: | The key identifier of the topic | | `idempotency_key` | *Optional[str]* | :heavy_minus_sign: | A header for idempotency purposes | | `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | ### Response -**[models.TopicsControllerDeleteTopicResponse](../../models/topicscontrollerdeletetopicresponse.md)** +**[models.TopicsControllerGetTopicResponse](../../models/topicscontrollergettopicresponse.md)** ### Errors @@ -148,9 +147,9 @@ with Novu( | models.ErrorDto | 500 | application/json | | models.APIError | 4XX, 5XX | \*/\* | -## retrieve +## update -Get a topic by its topic key +Update topic by key ### Example Usage @@ -162,7 +161,9 @@ with Novu( secret_key="YOUR_SECRET_KEY_HERE", ) as novu: - res = novu.topics.retrieve(topic_key="") + res = novu.topics.update(topic_key="", update_topic_request_dto={ + "name": "Updated Topic Name", + }) # Handle response print(res) @@ -171,15 +172,16 @@ with Novu( ### Parameters -| Parameter | Type | Required | Description | -| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | -| `topic_key` | *str* | :heavy_check_mark: | The topic key | -| `idempotency_key` | *Optional[str]* | :heavy_minus_sign: | A header for idempotency purposes | -| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | +| Parameter | Type | Required | Description | +| --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | +| `topic_key` | *str* | :heavy_check_mark: | The key identifier of the topic | +| `update_topic_request_dto` | [models.UpdateTopicRequestDto](../../models/updatetopicrequestdto.md) | :heavy_check_mark: | N/A | +| `idempotency_key` | *Optional[str]* | :heavy_minus_sign: | A header for idempotency purposes | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | ### Response -**[models.TopicsControllerGetTopicResponse](../../models/topicscontrollergettopicresponse.md)** +**[models.TopicsControllerUpdateTopicResponse](../../models/topicscontrollerupdatetopicresponse.md)** ### Errors @@ -191,9 +193,9 @@ with Novu( | models.ErrorDto | 500 | application/json | | models.APIError | 4XX, 5XX | \*/\* | -## rename +## delete -Rename a topic by providing a new name +Delete topic by key ### Example Usage @@ -205,9 +207,7 @@ with Novu( secret_key="YOUR_SECRET_KEY_HERE", ) as novu: - res = novu.topics.rename(topic_key="", rename_topic_request_dto={ - "name": "", - }) + res = novu.topics.delete(topic_key="") # Handle response print(res) @@ -216,16 +216,15 @@ with Novu( ### Parameters -| Parameter | Type | Required | Description | -| --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | -| `topic_key` | *str* | :heavy_check_mark: | The topic key | -| `rename_topic_request_dto` | [models.RenameTopicRequestDto](../../models/renametopicrequestdto.md) | :heavy_check_mark: | N/A | -| `idempotency_key` | *Optional[str]* | :heavy_minus_sign: | A header for idempotency purposes | -| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `topic_key` | *str* | :heavy_check_mark: | The key identifier of the topic | +| `idempotency_key` | *Optional[str]* | :heavy_minus_sign: | A header for idempotency purposes | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | ### Response -**[models.TopicsControllerRenameTopicResponse](../../models/topicscontrollerrenametopicresponse.md)** +**[models.TopicsControllerDeleteTopicResponse](../../models/topicscontrollerdeletetopicresponse.md)** ### Errors diff --git a/poetry.lock b/poetry.lock index 6106422e..e5e254cf 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.1.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.1.3 and should not be changed by hand. [[package]] name = "annotated-types" @@ -91,21 +91,6 @@ files = [ graph = ["objgraph (>=1.7.2)"] profile = ["gprof2dot (>=2022.7.29)"] -[[package]] -name = "eval-type-backport" -version = "0.2.2" -description = "Like `typing._eval_type`, but lets older Python versions use newer typing features." -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "eval_type_backport-0.2.2-py3-none-any.whl", hash = "sha256:cb6ad7c393517f476f96d456d0412ea80f0a8cf96f6892834cd9340149111b0a"}, - {file = "eval_type_backport-0.2.2.tar.gz", hash = "sha256:f0576b4cf01ebb5bd358d02314d31846af5e07678387486e2c798af0e7d849c1"}, -] - -[package.extras] -tests = ["pytest"] - [[package]] name = "exceptiongroup" version = "1.2.2" @@ -237,50 +222,44 @@ files = [ [[package]] name = "mypy" -version = "1.14.1" +version = "1.15.0" description = "Optional static typing for Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "mypy-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:52686e37cf13d559f668aa398dd7ddf1f92c5d613e4f8cb262be2fb4fedb0fcb"}, - {file = "mypy-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1fb545ca340537d4b45d3eecdb3def05e913299ca72c290326be19b3804b39c0"}, - {file = "mypy-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90716d8b2d1f4cd503309788e51366f07c56635a3309b0f6a32547eaaa36a64d"}, - {file = "mypy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ae753f5c9fef278bcf12e1a564351764f2a6da579d4a81347e1d5a15819997b"}, - {file = "mypy-1.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e0fe0f5feaafcb04505bcf439e991c6d8f1bf8b15f12b05feeed96e9e7bf1427"}, - {file = "mypy-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:7d54bd85b925e501c555a3227f3ec0cfc54ee8b6930bd6141ec872d1c572f81f"}, - {file = "mypy-1.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f995e511de847791c3b11ed90084a7a0aafdc074ab88c5a9711622fe4751138c"}, - {file = "mypy-1.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d64169ec3b8461311f8ce2fd2eb5d33e2d0f2c7b49116259c51d0d96edee48d1"}, - {file = "mypy-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba24549de7b89b6381b91fbc068d798192b1b5201987070319889e93038967a8"}, - {file = "mypy-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:183cf0a45457d28ff9d758730cd0210419ac27d4d3f285beda038c9083363b1f"}, - {file = "mypy-1.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f2a0ecc86378f45347f586e4163d1769dd81c5a223d577fe351f26b179e148b1"}, - {file = "mypy-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:ad3301ebebec9e8ee7135d8e3109ca76c23752bac1e717bc84cd3836b4bf3eae"}, - {file = "mypy-1.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:30ff5ef8519bbc2e18b3b54521ec319513a26f1bba19a7582e7b1f58a6e69f14"}, - {file = "mypy-1.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cb9f255c18052343c70234907e2e532bc7e55a62565d64536dbc7706a20b78b9"}, - {file = "mypy-1.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b4e3413e0bddea671012b063e27591b953d653209e7a4fa5e48759cda77ca11"}, - {file = "mypy-1.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:553c293b1fbdebb6c3c4030589dab9fafb6dfa768995a453d8a5d3b23784af2e"}, - {file = "mypy-1.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fad79bfe3b65fe6a1efaed97b445c3d37f7be9fdc348bdb2d7cac75579607c89"}, - {file = "mypy-1.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:8fa2220e54d2946e94ab6dbb3ba0a992795bd68b16dc852db33028df2b00191b"}, - {file = "mypy-1.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:92c3ed5afb06c3a8e188cb5da4984cab9ec9a77ba956ee419c68a388b4595255"}, - {file = "mypy-1.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dbec574648b3e25f43d23577309b16534431db4ddc09fda50841f1e34e64ed34"}, - {file = "mypy-1.14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8c6d94b16d62eb3e947281aa7347d78236688e21081f11de976376cf010eb31a"}, - {file = "mypy-1.14.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d4b19b03fdf54f3c5b2fa474c56b4c13c9dbfb9a2db4370ede7ec11a2c5927d9"}, - {file = "mypy-1.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0c911fde686394753fff899c409fd4e16e9b294c24bfd5e1ea4675deae1ac6fd"}, - {file = "mypy-1.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:8b21525cb51671219f5307be85f7e646a153e5acc656e5cebf64bfa076c50107"}, - {file = "mypy-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7084fb8f1128c76cd9cf68fe5971b37072598e7c31b2f9f95586b65c741a9d31"}, - {file = "mypy-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8f845a00b4f420f693f870eaee5f3e2692fa84cc8514496114649cfa8fd5e2c6"}, - {file = "mypy-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:44bf464499f0e3a2d14d58b54674dee25c031703b2ffc35064bd0df2e0fac319"}, - {file = "mypy-1.14.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c99f27732c0b7dc847adb21c9d47ce57eb48fa33a17bc6d7d5c5e9f9e7ae5bac"}, - {file = "mypy-1.14.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:bce23c7377b43602baa0bd22ea3265c49b9ff0b76eb315d6c34721af4cdf1d9b"}, - {file = "mypy-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:8edc07eeade7ebc771ff9cf6b211b9a7d93687ff892150cb5692e4f4272b0837"}, - {file = "mypy-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3888a1816d69f7ab92092f785a462944b3ca16d7c470d564165fe703b0970c35"}, - {file = "mypy-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:46c756a444117c43ee984bd055db99e498bc613a70bbbc120272bd13ca579fbc"}, - {file = "mypy-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:27fc248022907e72abfd8e22ab1f10e903915ff69961174784a3900a8cba9ad9"}, - {file = "mypy-1.14.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:499d6a72fb7e5de92218db961f1a66d5f11783f9ae549d214617edab5d4dbdbb"}, - {file = "mypy-1.14.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:57961db9795eb566dc1d1b4e9139ebc4c6b0cb6e7254ecde69d1552bf7613f60"}, - {file = "mypy-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:07ba89fdcc9451f2ebb02853deb6aaaa3d2239a236669a63ab3801bbf923ef5c"}, - {file = "mypy-1.14.1-py3-none-any.whl", hash = "sha256:b66a60cc4073aeb8ae00057f9c1f64d49e90f918fbcef9a977eb121da8b8f1d1"}, - {file = "mypy-1.14.1.tar.gz", hash = "sha256:7ec88144fe9b510e8475ec2f5f251992690fcf89ccb4500b214b4226abcd32d6"}, + {file = "mypy-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:979e4e1a006511dacf628e36fadfecbcc0160a8af6ca7dad2f5025529e082c13"}, + {file = "mypy-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c4bb0e1bd29f7d34efcccd71cf733580191e9a264a2202b0239da95984c5b559"}, + {file = "mypy-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be68172e9fd9ad8fb876c6389f16d1c1b5f100ffa779f77b1fb2176fcc9ab95b"}, + {file = "mypy-1.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7be1e46525adfa0d97681432ee9fcd61a3964c2446795714699a998d193f1a3"}, + {file = "mypy-1.15.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2e2c2e6d3593f6451b18588848e66260ff62ccca522dd231cd4dd59b0160668b"}, + {file = "mypy-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:6983aae8b2f653e098edb77f893f7b6aca69f6cffb19b2cc7443f23cce5f4828"}, + {file = "mypy-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2922d42e16d6de288022e5ca321cd0618b238cfc5570e0263e5ba0a77dbef56f"}, + {file = "mypy-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2ee2d57e01a7c35de00f4634ba1bbf015185b219e4dc5909e281016df43f5ee5"}, + {file = "mypy-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:973500e0774b85d9689715feeffcc980193086551110fd678ebe1f4342fb7c5e"}, + {file = "mypy-1.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a95fb17c13e29d2d5195869262f8125dfdb5c134dc8d9a9d0aecf7525b10c2c"}, + {file = "mypy-1.15.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1905f494bfd7d85a23a88c5d97840888a7bd516545fc5aaedff0267e0bb54e2f"}, + {file = "mypy-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:c9817fa23833ff189db061e6d2eff49b2f3b6ed9856b4a0a73046e41932d744f"}, + {file = "mypy-1.15.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:aea39e0583d05124836ea645f412e88a5c7d0fd77a6d694b60d9b6b2d9f184fd"}, + {file = "mypy-1.15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f2147ab812b75e5b5499b01ade1f4a81489a147c01585cda36019102538615f"}, + {file = "mypy-1.15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce436f4c6d218a070048ed6a44c0bbb10cd2cc5e272b29e7845f6a2f57ee4464"}, + {file = "mypy-1.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8023ff13985661b50a5928fc7a5ca15f3d1affb41e5f0a9952cb68ef090b31ee"}, + {file = "mypy-1.15.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1124a18bc11a6a62887e3e137f37f53fbae476dc36c185d549d4f837a2a6a14e"}, + {file = "mypy-1.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:171a9ca9a40cd1843abeca0e405bc1940cd9b305eaeea2dda769ba096932bb22"}, + {file = "mypy-1.15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:93faf3fdb04768d44bf28693293f3904bbb555d076b781ad2530214ee53e3445"}, + {file = "mypy-1.15.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:811aeccadfb730024c5d3e326b2fbe9249bb7413553f15499a4050f7c30e801d"}, + {file = "mypy-1.15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:98b7b9b9aedb65fe628c62a6dc57f6d5088ef2dfca37903a7d9ee374d03acca5"}, + {file = "mypy-1.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c43a7682e24b4f576d93072216bf56eeff70d9140241f9edec0c104d0c515036"}, + {file = "mypy-1.15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:baefc32840a9f00babd83251560e0ae1573e2f9d1b067719479bfb0e987c6357"}, + {file = "mypy-1.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:b9378e2c00146c44793c98b8d5a61039a048e31f429fb0eb546d93f4b000bedf"}, + {file = "mypy-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e601a7fa172c2131bff456bb3ee08a88360760d0d2f8cbd7a75a65497e2df078"}, + {file = "mypy-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:712e962a6357634fef20412699a3655c610110e01cdaa6180acec7fc9f8513ba"}, + {file = "mypy-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95579473af29ab73a10bada2f9722856792a36ec5af5399b653aa28360290a5"}, + {file = "mypy-1.15.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8f8722560a14cde92fdb1e31597760dc35f9f5524cce17836c0d22841830fd5b"}, + {file = "mypy-1.15.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1fbb8da62dc352133d7d7ca90ed2fb0e9d42bb1a32724c287d3c76c58cbaa9c2"}, + {file = "mypy-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:d10d994b41fb3497719bbf866f227b3489048ea4bbbb5015357db306249f7980"}, + {file = "mypy-1.15.0-py3-none-any.whl", hash = "sha256:5469affef548bd1895d86d3bf10ce2b44e33d86923c29e4d675b3e323437ea3e"}, + {file = "mypy-1.15.0.tar.gz", hash = "sha256:404534629d51d3efea5c800ee7c42b72a6554d6c400e6a79eafe15d11341fd43"}, ] [package.dependencies] @@ -326,20 +305,21 @@ type = ["mypy (>=1.11.2)"] [[package]] name = "pydantic" -version = "2.10.5" +version = "2.11.4" description = "Data validation using Python type hints" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "pydantic-2.10.5-py3-none-any.whl", hash = "sha256:4dd4e322dbe55472cb7ca7e73f4b63574eecccf2835ffa2af9021ce113c83c53"}, - {file = "pydantic-2.10.5.tar.gz", hash = "sha256:278b38dbbaec562011d659ee05f63346951b3a248a6f3642e1bc68894ea2b4ff"}, + {file = "pydantic-2.11.4-py3-none-any.whl", hash = "sha256:d9615eaa9ac5a063471da949c8fc16376a84afb5024688b3ff885693506764eb"}, + {file = "pydantic-2.11.4.tar.gz", hash = "sha256:32738d19d63a226a52eed76645a98ee07c1f410ee41d93b4afbfa85ed8111c2d"}, ] [package.dependencies] annotated-types = ">=0.6.0" -pydantic-core = "2.27.2" +pydantic-core = "2.33.2" typing-extensions = ">=4.12.2" +typing-inspection = ">=0.4.0" [package.extras] email = ["email-validator (>=2.0.0)"] @@ -347,112 +327,111 @@ timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows [[package]] name = "pydantic-core" -version = "2.27.2" +version = "2.33.2" description = "Core functionality for Pydantic validation and serialization" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"}, - {file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"}, - {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a"}, - {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5"}, - {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c"}, - {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7"}, - {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a"}, - {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236"}, - {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962"}, - {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9"}, - {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af"}, - {file = "pydantic_core-2.27.2-cp310-cp310-win32.whl", hash = "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4"}, - {file = "pydantic_core-2.27.2-cp310-cp310-win_amd64.whl", hash = "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31"}, - {file = "pydantic_core-2.27.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc"}, - {file = "pydantic_core-2.27.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7"}, - {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15"}, - {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306"}, - {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99"}, - {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459"}, - {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048"}, - {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d"}, - {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b"}, - {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474"}, - {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6"}, - {file = "pydantic_core-2.27.2-cp311-cp311-win32.whl", hash = "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c"}, - {file = "pydantic_core-2.27.2-cp311-cp311-win_amd64.whl", hash = "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc"}, - {file = "pydantic_core-2.27.2-cp311-cp311-win_arm64.whl", hash = "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4"}, - {file = "pydantic_core-2.27.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0"}, - {file = "pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef"}, - {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7"}, - {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934"}, - {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6"}, - {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c"}, - {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2"}, - {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4"}, - {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3"}, - {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4"}, - {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57"}, - {file = "pydantic_core-2.27.2-cp312-cp312-win32.whl", hash = "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc"}, - {file = "pydantic_core-2.27.2-cp312-cp312-win_amd64.whl", hash = "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9"}, - {file = "pydantic_core-2.27.2-cp312-cp312-win_arm64.whl", hash = "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b"}, - {file = "pydantic_core-2.27.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b"}, - {file = "pydantic_core-2.27.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154"}, - {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9"}, - {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9"}, - {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1"}, - {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a"}, - {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e"}, - {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4"}, - {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27"}, - {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee"}, - {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1"}, - {file = "pydantic_core-2.27.2-cp313-cp313-win32.whl", hash = "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130"}, - {file = "pydantic_core-2.27.2-cp313-cp313-win_amd64.whl", hash = "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee"}, - {file = "pydantic_core-2.27.2-cp313-cp313-win_arm64.whl", hash = "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b"}, - {file = "pydantic_core-2.27.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d3e8d504bdd3f10835468f29008d72fc8359d95c9c415ce6e767203db6127506"}, - {file = "pydantic_core-2.27.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:521eb9b7f036c9b6187f0b47318ab0d7ca14bd87f776240b90b21c1f4f149320"}, - {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85210c4d99a0114f5a9481b44560d7d1e35e32cc5634c656bc48e590b669b145"}, - {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d716e2e30c6f140d7560ef1538953a5cd1a87264c737643d481f2779fc247fe1"}, - {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f66d89ba397d92f840f8654756196d93804278457b5fbede59598a1f9f90b228"}, - {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:669e193c1c576a58f132e3158f9dfa9662969edb1a250c54d8fa52590045f046"}, - {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdbe7629b996647b99c01b37f11170a57ae675375b14b8c13b8518b8320ced5"}, - {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d262606bf386a5ba0b0af3b97f37c83d7011439e3dc1a9298f21efb292e42f1a"}, - {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cabb9bcb7e0d97f74df8646f34fc76fbf793b7f6dc2438517d7a9e50eee4f14d"}, - {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:d2d63f1215638d28221f664596b1ccb3944f6e25dd18cd3b86b0a4c408d5ebb9"}, - {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bca101c00bff0adb45a833f8451b9105d9df18accb8743b08107d7ada14bd7da"}, - {file = "pydantic_core-2.27.2-cp38-cp38-win32.whl", hash = "sha256:f6f8e111843bbb0dee4cb6594cdc73e79b3329b526037ec242a3e49012495b3b"}, - {file = "pydantic_core-2.27.2-cp38-cp38-win_amd64.whl", hash = "sha256:fd1aea04935a508f62e0d0ef1f5ae968774a32afc306fb8545e06f5ff5cdf3ad"}, - {file = "pydantic_core-2.27.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c10eb4f1659290b523af58fa7cffb452a61ad6ae5613404519aee4bfbf1df993"}, - {file = "pydantic_core-2.27.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef592d4bad47296fb11f96cd7dc898b92e795032b4894dfb4076cfccd43a9308"}, - {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c61709a844acc6bf0b7dce7daae75195a10aac96a596ea1b776996414791ede4"}, - {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c5f762659e47fdb7b16956c71598292f60a03aa92f8b6351504359dbdba6cf"}, - {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c9775e339e42e79ec99c441d9730fccf07414af63eac2f0e48e08fd38a64d76"}, - {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57762139821c31847cfb2df63c12f725788bd9f04bc2fb392790959b8f70f118"}, - {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d1e85068e818c73e048fe28cfc769040bb1f475524f4745a5dc621f75ac7630"}, - {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:097830ed52fd9e427942ff3b9bc17fab52913b2f50f2880dc4a5611446606a54"}, - {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044a50963a614ecfae59bb1eaf7ea7efc4bc62f49ed594e18fa1e5d953c40e9f"}, - {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:4e0b4220ba5b40d727c7f879eac379b822eee5d8fff418e9d3381ee45b3b0362"}, - {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e4f4bb20d75e9325cc9696c6802657b58bc1dbbe3022f32cc2b2b632c3fbb96"}, - {file = "pydantic_core-2.27.2-cp39-cp39-win32.whl", hash = "sha256:cca63613e90d001b9f2f9a9ceb276c308bfa2a43fafb75c8031c4f66039e8c6e"}, - {file = "pydantic_core-2.27.2-cp39-cp39-win_amd64.whl", hash = "sha256:77d1bca19b0f7021b3a982e6f903dcd5b2b06076def36a652e3907f596e29f67"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9"}, - {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c33939a82924da9ed65dab5a65d427205a73181d8098e79b6b426bdf8ad4e656"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:00bad2484fa6bda1e216e7345a798bd37c68fb2d97558edd584942aa41b7d278"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c817e2b40aba42bac6f457498dacabc568c3b7a986fc9ba7c8d9d260b71485fb"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:251136cdad0cb722e93732cb45ca5299fb56e1344a833640bf93b2803f8d1bfd"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2088237af596f0a524d3afc39ab3b036e8adb054ee57cbb1dcf8e09da5b29cc"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d4041c0b966a84b4ae7a09832eb691a35aec90910cd2dbe7a208de59be77965b"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:8083d4e875ebe0b864ffef72a4304827015cff328a1be6e22cc850753bfb122b"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f141ee28a0ad2123b6611b6ceff018039df17f32ada8b534e6aa039545a3efb2"}, - {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7d0c8399fcc1848491f00e0314bd59fb34a9c008761bcb422a057670c3f65e35"}, - {file = "pydantic_core-2.27.2.tar.gz", hash = "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39"}, + {file = "pydantic_core-2.33.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2b3d326aaef0c0399d9afffeb6367d5e26ddc24d351dbc9c636840ac355dc5d8"}, + {file = "pydantic_core-2.33.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e5b2671f05ba48b94cb90ce55d8bdcaaedb8ba00cc5359f6810fc918713983d"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0069c9acc3f3981b9ff4cdfaf088e98d83440a4c7ea1bc07460af3d4dc22e72d"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d53b22f2032c42eaaf025f7c40c2e3b94568ae077a606f006d206a463bc69572"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0405262705a123b7ce9f0b92f123334d67b70fd1f20a9372b907ce1080c7ba02"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b25d91e288e2c4e0662b8038a28c6a07eaac3e196cfc4ff69de4ea3db992a1b"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdfe4b3789761f3bcb4b1ddf33355a71079858958e3a552f16d5af19768fef2"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:efec8db3266b76ef9607c2c4c419bdb06bf335ae433b80816089ea7585816f6a"}, + {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:031c57d67ca86902726e0fae2214ce6770bbe2f710dc33063187a68744a5ecac"}, + {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:f8de619080e944347f5f20de29a975c2d815d9ddd8be9b9b7268e2e3ef68605a"}, + {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73662edf539e72a9440129f231ed3757faab89630d291b784ca99237fb94db2b"}, + {file = "pydantic_core-2.33.2-cp310-cp310-win32.whl", hash = "sha256:0a39979dcbb70998b0e505fb1556a1d550a0781463ce84ebf915ba293ccb7e22"}, + {file = "pydantic_core-2.33.2-cp310-cp310-win_amd64.whl", hash = "sha256:b0379a2b24882fef529ec3b4987cb5d003b9cda32256024e6fe1586ac45fc640"}, + {file = "pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7"}, + {file = "pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e"}, + {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d"}, + {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30"}, + {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf"}, + {file = "pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51"}, + {file = "pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab"}, + {file = "pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65"}, + {file = "pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc"}, + {file = "pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b"}, + {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1"}, + {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6"}, + {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea"}, + {file = "pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290"}, + {file = "pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2"}, + {file = "pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab"}, + {file = "pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f"}, + {file = "pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56"}, + {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5"}, + {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e"}, + {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162"}, + {file = "pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849"}, + {file = "pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9"}, + {file = "pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9"}, + {file = "pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac"}, + {file = "pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5"}, + {file = "pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9"}, + {file = "pydantic_core-2.33.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a2b911a5b90e0374d03813674bf0a5fbbb7741570dcd4b4e85a2e48d17def29d"}, + {file = "pydantic_core-2.33.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6fa6dfc3e4d1f734a34710f391ae822e0a8eb8559a85c6979e14e65ee6ba2954"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c54c939ee22dc8e2d545da79fc5381f1c020d6d3141d3bd747eab59164dc89fb"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53a57d2ed685940a504248187d5685e49eb5eef0f696853647bf37c418c538f7"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09fb9dd6571aacd023fe6aaca316bd01cf60ab27240d7eb39ebd66a3a15293b4"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0e6116757f7959a712db11f3e9c0a99ade00a5bbedae83cb801985aa154f071b"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d55ab81c57b8ff8548c3e4947f119551253f4e3787a7bbc0b6b3ca47498a9d3"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c20c462aa4434b33a2661701b861604913f912254e441ab8d78d30485736115a"}, + {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:44857c3227d3fb5e753d5fe4a3420d6376fa594b07b621e220cd93703fe21782"}, + {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:eb9b459ca4df0e5c87deb59d37377461a538852765293f9e6ee834f0435a93b9"}, + {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9fcd347d2cc5c23b06de6d3b7b8275be558a0c90549495c699e379a80bf8379e"}, + {file = "pydantic_core-2.33.2-cp39-cp39-win32.whl", hash = "sha256:83aa99b1285bc8f038941ddf598501a86f1536789740991d7d8756e34f1e74d9"}, + {file = "pydantic_core-2.33.2-cp39-cp39-win_amd64.whl", hash = "sha256:f481959862f57f29601ccced557cc2e817bce7533ab8e01a797a48b49c9692b3"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5c4aa4e82353f65e548c476b37e64189783aa5384903bfea4f41580f255fddfa"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d946c8bf0d5c24bf4fe333af284c59a19358aa3ec18cb3dc4370080da1e8ad29"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87b31b6846e361ef83fedb187bb5b4372d0da3f7e28d85415efa92d6125d6e6d"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa9d91b338f2df0508606f7009fde642391425189bba6d8c653afd80fd6bb64e"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2058a32994f1fde4ca0480ab9d1e75a0e8c87c22b53a3ae66554f9af78f2fe8c"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:0e03262ab796d986f978f79c943fc5f620381be7287148b8010b4097f79a39ec"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1a8695a8d00c73e50bff9dfda4d540b7dee29ff9b8053e38380426a85ef10052"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:fa754d1850735a0b0e03bcffd9d4b4343eb417e47196e4485d9cca326073a42c"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a11c8d26a50bfab49002947d3d237abe4d9e4b5bdc8846a63537b6488e197808"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:87acbfcf8e90ca885206e98359d7dca4bcbb35abdc0ff66672a293e1d7a19101"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:7f92c15cd1e97d4b12acd1cc9004fa092578acfa57b67ad5e43a197175d01a64"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3f26877a748dc4251cfcfda9dfb5f13fcb034f5308388066bcfe9031b63ae7d"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac89aea9af8cd672fa7b510e7b8c33b0bba9a43186680550ccf23020f32d535"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:970919794d126ba8645f3837ab6046fb4e72bbc057b3709144066204c19a455d"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:3eb3fe62804e8f859c49ed20a8451342de53ed764150cb14ca71357c765dc2a6"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:3abcd9392a36025e3bd55f9bd38d908bd17962cc49bc6da8e7e96285336e2bca"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3a1c81334778f9e3af2f8aeb7a960736e5cab1dfebfb26aabca09afd2906c039"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2807668ba86cb38c6817ad9bc66215ab8584d1d304030ce4f0887336f28a5e27"}, + {file = "pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc"}, ] [package.dependencies] @@ -489,33 +468,6 @@ typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\"" spelling = ["pyenchant (>=3.2,<4.0)"] testutils = ["gitpython (>3)"] -[[package]] -name = "python-dateutil" -version = "2.9.0.post0" -description = "Extensions to the standard Python datetime module" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -groups = ["main"] -files = [ - {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, - {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, -] - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "six" -version = "1.17.0" -description = "Python 2 and 3 compatibility utilities" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -groups = ["main"] -files = [ - {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, - {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, -] - [[package]] name = "sniffio" version = "1.3.1" @@ -583,18 +535,6 @@ files = [ {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, ] -[[package]] -name = "types-python-dateutil" -version = "2.9.0.20241206" -description = "Typing stubs for python-dateutil" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "types_python_dateutil-2.9.0.20241206-py3-none-any.whl", hash = "sha256:e248a4bc70a486d3e3ec84d0dc30eec3a5f979d6e7ee4123ae043eedbb987f53"}, - {file = "types_python_dateutil-2.9.0.20241206.tar.gz", hash = "sha256:18f493414c26ffba692a72369fea7a154c502646301ebfe3d56a04b3767284cb"}, -] - [[package]] name = "typing-extensions" version = "4.12.2" @@ -624,5 +564,5 @@ typing-extensions = ">=4.12.0" [metadata] lock-version = "2.1" -python-versions = ">=3.9" -content-hash = "bd3fcf9b4a9dcf9fbf298fff88144bc9d363a3113c482a4f658faeb796706c7c" +python-versions = ">=3.9.2" +content-hash = "8cd9cfb7ba8b124df79ba136fb5ce4a42ae8a587541554066da7ecad967c07d8" diff --git a/pyproject.toml b/pyproject.toml index 4a82133f..27e5bcd4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,17 +1,14 @@ [project] name = "novu-py" -version = "0.4.3" +version = "1.0.0" description = "Python Client SDK Generated by Speakeasy." authors = [{ name = "Speakeasy" },] readme = "README-PYPI.md" -requires-python = ">=3.9" +requires-python = ">=3.9.2" dependencies = [ - "eval-type-backport >=0.2.0", "httpx >=0.28.1", "jsonpath-python >=1.0.6", - "pydantic >=2.10.3", - "python-dateutil >=2.8.2", - "typing-inspection >=0.4.0", + "pydantic >=2.11.2", ] [tool.poetry] @@ -28,9 +25,8 @@ include = ["py.typed", "src/novu_py/py.typed"] in-project = true [tool.poetry.group.dev.dependencies] -mypy = "==1.14.1" +mypy = "==1.15.0" pylint = "==3.2.3" -types-python-dateutil = "^2.9.0.20240316" [build-system] requires = ["poetry-core"] diff --git a/src/novu_py/_version.py b/src/novu_py/_version.py index 8d43e98e..3beb1034 100644 --- a/src/novu_py/_version.py +++ b/src/novu_py/_version.py @@ -3,10 +3,10 @@ import importlib.metadata __title__: str = "novu-py" -__version__: str = "0.4.3" -__openapi_doc_version__: str = "1.0" -__gen_version__: str = "2.568.2" -__user_agent__: str = "speakeasy-sdk/python 0.4.3 2.568.2 1.0 novu-py" +__version__: str = "1.0.0" +__openapi_doc_version__: str = "2.1.13" +__gen_version__: str = "2.599.0" +__user_agent__: str = "speakeasy-sdk/python 1.0.0 2.599.0 2.1.13 novu-py" try: if __package__ is not None: diff --git a/src/novu_py/httpclient.py b/src/novu_py/httpclient.py index 1e426352..ad528d8d 100644 --- a/src/novu_py/httpclient.py +++ b/src/novu_py/httpclient.py @@ -2,7 +2,6 @@ # pyright: reportReturnType = false import asyncio -from concurrent.futures import ThreadPoolExecutor from typing_extensions import Protocol, runtime_checkable import httpx from typing import Any, Optional, Union @@ -116,21 +115,42 @@ def close_clients( pass if async_client is not None and not async_client_supplied: - is_async = False + # First, try the simplest approach - use asyncio.run() + # This works when we're not in an async context try: - asyncio.get_running_loop() - is_async = True - except RuntimeError: - pass - - try: - # If this function is called in an async loop then start another - # loop in a separate thread to close the async http client. - if is_async: - with ThreadPoolExecutor(max_workers=1) as executor: - future = executor.submit(asyncio.run, async_client.aclose()) - future.result() + asyncio.run(async_client.aclose()) + except RuntimeError as e: + # If we get "RuntimeError: This event loop is already running", + # it means we're in an async context + if "already running" in str(e): + try: + # We're in an async context, so get the running loop + loop = asyncio.get_running_loop() + # Create a task but don't wait for it + loop.create_task(async_client.aclose()) + except Exception: + # If we can't get the loop or create a task, just ignore + # The GC will eventually clean up the resources + pass + # If we get "RuntimeError: There is no current event loop in thread", + # we're not in an async context, but asyncio.run() failed for some reason + # In this case, we can try to create a new event loop explicitly + elif "no current event loop" in str(e): + try: + # Create a new event loop and run the coroutine + loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) + try: + loop.run_until_complete(async_client.aclose()) + finally: + loop.close() + asyncio.set_event_loop(None) + except Exception: + # If this also fails, just ignore + pass + # For any other RuntimeError, just ignore else: - asyncio.run(async_client.aclose()) + pass except Exception: + # For any other exception, just ignore pass diff --git a/src/novu_py/messages.py b/src/novu_py/messages.py index 59ce152f..b55a0450 100644 --- a/src/novu_py/messages.py +++ b/src/novu_py/messages.py @@ -112,9 +112,7 @@ def retrieve( response_data: Any = None if utils.match_response(http_res, "200", "application/json"): return models.MessagesControllerGetMessagesResponse( - result=utils.unmarshal_json( - http_res.text, models.ActivitiesResponseDto - ), + result=utils.unmarshal_json(http_res.text, models.MessagesResponseDto), headers=utils.get_response_headers(http_res.headers), ) if utils.match_response(http_res, "414", "application/json"): @@ -264,9 +262,7 @@ async def retrieve_async( response_data: Any = None if utils.match_response(http_res, "200", "application/json"): return models.MessagesControllerGetMessagesResponse( - result=utils.unmarshal_json( - http_res.text, models.ActivitiesResponseDto - ), + result=utils.unmarshal_json(http_res.text, models.MessagesResponseDto), headers=utils.get_response_headers(http_res.headers), ) if utils.match_response(http_res, "414", "application/json"): diff --git a/src/novu_py/models/__init__.py b/src/novu_py/models/__init__.py index 563bab4f..e9035ab6 100644 --- a/src/novu_py/models/__init__.py +++ b/src/novu_py/models/__init__.py @@ -12,10 +12,10 @@ ) from .activitynotificationjobresponsedto import ( ActivityNotificationJobResponseDto, + ActivityNotificationJobResponseDtoPayload, + ActivityNotificationJobResponseDtoPayloadTypedDict, ActivityNotificationJobResponseDtoType, ActivityNotificationJobResponseDtoTypedDict, - Payload, - PayloadTypedDict, ) from .activitynotificationresponsedto import ( ActivityNotificationResponseDto, @@ -29,6 +29,8 @@ ) from .activitynotificationstepresponsedto import ( ActivityNotificationStepResponseDto, + ActivityNotificationStepResponseDtoMetadata, + ActivityNotificationStepResponseDtoMetadataTypedDict, ActivityNotificationStepResponseDtoReplyCallback, ActivityNotificationStepResponseDtoReplyCallbackTypedDict, ActivityNotificationStepResponseDtoTypedDict, @@ -36,8 +38,6 @@ ControlVariablesTypedDict, Issues, IssuesTypedDict, - Metadata, - MetadataTypedDict, ) from .activitynotificationsubscriberresponsedto import ( ActivityNotificationSubscriberResponseDto, @@ -51,17 +51,10 @@ ActivityStatsResponseDto, ActivityStatsResponseDtoTypedDict, ) +from .activitytopicdto import ActivityTopicDto, ActivityTopicDtoTypedDict from .actorfeeditemdto import ActorFeedItemDto, ActorFeedItemDtoTypedDict from .actortypeenum import ActorTypeEnum -from .addsubscribersrequestdto import ( - AddSubscribersRequestDto, - AddSubscribersRequestDtoTypedDict, -) from .apierror import APIError -from .assignsubscribertotopicdto import ( - AssignSubscriberToTopicDto, - AssignSubscriberToTopicDtoTypedDict, -) from .builderfieldtypeenum import BuilderFieldTypeEnum from .bulkcreatesubscriberresponsedto import ( BulkCreateSubscriberResponseDto, @@ -76,12 +69,19 @@ from .channelcredentials import ChannelCredentials, ChannelCredentialsTypedDict from .channelcredentialsdto import ChannelCredentialsDto, ChannelCredentialsDtoTypedDict from .channelctatypeenum import ChannelCTATypeEnum -from .channelsettingsdto import ( - ChannelSettingsDto, - ChannelSettingsDtoTypedDict, - ProviderID, -) +from .channelsettingsdto import ChannelSettingsDto, ChannelSettingsDtoTypedDict from .channeltypeenum import ChannelTypeEnum +from .chatorpushproviderenum import ChatOrPushProviderEnum +from .constraintvalidation import ( + ConstraintValidation, + ConstraintValidationTypedDict, + Five, + FiveTypedDict, + Four, + FourTypedDict, + Value, + ValueTypedDict, +) from .createdsubscriberdto import CreatedSubscriberDto, CreatedSubscriberDtoTypedDict from .createintegrationrequestdto import ( CreateIntegrationRequestDto, @@ -92,10 +92,17 @@ CreateSubscriberRequestDto, CreateSubscriberRequestDtoTypedDict, ) -from .createtopicrequestdto import CreateTopicRequestDto, CreateTopicRequestDtoTypedDict -from .createtopicresponsedto import ( - CreateTopicResponseDto, - CreateTopicResponseDtoTypedDict, +from .createtopicsubscriptionsrequestdto import ( + CreateTopicSubscriptionsRequestDto, + CreateTopicSubscriptionsRequestDtoTypedDict, +) +from .createtopicsubscriptionsresponsedto import ( + CreateTopicSubscriptionsResponseDto, + CreateTopicSubscriptionsResponseDtoTypedDict, +) +from .createupdatetopicrequestdto import ( + CreateUpdateTopicRequestDto, + CreateUpdateTopicRequestDtoTypedDict, ) from .credentialsdto import ( CredentialsDto, @@ -119,18 +126,34 @@ DeleteMessageResponseDtoStatus, DeleteMessageResponseDtoTypedDict, ) -from .digestmetadatadto import DigestMetadataDto, DigestMetadataDtoTypedDict, Unit +from .deletetopicresponsedto import ( + DeleteTopicResponseDto, + DeleteTopicResponseDtoTypedDict, +) +from .deletetopicsubscriptionsrequestdto import ( + DeleteTopicSubscriptionsRequestDto, + DeleteTopicSubscriptionsRequestDtoTypedDict, +) +from .deletetopicsubscriptionsresponsedto import ( + DeleteTopicSubscriptionsResponseDto, + DeleteTopicSubscriptionsResponseDtoTypedDict, +) +from .digestmetadatadto import ( + DigestMetadataDto, + DigestMetadataDtoTypedDict, + DigestMetadataDtoUnit, +) from .digestregularmetadata import ( BackoffUnit, DigestRegularMetadata, - DigestRegularMetadataType, DigestRegularMetadataTypedDict, - DigestRegularMetadataUnit, + Type, + Unit, ) from .digesttimedconfigdto import ( DigestTimedConfigDto, DigestTimedConfigDtoTypedDict, - WeekDays, + DigestTimedConfigDtoWeekDays, ) from .digesttimedmetadata import ( DigestTimedMetadata, @@ -143,7 +166,14 @@ from .emailblock import EmailBlock, EmailBlockTypedDict from .emailblockstyles import EmailBlockStyles, EmailBlockStylesTypedDict from .emailblocktypeenum import EmailBlockTypeEnum -from .errordto import ErrorDto, ErrorDtoData +from .errordto import ( + ErrorDto, + ErrorDtoData, + Message, + Message4, + Message4TypedDict, + Message5, +) from .eventscontroller_broadcasteventtoallop import ( EventsControllerBroadcastEventToAllRequest, EventsControllerBroadcastEventToAllRequestTypedDict, @@ -170,7 +200,6 @@ ) from .executiondetailssourceenum import ExecutionDetailsSourceEnum from .executiondetailsstatusenum import ExecutionDetailsStatusEnum -from .failedassignmentsdto import FailedAssignmentsDto, FailedAssignmentsDtoTypedDict from .failedoperationdto import FailedOperationDto, FailedOperationDtoTypedDict from .feedresponsedto import FeedResponseDto, FeedResponseDtoTypedDict from .fieldfilterpartdto import ( @@ -179,19 +208,13 @@ On, Operator, ) -from .filtertopicsresponsedto import ( - FilterTopicsResponseDto, - FilterTopicsResponseDtoTypedDict, -) from .getsubscriberpreferencesdto import ( GetSubscriberPreferencesDto, GetSubscriberPreferencesDtoTypedDict, ) -from .gettopicresponsedto import GetTopicResponseDto, GetTopicResponseDtoTypedDict -from .globalpreferencedto import GlobalPreferenceDto, GlobalPreferenceDtoTypedDict from .integrationresponsedto import ( + Channel, IntegrationResponseDto, - IntegrationResponseDtoChannel, IntegrationResponseDtoTypedDict, ) from .integrationscontroller_createintegrationop import ( @@ -240,6 +263,11 @@ ListSubscribersResponseDto, ListSubscribersResponseDtoTypedDict, ) +from .listtopicsresponsedto import ListTopicsResponseDto, ListTopicsResponseDtoTypedDict +from .listtopicsubscriptionsresponsedto import ( + ListTopicSubscriptionsResponseDto, + ListTopicSubscriptionsResponseDtoTypedDict, +) from .markallmessageasrequestdto import ( FeedIdentifier, FeedIdentifierTypedDict, @@ -257,9 +285,9 @@ from .messageaction import MessageAction, MessageActionTypedDict from .messageactionresult import ( MessageActionResult, - MessageActionResultPayload, - MessageActionResultPayloadTypedDict, MessageActionResultTypedDict, + Payload, + PayloadTypedDict, ) from .messageactionstatusenum import MessageActionStatusEnum from .messagebutton import MessageButton, MessageButtonTypedDict @@ -301,9 +329,11 @@ MessagesControllerGetMessagesResponse, MessagesControllerGetMessagesResponseTypedDict, ) +from .messagesresponsedto import MessagesResponseDto, MessagesResponseDtoTypedDict from .messagestatusenum import MessageStatusEnum from .messagetemplate import MessageTemplate, MessageTemplateTypedDict from .messagetemplatedto import MessageTemplateDto, MessageTemplateDtoTypedDict +from .metadto import MetaDto, MetaDtoTypedDict from .monthlytypeenum import MonthlyTypeEnum from .notificationfeeditemdto import ( NotificationFeedItemDto, @@ -342,9 +372,9 @@ NotificationStepDataTypedDict, ) from .notificationstepdto import ( + Metadata, + MetadataTypedDict, NotificationStepDto, - NotificationStepDtoMetadata, - NotificationStepDtoMetadataTypedDict, NotificationStepDtoTypedDict, ) from .notificationtrigger import ( @@ -354,8 +384,8 @@ ) from .notificationtriggerdto import ( NotificationTriggerDto, + NotificationTriggerDtoType, NotificationTriggerDtoTypedDict, - Type, ) from .notificationtriggervariable import ( NotificationTriggerVariable, @@ -363,7 +393,6 @@ ) from .ordinalenum import OrdinalEnum from .ordinalvalueenum import OrdinalValueEnum -from .overrides import Channel, Overrides, OverridesTypedDict, Source from .patchpreferencechannelsdto import ( PatchPreferenceChannelsDto, PatchPreferenceChannelsDtoTypedDict, @@ -378,40 +407,49 @@ PatchSubscriberRequestDto, PatchSubscriberRequestDtoTypedDict, ) -from .preferencechannels import PreferenceChannels, PreferenceChannelsTypedDict +from .preferenceoverridesourceenum import PreferenceOverrideSourceEnum from .providersidenum import ProvidersIDEnum from .removesubscriberresponsedto import ( RemoveSubscriberResponseDto, RemoveSubscriberResponseDtoTypedDict, ) -from .removesubscribersrequestdto import ( - RemoveSubscribersRequestDto, - RemoveSubscribersRequestDtoTypedDict, -) -from .renametopicrequestdto import RenameTopicRequestDto, RenameTopicRequestDtoTypedDict -from .renametopicresponsedto import ( - RenameTopicResponseDto, - RenameTopicResponseDtoTypedDict, -) from .replycallback import ReplyCallback, ReplyCallbackTypedDict from .security import Security, SecurityTypedDict -from .stepfilterdto import StepFilterDto, StepFilterDtoTypedDict, Value +from .stepfilterdto import StepFilterDto, StepFilterDtoTypedDict, StepFilterDtoValue +from .stepsoverrides import StepsOverrides, StepsOverridesTypedDict from .steptypeenum import StepTypeEnum from .subscriberchanneldto import ( + ProviderID, SubscriberChannelDto, - SubscriberChannelDtoProviderID, SubscriberChannelDtoTypedDict, ) +from .subscriberdto import SubscriberDto, SubscriberDtoTypedDict from .subscriberfeedresponsedto import ( SubscriberFeedResponseDto, SubscriberFeedResponseDtoTypedDict, ) +from .subscriberglobalpreferencedto import ( + SubscriberGlobalPreferenceDto, + SubscriberGlobalPreferenceDtoTypedDict, +) from .subscriberpayloaddto import ( SubscriberPayloadDto, SubscriberPayloadDtoData, SubscriberPayloadDtoDataTypedDict, SubscriberPayloadDtoTypedDict, ) +from .subscriberpreferencechannels import ( + SubscriberPreferenceChannels, + SubscriberPreferenceChannelsTypedDict, +) +from .subscriberpreferenceoverridedto import ( + SubscriberPreferenceOverrideDto, + SubscriberPreferenceOverrideDtoTypedDict, +) +from .subscriberpreferencesworkflowinfodto import ( + SubscriberPreferencesWorkflowInfoDto, + SubscriberPreferencesWorkflowInfoDtoTypedDict, +) from .subscriberresponsedto import SubscriberResponseDto, SubscriberResponseDtoTypedDict from .subscriberscontroller_createsubscriberop import ( SubscribersControllerCreateSubscriberRequest, @@ -431,6 +469,13 @@ SubscribersControllerGetSubscriberPreferencesResponse, SubscribersControllerGetSubscriberPreferencesResponseTypedDict, ) +from .subscriberscontroller_listsubscribertopicsop import ( + QueryParamOrderDirection, + SubscribersControllerListSubscriberTopicsRequest, + SubscribersControllerListSubscriberTopicsRequestTypedDict, + SubscribersControllerListSubscriberTopicsResponse, + SubscribersControllerListSubscriberTopicsResponseTypedDict, +) from .subscriberscontroller_patchsubscriberop import ( SubscribersControllerPatchSubscriberRequest, SubscribersControllerPatchSubscriberRequestTypedDict, @@ -544,6 +589,21 @@ SubscribersV1ControllerUpdateSubscriberResponse, SubscribersV1ControllerUpdateSubscriberResponseTypedDict, ) +from .subscriberworkflowpreferencedto import ( + SubscriberWorkflowPreferenceDto, + SubscriberWorkflowPreferenceDtoTypedDict, +) +from .subscriptiondto import ( + Subscriber, + SubscriberTypedDict, + SubscriptionDto, + SubscriptionDtoTypedDict, +) +from .subscriptionerrordto import SubscriptionErrorDto, SubscriptionErrorDtoTypedDict +from .subscriptionsdeleteerrordto import ( + SubscriptionsDeleteErrorDto, + SubscriptionsDeleteErrorDtoTypedDict, +) from .tenantpayloaddto import ( TenantPayloadDto, TenantPayloadDtoData, @@ -557,21 +617,16 @@ OrdinalValue, TimedConfig, TimedConfigTypedDict, - TimedConfigWeekDays, + WeekDays, ) from .topicdto import TopicDto, TopicDtoTypedDict from .topicpayloaddto import TopicPayloadDto, TopicPayloadDtoTypedDict -from .topicscontroller_assignop import ( - TopicsControllerAssignRequest, - TopicsControllerAssignRequestTypedDict, - TopicsControllerAssignResponse, - TopicsControllerAssignResponseTypedDict, -) -from .topicscontroller_createtopicop import ( - TopicsControllerCreateTopicRequest, - TopicsControllerCreateTopicRequestTypedDict, - TopicsControllerCreateTopicResponse, - TopicsControllerCreateTopicResponseTypedDict, +from .topicresponsedto import TopicResponseDto, TopicResponseDtoTypedDict +from .topicscontroller_createtopicsubscriptionsop import ( + TopicsControllerCreateTopicSubscriptionsRequest, + TopicsControllerCreateTopicSubscriptionsRequestTypedDict, + TopicsControllerCreateTopicSubscriptionsResponse, + TopicsControllerCreateTopicSubscriptionsResponseTypedDict, ) from .topicscontroller_deletetopicop import ( TopicsControllerDeleteTopicRequest, @@ -579,42 +634,62 @@ TopicsControllerDeleteTopicResponse, TopicsControllerDeleteTopicResponseTypedDict, ) +from .topicscontroller_deletetopicsubscriptionsop import ( + TopicsControllerDeleteTopicSubscriptionsRequest, + TopicsControllerDeleteTopicSubscriptionsRequestTypedDict, + TopicsControllerDeleteTopicSubscriptionsResponse, + TopicsControllerDeleteTopicSubscriptionsResponseTypedDict, +) from .topicscontroller_gettopicop import ( TopicsControllerGetTopicRequest, TopicsControllerGetTopicRequestTypedDict, TopicsControllerGetTopicResponse, TopicsControllerGetTopicResponseTypedDict, ) -from .topicscontroller_gettopicsubscriberop import ( - TopicsControllerGetTopicSubscriberRequest, - TopicsControllerGetTopicSubscriberRequestTypedDict, - TopicsControllerGetTopicSubscriberResponse, - TopicsControllerGetTopicSubscriberResponseTypedDict, -) from .topicscontroller_listtopicsop import ( + TopicsControllerListTopicsQueryParamOrderDirection, TopicsControllerListTopicsRequest, TopicsControllerListTopicsRequestTypedDict, TopicsControllerListTopicsResponse, TopicsControllerListTopicsResponseTypedDict, ) -from .topicscontroller_removesubscribersop import ( - TopicsControllerRemoveSubscribersRequest, - TopicsControllerRemoveSubscribersRequestTypedDict, - TopicsControllerRemoveSubscribersResponse, - TopicsControllerRemoveSubscribersResponseTypedDict, -) -from .topicscontroller_renametopicop import ( - TopicsControllerRenameTopicRequest, - TopicsControllerRenameTopicRequestTypedDict, - TopicsControllerRenameTopicResponse, - TopicsControllerRenameTopicResponseTypedDict, +from .topicscontroller_listtopicsubscriptionsop import ( + TopicsControllerListTopicSubscriptionsQueryParamOrderDirection, + TopicsControllerListTopicSubscriptionsRequest, + TopicsControllerListTopicSubscriptionsRequestTypedDict, + TopicsControllerListTopicSubscriptionsResponse, + TopicsControllerListTopicSubscriptionsResponseTypedDict, +) +from .topicscontroller_updatetopicop import ( + TopicsControllerUpdateTopicRequest, + TopicsControllerUpdateTopicRequestTypedDict, + TopicsControllerUpdateTopicResponse, + TopicsControllerUpdateTopicResponseTypedDict, +) +from .topicscontroller_upserttopicop import ( + TopicsControllerUpsertTopicRequest, + TopicsControllerUpsertTopicRequestTypedDict, + TopicsControllerUpsertTopicResponse, + TopicsControllerUpsertTopicResponseTypedDict, ) from .topicsubscriberdto import TopicSubscriberDto, TopicSubscriberDtoTypedDict +from .topicsubscriptionresponsedto import ( + TopicSubscriptionResponseDto, + TopicSubscriptionResponseDtoTypedDict, +) +from .topicsv1controller_gettopicsubscriberop import ( + TopicsV1ControllerGetTopicSubscriberRequest, + TopicsV1ControllerGetTopicSubscriberRequestTypedDict, + TopicsV1ControllerGetTopicSubscriberResponse, + TopicsV1ControllerGetTopicSubscriberResponseTypedDict, +) from .triggereventrequestdto import ( Actor, ActorTypedDict, One, OneTypedDict, + Overrides, + OverridesTypedDict, Tenant, TenantTypedDict, To, @@ -646,7 +721,6 @@ ) from .updatesubscriberchannelrequestdto import ( UpdateSubscriberChannelRequestDto, - UpdateSubscriberChannelRequestDtoProviderID, UpdateSubscriberChannelRequestDtoTypedDict, ) from .updatesubscriberonlineflagrequestdto import ( @@ -657,16 +731,16 @@ UpdateSubscriberRequestDto, UpdateSubscriberRequestDtoTypedDict, ) +from .updatetopicrequestdto import UpdateTopicRequestDto, UpdateTopicRequestDtoTypedDict from .validationerrordto import ( - Errors, - ErrorsTypedDict, + MessageValidationErrorDto4, + MessageValidationErrorDto4TypedDict, + MessageValidationErrorDto5, ValidationErrorDto, ValidationErrorDtoData, - ValidationErrorDtoValue, + ValidationErrorDtoMessage, ) -from .workflowinfodto import WorkflowInfoDto, WorkflowInfoDtoTypedDict from .workfloworiginenum import WorkflowOriginEnum -from .workflowpreferencedto import WorkflowPreferenceDto, WorkflowPreferenceDtoTypedDict from .workflowresponse import ( WorkflowIntegrationStatus, WorkflowIntegrationStatusTypedDict, @@ -686,6 +760,8 @@ "ActivityNotificationExecutionDetailResponseDto", "ActivityNotificationExecutionDetailResponseDtoTypedDict", "ActivityNotificationJobResponseDto", + "ActivityNotificationJobResponseDtoPayload", + "ActivityNotificationJobResponseDtoPayloadTypedDict", "ActivityNotificationJobResponseDtoType", "ActivityNotificationJobResponseDtoTypedDict", "ActivityNotificationResponseDto", @@ -695,6 +771,8 @@ "ActivityNotificationResponseDtoToTypedDict", "ActivityNotificationResponseDtoTypedDict", "ActivityNotificationStepResponseDto", + "ActivityNotificationStepResponseDtoMetadata", + "ActivityNotificationStepResponseDtoMetadataTypedDict", "ActivityNotificationStepResponseDtoReplyCallback", "ActivityNotificationStepResponseDtoReplyCallbackTypedDict", "ActivityNotificationStepResponseDtoTypedDict", @@ -704,15 +782,13 @@ "ActivityNotificationTemplateResponseDtoTypedDict", "ActivityStatsResponseDto", "ActivityStatsResponseDtoTypedDict", + "ActivityTopicDto", + "ActivityTopicDtoTypedDict", "Actor", "ActorFeedItemDto", "ActorFeedItemDtoTypedDict", "ActorTypeEnum", "ActorTypedDict", - "AddSubscribersRequestDto", - "AddSubscribersRequestDtoTypedDict", - "AssignSubscriberToTopicDto", - "AssignSubscriberToTopicDtoTypedDict", "BackoffUnit", "BuilderFieldTypeEnum", "BulkCreateSubscriberResponseDto", @@ -732,6 +808,9 @@ "ChannelSettingsDtoTypedDict", "ChannelTypeEnum", "Channels", + "ChatOrPushProviderEnum", + "ConstraintValidation", + "ConstraintValidationTypedDict", "Content", "ContentTypedDict", "ControlVariables", @@ -743,10 +822,12 @@ "CreateIntegrationRequestDtoTypedDict", "CreateSubscriberRequestDto", "CreateSubscriberRequestDtoTypedDict", - "CreateTopicRequestDto", - "CreateTopicRequestDtoTypedDict", - "CreateTopicResponseDto", - "CreateTopicResponseDtoTypedDict", + "CreateTopicSubscriptionsRequestDto", + "CreateTopicSubscriptionsRequestDtoTypedDict", + "CreateTopicSubscriptionsResponseDto", + "CreateTopicSubscriptionsResponseDtoTypedDict", + "CreateUpdateTopicRequestDto", + "CreateUpdateTopicRequestDtoTypedDict", "CreatedSubscriberDto", "CreatedSubscriberDtoTypedDict", "CredentialsDto", @@ -763,14 +844,20 @@ "DeleteMessageResponseDto", "DeleteMessageResponseDtoStatus", "DeleteMessageResponseDtoTypedDict", + "DeleteTopicResponseDto", + "DeleteTopicResponseDtoTypedDict", + "DeleteTopicSubscriptionsRequestDto", + "DeleteTopicSubscriptionsRequestDtoTypedDict", + "DeleteTopicSubscriptionsResponseDto", + "DeleteTopicSubscriptionsResponseDtoTypedDict", "DigestMetadataDto", "DigestMetadataDtoTypedDict", + "DigestMetadataDtoUnit", "DigestRegularMetadata", - "DigestRegularMetadataType", "DigestRegularMetadataTypedDict", - "DigestRegularMetadataUnit", "DigestTimedConfigDto", "DigestTimedConfigDtoTypedDict", + "DigestTimedConfigDtoWeekDays", "DigestTimedMetadata", "DigestTimedMetadataType", "DigestTimedMetadataTypedDict", @@ -784,8 +871,6 @@ "EmailBlockTypedDict", "ErrorDto", "ErrorDtoData", - "Errors", - "ErrorsTypedDict", "EventsControllerBroadcastEventToAllRequest", "EventsControllerBroadcastEventToAllRequestTypedDict", "EventsControllerBroadcastEventToAllResponse", @@ -804,8 +889,6 @@ "EventsControllerTriggerResponseTypedDict", "ExecutionDetailsSourceEnum", "ExecutionDetailsStatusEnum", - "FailedAssignmentsDto", - "FailedAssignmentsDtoTypedDict", "FailedOperationDto", "FailedOperationDtoTypedDict", "FeedIdentifier", @@ -814,16 +897,13 @@ "FeedResponseDtoTypedDict", "FieldFilterPartDto", "FieldFilterPartDtoTypedDict", - "FilterTopicsResponseDto", - "FilterTopicsResponseDtoTypedDict", + "Five", + "FiveTypedDict", + "Four", + "FourTypedDict", "GetSubscriberPreferencesDto", "GetSubscriberPreferencesDtoTypedDict", - "GetTopicResponseDto", - "GetTopicResponseDtoTypedDict", - "GlobalPreferenceDto", - "GlobalPreferenceDtoTypedDict", "IntegrationResponseDto", - "IntegrationResponseDtoChannel", "IntegrationResponseDtoTypedDict", "IntegrationsControllerCreateIntegrationRequest", "IntegrationsControllerCreateIntegrationRequestTypedDict", @@ -857,6 +937,10 @@ "IssuesTypedDict", "ListSubscribersResponseDto", "ListSubscribersResponseDtoTypedDict", + "ListTopicSubscriptionsResponseDto", + "ListTopicSubscriptionsResponseDtoTypedDict", + "ListTopicsResponseDto", + "ListTopicsResponseDtoTypedDict", "MarkAllMessageAsRequestDto", "MarkAllMessageAsRequestDtoTypedDict", "MarkAs", @@ -865,10 +949,12 @@ "MarkMessageActionAsSeenDtoPayloadTypedDict", "MarkMessageActionAsSeenDtoStatus", "MarkMessageActionAsSeenDtoTypedDict", + "Message", + "Message4", + "Message4TypedDict", + "Message5", "MessageAction", "MessageActionResult", - "MessageActionResultPayload", - "MessageActionResultPayloadTypedDict", "MessageActionResultTypedDict", "MessageActionStatusEnum", "MessageActionTypedDict", @@ -894,6 +980,9 @@ "MessageTemplateDto", "MessageTemplateDtoTypedDict", "MessageTemplateTypedDict", + "MessageValidationErrorDto4", + "MessageValidationErrorDto4TypedDict", + "MessageValidationErrorDto5", "MessagesControllerDeleteMessageRequest", "MessagesControllerDeleteMessageRequestTypedDict", "MessagesControllerDeleteMessageResponse", @@ -906,6 +995,10 @@ "MessagesControllerGetMessagesRequestTypedDict", "MessagesControllerGetMessagesResponse", "MessagesControllerGetMessagesResponseTypedDict", + "MessagesResponseDto", + "MessagesResponseDtoTypedDict", + "MetaDto", + "MetaDtoTypedDict", "Metadata", "MetadataTypedDict", "MonthlyType", @@ -920,11 +1013,10 @@ "NotificationStepDataMetadataTypedDict", "NotificationStepDataTypedDict", "NotificationStepDto", - "NotificationStepDtoMetadata", - "NotificationStepDtoMetadataTypedDict", "NotificationStepDtoTypedDict", "NotificationTrigger", "NotificationTriggerDto", + "NotificationTriggerDtoType", "NotificationTriggerDtoTypedDict", "NotificationTriggerType", "NotificationTriggerTypedDict", @@ -965,39 +1057,48 @@ "PatchSubscriberRequestDtoTypedDict", "Payload", "PayloadTypedDict", - "PreferenceChannels", - "PreferenceChannelsTypedDict", + "PreferenceOverrideSourceEnum", "ProviderID", "ProvidersIDEnum", "QueryParamChannel", + "QueryParamOrderDirection", "RemoveSubscriberResponseDto", "RemoveSubscriberResponseDtoTypedDict", - "RemoveSubscribersRequestDto", - "RemoveSubscribersRequestDtoTypedDict", - "RenameTopicRequestDto", - "RenameTopicRequestDtoTypedDict", - "RenameTopicResponseDto", - "RenameTopicResponseDtoTypedDict", "ReplyCallback", "ReplyCallbackTypedDict", "Security", "SecurityTypedDict", - "Source", "Status", "StepFilterDto", "StepFilterDtoTypedDict", + "StepFilterDtoValue", "StepTypeEnum", + "StepsOverrides", + "StepsOverridesTypedDict", + "Subscriber", "SubscriberChannelDto", - "SubscriberChannelDtoProviderID", "SubscriberChannelDtoTypedDict", + "SubscriberDto", + "SubscriberDtoTypedDict", "SubscriberFeedResponseDto", "SubscriberFeedResponseDtoTypedDict", + "SubscriberGlobalPreferenceDto", + "SubscriberGlobalPreferenceDtoTypedDict", "SubscriberPayloadDto", "SubscriberPayloadDtoData", "SubscriberPayloadDtoDataTypedDict", "SubscriberPayloadDtoTypedDict", + "SubscriberPreferenceChannels", + "SubscriberPreferenceChannelsTypedDict", + "SubscriberPreferenceOverrideDto", + "SubscriberPreferenceOverrideDtoTypedDict", + "SubscriberPreferencesWorkflowInfoDto", + "SubscriberPreferencesWorkflowInfoDtoTypedDict", "SubscriberResponseDto", "SubscriberResponseDtoTypedDict", + "SubscriberTypedDict", + "SubscriberWorkflowPreferenceDto", + "SubscriberWorkflowPreferenceDtoTypedDict", "SubscribersControllerCreateSubscriberRequest", "SubscribersControllerCreateSubscriberRequestTypedDict", "SubscribersControllerCreateSubscriberResponse", @@ -1010,6 +1111,10 @@ "SubscribersControllerGetSubscriberRequestTypedDict", "SubscribersControllerGetSubscriberResponse", "SubscribersControllerGetSubscriberResponseTypedDict", + "SubscribersControllerListSubscriberTopicsRequest", + "SubscribersControllerListSubscriberTopicsRequestTypedDict", + "SubscribersControllerListSubscriberTopicsResponse", + "SubscribersControllerListSubscriberTopicsResponseTypedDict", "SubscribersControllerPatchSubscriberRequest", "SubscribersControllerPatchSubscriberRequestTypedDict", "SubscribersControllerPatchSubscriberResponse", @@ -1086,6 +1191,12 @@ "SubscribersV1ControllerUpdateSubscriberRequestTypedDict", "SubscribersV1ControllerUpdateSubscriberResponse", "SubscribersV1ControllerUpdateSubscriberResponseTypedDict", + "SubscriptionDto", + "SubscriptionDtoTypedDict", + "SubscriptionErrorDto", + "SubscriptionErrorDtoTypedDict", + "SubscriptionsDeleteErrorDto", + "SubscriptionsDeleteErrorDtoTypedDict", "TLSOptions", "TLSOptionsTypedDict", "Tenant", @@ -1097,47 +1208,56 @@ "TextAlignEnum", "TimedConfig", "TimedConfigTypedDict", - "TimedConfigWeekDays", "To", "ToTypedDict", "TopicDto", "TopicDtoTypedDict", "TopicPayloadDto", "TopicPayloadDtoTypedDict", + "TopicResponseDto", + "TopicResponseDtoTypedDict", "TopicSubscriberDto", "TopicSubscriberDtoTypedDict", - "TopicsControllerAssignRequest", - "TopicsControllerAssignRequestTypedDict", - "TopicsControllerAssignResponse", - "TopicsControllerAssignResponseTypedDict", - "TopicsControllerCreateTopicRequest", - "TopicsControllerCreateTopicRequestTypedDict", - "TopicsControllerCreateTopicResponse", - "TopicsControllerCreateTopicResponseTypedDict", + "TopicSubscriptionResponseDto", + "TopicSubscriptionResponseDtoTypedDict", + "TopicsControllerCreateTopicSubscriptionsRequest", + "TopicsControllerCreateTopicSubscriptionsRequestTypedDict", + "TopicsControllerCreateTopicSubscriptionsResponse", + "TopicsControllerCreateTopicSubscriptionsResponseTypedDict", "TopicsControllerDeleteTopicRequest", "TopicsControllerDeleteTopicRequestTypedDict", "TopicsControllerDeleteTopicResponse", "TopicsControllerDeleteTopicResponseTypedDict", + "TopicsControllerDeleteTopicSubscriptionsRequest", + "TopicsControllerDeleteTopicSubscriptionsRequestTypedDict", + "TopicsControllerDeleteTopicSubscriptionsResponse", + "TopicsControllerDeleteTopicSubscriptionsResponseTypedDict", "TopicsControllerGetTopicRequest", "TopicsControllerGetTopicRequestTypedDict", "TopicsControllerGetTopicResponse", "TopicsControllerGetTopicResponseTypedDict", - "TopicsControllerGetTopicSubscriberRequest", - "TopicsControllerGetTopicSubscriberRequestTypedDict", - "TopicsControllerGetTopicSubscriberResponse", - "TopicsControllerGetTopicSubscriberResponseTypedDict", + "TopicsControllerListTopicSubscriptionsQueryParamOrderDirection", + "TopicsControllerListTopicSubscriptionsRequest", + "TopicsControllerListTopicSubscriptionsRequestTypedDict", + "TopicsControllerListTopicSubscriptionsResponse", + "TopicsControllerListTopicSubscriptionsResponseTypedDict", + "TopicsControllerListTopicsQueryParamOrderDirection", "TopicsControllerListTopicsRequest", "TopicsControllerListTopicsRequestTypedDict", "TopicsControllerListTopicsResponse", "TopicsControllerListTopicsResponseTypedDict", - "TopicsControllerRemoveSubscribersRequest", - "TopicsControllerRemoveSubscribersRequestTypedDict", - "TopicsControllerRemoveSubscribersResponse", - "TopicsControllerRemoveSubscribersResponseTypedDict", - "TopicsControllerRenameTopicRequest", - "TopicsControllerRenameTopicRequestTypedDict", - "TopicsControllerRenameTopicResponse", - "TopicsControllerRenameTopicResponseTypedDict", + "TopicsControllerUpdateTopicRequest", + "TopicsControllerUpdateTopicRequestTypedDict", + "TopicsControllerUpdateTopicResponse", + "TopicsControllerUpdateTopicResponseTypedDict", + "TopicsControllerUpsertTopicRequest", + "TopicsControllerUpsertTopicRequestTypedDict", + "TopicsControllerUpsertTopicResponse", + "TopicsControllerUpsertTopicResponseTypedDict", + "TopicsV1ControllerGetTopicSubscriberRequest", + "TopicsV1ControllerGetTopicSubscriberRequestTypedDict", + "TopicsV1ControllerGetTopicSubscriberResponse", + "TopicsV1ControllerGetTopicSubscriberResponseTypedDict", "TriggerEventRequestDto", "TriggerEventRequestDtoTypedDict", "TriggerEventResponseDto", @@ -1158,26 +1278,24 @@ "UpdateIntegrationRequestDto", "UpdateIntegrationRequestDtoTypedDict", "UpdateSubscriberChannelRequestDto", - "UpdateSubscriberChannelRequestDtoProviderID", "UpdateSubscriberChannelRequestDtoTypedDict", "UpdateSubscriberOnlineFlagRequestDto", "UpdateSubscriberOnlineFlagRequestDtoTypedDict", "UpdateSubscriberRequestDto", "UpdateSubscriberRequestDtoTypedDict", + "UpdateTopicRequestDto", + "UpdateTopicRequestDtoTypedDict", "UpdatedSubscriberDto", "UpdatedSubscriberDtoTypedDict", "ValidationErrorDto", "ValidationErrorDtoData", - "ValidationErrorDtoValue", + "ValidationErrorDtoMessage", "Value", + "ValueTypedDict", "WeekDays", - "WorkflowInfoDto", - "WorkflowInfoDtoTypedDict", "WorkflowIntegrationStatus", "WorkflowIntegrationStatusTypedDict", "WorkflowOriginEnum", - "WorkflowPreferenceDto", - "WorkflowPreferenceDtoTypedDict", "WorkflowResponse", "WorkflowResponseData", "WorkflowResponseDataTypedDict", diff --git a/src/novu_py/models/activitynotificationjobresponsedto.py b/src/novu_py/models/activitynotificationjobresponsedto.py index 00056ab7..48afa837 100644 --- a/src/novu_py/models/activitynotificationjobresponsedto.py +++ b/src/novu_py/models/activitynotificationjobresponsedto.py @@ -32,11 +32,11 @@ class ActivityNotificationJobResponseDtoType(str, Enum): CUSTOM = "custom" -class PayloadTypedDict(TypedDict): +class ActivityNotificationJobResponseDtoPayloadTypedDict(TypedDict): r"""Optional payload for the job""" -class Payload(BaseModel): +class ActivityNotificationJobResponseDtoPayload(BaseModel): r"""Optional payload for the job""" @@ -57,7 +57,7 @@ class ActivityNotificationJobResponseDtoTypedDict(TypedDict): r"""Optional digest for the job, including metadata and events""" overrides: NotRequired[Dict[str, Any]] r"""Optional context object for additional error details.""" - payload: NotRequired[PayloadTypedDict] + payload: NotRequired[ActivityNotificationJobResponseDtoPayloadTypedDict] r"""Optional payload for the job""" updated_at: NotRequired[str] r"""Updated time of the notification""" @@ -91,7 +91,7 @@ class ActivityNotificationJobResponseDto(BaseModel): overrides: Optional[Dict[str, Any]] = None r"""Optional context object for additional error details.""" - payload: Optional[Payload] = None + payload: Optional[ActivityNotificationJobResponseDtoPayload] = None r"""Optional payload for the job""" updated_at: Annotated[Optional[str], pydantic.Field(alias="updatedAt")] = None diff --git a/src/novu_py/models/activitynotificationresponsedto.py b/src/novu_py/models/activitynotificationresponsedto.py index fffd6bd6..29030be9 100644 --- a/src/novu_py/models/activitynotificationresponsedto.py +++ b/src/novu_py/models/activitynotificationresponsedto.py @@ -13,6 +13,7 @@ ActivityNotificationTemplateResponseDto, ActivityNotificationTemplateResponseDtoTypedDict, ) +from .activitytopicdto import ActivityTopicDto, ActivityTopicDtoTypedDict from .steptypeenum import StepTypeEnum from novu_py.types import BaseModel import pydantic @@ -78,6 +79,8 @@ class ActivityNotificationResponseDtoTypedDict(TypedDict): r"""Controls associated with the notification""" to: NotRequired[ActivityNotificationResponseDtoToTypedDict] r"""To field for subscriber definition""" + topics: NotRequired[List[ActivityTopicDtoTypedDict]] + r"""Topics of the notification""" class ActivityNotificationResponseDto(BaseModel): @@ -132,3 +135,6 @@ class ActivityNotificationResponseDto(BaseModel): to: Optional[ActivityNotificationResponseDtoTo] = None r"""To field for subscriber definition""" + + topics: Optional[List[ActivityTopicDto]] = None + r"""Topics of the notification""" diff --git a/src/novu_py/models/activitynotificationstepresponsedto.py b/src/novu_py/models/activitynotificationstepresponsedto.py index 52c2150f..d87e11d3 100644 --- a/src/novu_py/models/activitynotificationstepresponsedto.py +++ b/src/novu_py/models/activitynotificationstepresponsedto.py @@ -26,11 +26,11 @@ class ControlVariables(BaseModel): r"""Control variables""" -class MetadataTypedDict(TypedDict): +class ActivityNotificationStepResponseDtoMetadataTypedDict(TypedDict): r"""Metadata for the workflow step""" -class Metadata(BaseModel): +class ActivityNotificationStepResponseDtoMetadata(BaseModel): r"""Metadata for the workflow step""" @@ -57,7 +57,7 @@ class ActivityNotificationStepResponseDtoTypedDict(TypedDict): r"""Reply callback settings""" control_variables: NotRequired[ControlVariablesTypedDict] r"""Control variables""" - metadata: NotRequired[MetadataTypedDict] + metadata: NotRequired[ActivityNotificationStepResponseDtoMetadataTypedDict] r"""Metadata for the workflow step""" issues: NotRequired[IssuesTypedDict] r"""Step issues""" @@ -95,7 +95,7 @@ class ActivityNotificationStepResponseDto(BaseModel): ] = None r"""Control variables""" - metadata: Optional[Metadata] = None + metadata: Optional[ActivityNotificationStepResponseDtoMetadata] = None r"""Metadata for the workflow step""" issues: Optional[Issues] = None diff --git a/src/novu_py/models/activitytopicdto.py b/src/novu_py/models/activitytopicdto.py new file mode 100644 index 00000000..53ac4233 --- /dev/null +++ b/src/novu_py/models/activitytopicdto.py @@ -0,0 +1,21 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from novu_py.types import BaseModel +import pydantic +from typing_extensions import Annotated, TypedDict + + +class ActivityTopicDtoTypedDict(TypedDict): + topic_id: str + r"""Internal Topic ID of the notification""" + topic_key: str + r"""Topic Key of the notification""" + + +class ActivityTopicDto(BaseModel): + topic_id: Annotated[str, pydantic.Field(alias="_topicId")] + r"""Internal Topic ID of the notification""" + + topic_key: Annotated[str, pydantic.Field(alias="topicKey")] + r"""Topic Key of the notification""" diff --git a/src/novu_py/models/addsubscribersrequestdto.py b/src/novu_py/models/addsubscribersrequestdto.py deleted file mode 100644 index 75e4140b..00000000 --- a/src/novu_py/models/addsubscribersrequestdto.py +++ /dev/null @@ -1,16 +0,0 @@ -"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" - -from __future__ import annotations -from novu_py.types import BaseModel -from typing import List -from typing_extensions import TypedDict - - -class AddSubscribersRequestDtoTypedDict(TypedDict): - subscribers: List[str] - r"""List of subscriber identifiers that will be associated to the topic""" - - -class AddSubscribersRequestDto(BaseModel): - subscribers: List[str] - r"""List of subscriber identifiers that will be associated to the topic""" diff --git a/src/novu_py/models/assignsubscribertotopicdto.py b/src/novu_py/models/assignsubscribertotopicdto.py deleted file mode 100644 index ad7e01ab..00000000 --- a/src/novu_py/models/assignsubscribertotopicdto.py +++ /dev/null @@ -1,22 +0,0 @@ -"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" - -from __future__ import annotations -from .failedassignmentsdto import FailedAssignmentsDto, FailedAssignmentsDtoTypedDict -from novu_py.types import BaseModel -from typing import List, Optional -from typing_extensions import NotRequired, TypedDict - - -class AssignSubscriberToTopicDtoTypedDict(TypedDict): - succeeded: List[str] - r"""List of successfully assigned subscriber IDs""" - failed: NotRequired[FailedAssignmentsDtoTypedDict] - r"""Details about failed assignments""" - - -class AssignSubscriberToTopicDto(BaseModel): - succeeded: List[str] - r"""List of successfully assigned subscriber IDs""" - - failed: Optional[FailedAssignmentsDto] = None - r"""Details about failed assignments""" diff --git a/src/novu_py/models/channelsettingsdto.py b/src/novu_py/models/channelsettingsdto.py index 8e64abca..740aa494 100644 --- a/src/novu_py/models/channelsettingsdto.py +++ b/src/novu_py/models/channelsettingsdto.py @@ -2,37 +2,15 @@ from __future__ import annotations from .channelcredentials import ChannelCredentials, ChannelCredentialsTypedDict -from enum import Enum +from .chatorpushproviderenum import ChatOrPushProviderEnum from novu_py.types import BaseModel import pydantic from typing import Optional from typing_extensions import Annotated, NotRequired, TypedDict -class ProviderID(str, Enum): - r"""The provider identifier for the credentials""" - - SLACK = "slack" - DISCORD = "discord" - MSTEAMS = "msteams" - MATTERMOST = "mattermost" - RYVER = "ryver" - ZULIP = "zulip" - GRAFANA_ON_CALL = "grafana-on-call" - GETSTREAM = "getstream" - ROCKET_CHAT = "rocket-chat" - WHATSAPP_BUSINESS = "whatsapp-business" - FCM = "fcm" - APNS = "apns" - EXPO = "expo" - ONE_SIGNAL = "one-signal" - PUSHPAD = "pushpad" - PUSH_WEBHOOK = "push-webhook" - PUSHER_BEAMS = "pusher-beams" - - class ChannelSettingsDtoTypedDict(TypedDict): - provider_id: ProviderID + provider_id: ChatOrPushProviderEnum r"""The provider identifier for the credentials""" credentials: ChannelCredentialsTypedDict r"""Credentials payload for the specified provider""" @@ -43,7 +21,7 @@ class ChannelSettingsDtoTypedDict(TypedDict): class ChannelSettingsDto(BaseModel): - provider_id: Annotated[ProviderID, pydantic.Field(alias="providerId")] + provider_id: Annotated[ChatOrPushProviderEnum, pydantic.Field(alias="providerId")] r"""The provider identifier for the credentials""" credentials: ChannelCredentials diff --git a/src/novu_py/models/chatorpushproviderenum.py b/src/novu_py/models/chatorpushproviderenum.py new file mode 100644 index 00000000..c71f74b2 --- /dev/null +++ b/src/novu_py/models/chatorpushproviderenum.py @@ -0,0 +1,26 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from enum import Enum + + +class ChatOrPushProviderEnum(str, Enum): + r"""The provider identifier for the credentials""" + + SLACK = "slack" + DISCORD = "discord" + MSTEAMS = "msteams" + MATTERMOST = "mattermost" + RYVER = "ryver" + ZULIP = "zulip" + GRAFANA_ON_CALL = "grafana-on-call" + GETSTREAM = "getstream" + ROCKET_CHAT = "rocket-chat" + WHATSAPP_BUSINESS = "whatsapp-business" + FCM = "fcm" + APNS = "apns" + EXPO = "expo" + ONE_SIGNAL = "one-signal" + PUSHPAD = "pushpad" + PUSH_WEBHOOK = "push-webhook" + PUSHER_BEAMS = "pusher-beams" diff --git a/src/novu_py/models/constraintvalidation.py b/src/novu_py/models/constraintvalidation.py new file mode 100644 index 00000000..46071e85 --- /dev/null +++ b/src/novu_py/models/constraintvalidation.py @@ -0,0 +1,77 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from novu_py.types import BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL +from pydantic import model_serializer +from typing import Any, Dict, List, Union +from typing_extensions import NotRequired, TypeAliasType, TypedDict + + +FiveTypedDict = TypeAliasType("FiveTypedDict", Union[str, float, bool, Dict[str, Any]]) + + +Five = TypeAliasType("Five", Union[str, float, bool, Dict[str, Any]]) + + +class FourTypedDict(TypedDict): + pass + + +class Four(BaseModel): + pass + + +ValueTypedDict = TypeAliasType( + "ValueTypedDict", + Union[FourTypedDict, str, float, bool, List[Nullable[FiveTypedDict]]], +) +r"""Value that failed validation""" + + +Value = TypeAliasType("Value", Union[Four, str, float, bool, List[Nullable[Five]]]) +r"""Value that failed validation""" + + +class ConstraintValidationTypedDict(TypedDict): + messages: List[str] + r"""List of validation error messages""" + value: NotRequired[Nullable[ValueTypedDict]] + r"""Value that failed validation""" + + +class ConstraintValidation(BaseModel): + messages: List[str] + r"""List of validation error messages""" + + value: OptionalNullable[Value] = UNSET + r"""Value that failed validation""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = ["value"] + nullable_fields = ["value"] + null_default_fields = [] + + serialized = handler(self) + + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + serialized.pop(k, None) + + optional_nullable = k in optional_fields and k in nullable_fields + is_set = ( + self.__pydantic_fields_set__.intersection({n}) + or k in null_default_fields + ) # pylint: disable=no-member + + if val is not None and val != UNSET_SENTINEL: + m[k] = val + elif val != UNSET_SENTINEL and ( + not k in optional_fields or (optional_nullable and is_set) + ): + m[k] = val + + return m diff --git a/src/novu_py/models/createtopicrequestdto.py b/src/novu_py/models/createtopicrequestdto.py deleted file mode 100644 index 488383c9..00000000 --- a/src/novu_py/models/createtopicrequestdto.py +++ /dev/null @@ -1,20 +0,0 @@ -"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" - -from __future__ import annotations -from novu_py.types import BaseModel -from typing_extensions import TypedDict - - -class CreateTopicRequestDtoTypedDict(TypedDict): - key: str - r"""User defined custom key and provided by the user that will be an unique identifier for the Topic created.""" - name: str - r"""User defined custom name and provided by the user that will name the Topic created.""" - - -class CreateTopicRequestDto(BaseModel): - key: str - r"""User defined custom key and provided by the user that will be an unique identifier for the Topic created.""" - - name: str - r"""User defined custom name and provided by the user that will name the Topic created.""" diff --git a/src/novu_py/models/createtopicresponsedto.py b/src/novu_py/models/createtopicresponsedto.py deleted file mode 100644 index c0903a8e..00000000 --- a/src/novu_py/models/createtopicresponsedto.py +++ /dev/null @@ -1,22 +0,0 @@ -"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" - -from __future__ import annotations -from novu_py.types import BaseModel -import pydantic -from typing import Optional -from typing_extensions import Annotated, NotRequired, TypedDict - - -class CreateTopicResponseDtoTypedDict(TypedDict): - key: str - r"""User defined custom key and provided by the user that will be an unique identifier for the Topic created.""" - id: NotRequired[str] - r"""The unique identifier for the Topic created.""" - - -class CreateTopicResponseDto(BaseModel): - key: str - r"""User defined custom key and provided by the user that will be an unique identifier for the Topic created.""" - - id: Annotated[Optional[str], pydantic.Field(alias="_id")] = None - r"""The unique identifier for the Topic created.""" diff --git a/src/novu_py/models/createtopicsubscriptionsrequestdto.py b/src/novu_py/models/createtopicsubscriptionsrequestdto.py new file mode 100644 index 00000000..c16b7413 --- /dev/null +++ b/src/novu_py/models/createtopicsubscriptionsrequestdto.py @@ -0,0 +1,17 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from novu_py.types import BaseModel +import pydantic +from typing import List +from typing_extensions import Annotated, TypedDict + + +class CreateTopicSubscriptionsRequestDtoTypedDict(TypedDict): + subscriber_ids: List[str] + r"""List of subscriber identifiers to subscribe to the topic (max: 100)""" + + +class CreateTopicSubscriptionsRequestDto(BaseModel): + subscriber_ids: Annotated[List[str], pydantic.Field(alias="subscriberIds")] + r"""List of subscriber identifiers to subscribe to the topic (max: 100)""" diff --git a/src/novu_py/models/createtopicsubscriptionsresponsedto.py b/src/novu_py/models/createtopicsubscriptionsresponsedto.py new file mode 100644 index 00000000..31ce4a39 --- /dev/null +++ b/src/novu_py/models/createtopicsubscriptionsresponsedto.py @@ -0,0 +1,29 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .metadto import MetaDto, MetaDtoTypedDict +from .subscriptiondto import SubscriptionDto, SubscriptionDtoTypedDict +from .subscriptionerrordto import SubscriptionErrorDto, SubscriptionErrorDtoTypedDict +from novu_py.types import BaseModel +from typing import List, Optional +from typing_extensions import NotRequired, TypedDict + + +class CreateTopicSubscriptionsResponseDtoTypedDict(TypedDict): + data: List[SubscriptionDtoTypedDict] + r"""The list of successfully created subscriptions""" + meta: MetaDtoTypedDict + r"""Metadata about the operation""" + errors: NotRequired[List[SubscriptionErrorDtoTypedDict]] + r"""The list of errors for failed subscription attempts""" + + +class CreateTopicSubscriptionsResponseDto(BaseModel): + data: List[SubscriptionDto] + r"""The list of successfully created subscriptions""" + + meta: MetaDto + r"""Metadata about the operation""" + + errors: Optional[List[SubscriptionErrorDto]] = None + r"""The list of errors for failed subscription attempts""" diff --git a/src/novu_py/models/createupdatetopicrequestdto.py b/src/novu_py/models/createupdatetopicrequestdto.py new file mode 100644 index 00000000..1e7d2b12 --- /dev/null +++ b/src/novu_py/models/createupdatetopicrequestdto.py @@ -0,0 +1,21 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from novu_py.types import BaseModel +from typing import Optional +from typing_extensions import NotRequired, TypedDict + + +class CreateUpdateTopicRequestDtoTypedDict(TypedDict): + key: str + r"""The unique key identifier for the topic. The key must contain only alphanumeric characters (a-z, A-Z, 0-9), hyphens (-), underscores (_), colons (:), or be a valid email address.""" + name: NotRequired[str] + r"""The display name for the topic""" + + +class CreateUpdateTopicRequestDto(BaseModel): + key: str + r"""The unique key identifier for the topic. The key must contain only alphanumeric characters (a-z, A-Z, 0-9), hyphens (-), underscores (_), colons (:), or be a valid email address.""" + + name: Optional[str] = None + r"""The display name for the topic""" diff --git a/src/novu_py/models/deletetopicresponsedto.py b/src/novu_py/models/deletetopicresponsedto.py new file mode 100644 index 00000000..761e4175 --- /dev/null +++ b/src/novu_py/models/deletetopicresponsedto.py @@ -0,0 +1,15 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from novu_py.types import BaseModel +from typing_extensions import TypedDict + + +class DeleteTopicResponseDtoTypedDict(TypedDict): + acknowledged: bool + r"""Indicates if the operation was acknowledged""" + + +class DeleteTopicResponseDto(BaseModel): + acknowledged: bool + r"""Indicates if the operation was acknowledged""" diff --git a/src/novu_py/models/deletetopicsubscriptionsrequestdto.py b/src/novu_py/models/deletetopicsubscriptionsrequestdto.py new file mode 100644 index 00000000..a79ad525 --- /dev/null +++ b/src/novu_py/models/deletetopicsubscriptionsrequestdto.py @@ -0,0 +1,17 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from novu_py.types import BaseModel +import pydantic +from typing import List +from typing_extensions import Annotated, TypedDict + + +class DeleteTopicSubscriptionsRequestDtoTypedDict(TypedDict): + subscriber_ids: List[str] + r"""List of subscriber identifiers to unsubscribe from the topic (max: 100)""" + + +class DeleteTopicSubscriptionsRequestDto(BaseModel): + subscriber_ids: Annotated[List[str], pydantic.Field(alias="subscriberIds")] + r"""List of subscriber identifiers to unsubscribe from the topic (max: 100)""" diff --git a/src/novu_py/models/deletetopicsubscriptionsresponsedto.py b/src/novu_py/models/deletetopicsubscriptionsresponsedto.py new file mode 100644 index 00000000..c5f664ee --- /dev/null +++ b/src/novu_py/models/deletetopicsubscriptionsresponsedto.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .metadto import MetaDto, MetaDtoTypedDict +from .subscriptiondto import SubscriptionDto, SubscriptionDtoTypedDict +from .subscriptionsdeleteerrordto import ( + SubscriptionsDeleteErrorDto, + SubscriptionsDeleteErrorDtoTypedDict, +) +from novu_py.types import BaseModel +from typing import List, Optional +from typing_extensions import NotRequired, TypedDict + + +class DeleteTopicSubscriptionsResponseDtoTypedDict(TypedDict): + data: List[SubscriptionDtoTypedDict] + r"""The list of successfully deleted subscriptions""" + meta: MetaDtoTypedDict + r"""Metadata about the operation""" + errors: NotRequired[List[SubscriptionsDeleteErrorDtoTypedDict]] + r"""The list of errors for failed deletion attempts""" + + +class DeleteTopicSubscriptionsResponseDto(BaseModel): + data: List[SubscriptionDto] + r"""The list of successfully deleted subscriptions""" + + meta: MetaDto + r"""Metadata about the operation""" + + errors: Optional[List[SubscriptionsDeleteErrorDto]] = None + r"""The list of errors for failed deletion attempts""" diff --git a/src/novu_py/models/digestmetadatadto.py b/src/novu_py/models/digestmetadatadto.py index bb7e3bc8..9b6fe11a 100644 --- a/src/novu_py/models/digestmetadatadto.py +++ b/src/novu_py/models/digestmetadatadto.py @@ -11,7 +11,7 @@ from typing_extensions import Annotated, NotRequired, TypedDict -class Unit(str, Enum): +class DigestMetadataDtoUnit(str, Enum): r"""Unit of the digest""" SECONDS = "seconds" @@ -29,7 +29,7 @@ class DigestMetadataDtoTypedDict(TypedDict): r"""Optional key for the digest""" amount: NotRequired[float] r"""Amount for the digest""" - unit: NotRequired[Unit] + unit: NotRequired[DigestMetadataDtoUnit] r"""Unit of the digest""" events: NotRequired[List[Dict[str, Any]]] r"""Optional array of events associated with the digest, represented as key-value pairs""" @@ -55,7 +55,7 @@ class DigestMetadataDto(BaseModel): amount: Optional[float] = None r"""Amount for the digest""" - unit: Optional[Unit] = None + unit: Optional[DigestMetadataDtoUnit] = None r"""Unit of the digest""" events: Optional[List[Dict[str, Any]]] = None diff --git a/src/novu_py/models/digestregularmetadata.py b/src/novu_py/models/digestregularmetadata.py index 3dda72ca..818941fb 100644 --- a/src/novu_py/models/digestregularmetadata.py +++ b/src/novu_py/models/digestregularmetadata.py @@ -8,7 +8,7 @@ from typing_extensions import Annotated, NotRequired, TypedDict -class DigestRegularMetadataUnit(str, Enum): +class Unit(str, Enum): SECONDS = "seconds" MINUTES = "minutes" HOURS = "hours" @@ -17,7 +17,7 @@ class DigestRegularMetadataUnit(str, Enum): MONTHS = "months" -class DigestRegularMetadataType(str, Enum): +class Type(str, Enum): REGULAR = "regular" BACKOFF = "backoff" @@ -32,9 +32,9 @@ class BackoffUnit(str, Enum): class DigestRegularMetadataTypedDict(TypedDict): - type: DigestRegularMetadataType + type: Type amount: NotRequired[float] - unit: NotRequired[DigestRegularMetadataUnit] + unit: NotRequired[Unit] digest_key: NotRequired[str] backoff: NotRequired[bool] backoff_amount: NotRequired[float] @@ -43,11 +43,11 @@ class DigestRegularMetadataTypedDict(TypedDict): class DigestRegularMetadata(BaseModel): - type: DigestRegularMetadataType + type: Type amount: Optional[float] = None - unit: Optional[DigestRegularMetadataUnit] = None + unit: Optional[Unit] = None digest_key: Annotated[Optional[str], pydantic.Field(alias="digestKey")] = None diff --git a/src/novu_py/models/digesttimedconfigdto.py b/src/novu_py/models/digesttimedconfigdto.py index 7b392430..9a1b8ea5 100644 --- a/src/novu_py/models/digesttimedconfigdto.py +++ b/src/novu_py/models/digesttimedconfigdto.py @@ -11,7 +11,7 @@ from typing_extensions import Annotated, NotRequired, TypedDict -class WeekDays(str, Enum): +class DigestTimedConfigDtoWeekDays(str, Enum): MONDAY = "monday" TUESDAY = "tuesday" WEDNESDAY = "wednesday" @@ -24,7 +24,7 @@ class WeekDays(str, Enum): class DigestTimedConfigDtoTypedDict(TypedDict): at_time: NotRequired[str] r"""Time at which the digest is triggered""" - week_days: NotRequired[List[WeekDays]] + week_days: NotRequired[List[DigestTimedConfigDtoWeekDays]] r"""Days of the week for the digest""" month_days: NotRequired[List[float]] r"""Specific days of the month for the digest""" @@ -42,9 +42,9 @@ class DigestTimedConfigDto(BaseModel): at_time: Annotated[Optional[str], pydantic.Field(alias="atTime")] = None r"""Time at which the digest is triggered""" - week_days: Annotated[Optional[List[WeekDays]], pydantic.Field(alias="weekDays")] = ( - None - ) + week_days: Annotated[ + Optional[List[DigestTimedConfigDtoWeekDays]], pydantic.Field(alias="weekDays") + ] = None r"""Days of the week for the digest""" month_days: Annotated[Optional[List[float]], pydantic.Field(alias="monthDays")] = ( diff --git a/src/novu_py/models/errordto.py b/src/novu_py/models/errordto.py index 065af1f1..f1db756e 100644 --- a/src/novu_py/models/errordto.py +++ b/src/novu_py/models/errordto.py @@ -2,10 +2,39 @@ from __future__ import annotations from novu_py import utils -from novu_py.types import BaseModel +from novu_py.types import BaseModel, Nullable, OptionalNullable, UNSET import pydantic -from typing import Any, Dict, Optional -from typing_extensions import Annotated +from typing import Any, Dict, List, Optional, Union +from typing_extensions import Annotated, TypeAliasType, TypedDict + + +Message5TypedDict = TypeAliasType( + "Message5TypedDict", Union[str, float, bool, Dict[str, Any]] +) + + +Message5 = TypeAliasType("Message5", Union[str, float, bool, Dict[str, Any]]) + + +class Message4TypedDict(TypedDict): + pass + + +class Message4(BaseModel): + pass + + +MessageTypedDict = TypeAliasType( + "MessageTypedDict", + Union[Message4TypedDict, str, float, bool, List[Nullable[Message5TypedDict]]], +) +r"""Value that failed validation""" + + +Message = TypeAliasType( + "Message", Union[Message4, str, float, bool, List[Nullable[Message5]]] +) +r"""Value that failed validation""" class ErrorDtoData(BaseModel): @@ -18,8 +47,8 @@ class ErrorDtoData(BaseModel): path: str r"""The path where the error occurred.""" - message: str - r"""A detailed error message.""" + message: OptionalNullable[Message] = UNSET + r"""Value that failed validation""" ctx: Optional[Dict[str, Any]] = None r"""Optional context object for additional error details.""" diff --git a/src/novu_py/models/failedassignmentsdto.py b/src/novu_py/models/failedassignmentsdto.py deleted file mode 100644 index 824c48e4..00000000 --- a/src/novu_py/models/failedassignmentsdto.py +++ /dev/null @@ -1,17 +0,0 @@ -"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" - -from __future__ import annotations -from novu_py.types import BaseModel -import pydantic -from typing import List, Optional -from typing_extensions import Annotated, NotRequired, TypedDict - - -class FailedAssignmentsDtoTypedDict(TypedDict): - not_found: NotRequired[List[str]] - r"""List of subscriber IDs that were not found""" - - -class FailedAssignmentsDto(BaseModel): - not_found: Annotated[Optional[List[str]], pydantic.Field(alias="notFound")] = None - r"""List of subscriber IDs that were not found""" diff --git a/src/novu_py/models/filtertopicsresponsedto.py b/src/novu_py/models/filtertopicsresponsedto.py deleted file mode 100644 index 863e17fc..00000000 --- a/src/novu_py/models/filtertopicsresponsedto.py +++ /dev/null @@ -1,33 +0,0 @@ -"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" - -from __future__ import annotations -from .topicdto import TopicDto, TopicDtoTypedDict -from novu_py.types import BaseModel -import pydantic -from typing import List -from typing_extensions import Annotated, TypedDict - - -class FilterTopicsResponseDtoTypedDict(TypedDict): - data: List[TopicDtoTypedDict] - r"""The list of topics""" - page: float - r"""The current page number""" - page_size: float - r"""The number of items per page""" - total_count: float - r"""The total number of items""" - - -class FilterTopicsResponseDto(BaseModel): - data: List[TopicDto] - r"""The list of topics""" - - page: float - r"""The current page number""" - - page_size: Annotated[float, pydantic.Field(alias="pageSize")] - r"""The number of items per page""" - - total_count: Annotated[float, pydantic.Field(alias="totalCount")] - r"""The total number of items""" diff --git a/src/novu_py/models/getsubscriberpreferencesdto.py b/src/novu_py/models/getsubscriberpreferencesdto.py index 7bdf12e6..c5fc4ead 100644 --- a/src/novu_py/models/getsubscriberpreferencesdto.py +++ b/src/novu_py/models/getsubscriberpreferencesdto.py @@ -1,8 +1,14 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .globalpreferencedto import GlobalPreferenceDto, GlobalPreferenceDtoTypedDict -from .workflowpreferencedto import WorkflowPreferenceDto, WorkflowPreferenceDtoTypedDict +from .subscriberglobalpreferencedto import ( + SubscriberGlobalPreferenceDto, + SubscriberGlobalPreferenceDtoTypedDict, +) +from .subscriberworkflowpreferencedto import ( + SubscriberWorkflowPreferenceDto, + SubscriberWorkflowPreferenceDtoTypedDict, +) from novu_py.types import BaseModel import pydantic from typing import List @@ -10,15 +16,15 @@ class GetSubscriberPreferencesDtoTypedDict(TypedDict): - global_: GlobalPreferenceDtoTypedDict + global_: SubscriberGlobalPreferenceDtoTypedDict r"""Global preference settings""" - workflows: List[WorkflowPreferenceDtoTypedDict] + workflows: List[SubscriberWorkflowPreferenceDtoTypedDict] r"""Workflow-specific preference settings""" class GetSubscriberPreferencesDto(BaseModel): - global_: Annotated[GlobalPreferenceDto, pydantic.Field(alias="global")] + global_: Annotated[SubscriberGlobalPreferenceDto, pydantic.Field(alias="global")] r"""Global preference settings""" - workflows: List[WorkflowPreferenceDto] + workflows: List[SubscriberWorkflowPreferenceDto] r"""Workflow-specific preference settings""" diff --git a/src/novu_py/models/gettopicresponsedto.py b/src/novu_py/models/gettopicresponsedto.py deleted file mode 100644 index 65b23e11..00000000 --- a/src/novu_py/models/gettopicresponsedto.py +++ /dev/null @@ -1,30 +0,0 @@ -"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" - -from __future__ import annotations -from novu_py.types import BaseModel -import pydantic -from typing import List, Optional -from typing_extensions import Annotated, NotRequired, TypedDict - - -class GetTopicResponseDtoTypedDict(TypedDict): - organization_id: str - environment_id: str - key: str - name: str - subscribers: List[str] - id: NotRequired[str] - - -class GetTopicResponseDto(BaseModel): - organization_id: Annotated[str, pydantic.Field(alias="_organizationId")] - - environment_id: Annotated[str, pydantic.Field(alias="_environmentId")] - - key: str - - name: str - - subscribers: List[str] - - id: Annotated[Optional[str], pydantic.Field(alias="_id")] = None diff --git a/src/novu_py/models/integrationresponsedto.py b/src/novu_py/models/integrationresponsedto.py index 5b7f4bde..dd4eef7f 100644 --- a/src/novu_py/models/integrationresponsedto.py +++ b/src/novu_py/models/integrationresponsedto.py @@ -10,7 +10,7 @@ from typing_extensions import Annotated, NotRequired, TypedDict -class IntegrationResponseDtoChannel(str, Enum): +class Channel(str, Enum): r"""The channel type for the integration, which defines how the integration communicates (e.g., email, SMS).""" IN_APP = "in_app" @@ -31,7 +31,7 @@ class IntegrationResponseDtoTypedDict(TypedDict): r"""A unique string identifier for the integration, often used for API calls or internal references.""" provider_id: str r"""The identifier for the provider of the integration (e.g., \"mailgun\", \"twilio\").""" - channel: IntegrationResponseDtoChannel + channel: Channel r"""The channel type for the integration, which defines how the integration communicates (e.g., email, SMS).""" credentials: CredentialsDtoTypedDict r"""The credentials required for the integration to function, including API keys and other sensitive information.""" @@ -67,7 +67,7 @@ class IntegrationResponseDto(BaseModel): provider_id: Annotated[str, pydantic.Field(alias="providerId")] r"""The identifier for the provider of the integration (e.g., \"mailgun\", \"twilio\").""" - channel: IntegrationResponseDtoChannel + channel: Channel r"""The channel type for the integration, which defines how the integration communicates (e.g., email, SMS).""" credentials: CredentialsDto diff --git a/src/novu_py/models/listtopicsresponsedto.py b/src/novu_py/models/listtopicsresponsedto.py new file mode 100644 index 00000000..26c54bd6 --- /dev/null +++ b/src/novu_py/models/listtopicsresponsedto.py @@ -0,0 +1,58 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .topicresponsedto import TopicResponseDto, TopicResponseDtoTypedDict +from novu_py.types import BaseModel, Nullable, UNSET_SENTINEL +from pydantic import model_serializer +from typing import List +from typing_extensions import TypedDict + + +class ListTopicsResponseDtoTypedDict(TypedDict): + data: List[TopicResponseDtoTypedDict] + r"""List of returned Topics""" + next: Nullable[str] + r"""The cursor for the next page of results, or null if there are no more pages.""" + previous: Nullable[str] + r"""The cursor for the previous page of results, or null if this is the first page.""" + + +class ListTopicsResponseDto(BaseModel): + data: List[TopicResponseDto] + r"""List of returned Topics""" + + next: Nullable[str] + r"""The cursor for the next page of results, or null if there are no more pages.""" + + previous: Nullable[str] + r"""The cursor for the previous page of results, or null if this is the first page.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = [] + nullable_fields = ["next", "previous"] + null_default_fields = [] + + serialized = handler(self) + + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + serialized.pop(k, None) + + optional_nullable = k in optional_fields and k in nullable_fields + is_set = ( + self.__pydantic_fields_set__.intersection({n}) + or k in null_default_fields + ) # pylint: disable=no-member + + if val is not None and val != UNSET_SENTINEL: + m[k] = val + elif val != UNSET_SENTINEL and ( + not k in optional_fields or (optional_nullable and is_set) + ): + m[k] = val + + return m diff --git a/src/novu_py/models/listtopicsubscriptionsresponsedto.py b/src/novu_py/models/listtopicsubscriptionsresponsedto.py new file mode 100644 index 00000000..2dd7c8cf --- /dev/null +++ b/src/novu_py/models/listtopicsubscriptionsresponsedto.py @@ -0,0 +1,61 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .topicsubscriptionresponsedto import ( + TopicSubscriptionResponseDto, + TopicSubscriptionResponseDtoTypedDict, +) +from novu_py.types import BaseModel, Nullable, UNSET_SENTINEL +from pydantic import model_serializer +from typing import List +from typing_extensions import TypedDict + + +class ListTopicSubscriptionsResponseDtoTypedDict(TypedDict): + data: List[TopicSubscriptionResponseDtoTypedDict] + r"""List of returned Topic Subscriptions""" + next: Nullable[str] + r"""The cursor for the next page of results, or null if there are no more pages.""" + previous: Nullable[str] + r"""The cursor for the previous page of results, or null if this is the first page.""" + + +class ListTopicSubscriptionsResponseDto(BaseModel): + data: List[TopicSubscriptionResponseDto] + r"""List of returned Topic Subscriptions""" + + next: Nullable[str] + r"""The cursor for the next page of results, or null if there are no more pages.""" + + previous: Nullable[str] + r"""The cursor for the previous page of results, or null if this is the first page.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = [] + nullable_fields = ["next", "previous"] + null_default_fields = [] + + serialized = handler(self) + + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + serialized.pop(k, None) + + optional_nullable = k in optional_fields and k in nullable_fields + is_set = ( + self.__pydantic_fields_set__.intersection({n}) + or k in null_default_fields + ) # pylint: disable=no-member + + if val is not None and val != UNSET_SENTINEL: + m[k] = val + elif val != UNSET_SENTINEL and ( + not k in optional_fields or (optional_nullable and is_set) + ): + m[k] = val + + return m diff --git a/src/novu_py/models/messageactionresult.py b/src/novu_py/models/messageactionresult.py index c0f6047e..3207b75c 100644 --- a/src/novu_py/models/messageactionresult.py +++ b/src/novu_py/models/messageactionresult.py @@ -7,23 +7,23 @@ from typing_extensions import NotRequired, TypedDict -class MessageActionResultPayloadTypedDict(TypedDict): +class PayloadTypedDict(TypedDict): r"""Payload of the action result""" -class MessageActionResultPayload(BaseModel): +class Payload(BaseModel): r"""Payload of the action result""" class MessageActionResultTypedDict(TypedDict): - payload: NotRequired[MessageActionResultPayloadTypedDict] + payload: NotRequired[PayloadTypedDict] r"""Payload of the action result""" type: NotRequired[ButtonTypeEnum] r"""Type of button for the action result""" class MessageActionResult(BaseModel): - payload: Optional[MessageActionResultPayload] = None + payload: Optional[Payload] = None r"""Payload of the action result""" type: Optional[ButtonTypeEnum] = None diff --git a/src/novu_py/models/messagecta.py b/src/novu_py/models/messagecta.py index 3fe4f097..c93d1ab3 100644 --- a/src/novu_py/models/messagecta.py +++ b/src/novu_py/models/messagecta.py @@ -10,20 +10,20 @@ class MessageCTATypedDict(TypedDict): - data: MessageCTADataTypedDict - r"""Data associated with the call to action""" type: NotRequired[ChannelCTATypeEnum] r"""Type of call to action""" + data: NotRequired[MessageCTADataTypedDict] + r"""Data associated with the call to action""" action: NotRequired[MessageActionTypedDict] r"""Action associated with the call to action""" class MessageCTA(BaseModel): - data: MessageCTAData - r"""Data associated with the call to action""" - type: Optional[ChannelCTATypeEnum] = None r"""Type of call to action""" + data: Optional[MessageCTAData] = None + r"""Data associated with the call to action""" + action: Optional[MessageAction] = None r"""Action associated with the call to action""" diff --git a/src/novu_py/models/messageresponsedto.py b/src/novu_py/models/messageresponsedto.py index 42a9bf03..a2601901 100644 --- a/src/novu_py/models/messageresponsedto.py +++ b/src/novu_py/models/messageresponsedto.py @@ -14,11 +14,13 @@ from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict -ContentTypedDict = TypeAliasType("ContentTypedDict", Union[EmailBlockTypedDict, str]) +ContentTypedDict = TypeAliasType( + "ContentTypedDict", Union[List[EmailBlockTypedDict], str] +) r"""Content of the message, can be an email block or a string""" -Content = TypeAliasType("Content", Union[EmailBlock, str]) +Content = TypeAliasType("Content", Union[List[EmailBlock], str]) r"""Content of the message, can be an email block or a string""" @@ -75,12 +77,16 @@ class MessageResponseDtoTypedDict(TypedDict): r"""Workflow template associated with the message""" template_identifier: NotRequired[str] r"""Identifier for the message template""" + delivered_at: NotRequired[List[str]] + r"""Array of delivery dates for the message, if the message has multiple delivery dates, for example after being snoozed""" last_seen_date: NotRequired[str] r"""Last seen date of the message, if available""" last_read_date: NotRequired[str] r"""Last read date of the message, if available""" subject: NotRequired[str] r"""Subject of the message, if applicable""" + snoozed_until: NotRequired[str] + r"""Date when the message will be unsnoozed""" email: NotRequired[str] r"""Email address associated with the message, if applicable""" phone: NotRequired[str] @@ -162,6 +168,11 @@ class MessageResponseDto(BaseModel): ] = None r"""Identifier for the message template""" + delivered_at: Annotated[ + Optional[List[str]], pydantic.Field(alias="deliveredAt") + ] = None + r"""Array of delivery dates for the message, if the message has multiple delivery dates, for example after being snoozed""" + last_seen_date: Annotated[Optional[str], pydantic.Field(alias="lastSeenDate")] = ( None ) @@ -175,6 +186,9 @@ class MessageResponseDto(BaseModel): subject: Optional[str] = None r"""Subject of the message, if applicable""" + snoozed_until: Annotated[Optional[str], pydantic.Field(alias="snoozedUntil")] = None + r"""Date when the message will be unsnoozed""" + email: Optional[str] = None r"""Email address associated with the message, if applicable""" @@ -219,9 +233,11 @@ def serialize_model(self, handler): "subscriber", "template", "templateIdentifier", + "deliveredAt", "lastSeenDate", "lastReadDate", "subject", + "snoozedUntil", "email", "phone", "directWebhookUrl", diff --git a/src/novu_py/models/messagescontroller_getmessagesop.py b/src/novu_py/models/messagescontroller_getmessagesop.py index 04d639e7..6606068b 100644 --- a/src/novu_py/models/messagescontroller_getmessagesop.py +++ b/src/novu_py/models/messagescontroller_getmessagesop.py @@ -1,8 +1,8 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .activitiesresponsedto import ActivitiesResponseDto, ActivitiesResponseDtoTypedDict from .channeltypeenum import ChannelTypeEnum +from .messagesresponsedto import MessagesResponseDto, MessagesResponseDtoTypedDict from novu_py.types import BaseModel from novu_py.utils import FieldMetadata, HeaderMetadata, QueryParamMetadata import pydantic @@ -60,10 +60,10 @@ class MessagesControllerGetMessagesRequest(BaseModel): class MessagesControllerGetMessagesResponseTypedDict(TypedDict): headers: Dict[str, List[str]] - result: ActivitiesResponseDtoTypedDict + result: MessagesResponseDtoTypedDict class MessagesControllerGetMessagesResponse(BaseModel): headers: Dict[str, List[str]] - result: ActivitiesResponseDto + result: MessagesResponseDto diff --git a/src/novu_py/models/messagesresponsedto.py b/src/novu_py/models/messagesresponsedto.py new file mode 100644 index 00000000..5307dec3 --- /dev/null +++ b/src/novu_py/models/messagesresponsedto.py @@ -0,0 +1,38 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .messageresponsedto import MessageResponseDto, MessageResponseDtoTypedDict +from novu_py.types import BaseModel +import pydantic +from typing import List, Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class MessagesResponseDtoTypedDict(TypedDict): + has_more: bool + r"""Indicates if there are more messages available""" + data: List[MessageResponseDtoTypedDict] + r"""List of messages""" + page_size: float + r"""Number of messages per page""" + page: float + r"""Current page number""" + total_count: NotRequired[float] + r"""Total number of messages available""" + + +class MessagesResponseDto(BaseModel): + has_more: Annotated[bool, pydantic.Field(alias="hasMore")] + r"""Indicates if there are more messages available""" + + data: List[MessageResponseDto] + r"""List of messages""" + + page_size: Annotated[float, pydantic.Field(alias="pageSize")] + r"""Number of messages per page""" + + page: float + r"""Current page number""" + + total_count: Annotated[Optional[float], pydantic.Field(alias="totalCount")] = None + r"""Total number of messages available""" diff --git a/src/novu_py/models/metadto.py b/src/novu_py/models/metadto.py new file mode 100644 index 00000000..5e5b695f --- /dev/null +++ b/src/novu_py/models/metadto.py @@ -0,0 +1,26 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from novu_py.types import BaseModel +import pydantic +from typing_extensions import Annotated, TypedDict + + +class MetaDtoTypedDict(TypedDict): + total_count: float + r"""The total count of subscriber IDs provided""" + successful: float + r"""The count of successfully created subscriptions""" + failed: float + r"""The count of failed subscription attempts""" + + +class MetaDto(BaseModel): + total_count: Annotated[float, pydantic.Field(alias="totalCount")] + r"""The total count of subscriber IDs provided""" + + successful: float + r"""The count of successfully created subscriptions""" + + failed: float + r"""The count of failed subscription attempts""" diff --git a/src/novu_py/models/notificationfeeditemdto.py b/src/novu_py/models/notificationfeeditemdto.py index 4d528080..d3e7bf8f 100644 --- a/src/novu_py/models/notificationfeeditemdto.py +++ b/src/novu_py/models/notificationfeeditemdto.py @@ -54,8 +54,6 @@ class NotificationFeedItemDtoTypedDict(TypedDict): r"""Indicates whether the notification has been read by the subscriber.""" seen: bool r"""Indicates whether the notification has been seen by the subscriber.""" - deleted: bool - r"""Indicates whether the notification has been deleted.""" cta: MessageCTATypedDict r"""Call-to-action information associated with the notification.""" status: NotificationFeedItemDtoStatus @@ -125,9 +123,6 @@ class NotificationFeedItemDto(BaseModel): seen: bool r"""Indicates whether the notification has been seen by the subscriber.""" - deleted: bool - r"""Indicates whether the notification has been deleted.""" - cta: MessageCTA r"""Call-to-action information associated with the notification.""" diff --git a/src/novu_py/models/notificationscontroller_listnotificationsop.py b/src/novu_py/models/notificationscontroller_listnotificationsop.py index cd5a0716..f4e1de99 100644 --- a/src/novu_py/models/notificationscontroller_listnotificationsop.py +++ b/src/novu_py/models/notificationscontroller_listnotificationsop.py @@ -27,6 +27,8 @@ class NotificationsControllerListNotificationsRequestTypedDict(TypedDict): r"""Limit for pagination""" transaction_id: NotRequired[str] r"""Transaction ID for filtering""" + topic_key: NotRequired[str] + r"""Topic Key for filtering notifications by topic""" after: NotRequired[str] r"""Date filter for records after this timestamp. Defaults to earliest date allowed by subscription plan""" before: NotRequired[str] @@ -89,6 +91,13 @@ class NotificationsControllerListNotificationsRequest(BaseModel): ] = None r"""Transaction ID for filtering""" + topic_key: Annotated[ + Optional[str], + pydantic.Field(alias="topicKey"), + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""Topic Key for filtering notifications by topic""" + after: Annotated[ Optional[str], FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), diff --git a/src/novu_py/models/notificationstepdto.py b/src/novu_py/models/notificationstepdto.py index 9f809208..84b261b3 100644 --- a/src/novu_py/models/notificationstepdto.py +++ b/src/novu_py/models/notificationstepdto.py @@ -18,8 +18,8 @@ from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict -NotificationStepDtoMetadataTypedDict = TypeAliasType( - "NotificationStepDtoMetadataTypedDict", +MetadataTypedDict = TypeAliasType( + "MetadataTypedDict", Union[ DelayScheduledMetadataTypedDict, DelayRegularMetadataTypedDict, @@ -30,8 +30,8 @@ r"""Metadata associated with the workflow step. Can vary based on the type of step.""" -NotificationStepDtoMetadata = TypeAliasType( - "NotificationStepDtoMetadata", +Metadata = TypeAliasType( + "Metadata", Union[ DelayScheduledMetadata, DelayRegularMetadata, @@ -61,7 +61,7 @@ class NotificationStepDtoTypedDict(TypedDict): r"""Filters applied to this notification step.""" parent_id: NotRequired[str] r"""ID of the parent notification step, if applicable.""" - metadata: NotRequired[NotificationStepDtoMetadataTypedDict] + metadata: NotRequired[MetadataTypedDict] r"""Metadata associated with the workflow step. Can vary based on the type of step.""" reply_callback: NotRequired[ReplyCallbackTypedDict] r"""Callback information for replies, including whether it is active and the callback URL.""" @@ -98,7 +98,7 @@ class NotificationStepDto(BaseModel): parent_id: Annotated[Optional[str], pydantic.Field(alias="_parentId")] = None r"""ID of the parent notification step, if applicable.""" - metadata: Optional[NotificationStepDtoMetadata] = None + metadata: Optional[Metadata] = None r"""Metadata associated with the workflow step. Can vary based on the type of step.""" reply_callback: Annotated[ diff --git a/src/novu_py/models/notificationtriggerdto.py b/src/novu_py/models/notificationtriggerdto.py index 4f1a880c..eac34f31 100644 --- a/src/novu_py/models/notificationtriggerdto.py +++ b/src/novu_py/models/notificationtriggerdto.py @@ -12,14 +12,14 @@ from typing_extensions import Annotated, NotRequired, TypedDict -class Type(str, Enum): +class NotificationTriggerDtoType(str, Enum): r"""Type of the trigger""" EVENT = "event" class NotificationTriggerDtoTypedDict(TypedDict): - type: Type + type: NotificationTriggerDtoType r"""Type of the trigger""" identifier: str r"""Identifier of the trigger""" @@ -30,7 +30,7 @@ class NotificationTriggerDtoTypedDict(TypedDict): class NotificationTriggerDto(BaseModel): - type: Type + type: NotificationTriggerDtoType r"""Type of the trigger""" identifier: str diff --git a/src/novu_py/models/overrides.py b/src/novu_py/models/overrides.py deleted file mode 100644 index 1e36aa1f..00000000 --- a/src/novu_py/models/overrides.py +++ /dev/null @@ -1,39 +0,0 @@ -"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" - -from __future__ import annotations -from enum import Enum -from novu_py.types import BaseModel -from typing_extensions import TypedDict - - -class Channel(str, Enum): - r"""The channel type which is overridden""" - - IN_APP = "in_app" - EMAIL = "email" - SMS = "sms" - CHAT = "chat" - PUSH = "push" - - -class Source(str, Enum): - r"""The source of overrides""" - - SUBSCRIBER = "subscriber" - TEMPLATE = "template" - WORKFLOW_OVERRIDE = "workflowOverride" - - -class OverridesTypedDict(TypedDict): - channel: Channel - r"""The channel type which is overridden""" - source: Source - r"""The source of overrides""" - - -class Overrides(BaseModel): - channel: Channel - r"""The channel type which is overridden""" - - source: Source - r"""The source of overrides""" diff --git a/src/novu_py/models/preferenceoverridesourceenum.py b/src/novu_py/models/preferenceoverridesourceenum.py new file mode 100644 index 00000000..5431f0dd --- /dev/null +++ b/src/novu_py/models/preferenceoverridesourceenum.py @@ -0,0 +1,12 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from enum import Enum + + +class PreferenceOverrideSourceEnum(str, Enum): + r"""The source of overrides""" + + SUBSCRIBER = "subscriber" + TEMPLATE = "template" + WORKFLOW_OVERRIDE = "workflowOverride" diff --git a/src/novu_py/models/providersidenum.py b/src/novu_py/models/providersidenum.py index ac2ae01f..bae372e8 100644 --- a/src/novu_py/models/providersidenum.py +++ b/src/novu_py/models/providersidenum.py @@ -58,6 +58,7 @@ class ProvidersIDEnum(str, Enum): BREVO_SMS = "brevo-sms" EAZY_SMS = "eazy-sms" MOBISHASTRA = "mobishastra" + AFRO_MESSAGE = "afro-message" FCM = "fcm" APNS = "apns" EXPO = "expo" diff --git a/src/novu_py/models/removesubscribersrequestdto.py b/src/novu_py/models/removesubscribersrequestdto.py deleted file mode 100644 index 13fc863a..00000000 --- a/src/novu_py/models/removesubscribersrequestdto.py +++ /dev/null @@ -1,16 +0,0 @@ -"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" - -from __future__ import annotations -from novu_py.types import BaseModel -from typing import List -from typing_extensions import TypedDict - - -class RemoveSubscribersRequestDtoTypedDict(TypedDict): - subscribers: List[str] - r"""List of subscriber identifiers that will be removed to the topic""" - - -class RemoveSubscribersRequestDto(BaseModel): - subscribers: List[str] - r"""List of subscriber identifiers that will be removed to the topic""" diff --git a/src/novu_py/models/renametopicrequestdto.py b/src/novu_py/models/renametopicrequestdto.py deleted file mode 100644 index 5f10f83d..00000000 --- a/src/novu_py/models/renametopicrequestdto.py +++ /dev/null @@ -1,15 +0,0 @@ -"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" - -from __future__ import annotations -from novu_py.types import BaseModel -from typing_extensions import TypedDict - - -class RenameTopicRequestDtoTypedDict(TypedDict): - name: str - r"""User defined custom name and provided by the user to rename the topic.""" - - -class RenameTopicRequestDto(BaseModel): - name: str - r"""User defined custom name and provided by the user to rename the topic.""" diff --git a/src/novu_py/models/renametopicresponsedto.py b/src/novu_py/models/renametopicresponsedto.py deleted file mode 100644 index 0d0c6815..00000000 --- a/src/novu_py/models/renametopicresponsedto.py +++ /dev/null @@ -1,30 +0,0 @@ -"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" - -from __future__ import annotations -from novu_py.types import BaseModel -import pydantic -from typing import List, Optional -from typing_extensions import Annotated, NotRequired, TypedDict - - -class RenameTopicResponseDtoTypedDict(TypedDict): - organization_id: str - environment_id: str - key: str - name: str - subscribers: List[str] - id: NotRequired[str] - - -class RenameTopicResponseDto(BaseModel): - organization_id: Annotated[str, pydantic.Field(alias="_organizationId")] - - environment_id: Annotated[str, pydantic.Field(alias="_environmentId")] - - key: str - - name: str - - subscribers: List[str] - - id: Annotated[Optional[str], pydantic.Field(alias="_id")] = None diff --git a/src/novu_py/models/stepfilterdto.py b/src/novu_py/models/stepfilterdto.py index c90f41f4..259589e3 100644 --- a/src/novu_py/models/stepfilterdto.py +++ b/src/novu_py/models/stepfilterdto.py @@ -10,7 +10,7 @@ from typing_extensions import Annotated, TypedDict -class Value(str, Enum): +class StepFilterDtoValue(str, Enum): AND = "AND" OR = "OR" @@ -18,7 +18,7 @@ class Value(str, Enum): class StepFilterDtoTypedDict(TypedDict): is_negated: bool type: BuilderFieldTypeEnum - value: Value + value: StepFilterDtoValue children: List[FieldFilterPartDtoTypedDict] @@ -27,6 +27,6 @@ class StepFilterDto(BaseModel): type: BuilderFieldTypeEnum - value: Value + value: StepFilterDtoValue children: List[FieldFilterPartDto] diff --git a/src/novu_py/models/stepsoverrides.py b/src/novu_py/models/stepsoverrides.py new file mode 100644 index 00000000..bbfc2855 --- /dev/null +++ b/src/novu_py/models/stepsoverrides.py @@ -0,0 +1,16 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from novu_py.types import BaseModel +from typing import Any, Dict +from typing_extensions import TypedDict + + +class StepsOverridesTypedDict(TypedDict): + providers: Dict[str, Dict[str, Any]] + r"""Passing the provider id and the provider specific configurations""" + + +class StepsOverrides(BaseModel): + providers: Dict[str, Dict[str, Any]] + r"""Passing the provider id and the provider specific configurations""" diff --git a/src/novu_py/models/steptypeenum.py b/src/novu_py/models/steptypeenum.py index 071be35d..55a2e085 100644 --- a/src/novu_py/models/steptypeenum.py +++ b/src/novu_py/models/steptypeenum.py @@ -5,7 +5,7 @@ class StepTypeEnum(str, Enum): - r"""Channels of the notification""" + r"""Type of the step""" IN_APP = "in_app" EMAIL = "email" diff --git a/src/novu_py/models/subscriberchanneldto.py b/src/novu_py/models/subscriberchanneldto.py index 309d7905..3e248da1 100644 --- a/src/novu_py/models/subscriberchanneldto.py +++ b/src/novu_py/models/subscriberchanneldto.py @@ -9,7 +9,7 @@ from typing_extensions import Annotated, NotRequired, TypedDict -class SubscriberChannelDtoProviderID(str, Enum): +class ProviderID(str, Enum): r"""The ID of the chat or push provider.""" SLACK = "slack" @@ -32,7 +32,7 @@ class SubscriberChannelDtoProviderID(str, Enum): class SubscriberChannelDtoTypedDict(TypedDict): - provider_id: SubscriberChannelDtoProviderID + provider_id: ProviderID r"""The ID of the chat or push provider.""" credentials: ChannelCredentialsDtoTypedDict r"""Credentials for the channel.""" @@ -41,9 +41,7 @@ class SubscriberChannelDtoTypedDict(TypedDict): class SubscriberChannelDto(BaseModel): - provider_id: Annotated[ - SubscriberChannelDtoProviderID, pydantic.Field(alias="providerId") - ] + provider_id: Annotated[ProviderID, pydantic.Field(alias="providerId")] r"""The ID of the chat or push provider.""" credentials: ChannelCredentialsDto diff --git a/src/novu_py/models/subscriberdto.py b/src/novu_py/models/subscriberdto.py new file mode 100644 index 00000000..2736f36f --- /dev/null +++ b/src/novu_py/models/subscriberdto.py @@ -0,0 +1,76 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from novu_py.types import BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL +import pydantic +from pydantic import model_serializer +from typing_extensions import Annotated, NotRequired, TypedDict + + +class SubscriberDtoTypedDict(TypedDict): + id: str + r"""The identifier of the subscriber""" + subscriber_id: str + r"""The external identifier of the subscriber""" + avatar: NotRequired[Nullable[str]] + r"""The avatar URL of the subscriber""" + first_name: NotRequired[Nullable[str]] + r"""The first name of the subscriber""" + last_name: NotRequired[Nullable[str]] + r"""The last name of the subscriber""" + email: NotRequired[Nullable[str]] + r"""The email of the subscriber""" + + +class SubscriberDto(BaseModel): + id: Annotated[str, pydantic.Field(alias="_id")] + r"""The identifier of the subscriber""" + + subscriber_id: Annotated[str, pydantic.Field(alias="subscriberId")] + r"""The external identifier of the subscriber""" + + avatar: OptionalNullable[str] = UNSET + r"""The avatar URL of the subscriber""" + + first_name: Annotated[OptionalNullable[str], pydantic.Field(alias="firstName")] = ( + UNSET + ) + r"""The first name of the subscriber""" + + last_name: Annotated[OptionalNullable[str], pydantic.Field(alias="lastName")] = ( + UNSET + ) + r"""The last name of the subscriber""" + + email: OptionalNullable[str] = UNSET + r"""The email of the subscriber""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = ["avatar", "firstName", "lastName", "email"] + nullable_fields = ["avatar", "firstName", "lastName", "email"] + null_default_fields = [] + + serialized = handler(self) + + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + serialized.pop(k, None) + + optional_nullable = k in optional_fields and k in nullable_fields + is_set = ( + self.__pydantic_fields_set__.intersection({n}) + or k in null_default_fields + ) # pylint: disable=no-member + + if val is not None and val != UNSET_SENTINEL: + m[k] = val + elif val != UNSET_SENTINEL and ( + not k in optional_fields or (optional_nullable and is_set) + ): + m[k] = val + + return m diff --git a/src/novu_py/models/globalpreferencedto.py b/src/novu_py/models/subscriberglobalpreferencedto.py similarity index 57% rename from src/novu_py/models/globalpreferencedto.py rename to src/novu_py/models/subscriberglobalpreferencedto.py index 15e429c4..ffac99e2 100644 --- a/src/novu_py/models/globalpreferencedto.py +++ b/src/novu_py/models/subscriberglobalpreferencedto.py @@ -1,21 +1,24 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .preferencechannels import PreferenceChannels, PreferenceChannelsTypedDict +from .subscriberpreferencechannels import ( + SubscriberPreferenceChannels, + SubscriberPreferenceChannelsTypedDict, +) from novu_py.types import BaseModel from typing_extensions import TypedDict -class GlobalPreferenceDtoTypedDict(TypedDict): +class SubscriberGlobalPreferenceDtoTypedDict(TypedDict): enabled: bool r"""Whether notifications are enabled globally""" - channels: PreferenceChannelsTypedDict + channels: SubscriberPreferenceChannelsTypedDict r"""Channel-specific preference settings""" -class GlobalPreferenceDto(BaseModel): +class SubscriberGlobalPreferenceDto(BaseModel): enabled: bool r"""Whether notifications are enabled globally""" - channels: PreferenceChannels + channels: SubscriberPreferenceChannels r"""Channel-specific preference settings""" diff --git a/src/novu_py/models/preferencechannels.py b/src/novu_py/models/subscriberpreferencechannels.py similarity index 52% rename from src/novu_py/models/preferencechannels.py rename to src/novu_py/models/subscriberpreferencechannels.py index 5f186453..59a0eade 100644 --- a/src/novu_py/models/preferencechannels.py +++ b/src/novu_py/models/subscriberpreferencechannels.py @@ -6,21 +6,31 @@ from typing_extensions import NotRequired, TypedDict -class PreferenceChannelsTypedDict(TypedDict): +class SubscriberPreferenceChannelsTypedDict(TypedDict): email: NotRequired[bool] + r"""Email channel preference""" sms: NotRequired[bool] + r"""SMS channel preference""" in_app: NotRequired[bool] + r"""In-app channel preference""" chat: NotRequired[bool] + r"""Chat channel preference""" push: NotRequired[bool] + r"""Push notification channel preference""" -class PreferenceChannels(BaseModel): +class SubscriberPreferenceChannels(BaseModel): email: Optional[bool] = None + r"""Email channel preference""" sms: Optional[bool] = None + r"""SMS channel preference""" in_app: Optional[bool] = None + r"""In-app channel preference""" chat: Optional[bool] = None + r"""Chat channel preference""" push: Optional[bool] = None + r"""Push notification channel preference""" diff --git a/src/novu_py/models/subscriberpreferenceoverridedto.py b/src/novu_py/models/subscriberpreferenceoverridedto.py new file mode 100644 index 00000000..f59ca2fb --- /dev/null +++ b/src/novu_py/models/subscriberpreferenceoverridedto.py @@ -0,0 +1,22 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .channeltypeenum import ChannelTypeEnum +from .preferenceoverridesourceenum import PreferenceOverrideSourceEnum +from novu_py.types import BaseModel +from typing_extensions import TypedDict + + +class SubscriberPreferenceOverrideDtoTypedDict(TypedDict): + channel: ChannelTypeEnum + r"""Channel type through which the message is sent""" + source: PreferenceOverrideSourceEnum + r"""The source of overrides""" + + +class SubscriberPreferenceOverrideDto(BaseModel): + channel: ChannelTypeEnum + r"""Channel type through which the message is sent""" + + source: PreferenceOverrideSourceEnum + r"""The source of overrides""" diff --git a/src/novu_py/models/workflowinfodto.py b/src/novu_py/models/subscriberpreferencesworkflowinfodto.py similarity index 86% rename from src/novu_py/models/workflowinfodto.py rename to src/novu_py/models/subscriberpreferencesworkflowinfodto.py index 7e247b43..3b570502 100644 --- a/src/novu_py/models/workflowinfodto.py +++ b/src/novu_py/models/subscriberpreferencesworkflowinfodto.py @@ -7,7 +7,7 @@ from typing_extensions import Annotated, NotRequired, TypedDict -class WorkflowInfoDtoTypedDict(TypedDict): +class SubscriberPreferencesWorkflowInfoDtoTypedDict(TypedDict): slug: str r"""Workflow slug""" identifier: str @@ -18,7 +18,7 @@ class WorkflowInfoDtoTypedDict(TypedDict): r"""last updated date""" -class WorkflowInfoDto(BaseModel): +class SubscriberPreferencesWorkflowInfoDto(BaseModel): slug: str r"""Workflow slug""" diff --git a/src/novu_py/models/subscriberresponsedto.py b/src/novu_py/models/subscriberresponsedto.py index e56fbffc..1c01d639 100644 --- a/src/novu_py/models/subscriberresponsedto.py +++ b/src/novu_py/models/subscriberresponsedto.py @@ -28,7 +28,7 @@ class SubscriberResponseDtoTypedDict(TypedDict): r"""The first name of the subscriber.""" last_name: NotRequired[str] r"""The last name of the subscriber.""" - email: NotRequired[Nullable[str]] + email: NotRequired[str] r"""The email address of the subscriber.""" phone: NotRequired[str] r"""The phone number of the subscriber.""" @@ -80,7 +80,7 @@ class SubscriberResponseDto(BaseModel): last_name: Annotated[Optional[str], pydantic.Field(alias="lastName")] = None r"""The last name of the subscriber.""" - email: OptionalNullable[str] = UNSET + email: Optional[str] = None r"""The email address of the subscriber.""" phone: Optional[str] = None @@ -138,7 +138,7 @@ def serialize_model(self, handler): "data", "timezone", ] - nullable_fields = ["email", "data"] + nullable_fields = ["data"] null_default_fields = [] serialized = handler(self) diff --git a/src/novu_py/models/subscriberscontroller_listsubscribertopicsop.py b/src/novu_py/models/subscriberscontroller_listsubscribertopicsop.py new file mode 100644 index 00000000..4a6fb37c --- /dev/null +++ b/src/novu_py/models/subscriberscontroller_listsubscribertopicsop.py @@ -0,0 +1,118 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .listtopicsubscriptionsresponsedto import ( + ListTopicSubscriptionsResponseDto, + ListTopicSubscriptionsResponseDtoTypedDict, +) +from enum import Enum +from novu_py.types import BaseModel +from novu_py.utils import ( + FieldMetadata, + HeaderMetadata, + PathParamMetadata, + QueryParamMetadata, +) +import pydantic +from typing import Dict, List, Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class QueryParamOrderDirection(str, Enum): + r"""Direction of sorting""" + + ASC = "ASC" + DESC = "DESC" + + +class SubscribersControllerListSubscriberTopicsRequestTypedDict(TypedDict): + subscriber_id: str + r"""The identifier of the subscriber""" + after: NotRequired[str] + r"""Cursor for pagination indicating the starting point after which to fetch results.""" + before: NotRequired[str] + r"""Cursor for pagination indicating the ending point before which to fetch results.""" + limit: NotRequired[float] + r"""Limit the number of items to return (max 100)""" + order_direction: NotRequired[QueryParamOrderDirection] + r"""Direction of sorting""" + order_by: NotRequired[str] + r"""Field to order by""" + include_cursor: NotRequired[bool] + r"""Include cursor item in response""" + key: NotRequired[str] + r"""Filter by topic key""" + idempotency_key: NotRequired[str] + r"""A header for idempotency purposes""" + + +class SubscribersControllerListSubscriberTopicsRequest(BaseModel): + subscriber_id: Annotated[ + str, + pydantic.Field(alias="subscriberId"), + FieldMetadata(path=PathParamMetadata(style="simple", explode=False)), + ] + r"""The identifier of the subscriber""" + + after: Annotated[ + Optional[str], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""Cursor for pagination indicating the starting point after which to fetch results.""" + + before: Annotated[ + Optional[str], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""Cursor for pagination indicating the ending point before which to fetch results.""" + + limit: Annotated[ + Optional[float], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""Limit the number of items to return (max 100)""" + + order_direction: Annotated[ + Optional[QueryParamOrderDirection], + pydantic.Field(alias="orderDirection"), + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""Direction of sorting""" + + order_by: Annotated[ + Optional[str], + pydantic.Field(alias="orderBy"), + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""Field to order by""" + + include_cursor: Annotated[ + Optional[bool], + pydantic.Field(alias="includeCursor"), + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""Include cursor item in response""" + + key: Annotated[ + Optional[str], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""Filter by topic key""" + + idempotency_key: Annotated[ + Optional[str], + pydantic.Field(alias="idempotency-key"), + FieldMetadata(header=HeaderMetadata(style="simple", explode=False)), + ] = None + r"""A header for idempotency purposes""" + + +class SubscribersControllerListSubscriberTopicsResponseTypedDict(TypedDict): + headers: Dict[str, List[str]] + result: ListTopicSubscriptionsResponseDtoTypedDict + + +class SubscribersControllerListSubscriberTopicsResponse(BaseModel): + headers: Dict[str, List[str]] + + result: ListTopicSubscriptionsResponseDto diff --git a/src/novu_py/models/subscriberworkflowpreferencedto.py b/src/novu_py/models/subscriberworkflowpreferencedto.py new file mode 100644 index 00000000..2dad1203 --- /dev/null +++ b/src/novu_py/models/subscriberworkflowpreferencedto.py @@ -0,0 +1,43 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .subscriberpreferencechannels import ( + SubscriberPreferenceChannels, + SubscriberPreferenceChannelsTypedDict, +) +from .subscriberpreferenceoverridedto import ( + SubscriberPreferenceOverrideDto, + SubscriberPreferenceOverrideDtoTypedDict, +) +from .subscriberpreferencesworkflowinfodto import ( + SubscriberPreferencesWorkflowInfoDto, + SubscriberPreferencesWorkflowInfoDtoTypedDict, +) +from novu_py.types import BaseModel +from typing import List +from typing_extensions import TypedDict + + +class SubscriberWorkflowPreferenceDtoTypedDict(TypedDict): + enabled: bool + r"""Whether notifications are enabled for this workflow""" + channels: SubscriberPreferenceChannelsTypedDict + r"""Channel-specific preference settings for this workflow""" + overrides: List[SubscriberPreferenceOverrideDtoTypedDict] + r"""List of preference overrides""" + workflow: SubscriberPreferencesWorkflowInfoDtoTypedDict + r"""Workflow information""" + + +class SubscriberWorkflowPreferenceDto(BaseModel): + enabled: bool + r"""Whether notifications are enabled for this workflow""" + + channels: SubscriberPreferenceChannels + r"""Channel-specific preference settings for this workflow""" + + overrides: List[SubscriberPreferenceOverrideDto] + r"""List of preference overrides""" + + workflow: SubscriberPreferencesWorkflowInfoDto + r"""Workflow information""" diff --git a/src/novu_py/models/subscriptiondto.py b/src/novu_py/models/subscriptiondto.py new file mode 100644 index 00000000..22885ef5 --- /dev/null +++ b/src/novu_py/models/subscriptiondto.py @@ -0,0 +1,141 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .topicdto import TopicDto, TopicDtoTypedDict +from novu_py.types import BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL +import pydantic +from pydantic import model_serializer +from typing_extensions import Annotated, NotRequired, TypedDict + + +class SubscriberTypedDict(TypedDict): + r"""The subscriber information""" + + id: str + r"""The identifier of the subscriber""" + subscriber_id: str + r"""The external identifier of the subscriber""" + avatar: NotRequired[Nullable[str]] + r"""The avatar URL of the subscriber""" + first_name: NotRequired[Nullable[str]] + r"""The first name of the subscriber""" + last_name: NotRequired[Nullable[str]] + r"""The last name of the subscriber""" + email: NotRequired[Nullable[str]] + r"""The email of the subscriber""" + + +class Subscriber(BaseModel): + r"""The subscriber information""" + + id: Annotated[str, pydantic.Field(alias="_id")] + r"""The identifier of the subscriber""" + + subscriber_id: Annotated[str, pydantic.Field(alias="subscriberId")] + r"""The external identifier of the subscriber""" + + avatar: OptionalNullable[str] = UNSET + r"""The avatar URL of the subscriber""" + + first_name: Annotated[OptionalNullable[str], pydantic.Field(alias="firstName")] = ( + UNSET + ) + r"""The first name of the subscriber""" + + last_name: Annotated[OptionalNullable[str], pydantic.Field(alias="lastName")] = ( + UNSET + ) + r"""The last name of the subscriber""" + + email: OptionalNullable[str] = UNSET + r"""The email of the subscriber""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = ["avatar", "firstName", "lastName", "email"] + nullable_fields = ["avatar", "firstName", "lastName", "email"] + null_default_fields = [] + + serialized = handler(self) + + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + serialized.pop(k, None) + + optional_nullable = k in optional_fields and k in nullable_fields + is_set = ( + self.__pydantic_fields_set__.intersection({n}) + or k in null_default_fields + ) # pylint: disable=no-member + + if val is not None and val != UNSET_SENTINEL: + m[k] = val + elif val != UNSET_SENTINEL and ( + not k in optional_fields or (optional_nullable and is_set) + ): + m[k] = val + + return m + + +class SubscriptionDtoTypedDict(TypedDict): + id: str + r"""The unique identifier of the subscription""" + topic: TopicDtoTypedDict + r"""The topic information""" + subscriber: Nullable[SubscriberTypedDict] + r"""The subscriber information""" + created_at: str + r"""The creation date of the subscription""" + updated_at: str + r"""The last update date of the subscription""" + + +class SubscriptionDto(BaseModel): + id: Annotated[str, pydantic.Field(alias="_id")] + r"""The unique identifier of the subscription""" + + topic: TopicDto + r"""The topic information""" + + subscriber: Nullable[Subscriber] + r"""The subscriber information""" + + created_at: Annotated[str, pydantic.Field(alias="createdAt")] + r"""The creation date of the subscription""" + + updated_at: Annotated[str, pydantic.Field(alias="updatedAt")] + r"""The last update date of the subscription""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = [] + nullable_fields = ["subscriber"] + null_default_fields = [] + + serialized = handler(self) + + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + serialized.pop(k, None) + + optional_nullable = k in optional_fields and k in nullable_fields + is_set = ( + self.__pydantic_fields_set__.intersection({n}) + or k in null_default_fields + ) # pylint: disable=no-member + + if val is not None and val != UNSET_SENTINEL: + m[k] = val + elif val != UNSET_SENTINEL and ( + not k in optional_fields or (optional_nullable and is_set) + ): + m[k] = val + + return m diff --git a/src/novu_py/models/subscriptionerrordto.py b/src/novu_py/models/subscriptionerrordto.py new file mode 100644 index 00000000..5e51483d --- /dev/null +++ b/src/novu_py/models/subscriptionerrordto.py @@ -0,0 +1,26 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from novu_py.types import BaseModel +import pydantic +from typing_extensions import Annotated, TypedDict + + +class SubscriptionErrorDtoTypedDict(TypedDict): + subscriber_id: str + r"""The subscriber ID that failed""" + code: str + r"""The error code""" + message: str + r"""The error message""" + + +class SubscriptionErrorDto(BaseModel): + subscriber_id: Annotated[str, pydantic.Field(alias="subscriberId")] + r"""The subscriber ID that failed""" + + code: str + r"""The error code""" + + message: str + r"""The error message""" diff --git a/src/novu_py/models/subscriptionsdeleteerrordto.py b/src/novu_py/models/subscriptionsdeleteerrordto.py new file mode 100644 index 00000000..ba81238f --- /dev/null +++ b/src/novu_py/models/subscriptionsdeleteerrordto.py @@ -0,0 +1,26 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from novu_py.types import BaseModel +import pydantic +from typing_extensions import Annotated, TypedDict + + +class SubscriptionsDeleteErrorDtoTypedDict(TypedDict): + subscriber_id: str + r"""The subscriber ID that failed""" + code: str + r"""The error code""" + message: str + r"""The error message""" + + +class SubscriptionsDeleteErrorDto(BaseModel): + subscriber_id: Annotated[str, pydantic.Field(alias="subscriberId")] + r"""The subscriber ID that failed""" + + code: str + r"""The error code""" + + message: str + r"""The error message""" diff --git a/src/novu_py/models/timedconfig.py b/src/novu_py/models/timedconfig.py index 2200b6f6..2aa1a5cc 100644 --- a/src/novu_py/models/timedconfig.py +++ b/src/novu_py/models/timedconfig.py @@ -8,7 +8,7 @@ from typing_extensions import Annotated, NotRequired, TypedDict -class TimedConfigWeekDays(str, Enum): +class WeekDays(str, Enum): MONDAY = "monday" TUESDAY = "tuesday" WEDNESDAY = "wednesday" @@ -47,7 +47,7 @@ class MonthlyType(str, Enum): class TimedConfigTypedDict(TypedDict): at_time: NotRequired[str] - week_days: NotRequired[List[TimedConfigWeekDays]] + week_days: NotRequired[List[WeekDays]] month_days: NotRequired[List[str]] ordinal: NotRequired[Ordinal] ordinal_value: NotRequired[OrdinalValue] @@ -57,9 +57,9 @@ class TimedConfigTypedDict(TypedDict): class TimedConfig(BaseModel): at_time: Annotated[Optional[str], pydantic.Field(alias="atTime")] = None - week_days: Annotated[ - Optional[List[TimedConfigWeekDays]], pydantic.Field(alias="weekDays") - ] = None + week_days: Annotated[Optional[List[WeekDays]], pydantic.Field(alias="weekDays")] = ( + None + ) month_days: Annotated[Optional[List[str]], pydantic.Field(alias="monthDays")] = None diff --git a/src/novu_py/models/topicdto.py b/src/novu_py/models/topicdto.py index 6246cc4a..4e5a27fb 100644 --- a/src/novu_py/models/topicdto.py +++ b/src/novu_py/models/topicdto.py @@ -3,28 +3,25 @@ from __future__ import annotations from novu_py.types import BaseModel import pydantic -from typing import List, Optional +from typing import Optional from typing_extensions import Annotated, NotRequired, TypedDict class TopicDtoTypedDict(TypedDict): - organization_id: str - environment_id: str + id: str + r"""The internal unique identifier of the topic""" key: str - name: str - subscribers: List[str] - id: NotRequired[str] + r"""The key identifier of the topic used in your application. Should be unique on the environment level.""" + name: NotRequired[str] + r"""The name of the topic""" class TopicDto(BaseModel): - organization_id: Annotated[str, pydantic.Field(alias="_organizationId")] - - environment_id: Annotated[str, pydantic.Field(alias="_environmentId")] + id: Annotated[str, pydantic.Field(alias="_id")] + r"""The internal unique identifier of the topic""" key: str + r"""The key identifier of the topic used in your application. Should be unique on the environment level.""" - name: str - - subscribers: List[str] - - id: Annotated[Optional[str], pydantic.Field(alias="_id")] = None + name: Optional[str] = None + r"""The name of the topic""" diff --git a/src/novu_py/models/topicresponsedto.py b/src/novu_py/models/topicresponsedto.py new file mode 100644 index 00000000..a9fcad47 --- /dev/null +++ b/src/novu_py/models/topicresponsedto.py @@ -0,0 +1,37 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from novu_py.types import BaseModel +import pydantic +from typing import Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class TopicResponseDtoTypedDict(TypedDict): + id: str + r"""The identifier of the topic""" + key: str + r"""The unique key of the topic""" + name: NotRequired[str] + r"""The name of the topic""" + created_at: NotRequired[str] + r"""The date the topic was created""" + updated_at: NotRequired[str] + r"""The date the topic was last updated""" + + +class TopicResponseDto(BaseModel): + id: Annotated[str, pydantic.Field(alias="_id")] + r"""The identifier of the topic""" + + key: str + r"""The unique key of the topic""" + + name: Optional[str] = None + r"""The name of the topic""" + + created_at: Annotated[Optional[str], pydantic.Field(alias="createdAt")] = None + r"""The date the topic was created""" + + updated_at: Annotated[Optional[str], pydantic.Field(alias="updatedAt")] = None + r"""The date the topic was last updated""" diff --git a/src/novu_py/models/topicscontroller_assignop.py b/src/novu_py/models/topicscontroller_createtopicsubscriptionsop.py similarity index 52% rename from src/novu_py/models/topicscontroller_assignop.py rename to src/novu_py/models/topicscontroller_createtopicsubscriptionsop.py index e9ea6918..602d15ad 100644 --- a/src/novu_py/models/topicscontroller_assignop.py +++ b/src/novu_py/models/topicscontroller_createtopicsubscriptionsop.py @@ -1,13 +1,13 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .addsubscribersrequestdto import ( - AddSubscribersRequestDto, - AddSubscribersRequestDtoTypedDict, +from .createtopicsubscriptionsrequestdto import ( + CreateTopicSubscriptionsRequestDto, + CreateTopicSubscriptionsRequestDtoTypedDict, ) -from .assignsubscribertotopicdto import ( - AssignSubscriberToTopicDto, - AssignSubscriberToTopicDtoTypedDict, +from .createtopicsubscriptionsresponsedto import ( + CreateTopicSubscriptionsResponseDto, + CreateTopicSubscriptionsResponseDtoTypedDict, ) from novu_py.types import BaseModel from novu_py.utils import ( @@ -21,24 +21,24 @@ from typing_extensions import Annotated, NotRequired, TypedDict -class TopicsControllerAssignRequestTypedDict(TypedDict): +class TopicsControllerCreateTopicSubscriptionsRequestTypedDict(TypedDict): topic_key: str - r"""The topic key""" - add_subscribers_request_dto: AddSubscribersRequestDtoTypedDict + r"""The key identifier of the topic""" + create_topic_subscriptions_request_dto: CreateTopicSubscriptionsRequestDtoTypedDict idempotency_key: NotRequired[str] r"""A header for idempotency purposes""" -class TopicsControllerAssignRequest(BaseModel): +class TopicsControllerCreateTopicSubscriptionsRequest(BaseModel): topic_key: Annotated[ str, pydantic.Field(alias="topicKey"), FieldMetadata(path=PathParamMetadata(style="simple", explode=False)), ] - r"""The topic key""" + r"""The key identifier of the topic""" - add_subscribers_request_dto: Annotated[ - AddSubscribersRequestDto, + create_topic_subscriptions_request_dto: Annotated[ + CreateTopicSubscriptionsRequestDto, FieldMetadata(request=RequestMetadata(media_type="application/json")), ] @@ -50,12 +50,12 @@ class TopicsControllerAssignRequest(BaseModel): r"""A header for idempotency purposes""" -class TopicsControllerAssignResponseTypedDict(TypedDict): +class TopicsControllerCreateTopicSubscriptionsResponseTypedDict(TypedDict): headers: Dict[str, List[str]] - result: AssignSubscriberToTopicDtoTypedDict + result: CreateTopicSubscriptionsResponseDtoTypedDict -class TopicsControllerAssignResponse(BaseModel): +class TopicsControllerCreateTopicSubscriptionsResponse(BaseModel): headers: Dict[str, List[str]] - result: AssignSubscriberToTopicDto + result: CreateTopicSubscriptionsResponseDto diff --git a/src/novu_py/models/topicscontroller_deletetopicop.py b/src/novu_py/models/topicscontroller_deletetopicop.py index 766bdf20..ca19aca4 100644 --- a/src/novu_py/models/topicscontroller_deletetopicop.py +++ b/src/novu_py/models/topicscontroller_deletetopicop.py @@ -1,6 +1,10 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from .deletetopicresponsedto import ( + DeleteTopicResponseDto, + DeleteTopicResponseDtoTypedDict, +) from novu_py.types import BaseModel from novu_py.utils import FieldMetadata, HeaderMetadata, PathParamMetadata import pydantic @@ -10,7 +14,7 @@ class TopicsControllerDeleteTopicRequestTypedDict(TypedDict): topic_key: str - r"""The topic key""" + r"""The key identifier of the topic""" idempotency_key: NotRequired[str] r"""A header for idempotency purposes""" @@ -21,7 +25,7 @@ class TopicsControllerDeleteTopicRequest(BaseModel): pydantic.Field(alias="topicKey"), FieldMetadata(path=PathParamMetadata(style="simple", explode=False)), ] - r"""The topic key""" + r"""The key identifier of the topic""" idempotency_key: Annotated[ Optional[str], @@ -33,7 +37,10 @@ class TopicsControllerDeleteTopicRequest(BaseModel): class TopicsControllerDeleteTopicResponseTypedDict(TypedDict): headers: Dict[str, List[str]] + result: DeleteTopicResponseDtoTypedDict class TopicsControllerDeleteTopicResponse(BaseModel): headers: Dict[str, List[str]] + + result: DeleteTopicResponseDto diff --git a/src/novu_py/models/topicscontroller_removesubscribersop.py b/src/novu_py/models/topicscontroller_deletetopicsubscriptionsop.py similarity index 52% rename from src/novu_py/models/topicscontroller_removesubscribersop.py rename to src/novu_py/models/topicscontroller_deletetopicsubscriptionsop.py index 8061083d..4c7497a5 100644 --- a/src/novu_py/models/topicscontroller_removesubscribersop.py +++ b/src/novu_py/models/topicscontroller_deletetopicsubscriptionsop.py @@ -1,9 +1,13 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .removesubscribersrequestdto import ( - RemoveSubscribersRequestDto, - RemoveSubscribersRequestDtoTypedDict, +from .deletetopicsubscriptionsrequestdto import ( + DeleteTopicSubscriptionsRequestDto, + DeleteTopicSubscriptionsRequestDtoTypedDict, +) +from .deletetopicsubscriptionsresponsedto import ( + DeleteTopicSubscriptionsResponseDto, + DeleteTopicSubscriptionsResponseDtoTypedDict, ) from novu_py.types import BaseModel from novu_py.utils import ( @@ -17,24 +21,24 @@ from typing_extensions import Annotated, NotRequired, TypedDict -class TopicsControllerRemoveSubscribersRequestTypedDict(TypedDict): +class TopicsControllerDeleteTopicSubscriptionsRequestTypedDict(TypedDict): topic_key: str - r"""The topic key""" - remove_subscribers_request_dto: RemoveSubscribersRequestDtoTypedDict + r"""The key identifier of the topic""" + delete_topic_subscriptions_request_dto: DeleteTopicSubscriptionsRequestDtoTypedDict idempotency_key: NotRequired[str] r"""A header for idempotency purposes""" -class TopicsControllerRemoveSubscribersRequest(BaseModel): +class TopicsControllerDeleteTopicSubscriptionsRequest(BaseModel): topic_key: Annotated[ str, pydantic.Field(alias="topicKey"), FieldMetadata(path=PathParamMetadata(style="simple", explode=False)), ] - r"""The topic key""" + r"""The key identifier of the topic""" - remove_subscribers_request_dto: Annotated[ - RemoveSubscribersRequestDto, + delete_topic_subscriptions_request_dto: Annotated[ + DeleteTopicSubscriptionsRequestDto, FieldMetadata(request=RequestMetadata(media_type="application/json")), ] @@ -46,9 +50,12 @@ class TopicsControllerRemoveSubscribersRequest(BaseModel): r"""A header for idempotency purposes""" -class TopicsControllerRemoveSubscribersResponseTypedDict(TypedDict): +class TopicsControllerDeleteTopicSubscriptionsResponseTypedDict(TypedDict): headers: Dict[str, List[str]] + result: DeleteTopicSubscriptionsResponseDtoTypedDict -class TopicsControllerRemoveSubscribersResponse(BaseModel): +class TopicsControllerDeleteTopicSubscriptionsResponse(BaseModel): headers: Dict[str, List[str]] + + result: DeleteTopicSubscriptionsResponseDto diff --git a/src/novu_py/models/topicscontroller_gettopicop.py b/src/novu_py/models/topicscontroller_gettopicop.py index 74439369..6d08bf75 100644 --- a/src/novu_py/models/topicscontroller_gettopicop.py +++ b/src/novu_py/models/topicscontroller_gettopicop.py @@ -1,7 +1,7 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .gettopicresponsedto import GetTopicResponseDto, GetTopicResponseDtoTypedDict +from .topicresponsedto import TopicResponseDto, TopicResponseDtoTypedDict from novu_py.types import BaseModel from novu_py.utils import FieldMetadata, HeaderMetadata, PathParamMetadata import pydantic @@ -11,7 +11,7 @@ class TopicsControllerGetTopicRequestTypedDict(TypedDict): topic_key: str - r"""The topic key""" + r"""The key identifier of the topic""" idempotency_key: NotRequired[str] r"""A header for idempotency purposes""" @@ -22,7 +22,7 @@ class TopicsControllerGetTopicRequest(BaseModel): pydantic.Field(alias="topicKey"), FieldMetadata(path=PathParamMetadata(style="simple", explode=False)), ] - r"""The topic key""" + r"""The key identifier of the topic""" idempotency_key: Annotated[ Optional[str], @@ -34,10 +34,10 @@ class TopicsControllerGetTopicRequest(BaseModel): class TopicsControllerGetTopicResponseTypedDict(TypedDict): headers: Dict[str, List[str]] - result: GetTopicResponseDtoTypedDict + result: TopicResponseDtoTypedDict class TopicsControllerGetTopicResponse(BaseModel): headers: Dict[str, List[str]] - result: GetTopicResponseDto + result: TopicResponseDto diff --git a/src/novu_py/models/topicscontroller_listtopicsop.py b/src/novu_py/models/topicscontroller_listtopicsop.py index b968ded8..a683910c 100644 --- a/src/novu_py/models/topicscontroller_listtopicsop.py +++ b/src/novu_py/models/topicscontroller_listtopicsop.py @@ -1,10 +1,8 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .filtertopicsresponsedto import ( - FilterTopicsResponseDto, - FilterTopicsResponseDtoTypedDict, -) +from .listtopicsresponsedto import ListTopicsResponseDto, ListTopicsResponseDtoTypedDict +from enum import Enum from novu_py.types import BaseModel from novu_py.utils import FieldMetadata, HeaderMetadata, QueryParamMetadata import pydantic @@ -12,36 +10,85 @@ from typing_extensions import Annotated, NotRequired, TypedDict +class TopicsControllerListTopicsQueryParamOrderDirection(str, Enum): + r"""Direction of sorting""" + + ASC = "ASC" + DESC = "DESC" + + class TopicsControllerListTopicsRequestTypedDict(TypedDict): - page: NotRequired[int] - r"""The page number to retrieve (starts from 0)""" - page_size: NotRequired[int] - r"""The number of items to return per page (default: 10)""" + after: NotRequired[str] + r"""Cursor for pagination indicating the starting point after which to fetch results.""" + before: NotRequired[str] + r"""Cursor for pagination indicating the ending point before which to fetch results.""" + limit: NotRequired[float] + r"""Limit the number of items to return (max 100)""" + order_direction: NotRequired[TopicsControllerListTopicsQueryParamOrderDirection] + r"""Direction of sorting""" + order_by: NotRequired[str] + r"""Field to order by""" + include_cursor: NotRequired[bool] + r"""Include cursor item in response""" key: NotRequired[str] - r"""A filter key to apply to the results""" + r"""Key of the topic to filter results.""" + name: NotRequired[str] + r"""Name of the topic to filter results.""" idempotency_key: NotRequired[str] r"""A header for idempotency purposes""" class TopicsControllerListTopicsRequest(BaseModel): - page: Annotated[ - Optional[int], + after: Annotated[ + Optional[str], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""Cursor for pagination indicating the starting point after which to fetch results.""" + + before: Annotated[ + Optional[str], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""Cursor for pagination indicating the ending point before which to fetch results.""" + + limit: Annotated[ + Optional[float], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""Limit the number of items to return (max 100)""" + + order_direction: Annotated[ + Optional[TopicsControllerListTopicsQueryParamOrderDirection], + pydantic.Field(alias="orderDirection"), + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""Direction of sorting""" + + order_by: Annotated[ + Optional[str], + pydantic.Field(alias="orderBy"), FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), - ] = 0 - r"""The page number to retrieve (starts from 0)""" + ] = None + r"""Field to order by""" - page_size: Annotated[ - Optional[int], - pydantic.Field(alias="pageSize"), + include_cursor: Annotated[ + Optional[bool], + pydantic.Field(alias="includeCursor"), FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), - ] = 10 - r"""The number of items to return per page (default: 10)""" + ] = None + r"""Include cursor item in response""" key: Annotated[ Optional[str], FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), ] = None - r"""A filter key to apply to the results""" + r"""Key of the topic to filter results.""" + + name: Annotated[ + Optional[str], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""Name of the topic to filter results.""" idempotency_key: Annotated[ Optional[str], @@ -53,10 +100,10 @@ class TopicsControllerListTopicsRequest(BaseModel): class TopicsControllerListTopicsResponseTypedDict(TypedDict): headers: Dict[str, List[str]] - result: FilterTopicsResponseDtoTypedDict + result: ListTopicsResponseDtoTypedDict class TopicsControllerListTopicsResponse(BaseModel): headers: Dict[str, List[str]] - result: FilterTopicsResponseDto + result: ListTopicsResponseDto diff --git a/src/novu_py/models/topicscontroller_listtopicsubscriptionsop.py b/src/novu_py/models/topicscontroller_listtopicsubscriptionsop.py new file mode 100644 index 00000000..248c2994 --- /dev/null +++ b/src/novu_py/models/topicscontroller_listtopicsubscriptionsop.py @@ -0,0 +1,121 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .listtopicsubscriptionsresponsedto import ( + ListTopicSubscriptionsResponseDto, + ListTopicSubscriptionsResponseDtoTypedDict, +) +from enum import Enum +from novu_py.types import BaseModel +from novu_py.utils import ( + FieldMetadata, + HeaderMetadata, + PathParamMetadata, + QueryParamMetadata, +) +import pydantic +from typing import Dict, List, Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class TopicsControllerListTopicSubscriptionsQueryParamOrderDirection(str, Enum): + r"""Direction of sorting""" + + ASC = "ASC" + DESC = "DESC" + + +class TopicsControllerListTopicSubscriptionsRequestTypedDict(TypedDict): + topic_key: str + r"""The key identifier of the topic""" + after: NotRequired[str] + r"""Cursor for pagination indicating the starting point after which to fetch results.""" + before: NotRequired[str] + r"""Cursor for pagination indicating the ending point before which to fetch results.""" + limit: NotRequired[float] + r"""Limit the number of items to return (max 100)""" + order_direction: NotRequired[ + TopicsControllerListTopicSubscriptionsQueryParamOrderDirection + ] + r"""Direction of sorting""" + order_by: NotRequired[str] + r"""Field to order by""" + include_cursor: NotRequired[bool] + r"""Include cursor item in response""" + subscriber_id: NotRequired[str] + r"""Filter by subscriber ID""" + idempotency_key: NotRequired[str] + r"""A header for idempotency purposes""" + + +class TopicsControllerListTopicSubscriptionsRequest(BaseModel): + topic_key: Annotated[ + str, + pydantic.Field(alias="topicKey"), + FieldMetadata(path=PathParamMetadata(style="simple", explode=False)), + ] + r"""The key identifier of the topic""" + + after: Annotated[ + Optional[str], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""Cursor for pagination indicating the starting point after which to fetch results.""" + + before: Annotated[ + Optional[str], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""Cursor for pagination indicating the ending point before which to fetch results.""" + + limit: Annotated[ + Optional[float], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""Limit the number of items to return (max 100)""" + + order_direction: Annotated[ + Optional[TopicsControllerListTopicSubscriptionsQueryParamOrderDirection], + pydantic.Field(alias="orderDirection"), + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""Direction of sorting""" + + order_by: Annotated[ + Optional[str], + pydantic.Field(alias="orderBy"), + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""Field to order by""" + + include_cursor: Annotated[ + Optional[bool], + pydantic.Field(alias="includeCursor"), + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""Include cursor item in response""" + + subscriber_id: Annotated[ + Optional[str], + pydantic.Field(alias="subscriberId"), + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""Filter by subscriber ID""" + + idempotency_key: Annotated[ + Optional[str], + pydantic.Field(alias="idempotency-key"), + FieldMetadata(header=HeaderMetadata(style="simple", explode=False)), + ] = None + r"""A header for idempotency purposes""" + + +class TopicsControllerListTopicSubscriptionsResponseTypedDict(TypedDict): + headers: Dict[str, List[str]] + result: ListTopicSubscriptionsResponseDtoTypedDict + + +class TopicsControllerListTopicSubscriptionsResponse(BaseModel): + headers: Dict[str, List[str]] + + result: ListTopicSubscriptionsResponseDto diff --git a/src/novu_py/models/topicscontroller_renametopicop.py b/src/novu_py/models/topicscontroller_updatetopicop.py similarity index 61% rename from src/novu_py/models/topicscontroller_renametopicop.py rename to src/novu_py/models/topicscontroller_updatetopicop.py index 60bd6af2..d95da16e 100644 --- a/src/novu_py/models/topicscontroller_renametopicop.py +++ b/src/novu_py/models/topicscontroller_updatetopicop.py @@ -1,11 +1,8 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .renametopicrequestdto import RenameTopicRequestDto, RenameTopicRequestDtoTypedDict -from .renametopicresponsedto import ( - RenameTopicResponseDto, - RenameTopicResponseDtoTypedDict, -) +from .topicresponsedto import TopicResponseDto, TopicResponseDtoTypedDict +from .updatetopicrequestdto import UpdateTopicRequestDto, UpdateTopicRequestDtoTypedDict from novu_py.types import BaseModel from novu_py.utils import ( FieldMetadata, @@ -18,24 +15,24 @@ from typing_extensions import Annotated, NotRequired, TypedDict -class TopicsControllerRenameTopicRequestTypedDict(TypedDict): +class TopicsControllerUpdateTopicRequestTypedDict(TypedDict): topic_key: str - r"""The topic key""" - rename_topic_request_dto: RenameTopicRequestDtoTypedDict + r"""The key identifier of the topic""" + update_topic_request_dto: UpdateTopicRequestDtoTypedDict idempotency_key: NotRequired[str] r"""A header for idempotency purposes""" -class TopicsControllerRenameTopicRequest(BaseModel): +class TopicsControllerUpdateTopicRequest(BaseModel): topic_key: Annotated[ str, pydantic.Field(alias="topicKey"), FieldMetadata(path=PathParamMetadata(style="simple", explode=False)), ] - r"""The topic key""" + r"""The key identifier of the topic""" - rename_topic_request_dto: Annotated[ - RenameTopicRequestDto, + update_topic_request_dto: Annotated[ + UpdateTopicRequestDto, FieldMetadata(request=RequestMetadata(media_type="application/json")), ] @@ -47,12 +44,12 @@ class TopicsControllerRenameTopicRequest(BaseModel): r"""A header for idempotency purposes""" -class TopicsControllerRenameTopicResponseTypedDict(TypedDict): +class TopicsControllerUpdateTopicResponseTypedDict(TypedDict): headers: Dict[str, List[str]] - result: RenameTopicResponseDtoTypedDict + result: TopicResponseDtoTypedDict -class TopicsControllerRenameTopicResponse(BaseModel): +class TopicsControllerUpdateTopicResponse(BaseModel): headers: Dict[str, List[str]] - result: RenameTopicResponseDto + result: TopicResponseDto diff --git a/src/novu_py/models/topicscontroller_createtopicop.py b/src/novu_py/models/topicscontroller_upserttopicop.py similarity index 55% rename from src/novu_py/models/topicscontroller_createtopicop.py rename to src/novu_py/models/topicscontroller_upserttopicop.py index 52ca989b..cbf0b08b 100644 --- a/src/novu_py/models/topicscontroller_createtopicop.py +++ b/src/novu_py/models/topicscontroller_upserttopicop.py @@ -1,11 +1,11 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from .createtopicrequestdto import CreateTopicRequestDto, CreateTopicRequestDtoTypedDict -from .createtopicresponsedto import ( - CreateTopicResponseDto, - CreateTopicResponseDtoTypedDict, +from .createupdatetopicrequestdto import ( + CreateUpdateTopicRequestDto, + CreateUpdateTopicRequestDtoTypedDict, ) +from .topicresponsedto import TopicResponseDto, TopicResponseDtoTypedDict from novu_py.types import BaseModel from novu_py.utils import FieldMetadata, HeaderMetadata, RequestMetadata import pydantic @@ -13,15 +13,15 @@ from typing_extensions import Annotated, NotRequired, TypedDict -class TopicsControllerCreateTopicRequestTypedDict(TypedDict): - create_topic_request_dto: CreateTopicRequestDtoTypedDict +class TopicsControllerUpsertTopicRequestTypedDict(TypedDict): + create_update_topic_request_dto: CreateUpdateTopicRequestDtoTypedDict idempotency_key: NotRequired[str] r"""A header for idempotency purposes""" -class TopicsControllerCreateTopicRequest(BaseModel): - create_topic_request_dto: Annotated[ - CreateTopicRequestDto, +class TopicsControllerUpsertTopicRequest(BaseModel): + create_update_topic_request_dto: Annotated[ + CreateUpdateTopicRequestDto, FieldMetadata(request=RequestMetadata(media_type="application/json")), ] @@ -33,12 +33,12 @@ class TopicsControllerCreateTopicRequest(BaseModel): r"""A header for idempotency purposes""" -class TopicsControllerCreateTopicResponseTypedDict(TypedDict): +class TopicsControllerUpsertTopicResponseTypedDict(TypedDict): headers: Dict[str, List[str]] - result: CreateTopicResponseDtoTypedDict + result: TopicResponseDtoTypedDict -class TopicsControllerCreateTopicResponse(BaseModel): +class TopicsControllerUpsertTopicResponse(BaseModel): headers: Dict[str, List[str]] - result: CreateTopicResponseDto + result: TopicResponseDto diff --git a/src/novu_py/models/topicsubscriptionresponsedto.py b/src/novu_py/models/topicsubscriptionresponsedto.py new file mode 100644 index 00000000..777ad7bc --- /dev/null +++ b/src/novu_py/models/topicsubscriptionresponsedto.py @@ -0,0 +1,33 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .subscriberdto import SubscriberDto, SubscriberDtoTypedDict +from .topicresponsedto import TopicResponseDto, TopicResponseDtoTypedDict +from novu_py.types import BaseModel +import pydantic +from typing_extensions import Annotated, TypedDict + + +class TopicSubscriptionResponseDtoTypedDict(TypedDict): + id: str + r"""The identifier of the subscription""" + created_at: str + r"""The date and time the subscription was created""" + topic: TopicResponseDtoTypedDict + r"""Topic information""" + subscriber: SubscriberDtoTypedDict + r"""Subscriber information""" + + +class TopicSubscriptionResponseDto(BaseModel): + id: Annotated[str, pydantic.Field(alias="_id")] + r"""The identifier of the subscription""" + + created_at: Annotated[str, pydantic.Field(alias="createdAt")] + r"""The date and time the subscription was created""" + + topic: TopicResponseDto + r"""Topic information""" + + subscriber: SubscriberDto + r"""Subscriber information""" diff --git a/src/novu_py/models/topicscontroller_gettopicsubscriberop.py b/src/novu_py/models/topicsv1controller_gettopicsubscriberop.py similarity index 84% rename from src/novu_py/models/topicscontroller_gettopicsubscriberop.py rename to src/novu_py/models/topicsv1controller_gettopicsubscriberop.py index 7c296126..65d3cfce 100644 --- a/src/novu_py/models/topicscontroller_gettopicsubscriberop.py +++ b/src/novu_py/models/topicsv1controller_gettopicsubscriberop.py @@ -9,7 +9,7 @@ from typing_extensions import Annotated, NotRequired, TypedDict -class TopicsControllerGetTopicSubscriberRequestTypedDict(TypedDict): +class TopicsV1ControllerGetTopicSubscriberRequestTypedDict(TypedDict): external_subscriber_id: str r"""The external subscriber id""" topic_key: str @@ -18,7 +18,7 @@ class TopicsControllerGetTopicSubscriberRequestTypedDict(TypedDict): r"""A header for idempotency purposes""" -class TopicsControllerGetTopicSubscriberRequest(BaseModel): +class TopicsV1ControllerGetTopicSubscriberRequest(BaseModel): external_subscriber_id: Annotated[ str, pydantic.Field(alias="externalSubscriberId"), @@ -41,12 +41,12 @@ class TopicsControllerGetTopicSubscriberRequest(BaseModel): r"""A header for idempotency purposes""" -class TopicsControllerGetTopicSubscriberResponseTypedDict(TypedDict): +class TopicsV1ControllerGetTopicSubscriberResponseTypedDict(TypedDict): headers: Dict[str, List[str]] result: TopicSubscriberDtoTypedDict -class TopicsControllerGetTopicSubscriberResponse(BaseModel): +class TopicsV1ControllerGetTopicSubscriberResponse(BaseModel): headers: Dict[str, List[str]] result: TopicSubscriberDto diff --git a/src/novu_py/models/triggereventrequestdto.py b/src/novu_py/models/triggereventrequestdto.py index 986a8325..ab748202 100644 --- a/src/novu_py/models/triggereventrequestdto.py +++ b/src/novu_py/models/triggereventrequestdto.py @@ -1,6 +1,7 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from .stepsoverrides import StepsOverrides, StepsOverridesTypedDict from .subscriberpayloaddto import SubscriberPayloadDto, SubscriberPayloadDtoTypedDict from .tenantpayloaddto import TenantPayloadDto, TenantPayloadDtoTypedDict from .topicpayloaddto import TopicPayloadDto, TopicPayloadDtoTypedDict @@ -10,6 +11,76 @@ from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict +class OverridesTypedDict(TypedDict): + r"""This could be used to override provider specific configurations""" + + steps: NotRequired[Dict[str, StepsOverridesTypedDict]] + r"""This could be used to override provider specific configurations""" + providers: NotRequired[Dict[str, Dict[str, Any]]] + r"""Overrides the provider configuration for the entire workflow and all steps""" + email: NotRequired[Dict[str, Any]] + r"""Override the email provider specific configurations for the entire workflow""" + push: NotRequired[Dict[str, Any]] + r"""Override the push provider specific configurations for the entire workflow""" + sms: NotRequired[Dict[str, Any]] + r"""Override the sms provider specific configurations for the entire workflow""" + chat: NotRequired[Dict[str, Any]] + r"""Override the chat provider specific configurations for the entire workflow""" + layout_identifier: NotRequired[str] + r"""Override the layout identifier for the entire workflow""" + + +class Overrides(BaseModel): + r"""This could be used to override provider specific configurations""" + + steps: Optional[Dict[str, StepsOverrides]] = None + r"""This could be used to override provider specific configurations""" + + providers: Optional[Dict[str, Dict[str, Any]]] = None + r"""Overrides the provider configuration for the entire workflow and all steps""" + + email: Annotated[ + Optional[Dict[str, Any]], + pydantic.Field( + deprecated="warning: ** DEPRECATED ** - This will be removed in a future release, please migrate away from it as soon as possible." + ), + ] = None + r"""Override the email provider specific configurations for the entire workflow""" + + push: Annotated[ + Optional[Dict[str, Any]], + pydantic.Field( + deprecated="warning: ** DEPRECATED ** - This will be removed in a future release, please migrate away from it as soon as possible." + ), + ] = None + r"""Override the push provider specific configurations for the entire workflow""" + + sms: Annotated[ + Optional[Dict[str, Any]], + pydantic.Field( + deprecated="warning: ** DEPRECATED ** - This will be removed in a future release, please migrate away from it as soon as possible." + ), + ] = None + r"""Override the sms provider specific configurations for the entire workflow""" + + chat: Annotated[ + Optional[Dict[str, Any]], + pydantic.Field( + deprecated="warning: ** DEPRECATED ** - This will be removed in a future release, please migrate away from it as soon as possible." + ), + ] = None + r"""Override the chat provider specific configurations for the entire workflow""" + + layout_identifier: Annotated[ + Optional[str], + pydantic.Field( + deprecated="warning: ** DEPRECATED ** - This will be removed in a future release, please migrate away from it as soon as possible.", + alias="layoutIdentifier", + ), + ] = None + r"""Override the layout identifier for the entire workflow""" + + OneTypedDict = TypeAliasType( "OneTypedDict", Union[TopicPayloadDtoTypedDict, SubscriberPayloadDtoTypedDict, str] ) @@ -71,7 +142,7 @@ class TriggerEventRequestDtoTypedDict(TypedDict): used to render the workflow, or perform routing rules based on it. This data will also be available when fetching the notifications feed from the API to display certain parts of the UI. """ - overrides: NotRequired[Dict[str, Dict[str, Any]]] + overrides: NotRequired[OverridesTypedDict] r"""This could be used to override provider specific configurations""" transaction_id: NotRequired[str] r"""A unique identifier for this transaction, we will generate a UUID if not provided.""" @@ -99,7 +170,7 @@ class TriggerEventRequestDto(BaseModel): This data will also be available when fetching the notifications feed from the API to display certain parts of the UI. """ - overrides: Optional[Dict[str, Dict[str, Any]]] = None + overrides: Optional[Overrides] = None r"""This could be used to override provider specific configurations""" transaction_id: Annotated[Optional[str], pydantic.Field(alias="transactionId")] = ( diff --git a/src/novu_py/models/triggereventtoallrequestdto.py b/src/novu_py/models/triggereventtoallrequestdto.py index a52d1a6d..29b98063 100644 --- a/src/novu_py/models/triggereventtoallrequestdto.py +++ b/src/novu_py/models/triggereventtoallrequestdto.py @@ -1,10 +1,12 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from .stepsoverrides import StepsOverrides, StepsOverridesTypedDict from .subscriberpayloaddto import SubscriberPayloadDto, SubscriberPayloadDtoTypedDict from .tenantpayloaddto import TenantPayloadDto, TenantPayloadDtoTypedDict from novu_py.types import BaseModel import pydantic +from pydantic import ConfigDict from typing import Any, Dict, Optional, Union from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict @@ -12,10 +14,85 @@ class TriggerEventToAllRequestDtoOverridesTypedDict(TypedDict): r"""This could be used to override provider specific configurations""" + steps: NotRequired[Dict[str, StepsOverridesTypedDict]] + r"""This could be used to override provider specific configurations""" + providers: NotRequired[Dict[str, Dict[str, Any]]] + r"""Overrides the provider configuration for the entire workflow and all steps""" + email: NotRequired[Dict[str, Any]] + r"""Override the email provider specific configurations for the entire workflow""" + push: NotRequired[Dict[str, Any]] + r"""Override the push provider specific configurations for the entire workflow""" + sms: NotRequired[Dict[str, Any]] + r"""Override the sms provider specific configurations for the entire workflow""" + chat: NotRequired[Dict[str, Any]] + r"""Override the chat provider specific configurations for the entire workflow""" + layout_identifier: NotRequired[str] + r"""Override the layout identifier for the entire workflow""" + class TriggerEventToAllRequestDtoOverrides(BaseModel): r"""This could be used to override provider specific configurations""" + model_config = ConfigDict( + populate_by_name=True, arbitrary_types_allowed=True, extra="allow" + ) + __pydantic_extra__: Dict[str, Dict[str, Any]] = pydantic.Field(init=False) + + steps: Optional[Dict[str, StepsOverrides]] = None + r"""This could be used to override provider specific configurations""" + + providers: Optional[Dict[str, Dict[str, Any]]] = None + r"""Overrides the provider configuration for the entire workflow and all steps""" + + email: Annotated[ + Optional[Dict[str, Any]], + pydantic.Field( + deprecated="warning: ** DEPRECATED ** - This will be removed in a future release, please migrate away from it as soon as possible." + ), + ] = None + r"""Override the email provider specific configurations for the entire workflow""" + + push: Annotated[ + Optional[Dict[str, Any]], + pydantic.Field( + deprecated="warning: ** DEPRECATED ** - This will be removed in a future release, please migrate away from it as soon as possible." + ), + ] = None + r"""Override the push provider specific configurations for the entire workflow""" + + sms: Annotated[ + Optional[Dict[str, Any]], + pydantic.Field( + deprecated="warning: ** DEPRECATED ** - This will be removed in a future release, please migrate away from it as soon as possible." + ), + ] = None + r"""Override the sms provider specific configurations for the entire workflow""" + + chat: Annotated[ + Optional[Dict[str, Any]], + pydantic.Field( + deprecated="warning: ** DEPRECATED ** - This will be removed in a future release, please migrate away from it as soon as possible." + ), + ] = None + r"""Override the chat provider specific configurations for the entire workflow""" + + layout_identifier: Annotated[ + Optional[str], + pydantic.Field( + deprecated="warning: ** DEPRECATED ** - This will be removed in a future release, please migrate away from it as soon as possible.", + alias="layoutIdentifier", + ), + ] = None + r"""Override the layout identifier for the entire workflow""" + + @property + def additional_properties(self): + return self.__pydantic_extra__ + + @additional_properties.setter + def additional_properties(self, value): + self.__pydantic_extra__ = value # pyright: ignore[reportIncompatibleVariableOverride] + TriggerEventToAllRequestDtoActorTypedDict = TypeAliasType( "TriggerEventToAllRequestDtoActorTypedDict", diff --git a/src/novu_py/models/updatesubscriberchannelrequestdto.py b/src/novu_py/models/updatesubscriberchannelrequestdto.py index 6099ee9f..9fb4cf5c 100644 --- a/src/novu_py/models/updatesubscriberchannelrequestdto.py +++ b/src/novu_py/models/updatesubscriberchannelrequestdto.py @@ -2,37 +2,15 @@ from __future__ import annotations from .channelcredentials import ChannelCredentials, ChannelCredentialsTypedDict -from enum import Enum +from .chatorpushproviderenum import ChatOrPushProviderEnum from novu_py.types import BaseModel import pydantic from typing import Optional from typing_extensions import Annotated, NotRequired, TypedDict -class UpdateSubscriberChannelRequestDtoProviderID(str, Enum): - r"""The provider identifier for the credentials""" - - SLACK = "slack" - DISCORD = "discord" - MSTEAMS = "msteams" - MATTERMOST = "mattermost" - RYVER = "ryver" - ZULIP = "zulip" - GRAFANA_ON_CALL = "grafana-on-call" - GETSTREAM = "getstream" - ROCKET_CHAT = "rocket-chat" - WHATSAPP_BUSINESS = "whatsapp-business" - FCM = "fcm" - APNS = "apns" - EXPO = "expo" - ONE_SIGNAL = "one-signal" - PUSHPAD = "pushpad" - PUSH_WEBHOOK = "push-webhook" - PUSHER_BEAMS = "pusher-beams" - - class UpdateSubscriberChannelRequestDtoTypedDict(TypedDict): - provider_id: UpdateSubscriberChannelRequestDtoProviderID + provider_id: ChatOrPushProviderEnum r"""The provider identifier for the credentials""" credentials: ChannelCredentialsTypedDict r"""Credentials payload for the specified provider""" @@ -41,9 +19,7 @@ class UpdateSubscriberChannelRequestDtoTypedDict(TypedDict): class UpdateSubscriberChannelRequestDto(BaseModel): - provider_id: Annotated[ - UpdateSubscriberChannelRequestDtoProviderID, pydantic.Field(alias="providerId") - ] + provider_id: Annotated[ChatOrPushProviderEnum, pydantic.Field(alias="providerId")] r"""The provider identifier for the credentials""" credentials: ChannelCredentials diff --git a/src/novu_py/models/updatetopicrequestdto.py b/src/novu_py/models/updatetopicrequestdto.py new file mode 100644 index 00000000..f87197d6 --- /dev/null +++ b/src/novu_py/models/updatetopicrequestdto.py @@ -0,0 +1,15 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from novu_py.types import BaseModel +from typing_extensions import TypedDict + + +class UpdateTopicRequestDtoTypedDict(TypedDict): + name: str + r"""The display name for the topic""" + + +class UpdateTopicRequestDto(BaseModel): + name: str + r"""The display name for the topic""" diff --git a/src/novu_py/models/validationerrordto.py b/src/novu_py/models/validationerrordto.py index 059671ac..9aaa1070 100644 --- a/src/novu_py/models/validationerrordto.py +++ b/src/novu_py/models/validationerrordto.py @@ -1,65 +1,56 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from .constraintvalidation import ConstraintValidation from novu_py import utils -from novu_py.types import BaseModel, Nullable, UNSET_SENTINEL +from novu_py.types import BaseModel, Nullable, OptionalNullable, UNSET import pydantic -from pydantic import model_serializer from typing import Any, Dict, List, Optional, Union from typing_extensions import Annotated, TypeAliasType, TypedDict -ValidationErrorDtoValueTypedDict = TypeAliasType( - "ValidationErrorDtoValueTypedDict", - Union[str, float, bool, Dict[str, Any], List[Dict[str, Any]]], +MessageValidationErrorDto5TypedDict = TypeAliasType( + "MessageValidationErrorDto5TypedDict", Union[str, float, bool, Dict[str, Any]] ) -ValidationErrorDtoValue = TypeAliasType( - "ValidationErrorDtoValue", - Union[str, float, bool, Dict[str, Any], List[Dict[str, Any]]], +MessageValidationErrorDto5 = TypeAliasType( + "MessageValidationErrorDto5", Union[str, float, bool, Dict[str, Any]] ) -class ErrorsTypedDict(TypedDict): - messages: List[str] - value: Nullable[ValidationErrorDtoValueTypedDict] +class MessageValidationErrorDto4TypedDict(TypedDict): + pass -class Errors(BaseModel): - messages: List[str] +class MessageValidationErrorDto4(BaseModel): + pass - value: Nullable[ValidationErrorDtoValue] - @model_serializer(mode="wrap") - def serialize_model(self, handler): - optional_fields = [] - nullable_fields = ["value"] - null_default_fields = [] - - serialized = handler(self) - - m = {} - - for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k) - serialized.pop(k, None) - - optional_nullable = k in optional_fields and k in nullable_fields - is_set = ( - self.__pydantic_fields_set__.intersection({n}) - or k in null_default_fields - ) # pylint: disable=no-member - - if val is not None and val != UNSET_SENTINEL: - m[k] = val - elif val != UNSET_SENTINEL and ( - not k in optional_fields or (optional_nullable and is_set) - ): - m[k] = val - - return m +ValidationErrorDtoMessageTypedDict = TypeAliasType( + "ValidationErrorDtoMessageTypedDict", + Union[ + MessageValidationErrorDto4TypedDict, + str, + float, + bool, + List[Nullable[MessageValidationErrorDto5TypedDict]], + ], +) +r"""Value that failed validation""" + + +ValidationErrorDtoMessage = TypeAliasType( + "ValidationErrorDtoMessage", + Union[ + MessageValidationErrorDto4, + str, + float, + bool, + List[Nullable[MessageValidationErrorDto5]], + ], +) +r"""Value that failed validation""" class ValidationErrorDtoData(BaseModel): @@ -72,12 +63,12 @@ class ValidationErrorDtoData(BaseModel): path: str r"""The path where the error occurred.""" - message: str - r"""A detailed error message.""" - - errors: Dict[str, Errors] + errors: Dict[str, ConstraintValidation] r"""A record of validation errors keyed by field name""" + message: OptionalNullable[ValidationErrorDtoMessage] = UNSET + r"""Value that failed validation""" + ctx: Optional[Dict[str, Any]] = None r"""Optional context object for additional error details.""" diff --git a/src/novu_py/models/workflowpreferencedto.py b/src/novu_py/models/workflowpreferencedto.py deleted file mode 100644 index f0e544e4..00000000 --- a/src/novu_py/models/workflowpreferencedto.py +++ /dev/null @@ -1,34 +0,0 @@ -"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" - -from __future__ import annotations -from .overrides import Overrides, OverridesTypedDict -from .preferencechannels import PreferenceChannels, PreferenceChannelsTypedDict -from .workflowinfodto import WorkflowInfoDto, WorkflowInfoDtoTypedDict -from novu_py.types import BaseModel -from typing import List -from typing_extensions import TypedDict - - -class WorkflowPreferenceDtoTypedDict(TypedDict): - enabled: bool - r"""Whether notifications are enabled for this workflow""" - channels: PreferenceChannelsTypedDict - r"""Channel-specific preference settings for this workflow""" - overrides: List[OverridesTypedDict] - r"""List of preference overrides""" - workflow: WorkflowInfoDtoTypedDict - r"""Workflow information""" - - -class WorkflowPreferenceDto(BaseModel): - enabled: bool - r"""Whether notifications are enabled for this workflow""" - - channels: PreferenceChannels - r"""Channel-specific preference settings for this workflow""" - - overrides: List[Overrides] - r"""List of preference overrides""" - - workflow: WorkflowInfoDto - r"""Workflow information""" diff --git a/src/novu_py/models/workflowresponse.py b/src/novu_py/models/workflowresponse.py index d1517b64..99888902 100644 --- a/src/novu_py/models/workflowresponse.py +++ b/src/novu_py/models/workflowresponse.py @@ -4,7 +4,10 @@ from .notificationgroup import NotificationGroup, NotificationGroupTypedDict from .notificationstepdto import NotificationStepDto, NotificationStepDtoTypedDict from .notificationtrigger import NotificationTrigger, NotificationTriggerTypedDict -from .preferencechannels import PreferenceChannels, PreferenceChannelsTypedDict +from .subscriberpreferencechannels import ( + SubscriberPreferenceChannels, + SubscriberPreferenceChannelsTypedDict, +) from novu_py.types import BaseModel import pydantic from typing import List, Optional @@ -32,7 +35,7 @@ class WorkflowResponseTypedDict(TypedDict): description: str active: bool draft: bool - preference_settings: PreferenceChannelsTypedDict + preference_settings: SubscriberPreferenceChannelsTypedDict critical: bool tags: List[str] steps: List[NotificationStepDtoTypedDict] @@ -61,7 +64,7 @@ class WorkflowResponse(BaseModel): draft: bool preference_settings: Annotated[ - PreferenceChannels, pydantic.Field(alias="preferenceSettings") + SubscriberPreferenceChannels, pydantic.Field(alias="preferenceSettings") ] critical: bool diff --git a/src/novu_py/novu_messages.py b/src/novu_py/novu_messages.py index 4a5e3211..2eff15b5 100644 --- a/src/novu_py/novu_messages.py +++ b/src/novu_py/novu_messages.py @@ -333,7 +333,7 @@ def mark_all( timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, ) -> models.SubscribersV1ControllerMarkAllUnreadAsReadResponse: - r"""Marks all the subscriber messages as read, unread, seen or unseen. Optionally you can pass feed id (or array) to mark messages of a particular feed. + r"""Marks all the subscriber messages as read, unread, seen or unseen. :param subscriber_id: :param mark_all_message_as_request_dto: @@ -494,7 +494,7 @@ async def mark_all_async( timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, ) -> models.SubscribersV1ControllerMarkAllUnreadAsReadResponse: - r"""Marks all the subscriber messages as read, unread, seen or unseen. Optionally you can pass feed id (or array) to mark messages of a particular feed. + r"""Marks all the subscriber messages as read, unread, seen or unseen. :param subscriber_id: :param mark_all_message_as_request_dto: diff --git a/src/novu_py/novu_subscribers.py b/src/novu_py/novu_subscribers.py index 26674e10..164e585c 100644 --- a/src/novu_py/novu_subscribers.py +++ b/src/novu_py/novu_subscribers.py @@ -5,29 +5,27 @@ from novu_py._hooks import HookContext from novu_py.types import OptionalNullable, UNSET from novu_py.utils import get_security_from_env -from typing import Any, Mapping, Optional, Union +from typing import Any, Mapping, Optional class NovuSubscribers(BaseSDK): - def assign( + def retrieve( self, *, + external_subscriber_id: str, topic_key: str, - add_subscribers_request_dto: Union[ - models.AddSubscribersRequestDto, models.AddSubscribersRequestDtoTypedDict - ], idempotency_key: Optional[str] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, - ) -> models.TopicsControllerAssignResponse: - r"""Subscribers addition + ) -> models.TopicsV1ControllerGetTopicSubscriberResponse: + r"""Check topic subscriber - Add subscribers to a topic by key + Check if a subscriber belongs to a certain topic + :param external_subscriber_id: The external subscriber id :param topic_key: The topic key - :param add_subscribers_request_dto: :param idempotency_key: A header for idempotency purposes :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -44,34 +42,25 @@ def assign( else: base_url = self._get_url(base_url, url_variables) - request = models.TopicsControllerAssignRequest( + request = models.TopicsV1ControllerGetTopicSubscriberRequest( + external_subscriber_id=external_subscriber_id, topic_key=topic_key, idempotency_key=idempotency_key, - add_subscribers_request_dto=utils.get_pydantic_model( - add_subscribers_request_dto, models.AddSubscribersRequestDto - ), ) req = self._build_request( - method="POST", - path="/v1/topics/{topicKey}/subscribers", + method="GET", + path="/v1/topics/{topicKey}/subscribers/{externalSubscriberId}", base_url=base_url, url_variables=url_variables, request=request, - request_body_required=True, + request_body_required=False, request_has_path_params=True, request_has_query_params=True, user_agent_header="user-agent", accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, - get_serialized_body=lambda: utils.serialize_request_body( - request.add_subscribers_request_dto, - False, - False, - "json", - models.AddSubscribersRequestDto, - ), timeout_ms=timeout_ms, ) @@ -90,7 +79,7 @@ def assign( http_res = self.do_request( hook_ctx=HookContext( base_url=base_url or "", - operation_id="TopicsController_assign", + operation_id="TopicsV1Controller_getTopicSubscriber", oauth2_scopes=[], security_source=get_security_from_env( self.sdk_configuration.security, models.Security @@ -119,10 +108,8 @@ def assign( response_data: Any = None if utils.match_response(http_res, "200", "application/json"): - return models.TopicsControllerAssignResponse( - result=utils.unmarshal_json( - http_res.text, models.AssignSubscriberToTopicDto - ), + return models.TopicsV1ControllerGetTopicSubscriberResponse( + result=utils.unmarshal_json(http_res.text, models.TopicSubscriberDto), headers=utils.get_response_headers(http_res.headers), ) if utils.match_response(http_res, "414", "application/json"): @@ -173,171 +160,7 @@ def assign( http_res, ) - async def assign_async( - self, - *, - topic_key: str, - add_subscribers_request_dto: Union[ - models.AddSubscribersRequestDto, models.AddSubscribersRequestDtoTypedDict - ], - idempotency_key: Optional[str] = None, - retries: OptionalNullable[utils.RetryConfig] = UNSET, - server_url: Optional[str] = None, - timeout_ms: Optional[int] = None, - http_headers: Optional[Mapping[str, str]] = None, - ) -> models.TopicsControllerAssignResponse: - r"""Subscribers addition - - Add subscribers to a topic by key - - :param topic_key: The topic key - :param add_subscribers_request_dto: - :param idempotency_key: A header for idempotency purposes - :param retries: Override the default retry configuration for this method - :param server_url: Override the default server URL for this method - :param timeout_ms: Override the default request timeout configuration for this method in milliseconds - :param http_headers: Additional headers to set or replace on requests. - """ - base_url = None - url_variables = None - if timeout_ms is None: - timeout_ms = self.sdk_configuration.timeout_ms - - if server_url is not None: - base_url = server_url - else: - base_url = self._get_url(base_url, url_variables) - - request = models.TopicsControllerAssignRequest( - topic_key=topic_key, - idempotency_key=idempotency_key, - add_subscribers_request_dto=utils.get_pydantic_model( - add_subscribers_request_dto, models.AddSubscribersRequestDto - ), - ) - - req = self._build_request_async( - method="POST", - path="/v1/topics/{topicKey}/subscribers", - base_url=base_url, - url_variables=url_variables, - request=request, - request_body_required=True, - request_has_path_params=True, - request_has_query_params=True, - user_agent_header="user-agent", - accept_header_value="application/json", - http_headers=http_headers, - security=self.sdk_configuration.security, - get_serialized_body=lambda: utils.serialize_request_body( - request.add_subscribers_request_dto, - False, - False, - "json", - models.AddSubscribersRequestDto, - ), - timeout_ms=timeout_ms, - ) - - if retries == UNSET: - if self.sdk_configuration.retry_config is not UNSET: - retries = self.sdk_configuration.retry_config - else: - retries = utils.RetryConfig( - "backoff", utils.BackoffStrategy(1000, 30000, 1.5, 3600000), True - ) - - retry_config = None - if isinstance(retries, utils.RetryConfig): - retry_config = (retries, ["408", "409", "429", "5XX"]) - - http_res = await self.do_request_async( - hook_ctx=HookContext( - base_url=base_url or "", - operation_id="TopicsController_assign", - oauth2_scopes=[], - security_source=get_security_from_env( - self.sdk_configuration.security, models.Security - ), - ), - request=req, - error_status_codes=[ - "400", - "401", - "403", - "404", - "405", - "409", - "413", - "414", - "415", - "422", - "429", - "4XX", - "500", - "503", - "5XX", - ], - retry_config=retry_config, - ) - - response_data: Any = None - if utils.match_response(http_res, "200", "application/json"): - return models.TopicsControllerAssignResponse( - result=utils.unmarshal_json( - http_res.text, models.AssignSubscriberToTopicDto - ), - headers=utils.get_response_headers(http_res.headers), - ) - if utils.match_response(http_res, "414", "application/json"): - response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) - raise models.ErrorDto(data=response_data) - if utils.match_response( - http_res, - ["400", "401", "403", "404", "405", "409", "413", "415"], - "application/json", - ): - response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) - raise models.ErrorDto(data=response_data) - if utils.match_response(http_res, "422", "application/json"): - response_data = utils.unmarshal_json( - http_res.text, models.ValidationErrorDtoData - ) - raise models.ValidationErrorDto(data=response_data) - if utils.match_response(http_res, "429", "*"): - http_res_text = await utils.stream_to_text_async(http_res) - raise models.APIError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) - if utils.match_response(http_res, "500", "application/json"): - response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) - raise models.ErrorDto(data=response_data) - if utils.match_response(http_res, "503", "*"): - http_res_text = await utils.stream_to_text_async(http_res) - raise models.APIError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) - if utils.match_response(http_res, "4XX", "*"): - http_res_text = await utils.stream_to_text_async(http_res) - raise models.APIError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) - if utils.match_response(http_res, "5XX", "*"): - http_res_text = await utils.stream_to_text_async(http_res) - raise models.APIError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) - - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise models.APIError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) - - def retrieve( + async def retrieve_async( self, *, external_subscriber_id: str, @@ -347,7 +170,7 @@ def retrieve( server_url: Optional[str] = None, timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, - ) -> models.TopicsControllerGetTopicSubscriberResponse: + ) -> models.TopicsV1ControllerGetTopicSubscriberResponse: r"""Check topic subscriber Check if a subscriber belongs to a certain topic @@ -370,13 +193,13 @@ def retrieve( else: base_url = self._get_url(base_url, url_variables) - request = models.TopicsControllerGetTopicSubscriberRequest( + request = models.TopicsV1ControllerGetTopicSubscriberRequest( external_subscriber_id=external_subscriber_id, topic_key=topic_key, idempotency_key=idempotency_key, ) - req = self._build_request( + req = self._build_request_async( method="GET", path="/v1/topics/{topicKey}/subscribers/{externalSubscriberId}", base_url=base_url, @@ -404,10 +227,10 @@ def retrieve( if isinstance(retries, utils.RetryConfig): retry_config = (retries, ["408", "409", "429", "5XX"]) - http_res = self.do_request( + http_res = await self.do_request_async( hook_ctx=HookContext( base_url=base_url or "", - operation_id="TopicsController_getTopicSubscriber", + operation_id="TopicsV1Controller_getTopicSubscriber", oauth2_scopes=[], security_source=get_security_from_env( self.sdk_configuration.security, models.Security @@ -436,7 +259,7 @@ def retrieve( response_data: Any = None if utils.match_response(http_res, "200", "application/json"): - return models.TopicsControllerGetTopicSubscriberResponse( + return models.TopicsV1ControllerGetTopicSubscriberResponse( result=utils.unmarshal_json(http_res.text, models.TopicSubscriberDto), headers=utils.get_response_headers(http_res.headers), ) @@ -455,481 +278,6 @@ def retrieve( http_res.text, models.ValidationErrorDtoData ) raise models.ValidationErrorDto(data=response_data) - if utils.match_response(http_res, "429", "*"): - http_res_text = utils.stream_to_text(http_res) - raise models.APIError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) - if utils.match_response(http_res, "500", "application/json"): - response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) - raise models.ErrorDto(data=response_data) - if utils.match_response(http_res, "503", "*"): - http_res_text = utils.stream_to_text(http_res) - raise models.APIError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) - if utils.match_response(http_res, "4XX", "*"): - http_res_text = utils.stream_to_text(http_res) - raise models.APIError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) - if utils.match_response(http_res, "5XX", "*"): - http_res_text = utils.stream_to_text(http_res) - raise models.APIError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) - - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise models.APIError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) - - async def retrieve_async( - self, - *, - external_subscriber_id: str, - topic_key: str, - idempotency_key: Optional[str] = None, - retries: OptionalNullable[utils.RetryConfig] = UNSET, - server_url: Optional[str] = None, - timeout_ms: Optional[int] = None, - http_headers: Optional[Mapping[str, str]] = None, - ) -> models.TopicsControllerGetTopicSubscriberResponse: - r"""Check topic subscriber - - Check if a subscriber belongs to a certain topic - - :param external_subscriber_id: The external subscriber id - :param topic_key: The topic key - :param idempotency_key: A header for idempotency purposes - :param retries: Override the default retry configuration for this method - :param server_url: Override the default server URL for this method - :param timeout_ms: Override the default request timeout configuration for this method in milliseconds - :param http_headers: Additional headers to set or replace on requests. - """ - base_url = None - url_variables = None - if timeout_ms is None: - timeout_ms = self.sdk_configuration.timeout_ms - - if server_url is not None: - base_url = server_url - else: - base_url = self._get_url(base_url, url_variables) - - request = models.TopicsControllerGetTopicSubscriberRequest( - external_subscriber_id=external_subscriber_id, - topic_key=topic_key, - idempotency_key=idempotency_key, - ) - - req = self._build_request_async( - method="GET", - path="/v1/topics/{topicKey}/subscribers/{externalSubscriberId}", - base_url=base_url, - url_variables=url_variables, - request=request, - request_body_required=False, - request_has_path_params=True, - request_has_query_params=True, - user_agent_header="user-agent", - accept_header_value="application/json", - http_headers=http_headers, - security=self.sdk_configuration.security, - timeout_ms=timeout_ms, - ) - - if retries == UNSET: - if self.sdk_configuration.retry_config is not UNSET: - retries = self.sdk_configuration.retry_config - else: - retries = utils.RetryConfig( - "backoff", utils.BackoffStrategy(1000, 30000, 1.5, 3600000), True - ) - - retry_config = None - if isinstance(retries, utils.RetryConfig): - retry_config = (retries, ["408", "409", "429", "5XX"]) - - http_res = await self.do_request_async( - hook_ctx=HookContext( - base_url=base_url or "", - operation_id="TopicsController_getTopicSubscriber", - oauth2_scopes=[], - security_source=get_security_from_env( - self.sdk_configuration.security, models.Security - ), - ), - request=req, - error_status_codes=[ - "400", - "401", - "403", - "404", - "405", - "409", - "413", - "414", - "415", - "422", - "429", - "4XX", - "500", - "503", - "5XX", - ], - retry_config=retry_config, - ) - - response_data: Any = None - if utils.match_response(http_res, "200", "application/json"): - return models.TopicsControllerGetTopicSubscriberResponse( - result=utils.unmarshal_json(http_res.text, models.TopicSubscriberDto), - headers=utils.get_response_headers(http_res.headers), - ) - if utils.match_response(http_res, "414", "application/json"): - response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) - raise models.ErrorDto(data=response_data) - if utils.match_response( - http_res, - ["400", "401", "403", "404", "405", "409", "413", "415"], - "application/json", - ): - response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) - raise models.ErrorDto(data=response_data) - if utils.match_response(http_res, "422", "application/json"): - response_data = utils.unmarshal_json( - http_res.text, models.ValidationErrorDtoData - ) - raise models.ValidationErrorDto(data=response_data) - if utils.match_response(http_res, "429", "*"): - http_res_text = await utils.stream_to_text_async(http_res) - raise models.APIError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) - if utils.match_response(http_res, "500", "application/json"): - response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) - raise models.ErrorDto(data=response_data) - if utils.match_response(http_res, "503", "*"): - http_res_text = await utils.stream_to_text_async(http_res) - raise models.APIError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) - if utils.match_response(http_res, "4XX", "*"): - http_res_text = await utils.stream_to_text_async(http_res) - raise models.APIError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) - if utils.match_response(http_res, "5XX", "*"): - http_res_text = await utils.stream_to_text_async(http_res) - raise models.APIError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) - - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise models.APIError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) - - def remove( - self, - *, - topic_key: str, - remove_subscribers_request_dto: Union[ - models.RemoveSubscribersRequestDto, - models.RemoveSubscribersRequestDtoTypedDict, - ], - idempotency_key: Optional[str] = None, - retries: OptionalNullable[utils.RetryConfig] = UNSET, - server_url: Optional[str] = None, - timeout_ms: Optional[int] = None, - http_headers: Optional[Mapping[str, str]] = None, - ) -> models.TopicsControllerRemoveSubscribersResponse: - r"""Subscribers removal - - Remove subscribers from a topic - - :param topic_key: The topic key - :param remove_subscribers_request_dto: - :param idempotency_key: A header for idempotency purposes - :param retries: Override the default retry configuration for this method - :param server_url: Override the default server URL for this method - :param timeout_ms: Override the default request timeout configuration for this method in milliseconds - :param http_headers: Additional headers to set or replace on requests. - """ - base_url = None - url_variables = None - if timeout_ms is None: - timeout_ms = self.sdk_configuration.timeout_ms - - if server_url is not None: - base_url = server_url - else: - base_url = self._get_url(base_url, url_variables) - - request = models.TopicsControllerRemoveSubscribersRequest( - topic_key=topic_key, - idempotency_key=idempotency_key, - remove_subscribers_request_dto=utils.get_pydantic_model( - remove_subscribers_request_dto, models.RemoveSubscribersRequestDto - ), - ) - - req = self._build_request( - method="POST", - path="/v1/topics/{topicKey}/subscribers/removal", - base_url=base_url, - url_variables=url_variables, - request=request, - request_body_required=True, - request_has_path_params=True, - request_has_query_params=True, - user_agent_header="user-agent", - accept_header_value="application/json", - http_headers=http_headers, - security=self.sdk_configuration.security, - get_serialized_body=lambda: utils.serialize_request_body( - request.remove_subscribers_request_dto, - False, - False, - "json", - models.RemoveSubscribersRequestDto, - ), - timeout_ms=timeout_ms, - ) - - if retries == UNSET: - if self.sdk_configuration.retry_config is not UNSET: - retries = self.sdk_configuration.retry_config - else: - retries = utils.RetryConfig( - "backoff", utils.BackoffStrategy(1000, 30000, 1.5, 3600000), True - ) - - retry_config = None - if isinstance(retries, utils.RetryConfig): - retry_config = (retries, ["408", "409", "429", "5XX"]) - - http_res = self.do_request( - hook_ctx=HookContext( - base_url=base_url or "", - operation_id="TopicsController_removeSubscribers", - oauth2_scopes=[], - security_source=get_security_from_env( - self.sdk_configuration.security, models.Security - ), - ), - request=req, - error_status_codes=[ - "400", - "401", - "403", - "404", - "405", - "409", - "413", - "414", - "415", - "422", - "429", - "4XX", - "500", - "503", - "5XX", - ], - retry_config=retry_config, - ) - - response_data: Any = None - if utils.match_response(http_res, "204", "*"): - return models.TopicsControllerRemoveSubscribersResponse( - headers=utils.get_response_headers(http_res.headers) - ) - if utils.match_response(http_res, "414", "application/json"): - response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) - raise models.ErrorDto(data=response_data) - if utils.match_response( - http_res, - ["400", "401", "403", "404", "405", "409", "413", "415"], - "application/json", - ): - response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) - raise models.ErrorDto(data=response_data) - if utils.match_response(http_res, "422", "application/json"): - response_data = utils.unmarshal_json( - http_res.text, models.ValidationErrorDtoData - ) - raise models.ValidationErrorDto(data=response_data) - if utils.match_response(http_res, "429", "*"): - http_res_text = utils.stream_to_text(http_res) - raise models.APIError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) - if utils.match_response(http_res, "500", "application/json"): - response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) - raise models.ErrorDto(data=response_data) - if utils.match_response(http_res, "503", "*"): - http_res_text = utils.stream_to_text(http_res) - raise models.APIError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) - if utils.match_response(http_res, "4XX", "*"): - http_res_text = utils.stream_to_text(http_res) - raise models.APIError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) - if utils.match_response(http_res, "5XX", "*"): - http_res_text = utils.stream_to_text(http_res) - raise models.APIError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) - - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise models.APIError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) - - async def remove_async( - self, - *, - topic_key: str, - remove_subscribers_request_dto: Union[ - models.RemoveSubscribersRequestDto, - models.RemoveSubscribersRequestDtoTypedDict, - ], - idempotency_key: Optional[str] = None, - retries: OptionalNullable[utils.RetryConfig] = UNSET, - server_url: Optional[str] = None, - timeout_ms: Optional[int] = None, - http_headers: Optional[Mapping[str, str]] = None, - ) -> models.TopicsControllerRemoveSubscribersResponse: - r"""Subscribers removal - - Remove subscribers from a topic - - :param topic_key: The topic key - :param remove_subscribers_request_dto: - :param idempotency_key: A header for idempotency purposes - :param retries: Override the default retry configuration for this method - :param server_url: Override the default server URL for this method - :param timeout_ms: Override the default request timeout configuration for this method in milliseconds - :param http_headers: Additional headers to set or replace on requests. - """ - base_url = None - url_variables = None - if timeout_ms is None: - timeout_ms = self.sdk_configuration.timeout_ms - - if server_url is not None: - base_url = server_url - else: - base_url = self._get_url(base_url, url_variables) - - request = models.TopicsControllerRemoveSubscribersRequest( - topic_key=topic_key, - idempotency_key=idempotency_key, - remove_subscribers_request_dto=utils.get_pydantic_model( - remove_subscribers_request_dto, models.RemoveSubscribersRequestDto - ), - ) - - req = self._build_request_async( - method="POST", - path="/v1/topics/{topicKey}/subscribers/removal", - base_url=base_url, - url_variables=url_variables, - request=request, - request_body_required=True, - request_has_path_params=True, - request_has_query_params=True, - user_agent_header="user-agent", - accept_header_value="application/json", - http_headers=http_headers, - security=self.sdk_configuration.security, - get_serialized_body=lambda: utils.serialize_request_body( - request.remove_subscribers_request_dto, - False, - False, - "json", - models.RemoveSubscribersRequestDto, - ), - timeout_ms=timeout_ms, - ) - - if retries == UNSET: - if self.sdk_configuration.retry_config is not UNSET: - retries = self.sdk_configuration.retry_config - else: - retries = utils.RetryConfig( - "backoff", utils.BackoffStrategy(1000, 30000, 1.5, 3600000), True - ) - - retry_config = None - if isinstance(retries, utils.RetryConfig): - retry_config = (retries, ["408", "409", "429", "5XX"]) - - http_res = await self.do_request_async( - hook_ctx=HookContext( - base_url=base_url or "", - operation_id="TopicsController_removeSubscribers", - oauth2_scopes=[], - security_source=get_security_from_env( - self.sdk_configuration.security, models.Security - ), - ), - request=req, - error_status_codes=[ - "400", - "401", - "403", - "404", - "405", - "409", - "413", - "414", - "415", - "422", - "429", - "4XX", - "500", - "503", - "5XX", - ], - retry_config=retry_config, - ) - - response_data: Any = None - if utils.match_response(http_res, "204", "*"): - return models.TopicsControllerRemoveSubscribersResponse( - headers=utils.get_response_headers(http_res.headers) - ) - if utils.match_response(http_res, "414", "application/json"): - response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) - raise models.ErrorDto(data=response_data) - if utils.match_response( - http_res, - ["400", "401", "403", "404", "405", "409", "413", "415"], - "application/json", - ): - response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) - raise models.ErrorDto(data=response_data) - if utils.match_response(http_res, "422", "application/json"): - response_data = utils.unmarshal_json( - http_res.text, models.ValidationErrorDtoData - ) - raise models.ValidationErrorDto(data=response_data) if utils.match_response(http_res, "429", "*"): http_res_text = await utils.stream_to_text_async(http_res) raise models.APIError( diff --git a/src/novu_py/novu_topics.py b/src/novu_py/novu_topics.py new file mode 100644 index 00000000..4f1a0ffc --- /dev/null +++ b/src/novu_py/novu_topics.py @@ -0,0 +1,314 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from .basesdk import BaseSDK +from novu_py import models, utils +from novu_py._hooks import HookContext +from novu_py.types import BaseModel, OptionalNullable, UNSET +from novu_py.utils import get_security_from_env +from typing import Any, Mapping, Optional, Union, cast + + +class NovuTopics(BaseSDK): + def list( + self, + *, + request: Union[ + models.SubscribersControllerListSubscriberTopicsRequest, + models.SubscribersControllerListSubscriberTopicsRequestTypedDict, + ], + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.SubscribersControllerListSubscriberTopicsResponse: + r"""List topics a subscriber is subscribed to + + List topic subscriptions for a subscriber with pagination and filtering + + :param request: The request object to send. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + if not isinstance(request, BaseModel): + request = utils.unmarshal( + request, models.SubscribersControllerListSubscriberTopicsRequest + ) + request = cast(models.SubscribersControllerListSubscriberTopicsRequest, request) + + req = self._build_request( + method="GET", + path="/v2/subscribers/{subscriberId}/subscriptions", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(1000, 30000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["408", "409", "429", "5XX"]) + + http_res = self.do_request( + hook_ctx=HookContext( + base_url=base_url or "", + operation_id="SubscribersController_listSubscriberTopics", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=[ + "400", + "401", + "403", + "404", + "405", + "409", + "413", + "414", + "415", + "422", + "429", + "4XX", + "500", + "503", + "5XX", + ], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return models.SubscribersControllerListSubscriberTopicsResponse( + result=utils.unmarshal_json( + http_res.text, models.ListTopicSubscriptionsResponseDto + ), + headers=utils.get_response_headers(http_res.headers), + ) + if utils.match_response(http_res, "414", "application/json"): + response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) + raise models.ErrorDto(data=response_data) + if utils.match_response( + http_res, + ["400", "401", "403", "404", "405", "409", "413", "415"], + "application/json", + ): + response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) + raise models.ErrorDto(data=response_data) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.ValidationErrorDtoData + ) + raise models.ValidationErrorDto(data=response_data) + if utils.match_response(http_res, "429", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "500", "application/json"): + response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) + raise models.ErrorDto(data=response_data) + if utils.match_response(http_res, "503", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) + + async def list_async( + self, + *, + request: Union[ + models.SubscribersControllerListSubscriberTopicsRequest, + models.SubscribersControllerListSubscriberTopicsRequestTypedDict, + ], + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.SubscribersControllerListSubscriberTopicsResponse: + r"""List topics a subscriber is subscribed to + + List topic subscriptions for a subscriber with pagination and filtering + + :param request: The request object to send. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + if not isinstance(request, BaseModel): + request = utils.unmarshal( + request, models.SubscribersControllerListSubscriberTopicsRequest + ) + request = cast(models.SubscribersControllerListSubscriberTopicsRequest, request) + + req = self._build_request_async( + method="GET", + path="/v2/subscribers/{subscriberId}/subscriptions", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(1000, 30000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["408", "409", "429", "5XX"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + base_url=base_url or "", + operation_id="SubscribersController_listSubscriberTopics", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=[ + "400", + "401", + "403", + "404", + "405", + "409", + "413", + "414", + "415", + "422", + "429", + "4XX", + "500", + "503", + "5XX", + ], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return models.SubscribersControllerListSubscriberTopicsResponse( + result=utils.unmarshal_json( + http_res.text, models.ListTopicSubscriptionsResponseDto + ), + headers=utils.get_response_headers(http_res.headers), + ) + if utils.match_response(http_res, "414", "application/json"): + response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) + raise models.ErrorDto(data=response_data) + if utils.match_response( + http_res, + ["400", "401", "403", "404", "405", "409", "413", "415"], + "application/json", + ): + response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) + raise models.ErrorDto(data=response_data) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.ValidationErrorDtoData + ) + raise models.ValidationErrorDto(data=response_data) + if utils.match_response(http_res, "429", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "500", "application/json"): + response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) + raise models.ErrorDto(data=response_data) + if utils.match_response(http_res, "503", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) diff --git a/src/novu_py/sdk.py b/src/novu_py/sdk.py index 4634fc1b..12913cbc 100644 --- a/src/novu_py/sdk.py +++ b/src/novu_py/sdk.py @@ -28,6 +28,10 @@ class Novu(BaseSDK): r"""A subscriber in Novu represents someone who should receive a message. A subscriber’s profile information contains important attributes about the subscriber that will be used in messages (name, email). The subscriber object can contain other key-value pairs that can be used to further personalize your messages. https://docs.novu.co/subscribers/subscribers """ + topics: Topics + r"""Topics are a way to group subscribers together so that they can be notified of events at once. A topic is identified by a custom key. This can be helpful for things like sending out marketing emails or notifying users of new features. Topics can also be used to send notifications to the subscribers who have been grouped together based on their interests, location, activities and much more. + https://docs.novu.co/subscribers/topics + """ integrations: Integrations r"""With the help of the Integration Store, you can easily integrate your favorite delivery provider. During the runtime of the API, the Integrations Store is responsible for storing the configurations of all the providers. https://docs.novu.co/channels-and-providers/integration-store @@ -37,10 +41,6 @@ class Novu(BaseSDK): https://docs.novu.co/workflows/messages """ notifications: Notifications - topics: Topics - r"""Topics are a way to group subscribers together so that they can be notified of events at once. A topic is identified by a custom key. This can be helpful for things like sending out marketing emails or notifying users of new features. Topics can also be used to send notifications to the subscribers who have been grouped together based on their interests, location, activities and much more. - https://docs.novu.co/subscribers/topics - """ def __init__( self, @@ -139,10 +139,10 @@ def __init__( def _init_sdks(self): self.subscribers = Subscribers(self.sdk_configuration) + self.topics = Topics(self.sdk_configuration) self.integrations = Integrations(self.sdk_configuration) self.messages = Messages(self.sdk_configuration) self.notifications = Notifications(self.sdk_configuration) - self.topics = Topics(self.sdk_configuration) def __enter__(self): return self diff --git a/src/novu_py/subscribers.py b/src/novu_py/subscribers.py index e3d96911..bf1ffd56 100644 --- a/src/novu_py/subscribers.py +++ b/src/novu_py/subscribers.py @@ -9,11 +9,12 @@ from novu_py.credentials import Credentials from novu_py.novu_messages import NovuMessages from novu_py.novu_notifications import NovuNotifications +from novu_py.novu_topics import NovuTopics from novu_py.preferences import Preferences from novu_py.properties import Properties from novu_py.types import BaseModel, OptionalNullable, UNSET from novu_py.utils import get_security_from_env -from typing import Any, Dict, Mapping, Optional, Union, cast +from typing import Any, Dict, List, Mapping, Optional, Union, cast class Subscribers(BaseSDK): @@ -22,6 +23,7 @@ class Subscribers(BaseSDK): """ preferences: Preferences + topics: NovuTopics credentials: Credentials authentication: Authentication messages: NovuMessages @@ -35,6 +37,7 @@ def __init__(self, sdk_config: SDKConfiguration) -> None: def _init_sdks(self): self.preferences = Preferences(self.sdk_configuration) + self.topics = NovuTopics(self.sdk_configuration) self.credentials = Credentials(self.sdk_configuration) self.authentication = Authentication(self.sdk_configuration) self.messages = NovuMessages(self.sdk_configuration) @@ -356,7 +359,7 @@ def create( ) -> models.SubscribersControllerCreateSubscriberResponse: r"""Create subscriber - Create subscriber with the given data + Create subscriber with the given data, if the subscriber already exists, it will be updated :param create_subscriber_request_dto: :param idempotency_key: A header for idempotency purposes @@ -518,7 +521,7 @@ async def create_async( ) -> models.SubscribersControllerCreateSubscriberResponse: r"""Create subscriber - Create subscriber with the given data + Create subscriber with the given data, if the subscriber already exists, it will be updated :param create_subscriber_request_dto: :param idempotency_key: A header for idempotency purposes @@ -1693,7 +1696,7 @@ def list( def next_func() -> ( Optional[models.SubscribersV1ControllerListSubscribersResponse] ): - body = utils.unmarshal_json(http_res.text, Dict[Any, Any]) + body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]]) page = request.page if not request.page is None else 1 next_page = page + 1 @@ -1871,7 +1874,7 @@ async def list_async( def next_func() -> ( Optional[models.SubscribersV1ControllerListSubscribersResponse] ): - body = utils.unmarshal_json(http_res.text, Dict[Any, Any]) + body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]]) page = request.page if not request.page is None else 1 next_page = page + 1 diff --git a/src/novu_py/subscriptions.py b/src/novu_py/subscriptions.py new file mode 100644 index 00000000..aff06d57 --- /dev/null +++ b/src/novu_py/subscriptions.py @@ -0,0 +1,966 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from .basesdk import BaseSDK +from novu_py import models, utils +from novu_py._hooks import HookContext +from novu_py.types import BaseModel, OptionalNullable, UNSET +from novu_py.utils import get_security_from_env +from typing import Any, Mapping, Optional, Union, cast + + +class Subscriptions(BaseSDK): + def list( + self, + *, + request: Union[ + models.TopicsControllerListTopicSubscriptionsRequest, + models.TopicsControllerListTopicSubscriptionsRequestTypedDict, + ], + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.TopicsControllerListTopicSubscriptionsResponse: + r"""List topic subscriptions + + :param request: The request object to send. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + if not isinstance(request, BaseModel): + request = utils.unmarshal( + request, models.TopicsControllerListTopicSubscriptionsRequest + ) + request = cast(models.TopicsControllerListTopicSubscriptionsRequest, request) + + req = self._build_request( + method="GET", + path="/v2/topics/{topicKey}/subscriptions", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(1000, 30000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["408", "409", "429", "5XX"]) + + http_res = self.do_request( + hook_ctx=HookContext( + base_url=base_url or "", + operation_id="TopicsController_listTopicSubscriptions", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=[ + "400", + "401", + "403", + "404", + "405", + "409", + "413", + "414", + "415", + "422", + "429", + "4XX", + "500", + "503", + "5XX", + ], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return models.TopicsControllerListTopicSubscriptionsResponse( + result=utils.unmarshal_json( + http_res.text, models.ListTopicSubscriptionsResponseDto + ), + headers=utils.get_response_headers(http_res.headers), + ) + if utils.match_response(http_res, "414", "application/json"): + response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) + raise models.ErrorDto(data=response_data) + if utils.match_response( + http_res, + ["400", "401", "403", "404", "405", "409", "413", "415"], + "application/json", + ): + response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) + raise models.ErrorDto(data=response_data) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.ValidationErrorDtoData + ) + raise models.ValidationErrorDto(data=response_data) + if utils.match_response(http_res, "429", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "500", "application/json"): + response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) + raise models.ErrorDto(data=response_data) + if utils.match_response(http_res, "503", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) + + async def list_async( + self, + *, + request: Union[ + models.TopicsControllerListTopicSubscriptionsRequest, + models.TopicsControllerListTopicSubscriptionsRequestTypedDict, + ], + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.TopicsControllerListTopicSubscriptionsResponse: + r"""List topic subscriptions + + :param request: The request object to send. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + if not isinstance(request, BaseModel): + request = utils.unmarshal( + request, models.TopicsControllerListTopicSubscriptionsRequest + ) + request = cast(models.TopicsControllerListTopicSubscriptionsRequest, request) + + req = self._build_request_async( + method="GET", + path="/v2/topics/{topicKey}/subscriptions", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(1000, 30000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["408", "409", "429", "5XX"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + base_url=base_url or "", + operation_id="TopicsController_listTopicSubscriptions", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=[ + "400", + "401", + "403", + "404", + "405", + "409", + "413", + "414", + "415", + "422", + "429", + "4XX", + "500", + "503", + "5XX", + ], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return models.TopicsControllerListTopicSubscriptionsResponse( + result=utils.unmarshal_json( + http_res.text, models.ListTopicSubscriptionsResponseDto + ), + headers=utils.get_response_headers(http_res.headers), + ) + if utils.match_response(http_res, "414", "application/json"): + response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) + raise models.ErrorDto(data=response_data) + if utils.match_response( + http_res, + ["400", "401", "403", "404", "405", "409", "413", "415"], + "application/json", + ): + response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) + raise models.ErrorDto(data=response_data) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.ValidationErrorDtoData + ) + raise models.ValidationErrorDto(data=response_data) + if utils.match_response(http_res, "429", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "500", "application/json"): + response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) + raise models.ErrorDto(data=response_data) + if utils.match_response(http_res, "503", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) + + def create( + self, + *, + topic_key: str, + create_topic_subscriptions_request_dto: Union[ + models.CreateTopicSubscriptionsRequestDto, + models.CreateTopicSubscriptionsRequestDtoTypedDict, + ], + idempotency_key: Optional[str] = None, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.TopicsControllerCreateTopicSubscriptionsResponse: + r"""Create topic subscriptions, if the topic does not exist, it will be created. + + :param topic_key: The key identifier of the topic + :param create_topic_subscriptions_request_dto: + :param idempotency_key: A header for idempotency purposes + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.TopicsControllerCreateTopicSubscriptionsRequest( + topic_key=topic_key, + idempotency_key=idempotency_key, + create_topic_subscriptions_request_dto=utils.get_pydantic_model( + create_topic_subscriptions_request_dto, + models.CreateTopicSubscriptionsRequestDto, + ), + ) + + req = self._build_request( + method="POST", + path="/v2/topics/{topicKey}/subscriptions", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request.create_topic_subscriptions_request_dto, + False, + False, + "json", + models.CreateTopicSubscriptionsRequestDto, + ), + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(1000, 30000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["408", "409", "429", "5XX"]) + + http_res = self.do_request( + hook_ctx=HookContext( + base_url=base_url or "", + operation_id="TopicsController_createTopicSubscriptions", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=[ + "400", + "401", + "403", + "404", + "405", + "409", + "413", + "414", + "415", + "422", + "429", + "4XX", + "500", + "503", + "5XX", + ], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "201", "application/json"): + return models.TopicsControllerCreateTopicSubscriptionsResponse( + result=utils.unmarshal_json( + http_res.text, models.CreateTopicSubscriptionsResponseDto + ), + headers=utils.get_response_headers(http_res.headers), + ) + if utils.match_response(http_res, "414", "application/json"): + response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) + raise models.ErrorDto(data=response_data) + if utils.match_response( + http_res, + ["400", "401", "403", "404", "405", "409", "413", "415"], + "application/json", + ): + response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) + raise models.ErrorDto(data=response_data) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.ValidationErrorDtoData + ) + raise models.ValidationErrorDto(data=response_data) + if utils.match_response(http_res, "429", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "500", "application/json"): + response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) + raise models.ErrorDto(data=response_data) + if utils.match_response(http_res, "503", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) + + async def create_async( + self, + *, + topic_key: str, + create_topic_subscriptions_request_dto: Union[ + models.CreateTopicSubscriptionsRequestDto, + models.CreateTopicSubscriptionsRequestDtoTypedDict, + ], + idempotency_key: Optional[str] = None, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.TopicsControllerCreateTopicSubscriptionsResponse: + r"""Create topic subscriptions, if the topic does not exist, it will be created. + + :param topic_key: The key identifier of the topic + :param create_topic_subscriptions_request_dto: + :param idempotency_key: A header for idempotency purposes + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.TopicsControllerCreateTopicSubscriptionsRequest( + topic_key=topic_key, + idempotency_key=idempotency_key, + create_topic_subscriptions_request_dto=utils.get_pydantic_model( + create_topic_subscriptions_request_dto, + models.CreateTopicSubscriptionsRequestDto, + ), + ) + + req = self._build_request_async( + method="POST", + path="/v2/topics/{topicKey}/subscriptions", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request.create_topic_subscriptions_request_dto, + False, + False, + "json", + models.CreateTopicSubscriptionsRequestDto, + ), + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(1000, 30000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["408", "409", "429", "5XX"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + base_url=base_url or "", + operation_id="TopicsController_createTopicSubscriptions", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=[ + "400", + "401", + "403", + "404", + "405", + "409", + "413", + "414", + "415", + "422", + "429", + "4XX", + "500", + "503", + "5XX", + ], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "201", "application/json"): + return models.TopicsControllerCreateTopicSubscriptionsResponse( + result=utils.unmarshal_json( + http_res.text, models.CreateTopicSubscriptionsResponseDto + ), + headers=utils.get_response_headers(http_res.headers), + ) + if utils.match_response(http_res, "414", "application/json"): + response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) + raise models.ErrorDto(data=response_data) + if utils.match_response( + http_res, + ["400", "401", "403", "404", "405", "409", "413", "415"], + "application/json", + ): + response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) + raise models.ErrorDto(data=response_data) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.ValidationErrorDtoData + ) + raise models.ValidationErrorDto(data=response_data) + if utils.match_response(http_res, "429", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "500", "application/json"): + response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) + raise models.ErrorDto(data=response_data) + if utils.match_response(http_res, "503", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) + + def delete( + self, + *, + topic_key: str, + delete_topic_subscriptions_request_dto: Union[ + models.DeleteTopicSubscriptionsRequestDto, + models.DeleteTopicSubscriptionsRequestDtoTypedDict, + ], + idempotency_key: Optional[str] = None, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.TopicsControllerDeleteTopicSubscriptionsResponse: + r"""Delete topic subscriptions + + :param topic_key: The key identifier of the topic + :param delete_topic_subscriptions_request_dto: + :param idempotency_key: A header for idempotency purposes + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.TopicsControllerDeleteTopicSubscriptionsRequest( + topic_key=topic_key, + idempotency_key=idempotency_key, + delete_topic_subscriptions_request_dto=utils.get_pydantic_model( + delete_topic_subscriptions_request_dto, + models.DeleteTopicSubscriptionsRequestDto, + ), + ) + + req = self._build_request( + method="DELETE", + path="/v2/topics/{topicKey}/subscriptions", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request.delete_topic_subscriptions_request_dto, + False, + False, + "json", + models.DeleteTopicSubscriptionsRequestDto, + ), + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(1000, 30000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["408", "409", "429", "5XX"]) + + http_res = self.do_request( + hook_ctx=HookContext( + base_url=base_url or "", + operation_id="TopicsController_deleteTopicSubscriptions", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=[ + "400", + "401", + "403", + "404", + "405", + "409", + "413", + "414", + "415", + "422", + "429", + "4XX", + "500", + "503", + "5XX", + ], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return models.TopicsControllerDeleteTopicSubscriptionsResponse( + result=utils.unmarshal_json( + http_res.text, models.DeleteTopicSubscriptionsResponseDto + ), + headers=utils.get_response_headers(http_res.headers), + ) + if utils.match_response(http_res, "414", "application/json"): + response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) + raise models.ErrorDto(data=response_data) + if utils.match_response( + http_res, + ["400", "401", "403", "404", "405", "409", "413", "415"], + "application/json", + ): + response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) + raise models.ErrorDto(data=response_data) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.ValidationErrorDtoData + ) + raise models.ValidationErrorDto(data=response_data) + if utils.match_response(http_res, "429", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "500", "application/json"): + response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) + raise models.ErrorDto(data=response_data) + if utils.match_response(http_res, "503", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = utils.stream_to_text(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) + + async def delete_async( + self, + *, + topic_key: str, + delete_topic_subscriptions_request_dto: Union[ + models.DeleteTopicSubscriptionsRequestDto, + models.DeleteTopicSubscriptionsRequestDtoTypedDict, + ], + idempotency_key: Optional[str] = None, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.TopicsControllerDeleteTopicSubscriptionsResponse: + r"""Delete topic subscriptions + + :param topic_key: The key identifier of the topic + :param delete_topic_subscriptions_request_dto: + :param idempotency_key: A header for idempotency purposes + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.TopicsControllerDeleteTopicSubscriptionsRequest( + topic_key=topic_key, + idempotency_key=idempotency_key, + delete_topic_subscriptions_request_dto=utils.get_pydantic_model( + delete_topic_subscriptions_request_dto, + models.DeleteTopicSubscriptionsRequestDto, + ), + ) + + req = self._build_request_async( + method="DELETE", + path="/v2/topics/{topicKey}/subscriptions", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request.delete_topic_subscriptions_request_dto, + False, + False, + "json", + models.DeleteTopicSubscriptionsRequestDto, + ), + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(1000, 30000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["408", "409", "429", "5XX"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + base_url=base_url or "", + operation_id="TopicsController_deleteTopicSubscriptions", + oauth2_scopes=[], + security_source=get_security_from_env( + self.sdk_configuration.security, models.Security + ), + ), + request=req, + error_status_codes=[ + "400", + "401", + "403", + "404", + "405", + "409", + "413", + "414", + "415", + "422", + "429", + "4XX", + "500", + "503", + "5XX", + ], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return models.TopicsControllerDeleteTopicSubscriptionsResponse( + result=utils.unmarshal_json( + http_res.text, models.DeleteTopicSubscriptionsResponseDto + ), + headers=utils.get_response_headers(http_res.headers), + ) + if utils.match_response(http_res, "414", "application/json"): + response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) + raise models.ErrorDto(data=response_data) + if utils.match_response( + http_res, + ["400", "401", "403", "404", "405", "409", "413", "415"], + "application/json", + ): + response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) + raise models.ErrorDto(data=response_data) + if utils.match_response(http_res, "422", "application/json"): + response_data = utils.unmarshal_json( + http_res.text, models.ValidationErrorDtoData + ) + raise models.ValidationErrorDto(data=response_data) + if utils.match_response(http_res, "429", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "500", "application/json"): + response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) + raise models.ErrorDto(data=response_data) + if utils.match_response(http_res, "503", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + "API error occurred", http_res.status_code, http_res_text, http_res + ) + + content_type = http_res.headers.get("Content-Type") + http_res_text = await utils.stream_to_text_async(http_res) + raise models.APIError( + f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", + http_res.status_code, + http_res_text, + http_res, + ) diff --git a/src/novu_py/topics.py b/src/novu_py/topics.py index ab75a2c2..d99337d5 100644 --- a/src/novu_py/topics.py +++ b/src/novu_py/topics.py @@ -5,9 +5,10 @@ from novu_py import models, utils from novu_py._hooks import HookContext from novu_py.novu_subscribers import NovuSubscribers -from novu_py.types import OptionalNullable, UNSET +from novu_py.subscriptions import Subscriptions +from novu_py.types import BaseModel, OptionalNullable, UNSET from novu_py.utils import get_security_from_env -from typing import Any, Mapping, Optional, Union +from typing import Any, Mapping, Optional, Union, cast class Topics(BaseSDK): @@ -15,6 +16,7 @@ class Topics(BaseSDK): https://docs.novu.co/subscribers/topics """ + subscriptions: Subscriptions subscribers: NovuSubscribers def __init__(self, sdk_config: SDKConfiguration) -> None: @@ -23,26 +25,24 @@ def __init__(self, sdk_config: SDKConfiguration) -> None: self._init_sdks() def _init_sdks(self): + self.subscriptions = Subscriptions(self.sdk_configuration) self.subscribers = NovuSubscribers(self.sdk_configuration) - def create( + def list( self, *, - create_topic_request_dto: Union[ - models.CreateTopicRequestDto, models.CreateTopicRequestDtoTypedDict - ], - idempotency_key: Optional[str] = None, + request: Union[ + models.TopicsControllerListTopicsRequest, + models.TopicsControllerListTopicsRequestTypedDict, + ] = models.TopicsControllerListTopicsRequest(), retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, - ) -> models.TopicsControllerCreateTopicResponse: - r"""Topic creation - - Create a topic + ) -> models.TopicsControllerListTopicsResponse: + r"""Get topics list - :param create_topic_request_dto: - :param idempotency_key: A header for idempotency purposes + :param request: The request object to send. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -58,33 +58,23 @@ def create( else: base_url = self._get_url(base_url, url_variables) - request = models.TopicsControllerCreateTopicRequest( - idempotency_key=idempotency_key, - create_topic_request_dto=utils.get_pydantic_model( - create_topic_request_dto, models.CreateTopicRequestDto - ), - ) + if not isinstance(request, BaseModel): + request = utils.unmarshal(request, models.TopicsControllerListTopicsRequest) + request = cast(models.TopicsControllerListTopicsRequest, request) req = self._build_request( - method="POST", - path="/v1/topics", + method="GET", + path="/v2/topics", base_url=base_url, url_variables=url_variables, request=request, - request_body_required=True, + request_body_required=False, request_has_path_params=False, request_has_query_params=True, user_agent_header="user-agent", accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, - get_serialized_body=lambda: utils.serialize_request_body( - request.create_topic_request_dto, - False, - False, - "json", - models.CreateTopicRequestDto, - ), timeout_ms=timeout_ms, ) @@ -103,7 +93,7 @@ def create( http_res = self.do_request( hook_ctx=HookContext( base_url=base_url or "", - operation_id="TopicsController_createTopic", + operation_id="TopicsController_listTopics", oauth2_scopes=[], security_source=get_security_from_env( self.sdk_configuration.security, models.Security @@ -131,10 +121,10 @@ def create( ) response_data: Any = None - if utils.match_response(http_res, "201", "application/json"): - return models.TopicsControllerCreateTopicResponse( + if utils.match_response(http_res, "200", "application/json"): + return models.TopicsControllerListTopicsResponse( result=utils.unmarshal_json( - http_res.text, models.CreateTopicResponseDto + http_res.text, models.ListTopicsResponseDto ), headers=utils.get_response_headers(http_res.headers), ) @@ -186,24 +176,21 @@ def create( http_res, ) - async def create_async( + async def list_async( self, *, - create_topic_request_dto: Union[ - models.CreateTopicRequestDto, models.CreateTopicRequestDtoTypedDict - ], - idempotency_key: Optional[str] = None, + request: Union[ + models.TopicsControllerListTopicsRequest, + models.TopicsControllerListTopicsRequestTypedDict, + ] = models.TopicsControllerListTopicsRequest(), retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, - ) -> models.TopicsControllerCreateTopicResponse: - r"""Topic creation - - Create a topic + ) -> models.TopicsControllerListTopicsResponse: + r"""Get topics list - :param create_topic_request_dto: - :param idempotency_key: A header for idempotency purposes + :param request: The request object to send. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -219,33 +206,23 @@ async def create_async( else: base_url = self._get_url(base_url, url_variables) - request = models.TopicsControllerCreateTopicRequest( - idempotency_key=idempotency_key, - create_topic_request_dto=utils.get_pydantic_model( - create_topic_request_dto, models.CreateTopicRequestDto - ), - ) + if not isinstance(request, BaseModel): + request = utils.unmarshal(request, models.TopicsControllerListTopicsRequest) + request = cast(models.TopicsControllerListTopicsRequest, request) req = self._build_request_async( - method="POST", - path="/v1/topics", + method="GET", + path="/v2/topics", base_url=base_url, url_variables=url_variables, request=request, - request_body_required=True, + request_body_required=False, request_has_path_params=False, request_has_query_params=True, user_agent_header="user-agent", accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, - get_serialized_body=lambda: utils.serialize_request_body( - request.create_topic_request_dto, - False, - False, - "json", - models.CreateTopicRequestDto, - ), timeout_ms=timeout_ms, ) @@ -264,7 +241,7 @@ async def create_async( http_res = await self.do_request_async( hook_ctx=HookContext( base_url=base_url or "", - operation_id="TopicsController_createTopic", + operation_id="TopicsController_listTopics", oauth2_scopes=[], security_source=get_security_from_env( self.sdk_configuration.security, models.Security @@ -292,10 +269,10 @@ async def create_async( ) response_data: Any = None - if utils.match_response(http_res, "201", "application/json"): - return models.TopicsControllerCreateTopicResponse( + if utils.match_response(http_res, "200", "application/json"): + return models.TopicsControllerListTopicsResponse( result=utils.unmarshal_json( - http_res.text, models.CreateTopicResponseDto + http_res.text, models.ListTopicsResponseDto ), headers=utils.get_response_headers(http_res.headers), ) @@ -347,25 +324,24 @@ async def create_async( http_res, ) - def list( + def create( self, *, - page: Optional[int] = 0, - page_size: Optional[int] = 10, - key: Optional[str] = None, + create_update_topic_request_dto: Union[ + models.CreateUpdateTopicRequestDto, + models.CreateUpdateTopicRequestDtoTypedDict, + ], idempotency_key: Optional[str] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, - ) -> models.TopicsControllerListTopicsResponse: - r"""Get topic list filtered + ) -> models.TopicsControllerUpsertTopicResponse: + r"""Create or update a topic - Returns a list of topics that can be paginated using the `page` query parameter and filtered by the topic key with the `key` query parameter + Creates a new topic if it does not exist, or updates an existing topic if it already exists - :param page: The page number to retrieve (starts from 0) - :param page_size: The number of items to return per page (default: 10) - :param key: A filter key to apply to the results + :param create_update_topic_request_dto: :param idempotency_key: A header for idempotency purposes :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -382,26 +358,33 @@ def list( else: base_url = self._get_url(base_url, url_variables) - request = models.TopicsControllerListTopicsRequest( - page=page, - page_size=page_size, - key=key, + request = models.TopicsControllerUpsertTopicRequest( idempotency_key=idempotency_key, + create_update_topic_request_dto=utils.get_pydantic_model( + create_update_topic_request_dto, models.CreateUpdateTopicRequestDto + ), ) req = self._build_request( - method="GET", - path="/v1/topics", + method="POST", + path="/v2/topics", base_url=base_url, url_variables=url_variables, request=request, - request_body_required=False, + request_body_required=True, request_has_path_params=False, request_has_query_params=True, user_agent_header="user-agent", accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request.create_update_topic_request_dto, + False, + False, + "json", + models.CreateUpdateTopicRequestDto, + ), timeout_ms=timeout_ms, ) @@ -420,7 +403,7 @@ def list( http_res = self.do_request( hook_ctx=HookContext( base_url=base_url or "", - operation_id="TopicsController_listTopics", + operation_id="TopicsController_upsertTopic", oauth2_scopes=[], security_source=get_security_from_env( self.sdk_configuration.security, models.Security @@ -448,11 +431,9 @@ def list( ) response_data: Any = None - if utils.match_response(http_res, "200", "application/json"): - return models.TopicsControllerListTopicsResponse( - result=utils.unmarshal_json( - http_res.text, models.FilterTopicsResponseDto - ), + if utils.match_response(http_res, ["200", "201"], "application/json"): + return models.TopicsControllerUpsertTopicResponse( + result=utils.unmarshal_json(http_res.text, models.TopicResponseDto), headers=utils.get_response_headers(http_res.headers), ) if utils.match_response(http_res, "414", "application/json"): @@ -503,25 +484,24 @@ def list( http_res, ) - async def list_async( + async def create_async( self, *, - page: Optional[int] = 0, - page_size: Optional[int] = 10, - key: Optional[str] = None, + create_update_topic_request_dto: Union[ + models.CreateUpdateTopicRequestDto, + models.CreateUpdateTopicRequestDtoTypedDict, + ], idempotency_key: Optional[str] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, - ) -> models.TopicsControllerListTopicsResponse: - r"""Get topic list filtered + ) -> models.TopicsControllerUpsertTopicResponse: + r"""Create or update a topic - Returns a list of topics that can be paginated using the `page` query parameter and filtered by the topic key with the `key` query parameter + Creates a new topic if it does not exist, or updates an existing topic if it already exists - :param page: The page number to retrieve (starts from 0) - :param page_size: The number of items to return per page (default: 10) - :param key: A filter key to apply to the results + :param create_update_topic_request_dto: :param idempotency_key: A header for idempotency purposes :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -538,26 +518,33 @@ async def list_async( else: base_url = self._get_url(base_url, url_variables) - request = models.TopicsControllerListTopicsRequest( - page=page, - page_size=page_size, - key=key, + request = models.TopicsControllerUpsertTopicRequest( idempotency_key=idempotency_key, + create_update_topic_request_dto=utils.get_pydantic_model( + create_update_topic_request_dto, models.CreateUpdateTopicRequestDto + ), ) req = self._build_request_async( - method="GET", - path="/v1/topics", + method="POST", + path="/v2/topics", base_url=base_url, url_variables=url_variables, request=request, - request_body_required=False, + request_body_required=True, request_has_path_params=False, request_has_query_params=True, user_agent_header="user-agent", accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request.create_update_topic_request_dto, + False, + False, + "json", + models.CreateUpdateTopicRequestDto, + ), timeout_ms=timeout_ms, ) @@ -576,7 +563,7 @@ async def list_async( http_res = await self.do_request_async( hook_ctx=HookContext( base_url=base_url or "", - operation_id="TopicsController_listTopics", + operation_id="TopicsController_upsertTopic", oauth2_scopes=[], security_source=get_security_from_env( self.sdk_configuration.security, models.Security @@ -604,11 +591,9 @@ async def list_async( ) response_data: Any = None - if utils.match_response(http_res, "200", "application/json"): - return models.TopicsControllerListTopicsResponse( - result=utils.unmarshal_json( - http_res.text, models.FilterTopicsResponseDto - ), + if utils.match_response(http_res, ["200", "201"], "application/json"): + return models.TopicsControllerUpsertTopicResponse( + result=utils.unmarshal_json(http_res.text, models.TopicResponseDto), headers=utils.get_response_headers(http_res.headers), ) if utils.match_response(http_res, "414", "application/json"): @@ -659,7 +644,7 @@ async def list_async( http_res, ) - def delete( + def get( self, *, topic_key: str, @@ -668,12 +653,10 @@ def delete( server_url: Optional[str] = None, timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, - ) -> models.TopicsControllerDeleteTopicResponse: - r"""Delete topic - - Delete a topic by its topic key if it has no subscribers + ) -> models.TopicsControllerGetTopicResponse: + r"""Get topic by key - :param topic_key: The topic key + :param topic_key: The key identifier of the topic :param idempotency_key: A header for idempotency purposes :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -690,14 +673,14 @@ def delete( else: base_url = self._get_url(base_url, url_variables) - request = models.TopicsControllerDeleteTopicRequest( + request = models.TopicsControllerGetTopicRequest( topic_key=topic_key, idempotency_key=idempotency_key, ) req = self._build_request( - method="DELETE", - path="/v1/topics/{topicKey}", + method="GET", + path="/v2/topics/{topicKey}", base_url=base_url, url_variables=url_variables, request=request, @@ -726,7 +709,7 @@ def delete( http_res = self.do_request( hook_ctx=HookContext( base_url=base_url or "", - operation_id="TopicsController_deleteTopic", + operation_id="TopicsController_getTopic", oauth2_scopes=[], security_source=get_security_from_env( self.sdk_configuration.security, models.Security @@ -754,9 +737,10 @@ def delete( ) response_data: Any = None - if utils.match_response(http_res, "204", "*"): - return models.TopicsControllerDeleteTopicResponse( - headers=utils.get_response_headers(http_res.headers) + if utils.match_response(http_res, "200", "application/json"): + return models.TopicsControllerGetTopicResponse( + result=utils.unmarshal_json(http_res.text, models.TopicResponseDto), + headers=utils.get_response_headers(http_res.headers), ) if utils.match_response(http_res, "414", "application/json"): response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) @@ -806,7 +790,7 @@ def delete( http_res, ) - async def delete_async( + async def get_async( self, *, topic_key: str, @@ -815,12 +799,10 @@ async def delete_async( server_url: Optional[str] = None, timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, - ) -> models.TopicsControllerDeleteTopicResponse: - r"""Delete topic - - Delete a topic by its topic key if it has no subscribers + ) -> models.TopicsControllerGetTopicResponse: + r"""Get topic by key - :param topic_key: The topic key + :param topic_key: The key identifier of the topic :param idempotency_key: A header for idempotency purposes :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -837,14 +819,14 @@ async def delete_async( else: base_url = self._get_url(base_url, url_variables) - request = models.TopicsControllerDeleteTopicRequest( + request = models.TopicsControllerGetTopicRequest( topic_key=topic_key, idempotency_key=idempotency_key, ) req = self._build_request_async( - method="DELETE", - path="/v1/topics/{topicKey}", + method="GET", + path="/v2/topics/{topicKey}", base_url=base_url, url_variables=url_variables, request=request, @@ -873,7 +855,7 @@ async def delete_async( http_res = await self.do_request_async( hook_ctx=HookContext( base_url=base_url or "", - operation_id="TopicsController_deleteTopic", + operation_id="TopicsController_getTopic", oauth2_scopes=[], security_source=get_security_from_env( self.sdk_configuration.security, models.Security @@ -901,9 +883,10 @@ async def delete_async( ) response_data: Any = None - if utils.match_response(http_res, "204", "*"): - return models.TopicsControllerDeleteTopicResponse( - headers=utils.get_response_headers(http_res.headers) + if utils.match_response(http_res, "200", "application/json"): + return models.TopicsControllerGetTopicResponse( + result=utils.unmarshal_json(http_res.text, models.TopicResponseDto), + headers=utils.get_response_headers(http_res.headers), ) if utils.match_response(http_res, "414", "application/json"): response_data = utils.unmarshal_json(http_res.text, models.ErrorDtoData) @@ -953,21 +936,23 @@ async def delete_async( http_res, ) - def retrieve( + def update( self, *, topic_key: str, + update_topic_request_dto: Union[ + models.UpdateTopicRequestDto, models.UpdateTopicRequestDtoTypedDict + ], idempotency_key: Optional[str] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, - ) -> models.TopicsControllerGetTopicResponse: - r"""Get topic - - Get a topic by its topic key + ) -> models.TopicsControllerUpdateTopicResponse: + r"""Update topic by key - :param topic_key: The topic key + :param topic_key: The key identifier of the topic + :param update_topic_request_dto: :param idempotency_key: A header for idempotency purposes :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -984,24 +969,34 @@ def retrieve( else: base_url = self._get_url(base_url, url_variables) - request = models.TopicsControllerGetTopicRequest( + request = models.TopicsControllerUpdateTopicRequest( topic_key=topic_key, idempotency_key=idempotency_key, + update_topic_request_dto=utils.get_pydantic_model( + update_topic_request_dto, models.UpdateTopicRequestDto + ), ) req = self._build_request( - method="GET", - path="/v1/topics/{topicKey}", + method="PATCH", + path="/v2/topics/{topicKey}", base_url=base_url, url_variables=url_variables, request=request, - request_body_required=False, + request_body_required=True, request_has_path_params=True, request_has_query_params=True, user_agent_header="user-agent", accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request.update_topic_request_dto, + False, + False, + "json", + models.UpdateTopicRequestDto, + ), timeout_ms=timeout_ms, ) @@ -1020,7 +1015,7 @@ def retrieve( http_res = self.do_request( hook_ctx=HookContext( base_url=base_url or "", - operation_id="TopicsController_getTopic", + operation_id="TopicsController_updateTopic", oauth2_scopes=[], security_source=get_security_from_env( self.sdk_configuration.security, models.Security @@ -1049,8 +1044,8 @@ def retrieve( response_data: Any = None if utils.match_response(http_res, "200", "application/json"): - return models.TopicsControllerGetTopicResponse( - result=utils.unmarshal_json(http_res.text, models.GetTopicResponseDto), + return models.TopicsControllerUpdateTopicResponse( + result=utils.unmarshal_json(http_res.text, models.TopicResponseDto), headers=utils.get_response_headers(http_res.headers), ) if utils.match_response(http_res, "414", "application/json"): @@ -1101,21 +1096,23 @@ def retrieve( http_res, ) - async def retrieve_async( + async def update_async( self, *, topic_key: str, + update_topic_request_dto: Union[ + models.UpdateTopicRequestDto, models.UpdateTopicRequestDtoTypedDict + ], idempotency_key: Optional[str] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, - ) -> models.TopicsControllerGetTopicResponse: - r"""Get topic - - Get a topic by its topic key + ) -> models.TopicsControllerUpdateTopicResponse: + r"""Update topic by key - :param topic_key: The topic key + :param topic_key: The key identifier of the topic + :param update_topic_request_dto: :param idempotency_key: A header for idempotency purposes :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -1132,24 +1129,34 @@ async def retrieve_async( else: base_url = self._get_url(base_url, url_variables) - request = models.TopicsControllerGetTopicRequest( + request = models.TopicsControllerUpdateTopicRequest( topic_key=topic_key, idempotency_key=idempotency_key, + update_topic_request_dto=utils.get_pydantic_model( + update_topic_request_dto, models.UpdateTopicRequestDto + ), ) req = self._build_request_async( - method="GET", - path="/v1/topics/{topicKey}", + method="PATCH", + path="/v2/topics/{topicKey}", base_url=base_url, url_variables=url_variables, request=request, - request_body_required=False, + request_body_required=True, request_has_path_params=True, request_has_query_params=True, user_agent_header="user-agent", accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request.update_topic_request_dto, + False, + False, + "json", + models.UpdateTopicRequestDto, + ), timeout_ms=timeout_ms, ) @@ -1168,7 +1175,7 @@ async def retrieve_async( http_res = await self.do_request_async( hook_ctx=HookContext( base_url=base_url or "", - operation_id="TopicsController_getTopic", + operation_id="TopicsController_updateTopic", oauth2_scopes=[], security_source=get_security_from_env( self.sdk_configuration.security, models.Security @@ -1197,8 +1204,8 @@ async def retrieve_async( response_data: Any = None if utils.match_response(http_res, "200", "application/json"): - return models.TopicsControllerGetTopicResponse( - result=utils.unmarshal_json(http_res.text, models.GetTopicResponseDto), + return models.TopicsControllerUpdateTopicResponse( + result=utils.unmarshal_json(http_res.text, models.TopicResponseDto), headers=utils.get_response_headers(http_res.headers), ) if utils.match_response(http_res, "414", "application/json"): @@ -1249,25 +1256,19 @@ async def retrieve_async( http_res, ) - def rename( + def delete( self, *, topic_key: str, - rename_topic_request_dto: Union[ - models.RenameTopicRequestDto, models.RenameTopicRequestDtoTypedDict - ], idempotency_key: Optional[str] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, - ) -> models.TopicsControllerRenameTopicResponse: - r"""Rename a topic - - Rename a topic by providing a new name + ) -> models.TopicsControllerDeleteTopicResponse: + r"""Delete topic by key - :param topic_key: The topic key - :param rename_topic_request_dto: + :param topic_key: The key identifier of the topic :param idempotency_key: A header for idempotency purposes :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -1284,34 +1285,24 @@ def rename( else: base_url = self._get_url(base_url, url_variables) - request = models.TopicsControllerRenameTopicRequest( + request = models.TopicsControllerDeleteTopicRequest( topic_key=topic_key, idempotency_key=idempotency_key, - rename_topic_request_dto=utils.get_pydantic_model( - rename_topic_request_dto, models.RenameTopicRequestDto - ), ) req = self._build_request( - method="PATCH", - path="/v1/topics/{topicKey}", + method="DELETE", + path="/v2/topics/{topicKey}", base_url=base_url, url_variables=url_variables, request=request, - request_body_required=True, + request_body_required=False, request_has_path_params=True, request_has_query_params=True, user_agent_header="user-agent", accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, - get_serialized_body=lambda: utils.serialize_request_body( - request.rename_topic_request_dto, - False, - False, - "json", - models.RenameTopicRequestDto, - ), timeout_ms=timeout_ms, ) @@ -1330,7 +1321,7 @@ def rename( http_res = self.do_request( hook_ctx=HookContext( base_url=base_url or "", - operation_id="TopicsController_renameTopic", + operation_id="TopicsController_deleteTopic", oauth2_scopes=[], security_source=get_security_from_env( self.sdk_configuration.security, models.Security @@ -1359,9 +1350,9 @@ def rename( response_data: Any = None if utils.match_response(http_res, "200", "application/json"): - return models.TopicsControllerRenameTopicResponse( + return models.TopicsControllerDeleteTopicResponse( result=utils.unmarshal_json( - http_res.text, models.RenameTopicResponseDto + http_res.text, models.DeleteTopicResponseDto ), headers=utils.get_response_headers(http_res.headers), ) @@ -1413,25 +1404,19 @@ def rename( http_res, ) - async def rename_async( + async def delete_async( self, *, topic_key: str, - rename_topic_request_dto: Union[ - models.RenameTopicRequestDto, models.RenameTopicRequestDtoTypedDict - ], idempotency_key: Optional[str] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, - ) -> models.TopicsControllerRenameTopicResponse: - r"""Rename a topic - - Rename a topic by providing a new name + ) -> models.TopicsControllerDeleteTopicResponse: + r"""Delete topic by key - :param topic_key: The topic key - :param rename_topic_request_dto: + :param topic_key: The key identifier of the topic :param idempotency_key: A header for idempotency purposes :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -1448,34 +1433,24 @@ async def rename_async( else: base_url = self._get_url(base_url, url_variables) - request = models.TopicsControllerRenameTopicRequest( + request = models.TopicsControllerDeleteTopicRequest( topic_key=topic_key, idempotency_key=idempotency_key, - rename_topic_request_dto=utils.get_pydantic_model( - rename_topic_request_dto, models.RenameTopicRequestDto - ), ) req = self._build_request_async( - method="PATCH", - path="/v1/topics/{topicKey}", + method="DELETE", + path="/v2/topics/{topicKey}", base_url=base_url, url_variables=url_variables, request=request, - request_body_required=True, + request_body_required=False, request_has_path_params=True, request_has_query_params=True, user_agent_header="user-agent", accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, - get_serialized_body=lambda: utils.serialize_request_body( - request.rename_topic_request_dto, - False, - False, - "json", - models.RenameTopicRequestDto, - ), timeout_ms=timeout_ms, ) @@ -1494,7 +1469,7 @@ async def rename_async( http_res = await self.do_request_async( hook_ctx=HookContext( base_url=base_url or "", - operation_id="TopicsController_renameTopic", + operation_id="TopicsController_deleteTopic", oauth2_scopes=[], security_source=get_security_from_env( self.sdk_configuration.security, models.Security @@ -1523,9 +1498,9 @@ async def rename_async( response_data: Any = None if utils.match_response(http_res, "200", "application/json"): - return models.TopicsControllerRenameTopicResponse( + return models.TopicsControllerDeleteTopicResponse( result=utils.unmarshal_json( - http_res.text, models.RenameTopicResponseDto + http_res.text, models.DeleteTopicResponseDto ), headers=utils.get_response_headers(http_res.headers), ) diff --git a/src/novu_py/types/basemodel.py b/src/novu_py/types/basemodel.py index a6187efa..231c2e37 100644 --- a/src/novu_py/types/basemodel.py +++ b/src/novu_py/types/basemodel.py @@ -2,7 +2,7 @@ from pydantic import ConfigDict, model_serializer from pydantic import BaseModel as PydanticBaseModel -from typing import TYPE_CHECKING, Literal, Optional, TypeVar, Union, NewType +from typing import TYPE_CHECKING, Literal, Optional, TypeVar, Union from typing_extensions import TypeAliasType, TypeAlias @@ -35,5 +35,5 @@ def __bool__(self) -> Literal[False]: "OptionalNullable", Union[Optional[Nullable[T]], Unset], type_params=(T,) ) -UnrecognizedInt = NewType("UnrecognizedInt", int) -UnrecognizedStr = NewType("UnrecognizedStr", str) +UnrecognizedInt: TypeAlias = int +UnrecognizedStr: TypeAlias = str diff --git a/src/novu_py/utils/__init__.py b/src/novu_py/utils/__init__.py index d8b21128..94dd31a9 100644 --- a/src/novu_py/utils/__init__.py +++ b/src/novu_py/utils/__init__.py @@ -1,6 +1,7 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from .annotations import get_discriminator +from .datetimes import parse_datetime from .enums import OpenEnumMeta from .headers import get_headers, get_response_headers from .metadata import ( diff --git a/src/novu_py/utils/datetimes.py b/src/novu_py/utils/datetimes.py new file mode 100644 index 00000000..a6c52cd6 --- /dev/null +++ b/src/novu_py/utils/datetimes.py @@ -0,0 +1,23 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from datetime import datetime +import sys + + +def parse_datetime(datetime_string: str) -> datetime: + """ + Convert a RFC 3339 / ISO 8601 formatted string into a datetime object. + Python versions 3.11 and later support parsing RFC 3339 directly with + datetime.fromisoformat(), but for earlier versions, this function + encapsulates the necessary extra logic. + """ + # Python 3.11 and later can parse RFC 3339 directly + if sys.version_info >= (3, 11): + return datetime.fromisoformat(datetime_string) + + # For Python 3.10 and earlier, a common ValueError is trailing 'Z' suffix, + # so fix that upfront. + if datetime_string.endswith("Z"): + datetime_string = datetime_string[:-1] + "+00:00" + + return datetime.fromisoformat(datetime_string) diff --git a/src/novu_py/utils/serializers.py b/src/novu_py/utils/serializers.py index baa41fbd..76e44d71 100644 --- a/src/novu_py/utils/serializers.py +++ b/src/novu_py/utils/serializers.py @@ -1,13 +1,16 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from decimal import Decimal +import functools import json -from typing import Any, Dict, List, Union, get_args -import httpx +import typing +from typing import Any, Dict, List, Tuple, Union, get_args +import typing_extensions from typing_extensions import get_origin + +import httpx from pydantic import ConfigDict, create_model from pydantic_core import from_json -from typing_inspection.typing_objects import is_union from ..types.basemodel import BaseModel, Nullable, OptionalNullable, Unset @@ -185,6 +188,13 @@ def is_nullable(field): return False +def is_union(obj: object) -> bool: + """ + Returns True if the given object is a typing.Union or typing_extensions.Union. + """ + return any(obj is typing_obj for typing_obj in _get_typing_objects_by_name_of("Union")) + + def stream_to_text(stream: httpx.Response) -> str: return "".join(stream.iter_text()) @@ -217,3 +227,22 @@ def _contains_pydantic_model(data: Any) -> bool: return any(_contains_pydantic_model(value) for value in data.values()) return False + + +@functools.cache +def _get_typing_objects_by_name_of(name: str) -> Tuple[Any, ...]: + """ + Get typing objects by name from typing and typing_extensions. + Reference: https://typing-extensions.readthedocs.io/en/latest/#runtime-use-of-types + """ + result = tuple( + getattr(module, name) + for module in (typing, typing_extensions) + if hasattr(module, name) + ) + if not result: + raise ValueError( + f"Neither typing nor typing_extensions has an object called {name!r}" + ) + return result +