@fuul/mcp-server 0.2.0 → 1.0.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/README.md CHANGED
@@ -187,7 +187,8 @@ mcp_server/
187
187
  │ └── skills/fuul/SKILL.md
188
188
  ├── src/ # TypeScript source
189
189
  ├── docs/ # Maintainer and integrator docs
190
- ├── .github/workflows/ # ci.yml, publish.yml
190
+ ├── .github/workflows/ # ci.yml, release.yml (semantic-release; name must match npm Trusted Publishing)
191
+ ├── release.config.cjs # semantic-release plugins and branches
191
192
  └── dist/ # `npm run build` (gitignored)
192
193
  ```
193
194
 
@@ -198,9 +199,19 @@ mcp_server/
198
199
 
199
200
  ## CI and releases
200
201
 
201
- On each push/PR to `main` / `master`, GitHub Actions runs **lint**, **test**, and **build** in parallel.
202
+ On each push/PR to `main` / `master`, GitHub Actions runs **lint**, **test**, and **build** in parallel (see [.github/workflows/ci.yml](.github/workflows/ci.yml)). Pushes to `beta` / `alpha` also run CI on those branches.
202
203
 
203
- Publishing to npm is triggered by publishing a **GitHub Release** (see [.github/workflows/publish.yml](.github/workflows/publish.yml)); the repository needs an `NPM_TOKEN` secret.
204
+ ## Publishing
205
+
206
+ **npm** releases are performed by **semantic-release** in GitHub Actions (same approach as [fuul-sdk](https://github.com/kuyen-labs/fuul-sdk)). You do not need to create a GitHub Release manually or run `npm publish` locally for the default flow.
207
+
208
+ 1. **npm — [Trusted publishing](https://docs.npmjs.com/trusted-publishers) (OIDC):** [.github/workflows/release.yml](.github/workflows/release.yml) uses the same **steps and permissions** as [fuul-sdk](https://github.com/kuyen-labs/fuul-sdk)’s release job (`id-token: write`, no `NPM_TOKEN` in the workflow). The **filename** is **`release.yml`** here so it matches what you enter in npm’s trusted-publisher form (fuul-sdk uses **`versioning.yml`** instead — that name is only for that repo). On npmjs.com, **`@fuul/mcp-server`** must list workflow **`.github/workflows/release.yml`** for **`kuyen-labs` / `mcp_server`**. If npm still shows **`OIDC … 404`**, the path/org/repo in npm does not match this file.
209
+ **About `NPM_TOKEN` in caps:** npm docs use that name for **classic token** auth. With **Trusted Publishing** you do **not** put a token value into npm for OIDC; GitHub provides the identity. You also do **not** need a GitHub secret named `NPM_TOKEN` for this flow. (If the npm UI showed `NPM_TOKEN`, it is usually help text for the non-OIDC case.)
210
+ 2. **Branches**: on **push** to `main`, `beta`, or `alpha`, that workflow runs `npm ci`, **build**, **`npm run test:ci`**, then `npx semantic-release` on push only.
211
+ 3. **Config**: [release.config.cjs](release.config.cjs) matches fuul-sdk’s plugin list and order; `@semantic-release/exec` uses the same **`verifyReleaseCmd`** writing `src/release.json` (placeholder [src/release.json](src/release.json)); `@semantic-release/git` commits **`package.json`** only.
212
+ 4. **Commits**: use [Conventional Commits](https://www.conventionalcommits.org/) on releasable branches (e.g. `feat:`, `fix:`, `BREAKING CHANGE:`) so the next version is computed; if nothing warrants a release, the job exits without publishing (expected).
213
+
214
+ Local dry run of the same CLI: `npm run semantic-release` (needs a clean git state, tags, and env vars; in practice CI after merge is enough).
204
215
 
205
216
  ## Scripts
206
217
 
@@ -212,6 +223,8 @@ Publishing to npm is triggered by publishing a **GitHub Release** (see [.github/
212
223
  | `npm run dev` | MCP via `tsx` (`src/index.ts`) |
213
224
  | `npm run lint` | ESLint on `src/` |
214
225
  | `npm run test` | Vitest |
226
+ | `npm run test:ci` | Vitest (same as `test`; used by `release.yml` like fuul-sdk’s `test:ci` in `versioning.yml`) |
227
+ | `npm run semantic-release` | Run semantic-release locally (CI runs `npx semantic-release` on eligible pushes) |
215
228
 
216
229
  ## License
217
230
 
@@ -4,7 +4,16 @@ import { z } from 'zod';
4
4
  * Flow: first call with dry_run: true (or omit confirmed) to get validation / preview;
5
5
  * second call with confirmed: true to execute.
6
6
  */
7
- export declare const writeConfirmationFieldsSchema: any;
7
+ export declare const writeConfirmationFieldsSchema: z.ZodObject<{
8
+ dry_run: z.ZodOptional<z.ZodBoolean>;
9
+ confirmed: z.ZodOptional<z.ZodBoolean>;
10
+ }, "strip", z.ZodTypeAny, {
11
+ dry_run?: boolean | undefined;
12
+ confirmed?: boolean | undefined;
13
+ }, {
14
+ dry_run?: boolean | undefined;
15
+ confirmed?: boolean | undefined;
16
+ }>;
8
17
  export type WriteConfirmationFields = z.infer<typeof writeConfirmationFieldsSchema>;
9
18
  export declare class WriteNotConfirmedError extends Error {
10
19
  readonly code: "WRITE_NOT_CONFIRMED";
@@ -1 +1 @@
1
- {"version":3,"file":"write-confirmation.d.ts","sourceRoot":"","sources":["../../src/agent/write-confirmation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,KAGxC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,IAAI,EAAG,qBAAqB,CAAU;gBAEnC,OAAO,SAAiG;CAKrH;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,uBAAuB,GAAG,IAAI,CAQjF"}
1
+ {"version":3,"file":"write-confirmation.d.ts","sourceRoot":"","sources":["../../src/agent/write-confirmation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;EAGxC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,IAAI,EAAG,qBAAqB,CAAU;gBAEnC,OAAO,SAAiG;CAKrH;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,uBAAuB,GAAG,IAAI,CAQjF"}
@@ -1,5 +1,21 @@
1
1
  import { z } from 'zod';
2
- declare const envSchema: any;
2
+ declare const envSchema: z.ZodObject<{
3
+ FUUL_API_BASE_URL: z.ZodDefault<z.ZodString>;
4
+ FUUL_OAUTH_CLIENT_ID: z.ZodDefault<z.ZodString>;
5
+ FUUL_OAUTH_REDIRECT_URI: z.ZodDefault<z.ZodString>;
6
+ /** Max wall time per MCP tool call (ms). Covers refresh + retry on 401. */
7
+ FUUL_MCP_TOOL_TIMEOUT_MS: z.ZodDefault<z.ZodNumber>;
8
+ }, "strip", z.ZodTypeAny, {
9
+ FUUL_API_BASE_URL: string;
10
+ FUUL_OAUTH_CLIENT_ID: string;
11
+ FUUL_OAUTH_REDIRECT_URI: string;
12
+ FUUL_MCP_TOOL_TIMEOUT_MS: number;
13
+ }, {
14
+ FUUL_API_BASE_URL?: string | undefined;
15
+ FUUL_OAUTH_CLIENT_ID?: string | undefined;
16
+ FUUL_OAUTH_REDIRECT_URI?: string | undefined;
17
+ FUUL_MCP_TOOL_TIMEOUT_MS?: number | undefined;
18
+ }>;
3
19
  export type Env = z.infer<typeof envSchema> & {
4
20
  debug: boolean;
5
21
  };
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,QAAA,MAAM,SAAS,KAMb,CAAC;AAEH,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,GAAG;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAMjE,wBAAgB,OAAO,CAAC,UAAU,GAAE,MAAM,CAAC,UAAwB,GAAG,GAAG,CAWxE;AAED,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAEjD"}
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,QAAA,MAAM,SAAS;;;;IAIb,2EAA2E;;;;;;;;;;;;EAE3E,CAAC;AAEH,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,GAAG;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC;AAMjE,wBAAgB,OAAO,CAAC,UAAU,GAAE,MAAM,CAAC,UAAwB,GAAG,GAAG,CAWxE;AAED,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAEjD"}
@@ -1,35 +1,584 @@
1
1
  import { z } from 'zod';
2
- export declare const listProjectsInputSchema: any;
3
- export declare const projectIdParamSchema: any;
4
- export declare const getIncentiveInputSchema: any;
5
- export declare const getTriggerInputSchema: any;
6
- export declare const payoutTermSchema: any;
2
+ export declare const listProjectsInputSchema: z.ZodObject<{
3
+ page: z.ZodOptional<z.ZodNumber>;
4
+ query: z.ZodOptional<z.ZodString>;
5
+ }, "strip", z.ZodTypeAny, {
6
+ page?: number | undefined;
7
+ query?: string | undefined;
8
+ }, {
9
+ page?: number | undefined;
10
+ query?: string | undefined;
11
+ }>;
12
+ export declare const projectIdParamSchema: z.ZodObject<{
13
+ project_id: z.ZodString;
14
+ }, "strip", z.ZodTypeAny, {
15
+ project_id: string;
16
+ }, {
17
+ project_id: string;
18
+ }>;
19
+ export declare const getIncentiveInputSchema: z.ZodObject<{
20
+ project_id: z.ZodString;
21
+ conversion_id: z.ZodString;
22
+ }, "strip", z.ZodTypeAny, {
23
+ project_id: string;
24
+ conversion_id: string;
25
+ }, {
26
+ project_id: string;
27
+ conversion_id: string;
28
+ }>;
29
+ export declare const getTriggerInputSchema: z.ZodObject<{
30
+ project_id: z.ZodString;
31
+ trigger_id: z.ZodString;
32
+ }, "strip", z.ZodTypeAny, {
33
+ project_id: string;
34
+ trigger_id: string;
35
+ }, {
36
+ project_id: string;
37
+ trigger_id: string;
38
+ }>;
39
+ export declare const payoutTermSchema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
7
40
  /** Body must match server PayoutTermDto (see fuul-server payouts/payout-terms/dto/payout-term.dto). */
8
- export declare const updatePayoutTermInputSchema: any;
41
+ export declare const updatePayoutTermInputSchema: z.ZodObject<{
42
+ dry_run: z.ZodOptional<z.ZodBoolean>;
43
+ confirmed: z.ZodOptional<z.ZodBoolean>;
44
+ } & {
45
+ project_id: z.ZodString;
46
+ conversion_id: z.ZodString;
47
+ payout_term_id: z.ZodString;
48
+ payout_term: z.ZodRecord<z.ZodString, z.ZodUnknown>;
49
+ }, "strip", z.ZodTypeAny, {
50
+ project_id: string;
51
+ conversion_id: string;
52
+ payout_term_id: string;
53
+ payout_term: Record<string, unknown>;
54
+ dry_run?: boolean | undefined;
55
+ confirmed?: boolean | undefined;
56
+ }, {
57
+ project_id: string;
58
+ conversion_id: string;
59
+ payout_term_id: string;
60
+ payout_term: Record<string, unknown>;
61
+ dry_run?: boolean | undefined;
62
+ confirmed?: boolean | undefined;
63
+ }>;
9
64
  export type UpdatePayoutTermInput = z.infer<typeof updatePayoutTermInputSchema>;
10
65
  /** Registered on MCP tools; use {@link updateProjectTierInputSchema} in handlers for full validation. */
11
- export declare const updateProjectTierFieldsSchema: any;
12
- export declare const updateProjectTierInputSchema: any;
66
+ export declare const updateProjectTierFieldsSchema: z.ZodObject<{
67
+ dry_run: z.ZodOptional<z.ZodBoolean>;
68
+ confirmed: z.ZodOptional<z.ZodBoolean>;
69
+ } & {
70
+ project_id: z.ZodString;
71
+ tier_id: z.ZodString;
72
+ name: z.ZodOptional<z.ZodString>;
73
+ description: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNull]>>;
74
+ rank: z.ZodOptional<z.ZodNumber>;
75
+ audience_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
76
+ }, "strip", z.ZodTypeAny, {
77
+ project_id: string;
78
+ tier_id: string;
79
+ dry_run?: boolean | undefined;
80
+ confirmed?: boolean | undefined;
81
+ name?: string | undefined;
82
+ description?: string | null | undefined;
83
+ rank?: number | undefined;
84
+ audience_id?: string | null | undefined;
85
+ }, {
86
+ project_id: string;
87
+ tier_id: string;
88
+ dry_run?: boolean | undefined;
89
+ confirmed?: boolean | undefined;
90
+ name?: string | undefined;
91
+ description?: string | null | undefined;
92
+ rank?: number | undefined;
93
+ audience_id?: string | null | undefined;
94
+ }>;
95
+ export declare const updateProjectTierInputSchema: z.ZodEffects<z.ZodObject<{
96
+ dry_run: z.ZodOptional<z.ZodBoolean>;
97
+ confirmed: z.ZodOptional<z.ZodBoolean>;
98
+ } & {
99
+ project_id: z.ZodString;
100
+ tier_id: z.ZodString;
101
+ name: z.ZodOptional<z.ZodString>;
102
+ description: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNull]>>;
103
+ rank: z.ZodOptional<z.ZodNumber>;
104
+ audience_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
105
+ }, "strip", z.ZodTypeAny, {
106
+ project_id: string;
107
+ tier_id: string;
108
+ dry_run?: boolean | undefined;
109
+ confirmed?: boolean | undefined;
110
+ name?: string | undefined;
111
+ description?: string | null | undefined;
112
+ rank?: number | undefined;
113
+ audience_id?: string | null | undefined;
114
+ }, {
115
+ project_id: string;
116
+ tier_id: string;
117
+ dry_run?: boolean | undefined;
118
+ confirmed?: boolean | undefined;
119
+ name?: string | undefined;
120
+ description?: string | null | undefined;
121
+ rank?: number | undefined;
122
+ audience_id?: string | null | undefined;
123
+ }>, {
124
+ project_id: string;
125
+ tier_id: string;
126
+ dry_run?: boolean | undefined;
127
+ confirmed?: boolean | undefined;
128
+ name?: string | undefined;
129
+ description?: string | null | undefined;
130
+ rank?: number | undefined;
131
+ audience_id?: string | null | undefined;
132
+ }, {
133
+ project_id: string;
134
+ tier_id: string;
135
+ dry_run?: boolean | undefined;
136
+ confirmed?: boolean | undefined;
137
+ name?: string | undefined;
138
+ description?: string | null | undefined;
139
+ rank?: number | undefined;
140
+ audience_id?: string | null | undefined;
141
+ }>;
13
142
  export type UpdateProjectTierInput = z.infer<typeof updateProjectTierInputSchema>;
14
143
  /** Registered on MCP tools; use {@link updateAudienceInputSchema} in handlers. */
15
- export declare const updateAudienceFieldsSchema: any;
16
- export declare const updateAudienceInputSchema: any;
144
+ export declare const updateAudienceFieldsSchema: z.ZodObject<{
145
+ dry_run: z.ZodOptional<z.ZodBoolean>;
146
+ confirmed: z.ZodOptional<z.ZodBoolean>;
147
+ } & {
148
+ project_id: z.ZodString;
149
+ audience_id: z.ZodString;
150
+ name: z.ZodString;
151
+ conditions: z.ZodOptional<z.ZodArray<z.ZodObject<{
152
+ signature: z.ZodString;
153
+ parameters: z.ZodRecord<z.ZodString, z.ZodUnknown>;
154
+ }, "strip", z.ZodTypeAny, {
155
+ signature: string;
156
+ parameters: Record<string, unknown>;
157
+ }, {
158
+ signature: string;
159
+ parameters: Record<string, unknown>;
160
+ }>, "many">>;
161
+ condition_match_mode: z.ZodOptional<z.ZodEnum<["any", "all"]>>;
162
+ contractId: z.ZodOptional<z.ZodString>;
163
+ }, "strip", z.ZodTypeAny, {
164
+ project_id: string;
165
+ name: string;
166
+ audience_id: string;
167
+ dry_run?: boolean | undefined;
168
+ confirmed?: boolean | undefined;
169
+ conditions?: {
170
+ signature: string;
171
+ parameters: Record<string, unknown>;
172
+ }[] | undefined;
173
+ condition_match_mode?: "any" | "all" | undefined;
174
+ contractId?: string | undefined;
175
+ }, {
176
+ project_id: string;
177
+ name: string;
178
+ audience_id: string;
179
+ dry_run?: boolean | undefined;
180
+ confirmed?: boolean | undefined;
181
+ conditions?: {
182
+ signature: string;
183
+ parameters: Record<string, unknown>;
184
+ }[] | undefined;
185
+ condition_match_mode?: "any" | "all" | undefined;
186
+ contractId?: string | undefined;
187
+ }>;
188
+ export declare const updateAudienceInputSchema: z.ZodEffects<z.ZodObject<{
189
+ dry_run: z.ZodOptional<z.ZodBoolean>;
190
+ confirmed: z.ZodOptional<z.ZodBoolean>;
191
+ } & {
192
+ project_id: z.ZodString;
193
+ audience_id: z.ZodString;
194
+ name: z.ZodString;
195
+ conditions: z.ZodOptional<z.ZodArray<z.ZodObject<{
196
+ signature: z.ZodString;
197
+ parameters: z.ZodRecord<z.ZodString, z.ZodUnknown>;
198
+ }, "strip", z.ZodTypeAny, {
199
+ signature: string;
200
+ parameters: Record<string, unknown>;
201
+ }, {
202
+ signature: string;
203
+ parameters: Record<string, unknown>;
204
+ }>, "many">>;
205
+ condition_match_mode: z.ZodOptional<z.ZodEnum<["any", "all"]>>;
206
+ contractId: z.ZodOptional<z.ZodString>;
207
+ }, "strip", z.ZodTypeAny, {
208
+ project_id: string;
209
+ name: string;
210
+ audience_id: string;
211
+ dry_run?: boolean | undefined;
212
+ confirmed?: boolean | undefined;
213
+ conditions?: {
214
+ signature: string;
215
+ parameters: Record<string, unknown>;
216
+ }[] | undefined;
217
+ condition_match_mode?: "any" | "all" | undefined;
218
+ contractId?: string | undefined;
219
+ }, {
220
+ project_id: string;
221
+ name: string;
222
+ audience_id: string;
223
+ dry_run?: boolean | undefined;
224
+ confirmed?: boolean | undefined;
225
+ conditions?: {
226
+ signature: string;
227
+ parameters: Record<string, unknown>;
228
+ }[] | undefined;
229
+ condition_match_mode?: "any" | "all" | undefined;
230
+ contractId?: string | undefined;
231
+ }>, {
232
+ project_id: string;
233
+ name: string;
234
+ audience_id: string;
235
+ dry_run?: boolean | undefined;
236
+ confirmed?: boolean | undefined;
237
+ conditions?: {
238
+ signature: string;
239
+ parameters: Record<string, unknown>;
240
+ }[] | undefined;
241
+ condition_match_mode?: "any" | "all" | undefined;
242
+ contractId?: string | undefined;
243
+ }, {
244
+ project_id: string;
245
+ name: string;
246
+ audience_id: string;
247
+ dry_run?: boolean | undefined;
248
+ confirmed?: boolean | undefined;
249
+ conditions?: {
250
+ signature: string;
251
+ parameters: Record<string, unknown>;
252
+ }[] | undefined;
253
+ condition_match_mode?: "any" | "all" | undefined;
254
+ contractId?: string | undefined;
255
+ }>;
17
256
  export type UpdateAudienceInput = z.infer<typeof updateAudienceInputSchema>;
18
257
  /** Registered on MCP tools; use {@link updateTriggerInputSchema} in handlers. */
19
- export declare const updateTriggerFieldsSchema: any;
20
- export declare const updateTriggerInputSchema: any;
258
+ export declare const updateTriggerFieldsSchema: z.ZodObject<{
259
+ dry_run: z.ZodOptional<z.ZodBoolean>;
260
+ confirmed: z.ZodOptional<z.ZodBoolean>;
261
+ } & {
262
+ project_id: z.ZodString;
263
+ trigger_id: z.ZodString;
264
+ name: z.ZodOptional<z.ZodString>;
265
+ description: z.ZodOptional<z.ZodString>;
266
+ event_type: z.ZodOptional<z.ZodString>;
267
+ condition_expression: z.ZodOptional<z.ZodString>;
268
+ amount_expression: z.ZodOptional<z.ZodString>;
269
+ volume_expression: z.ZodOptional<z.ZodString>;
270
+ revenue_expression: z.ZodOptional<z.ZodString>;
271
+ currency_expression: z.ZodOptional<z.ZodString>;
272
+ volume_currency_expression: z.ZodOptional<z.ZodString>;
273
+ revenue_currency_expression: z.ZodOptional<z.ZodString>;
274
+ end_user_identifier_property: z.ZodOptional<z.ZodString>;
275
+ end_user_identifier_expression: z.ZodOptional<z.ZodString>;
276
+ payable: z.ZodOptional<z.ZodBoolean>;
277
+ ref: z.ZodOptional<z.ZodString>;
278
+ contract_ids: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
279
+ }, "strip", z.ZodTypeAny, {
280
+ project_id: string;
281
+ trigger_id: string;
282
+ dry_run?: boolean | undefined;
283
+ confirmed?: boolean | undefined;
284
+ name?: string | undefined;
285
+ description?: string | undefined;
286
+ event_type?: string | undefined;
287
+ condition_expression?: string | undefined;
288
+ amount_expression?: string | undefined;
289
+ volume_expression?: string | undefined;
290
+ revenue_expression?: string | undefined;
291
+ currency_expression?: string | undefined;
292
+ volume_currency_expression?: string | undefined;
293
+ revenue_currency_expression?: string | undefined;
294
+ end_user_identifier_property?: string | undefined;
295
+ end_user_identifier_expression?: string | undefined;
296
+ payable?: boolean | undefined;
297
+ ref?: string | undefined;
298
+ contract_ids?: string[] | undefined;
299
+ }, {
300
+ project_id: string;
301
+ trigger_id: string;
302
+ dry_run?: boolean | undefined;
303
+ confirmed?: boolean | undefined;
304
+ name?: string | undefined;
305
+ description?: string | undefined;
306
+ event_type?: string | undefined;
307
+ condition_expression?: string | undefined;
308
+ amount_expression?: string | undefined;
309
+ volume_expression?: string | undefined;
310
+ revenue_expression?: string | undefined;
311
+ currency_expression?: string | undefined;
312
+ volume_currency_expression?: string | undefined;
313
+ revenue_currency_expression?: string | undefined;
314
+ end_user_identifier_property?: string | undefined;
315
+ end_user_identifier_expression?: string | undefined;
316
+ payable?: boolean | undefined;
317
+ ref?: string | undefined;
318
+ contract_ids?: string[] | undefined;
319
+ }>;
320
+ export declare const updateTriggerInputSchema: z.ZodEffects<z.ZodObject<{
321
+ dry_run: z.ZodOptional<z.ZodBoolean>;
322
+ confirmed: z.ZodOptional<z.ZodBoolean>;
323
+ } & {
324
+ project_id: z.ZodString;
325
+ trigger_id: z.ZodString;
326
+ name: z.ZodOptional<z.ZodString>;
327
+ description: z.ZodOptional<z.ZodString>;
328
+ event_type: z.ZodOptional<z.ZodString>;
329
+ condition_expression: z.ZodOptional<z.ZodString>;
330
+ amount_expression: z.ZodOptional<z.ZodString>;
331
+ volume_expression: z.ZodOptional<z.ZodString>;
332
+ revenue_expression: z.ZodOptional<z.ZodString>;
333
+ currency_expression: z.ZodOptional<z.ZodString>;
334
+ volume_currency_expression: z.ZodOptional<z.ZodString>;
335
+ revenue_currency_expression: z.ZodOptional<z.ZodString>;
336
+ end_user_identifier_property: z.ZodOptional<z.ZodString>;
337
+ end_user_identifier_expression: z.ZodOptional<z.ZodString>;
338
+ payable: z.ZodOptional<z.ZodBoolean>;
339
+ ref: z.ZodOptional<z.ZodString>;
340
+ contract_ids: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
341
+ }, "strip", z.ZodTypeAny, {
342
+ project_id: string;
343
+ trigger_id: string;
344
+ dry_run?: boolean | undefined;
345
+ confirmed?: boolean | undefined;
346
+ name?: string | undefined;
347
+ description?: string | undefined;
348
+ event_type?: string | undefined;
349
+ condition_expression?: string | undefined;
350
+ amount_expression?: string | undefined;
351
+ volume_expression?: string | undefined;
352
+ revenue_expression?: string | undefined;
353
+ currency_expression?: string | undefined;
354
+ volume_currency_expression?: string | undefined;
355
+ revenue_currency_expression?: string | undefined;
356
+ end_user_identifier_property?: string | undefined;
357
+ end_user_identifier_expression?: string | undefined;
358
+ payable?: boolean | undefined;
359
+ ref?: string | undefined;
360
+ contract_ids?: string[] | undefined;
361
+ }, {
362
+ project_id: string;
363
+ trigger_id: string;
364
+ dry_run?: boolean | undefined;
365
+ confirmed?: boolean | undefined;
366
+ name?: string | undefined;
367
+ description?: string | undefined;
368
+ event_type?: string | undefined;
369
+ condition_expression?: string | undefined;
370
+ amount_expression?: string | undefined;
371
+ volume_expression?: string | undefined;
372
+ revenue_expression?: string | undefined;
373
+ currency_expression?: string | undefined;
374
+ volume_currency_expression?: string | undefined;
375
+ revenue_currency_expression?: string | undefined;
376
+ end_user_identifier_property?: string | undefined;
377
+ end_user_identifier_expression?: string | undefined;
378
+ payable?: boolean | undefined;
379
+ ref?: string | undefined;
380
+ contract_ids?: string[] | undefined;
381
+ }>, {
382
+ project_id: string;
383
+ trigger_id: string;
384
+ dry_run?: boolean | undefined;
385
+ confirmed?: boolean | undefined;
386
+ name?: string | undefined;
387
+ description?: string | undefined;
388
+ event_type?: string | undefined;
389
+ condition_expression?: string | undefined;
390
+ amount_expression?: string | undefined;
391
+ volume_expression?: string | undefined;
392
+ revenue_expression?: string | undefined;
393
+ currency_expression?: string | undefined;
394
+ volume_currency_expression?: string | undefined;
395
+ revenue_currency_expression?: string | undefined;
396
+ end_user_identifier_property?: string | undefined;
397
+ end_user_identifier_expression?: string | undefined;
398
+ payable?: boolean | undefined;
399
+ ref?: string | undefined;
400
+ contract_ids?: string[] | undefined;
401
+ }, {
402
+ project_id: string;
403
+ trigger_id: string;
404
+ dry_run?: boolean | undefined;
405
+ confirmed?: boolean | undefined;
406
+ name?: string | undefined;
407
+ description?: string | undefined;
408
+ event_type?: string | undefined;
409
+ condition_expression?: string | undefined;
410
+ amount_expression?: string | undefined;
411
+ volume_expression?: string | undefined;
412
+ revenue_expression?: string | undefined;
413
+ currency_expression?: string | undefined;
414
+ volume_currency_expression?: string | undefined;
415
+ revenue_currency_expression?: string | undefined;
416
+ end_user_identifier_property?: string | undefined;
417
+ end_user_identifier_expression?: string | undefined;
418
+ payable?: boolean | undefined;
419
+ ref?: string | undefined;
420
+ contract_ids?: string[] | undefined;
421
+ }>;
21
422
  export type UpdateTriggerInput = z.infer<typeof updateTriggerInputSchema>;
22
- export declare const listPayoutsPendingApprovalSchema: any;
23
- export declare const listRewardsPayoutsSchema: any;
24
- export declare const payoutBatchActionInputSchema: any;
423
+ export declare const listPayoutsPendingApprovalSchema: z.ZodObject<{
424
+ project_id: z.ZodString;
425
+ page: z.ZodOptional<z.ZodNumber>;
426
+ page_size: z.ZodOptional<z.ZodNumber>;
427
+ }, "strip", z.ZodTypeAny, {
428
+ project_id: string;
429
+ page?: number | undefined;
430
+ page_size?: number | undefined;
431
+ }, {
432
+ project_id: string;
433
+ page?: number | undefined;
434
+ page_size?: number | undefined;
435
+ }>;
436
+ export declare const listRewardsPayoutsSchema: z.ZodObject<{
437
+ project_id: z.ZodString;
438
+ page: z.ZodOptional<z.ZodNumber>;
439
+ page_size: z.ZodOptional<z.ZodNumber>;
440
+ status: z.ZodOptional<z.ZodString>;
441
+ from_date: z.ZodOptional<z.ZodString>;
442
+ to_date: z.ZodOptional<z.ZodString>;
443
+ }, "strip", z.ZodTypeAny, {
444
+ project_id: string;
445
+ status?: string | undefined;
446
+ page?: number | undefined;
447
+ page_size?: number | undefined;
448
+ from_date?: string | undefined;
449
+ to_date?: string | undefined;
450
+ }, {
451
+ project_id: string;
452
+ status?: string | undefined;
453
+ page?: number | undefined;
454
+ page_size?: number | undefined;
455
+ from_date?: string | undefined;
456
+ to_date?: string | undefined;
457
+ }>;
458
+ export declare const payoutBatchActionInputSchema: z.ZodObject<{
459
+ dry_run: z.ZodOptional<z.ZodBoolean>;
460
+ confirmed: z.ZodOptional<z.ZodBoolean>;
461
+ } & {
462
+ project_id: z.ZodString;
463
+ payout_ids: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
464
+ from_date: z.ZodOptional<z.ZodString>;
465
+ to_date: z.ZodOptional<z.ZodString>;
466
+ user_address: z.ZodOptional<z.ZodString>;
467
+ affiliate_address: z.ZodOptional<z.ZodString>;
468
+ }, "strip", z.ZodTypeAny, {
469
+ project_id: string;
470
+ dry_run?: boolean | undefined;
471
+ confirmed?: boolean | undefined;
472
+ from_date?: string | undefined;
473
+ to_date?: string | undefined;
474
+ payout_ids?: string[] | undefined;
475
+ user_address?: string | undefined;
476
+ affiliate_address?: string | undefined;
477
+ }, {
478
+ project_id: string;
479
+ dry_run?: boolean | undefined;
480
+ confirmed?: boolean | undefined;
481
+ from_date?: string | undefined;
482
+ to_date?: string | undefined;
483
+ payout_ids?: string[] | undefined;
484
+ user_address?: string | undefined;
485
+ affiliate_address?: string | undefined;
486
+ }>;
25
487
  export type PayoutBatchActionInput = z.infer<typeof payoutBatchActionInputSchema>;
26
488
  /** GET .../affiliate-portal/stats — matches fuul-server GetAffiliateStatsDto query names. */
27
- export declare const getAffiliatePortalStatsSchema: any;
489
+ export declare const getAffiliatePortalStatsSchema: z.ZodObject<{
490
+ project_id: z.ZodString;
491
+ user_identifier: z.ZodString;
492
+ from: z.ZodOptional<z.ZodString>;
493
+ to: z.ZodOptional<z.ZodString>;
494
+ this_month: z.ZodOptional<z.ZodString>;
495
+ conversion_external_id: z.ZodOptional<z.ZodNumber>;
496
+ conversion_name: z.ZodOptional<z.ZodString>;
497
+ }, "strip", z.ZodTypeAny, {
498
+ project_id: string;
499
+ user_identifier: string;
500
+ from?: string | undefined;
501
+ to?: string | undefined;
502
+ this_month?: string | undefined;
503
+ conversion_external_id?: number | undefined;
504
+ conversion_name?: string | undefined;
505
+ }, {
506
+ project_id: string;
507
+ user_identifier: string;
508
+ from?: string | undefined;
509
+ to?: string | undefined;
510
+ this_month?: string | undefined;
511
+ conversion_external_id?: number | undefined;
512
+ conversion_name?: string | undefined;
513
+ }>;
28
514
  export type GetAffiliatePortalStatsInput = z.infer<typeof getAffiliatePortalStatsSchema>;
29
515
  /** GET .../affiliate-portal/total-stats — matches GetTotalStatsDto. */
30
- export declare const getProjectAffiliateTotalStatsSchema: any;
516
+ export declare const getProjectAffiliateTotalStatsSchema: z.ZodObject<{
517
+ project_id: z.ZodString;
518
+ statuses: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
519
+ regions: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
520
+ audiences: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
521
+ tiers: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
522
+ dateRange: z.ZodOptional<z.ZodEnum<["7d", "30d", "90d", "MTD", "QTD", "custom", "all"]>>;
523
+ dateFrom: z.ZodOptional<z.ZodString>;
524
+ dateTo: z.ZodOptional<z.ZodString>;
525
+ }, "strip", z.ZodTypeAny, {
526
+ project_id: string;
527
+ statuses?: string[] | undefined;
528
+ regions?: string[] | undefined;
529
+ audiences?: string[] | undefined;
530
+ tiers?: string[] | undefined;
531
+ dateRange?: "custom" | "all" | "7d" | "30d" | "90d" | "MTD" | "QTD" | undefined;
532
+ dateFrom?: string | undefined;
533
+ dateTo?: string | undefined;
534
+ }, {
535
+ project_id: string;
536
+ statuses?: string[] | undefined;
537
+ regions?: string[] | undefined;
538
+ audiences?: string[] | undefined;
539
+ tiers?: string[] | undefined;
540
+ dateRange?: "custom" | "all" | "7d" | "30d" | "90d" | "MTD" | "QTD" | undefined;
541
+ dateFrom?: string | undefined;
542
+ dateTo?: string | undefined;
543
+ }>;
31
544
  export type GetProjectAffiliateTotalStatsInput = z.infer<typeof getProjectAffiliateTotalStatsSchema>;
32
545
  /** GET .../affiliate-portal/global-breakdown — matches GetProjectAffiliatesBreakdownDto (groupBy required). */
33
- export declare const getProjectAffiliatesBreakdownSchema: any;
546
+ export declare const getProjectAffiliatesBreakdownSchema: z.ZodObject<{
547
+ project_id: z.ZodString;
548
+ groupBy: z.ZodEnum<["audience", "tier", "region", "status"]>;
549
+ dateRange: z.ZodOptional<z.ZodEnum<["7d", "30d", "90d", "MTD", "QTD", "custom", "all"]>>;
550
+ dateFrom: z.ZodOptional<z.ZodString>;
551
+ dateTo: z.ZodOptional<z.ZodString>;
552
+ sortBy: z.ZodOptional<z.ZodEnum<["totalReferralVolume", "revenueFromReferrals", "earnings", "pointsPaid"]>>;
553
+ sortOrder: z.ZodOptional<z.ZodEnum<["asc", "desc"]>>;
554
+ statuses: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
555
+ regions: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
556
+ audiences: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
557
+ tiers: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
558
+ }, "strip", z.ZodTypeAny, {
559
+ project_id: string;
560
+ groupBy: "status" | "audience" | "tier" | "region";
561
+ statuses?: string[] | undefined;
562
+ regions?: string[] | undefined;
563
+ audiences?: string[] | undefined;
564
+ tiers?: string[] | undefined;
565
+ dateRange?: "custom" | "all" | "7d" | "30d" | "90d" | "MTD" | "QTD" | undefined;
566
+ dateFrom?: string | undefined;
567
+ dateTo?: string | undefined;
568
+ sortBy?: "totalReferralVolume" | "revenueFromReferrals" | "earnings" | "pointsPaid" | undefined;
569
+ sortOrder?: "asc" | "desc" | undefined;
570
+ }, {
571
+ project_id: string;
572
+ groupBy: "status" | "audience" | "tier" | "region";
573
+ statuses?: string[] | undefined;
574
+ regions?: string[] | undefined;
575
+ audiences?: string[] | undefined;
576
+ tiers?: string[] | undefined;
577
+ dateRange?: "custom" | "all" | "7d" | "30d" | "90d" | "MTD" | "QTD" | undefined;
578
+ dateFrom?: string | undefined;
579
+ dateTo?: string | undefined;
580
+ sortBy?: "totalReferralVolume" | "revenueFromReferrals" | "earnings" | "pointsPaid" | undefined;
581
+ sortOrder?: "asc" | "desc" | undefined;
582
+ }>;
34
583
  export type GetProjectAffiliatesBreakdownInput = z.infer<typeof getProjectAffiliatesBreakdownSchema>;
35
584
  //# sourceMappingURL=tool-schemas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-schemas.d.ts","sourceRoot":"","sources":["../../src/tools/tool-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,uBAAuB,KAGlC,CAAC;AAEH,eAAO,MAAM,oBAAoB,KAE/B,CAAC;AAEH,eAAO,MAAM,uBAAuB,KAGlC,CAAC;AAEH,eAAO,MAAM,qBAAqB,KAGhC,CAAC;AAEH,eAAO,MAAM,gBAAgB,KAAoC,CAAC;AAElE,uGAAuG;AACvG,eAAO,MAAM,2BAA2B,KAKtC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,yGAAyG;AACzG,eAAO,MAAM,6BAA6B,KAOxC,CAAC;AAEH,eAAO,MAAM,4BAA4B,KAGxC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAOlF,kFAAkF;AAClF,eAAO,MAAM,0BAA0B,KAOrC,CAAC;AAEH,eAAO,MAAM,yBAAyB,KAGrC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,iFAAiF;AACjF,eAAO,MAAM,yBAAyB,KAkBpC,CAAC;AAEH,eAAO,MAAM,wBAAwB,KAkBpC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,eAAO,MAAM,gCAAgC,KAI3C,CAAC;AAEH,eAAO,MAAM,wBAAwB,KAOnC,CAAC;AAEH,eAAO,MAAM,4BAA4B,KAOvC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAIlF,6FAA6F;AAC7F,eAAO,MAAM,6BAA6B,KAQxC,CAAC;AAEH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEzF,uEAAuE;AACvE,eAAO,MAAM,mCAAmC,KAS9C,CAAC;AAEH,MAAM,MAAM,kCAAkC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC;AAKrG,+GAA+G;AAC/G,eAAO,MAAM,mCAAmC,KAY9C,CAAC;AAEH,MAAM,MAAM,kCAAkC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC"}
1
+ {"version":3,"file":"tool-schemas.d.ts","sourceRoot":"","sources":["../../src/tools/tool-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,uBAAuB;;;;;;;;;EAGlC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;EAE/B,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;EAGlC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;EAGhC,CAAC;AAEH,eAAO,MAAM,gBAAgB,wCAAoC,CAAC;AAElE,uGAAuG;AACvG,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;EAKtC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,yGAAyG;AACzG,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOxC,CAAC;AAEH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGxC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAOlF,kFAAkF;AAClF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOrC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGrC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,iFAAiF;AACjF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBpC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBpC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,eAAO,MAAM,gCAAgC;;;;;;;;;;;;EAI3C,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;EAOnC,CAAC;AAEH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOvC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAIlF,6FAA6F;AAC7F,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;EAQxC,CAAC;AAEH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEzF,uEAAuE;AACvE,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS9C,CAAC;AAEH,MAAM,MAAM,kCAAkC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC;AAKrG,+GAA+G;AAC/G,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAY9C,CAAC;AAEH,MAAM,MAAM,kCAAkC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fuul/mcp-server",
3
- "version": "0.2.0",
3
+ "version": "1.0.0",
4
4
  "description": "Fuul MCP server for program management via MCP-compatible clients",
5
5
  "keywords": [
6
6
  "Fuul",
@@ -27,12 +27,14 @@
27
27
  },
28
28
  "scripts": {
29
29
  "build": "tsc",
30
+ "semantic-release": "semantic-release",
30
31
  "start": "node dist/index.js",
31
32
  "cli": "tsx src/cli.ts",
32
33
  "dev": "tsx src/index.ts",
33
34
  "lint": "eslint src",
34
35
  "lint:fix": "eslint src --fix",
35
36
  "test": "vitest run",
37
+ "test:ci": "vitest run",
36
38
  "test:watch": "vitest",
37
39
  "format": "prettier --write 'src/**/*.ts' '*.json' 'eslint.config.js' --config ./.prettierrc"
38
40
  },
@@ -45,18 +47,23 @@
45
47
  },
46
48
  "devDependencies": {
47
49
  "@eslint/js": "^9.39.4",
50
+ "@semantic-release/exec": "^7.1.0",
51
+ "@semantic-release/git": "^10.0.1",
52
+ "@semantic-release/npm": "^13.1.3",
48
53
  "@types/node": "^22.10.0",
49
54
  "eslint": "^9.39.4",
50
55
  "eslint-config-prettier": "^9.1.2",
51
56
  "eslint-plugin-prettier": "^5.5.5",
52
57
  "eslint-plugin-simple-import-sort": "^12.1.1",
53
58
  "prettier": "^3.4.2",
59
+ "semantic-release": "^25.0.3",
54
60
  "tsx": "^4.19.0",
55
61
  "typescript": "^5.7.0",
56
62
  "typescript-eslint": "^8.58.0",
57
63
  "vitest": "^3.0.0"
58
64
  },
59
65
  "publishConfig": {
66
+ "tag": "latest",
60
67
  "access": "public"
61
68
  },
62
69
  "overrides": {