@listmonk-ops/operations 0.1.1 → 0.1.2

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/README.md CHANGED
@@ -5,5 +5,8 @@ listmonk-ops CLI and MCP adapters.
5
5
 
6
6
  The initial registry covers subscriber-list CRUD. Each operation owns its
7
7
  runtime input/output schemas, generated JSON Schemas, safety hints, MCP name,
8
- and named executor. Surface packages remain responsible for authentication and
9
- presentation.
8
+ and named executor. Each list operation also exports a named `invoke*Operation`
9
+ entrypoint, while `invokeListOperationByMcpName` provides the shared MCP
10
+ dispatcher. These functions preserve the registry validation and error contract
11
+ while keeping CLI/MCP-to-domain call paths visible to static tooling. Surface
12
+ packages remain responsible for authentication and presentation.
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{z as e}from"zod";import{z as v}from"zod";var m=class extends Error{constructor(i){super(i),this.name="OperationInputError"}},f=class extends Error{constructor(i){super(i),this.name="OperationOutputError"}},d=class extends Error{operationId;constructor(i,n){super(_(n),{cause:n}),this.name="OperationExecutionError",this.operationId=i}};function _(t){return t instanceof Error?t.message:t&&typeof t=="object"&&"message"in t?String(t.message):String(t)}function g(t,i){let n=v.toJSONSchema(t,{io:i});if(n.type!=="object")throw new TypeError("Operation schemas must have an object root");return n}function k(t,i){if(!t||typeof t!="object"||!(i in t))return!1;let n=Reflect.get(t,i);return n==null?!1:typeof n=="string"?n.trim().length>0:Array.isArray(n)?n.length>0:!0}function j(t,i){let n=t.issues[0];if(!n)return"Invalid operation input";let s=n.path[0],r=n.path.map(String).join(".")||"input";return(typeof s=="string"||typeof s=="number")&&!k(i,s)?`Missing required parameter: ${String(s)}`:`Invalid parameter ${r}: ${n.message}`}function o(t){return{id:t.id,title:t.title,description:t.description,inputSchema:t.inputSchema,outputSchema:t.outputSchema,inputJsonSchema:g(t.inputSchema,"input"),outputJsonSchema:g(t.outputSchema,"output"),safety:t.safety,mcp:t.mcp,async invoke(i,n){let s=t.inputSchema.safeParse(n??{});if(!s.success)throw new m(j(s.error,n??{}));let r;try{r=await t.execute(i,s.data)}catch(c){throw c instanceof d?c:new d(t.id,c)}let a=t.outputSchema.safeParse(r);if(!a.success)throw new f(`${t.id} produced invalid output: ${a.error.message}`);return a.data}}}var l=e.looseObject({id:e.number().optional(),created_at:e.string().optional(),updated_at:e.string().optional(),uuid:e.string().optional(),name:e.string().optional(),type:e.string().optional(),optin:e.string().optional(),tags:e.array(e.string()).optional(),subscriber_count:e.number().optional(),description:e.string().optional()}),z=e.object({results:e.array(l),total:e.number(),per_page:e.number(),page:e.number()}),H=e.object({page:e.coerce.number().int().positive().default(1).describe("Page number for pagination"),per_page:e.coerce.number().int().positive().default(20).describe("Number of items per page")}),h=e.number().int().positive(),y=e.codec(e.union([h,e.string().regex(/^[1-9][0-9]*$/)]),h,{decode:t=>Number(t),encode:t=>t}).describe("Subscriber list ID"),S=e.object({id:y}),C=e.object({name:e.string().trim().min(1).describe("List name"),type:e.enum(["public","private"]).default("private").describe("List visibility"),optin:e.enum(["single","double"]).default("single").describe("Opt-in type"),description:e.string().default("").describe("List description"),tags:e.array(e.string()).default([]).describe("List tags")}),P=e.object({id:y,name:e.string().trim().min(1).optional().describe("List name"),type:e.enum(["public","private"]).optional().describe("List visibility"),optin:e.enum(["single","double"]).optional().describe("Opt-in type"),description:e.string().optional().describe("List description"),tags:e.array(e.string()).optional().describe("List tags")}),T=e.object({id:e.number().int().positive(),deleted:e.boolean()});function x(t){if(t instanceof Error)return t.message;if(t&&typeof t=="object"){if("message"in t&&typeof t.message=="string")return t.message;if("error"in t&&typeof t.error=="string")return t.error;try{return JSON.stringify(t)}catch{}}return String(t)}function O(t){return t.error!==void 0}function p(t,i){if(O(t))throw new Error(`${i}: ${x(t.error)}`);if(t.data===void 0)throw new Error(`${i}: received empty data`);return t.data}async function E({client:t},i){let n=await t.list.list({query:{page:i.page,per_page:i.per_page}}),s=p(n,"Failed to fetch lists");return{results:s.results??[],total:s.total??0,per_page:s.per_page??i.per_page,page:s.page??i.page}}async function M({client:t},i){let n=await t.list.getById({path:{list_id:i.id}});return p(n,"Failed to fetch list")}async function D(t,i){let s=await t.list.list({query:{page:1,per_page:100,query:i}}),r=p(s,"Failed to resolve created list"),a=r.results?.find(u=>u.name===i);if(a)return a;let c=Math.max(1,Math.ceil((r.total??0)/100));for(let u=2;u<=c;u+=1){let w=await t.list.list({query:{page:u,per_page:100,query:i}}),b=p(w,"Failed to resolve created list").results?.find(I=>I.name===i);if(b)return b}}async function J({client:t},i){let n=await t.list.create({body:{name:i.name,type:i.type,optin:i.optin,description:i.description,tags:i.tags}});if(O(n))throw new Error(`Failed to create list: ${x(n.error)}`);if(n.data!==void 0)return n.data;let s=await D(t,i.name);if(!s)throw new Error("List was created but the created record could not be resolved");return s}async function $({client:t},i){let{id:n,...s}=i,r=await t.list.update({path:{list_id:n},body:s});return p(r,"Failed to update list")}async function R({client:t},i){let n=await t.list.delete({path:{list_id:i.id}});return{id:i.id,deleted:p(n,"Failed to delete list")}}var L={readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},q=o({id:"lists.list",title:"List subscriber lists",description:"Get subscriber lists from Listmonk",inputSchema:H,outputSchema:z,safety:L,mcp:{name:"listmonk_get_lists"},execute:E}),F=o({id:"lists.get",title:"Get subscriber list",description:"Get a specific subscriber list by ID",inputSchema:S,outputSchema:l,safety:L,mcp:{name:"listmonk_get_list"},execute:M}),N=o({id:"lists.create",title:"Create subscriber list",description:"Create a new subscriber list",inputSchema:C,outputSchema:l,safety:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},mcp:{name:"listmonk_create_list"},execute:J}),Z=o({id:"lists.update",title:"Update subscriber list",description:"Update an existing subscriber list",inputSchema:P,outputSchema:l,safety:{readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!0},mcp:{name:"listmonk_update_list",legacySuccessText:"List updated successfully"},execute:$}),W=o({id:"lists.delete",title:"Delete subscriber list",description:"Delete a subscriber list",inputSchema:S,outputSchema:T,safety:{readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!0},mcp:{name:"listmonk_delete_list",legacySuccessText:"List deleted successfully"},execute:R}),B=[q,F,N,Z,W],G=new Map(B.map(t=>[t.mcp.name,t]));function X(t){return G.get(t)}export{d as OperationExecutionError,m as OperationInputError,f as OperationOutputError,N as createListOperation,J as createSubscriberList,o as defineOperation,W as deleteListOperation,R as deleteSubscriberList,F as getListOperation,X as getListOperationByMcpName,q as getListsOperation,M as getSubscriberList,B as listOperations,E as listSubscriberLists,Z as updateListOperation,$ as updateSubscriberList};
1
+ import{z as i}from"zod";import{z as $}from"zod";var O=class extends Error{constructor(e){super(e),this.name="OperationInputError"}},L=class extends Error{constructor(e){super(e),this.name="OperationOutputError"}},y=class extends Error{operationId;constructor(e,n){super(R(n),{cause:n}),this.name="OperationExecutionError",this.operationId=e}};function R(t){return t instanceof Error?t.message:t&&typeof t=="object"&&"message"in t?String(t.message):String(t)}function w(t,e){let n=$.toJSONSchema(t,{io:e});if(n.type!=="object")throw new TypeError("Operation schemas must have an object root");return n}function q(t,e){if(!t||typeof t!="object"||!(e in t))return!1;let n=Reflect.get(t,e);return n==null?!1:typeof n=="string"?n.trim().length>0:Array.isArray(n)?n.length>0:!0}function Z(t,e){let n=t.issues[0];if(!n)return"Invalid operation input";let r=n.path[0],s=n.path.map(String).join(".")||"input";return(typeof r=="string"||typeof r=="number")&&!q(e,r)?`Missing required parameter: ${String(r)}`:`Invalid parameter ${s}: ${n.message}`}function o(t,e){let n=t.safeParse(e??{});if(!n.success)throw new O(Z(n.error,e??{}));return n.data}function a(t,e){return e instanceof y?e:new y(t,e)}function p(t,e,n){let r=e.safeParse(n);if(!r.success)throw new L(`${t} produced invalid output: ${r.error.message}`);return r.data}function f(t){return{id:t.id,title:t.title,description:t.description,inputSchema:t.inputSchema,outputSchema:t.outputSchema,inputJsonSchema:w(t.inputSchema,"input"),outputJsonSchema:w(t.outputSchema,"output"),safety:t.safety,mcp:t.mcp,async invoke(e,n){let r=o(t.inputSchema,n),s;try{s=await t.execute(e,r)}catch(g){throw a(t.id,g)}return p(t.id,t.outputSchema,s)}}}var S=i.looseObject({id:i.number().optional(),created_at:i.string().optional(),updated_at:i.string().optional(),uuid:i.string().optional(),name:i.string().optional(),type:i.string().optional(),optin:i.string().optional(),tags:i.array(i.string()).optional(),subscriber_count:i.number().optional(),description:i.string().optional()}),F=i.object({results:i.array(S),total:i.number(),per_page:i.number(),page:i.number()}),N=i.object({page:i.coerce.number().int().positive().default(1).describe("Page number for pagination"),per_page:i.coerce.number().int().positive().default(20).describe("Number of items per page")}),I=i.number().int().positive(),k=i.codec(i.union([I,i.string().regex(/^[1-9][0-9]*$/)]),I,{decode:t=>Number(t),encode:t=>t}).describe("Subscriber list ID"),v=i.object({id:k}),G=i.object({name:i.string().trim().min(1).describe("List name"),type:i.enum(["public","private"]).default("private").describe("List visibility"),optin:i.enum(["single","double"]).default("single").describe("Opt-in type"),description:i.string().default("").describe("List description"),tags:i.array(i.string()).default([]).describe("List tags")}),W=i.object({id:k,name:i.string().trim().min(1).optional().describe("List name"),type:i.enum(["public","private"]).optional().describe("List visibility"),optin:i.enum(["single","double"]).optional().describe("Opt-in type"),description:i.string().optional().describe("List description"),tags:i.array(i.string()).optional().describe("List tags")}),B=i.object({id:i.number().int().positive(),deleted:i.boolean()});function z(t){if(t instanceof Error)return t.message;if(t&&typeof t=="object"){if("message"in t&&typeof t.message=="string")return t.message;if("error"in t&&typeof t.error=="string")return t.error;try{return JSON.stringify(t)}catch{}}return String(t)}function P(t){return t.error!==void 0}function h(t,e){if(P(t))throw new Error(`${e}: ${z(t.error)}`);if(t.data===void 0)throw new Error(`${e}: received empty data`);return t.data}async function _({client:t},e){let n=await t.list.list({query:{page:e.page,per_page:e.per_page}}),r=h(n,"Failed to fetch lists");return{results:r.results??[],total:r.total??0,per_page:r.per_page??e.per_page,page:r.page??e.page}}async function C({client:t},e){let n=await t.list.getById({path:{list_id:e.id}});return h(n,"Failed to fetch list")}async function U(t,e){let r=await t.list.list({query:{page:1,per_page:100,query:e}}),s=h(r,"Failed to resolve created list"),g=s.results?.find(b=>b.name===e);if(g)return g;let M=Math.max(1,Math.ceil((s.total??0)/100));for(let b=2;b<=M;b+=1){let D=await t.list.list({query:{page:b,per_page:100,query:e}}),x=h(D,"Failed to resolve created list").results?.find(J=>J.name===e);if(x)return x}}async function j({client:t},e){let n=await t.list.create({body:{name:e.name,type:e.type,optin:e.optin,description:e.description,tags:e.tags}});if(P(n))throw new Error(`Failed to create list: ${z(n.error)}`);if(n.data!==void 0)return n.data;let r=await U(t,e.name);if(!r)throw new Error("List was created but the created record could not be resolved");return r}async function E({client:t},e){let{id:n,...r}=e,s=await t.list.update({path:{list_id:n},body:r});return h(s,"Failed to update list")}async function H({client:t},e){let n=await t.list.delete({path:{list_id:e.id}});return{id:e.id,deleted:h(n,"Failed to delete list")}}var T={readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},u=f({id:"lists.list",title:"List subscriber lists",description:"Get subscriber lists from Listmonk",inputSchema:N,outputSchema:F,safety:T,mcp:{name:"listmonk_get_lists"},execute:_}),c=f({id:"lists.get",title:"Get subscriber list",description:"Get a specific subscriber list by ID",inputSchema:v,outputSchema:S,safety:T,mcp:{name:"listmonk_get_list"},execute:C}),d=f({id:"lists.create",title:"Create subscriber list",description:"Create a new subscriber list",inputSchema:G,outputSchema:S,safety:{readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},mcp:{name:"listmonk_create_list"},execute:j}),m=f({id:"lists.update",title:"Update subscriber list",description:"Update an existing subscriber list",inputSchema:W,outputSchema:S,safety:{readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!0},mcp:{name:"listmonk_update_list",legacySuccessText:"List updated successfully"},execute:E}),l=f({id:"lists.delete",title:"Delete subscriber list",description:"Delete a subscriber list",inputSchema:v,outputSchema:B,safety:{readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!0},mcp:{name:"listmonk_delete_list",legacySuccessText:"List deleted successfully"},execute:H});async function A(t,e){let n=o(u.inputSchema,e),r;try{r=await _(t,n)}catch(s){throw a(u.id,s)}return p(u.id,u.outputSchema,r)}async function K(t,e){let n=o(c.inputSchema,e),r;try{r=await C(t,n)}catch(s){throw a(c.id,s)}return p(c.id,c.outputSchema,r)}async function V(t,e){let n=o(d.inputSchema,e),r;try{r=await j(t,n)}catch(s){throw a(d.id,s)}return p(d.id,d.outputSchema,r)}async function Q(t,e){let n=o(m.inputSchema,e),r;try{r=await E(t,n)}catch(s){throw a(m.id,s)}return p(m.id,m.outputSchema,r)}async function X(t,e){let n=o(l.inputSchema,e),r;try{r=await H(t,n)}catch(s){throw a(l.id,s)}return p(l.id,l.outputSchema,r)}var Y=[u,c,d,m,l],tt=new Map(Y.map(t=>[t.mcp.name,t]));function ot(t){return tt.get(t)}async function at(t,e,n){switch(e){case u.mcp.name:return{operation:u,output:await A(t,n)};case c.mcp.name:return{operation:c,output:await K(t,n)};case d.mcp.name:return{operation:d,output:await V(t,n)};case m.mcp.name:return{operation:m,output:await Q(t,n)};case l.mcp.name:return{operation:l,output:await X(t,n)};default:return}}export{y as OperationExecutionError,O as OperationInputError,L as OperationOutputError,d as createListOperation,j as createSubscriberList,f as defineOperation,l as deleteListOperation,H as deleteSubscriberList,c as getListOperation,ot as getListOperationByMcpName,u as getListsOperation,C as getSubscriberList,V as invokeCreateListOperation,X as invokeDeleteListOperation,K as invokeGetListOperation,A as invokeGetListsOperation,at as invokeListOperationByMcpName,Q as invokeUpdateListOperation,Y as listOperations,_ as listSubscriberLists,a as normalizeOperationExecutionError,o as parseOperationInput,p as parseOperationOutput,m as updateListOperation,E as updateSubscriberList};
package/dist/lists.d.ts CHANGED
@@ -9,6 +9,35 @@ export interface ListPage {
9
9
  per_page: number;
10
10
  page: number;
11
11
  }
12
+ declare const subscriberListSchema: z.ZodObject<{
13
+ id: z.ZodOptional<z.ZodNumber>;
14
+ created_at: z.ZodOptional<z.ZodString>;
15
+ updated_at: z.ZodOptional<z.ZodString>;
16
+ uuid: z.ZodOptional<z.ZodString>;
17
+ name: z.ZodOptional<z.ZodString>;
18
+ type: z.ZodOptional<z.ZodString>;
19
+ optin: z.ZodOptional<z.ZodString>;
20
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
21
+ subscriber_count: z.ZodOptional<z.ZodNumber>;
22
+ description: z.ZodOptional<z.ZodString>;
23
+ }, z.core.$loose>;
24
+ declare const listPageSchema: z.ZodObject<{
25
+ results: z.ZodArray<z.ZodObject<{
26
+ id: z.ZodOptional<z.ZodNumber>;
27
+ created_at: z.ZodOptional<z.ZodString>;
28
+ updated_at: z.ZodOptional<z.ZodString>;
29
+ uuid: z.ZodOptional<z.ZodString>;
30
+ name: z.ZodOptional<z.ZodString>;
31
+ type: z.ZodOptional<z.ZodString>;
32
+ optin: z.ZodOptional<z.ZodString>;
33
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
34
+ subscriber_count: z.ZodOptional<z.ZodNumber>;
35
+ description: z.ZodOptional<z.ZodString>;
36
+ }, z.core.$loose>>;
37
+ total: z.ZodNumber;
38
+ per_page: z.ZodNumber;
39
+ page: z.ZodNumber;
40
+ }, z.core.$strip>;
12
41
  declare const listInputSchema: z.ZodObject<{
13
42
  page: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
14
43
  per_page: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
@@ -141,6 +170,11 @@ export declare const deleteListOperation: import("./operation").OperationDefinit
141
170
  id: z.ZodNumber;
142
171
  deleted: z.ZodBoolean;
143
172
  }, z.core.$strip>>;
173
+ export declare function invokeGetListsOperation(context: ListOperationContext, input: unknown): Promise<z.output<typeof listPageSchema>>;
174
+ export declare function invokeGetListOperation(context: ListOperationContext, input: unknown): Promise<z.output<typeof subscriberListSchema>>;
175
+ export declare function invokeCreateListOperation(context: ListOperationContext, input: unknown): Promise<z.output<typeof subscriberListSchema>>;
176
+ export declare function invokeUpdateListOperation(context: ListOperationContext, input: unknown): Promise<z.output<typeof subscriberListSchema>>;
177
+ export declare function invokeDeleteListOperation(context: ListOperationContext, input: unknown): Promise<z.output<typeof deleteListOutputSchema>>;
144
178
  export declare const listOperations: readonly [import("./operation").OperationDefinition<ListOperationContext, z.ZodObject<{
145
179
  page: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
146
180
  per_page: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
@@ -228,5 +262,10 @@ export declare const listOperations: readonly [import("./operation").OperationDe
228
262
  }, z.core.$strip>>];
229
263
  export type ListOperation = (typeof listOperations)[number];
230
264
  export declare function getListOperationByMcpName(name: string): ListOperation | undefined;
265
+ export interface ListOperationInvocation {
266
+ operation: ListOperation;
267
+ output: Record<string, unknown>;
268
+ }
269
+ export declare function invokeListOperationByMcpName(context: ListOperationContext, name: string, input: unknown): Promise<ListOperationInvocation | undefined>;
231
270
  export {};
232
271
  //# sourceMappingURL=lists.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lists.d.ts","sourceRoot":"","sources":["../src/lists.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,QAAQ;IACxB,OAAO,EAAE,IAAI,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACb;AA2BD,QAAA,MAAM,eAAe;;;iBAanB,CAAC;AAiBH,QAAA,MAAM,iBAAiB;;iBAErB,CAAC;AAEH,QAAA,MAAM,qBAAqB;;;;;;;;;;;;iBAYzB,CAAC;AAEH,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;iBAazB,CAAC;AAEH,QAAA,MAAM,sBAAsB;;;iBAG1B,CAAC;AAsCH,wBAAsB,mBAAmB,CACxC,EAAE,MAAM,EAAE,EAAE,oBAAoB,EAChC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,eAAe,CAAC,GACrC,OAAO,CAAC,QAAQ,CAAC,CAWnB;AAED,wBAAsB,iBAAiB,CACtC,EAAE,MAAM,EAAE,EAAE,oBAAoB,EAChC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,iBAAiB,CAAC,GACvC,OAAO,CAAC,IAAI,CAAC,CAKf;AA+BD,wBAAsB,oBAAoB,CACzC,EAAE,MAAM,EAAE,EAAE,oBAAoB,EAChC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,qBAAqB,CAAC,GAC3C,OAAO,CAAC,IAAI,CAAC,CAyBf;AAED,wBAAsB,oBAAoB,CACzC,EAAE,MAAM,EAAE,EAAE,oBAAoB,EAChC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,qBAAqB,CAAC,GAC3C,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,oBAAoB,CACzC,EAAE,MAAM,EAAE,EAAE,oBAAoB,EAChC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,iBAAiB,CAAC,GACvC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC,CAQlD;AASD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;kBAS5B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;kBAS3B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;kBAc9B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;kBAiB9B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;kBAiB9B,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAMjB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAM5D,wBAAgB,yBAAyB,CACxC,IAAI,EAAE,MAAM,GACV,aAAa,GAAG,SAAS,CAE3B"}
1
+ {"version":3,"file":"lists.d.ts","sourceRoot":"","sources":["../src/lists.ts"],"names":[],"mappings":"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"}
@@ -38,6 +38,9 @@ export declare class OperationExecutionError extends Error {
38
38
  readonly operationId: string;
39
39
  constructor(operationId: string, cause: unknown);
40
40
  }
41
+ export declare function parseOperationInput<const InputSchema extends z.ZodType>(schema: InputSchema, input: unknown): z.output<InputSchema>;
42
+ export declare function normalizeOperationExecutionError(operationId: string, error: unknown): OperationExecutionError;
43
+ export declare function parseOperationOutput<const OutputSchema extends z.ZodType>(operationId: string, schema: OutputSchema, output: unknown): z.output<OutputSchema>;
41
44
  export declare function defineOperation<Context, const InputSchema extends z.ZodType, const OutputSchema extends z.ZodType>(config: {
42
45
  id: string;
43
46
  title: string;
@@ -1 +1 @@
1
- {"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../src/operation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,gBAAgB,GAAG;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,WAAW,eAAe;IAC/B,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB,CACnC,OAAO,EACP,WAAW,SAAS,CAAC,CAAC,OAAO,EAC7B,YAAY,SAAS,CAAC,CAAC,OAAO;IAE9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,gBAAgB,CAAC;IAClC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,MAAM,EAAE,eAAe,CAAC;IACxB,GAAG,EAAE,oBAAoB,CAAC;IAC1B,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;CAC1E;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAC7C,YAAmB,OAAO,EAAE,MAAM,EAGjC;CACD;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAC9C,YAAmB,OAAO,EAAE,MAAM,EAGjC;CACD;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IACjD,SAAgB,WAAW,EAAE,MAAM,CAAC;IAEpC,YAAmB,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAIrD;CACD;AA2DD,wBAAgB,eAAe,CAC9B,OAAO,EACP,KAAK,CAAC,WAAW,SAAS,CAAC,CAAC,OAAO,EACnC,KAAK,CAAC,YAAY,SAAS,CAAC,CAAC,OAAO,EACnC,MAAM,EAAE;IACT,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,eAAe,CAAC;IACxB,GAAG,EAAE,oBAAoB,CAAC;IAC1B,OAAO,CACN,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,GAC1B,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;CACnC,GAAG,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,CAqC1D"}
1
+ {"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../src/operation.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@listmonk-ops/operations",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "type": "module",
5
5
  "description": "Shared typed operations for listmonk-ops CLI and MCP adapters",
6
6
  "sideEffects": false,