@serpstat/serpstat-mcp-server 1.0.6 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +77 -27
  3. package/dist/handlers/backlinks_tools.d.ts.map +1 -1
  4. package/dist/handlers/backlinks_tools.js +0 -245
  5. package/dist/handlers/backlinks_tools.js.map +1 -1
  6. package/dist/handlers/credits_tools.d.ts +19 -0
  7. package/dist/handlers/credits_tools.d.ts.map +1 -0
  8. package/dist/handlers/credits_tools.js +79 -0
  9. package/dist/handlers/credits_tools.js.map +1 -0
  10. package/dist/handlers/project_tools.d.ts +27 -0
  11. package/dist/handlers/project_tools.d.ts.map +1 -0
  12. package/dist/handlers/project_tools.js +167 -0
  13. package/dist/handlers/project_tools.js.map +1 -0
  14. package/dist/handlers/rank_tracking_tools.d.ts +43 -0
  15. package/dist/handlers/rank_tracking_tools.d.ts.map +1 -0
  16. package/dist/handlers/rank_tracking_tools.js +335 -0
  17. package/dist/handlers/rank_tracking_tools.js.map +1 -0
  18. package/dist/server.d.ts.map +1 -1
  19. package/dist/server.js +14 -1
  20. package/dist/server.js.map +1 -1
  21. package/dist/services/credits_service.d.ts +7 -0
  22. package/dist/services/credits_service.d.ts.map +1 -0
  23. package/dist/services/credits_service.js +45 -0
  24. package/dist/services/credits_service.js.map +1 -0
  25. package/dist/services/project_service.d.ts +9 -0
  26. package/dist/services/project_service.d.ts.map +1 -0
  27. package/dist/services/project_service.js +59 -0
  28. package/dist/services/project_service.js.map +1 -0
  29. package/dist/services/rank_tracking_service.d.ts +11 -0
  30. package/dist/services/rank_tracking_service.d.ts.map +1 -0
  31. package/dist/services/rank_tracking_service.js +112 -0
  32. package/dist/services/rank_tracking_service.js.map +1 -0
  33. package/dist/types/serpstat.d.ts +142 -0
  34. package/dist/types/serpstat.d.ts.map +1 -1
  35. package/dist/utils/constants.d.ts +12 -0
  36. package/dist/utils/constants.d.ts.map +1 -1
  37. package/dist/utils/constants.js +13 -1
  38. package/dist/utils/constants.js.map +1 -1
  39. package/dist/utils/validation.d.ts +150 -0
  40. package/dist/utils/validation.d.ts.map +1 -1
  41. package/dist/utils/validation.js +86 -1
  42. package/dist/utils/validation.js.map +1 -1
  43. package/package.json +1 -1
@@ -0,0 +1,335 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetRtProjectUrlSerpHistoryHandler = exports.GetRtProjectKeywordSerpHistoryHandler = exports.GetRtProjectRegionsListHandler = exports.GetRtProjectStatusHandler = exports.GetRtProjectsListHandler = void 0;
4
+ const base_js_1 = require("./base.js");
5
+ const rank_tracking_service_js_1 = require("../services/rank_tracking_service.js");
6
+ const validation_js_1 = require("../utils/validation.js");
7
+ const config_js_1 = require("../utils/config.js");
8
+ const zod_1 = require("zod");
9
+ const constants_js_1 = require("../utils/constants.js");
10
+ class GetRtProjectsListHandler extends base_js_1.BaseHandler {
11
+ rankTrackingService;
12
+ constructor() {
13
+ super();
14
+ const config = (0, config_js_1.loadConfig)();
15
+ this.rankTrackingService = new rank_tracking_service_js_1.RankTrackingService(config);
16
+ }
17
+ getName() {
18
+ return 'get_rt_projects_list';
19
+ }
20
+ getDescription() {
21
+ return 'Get a list of rank tracker projects including project ID, name, domain, creation date, and tracking status. This method does not consume API credits.';
22
+ }
23
+ getInputSchema() {
24
+ return {
25
+ type: "object",
26
+ properties: {
27
+ page: {
28
+ type: "number",
29
+ minimum: constants_js_1.MIN_PAGE,
30
+ default: 1,
31
+ description: "Page number in the projects list"
32
+ },
33
+ pageSize: {
34
+ type: "number",
35
+ enum: constants_js_1.RT_ALLOWED_PAGE_SIZES,
36
+ default: constants_js_1.DEFAULT_RT_PAGE_SIZE,
37
+ description: `Number of results per page. Allowed values: ${constants_js_1.RT_ALLOWED_PAGE_SIZES.join(', ')}`
38
+ }
39
+ },
40
+ additionalProperties: false
41
+ };
42
+ }
43
+ async handle(call) {
44
+ try {
45
+ const params = validation_js_1.getRtProjectsListSchema.parse(call.arguments);
46
+ const result = await this.rankTrackingService.getRtProjectsList(params);
47
+ return this.createSuccessResponse(result);
48
+ }
49
+ catch (error) {
50
+ if (error instanceof zod_1.z.ZodError) {
51
+ return this.createErrorResponse(new Error(`Invalid parameters: ${error.errors.map(e => `${e.path.join('.')}: ${e.message}`).join(', ')}`));
52
+ }
53
+ return this.createErrorResponse(error);
54
+ }
55
+ }
56
+ }
57
+ exports.GetRtProjectsListHandler = GetRtProjectsListHandler;
58
+ class GetRtProjectStatusHandler extends base_js_1.BaseHandler {
59
+ rankTrackingService;
60
+ constructor() {
61
+ super();
62
+ const config = (0, config_js_1.loadConfig)();
63
+ this.rankTrackingService = new rank_tracking_service_js_1.RankTrackingService(config);
64
+ }
65
+ getName() {
66
+ return 'get_rt_project_status';
67
+ }
68
+ getDescription() {
69
+ return 'Get the current status of position updates (parsing) for a rank tracker project and region. Use this to check if data is ready before requesting results. This method does not consume API credits.';
70
+ }
71
+ getInputSchema() {
72
+ return {
73
+ type: "object",
74
+ properties: {
75
+ projectId: {
76
+ type: "number",
77
+ minimum: constants_js_1.MIN_RT_PROJECT_ID,
78
+ description: "Project identifier"
79
+ },
80
+ regionId: {
81
+ type: "number",
82
+ minimum: constants_js_1.MIN_RT_REGION_ID,
83
+ description: "Search region ID (see https://docs.google.com/spreadsheets/d/1LUDtm-L1qWMVpmWuN-nvDyYFfQtfiXUh5LIHE8sjs0k/edit?gid=75443986#gid=75443986)"
84
+ }
85
+ },
86
+ required: ["projectId", "regionId"],
87
+ additionalProperties: false
88
+ };
89
+ }
90
+ async handle(call) {
91
+ try {
92
+ const params = validation_js_1.getRtProjectStatusSchema.parse(call.arguments);
93
+ const result = await this.rankTrackingService.getRtProjectStatus(params);
94
+ return this.createSuccessResponse(result);
95
+ }
96
+ catch (error) {
97
+ if (error instanceof zod_1.z.ZodError) {
98
+ return this.createErrorResponse(new Error(`Invalid parameters: ${error.errors.map(e => `${e.path.join('.')}: ${e.message}`).join(', ')}`));
99
+ }
100
+ return this.createErrorResponse(error);
101
+ }
102
+ }
103
+ }
104
+ exports.GetRtProjectStatusHandler = GetRtProjectStatusHandler;
105
+ class GetRtProjectRegionsListHandler extends base_js_1.BaseHandler {
106
+ rankTrackingService;
107
+ constructor() {
108
+ super();
109
+ const config = (0, config_js_1.loadConfig)();
110
+ this.rankTrackingService = new rank_tracking_service_js_1.RankTrackingService(config);
111
+ }
112
+ getName() {
113
+ return 'get_rt_project_regions_list';
114
+ }
115
+ getDescription() {
116
+ return 'Get the list of regions configured for a rank tracker project, including region ID, status (active/inactive), SERP type (organic/paid), device type (desktop/mobile), search engine, and location details. This method does not consume API credits.';
117
+ }
118
+ getInputSchema() {
119
+ return {
120
+ type: "object",
121
+ properties: {
122
+ projectId: {
123
+ type: "number",
124
+ minimum: constants_js_1.MIN_RT_PROJECT_ID,
125
+ description: "Project identifier"
126
+ }
127
+ },
128
+ required: ["projectId"],
129
+ additionalProperties: false
130
+ };
131
+ }
132
+ async handle(call) {
133
+ try {
134
+ const params = validation_js_1.getRtProjectRegionsListSchema.parse(call.arguments);
135
+ const result = await this.rankTrackingService.getRtProjectRegionsList(params);
136
+ return this.createSuccessResponse(result);
137
+ }
138
+ catch (error) {
139
+ if (error instanceof zod_1.z.ZodError) {
140
+ return this.createErrorResponse(new Error(`Invalid parameters: ${error.errors.map(e => `${e.path.join('.')}: ${e.message}`).join(', ')}`));
141
+ }
142
+ return this.createErrorResponse(error);
143
+ }
144
+ }
145
+ }
146
+ exports.GetRtProjectRegionsListHandler = GetRtProjectRegionsListHandler;
147
+ class GetRtProjectKeywordSerpHistoryHandler extends base_js_1.BaseHandler {
148
+ rankTrackingService;
149
+ constructor() {
150
+ super();
151
+ const config = (0, config_js_1.loadConfig)();
152
+ this.rankTrackingService = new rank_tracking_service_js_1.RankTrackingService(config);
153
+ }
154
+ getName() {
155
+ return 'get_rt_project_keyword_serp_history';
156
+ }
157
+ getDescription() {
158
+ return 'Get complete Google top-100 SERP history for tracked keywords in a rank tracker project. Returns full competitor analysis with historical positions, URLs, domains, and search volumes for each date. WARNING: This method returns large datasets (full top-100 for each keyword/date combination). Recommended pageSize: 20-50 for most use cases. Use date filters and keyword filters to reduce response size. Supports keyword tagging for grouping and filtering. This method does not consume API credits.';
159
+ }
160
+ getInputSchema() {
161
+ return {
162
+ type: "object",
163
+ properties: {
164
+ projectId: {
165
+ type: "number",
166
+ minimum: constants_js_1.MIN_RT_PROJECT_ID,
167
+ description: "Project identifier"
168
+ },
169
+ projectRegionId: {
170
+ type: "number",
171
+ minimum: constants_js_1.MIN_RT_REGION_ID,
172
+ description: "Region ID for the project. Required. Get from get_rt_project_regions_list method. Each project can track multiple regions. See region reference: https://docs.google.com/spreadsheets/d/1LUDtm-L1qWMVpmWuN-nvDyYFfQtfiXUh5LIHE8sjs0k/edit?gid=75443986#gid=75443986"
173
+ },
174
+ page: {
175
+ type: "number",
176
+ minimum: constants_js_1.MIN_PAGE,
177
+ default: 1,
178
+ description: "Page number for pagination. Starts at 1."
179
+ },
180
+ pageSize: {
181
+ type: "number",
182
+ enum: constants_js_1.RT_ALLOWED_PAGE_SIZES,
183
+ default: constants_js_1.DEFAULT_RT_PAGE_SIZE,
184
+ description: `Number of keywords per page. Allowed values: ${constants_js_1.RT_ALLOWED_PAGE_SIZES.join(', ')}. RECOMMENDED: Use 20 or 50 to avoid response truncation due to large dataset sizes. Each keyword returns full top-100 SERP for all dates.`
185
+ },
186
+ dateFrom: {
187
+ type: "string",
188
+ pattern: "^\\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$",
189
+ description: "Start date of the period in YYYY-MM-DD format (e.g., '2025-09-01'). Use to filter historical data and reduce response size."
190
+ },
191
+ dateTo: {
192
+ type: "string",
193
+ pattern: "^\\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$",
194
+ description: "End date of the period in YYYY-MM-DD format (e.g., '2025-09-30'). Use to filter historical data and reduce response size."
195
+ },
196
+ sort: {
197
+ type: "string",
198
+ enum: constants_js_1.RT_SERP_HISTORY_SORT_TYPES,
199
+ description: "Sort results by 'keyword' (alphabetically) or 'date' (chronologically). Default is 'date'."
200
+ },
201
+ order: {
202
+ type: "string",
203
+ enum: ["asc", "desc"],
204
+ description: "Sorting order: 'asc' (oldest first) or 'desc' (newest first). Default is 'desc'."
205
+ },
206
+ keywords: {
207
+ type: "array",
208
+ items: {
209
+ type: "string"
210
+ },
211
+ maxItems: constants_js_1.MAX_RT_KEYWORDS_FILTER,
212
+ description: `Filter by specific keywords (max ${constants_js_1.MAX_RT_KEYWORDS_FILTER} keywords)`
213
+ },
214
+ withTags: {
215
+ type: "boolean",
216
+ default: false,
217
+ description: "Include keyword tags in the response. Tags are used to group and categorize keywords in the project. Set to true to receive tag IDs and values for each keyword."
218
+ }
219
+ },
220
+ required: ["projectId", "projectRegionId", "page"],
221
+ additionalProperties: false
222
+ };
223
+ }
224
+ async handle(call) {
225
+ try {
226
+ const params = validation_js_1.getRtProjectKeywordSerpHistorySchema.parse(call.arguments);
227
+ const result = await this.rankTrackingService.getRtProjectKeywordSerpHistory(params);
228
+ return this.createSuccessResponse(result);
229
+ }
230
+ catch (error) {
231
+ if (error instanceof zod_1.z.ZodError) {
232
+ return this.createErrorResponse(new Error(`Invalid parameters: ${error.errors.map(e => `${e.path.join('.')}: ${e.message}`).join(', ')}`));
233
+ }
234
+ return this.createErrorResponse(error);
235
+ }
236
+ }
237
+ }
238
+ exports.GetRtProjectKeywordSerpHistoryHandler = GetRtProjectKeywordSerpHistoryHandler;
239
+ class GetRtProjectUrlSerpHistoryHandler extends base_js_1.BaseHandler {
240
+ rankTrackingService;
241
+ constructor() {
242
+ super();
243
+ const config = (0, config_js_1.loadConfig)();
244
+ this.rankTrackingService = new rank_tracking_service_js_1.RankTrackingService(config);
245
+ }
246
+ getName() {
247
+ return 'get_rt_project_url_serp_history';
248
+ }
249
+ getDescription() {
250
+ return 'Get ranking history showing only YOUR domain\'s positions across all tracked keywords. Unlike get_rt_project_keyword_serp_history (which shows full top-100), this method returns only positions where your specified domain/URL ranks. Perfect for tracking your own performance over time without competitor noise. Returns historical position data, search volumes, and optional keyword tags. This method does not consume API credits.';
251
+ }
252
+ getInputSchema() {
253
+ return {
254
+ type: "object",
255
+ properties: {
256
+ projectId: {
257
+ type: "number",
258
+ minimum: constants_js_1.MIN_RT_PROJECT_ID,
259
+ description: "Rank tracker project ID. Required. Get from get_rt_projects_list method."
260
+ },
261
+ projectRegionId: {
262
+ type: "number",
263
+ minimum: constants_js_1.MIN_RT_REGION_ID,
264
+ description: "Region ID for the project. Required. Get from get_rt_project_regions_list method. Each project can track multiple regions. See region reference: https://docs.google.com/spreadsheets/d/1LUDtm-L1qWMVpmWuN-nvDyYFfQtfiXUh5LIHE8sjs0k/edit?gid=75443986#gid=75443986"
265
+ },
266
+ page: {
267
+ type: "number",
268
+ minimum: constants_js_1.MIN_PAGE,
269
+ default: 1,
270
+ description: "Page number for pagination. Starts at 1."
271
+ },
272
+ pageSize: {
273
+ type: "number",
274
+ enum: constants_js_1.RT_ALLOWED_PAGE_SIZES,
275
+ default: constants_js_1.DEFAULT_RT_PAGE_SIZE,
276
+ description: "Number of keywords per page. Allowed values: 20, 50, 100, 500. Recommended: 100 for most use cases (response is much smaller than get_rt_project_keyword_serp_history since it only shows your domain's positions)."
277
+ },
278
+ dateFrom: {
279
+ type: "string",
280
+ pattern: "^\\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$",
281
+ description: "Start date of the period in YYYY-MM-DD format (e.g., '2025-09-01'). Filters historical data to this date range."
282
+ },
283
+ dateTo: {
284
+ type: "string",
285
+ pattern: "^\\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$",
286
+ description: "End date of the period in YYYY-MM-DD format (e.g., '2025-09-30'). Filters historical data to this date range."
287
+ },
288
+ sort: {
289
+ type: "string",
290
+ enum: constants_js_1.RT_SERP_HISTORY_SORT_TYPES,
291
+ description: "Sort results by 'keyword' (alphabetically) or 'date' (chronologically). Default is 'keyword'."
292
+ },
293
+ order: {
294
+ type: "string",
295
+ enum: ["asc", "desc"],
296
+ description: "Sorting order: 'asc' (oldest first) or 'desc' (newest first). Default is 'desc'."
297
+ },
298
+ keywords: {
299
+ type: "array",
300
+ items: {
301
+ type: "string"
302
+ },
303
+ maxItems: constants_js_1.MAX_RT_KEYWORDS_FILTER,
304
+ description: "Filter results by specific keywords (max 1000 keywords). Returns only data for the specified keywords where your domain ranks."
305
+ },
306
+ withTags: {
307
+ type: "boolean",
308
+ default: false,
309
+ description: "Include keyword tags in the response. Tags are used to group and categorize keywords in the project. Set to true to receive tag IDs and values for each keyword."
310
+ },
311
+ domain: {
312
+ type: "string",
313
+ description: "Domain or URL to track. Accepts: 'domain.com' (tracks all URLs from this domain), 'subdomain.domain.com' (tracks specific subdomain), or full URL 'https://domain.com/page' (tracks specific page). Do NOT include protocol for domain-level tracking."
314
+ }
315
+ },
316
+ required: ["projectId", "projectRegionId", "page"],
317
+ additionalProperties: false
318
+ };
319
+ }
320
+ async handle(call) {
321
+ try {
322
+ const params = validation_js_1.getRtProjectUrlSerpHistorySchema.parse(call.arguments);
323
+ const result = await this.rankTrackingService.getRtProjectUrlSerpHistory(params);
324
+ return this.createSuccessResponse(result);
325
+ }
326
+ catch (error) {
327
+ if (error instanceof zod_1.z.ZodError) {
328
+ return this.createErrorResponse(new Error(`Invalid parameters: ${error.errors.map(e => `${e.path.join('.')}: ${e.message}`).join(', ')}`));
329
+ }
330
+ return this.createErrorResponse(error);
331
+ }
332
+ }
333
+ }
334
+ exports.GetRtProjectUrlSerpHistoryHandler = GetRtProjectUrlSerpHistoryHandler;
335
+ //# sourceMappingURL=rank_tracking_tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rank_tracking_tools.js","sourceRoot":"","sources":["../../src/handlers/rank_tracking_tools.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAYA,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAA2B;;IAoB3C,OAAO,CAAC,aAAa;IAoCrB,OAAO,CAAC,WAAW;IAkCb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAK/B"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAeA,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAA2B;;IAoB3C,OAAO,CAAC,aAAa;IA8CrB,OAAO,CAAC,WAAW;IAkCb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAK/B"}
package/dist/server.js CHANGED
@@ -7,6 +7,9 @@ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
7
7
  const domain_tools_js_1 = require("./handlers/domain_tools.js");
8
8
  const backlinks_tools_js_1 = require("./handlers/backlinks_tools.js");
9
9
  const keyword_tools_js_1 = require("./handlers/keyword_tools.js");
10
+ const project_tools_js_1 = require("./handlers/project_tools.js");
11
+ const credits_tools_js_1 = require("./handlers/credits_tools.js");
12
+ const rank_tracking_tools_js_1 = require("./handlers/rank_tracking_tools.js");
10
13
  const logger_js_1 = require("./utils/logger.js");
11
14
  class SerpstatMCPServer {
12
15
  server;
@@ -14,7 +17,7 @@ class SerpstatMCPServer {
14
17
  constructor() {
15
18
  this.server = new index_js_1.Server({
16
19
  name: 'serpstat-mcp-server',
17
- version: '1.0.6',
20
+ version: '1.0.8',
18
21
  }, {
19
22
  capabilities: {
20
23
  tools: {},
@@ -51,6 +54,16 @@ class SerpstatMCPServer {
51
54
  new keyword_tools_js_1.GetKeywordTopUrlsHandler(),
52
55
  new keyword_tools_js_1.GetKeywordCompetitorsHandler(),
53
56
  new keyword_tools_js_1.GetKeywordTopHandler(),
57
+ new project_tools_js_1.CreateProjectHandler(),
58
+ new project_tools_js_1.DeleteProjectHandler(),
59
+ new project_tools_js_1.ListProjectsHandler(),
60
+ new credits_tools_js_1.GetAuditStatsHandler(),
61
+ new credits_tools_js_1.GetCreditsStatsHandler(),
62
+ new rank_tracking_tools_js_1.GetRtProjectsListHandler(),
63
+ new rank_tracking_tools_js_1.GetRtProjectStatusHandler(),
64
+ new rank_tracking_tools_js_1.GetRtProjectRegionsListHandler(),
65
+ new rank_tracking_tools_js_1.GetRtProjectKeywordSerpHistoryHandler(),
66
+ new rank_tracking_tools_js_1.GetRtProjectUrlSerpHistoryHandler(),
54
67
  ];
55
68
  for (const handler of handlers) {
56
69
  this.handlers.set(handler.getName(), handler);
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";;;AAAA,wEAAmE;AACnE,wEAAiF;AACjF,iEAG4C;AAE5C,gEAAuL;AACvL,sEAAsV;AACtV,kEAA0P;AAC1P,kEAA8G;AAC9G,kEAA2F;AAC3F,8EAAkN;AAClN,iDAA2C;AAE3C,MAAa,iBAAiB;IAClB,MAAM,CAAS;IACf,QAAQ,CAA2B;IAE3C;QACI,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAM,CACpB;YACI,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,OAAO;SACnB,EACD;YACI,YAAY,EAAE;gBACV,KAAK,EAAE,EAAE;aACZ;SACJ,CACJ,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC;IAEO,aAAa;QACjB,MAAM,QAAQ,GAAG;YACb,IAAI,oCAAkB,EAAE;YACxB,IAAI,oCAAkB,EAAE;YACxB,IAAI,uCAAqB,EAAE;YAC3B,IAAI,mCAAiB,EAAE;YACvB,IAAI,4CAAuB,EAAE;YAC7B,IAAI,sCAAiB,EAAE;YACvB,IAAI,8CAAyB,EAAE;YAC/B,IAAI,+CAA0B,EAAE;YAChC,IAAI,4CAAuB,EAAE;YAC7B,IAAI,yCAAoB,EAAE;YAC1B,IAAI,kDAA6B,EAAE;YACnC,IAAI,oDAA+B,EAAE;YACrC,IAAI,6CAAwB,EAAE;YAC9B,IAAI,mDAA8B,EAAE;YACpC,IAAI,8CAAyB,EAAE;YAC/B,IAAI,2CAAyB,EAAE;YAC/B,IAAI,8CAA4B,EAAE;YAClC,IAAI,qCAAkB,EAAE;YACxB,IAAI,4CAAyB,EAAE;YAC/B,IAAI,yCAAsB,EAAE;YAC5B,IAAI,+CAA4B,EAAE;YAClC,IAAI,2CAAwB,EAAE;YAC9B,IAAI,2CAAwB,EAAE;YAC9B,IAAI,+CAA4B,EAAE;YAClC,IAAI,uCAAoB,EAAE;YAC1B,IAAI,uCAAoB,EAAE;YAC1B,IAAI,uCAAoB,EAAE;YAC1B,IAAI,sCAAmB,EAAE;YACzB,IAAI,uCAAoB,EAAE;YAC1B,IAAI,yCAAsB,EAAE;YAC5B,IAAI,iDAAwB,EAAE;YAC9B,IAAI,kDAAyB,EAAE;YAC/B,IAAI,uDAA8B,EAAE;YACpC,IAAI,8DAAqC,EAAE;YAC3C,IAAI,0DAAiC,EAAE;SAC1C,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;QAED,kBAAM,CAAC,IAAI,CAAC,cAAc,QAAQ,CAAC,MAAM,gBAAgB,CAAC,CAAC;IAC/D,CAAC;IAEO,WAAW;QACf,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,iCAAsB,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC7D,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE;gBACvB,WAAW,EAAE,OAAO,CAAC,cAAc,EAAE;gBACrC,WAAW,EAAE,OAAO,CAAC,cAAc,EAAE;aACxC,CAAC,CAAC,CAAC;YAEJ,kBAAM,CAAC,KAAK,CAAC,WAAW,KAAK,CAAC,MAAM,kBAAkB,CAAC,CAAC;YACxD,OAAO,EAAE,KAAK,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,gCAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACnE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YAEjD,kBAAM,CAAC,IAAI,CAAC,uBAAuB,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEhE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;YAC7C,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;YAGrE,kBAAM,CAAC,IAAI,CAAC,wBAAwB,IAAI,EAAE,EAAE;gBACxC,OAAO,EAAE,CAAC,MAAM,CAAC,OAAO;gBACxB,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM;aACpD,CAAC,CAAC;YAEH,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,KAAK;QACP,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACrC,kBAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IACtE,CAAC;CACJ;AA3GD,8CA2GC"}
@@ -0,0 +1,7 @@
1
+ import { BaseService } from './base.js';
2
+ import { GetAuditStatsResponse, GetCreditsStatsResponse } from '../types/serpstat.js';
3
+ export declare class CreditsService extends BaseService {
4
+ getAuditStats(): Promise<GetAuditStatsResponse>;
5
+ getCreditsStats(): Promise<GetCreditsStatsResponse>;
6
+ }
7
+ //# sourceMappingURL=credits_service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credits_service.d.ts","sourceRoot":"","sources":["../../src/services/credits_service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAGtF,qBAAa,cAAe,SAAQ,WAAW;IACrC,aAAa,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAwB/C,eAAe,IAAI,OAAO,CAAC,uBAAuB,CAAC;CAuB5D"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CreditsService = void 0;
4
+ const base_js_1 = require("./base.js");
5
+ const logger_js_1 = require("../utils/logger.js");
6
+ class CreditsService extends base_js_1.BaseService {
7
+ async getAuditStats() {
8
+ logger_js_1.logger.info('Getting audit credits statistics');
9
+ const request = {
10
+ id: `audit_stats_${Date.now()}`,
11
+ method: 'SerpstatLimitsProcedure.getAuditStats',
12
+ params: {},
13
+ };
14
+ const response = await this.makeRequest(request);
15
+ if (!response.result) {
16
+ throw new Error('No result data received from Serpstat API');
17
+ }
18
+ logger_js_1.logger.info('Successfully retrieved audit stats', {
19
+ total: response.result.data.total,
20
+ used: response.result.data.used,
21
+ left: response.result.data.left
22
+ });
23
+ return response.result;
24
+ }
25
+ async getCreditsStats() {
26
+ logger_js_1.logger.info('Getting API credits statistics');
27
+ const request = {
28
+ id: `credits_stats_${Date.now()}`,
29
+ method: 'SerpstatLimitsProcedure.getStats',
30
+ params: {},
31
+ };
32
+ const response = await this.makeRequest(request);
33
+ if (!response.result) {
34
+ throw new Error('No result data received from Serpstat API');
35
+ }
36
+ logger_js_1.logger.info('Successfully retrieved credits stats', {
37
+ max_lines: response.result.data.max_lines,
38
+ used_lines: response.result.data.used_lines,
39
+ left_lines: response.result.data.left_lines
40
+ });
41
+ return response.result;
42
+ }
43
+ }
44
+ exports.CreditsService = CreditsService;
45
+ //# sourceMappingURL=credits_service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credits_service.js","sourceRoot":"","sources":["../../src/services/credits_service.ts"],"names":[],"mappings":";;;AAAA,uCAAwC;AAGxC,kDAA4C;AAE5C,MAAa,cAAe,SAAQ,qBAAW;IAC3C,KAAK,CAAC,aAAa;QACf,kBAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAEhD,MAAM,OAAO,GAAoB;YAC7B,EAAE,EAAE,eAAe,IAAI,CAAC,GAAG,EAAE,EAAE;YAC/B,MAAM,EAAE,uCAAuC;YAC/C,MAAM,EAAE,EAAE;SACb,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAwB,OAAO,CAAC,CAAC;QAExE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACjE,CAAC;QAED,kBAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE;YAC9C,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK;YACjC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI;YAC/B,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI;SAClC,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,eAAe;QACjB,kBAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAE9C,MAAM,OAAO,GAAoB;YAC7B,EAAE,EAAE,iBAAiB,IAAI,CAAC,GAAG,EAAE,EAAE;YACjC,MAAM,EAAE,kCAAkC;YAC1C,MAAM,EAAE,EAAE;SACb,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAA0B,OAAO,CAAC,CAAC;QAE1E,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACjE,CAAC;QAED,kBAAM,CAAC,IAAI,CAAC,sCAAsC,EAAE;YAChD,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS;YACzC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU;YAC3C,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU;SAC9C,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC,MAAM,CAAC;IAC3B,CAAC;CACJ;AAhDD,wCAgDC"}
@@ -0,0 +1,9 @@
1
+ import { BaseService } from './base.js';
2
+ import { CreateProjectParams, DeleteProjectParams, GetProjectsParams } from '../utils/validation.js';
3
+ import { CreateProjectResponse, GetProjectsResponse } from '../types/serpstat.js';
4
+ export declare class ProjectService extends BaseService {
5
+ createProject(params: CreateProjectParams): Promise<CreateProjectResponse>;
6
+ deleteProject(params: DeleteProjectParams): Promise<boolean>;
7
+ getProjects(params: GetProjectsParams): Promise<GetProjectsResponse>;
8
+ }
9
+ //# sourceMappingURL=project_service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project_service.d.ts","sourceRoot":"","sources":["../../src/services/project_service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACrG,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAGlF,qBAAa,cAAe,SAAQ,WAAW;IACrC,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAsB1E,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IAuB5D,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAsB7E"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProjectService = void 0;
4
+ const base_js_1 = require("./base.js");
5
+ const logger_js_1 = require("../utils/logger.js");
6
+ class ProjectService extends base_js_1.BaseService {
7
+ async createProject(params) {
8
+ logger_js_1.logger.info('Creating project', { domain: params.domain, name: params.name });
9
+ const request = {
10
+ id: `create_project_${Date.now()}`,
11
+ method: 'ProjectProcedure.createProject',
12
+ params,
13
+ };
14
+ const response = await this.makeRequest(request);
15
+ if (!response.result) {
16
+ throw new Error('No result data received from Serpstat API');
17
+ }
18
+ logger_js_1.logger.info('Successfully created project', {
19
+ project_id: response.result.project_id
20
+ });
21
+ return response.result;
22
+ }
23
+ async deleteProject(params) {
24
+ logger_js_1.logger.info('Deleting project', { project_id: params.project_id });
25
+ const request = {
26
+ id: `delete_project_${Date.now()}`,
27
+ method: 'ProjectProcedure.deleteProject',
28
+ params,
29
+ };
30
+ const response = await this.makeRequest(request);
31
+ if (response.result === undefined) {
32
+ throw new Error('No result data received from Serpstat API');
33
+ }
34
+ logger_js_1.logger.info('Successfully deleted project', {
35
+ project_id: params.project_id,
36
+ success: response.result
37
+ });
38
+ return response.result;
39
+ }
40
+ async getProjects(params) {
41
+ logger_js_1.logger.info('Getting projects list', { page: params.page, size: params.size });
42
+ const request = {
43
+ id: `get_projects_${Date.now()}`,
44
+ method: 'ProjectProcedure.getProjects',
45
+ params,
46
+ };
47
+ const response = await this.makeRequest(request);
48
+ if (!response.result) {
49
+ throw new Error('No result data received from Serpstat API');
50
+ }
51
+ logger_js_1.logger.info('Successfully retrieved projects', {
52
+ projectsCount: response.result.data.length,
53
+ total: response.result.summary_info.total
54
+ });
55
+ return response.result;
56
+ }
57
+ }
58
+ exports.ProjectService = ProjectService;
59
+ //# sourceMappingURL=project_service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project_service.js","sourceRoot":"","sources":["../../src/services/project_service.ts"],"names":[],"mappings":";;;AAAA,uCAAwC;AAIxC,kDAA4C;AAE5C,MAAa,cAAe,SAAQ,qBAAW;IAC3C,KAAK,CAAC,aAAa,CAAC,MAA2B;QAC3C,kBAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAE9E,MAAM,OAAO,GAAoB;YAC7B,EAAE,EAAE,kBAAkB,IAAI,CAAC,GAAG,EAAE,EAAE;YAClC,MAAM,EAAE,gCAAgC;YACxC,MAAM;SACT,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAwB,OAAO,CAAC,CAAC;QAExE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACjE,CAAC;QAED,kBAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE;YACxC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU;SACzC,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAA2B;QAC3C,kBAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAEnE,MAAM,OAAO,GAAoB;YAC7B,EAAE,EAAE,kBAAkB,IAAI,CAAC,GAAG,EAAE,EAAE;YAClC,MAAM,EAAE,gCAAgC;YACxC,MAAM;SACT,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAU,OAAO,CAAC,CAAC;QAE1D,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACjE,CAAC;QAED,kBAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE;YACxC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,OAAO,EAAE,QAAQ,CAAC,MAAM;SAC3B,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAyB;QACvC,kBAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAE/E,MAAM,OAAO,GAAoB;YAC7B,EAAE,EAAE,gBAAgB,IAAI,CAAC,GAAG,EAAE,EAAE;YAChC,MAAM,EAAE,8BAA8B;YACtC,MAAM;SACT,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAsB,OAAO,CAAC,CAAC;QAEtE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACjE,CAAC;QAED,kBAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE;YAC3C,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM;YAC1C,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK;SAC5C,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC,MAAM,CAAC;IAC3B,CAAC;CACJ;AApED,wCAoEC"}
@@ -0,0 +1,11 @@
1
+ import { BaseService } from './base.js';
2
+ import { GetRtProjectsListParams, GetRtProjectStatusParams, GetRtProjectRegionsListParams, GetRtProjectKeywordSerpHistoryParams, GetRtProjectUrlSerpHistoryParams } from '../utils/validation.js';
3
+ import { GetRtProjectsListResponse, GetRtProjectStatusResponse, GetRtProjectRegionsListResponse, GetRtProjectKeywordSerpHistoryResponse, GetRtProjectUrlSerpHistoryResponse } from '../types/serpstat.js';
4
+ export declare class RankTrackingService extends BaseService {
5
+ getRtProjectsList(params: GetRtProjectsListParams): Promise<GetRtProjectsListResponse>;
6
+ getRtProjectStatus(params: GetRtProjectStatusParams): Promise<GetRtProjectStatusResponse>;
7
+ getRtProjectRegionsList(params: GetRtProjectRegionsListParams): Promise<GetRtProjectRegionsListResponse>;
8
+ getRtProjectKeywordSerpHistory(params: GetRtProjectKeywordSerpHistoryParams): Promise<GetRtProjectKeywordSerpHistoryResponse>;
9
+ getRtProjectUrlSerpHistory(params: GetRtProjectUrlSerpHistoryParams): Promise<GetRtProjectUrlSerpHistoryResponse>;
10
+ }
11
+ //# sourceMappingURL=rank_tracking_service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rank_tracking_service.d.ts","sourceRoot":"","sources":["../../src/services/rank_tracking_service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,6BAA6B,EAAE,oCAAoC,EAAE,gCAAgC,EAAE,MAAM,wBAAwB,CAAC;AAClM,OAAO,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,+BAA+B,EAAE,sCAAsC,EAAE,kCAAkC,EAAE,MAAM,sBAAsB,CAAC;AAG1M,qBAAa,mBAAoB,SAAQ,WAAW;IAC1C,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAuBtF,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IA2BzF,uBAAuB,CAAC,MAAM,EAAE,6BAA6B,GAAG,OAAO,CAAC,+BAA+B,CAAC;IAuBxG,8BAA8B,CAAC,MAAM,EAAE,oCAAoC,GAAG,OAAO,CAAC,sCAAsC,CAAC;IA6B7H,0BAA0B,CAAC,MAAM,EAAE,gCAAgC,GAAG,OAAO,CAAC,kCAAkC,CAAC;CA8B1H"}