@novu/api 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. package/FUNCTIONS.md +12 -3
  2. package/README.md +145 -30
  3. package/bin/mcp-server.js +966 -518
  4. package/bin/mcp-server.js.map +60 -51
  5. package/docs/sdks/novu/README.md +142 -24
  6. package/docs/sdks/subscribers/README.md +113 -0
  7. package/funcs/subscribersSearch.js +1 -0
  8. package/funcs/subscribersSearch.js.map +1 -1
  9. package/funcs/subscribersUpsert.d.ts +18 -0
  10. package/funcs/subscribersUpsert.d.ts.map +1 -0
  11. package/funcs/subscribersUpsert.js +148 -0
  12. package/funcs/subscribersUpsert.js.map +1 -0
  13. package/hooks/types.d.ts +1 -1
  14. package/hooks/types.d.ts.map +1 -1
  15. package/jsr.json +1 -1
  16. package/lib/config.d.ts +4 -4
  17. package/lib/config.js +4 -4
  18. package/lib/config.js.map +1 -1
  19. package/lib/matchers.d.ts +3 -1
  20. package/lib/matchers.d.ts.map +1 -1
  21. package/lib/matchers.js +13 -1
  22. package/lib/matchers.js.map +1 -1
  23. package/lib/sdks.d.ts +3 -1
  24. package/lib/sdks.d.ts.map +1 -1
  25. package/lib/sdks.js +13 -13
  26. package/lib/sdks.js.map +1 -1
  27. package/mcp-server/mcp-server.js +1 -1
  28. package/mcp-server/prompts.d.ts.map +1 -1
  29. package/mcp-server/prompts.js +5 -1
  30. package/mcp-server/prompts.js.map +1 -1
  31. package/mcp-server/resources.d.ts.map +1 -1
  32. package/mcp-server/resources.js +10 -2
  33. package/mcp-server/resources.js.map +1 -1
  34. package/mcp-server/server.d.ts.map +1 -1
  35. package/mcp-server/server.js +4 -3
  36. package/mcp-server/server.js.map +1 -1
  37. package/mcp-server/tools/subscribersUpsert.d.ts +11 -0
  38. package/mcp-server/tools/subscribersUpsert.d.ts.map +1 -0
  39. package/mcp-server/tools/subscribersUpsert.js +57 -0
  40. package/mcp-server/tools/subscribersUpsert.js.map +1 -0
  41. package/mcp-server/tools.d.ts.map +1 -1
  42. package/mcp-server/tools.js +4 -3
  43. package/mcp-server/tools.js.map +1 -1
  44. package/models/components/activitynotificationjobresponsedto.d.ts +15 -15
  45. package/models/components/activitynotificationjobresponsedto.d.ts.map +1 -1
  46. package/models/components/activitynotificationjobresponsedto.js +19 -18
  47. package/models/components/activitynotificationjobresponsedto.js.map +1 -1
  48. package/models/components/activitynotificationstepresponsedto.d.ts +15 -15
  49. package/models/components/activitynotificationstepresponsedto.d.ts.map +1 -1
  50. package/models/components/activitynotificationstepresponsedto.js +18 -18
  51. package/models/components/activitynotificationstepresponsedto.js.map +1 -1
  52. package/models/components/channelsettingsdto.d.ts +2 -78
  53. package/models/components/channelsettingsdto.d.ts.map +1 -1
  54. package/models/components/channelsettingsdto.js +4 -41
  55. package/models/components/channelsettingsdto.js.map +1 -1
  56. package/models/components/chatorpushproviderenum.d.ts +79 -0
  57. package/models/components/chatorpushproviderenum.d.ts.map +1 -0
  58. package/models/components/chatorpushproviderenum.js +68 -0
  59. package/models/components/chatorpushproviderenum.js.map +1 -0
  60. package/models/components/constraintvalidation.d.ts +115 -0
  61. package/models/components/constraintvalidation.d.ts.map +1 -0
  62. package/models/components/constraintvalidation.js +157 -0
  63. package/models/components/constraintvalidation.js.map +1 -0
  64. package/models/components/digestmetadatadto.d.ts +8 -8
  65. package/models/components/digestmetadatadto.d.ts.map +1 -1
  66. package/models/components/digestmetadatadto.js +13 -13
  67. package/models/components/digestmetadatadto.js.map +1 -1
  68. package/models/components/digestregularmetadata.d.ts +16 -16
  69. package/models/components/digestregularmetadata.d.ts.map +1 -1
  70. package/models/components/digestregularmetadata.js +25 -25
  71. package/models/components/digestregularmetadata.js.map +1 -1
  72. package/models/components/digesttimedconfigdto.d.ts +8 -8
  73. package/models/components/digesttimedconfigdto.d.ts.map +1 -1
  74. package/models/components/digesttimedconfigdto.js +13 -14
  75. package/models/components/digesttimedconfigdto.js.map +1 -1
  76. package/models/components/getsubscriberpreferencesdto.d.ts +6 -6
  77. package/models/components/getsubscriberpreferencesdto.d.ts.map +1 -1
  78. package/models/components/getsubscriberpreferencesdto.js +6 -6
  79. package/models/components/getsubscriberpreferencesdto.js.map +1 -1
  80. package/models/components/index.d.ts +11 -5
  81. package/models/components/index.d.ts.map +1 -1
  82. package/models/components/index.js +11 -5
  83. package/models/components/index.js.map +1 -1
  84. package/models/components/integrationresponsedto.d.ts +8 -8
  85. package/models/components/integrationresponsedto.d.ts.map +1 -1
  86. package/models/components/integrationresponsedto.js +14 -13
  87. package/models/components/integrationresponsedto.js.map +1 -1
  88. package/models/components/messageactionresult.d.ts +15 -15
  89. package/models/components/messageactionresult.d.ts.map +1 -1
  90. package/models/components/messageactionresult.js +18 -18
  91. package/models/components/messageactionresult.js.map +1 -1
  92. package/models/components/messagecta.d.ts +2 -2
  93. package/models/components/messagecta.d.ts.map +1 -1
  94. package/models/components/messagecta.js +2 -2
  95. package/models/components/messagecta.js.map +1 -1
  96. package/models/components/messageresponsedto.d.ts +14 -4
  97. package/models/components/messageresponsedto.d.ts.map +1 -1
  98. package/models/components/messageresponsedto.js +8 -4
  99. package/models/components/messageresponsedto.js.map +1 -1
  100. package/models/components/messagesresponsedto.d.ts +53 -0
  101. package/models/components/messagesresponsedto.d.ts.map +1 -0
  102. package/models/components/messagesresponsedto.js +68 -0
  103. package/models/components/messagesresponsedto.js.map +1 -0
  104. package/models/components/notificationfeeditemdto.d.ts +0 -5
  105. package/models/components/notificationfeeditemdto.d.ts.map +1 -1
  106. package/models/components/notificationfeeditemdto.js +0 -2
  107. package/models/components/notificationfeeditemdto.js.map +1 -1
  108. package/models/components/notificationstepdto.d.ts +13 -13
  109. package/models/components/notificationstepdto.d.ts.map +1 -1
  110. package/models/components/notificationstepdto.js +16 -16
  111. package/models/components/notificationstepdto.js.map +1 -1
  112. package/models/components/notificationtriggerdto.d.ts +8 -8
  113. package/models/components/notificationtriggerdto.d.ts.map +1 -1
  114. package/models/components/notificationtriggerdto.js +13 -13
  115. package/models/components/notificationtriggerdto.js.map +1 -1
  116. package/models/components/patchsubscriberpreferencesdto.d.ts +1 -1
  117. package/models/components/preferenceoverridesourceenum.d.ts +37 -0
  118. package/models/components/preferenceoverridesourceenum.d.ts.map +1 -0
  119. package/models/components/preferenceoverridesourceenum.js +54 -0
  120. package/models/components/preferenceoverridesourceenum.js.map +1 -0
  121. package/models/components/providersidenum.d.ts +3 -0
  122. package/models/components/providersidenum.d.ts.map +1 -1
  123. package/models/components/providersidenum.js +1 -0
  124. package/models/components/providersidenum.js.map +1 -1
  125. package/models/components/stepfilterdto.d.ts +8 -8
  126. package/models/components/stepfilterdto.d.ts.map +1 -1
  127. package/models/components/stepfilterdto.js +13 -13
  128. package/models/components/stepfilterdto.js.map +1 -1
  129. package/models/components/stepsoverrides.d.ts +40 -0
  130. package/models/components/stepsoverrides.d.ts.map +1 -0
  131. package/models/components/{workflowinfodto.js → stepsoverrides.js} +19 -23
  132. package/models/components/stepsoverrides.js.map +1 -0
  133. package/models/components/steptypeenum.d.ts +2 -2
  134. package/models/components/steptypeenum.js +1 -1
  135. package/models/components/subscriberchanneldto.d.ts +8 -8
  136. package/models/components/subscriberchanneldto.d.ts.map +1 -1
  137. package/models/components/subscriberchanneldto.js +14 -13
  138. package/models/components/subscriberchanneldto.js.map +1 -1
  139. package/models/components/subscriberglobalpreferencedto.d.ts +38 -0
  140. package/models/components/subscriberglobalpreferencedto.d.ts.map +1 -0
  141. package/models/components/subscriberglobalpreferencedto.js +62 -0
  142. package/models/components/subscriberglobalpreferencedto.js.map +1 -0
  143. package/models/components/subscriberpreferencechannels.d.ts +52 -0
  144. package/models/components/subscriberpreferencechannels.d.ts.map +1 -0
  145. package/models/components/{preferencechannels.js → subscriberpreferencechannels.js} +17 -17
  146. package/models/components/subscriberpreferencechannels.js.map +1 -0
  147. package/models/components/subscriberpreferenceoverridedto.d.ts +39 -0
  148. package/models/components/subscriberpreferenceoverridedto.d.ts.map +1 -0
  149. package/models/components/subscriberpreferenceoverridedto.js +63 -0
  150. package/models/components/subscriberpreferenceoverridedto.js.map +1 -0
  151. package/models/components/subscriberpreferencesworkflowinfodto.d.ts +47 -0
  152. package/models/components/subscriberpreferencesworkflowinfodto.d.ts.map +1 -0
  153. package/models/components/subscriberpreferencesworkflowinfodto.js +65 -0
  154. package/models/components/subscriberpreferencesworkflowinfodto.js.map +1 -0
  155. package/models/components/subscriberresponsedto.d.ts +26 -26
  156. package/models/components/subscriberresponsedto.d.ts.map +1 -1
  157. package/models/components/subscriberresponsedto.js +12 -12
  158. package/models/components/subscriberresponsedto.js.map +1 -1
  159. package/models/components/subscriberworkflowpreferencedto.d.ts +50 -0
  160. package/models/components/subscriberworkflowpreferencedto.d.ts.map +1 -0
  161. package/models/components/subscriberworkflowpreferencedto.js +68 -0
  162. package/models/components/subscriberworkflowpreferencedto.js.map +1 -0
  163. package/models/components/timedconfig.d.ts +8 -8
  164. package/models/components/timedconfig.d.ts.map +1 -1
  165. package/models/components/timedconfig.js +14 -13
  166. package/models/components/timedconfig.js.map +1 -1
  167. package/models/components/triggereventrequestdto.d.ts +102 -10
  168. package/models/components/triggereventrequestdto.d.ts.map +1 -1
  169. package/models/components/triggereventrequestdto.js +43 -3
  170. package/models/components/triggereventrequestdto.js.map +1 -1
  171. package/models/components/triggereventtoallrequestdto.d.ts +84 -2
  172. package/models/components/triggereventtoallrequestdto.d.ts.map +1 -1
  173. package/models/components/triggereventtoallrequestdto.js +28 -2
  174. package/models/components/triggereventtoallrequestdto.js.map +1 -1
  175. package/models/components/updatesubscriberchannelrequestdto.d.ts +2 -78
  176. package/models/components/updatesubscriberchannelrequestdto.d.ts.map +1 -1
  177. package/models/components/updatesubscriberchannelrequestdto.js +4 -41
  178. package/models/components/updatesubscriberchannelrequestdto.js.map +1 -1
  179. package/models/components/updatesubscriberrequestdto.d.ts +72 -0
  180. package/models/components/updatesubscriberrequestdto.d.ts.map +1 -0
  181. package/models/components/updatesubscriberrequestdto.js +74 -0
  182. package/models/components/updatesubscriberrequestdto.js.map +1 -0
  183. package/models/components/workflowresponse.d.ts +3 -3
  184. package/models/components/workflowresponse.d.ts.map +1 -1
  185. package/models/components/workflowresponse.js +3 -3
  186. package/models/components/workflowresponse.js.map +1 -1
  187. package/models/errors/errordto.d.ts +83 -3
  188. package/models/errors/errordto.d.ts.map +1 -1
  189. package/models/errors/errordto.js +99 -3
  190. package/models/errors/errordto.js.map +1 -1
  191. package/models/errors/validationerrordto.d.ts +66 -51
  192. package/models/errors/validationerrordto.d.ts.map +1 -1
  193. package/models/errors/validationerrordto.js +83 -67
  194. package/models/errors/validationerrordto.js.map +1 -1
  195. package/models/operations/index.d.ts +1 -0
  196. package/models/operations/index.d.ts.map +1 -1
  197. package/models/operations/index.js +1 -0
  198. package/models/operations/index.js.map +1 -1
  199. package/models/operations/messagescontrollergetmessages.d.ts +2 -2
  200. package/models/operations/messagescontrollergetmessages.d.ts.map +1 -1
  201. package/models/operations/messagescontrollergetmessages.js +2 -2
  202. package/models/operations/messagescontrollergetmessages.js.map +1 -1
  203. package/models/operations/subscriberscontrollersearchsubscribers.d.ts +26 -6
  204. package/models/operations/subscriberscontrollersearchsubscribers.d.ts.map +1 -1
  205. package/models/operations/subscriberscontrollersearchsubscribers.js +11 -6
  206. package/models/operations/subscriberscontrollersearchsubscribers.js.map +1 -1
  207. package/models/operations/subscribersv1controllerupdatesubscriber.d.ts +68 -0
  208. package/models/operations/subscribersv1controllerupdatesubscriber.d.ts.map +1 -0
  209. package/models/operations/subscribersv1controllerupdatesubscriber.js +114 -0
  210. package/models/operations/subscribersv1controllerupdatesubscriber.js.map +1 -0
  211. package/package.json +3 -3
  212. package/sdk/subscribers.d.ts +7 -0
  213. package/sdk/subscribers.d.ts.map +1 -1
  214. package/sdk/subscribers.js +10 -0
  215. package/sdk/subscribers.js.map +1 -1
  216. package/sources/json-development.json +5818 -3516
  217. package/src/funcs/subscribersSearch.ts +1 -0
  218. package/src/funcs/subscribersUpsert.ts +240 -0
  219. package/src/hooks/types.ts +1 -1
  220. package/src/lib/config.ts +4 -4
  221. package/src/lib/matchers.ts +20 -0
  222. package/src/lib/sdks.ts +19 -13
  223. package/src/mcp-server/mcp-server.ts +1 -1
  224. package/src/mcp-server/prompts.ts +8 -1
  225. package/src/mcp-server/resources.ts +16 -2
  226. package/src/mcp-server/server.ts +5 -3
  227. package/src/mcp-server/tools/subscribersUpsert.ts +43 -0
  228. package/src/mcp-server/tools.ts +6 -3
  229. package/src/models/components/activitynotificationjobresponsedto.ts +48 -26
  230. package/src/models/components/activitynotificationstepresponsedto.ts +50 -29
  231. package/src/models/components/channelsettingsdto.ts +8 -50
  232. package/src/models/components/chatorpushproviderenum.ts +54 -0
  233. package/src/models/components/constraintvalidation.ts +270 -0
  234. package/src/models/components/digestmetadatadto.ts +16 -15
  235. package/src/models/components/digestregularmetadata.ts +30 -36
  236. package/src/models/components/digesttimedconfigdto.ts +18 -14
  237. package/src/models/components/getsubscriberpreferencesdto.ts +18 -18
  238. package/src/models/components/index.ts +11 -5
  239. package/src/models/components/integrationresponsedto.ts +14 -18
  240. package/src/models/components/messageactionresult.ts +24 -31
  241. package/src/models/components/messagecta.ts +4 -4
  242. package/src/models/components/messageresponsedto.ts +22 -8
  243. package/src/models/components/messagesresponsedto.ts +103 -0
  244. package/src/models/components/notificationfeeditemdto.ts +0 -7
  245. package/src/models/components/notificationstepdto.ts +20 -26
  246. package/src/models/components/notificationtriggerdto.ts +18 -15
  247. package/src/models/components/patchsubscriberpreferencesdto.ts +1 -1
  248. package/src/models/components/preferenceoverridesourceenum.ts +42 -0
  249. package/src/models/components/providersidenum.ts +1 -0
  250. package/src/models/components/stepfilterdto.ts +16 -15
  251. package/src/models/components/stepsoverrides.ts +65 -0
  252. package/src/models/components/steptypeenum.ts +2 -2
  253. package/src/models/components/subscriberchanneldto.ts +14 -18
  254. package/src/models/components/subscriberglobalpreferencedto.ts +84 -0
  255. package/src/models/components/subscriberpreferencechannels.ts +108 -0
  256. package/src/models/components/subscriberpreferenceoverridedto.ts +88 -0
  257. package/src/models/components/subscriberpreferencesworkflowinfodto.ts +95 -0
  258. package/src/models/components/subscriberresponsedto.ts +34 -34
  259. package/src/models/components/subscriberworkflowpreferencedto.ts +110 -0
  260. package/src/models/components/timedconfig.ts +14 -16
  261. package/src/models/components/triggereventrequestdto.ts +122 -4
  262. package/src/models/components/triggereventtoallrequestdto.ts +92 -5
  263. package/src/models/components/updatesubscriberchannelrequestdto.ts +8 -56
  264. package/src/models/components/updatesubscriberrequestdto.ts +124 -0
  265. package/src/models/components/workflowresponse.ts +9 -9
  266. package/src/models/errors/errordto.ts +202 -5
  267. package/src/models/errors/validationerrordto.ts +178 -110
  268. package/src/models/operations/index.ts +1 -0
  269. package/src/models/operations/messagescontrollergetmessages.ts +4 -4
  270. package/src/models/operations/subscriberscontrollersearchsubscribers.ts +34 -12
  271. package/src/models/operations/subscribersv1controllerupdatesubscriber.ts +191 -0
  272. package/src/sdk/subscribers.ts +22 -0
  273. package/models/components/globalpreferencedto.d.ts +0 -38
  274. package/models/components/globalpreferencedto.d.ts.map +0 -1
  275. package/models/components/globalpreferencedto.js +0 -62
  276. package/models/components/globalpreferencedto.js.map +0 -1
  277. package/models/components/overrides.d.ts +0 -112
  278. package/models/components/overrides.d.ts.map +0 -1
  279. package/models/components/overrides.js +0 -111
  280. package/models/components/overrides.js.map +0 -1
  281. package/models/components/preferencechannels.d.ts +0 -37
  282. package/models/components/preferencechannels.d.ts.map +0 -1
  283. package/models/components/preferencechannels.js.map +0 -1
  284. package/models/components/workflowinfodto.d.ts +0 -42
  285. package/models/components/workflowinfodto.d.ts.map +0 -1
  286. package/models/components/workflowinfodto.js.map +0 -1
  287. package/models/components/workflowpreferencedto.d.ts +0 -50
  288. package/models/components/workflowpreferencedto.d.ts.map +0 -1
  289. package/models/components/workflowpreferencedto.js +0 -68
  290. package/models/components/workflowpreferencedto.js.map +0 -1
  291. package/src/models/components/globalpreferencedto.ts +0 -82
  292. package/src/models/components/overrides.ts +0 -139
  293. package/src/models/components/preferencechannels.ts +0 -91
  294. package/src/models/components/workflowinfodto.ts +0 -81
  295. package/src/models/components/workflowpreferencedto.ts +0 -108
@@ -96,6 +96,7 @@ async function $do(
96
96
  "after": payload.after,
97
97
  "before": payload.before,
98
98
  "email": payload.email,
99
+ "includeCursor": payload.includeCursor,
99
100
  "limit": payload.limit,
100
101
  "name": payload.name,
101
102
  "orderBy": payload.orderBy,
@@ -0,0 +1,240 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import { NovuCore } from "../core.js";
6
+ import { encodeJSON, encodeSimple } from "../lib/encodings.js";
7
+ import * as M from "../lib/matchers.js";
8
+ import { compactMap } from "../lib/primitives.js";
9
+ import { safeParse } from "../lib/schemas.js";
10
+ import { RequestOptions } from "../lib/sdks.js";
11
+ import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js";
12
+ import { pathToFunc } from "../lib/url.js";
13
+ import * as components from "../models/components/index.js";
14
+ import {
15
+ ConnectionError,
16
+ InvalidRequestError,
17
+ RequestAbortedError,
18
+ RequestTimeoutError,
19
+ UnexpectedClientError,
20
+ } from "../models/errors/httpclienterrors.js";
21
+ import * as errors from "../models/errors/index.js";
22
+ import { SDKError } from "../models/errors/sdkerror.js";
23
+ import { SDKValidationError } from "../models/errors/sdkvalidationerror.js";
24
+ import * as operations from "../models/operations/index.js";
25
+ import { APICall, APIPromise } from "../types/async.js";
26
+ import { Result } from "../types/fp.js";
27
+
28
+ /**
29
+ * Upsert subscriber
30
+ *
31
+ * @remarks
32
+ * Used to upsert the subscriber entity with new information
33
+ */
34
+ export function subscribersUpsert(
35
+ client: NovuCore,
36
+ updateSubscriberRequestDto: components.UpdateSubscriberRequestDto,
37
+ subscriberId: string,
38
+ idempotencyKey?: string | undefined,
39
+ options?: RequestOptions,
40
+ ): APIPromise<
41
+ Result<
42
+ operations.SubscribersV1ControllerUpdateSubscriberResponse,
43
+ | errors.ErrorDto
44
+ | errors.ErrorDto
45
+ | errors.ValidationErrorDto
46
+ | errors.ErrorDto
47
+ | SDKError
48
+ | SDKValidationError
49
+ | UnexpectedClientError
50
+ | InvalidRequestError
51
+ | RequestAbortedError
52
+ | RequestTimeoutError
53
+ | ConnectionError
54
+ >
55
+ > {
56
+ return new APIPromise($do(
57
+ client,
58
+ updateSubscriberRequestDto,
59
+ subscriberId,
60
+ idempotencyKey,
61
+ options,
62
+ ));
63
+ }
64
+
65
+ async function $do(
66
+ client: NovuCore,
67
+ updateSubscriberRequestDto: components.UpdateSubscriberRequestDto,
68
+ subscriberId: string,
69
+ idempotencyKey?: string | undefined,
70
+ options?: RequestOptions,
71
+ ): Promise<
72
+ [
73
+ Result<
74
+ operations.SubscribersV1ControllerUpdateSubscriberResponse,
75
+ | errors.ErrorDto
76
+ | errors.ErrorDto
77
+ | errors.ValidationErrorDto
78
+ | errors.ErrorDto
79
+ | SDKError
80
+ | SDKValidationError
81
+ | UnexpectedClientError
82
+ | InvalidRequestError
83
+ | RequestAbortedError
84
+ | RequestTimeoutError
85
+ | ConnectionError
86
+ >,
87
+ APICall,
88
+ ]
89
+ > {
90
+ const input: operations.SubscribersV1ControllerUpdateSubscriberRequest = {
91
+ updateSubscriberRequestDto: updateSubscriberRequestDto,
92
+ subscriberId: subscriberId,
93
+ idempotencyKey: idempotencyKey,
94
+ };
95
+
96
+ const parsed = safeParse(
97
+ input,
98
+ (value) =>
99
+ operations.SubscribersV1ControllerUpdateSubscriberRequest$outboundSchema
100
+ .parse(value),
101
+ "Input validation failed",
102
+ );
103
+ if (!parsed.ok) {
104
+ return [parsed, { status: "invalid" }];
105
+ }
106
+ const payload = parsed.value;
107
+ const body = encodeJSON("body", payload.UpdateSubscriberRequestDto, {
108
+ explode: true,
109
+ });
110
+
111
+ const pathParams = {
112
+ subscriberId: encodeSimple("subscriberId", payload.subscriberId, {
113
+ explode: false,
114
+ charEncoding: "percent",
115
+ }),
116
+ };
117
+
118
+ const path = pathToFunc("/v1/subscribers/{subscriberId}")(pathParams);
119
+
120
+ const headers = new Headers(compactMap({
121
+ "Content-Type": "application/json",
122
+ Accept: "application/json",
123
+ "idempotency-key": encodeSimple(
124
+ "idempotency-key",
125
+ payload["idempotency-key"],
126
+ { explode: false, charEncoding: "none" },
127
+ ),
128
+ }));
129
+
130
+ const secConfig = await extractSecurity(client._options.secretKey);
131
+ const securityInput = secConfig == null ? {} : { secretKey: secConfig };
132
+ const requestSecurity = resolveGlobalSecurity(securityInput);
133
+
134
+ const context = {
135
+ baseURL: options?.serverURL ?? client._baseURL ?? "",
136
+ operationID: "SubscribersV1Controller_updateSubscriber",
137
+ oAuth2Scopes: [],
138
+
139
+ resolvedSecurity: requestSecurity,
140
+
141
+ securitySource: client._options.secretKey,
142
+ retryConfig: options?.retries
143
+ || client._options.retryConfig
144
+ || {
145
+ strategy: "backoff",
146
+ backoff: {
147
+ initialInterval: 1000,
148
+ maxInterval: 30000,
149
+ exponent: 1.5,
150
+ maxElapsedTime: 3600000,
151
+ },
152
+ retryConnectionErrors: true,
153
+ }
154
+ || { strategy: "none" },
155
+ retryCodes: options?.retryCodes || ["408", "409", "429", "5XX"],
156
+ };
157
+
158
+ const requestRes = client._createRequest(context, {
159
+ security: requestSecurity,
160
+ method: "PUT",
161
+ baseURL: options?.serverURL,
162
+ path: path,
163
+ headers: headers,
164
+ body: body,
165
+ timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1,
166
+ }, options);
167
+ if (!requestRes.ok) {
168
+ return [requestRes, { status: "invalid" }];
169
+ }
170
+ const req = requestRes.value;
171
+
172
+ const doResult = await client._do(req, {
173
+ context,
174
+ errorCodes: [
175
+ "400",
176
+ "401",
177
+ "403",
178
+ "404",
179
+ "405",
180
+ "409",
181
+ "413",
182
+ "414",
183
+ "415",
184
+ "422",
185
+ "429",
186
+ "4XX",
187
+ "500",
188
+ "503",
189
+ "5XX",
190
+ ],
191
+ retryConfig: context.retryConfig,
192
+ retryCodes: context.retryCodes,
193
+ });
194
+ if (!doResult.ok) {
195
+ return [doResult, { status: "request-error", request: req }];
196
+ }
197
+ const response = doResult.value;
198
+
199
+ const responseFields = {
200
+ HttpMeta: { Response: response, Request: req },
201
+ };
202
+
203
+ const [result] = await M.match<
204
+ operations.SubscribersV1ControllerUpdateSubscriberResponse,
205
+ | errors.ErrorDto
206
+ | errors.ErrorDto
207
+ | errors.ValidationErrorDto
208
+ | errors.ErrorDto
209
+ | SDKError
210
+ | SDKValidationError
211
+ | UnexpectedClientError
212
+ | InvalidRequestError
213
+ | RequestAbortedError
214
+ | RequestTimeoutError
215
+ | ConnectionError
216
+ >(
217
+ M.json(
218
+ 200,
219
+ operations.SubscribersV1ControllerUpdateSubscriberResponse$inboundSchema,
220
+ { hdrs: true, key: "Result" },
221
+ ),
222
+ M.jsonErr(414, errors.ErrorDto$inboundSchema),
223
+ M.jsonErr(
224
+ [400, 401, 403, 404, 405, 409, 413, 415],
225
+ errors.ErrorDto$inboundSchema,
226
+ { hdrs: true },
227
+ ),
228
+ M.jsonErr(422, errors.ValidationErrorDto$inboundSchema, { hdrs: true }),
229
+ M.fail(429),
230
+ M.jsonErr(500, errors.ErrorDto$inboundSchema, { hdrs: true }),
231
+ M.fail(503),
232
+ M.fail("4XX"),
233
+ M.fail("5XX"),
234
+ )(response, { extraFields: responseFields });
235
+ if (!result.ok) {
236
+ return [result, { status: "complete", request: req, response }];
237
+ }
238
+
239
+ return [result, { status: "complete", request: req, response }];
240
+ }
@@ -9,7 +9,7 @@ import { SecurityState } from "../lib/security.js";
9
9
  export type HookContext = {
10
10
  baseURL: string | URL;
11
11
  operationID: string;
12
- oAuth2Scopes?: string[];
12
+ oAuth2Scopes: string[] | null;
13
13
  securitySource?: any | (() => Promise<any>);
14
14
  retryConfig: RetryConfig;
15
15
  resolvedSecurity: SecurityState | null;
package/src/lib/config.ts CHANGED
@@ -54,8 +54,8 @@ export function serverURLFromOptions(options: SDKOptions): URL | null {
54
54
 
55
55
  export const SDK_METADATA = {
56
56
  language: "typescript",
57
- openapiDocVersion: "1.0",
58
- sdkVersion: "0.6.1",
59
- genVersion: "2.558.2",
60
- userAgent: "speakeasy-sdk/typescript 0.6.1 2.558.2 1.0 @novu/api",
57
+ openapiDocVersion: "2.1.13",
58
+ sdkVersion: "0.7.0",
59
+ genVersion: "2.597.9",
60
+ userAgent: "speakeasy-sdk/typescript 0.7.0 2.597.9 2.1.13 @novu/api",
61
61
  } as const;
@@ -10,6 +10,7 @@ import { isPlainObject } from "./is-plain-object.js";
10
10
  import { safeParse } from "./schemas.js";
11
11
 
12
12
  export type Encoding =
13
+ | "jsonl"
13
14
  | "json"
14
15
  | "text"
15
16
  | "bytes"
@@ -19,6 +20,7 @@ export type Encoding =
19
20
  | "fail";
20
21
 
21
22
  const DEFAULT_CONTENT_TYPES: Record<Encoding, string> = {
23
+ jsonl: "application/jsonl",
22
24
  json: "application/json",
23
25
  text: "text/plain",
24
26
  bytes: "application/octet-stream",
@@ -72,6 +74,21 @@ export function json<T>(
72
74
  return { ...options, enc: "json", codes, schema };
73
75
  }
74
76
 
77
+ export function jsonl<T>(
78
+ codes: StatusCodePredicate,
79
+ schema: Schema<T>,
80
+ options?: MatchOptions,
81
+ ): ValueMatcher<T> {
82
+ return { ...options, enc: "jsonl", codes, schema };
83
+ }
84
+
85
+ export function jsonlErr<E>(
86
+ codes: StatusCodePredicate,
87
+ schema: Schema<E>,
88
+ options?: MatchOptions,
89
+ ): ErrorMatcher<E> {
90
+ return { ...options, err: true, enc: "jsonl", codes, schema };
91
+ }
75
92
  export function textErr<E>(
76
93
  codes: StatusCodePredicate,
77
94
  schema: Schema<E>,
@@ -204,6 +221,9 @@ export function match<T, E>(
204
221
  case "json":
205
222
  raw = await response.json();
206
223
  break;
224
+ case "jsonl":
225
+ raw = response.body;
226
+ break;
207
227
  case "bytes":
208
228
  raw = new Uint8Array(await response.arrayBuffer());
209
229
  break;
package/src/lib/sdks.ts CHANGED
@@ -46,12 +46,14 @@ export type RequestOptions = {
46
46
  */
47
47
  serverURL?: string | URL;
48
48
  /**
49
+ * @deprecated `fetchOptions` has been flattened into `RequestOptions`.
50
+ *
49
51
  * Sets various request options on the `fetch` call made by an SDK method.
50
52
  *
51
53
  * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options|Request}
52
54
  */
53
55
  fetchOptions?: Omit<RequestInit, "method" | "body">;
54
- };
56
+ } & Omit<RequestInit, "method" | "body">;
55
57
 
56
58
  type RequestConfig = {
57
59
  method: string;
@@ -168,7 +170,9 @@ export class ClientSDK {
168
170
  cookie = cookie.startsWith("; ") ? cookie.slice(2) : cookie;
169
171
  headers.set("cookie", cookie);
170
172
 
171
- const userHeaders = new Headers(options?.fetchOptions?.headers);
173
+ const userHeaders = new Headers(
174
+ options?.headers ?? options?.fetchOptions?.headers,
175
+ );
172
176
  for (const [k, v] of userHeaders) {
173
177
  headers.set(k, v);
174
178
  }
@@ -179,20 +183,16 @@ export class ClientSDK {
179
183
  headers.set(conf.uaHeader ?? "user-agent", SDK_METADATA.userAgent);
180
184
  }
181
185
 
182
- let fetchOptions = options?.fetchOptions;
186
+ const fetchOptions: Omit<RequestInit, "method" | "body"> = {
187
+ ...options?.fetchOptions,
188
+ ...options,
189
+ };
183
190
  if (!fetchOptions?.signal && conf.timeoutMs && conf.timeoutMs > 0) {
184
191
  const timeoutSignal = AbortSignal.timeout(conf.timeoutMs);
185
- if (!fetchOptions) {
186
- fetchOptions = { signal: timeoutSignal };
187
- } else {
188
- fetchOptions.signal = timeoutSignal;
189
- }
192
+ fetchOptions.signal = timeoutSignal;
190
193
  }
191
194
 
192
195
  if (conf.body instanceof ReadableStream) {
193
- if (!fetchOptions) {
194
- fetchOptions = {};
195
- }
196
196
  Object.assign(fetchOptions, { duplex: "half" });
197
197
  }
198
198
 
@@ -298,7 +298,9 @@ export class ClientSDK {
298
298
  }
299
299
  }
300
300
 
301
- const jsonLikeContentTypeRE = /^application\/(?:.{0,100}\+)?json/;
301
+ const jsonLikeContentTypeRE = /(application|text)\/.*?\+*json.*/;
302
+ const jsonlLikeContentTypeRE =
303
+ /(application|text)\/(.*?\+*\bjsonl\b.*|.*?\+*\bx-ndjson\b.*)/;
302
304
  async function logRequest(logger: Logger | undefined, req: Request) {
303
305
  if (!logger) {
304
306
  return;
@@ -364,9 +366,13 @@ async function logResponse(
364
366
  logger.group("Body:");
365
367
  switch (true) {
366
368
  case matchContentType(res, "application/json")
367
- || jsonLikeContentTypeRE.test(ct):
369
+ || jsonLikeContentTypeRE.test(ct) && !jsonlLikeContentTypeRE.test(ct):
368
370
  logger.log(await res.clone().json());
369
371
  break;
372
+ case matchContentType(res, "application/jsonl")
373
+ || jsonlLikeContentTypeRE.test(ct):
374
+ logger.log(await res.clone().text());
375
+ break;
370
376
  case matchContentType(res, "text/event-stream"):
371
377
  logger.log(`<${contentType}>`);
372
378
  break;
@@ -19,7 +19,7 @@ const routes = buildRouteMap({
19
19
  export const app = buildApplication(routes, {
20
20
  name: "mcp",
21
21
  versionInfo: {
22
- currentVersion: "0.6.1",
22
+ currentVersion: "0.7.0",
23
23
  },
24
24
  });
25
25
 
@@ -74,7 +74,14 @@ export function createRegisterPrompt(
74
74
  prompt: PromptDefinition<A>,
75
75
  ): void => {
76
76
  const scopes = prompt.scopes ?? [];
77
- if (!scopes.every((s: MCPScope) => allowedScopes.has(s))) {
77
+ if (allowedScopes.size > 0 && scopes.length === 0) {
78
+ return;
79
+ }
80
+
81
+ if (
82
+ allowedScopes.size > 0
83
+ && !scopes.every((s: MCPScope) => allowedScopes.has(s))
84
+ ) {
78
85
  return;
79
86
  }
80
87
 
@@ -109,7 +109,14 @@ export function createRegisterResource(
109
109
  ): (resource: ResourceDefinition) => void {
110
110
  return (resource: ResourceDefinition): void => {
111
111
  const scopes = resource.scopes ?? [];
112
- if (!scopes.every((s: MCPScope) => allowedScopes.has(s))) {
112
+ if (allowedScopes.size > 0 && scopes.length === 0) {
113
+ return;
114
+ }
115
+
116
+ if (
117
+ allowedScopes.size > 0
118
+ && !scopes.every((s: MCPScope) => allowedScopes.has(s))
119
+ ) {
113
120
  return;
114
121
  }
115
122
 
@@ -137,7 +144,14 @@ export function createRegisterResourceTemplate(
137
144
  ): (resource: ResourceTemplateDefinition) => void {
138
145
  return (resource: ResourceTemplateDefinition): void => {
139
146
  const scopes = resource.scopes ?? [];
140
- if (!scopes.every((s: MCPScope) => allowedScopes.has(s))) {
147
+ if (allowedScopes.size > 0 && scopes.length === 0) {
148
+ return;
149
+ }
150
+
151
+ if (
152
+ allowedScopes.size > 0
153
+ && !scopes.every((s: MCPScope) => allowedScopes.has(s))
154
+ ) {
141
155
  return;
142
156
  }
143
157
 
@@ -11,7 +11,7 @@ import {
11
11
  createRegisterResource,
12
12
  createRegisterResourceTemplate,
13
13
  } from "./resources.js";
14
- import { MCPScope, mcpScopes } from "./scopes.js";
14
+ import { MCPScope } from "./scopes.js";
15
15
  import { createRegisterTool } from "./tools.js";
16
16
  import { tool$cancel } from "./tools/cancel.js";
17
17
  import { tool$integrationsCreate } from "./tools/integrationsCreate.js";
@@ -48,6 +48,7 @@ import { tool$subscribersPreferencesUpdate } from "./tools/subscribersPreference
48
48
  import { tool$subscribersPropertiesUpdateOnlineFlag } from "./tools/subscribersPropertiesUpdateOnlineFlag.js";
49
49
  import { tool$subscribersRetrieve } from "./tools/subscribersRetrieve.js";
50
50
  import { tool$subscribersSearch } from "./tools/subscribersSearch.js";
51
+ import { tool$subscribersUpsert } from "./tools/subscribersUpsert.js";
51
52
  import { tool$topicsCreate } from "./tools/topicsCreate.js";
52
53
  import { tool$topicsDelete } from "./tools/topicsDelete.js";
53
54
  import { tool$topicsList } from "./tools/topicsList.js";
@@ -70,7 +71,7 @@ export function createMCPServer(deps: {
70
71
  }) {
71
72
  const server = new McpServer({
72
73
  name: "Novu",
73
- version: "0.6.1",
74
+ version: "0.7.0",
74
75
  });
75
76
 
76
77
  const client = new NovuCore({
@@ -79,7 +80,7 @@ export function createMCPServer(deps: {
79
80
  serverIdx: deps.serverIdx,
80
81
  });
81
82
 
82
- const scopes = new Set(deps.scopes ?? mcpScopes);
83
+ const scopes = new Set(deps.scopes);
83
84
 
84
85
  const allowedTools = deps.allowedTools && new Set(deps.allowedTools);
85
86
  const tool = createRegisterTool(
@@ -110,6 +111,7 @@ export function createMCPServer(deps: {
110
111
  tool(tool$subscribersPatch);
111
112
  tool(tool$subscribersDelete);
112
113
  tool(tool$subscribersList);
114
+ tool(tool$subscribersUpsert);
113
115
  tool(tool$subscribersCreateBulk);
114
116
  tool(tool$integrationsList);
115
117
  tool(tool$integrationsCreate);
@@ -0,0 +1,43 @@
1
+ /*
2
+ * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
3
+ */
4
+
5
+ import * as z from "zod";
6
+ import { subscribersUpsert } from "../../funcs/subscribersUpsert.js";
7
+ import * as components from "../../models/components/index.js";
8
+ import { formatResult, ToolDefinition } from "../tools.js";
9
+
10
+ const args = {
11
+ updateSubscriberRequestDto:
12
+ components.UpdateSubscriberRequestDto$inboundSchema,
13
+ subscriberId: z.string(),
14
+ idempotencyKey: z.string().optional(),
15
+ };
16
+
17
+ export const tool$subscribersUpsert: ToolDefinition<typeof args> = {
18
+ name: "subscribers-upsert",
19
+ description: `Upsert subscriber
20
+
21
+ Used to upsert the subscriber entity with new information`,
22
+ args,
23
+ tool: async (client, args, ctx) => {
24
+ const [result, apiCall] = await subscribersUpsert(
25
+ client,
26
+ args.updateSubscriberRequestDto,
27
+ args.subscriberId,
28
+ args.idempotencyKey,
29
+ { fetchOptions: { signal: ctx.signal } },
30
+ ).$inspect();
31
+
32
+ if (!result.ok) {
33
+ return {
34
+ content: [{ type: "text", text: result.error.message }],
35
+ isError: true,
36
+ };
37
+ }
38
+
39
+ const value = result.value.result;
40
+
41
+ return formatResult(value, apiCall);
42
+ },
43
+ };
@@ -102,12 +102,15 @@ export function createRegisterTool(
102
102
  return;
103
103
  }
104
104
 
105
- const toolScopes = tool.scopes ?? [];
106
- if (allowedScopes.size > 0 && toolScopes.length === 0) {
105
+ const scopes = tool.scopes ?? [];
106
+ if (allowedScopes.size > 0 && scopes.length === 0) {
107
107
  return;
108
108
  }
109
109
 
110
- if (!toolScopes.every((s) => allowedScopes.has(s))) {
110
+ if (
111
+ allowedScopes.size > 0
112
+ && !scopes.every((s: MCPScope) => allowedScopes.has(s))
113
+ ) {
111
114
  return;
112
115
  }
113
116