@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.
- package/FUNCTIONS.md +12 -3
- package/README.md +145 -30
- package/bin/mcp-server.js +966 -518
- package/bin/mcp-server.js.map +60 -51
- package/docs/sdks/novu/README.md +142 -24
- package/docs/sdks/subscribers/README.md +113 -0
- package/funcs/subscribersSearch.js +1 -0
- package/funcs/subscribersSearch.js.map +1 -1
- package/funcs/subscribersUpsert.d.ts +18 -0
- package/funcs/subscribersUpsert.d.ts.map +1 -0
- package/funcs/subscribersUpsert.js +148 -0
- package/funcs/subscribersUpsert.js.map +1 -0
- package/hooks/types.d.ts +1 -1
- package/hooks/types.d.ts.map +1 -1
- package/jsr.json +1 -1
- package/lib/config.d.ts +4 -4
- package/lib/config.js +4 -4
- package/lib/config.js.map +1 -1
- package/lib/matchers.d.ts +3 -1
- package/lib/matchers.d.ts.map +1 -1
- package/lib/matchers.js +13 -1
- package/lib/matchers.js.map +1 -1
- package/lib/sdks.d.ts +3 -1
- package/lib/sdks.d.ts.map +1 -1
- package/lib/sdks.js +13 -13
- package/lib/sdks.js.map +1 -1
- package/mcp-server/mcp-server.js +1 -1
- package/mcp-server/prompts.d.ts.map +1 -1
- package/mcp-server/prompts.js +5 -1
- package/mcp-server/prompts.js.map +1 -1
- package/mcp-server/resources.d.ts.map +1 -1
- package/mcp-server/resources.js +10 -2
- package/mcp-server/resources.js.map +1 -1
- package/mcp-server/server.d.ts.map +1 -1
- package/mcp-server/server.js +4 -3
- package/mcp-server/server.js.map +1 -1
- package/mcp-server/tools/subscribersUpsert.d.ts +11 -0
- package/mcp-server/tools/subscribersUpsert.d.ts.map +1 -0
- package/mcp-server/tools/subscribersUpsert.js +57 -0
- package/mcp-server/tools/subscribersUpsert.js.map +1 -0
- package/mcp-server/tools.d.ts.map +1 -1
- package/mcp-server/tools.js +4 -3
- package/mcp-server/tools.js.map +1 -1
- package/models/components/activitynotificationjobresponsedto.d.ts +15 -15
- package/models/components/activitynotificationjobresponsedto.d.ts.map +1 -1
- package/models/components/activitynotificationjobresponsedto.js +19 -18
- package/models/components/activitynotificationjobresponsedto.js.map +1 -1
- package/models/components/activitynotificationstepresponsedto.d.ts +15 -15
- package/models/components/activitynotificationstepresponsedto.d.ts.map +1 -1
- package/models/components/activitynotificationstepresponsedto.js +18 -18
- package/models/components/activitynotificationstepresponsedto.js.map +1 -1
- package/models/components/channelsettingsdto.d.ts +2 -78
- package/models/components/channelsettingsdto.d.ts.map +1 -1
- package/models/components/channelsettingsdto.js +4 -41
- package/models/components/channelsettingsdto.js.map +1 -1
- package/models/components/chatorpushproviderenum.d.ts +79 -0
- package/models/components/chatorpushproviderenum.d.ts.map +1 -0
- package/models/components/chatorpushproviderenum.js +68 -0
- package/models/components/chatorpushproviderenum.js.map +1 -0
- package/models/components/constraintvalidation.d.ts +115 -0
- package/models/components/constraintvalidation.d.ts.map +1 -0
- package/models/components/constraintvalidation.js +157 -0
- package/models/components/constraintvalidation.js.map +1 -0
- package/models/components/digestmetadatadto.d.ts +8 -8
- package/models/components/digestmetadatadto.d.ts.map +1 -1
- package/models/components/digestmetadatadto.js +13 -13
- package/models/components/digestmetadatadto.js.map +1 -1
- package/models/components/digestregularmetadata.d.ts +16 -16
- package/models/components/digestregularmetadata.d.ts.map +1 -1
- package/models/components/digestregularmetadata.js +25 -25
- package/models/components/digestregularmetadata.js.map +1 -1
- package/models/components/digesttimedconfigdto.d.ts +8 -8
- package/models/components/digesttimedconfigdto.d.ts.map +1 -1
- package/models/components/digesttimedconfigdto.js +13 -14
- package/models/components/digesttimedconfigdto.js.map +1 -1
- package/models/components/getsubscriberpreferencesdto.d.ts +6 -6
- package/models/components/getsubscriberpreferencesdto.d.ts.map +1 -1
- package/models/components/getsubscriberpreferencesdto.js +6 -6
- package/models/components/getsubscriberpreferencesdto.js.map +1 -1
- package/models/components/index.d.ts +11 -5
- package/models/components/index.d.ts.map +1 -1
- package/models/components/index.js +11 -5
- package/models/components/index.js.map +1 -1
- package/models/components/integrationresponsedto.d.ts +8 -8
- package/models/components/integrationresponsedto.d.ts.map +1 -1
- package/models/components/integrationresponsedto.js +14 -13
- package/models/components/integrationresponsedto.js.map +1 -1
- package/models/components/messageactionresult.d.ts +15 -15
- package/models/components/messageactionresult.d.ts.map +1 -1
- package/models/components/messageactionresult.js +18 -18
- package/models/components/messageactionresult.js.map +1 -1
- package/models/components/messagecta.d.ts +2 -2
- package/models/components/messagecta.d.ts.map +1 -1
- package/models/components/messagecta.js +2 -2
- package/models/components/messagecta.js.map +1 -1
- package/models/components/messageresponsedto.d.ts +14 -4
- package/models/components/messageresponsedto.d.ts.map +1 -1
- package/models/components/messageresponsedto.js +8 -4
- package/models/components/messageresponsedto.js.map +1 -1
- package/models/components/messagesresponsedto.d.ts +53 -0
- package/models/components/messagesresponsedto.d.ts.map +1 -0
- package/models/components/messagesresponsedto.js +68 -0
- package/models/components/messagesresponsedto.js.map +1 -0
- package/models/components/notificationfeeditemdto.d.ts +0 -5
- package/models/components/notificationfeeditemdto.d.ts.map +1 -1
- package/models/components/notificationfeeditemdto.js +0 -2
- package/models/components/notificationfeeditemdto.js.map +1 -1
- package/models/components/notificationstepdto.d.ts +13 -13
- package/models/components/notificationstepdto.d.ts.map +1 -1
- package/models/components/notificationstepdto.js +16 -16
- package/models/components/notificationstepdto.js.map +1 -1
- package/models/components/notificationtriggerdto.d.ts +8 -8
- package/models/components/notificationtriggerdto.d.ts.map +1 -1
- package/models/components/notificationtriggerdto.js +13 -13
- package/models/components/notificationtriggerdto.js.map +1 -1
- package/models/components/patchsubscriberpreferencesdto.d.ts +1 -1
- package/models/components/preferenceoverridesourceenum.d.ts +37 -0
- package/models/components/preferenceoverridesourceenum.d.ts.map +1 -0
- package/models/components/preferenceoverridesourceenum.js +54 -0
- package/models/components/preferenceoverridesourceenum.js.map +1 -0
- package/models/components/providersidenum.d.ts +3 -0
- package/models/components/providersidenum.d.ts.map +1 -1
- package/models/components/providersidenum.js +1 -0
- package/models/components/providersidenum.js.map +1 -1
- package/models/components/stepfilterdto.d.ts +8 -8
- package/models/components/stepfilterdto.d.ts.map +1 -1
- package/models/components/stepfilterdto.js +13 -13
- package/models/components/stepfilterdto.js.map +1 -1
- package/models/components/stepsoverrides.d.ts +40 -0
- package/models/components/stepsoverrides.d.ts.map +1 -0
- package/models/components/{workflowinfodto.js → stepsoverrides.js} +19 -23
- package/models/components/stepsoverrides.js.map +1 -0
- package/models/components/steptypeenum.d.ts +2 -2
- package/models/components/steptypeenum.js +1 -1
- package/models/components/subscriberchanneldto.d.ts +8 -8
- package/models/components/subscriberchanneldto.d.ts.map +1 -1
- package/models/components/subscriberchanneldto.js +14 -13
- package/models/components/subscriberchanneldto.js.map +1 -1
- package/models/components/subscriberglobalpreferencedto.d.ts +38 -0
- package/models/components/subscriberglobalpreferencedto.d.ts.map +1 -0
- package/models/components/subscriberglobalpreferencedto.js +62 -0
- package/models/components/subscriberglobalpreferencedto.js.map +1 -0
- package/models/components/subscriberpreferencechannels.d.ts +52 -0
- package/models/components/subscriberpreferencechannels.d.ts.map +1 -0
- package/models/components/{preferencechannels.js → subscriberpreferencechannels.js} +17 -17
- package/models/components/subscriberpreferencechannels.js.map +1 -0
- package/models/components/subscriberpreferenceoverridedto.d.ts +39 -0
- package/models/components/subscriberpreferenceoverridedto.d.ts.map +1 -0
- package/models/components/subscriberpreferenceoverridedto.js +63 -0
- package/models/components/subscriberpreferenceoverridedto.js.map +1 -0
- package/models/components/subscriberpreferencesworkflowinfodto.d.ts +47 -0
- package/models/components/subscriberpreferencesworkflowinfodto.d.ts.map +1 -0
- package/models/components/subscriberpreferencesworkflowinfodto.js +65 -0
- package/models/components/subscriberpreferencesworkflowinfodto.js.map +1 -0
- package/models/components/subscriberresponsedto.d.ts +26 -26
- package/models/components/subscriberresponsedto.d.ts.map +1 -1
- package/models/components/subscriberresponsedto.js +12 -12
- package/models/components/subscriberresponsedto.js.map +1 -1
- package/models/components/subscriberworkflowpreferencedto.d.ts +50 -0
- package/models/components/subscriberworkflowpreferencedto.d.ts.map +1 -0
- package/models/components/subscriberworkflowpreferencedto.js +68 -0
- package/models/components/subscriberworkflowpreferencedto.js.map +1 -0
- package/models/components/timedconfig.d.ts +8 -8
- package/models/components/timedconfig.d.ts.map +1 -1
- package/models/components/timedconfig.js +14 -13
- package/models/components/timedconfig.js.map +1 -1
- package/models/components/triggereventrequestdto.d.ts +102 -10
- package/models/components/triggereventrequestdto.d.ts.map +1 -1
- package/models/components/triggereventrequestdto.js +43 -3
- package/models/components/triggereventrequestdto.js.map +1 -1
- package/models/components/triggereventtoallrequestdto.d.ts +84 -2
- package/models/components/triggereventtoallrequestdto.d.ts.map +1 -1
- package/models/components/triggereventtoallrequestdto.js +28 -2
- package/models/components/triggereventtoallrequestdto.js.map +1 -1
- package/models/components/updatesubscriberchannelrequestdto.d.ts +2 -78
- package/models/components/updatesubscriberchannelrequestdto.d.ts.map +1 -1
- package/models/components/updatesubscriberchannelrequestdto.js +4 -41
- package/models/components/updatesubscriberchannelrequestdto.js.map +1 -1
- package/models/components/updatesubscriberrequestdto.d.ts +72 -0
- package/models/components/updatesubscriberrequestdto.d.ts.map +1 -0
- package/models/components/updatesubscriberrequestdto.js +74 -0
- package/models/components/updatesubscriberrequestdto.js.map +1 -0
- package/models/components/workflowresponse.d.ts +3 -3
- package/models/components/workflowresponse.d.ts.map +1 -1
- package/models/components/workflowresponse.js +3 -3
- package/models/components/workflowresponse.js.map +1 -1
- package/models/errors/errordto.d.ts +83 -3
- package/models/errors/errordto.d.ts.map +1 -1
- package/models/errors/errordto.js +99 -3
- package/models/errors/errordto.js.map +1 -1
- package/models/errors/validationerrordto.d.ts +66 -51
- package/models/errors/validationerrordto.d.ts.map +1 -1
- package/models/errors/validationerrordto.js +83 -67
- package/models/errors/validationerrordto.js.map +1 -1
- package/models/operations/index.d.ts +1 -0
- package/models/operations/index.d.ts.map +1 -1
- package/models/operations/index.js +1 -0
- package/models/operations/index.js.map +1 -1
- package/models/operations/messagescontrollergetmessages.d.ts +2 -2
- package/models/operations/messagescontrollergetmessages.d.ts.map +1 -1
- package/models/operations/messagescontrollergetmessages.js +2 -2
- package/models/operations/messagescontrollergetmessages.js.map +1 -1
- package/models/operations/subscriberscontrollersearchsubscribers.d.ts +26 -6
- package/models/operations/subscriberscontrollersearchsubscribers.d.ts.map +1 -1
- package/models/operations/subscriberscontrollersearchsubscribers.js +11 -6
- package/models/operations/subscriberscontrollersearchsubscribers.js.map +1 -1
- package/models/operations/subscribersv1controllerupdatesubscriber.d.ts +68 -0
- package/models/operations/subscribersv1controllerupdatesubscriber.d.ts.map +1 -0
- package/models/operations/subscribersv1controllerupdatesubscriber.js +114 -0
- package/models/operations/subscribersv1controllerupdatesubscriber.js.map +1 -0
- package/package.json +3 -3
- package/sdk/subscribers.d.ts +7 -0
- package/sdk/subscribers.d.ts.map +1 -1
- package/sdk/subscribers.js +10 -0
- package/sdk/subscribers.js.map +1 -1
- package/sources/json-development.json +5818 -3516
- package/src/funcs/subscribersSearch.ts +1 -0
- package/src/funcs/subscribersUpsert.ts +240 -0
- package/src/hooks/types.ts +1 -1
- package/src/lib/config.ts +4 -4
- package/src/lib/matchers.ts +20 -0
- package/src/lib/sdks.ts +19 -13
- package/src/mcp-server/mcp-server.ts +1 -1
- package/src/mcp-server/prompts.ts +8 -1
- package/src/mcp-server/resources.ts +16 -2
- package/src/mcp-server/server.ts +5 -3
- package/src/mcp-server/tools/subscribersUpsert.ts +43 -0
- package/src/mcp-server/tools.ts +6 -3
- package/src/models/components/activitynotificationjobresponsedto.ts +48 -26
- package/src/models/components/activitynotificationstepresponsedto.ts +50 -29
- package/src/models/components/channelsettingsdto.ts +8 -50
- package/src/models/components/chatorpushproviderenum.ts +54 -0
- package/src/models/components/constraintvalidation.ts +270 -0
- package/src/models/components/digestmetadatadto.ts +16 -15
- package/src/models/components/digestregularmetadata.ts +30 -36
- package/src/models/components/digesttimedconfigdto.ts +18 -14
- package/src/models/components/getsubscriberpreferencesdto.ts +18 -18
- package/src/models/components/index.ts +11 -5
- package/src/models/components/integrationresponsedto.ts +14 -18
- package/src/models/components/messageactionresult.ts +24 -31
- package/src/models/components/messagecta.ts +4 -4
- package/src/models/components/messageresponsedto.ts +22 -8
- package/src/models/components/messagesresponsedto.ts +103 -0
- package/src/models/components/notificationfeeditemdto.ts +0 -7
- package/src/models/components/notificationstepdto.ts +20 -26
- package/src/models/components/notificationtriggerdto.ts +18 -15
- package/src/models/components/patchsubscriberpreferencesdto.ts +1 -1
- package/src/models/components/preferenceoverridesourceenum.ts +42 -0
- package/src/models/components/providersidenum.ts +1 -0
- package/src/models/components/stepfilterdto.ts +16 -15
- package/src/models/components/stepsoverrides.ts +65 -0
- package/src/models/components/steptypeenum.ts +2 -2
- package/src/models/components/subscriberchanneldto.ts +14 -18
- package/src/models/components/subscriberglobalpreferencedto.ts +84 -0
- package/src/models/components/subscriberpreferencechannels.ts +108 -0
- package/src/models/components/subscriberpreferenceoverridedto.ts +88 -0
- package/src/models/components/subscriberpreferencesworkflowinfodto.ts +95 -0
- package/src/models/components/subscriberresponsedto.ts +34 -34
- package/src/models/components/subscriberworkflowpreferencedto.ts +110 -0
- package/src/models/components/timedconfig.ts +14 -16
- package/src/models/components/triggereventrequestdto.ts +122 -4
- package/src/models/components/triggereventtoallrequestdto.ts +92 -5
- package/src/models/components/updatesubscriberchannelrequestdto.ts +8 -56
- package/src/models/components/updatesubscriberrequestdto.ts +124 -0
- package/src/models/components/workflowresponse.ts +9 -9
- package/src/models/errors/errordto.ts +202 -5
- package/src/models/errors/validationerrordto.ts +178 -110
- package/src/models/operations/index.ts +1 -0
- package/src/models/operations/messagescontrollergetmessages.ts +4 -4
- package/src/models/operations/subscriberscontrollersearchsubscribers.ts +34 -12
- package/src/models/operations/subscribersv1controllerupdatesubscriber.ts +191 -0
- package/src/sdk/subscribers.ts +22 -0
- package/models/components/globalpreferencedto.d.ts +0 -38
- package/models/components/globalpreferencedto.d.ts.map +0 -1
- package/models/components/globalpreferencedto.js +0 -62
- package/models/components/globalpreferencedto.js.map +0 -1
- package/models/components/overrides.d.ts +0 -112
- package/models/components/overrides.d.ts.map +0 -1
- package/models/components/overrides.js +0 -111
- package/models/components/overrides.js.map +0 -1
- package/models/components/preferencechannels.d.ts +0 -37
- package/models/components/preferencechannels.d.ts.map +0 -1
- package/models/components/preferencechannels.js.map +0 -1
- package/models/components/workflowinfodto.d.ts +0 -42
- package/models/components/workflowinfodto.d.ts.map +0 -1
- package/models/components/workflowinfodto.js.map +0 -1
- package/models/components/workflowpreferencedto.d.ts +0 -50
- package/models/components/workflowpreferencedto.d.ts.map +0 -1
- package/models/components/workflowpreferencedto.js +0 -68
- package/models/components/workflowpreferencedto.js.map +0 -1
- package/src/models/components/globalpreferencedto.ts +0 -82
- package/src/models/components/overrides.ts +0 -139
- package/src/models/components/preferencechannels.ts +0 -91
- package/src/models/components/workflowinfodto.ts +0 -81
- package/src/models/components/workflowpreferencedto.ts +0 -108
|
@@ -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
|
+
}
|
package/src/hooks/types.ts
CHANGED
|
@@ -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
|
|
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.
|
|
58
|
-
sdkVersion: "0.
|
|
59
|
-
genVersion: "2.
|
|
60
|
-
userAgent: "speakeasy-sdk/typescript 0.
|
|
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;
|
package/src/lib/matchers.ts
CHANGED
|
@@ -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(
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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;
|
|
@@ -74,7 +74,14 @@ export function createRegisterPrompt(
|
|
|
74
74
|
prompt: PromptDefinition<A>,
|
|
75
75
|
): void => {
|
|
76
76
|
const scopes = prompt.scopes ?? [];
|
|
77
|
-
if (
|
|
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 (
|
|
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 (
|
|
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
|
|
package/src/mcp-server/server.ts
CHANGED
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
createRegisterResource,
|
|
12
12
|
createRegisterResourceTemplate,
|
|
13
13
|
} from "./resources.js";
|
|
14
|
-
import { MCPScope
|
|
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.
|
|
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
|
|
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
|
+
};
|
package/src/mcp-server/tools.ts
CHANGED
|
@@ -102,12 +102,15 @@ export function createRegisterTool(
|
|
|
102
102
|
return;
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
const
|
|
106
|
-
if (allowedScopes.size > 0 &&
|
|
105
|
+
const scopes = tool.scopes ?? [];
|
|
106
|
+
if (allowedScopes.size > 0 && scopes.length === 0) {
|
|
107
107
|
return;
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
-
if (
|
|
110
|
+
if (
|
|
111
|
+
allowedScopes.size > 0
|
|
112
|
+
&& !scopes.every((s: MCPScope) => allowedScopes.has(s))
|
|
113
|
+
) {
|
|
111
114
|
return;
|
|
112
115
|
}
|
|
113
116
|
|