@taotao7/bypass-mcp 1.5.0 → 1.6.1
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/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/tools/promo.js +36 -29
- package/dist/tools/promo.js.map +1 -1
- package/dist/tools/referral.d.ts +2 -0
- package/dist/tools/referral.js +108 -0
- package/dist/tools/referral.js.map +1 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -8,6 +8,7 @@ import { registerStudentTools } from "./tools/students.js";
|
|
|
8
8
|
import { registerOrderTools } from "./tools/orders.js";
|
|
9
9
|
import { registerStatsTools } from "./tools/stats.js";
|
|
10
10
|
import { registerPromoTools } from "./tools/promo.js";
|
|
11
|
+
import { registerReferralTools } from "./tools/referral.js";
|
|
11
12
|
const apiUrl = process.env.BYPASS_API_URL;
|
|
12
13
|
const apiToken = process.env.BYPASS_API_TOKEN;
|
|
13
14
|
if (!apiUrl || !apiToken) {
|
|
@@ -28,6 +29,7 @@ registerStudentTools(server);
|
|
|
28
29
|
registerOrderTools(server);
|
|
29
30
|
registerStatsTools(server);
|
|
30
31
|
registerPromoTools(server);
|
|
32
|
+
registerReferralTools(server);
|
|
31
33
|
async function main() {
|
|
32
34
|
const transport = new StdioServerTransport();
|
|
33
35
|
await server.connect(transport);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;AAE9C,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,OAAO,CAAC,KAAK,CACX,gFAAgF,CACjF,CAAC;IACF,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;IAChF,OAAO,CAAC,KAAK,CAAC,+EAA+E,CAAC,CAAC;IAC/F,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;IACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAE1B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,mBAAmB;IACzB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC5B,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC7B,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC7B,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC3B,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC3B,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAC3B,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAE9B,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;AACvD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/tools/promo.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { apiGet, apiPost, apiPatch, apiDelete } from "../services/api.js";
|
|
3
3
|
export function registerPromoTools(server) {
|
|
4
|
-
// ───
|
|
4
|
+
// ─── Discount Codes (折扣码) ──────────────────────────
|
|
5
|
+
// Discount codes are manually generated by users and shared as text.
|
|
6
|
+
// Buyers enter the code at checkout to receive a discount; the code owner earns commission.
|
|
5
7
|
server.registerTool("bypass_list_promo_codes", {
|
|
6
|
-
title: "List
|
|
7
|
-
description: "List
|
|
8
|
+
title: "List Discount Codes",
|
|
9
|
+
description: "List discount codes (折扣码). These are user-generated codes that buyers manually enter at checkout to get a discount. The code owner earns commission on each sale. Returns code, owner info, status, per-code overrides, and usage count.",
|
|
8
10
|
inputSchema: {
|
|
9
11
|
search: z.string().optional().describe("Search in code or user email"),
|
|
10
12
|
limit: z.number().int().min(1).max(100).default(20).describe("Max results"),
|
|
@@ -21,8 +23,8 @@ export function registerPromoTools(server) {
|
|
|
21
23
|
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
22
24
|
});
|
|
23
25
|
server.registerTool("bypass_get_promo_code", {
|
|
24
|
-
title: "Get
|
|
25
|
-
description: "Get a
|
|
26
|
+
title: "Get Discount Code",
|
|
27
|
+
description: "Get a discount code (折扣码) by its numeric ID or code string.",
|
|
26
28
|
inputSchema: { id: z.string().describe("Promo code ID (number) or code string") },
|
|
27
29
|
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
28
30
|
}, async (params) => {
|
|
@@ -30,11 +32,11 @@ export function registerPromoTools(server) {
|
|
|
30
32
|
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
31
33
|
});
|
|
32
34
|
server.registerTool("bypass_create_promo_code", {
|
|
33
|
-
title: "Create
|
|
34
|
-
description: "Create a
|
|
35
|
+
title: "Create Discount Code",
|
|
36
|
+
description: "Create a discount code (折扣码) for a user. Code should be uppercase alphanumeric. Each user can only have one active discount code. Buyers enter this code at checkout to get a discount.",
|
|
35
37
|
inputSchema: {
|
|
36
|
-
code: z.string().min(1).regex(/^[A-Za-z0-9]+$/).describe("
|
|
37
|
-
user_id: z.string().min(1).describe("User ID (Auth0 sub)"),
|
|
38
|
+
code: z.string().min(1).regex(/^[A-Za-z0-9]+$/).describe("Discount code (letters and numbers only)"),
|
|
39
|
+
user_id: z.string().min(1).describe("Code owner's User ID (Auth0 sub)"),
|
|
38
40
|
},
|
|
39
41
|
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
|
|
40
42
|
}, async (params) => {
|
|
@@ -42,8 +44,8 @@ export function registerPromoTools(server) {
|
|
|
42
44
|
return { content: [{ type: "text", text: `Promo code "${params.code}" created for user ${params.user_id}.` }] };
|
|
43
45
|
});
|
|
44
46
|
server.registerTool("bypass_update_promo_code", {
|
|
45
|
-
title: "Update
|
|
46
|
-
description: "Update
|
|
47
|
+
title: "Update Discount Code",
|
|
48
|
+
description: "Update a discount code's (折扣码) status and/or per-code discount/commission percentage overrides. Per-code overrides take priority over global defaults.",
|
|
47
49
|
inputSchema: {
|
|
48
50
|
id: z.number().int().describe("Promo code ID"),
|
|
49
51
|
status: z.enum(["active", "disabled"]).optional().describe("New status"),
|
|
@@ -63,20 +65,20 @@ export function registerPromoTools(server) {
|
|
|
63
65
|
return { content: [{ type: "text", text: `Promo code ${params.id} updated.` }] };
|
|
64
66
|
});
|
|
65
67
|
server.registerTool("bypass_delete_promo_code", {
|
|
66
|
-
title: "Delete
|
|
67
|
-
description: "Permanently delete a
|
|
68
|
+
title: "Delete Discount Code",
|
|
69
|
+
description: "Permanently delete a discount code (折扣码) by ID.",
|
|
68
70
|
inputSchema: { id: z.number().int().describe("Promo code ID") },
|
|
69
71
|
annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: true, openWorldHint: false },
|
|
70
72
|
}, async (params) => {
|
|
71
73
|
await apiDelete(`/promo-codes/${params.id}`);
|
|
72
74
|
return { content: [{ type: "text", text: `Promo code ${params.id} deleted.` }] };
|
|
73
75
|
});
|
|
74
|
-
// ─── Commissions
|
|
76
|
+
// ─── Discount Code Commissions ───────────────────────
|
|
75
77
|
server.registerTool("bypass_list_commissions", {
|
|
76
|
-
title: "List Commissions",
|
|
77
|
-
description: "List
|
|
78
|
+
title: "List Discount Code Commissions",
|
|
79
|
+
description: "List discount code (折扣码) commission records. Shows which discount code was used, code owner, buyer, course, original/discount/commission amounts, and settlement status. Use to check how much a discount code owner has earned.",
|
|
78
80
|
inputSchema: {
|
|
79
|
-
search: z.string().optional().describe("Search by
|
|
81
|
+
search: z.string().optional().describe("Search by discount code, buyer email, or code owner email"),
|
|
80
82
|
limit: z.number().int().min(1).max(100).default(20).describe("Max results"),
|
|
81
83
|
offset: z.number().int().min(0).default(0).describe("Pagination offset"),
|
|
82
84
|
},
|
|
@@ -91,21 +93,22 @@ export function registerPromoTools(server) {
|
|
|
91
93
|
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
92
94
|
});
|
|
93
95
|
server.registerTool("bypass_settle_commissions", {
|
|
94
|
-
title: "Settle Commissions",
|
|
95
|
-
description: "Mark commissions as settled (paid out). Pass user_id to settle for one
|
|
96
|
+
title: "Settle Discount Code Commissions",
|
|
97
|
+
description: "Mark discount code (折扣码) commissions as settled (paid out). Pass user_id to settle for one code owner, or omit to settle all. This is irreversible — commissions are marked as paid.",
|
|
96
98
|
inputSchema: {
|
|
97
|
-
user_id: z.string().optional().describe("User ID to settle for. Omit to settle ALL unsettled commissions."),
|
|
99
|
+
user_id: z.string().optional().describe("Code owner's User ID to settle for. Omit to settle ALL unsettled discount code commissions."),
|
|
98
100
|
},
|
|
99
101
|
annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: false },
|
|
100
102
|
}, async (params) => {
|
|
101
103
|
await apiPost("/promo-codes/commissions/settle", params.user_id ? { user_id: params.user_id } : {});
|
|
102
104
|
const target = params.user_id ? `user ${params.user_id}` : "all users";
|
|
103
|
-
return { content: [{ type: "text", text: `
|
|
105
|
+
return { content: [{ type: "text", text: `Discount code commissions settled for ${target}.` }] };
|
|
104
106
|
});
|
|
105
|
-
// ─── Settings
|
|
107
|
+
// ─── Platform Settings ──────────────────────────────────
|
|
108
|
+
// Controls global defaults for both discount codes (折扣码) and referral codes (拉新码).
|
|
106
109
|
server.registerTool("bypass_get_promo_settings", {
|
|
107
|
-
title: "Get
|
|
108
|
-
description: "Get
|
|
110
|
+
title: "Get Platform Settings",
|
|
111
|
+
description: "Get all platform settings. Includes: discount code (折扣码) global on/off toggle, discount/commission percentages; referral code (拉新码) discount/commission percentages and validity period in months.",
|
|
109
112
|
inputSchema: {},
|
|
110
113
|
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
111
114
|
}, async () => {
|
|
@@ -113,16 +116,20 @@ export function registerPromoTools(server) {
|
|
|
113
116
|
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
114
117
|
});
|
|
115
118
|
server.registerTool("bypass_update_promo_settings", {
|
|
116
|
-
title: "Update
|
|
117
|
-
description: "Update
|
|
119
|
+
title: "Update Platform Settings",
|
|
120
|
+
description: "Update platform settings for both discount codes (折扣码) and referral codes (拉新码). Only pass the fields you want to change.",
|
|
118
121
|
inputSchema: {
|
|
119
|
-
|
|
120
|
-
|
|
122
|
+
promo_code_enabled: z.boolean().optional().describe("Enable or disable the discount code (折扣码) system globally"),
|
|
123
|
+
discount_percent: z.number().int().min(0).max(100).optional().describe("Global discount code (折扣码) discount percentage for buyers"),
|
|
124
|
+
commission_percent: z.number().int().min(0).max(100).optional().describe("Global discount code (折扣码) commission percentage for code owners"),
|
|
125
|
+
referral_discount_percent: z.number().int().min(0).max(100).optional().describe("Global referral code (拉新码) discount percentage for referred users"),
|
|
126
|
+
referral_commission_percent: z.number().int().min(0).max(100).optional().describe("Global referral code (拉新码) commission percentage for referrers"),
|
|
127
|
+
referral_validity_months: z.number().int().min(1).max(24).optional().describe("How many months the referral (拉新) relationship stays active after registration (1-24)"),
|
|
121
128
|
},
|
|
122
129
|
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
123
130
|
}, async (params) => {
|
|
124
131
|
await apiPatch("/settings", params);
|
|
125
|
-
return { content: [{ type: "text", text: `
|
|
132
|
+
return { content: [{ type: "text", text: `Platform settings updated.` }] };
|
|
126
133
|
});
|
|
127
134
|
}
|
|
128
135
|
//# sourceMappingURL=promo.js.map
|
package/dist/tools/promo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promo.js","sourceRoot":"","sources":["../../src/tools/promo.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE1E,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,
|
|
1
|
+
{"version":3,"file":"promo.js","sourceRoot":"","sources":["../../src/tools/promo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { apiGet, apiPost, apiPatch } from "../services/api.js";
|
|
3
|
+
export function registerReferralTools(server) {
|
|
4
|
+
// ─── Referral Codes (拉新码) ────────────────────────
|
|
5
|
+
// Referral codes are auto-generated for every user on first login.
|
|
6
|
+
// Embedded in referral links (e.g., https://airbypass.com/?ref=CODE).
|
|
7
|
+
// New users who register through the link get auto-applied discounts during a validity period.
|
|
8
|
+
// The referrer earns commission on purchases made by referred users.
|
|
9
|
+
server.registerTool("bypass_list_referral_codes", {
|
|
10
|
+
title: "List Referral Codes",
|
|
11
|
+
description: "List referral codes (拉新码). These are auto-generated for every user and embedded in referral links. When a new user registers through the link, discounts are auto-applied (no manual code entry needed) within a validity period. Returns code, owner info, status, and per-code discount/commission overrides.",
|
|
12
|
+
inputSchema: {
|
|
13
|
+
search: z.string().optional().describe("Search by referral code or user email"),
|
|
14
|
+
limit: z.number().int().min(1).max(100).default(20).describe("Max results"),
|
|
15
|
+
offset: z.number().int().min(0).default(0).describe("Pagination offset"),
|
|
16
|
+
},
|
|
17
|
+
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
18
|
+
}, async (params) => {
|
|
19
|
+
const qs = new URLSearchParams();
|
|
20
|
+
if (params.search)
|
|
21
|
+
qs.set("search", params.search);
|
|
22
|
+
qs.set("limit", String(params.limit));
|
|
23
|
+
qs.set("offset", String(params.offset));
|
|
24
|
+
const data = await apiGet(`/referral-codes?${qs}`);
|
|
25
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
26
|
+
});
|
|
27
|
+
server.registerTool("bypass_get_referral_code", {
|
|
28
|
+
title: "Get Referral Code",
|
|
29
|
+
description: "Get a referral code (拉新码) by its numeric ID. Includes owner info and per-code discount/commission overrides.",
|
|
30
|
+
inputSchema: { id: z.number().int().describe("Referral code ID") },
|
|
31
|
+
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
32
|
+
}, async (params) => {
|
|
33
|
+
const data = await apiGet(`/referral-codes/${params.id}`);
|
|
34
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
35
|
+
});
|
|
36
|
+
server.registerTool("bypass_update_referral_code", {
|
|
37
|
+
title: "Update Referral Code",
|
|
38
|
+
description: "Update a referral code's (拉新码) status and/or per-code discount/commission overrides. Per-code overrides take priority over global defaults. Set custom_discount_percent or custom_commission_percent to null to clear the override and fall back to global defaults.",
|
|
39
|
+
inputSchema: {
|
|
40
|
+
id: z.number().int().describe("Referral code ID"),
|
|
41
|
+
status: z.enum(["active", "disabled"]).optional().describe("New status"),
|
|
42
|
+
custom_discount_percent: z.number().int().min(0).max(100).nullable().optional().describe("Per-code discount percent for referred users. null clears override to use global default."),
|
|
43
|
+
custom_commission_percent: z.number().int().min(0).max(100).nullable().optional().describe("Per-code commission percent for referrer. null clears override to use global default."),
|
|
44
|
+
},
|
|
45
|
+
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
46
|
+
}, async (params) => {
|
|
47
|
+
const payload = {};
|
|
48
|
+
if (params.status !== undefined)
|
|
49
|
+
payload.status = params.status;
|
|
50
|
+
if (params.custom_discount_percent !== undefined)
|
|
51
|
+
payload.custom_discount_percent = params.custom_discount_percent;
|
|
52
|
+
if (params.custom_commission_percent !== undefined)
|
|
53
|
+
payload.custom_commission_percent = params.custom_commission_percent;
|
|
54
|
+
await apiPatch(`/referral-codes/${params.id}`, payload);
|
|
55
|
+
return { content: [{ type: "text", text: `Referral code ${params.id} updated.` }] };
|
|
56
|
+
});
|
|
57
|
+
// ─── Referral Relationships (拉新关系) ─────────────
|
|
58
|
+
server.registerTool("bypass_list_referrals", {
|
|
59
|
+
title: "List Referral Relationships",
|
|
60
|
+
description: "List referral relationships (拉新关系). Each record represents a 'referrer invited new-user' link created when a new user registers through a referral link. Shows referrer, referred user, registration date, expiration date, and active/expired status. Also returns aggregate stats (total, active, expired counts).",
|
|
61
|
+
inputSchema: {
|
|
62
|
+
search: z.string().optional().describe("Search by referrer or referred user email"),
|
|
63
|
+
limit: z.number().int().min(1).max(100).default(20).describe("Max results"),
|
|
64
|
+
offset: z.number().int().min(0).default(0).describe("Pagination offset"),
|
|
65
|
+
},
|
|
66
|
+
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
67
|
+
}, async (params) => {
|
|
68
|
+
const qs = new URLSearchParams();
|
|
69
|
+
if (params.search)
|
|
70
|
+
qs.set("search", params.search);
|
|
71
|
+
qs.set("limit", String(params.limit));
|
|
72
|
+
qs.set("offset", String(params.offset));
|
|
73
|
+
const data = await apiGet(`/referrals?${qs}`);
|
|
74
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
75
|
+
});
|
|
76
|
+
// ─── Referral Commissions (拉新佣金) ────────────────
|
|
77
|
+
server.registerTool("bypass_list_referral_commissions", {
|
|
78
|
+
title: "List Referral Commissions",
|
|
79
|
+
description: "List referral (拉新) commission records. Generated when a referred user purchases a course within the referral validity period. Shows referrer, buyer, order, course, original/discount/commission amounts, and settlement status.",
|
|
80
|
+
inputSchema: {
|
|
81
|
+
search: z.string().optional().describe("Search by referrer or buyer email"),
|
|
82
|
+
limit: z.number().int().min(1).max(100).default(20).describe("Max results"),
|
|
83
|
+
offset: z.number().int().min(0).default(0).describe("Pagination offset"),
|
|
84
|
+
},
|
|
85
|
+
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
86
|
+
}, async (params) => {
|
|
87
|
+
const qs = new URLSearchParams();
|
|
88
|
+
if (params.search)
|
|
89
|
+
qs.set("search", params.search);
|
|
90
|
+
qs.set("limit", String(params.limit));
|
|
91
|
+
qs.set("offset", String(params.offset));
|
|
92
|
+
const data = await apiGet(`/referrals/commissions?${qs}`);
|
|
93
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
94
|
+
});
|
|
95
|
+
server.registerTool("bypass_settle_referral_commissions", {
|
|
96
|
+
title: "Settle Referral Commissions",
|
|
97
|
+
description: "Mark referral (拉新) commissions as settled (paid out). Pass user_id to settle for one referrer, or omit to settle all. This is irreversible — commissions are marked as paid.",
|
|
98
|
+
inputSchema: {
|
|
99
|
+
user_id: z.string().optional().describe("Referrer user ID to settle for. Omit to settle ALL unsettled referral commissions."),
|
|
100
|
+
},
|
|
101
|
+
annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: false },
|
|
102
|
+
}, async (params) => {
|
|
103
|
+
await apiPost("/referrals/commissions", params.user_id ? { user_id: params.user_id } : {});
|
|
104
|
+
const target = params.user_id ? `referrer ${params.user_id}` : "all referrers";
|
|
105
|
+
return { content: [{ type: "text", text: `Referral commissions settled for ${target}.` }] };
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=referral.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"referral.js","sourceRoot":"","sources":["../../src/tools/referral.ts"],"names":[],"mappings":"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"}
|