socialcrawl-mcp 1.0.2 → 1.2.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 +20 -9
- package/dist/__tests__/check-balance.test.d.ts +1 -0
- package/dist/__tests__/check-balance.test.js +55 -0
- package/dist/__tests__/check-balance.test.js.map +1 -0
- package/dist/__tests__/client.test.js +93 -0
- package/dist/__tests__/client.test.js.map +1 -1
- package/dist/__tests__/data-integrity.test.js +94 -2
- package/dist/__tests__/data-integrity.test.js.map +1 -1
- package/dist/__tests__/preflight.test.js +45 -1
- package/dist/__tests__/preflight.test.js.map +1 -1
- package/dist/client.d.ts +7 -0
- package/dist/client.js +27 -10
- package/dist/client.js.map +1 -1
- package/dist/data/docs.d.ts +3 -0
- package/dist/data/docs.js +253 -2534
- package/dist/data/docs.js.map +1 -1
- package/dist/data/endpoints.d.ts +6 -0
- package/dist/data/endpoints.js +581 -79
- package/dist/data/endpoints.js.map +1 -1
- package/dist/data/platforms.js +2 -2
- package/dist/index.js +18 -2
- package/dist/index.js.map +1 -1
- package/dist/schemas/tools.d.ts +4 -0
- package/dist/schemas/tools.js +7 -1
- package/dist/schemas/tools.js.map +1 -1
- package/dist/tools/check-balance.d.ts +5 -0
- package/dist/tools/check-balance.js +25 -0
- package/dist/tools/check-balance.js.map +1 -0
- package/dist/tools/list-endpoints.js +38 -7
- package/dist/tools/list-endpoints.js.map +1 -1
- package/dist/tools/request.d.ts +1 -0
- package/dist/tools/request.js +16 -5
- package/dist/tools/request.js.map +1 -1
- package/dist/types.d.ts +17 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
[](https://www.npmjs.com/package/socialcrawl-mcp)
|
|
8
8
|
[](https://registry.modelcontextprotocol.io)
|
|
9
9
|
[](https://socialcrawl.dev)
|
|
10
|
-
[](https://socialcrawl.dev/docs)
|
|
11
11
|
[](LICENSE)
|
|
12
12
|
|
|
13
13
|
[Overview](#overview) | [Installation](#installation) | [Setup](#setup) | [Usage](#usage) | [Tools](#available-tools) | [Platforms](#supported-platforms)
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
## Overview
|
|
20
20
|
|
|
21
|
-
`socialcrawl-mcp` is an [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server that connects AI agents to the [SocialCrawl API](https://socialcrawl.dev) — a unified social media data API covering 21 platforms and
|
|
21
|
+
`socialcrawl-mcp` is an [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server that connects AI agents to the [SocialCrawl API](https://socialcrawl.dev) — a unified social media data API covering 21 platforms and 108 endpoints.
|
|
22
22
|
|
|
23
23
|
Retrieve profiles, posts, comments, search results, trending content, and analytics from TikTok, Instagram, YouTube, Twitter/X, LinkedIn, Reddit, and 15 more platforms. One API key, one consistent response format, every platform.
|
|
24
24
|
|
|
@@ -211,28 +211,33 @@ Every response follows a unified envelope format:
|
|
|
211
211
|
|
|
212
212
|
## Available Tools
|
|
213
213
|
|
|
214
|
-
The MCP server exposes
|
|
214
|
+
The MCP server exposes 5 tools:
|
|
215
215
|
|
|
216
216
|
| Tool | Description | Needs API key? |
|
|
217
217
|
|------|-------------|----------------|
|
|
218
218
|
| `socialcrawl_list_platforms` | Discover all 21 platforms with their endpoints and capabilities | No |
|
|
219
219
|
| `socialcrawl_list_endpoints` | See all endpoints, required parameters, and credit costs for a platform | No |
|
|
220
|
-
| `socialcrawl_request` | Make any SocialCrawl API call — profiles, posts, comments, search, analytics | Yes |
|
|
220
|
+
| `socialcrawl_request` | Make any SocialCrawl API call — profiles, posts, comments, search, analytics. Supports an optional `idempotencyKey` for retry-safe calls. | Yes |
|
|
221
|
+
| `socialcrawl_check_balance` | Check remaining credits and recent deduction summary. Calls `/v1/credits/balance` — costs 0 credits. | Yes |
|
|
221
222
|
| `socialcrawl_get_docs` | Access detailed API documentation by topic or platform | No |
|
|
222
223
|
|
|
223
|
-
Three of the
|
|
224
|
+
Three of the five tools work without an API key — they query local bundled data. `socialcrawl_request` and `socialcrawl_check_balance` require a key.
|
|
224
225
|
|
|
225
226
|
### Smart validation
|
|
226
227
|
|
|
227
228
|
Before making any API call, `socialcrawl_request` validates locally that the platform exists, the endpoint exists, and all required parameters are present. If something is wrong, it tells the agent exactly how to fix it — without consuming any credits.
|
|
228
229
|
|
|
230
|
+
### Retry-safe requests
|
|
231
|
+
|
|
232
|
+
Pass an `idempotencyKey` to `socialcrawl_request` (UUIDv4 recommended) to make the call retry-safe. If the request is replayed within 24h, the server returns the original response and deducts **0 credits** (`X-Idempotent-Replay: true`).
|
|
233
|
+
|
|
229
234
|
## Supported Platforms
|
|
230
235
|
|
|
231
236
|
| Platform | Endpoints | Data Available |
|
|
232
237
|
|----------|-----------|----------------|
|
|
233
|
-
| **TikTok** |
|
|
238
|
+
| **TikTok** | 26 | Profiles, videos, comments, followers, search, trending, live, Shop, showcase |
|
|
234
239
|
| **Instagram** | 12 | Profiles, posts, reels, comments, highlights, search |
|
|
235
|
-
| **YouTube** |
|
|
240
|
+
| **YouTube** | 12 | Channels, videos, shorts, playlists, comments, trending, comment replies |
|
|
236
241
|
| **Facebook** | 12 | Profiles, posts, reels, photos, groups, Ad Library |
|
|
237
242
|
| **Twitter/X** | 6 | Profiles, tweets, communities |
|
|
238
243
|
| **LinkedIn** | 6 | Profiles, company pages, posts, Ad Library |
|
|
@@ -252,7 +257,7 @@ Before making any API call, `socialcrawl_request` validates locally that the pla
|
|
|
252
257
|
| **Pillar** | 1 | Link pages |
|
|
253
258
|
| **Utility** | 1 | Age & gender detection |
|
|
254
259
|
|
|
255
|
-
**Total:
|
|
260
|
+
**Total: 108 endpoints across 21 platforms.**
|
|
256
261
|
|
|
257
262
|
## Error Handling
|
|
258
263
|
|
|
@@ -265,7 +270,13 @@ The MCP server handles errors gracefully and gives the agent actionable guidance
|
|
|
265
270
|
| Insufficient credits | Shows balance and links to billing page |
|
|
266
271
|
| Bad platform/resource | Suggests using discovery tools to find the right endpoint |
|
|
267
272
|
| Missing parameters | Lists exactly what's missing with examples |
|
|
268
|
-
|
|
|
273
|
+
| Resource not found (404) | Reports the upstream resource doesn't exist; credits auto-refunded (BIL-01) |
|
|
274
|
+
| Idempotency-Key conflict (409) | Tells the agent the key was used by another account — generate a fresh one |
|
|
275
|
+
| Idempotency-Key payload mismatch (422) | Tells the agent the same key was reused with different params |
|
|
276
|
+
| Method not allowed (405) | Reminds the caller that `/v1/*` is GET-only |
|
|
277
|
+
| Concurrency limit (429) | Asks the caller to back off (50 concurrent/key max) |
|
|
278
|
+
| Upstream error (502) | Reports the failure; credits refunded automatically |
|
|
279
|
+
| Platform unavailable (503) | Circuit breaker open; credits refunded; retry in 30s |
|
|
269
280
|
|
|
270
281
|
## Links
|
|
271
282
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
2
|
+
import { checkBalance } from "../tools/check-balance.js";
|
|
3
|
+
describe("socialcrawl_check_balance tool", () => {
|
|
4
|
+
const originalEnv = process.env;
|
|
5
|
+
beforeEach(() => {
|
|
6
|
+
process.env = { ...originalEnv, SOCIALCRAWL_API_KEY: "sc_test_key" };
|
|
7
|
+
});
|
|
8
|
+
afterEach(() => {
|
|
9
|
+
process.env = originalEnv;
|
|
10
|
+
vi.restoreAllMocks();
|
|
11
|
+
});
|
|
12
|
+
it("calls /v1/credits/balance with no platform prefix and no query string", async () => {
|
|
13
|
+
let capturedUrl = "";
|
|
14
|
+
vi.stubGlobal("fetch", async (url) => {
|
|
15
|
+
capturedUrl = url;
|
|
16
|
+
return new Response(JSON.stringify({
|
|
17
|
+
success: true,
|
|
18
|
+
platform: "meta",
|
|
19
|
+
endpoint: "/v1/credits/balance",
|
|
20
|
+
data: { balance: 8432, recent_deductions: { last_24h: 128, last_7d: 1043 } },
|
|
21
|
+
credits_used: 0,
|
|
22
|
+
credits_remaining: 8432,
|
|
23
|
+
}), { status: 200 });
|
|
24
|
+
});
|
|
25
|
+
const result = await checkBalance();
|
|
26
|
+
expect(capturedUrl).toContain("/v1/credits/balance");
|
|
27
|
+
expect(capturedUrl).not.toContain("/v1/meta/");
|
|
28
|
+
expect(capturedUrl).not.toContain("?");
|
|
29
|
+
expect(result).toContain("8432");
|
|
30
|
+
});
|
|
31
|
+
it("returns the No-API-key error when SOCIALCRAWL_API_KEY is missing", async () => {
|
|
32
|
+
delete process.env.SOCIALCRAWL_API_KEY;
|
|
33
|
+
const result = await checkBalance();
|
|
34
|
+
expect(result).toContain("No API key configured");
|
|
35
|
+
});
|
|
36
|
+
it("formats the balance response with a header noting 0-credit cost", async () => {
|
|
37
|
+
vi.stubGlobal("fetch", async () => new Response(JSON.stringify({
|
|
38
|
+
success: true,
|
|
39
|
+
platform: "meta",
|
|
40
|
+
endpoint: "/v1/credits/balance",
|
|
41
|
+
data: { balance: 100, recent_deductions: { last_24h: 0, last_7d: 0 } },
|
|
42
|
+
credits_used: 0,
|
|
43
|
+
credits_remaining: 100,
|
|
44
|
+
}), { status: 200 }));
|
|
45
|
+
const result = await checkBalance();
|
|
46
|
+
expect(result).toContain("/v1/credits/balance");
|
|
47
|
+
expect(result).toContain("0 credits");
|
|
48
|
+
});
|
|
49
|
+
it("propagates 401 errors with the Invalid API key message", async () => {
|
|
50
|
+
vi.stubGlobal("fetch", async () => new Response(JSON.stringify({ success: false, error: { type: "INVALID_API_KEY", message: "bad key" } }), { status: 401 }));
|
|
51
|
+
const result = await checkBalance();
|
|
52
|
+
expect(result).toContain("Invalid API key");
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
//# sourceMappingURL=check-balance.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-balance.test.js","sourceRoot":"","sources":["../../src/__tests__/check-balance.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -68,5 +68,98 @@ describe("API client", () => {
|
|
|
68
68
|
expect(result).toContain("Upstream error");
|
|
69
69
|
expect(result).toContain("auto-refunded");
|
|
70
70
|
});
|
|
71
|
+
it("maps 404 RESOURCE_NOT_FOUND to a refund-aware message", async () => {
|
|
72
|
+
vi.stubGlobal("fetch", async () => new Response(JSON.stringify({
|
|
73
|
+
success: false,
|
|
74
|
+
error: { type: "RESOURCE_NOT_FOUND", message: "Resource does not exist" },
|
|
75
|
+
}), { status: 404 }));
|
|
76
|
+
const result = await makeRequest({ platform: "tiktok", resource: "profile", params: { handle: "ghost" } });
|
|
77
|
+
expect(result).toContain("Resource not found");
|
|
78
|
+
expect(result).toContain("refunded");
|
|
79
|
+
expect(result).not.toContain("socialcrawl_list_endpoints");
|
|
80
|
+
});
|
|
81
|
+
it("maps 405 METHOD_NOT_ALLOWED with the Allow header hint", async () => {
|
|
82
|
+
vi.stubGlobal("fetch", async () => new Response(JSON.stringify({
|
|
83
|
+
success: false,
|
|
84
|
+
error: { type: "METHOD_NOT_ALLOWED", message: "Only GET is allowed" },
|
|
85
|
+
}), { status: 405 }));
|
|
86
|
+
const result = await makeRequest({ platform: "tiktok", resource: "profile", params: { handle: "test" } });
|
|
87
|
+
expect(result).toContain("Method not allowed");
|
|
88
|
+
expect(result).toContain("GET");
|
|
89
|
+
});
|
|
90
|
+
it("maps 409 IDEMPOTENCY_KEY_CONFLICT", async () => {
|
|
91
|
+
vi.stubGlobal("fetch", async () => new Response(JSON.stringify({
|
|
92
|
+
success: false,
|
|
93
|
+
error: { type: "IDEMPOTENCY_KEY_CONFLICT", message: "Key already used by another account" },
|
|
94
|
+
}), { status: 409 }));
|
|
95
|
+
const result = await makeRequest({
|
|
96
|
+
platform: "tiktok",
|
|
97
|
+
resource: "profile",
|
|
98
|
+
params: { handle: "test" },
|
|
99
|
+
idempotencyKey: "shared-key",
|
|
100
|
+
});
|
|
101
|
+
expect(result).toContain("Idempotency-Key");
|
|
102
|
+
expect(result).toContain("conflict");
|
|
103
|
+
});
|
|
104
|
+
it("maps 422 IDEMPOTENCY_KEY_PAYLOAD_MISMATCH", async () => {
|
|
105
|
+
vi.stubGlobal("fetch", async () => new Response(JSON.stringify({
|
|
106
|
+
success: false,
|
|
107
|
+
error: { type: "IDEMPOTENCY_KEY_PAYLOAD_MISMATCH", message: "Key reused with different payload" },
|
|
108
|
+
}), { status: 422 }));
|
|
109
|
+
const result = await makeRequest({
|
|
110
|
+
platform: "tiktok",
|
|
111
|
+
resource: "profile",
|
|
112
|
+
params: { handle: "test" },
|
|
113
|
+
idempotencyKey: "reused-key",
|
|
114
|
+
});
|
|
115
|
+
expect(result).toContain("Idempotency-Key");
|
|
116
|
+
expect(result).toContain("different");
|
|
117
|
+
});
|
|
118
|
+
it("includes doc_url in default error formatting when present", async () => {
|
|
119
|
+
vi.stubGlobal("fetch", async () => new Response(JSON.stringify({
|
|
120
|
+
success: false,
|
|
121
|
+
error: {
|
|
122
|
+
type: "INTERNAL_ERROR",
|
|
123
|
+
message: "Something went wrong",
|
|
124
|
+
doc_url: "https://www.socialcrawl.dev/docs/errors/internal-error",
|
|
125
|
+
},
|
|
126
|
+
}), { status: 500 }));
|
|
127
|
+
const result = await makeRequest({ platform: "tiktok", resource: "profile", params: { handle: "test" } });
|
|
128
|
+
expect(result).toContain("INTERNAL_ERROR");
|
|
129
|
+
expect(result).toContain("https://www.socialcrawl.dev/docs/errors/internal-error");
|
|
130
|
+
});
|
|
131
|
+
it("forwards idempotencyKey as Idempotency-Key header", async () => {
|
|
132
|
+
let capturedHeaders = {};
|
|
133
|
+
vi.stubGlobal("fetch", async (_url, init) => {
|
|
134
|
+
capturedHeaders = init.headers;
|
|
135
|
+
return new Response(JSON.stringify({ success: true, data: {} }), { status: 200 });
|
|
136
|
+
});
|
|
137
|
+
await makeRequest({
|
|
138
|
+
platform: "tiktok",
|
|
139
|
+
resource: "profile",
|
|
140
|
+
params: { handle: "charlidamelio" },
|
|
141
|
+
idempotencyKey: "abc-123",
|
|
142
|
+
});
|
|
143
|
+
expect(capturedHeaders["Idempotency-Key"]).toBe("abc-123");
|
|
144
|
+
});
|
|
145
|
+
it("does not send Idempotency-Key header when not provided", async () => {
|
|
146
|
+
let capturedHeaders = {};
|
|
147
|
+
vi.stubGlobal("fetch", async (_url, init) => {
|
|
148
|
+
capturedHeaders = init.headers;
|
|
149
|
+
return new Response(JSON.stringify({ success: true, data: {} }), { status: 200 });
|
|
150
|
+
});
|
|
151
|
+
await makeRequest({ platform: "tiktok", resource: "profile", params: { handle: "charlidamelio" } });
|
|
152
|
+
expect(capturedHeaders["Idempotency-Key"]).toBeUndefined();
|
|
153
|
+
});
|
|
154
|
+
it("supports the meta platform for /v1/credits/balance", async () => {
|
|
155
|
+
let capturedUrl = "";
|
|
156
|
+
vi.stubGlobal("fetch", async (url) => {
|
|
157
|
+
capturedUrl = url;
|
|
158
|
+
return new Response(JSON.stringify({ success: true, data: { balance: 42 } }), { status: 200 });
|
|
159
|
+
});
|
|
160
|
+
await makeRequest({ platform: "meta", resource: "credits/balance" });
|
|
161
|
+
expect(capturedUrl).toContain("/v1/credits/balance");
|
|
162
|
+
expect(capturedUrl).not.toContain("?");
|
|
163
|
+
});
|
|
71
164
|
});
|
|
72
165
|
//# sourceMappingURL=client.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../src/__tests__/client.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../src/__tests__/client.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;IAEhC,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,WAAW,EAAE,mBAAmB,EAAE,aAAa,EAAE,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,GAAG,GAAG,WAAW,CAAC;QAC1B,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAC1G,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAC1G,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC9C,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,GAAW,EAAE,EAAE;YAC3C,WAAW,GAAG,GAAG,CAAC;YAClB,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACpF,CAAC,CAAC,CAAC;QAEH,MAAM,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;QACpG,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,GAAW,EAAE,EAAE;YAC3C,WAAW,GAAG,GAAG,CAAC;YAClB,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACpF,CAAC,CAAC,CAAC;QAEH,MAAM,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC;QACrE,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QAC1D,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAChC,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAC9H,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAC1G,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAChC,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CACxJ,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAC1G,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAChC,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CACzG,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QACvF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAChC,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAC3G,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAC1G,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAChC,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CACrG,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAC1G,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAChC,IAAI,QAAQ,CACV,IAAI,CAAC,SAAS,CAAC;YACb,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,yBAAyB,EAAE;SAC1E,CAAC,EACF,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CACF,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QAC3G,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAChC,IAAI,QAAQ,CACV,IAAI,CAAC,SAAS,CAAC;YACb,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,qBAAqB,EAAE;SACtE,CAAC,EACF,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CACF,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAC1G,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAChC,IAAI,QAAQ,CACV,IAAI,CAAC,SAAS,CAAC;YACb,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,qCAAqC,EAAE;SAC5F,CAAC,EACF,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CACF,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;YAC/B,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,SAAS;YACnB,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;YAC1B,cAAc,EAAE,YAAY;SAC7B,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAChC,IAAI,QAAQ,CACV,IAAI,CAAC,SAAS,CAAC;YACb,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,EAAE,IAAI,EAAE,kCAAkC,EAAE,OAAO,EAAE,mCAAmC,EAAE;SAClG,CAAC,EACF,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CACF,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;YAC/B,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,SAAS;YACnB,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;YAC1B,cAAc,EAAE,YAAY;SAC7B,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAChC,IAAI,QAAQ,CACV,IAAI,CAAC,SAAS,CAAC;YACb,OAAO,EAAE,KAAK;YACd,KAAK,EAAE;gBACL,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,sBAAsB;gBAC/B,OAAO,EAAE,wDAAwD;aAClE;SACF,CAAC,EACF,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CACF,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAC1G,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,wDAAwD,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,IAAI,eAAe,GAA2B,EAAE,CAAC;QACjD,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,IAAY,EAAE,IAAiB,EAAE,EAAE;YAC/D,eAAe,GAAG,IAAI,CAAC,OAAiC,CAAC;YACzD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACpF,CAAC,CAAC,CAAC;QAEH,MAAM,WAAW,CAAC;YAChB,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,SAAS;YACnB,MAAM,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE;YACnC,cAAc,EAAE,SAAS;SAC1B,CAAC,CAAC;QACH,MAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,IAAI,eAAe,GAA2B,EAAE,CAAC;QACjD,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,IAAY,EAAE,IAAiB,EAAE,EAAE;YAC/D,eAAe,GAAG,IAAI,CAAC,OAAiC,CAAC;YACzD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACpF,CAAC,CAAC,CAAC;QAEH,MAAM,WAAW,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;QACpG,MAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,GAAW,EAAE,EAAE;YAC3C,WAAW,GAAG,GAAG,CAAC;YAClB,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACjG,CAAC,CAAC,CAAC;QAEH,MAAM,WAAW,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACrE,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QACrD,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -31,8 +31,8 @@ describe("Platform data integrity", () => {
|
|
|
31
31
|
});
|
|
32
32
|
});
|
|
33
33
|
describe("Endpoint data integrity", () => {
|
|
34
|
-
it("has
|
|
35
|
-
expect(ENDPOINTS.length).
|
|
34
|
+
it("has exactly 108 endpoints", () => {
|
|
35
|
+
expect(ENDPOINTS.length).toBe(108);
|
|
36
36
|
});
|
|
37
37
|
it("every endpoint has required fields", () => {
|
|
38
38
|
for (const endpoint of ENDPOINTS) {
|
|
@@ -82,6 +82,42 @@ describe("Endpoint data integrity", () => {
|
|
|
82
82
|
it("findEndpoint returns undefined for unknown resource", () => {
|
|
83
83
|
expect(findEndpoint("tiktok", "nonexistent")).toBeUndefined();
|
|
84
84
|
});
|
|
85
|
+
it("every oneOfGroups member is present in optionalParams", () => {
|
|
86
|
+
for (const endpoint of ENDPOINTS) {
|
|
87
|
+
if (endpoint.oneOfGroups.length === 0)
|
|
88
|
+
continue;
|
|
89
|
+
const optionalNames = new Set(endpoint.optionalParams.map((p) => p.name));
|
|
90
|
+
for (const group of endpoint.oneOfGroups) {
|
|
91
|
+
for (const member of group) {
|
|
92
|
+
expect(optionalNames.has(member), `${endpoint.platform}/${endpoint.resource}: oneOf member "${member}" not in optionalParams`).toBe(true);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
it("no oneOfGroups member appears in required params", () => {
|
|
98
|
+
for (const endpoint of ENDPOINTS) {
|
|
99
|
+
if (endpoint.oneOfGroups.length === 0)
|
|
100
|
+
continue;
|
|
101
|
+
const requiredNames = new Set(endpoint.params.map((p) => p.name));
|
|
102
|
+
for (const group of endpoint.oneOfGroups) {
|
|
103
|
+
for (const member of group) {
|
|
104
|
+
expect(requiredNames.has(member), `${endpoint.platform}/${endpoint.resource}: oneOf member "${member}" wrongly listed as required`).toBe(false);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
it("every optional param has a name and type", () => {
|
|
110
|
+
for (const endpoint of ENDPOINTS) {
|
|
111
|
+
for (const opt of endpoint.optionalParams) {
|
|
112
|
+
expect(opt.name).toBeTruthy();
|
|
113
|
+
expect(["string", "boolean", "integer", "enum"]).toContain(opt.type);
|
|
114
|
+
if (opt.type === "enum") {
|
|
115
|
+
expect(opt.enumValues).toBeDefined();
|
|
116
|
+
expect(opt.enumValues.length).toBeGreaterThan(0);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
});
|
|
85
121
|
});
|
|
86
122
|
describe("Documentation data integrity", () => {
|
|
87
123
|
it("has overview, full, authentication, credits, and errors topics", () => {
|
|
@@ -103,5 +139,61 @@ describe("Documentation data integrity", () => {
|
|
|
103
139
|
it("getAvailableTopics returns at least 26 topics", () => {
|
|
104
140
|
expect(getAvailableTopics().length).toBeGreaterThanOrEqual(26);
|
|
105
141
|
});
|
|
142
|
+
it("getAvailableTopics includes the new idempotency topic", () => {
|
|
143
|
+
expect(getAvailableTopics()).toContain("idempotency");
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
describe("Errors documentation reflects 2026-04-17 backend", () => {
|
|
147
|
+
it("documents METHOD_NOT_ALLOWED (405)", () => {
|
|
148
|
+
const errors = getDoc("errors");
|
|
149
|
+
expect(errors).toContain("METHOD_NOT_ALLOWED");
|
|
150
|
+
expect(errors).toContain("405");
|
|
151
|
+
});
|
|
152
|
+
it("documents IDEMPOTENCY_KEY_CONFLICT (409)", () => {
|
|
153
|
+
const errors = getDoc("errors");
|
|
154
|
+
expect(errors).toContain("IDEMPOTENCY_KEY_CONFLICT");
|
|
155
|
+
expect(errors).toContain("409");
|
|
156
|
+
});
|
|
157
|
+
it("documents IDEMPOTENCY_KEY_PAYLOAD_MISMATCH (422)", () => {
|
|
158
|
+
const errors = getDoc("errors");
|
|
159
|
+
expect(errors).toContain("IDEMPOTENCY_KEY_PAYLOAD_MISMATCH");
|
|
160
|
+
expect(errors).toContain("422");
|
|
161
|
+
});
|
|
162
|
+
it("notes that RESOURCE_NOT_FOUND auto-refunds credits (BIL-01)", () => {
|
|
163
|
+
const errors = getDoc("errors");
|
|
164
|
+
// The RESOURCE_NOT_FOUND row should mention refund / auto-refund.
|
|
165
|
+
expect(errors).toMatch(/RESOURCE_NOT_FOUND[\s\S]*?refund/i);
|
|
166
|
+
});
|
|
167
|
+
it("uses the path-style doc_url format (no anchor fragment)", () => {
|
|
168
|
+
const errors = getDoc("errors");
|
|
169
|
+
expect(errors).not.toContain("docs/errors#");
|
|
170
|
+
expect(errors).toMatch(/docs\/errors\/[a-z-]+/);
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
describe("Credits documentation reflects 2026-04-17 backend", () => {
|
|
174
|
+
it("mentions the optional data._warnings advisory channel (ENV-03)", () => {
|
|
175
|
+
const credits = getDoc("credits");
|
|
176
|
+
expect(credits).toContain("_warnings");
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
describe("Idempotency documentation (BIL-02)", () => {
|
|
180
|
+
it("has an idempotency topic", () => {
|
|
181
|
+
expect(getDoc("idempotency")).toBeTruthy();
|
|
182
|
+
});
|
|
183
|
+
it("documents the Idempotency-Key header", () => {
|
|
184
|
+
const doc = getDoc("idempotency");
|
|
185
|
+
expect(doc).toContain("Idempotency-Key");
|
|
186
|
+
});
|
|
187
|
+
it("explains the 24h TTL and zero-credit replay", () => {
|
|
188
|
+
const doc = getDoc("idempotency");
|
|
189
|
+
expect(doc).toMatch(/24\s*h/i);
|
|
190
|
+
expect(doc).toContain("0 credit");
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
describe("Meta endpoint documentation (SEC-02)", () => {
|
|
194
|
+
it("overview mentions /v1/credits/balance", () => {
|
|
195
|
+
const overview = getDoc("overview");
|
|
196
|
+
expect(overview).toContain("/v1/credits/balance");
|
|
197
|
+
});
|
|
106
198
|
});
|
|
107
199
|
//# sourceMappingURL=data-integrity.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-integrity.test.js","sourceRoot":"","sources":["../../src/__tests__/data-integrity.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAAQ,MAAM,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAEnE,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;YACnC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;YACnC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,CAAC;YAC1C,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,mBAAmB,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"data-integrity.test.js","sourceRoot":"","sources":["../../src/__tests__/data-integrity.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { describe, it, expect } from "vitest";
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
2
2
|
import { request } from "../tools/request.js";
|
|
3
3
|
describe("Pre-flight validation", () => {
|
|
4
4
|
it("rejects unknown platform", async () => {
|
|
@@ -24,5 +24,49 @@ describe("Pre-flight validation", () => {
|
|
|
24
24
|
const result = await request({ platform: "tiktok", resource: "songs/popular" });
|
|
25
25
|
expect(result).toContain("No API key configured");
|
|
26
26
|
});
|
|
27
|
+
it("rejects oneOf endpoint when no group member is provided", async () => {
|
|
28
|
+
const result = await request({
|
|
29
|
+
platform: "facebook",
|
|
30
|
+
resource: "profile/posts",
|
|
31
|
+
params: {},
|
|
32
|
+
});
|
|
33
|
+
expect(result).toContain("Missing required parameter");
|
|
34
|
+
expect(result).toContain("one of");
|
|
35
|
+
expect(result).toContain("url");
|
|
36
|
+
expect(result).toContain("pageId");
|
|
37
|
+
});
|
|
38
|
+
it("passes validation for oneOf endpoint when one group member is provided", async () => {
|
|
39
|
+
const result = await request({
|
|
40
|
+
platform: "facebook",
|
|
41
|
+
resource: "profile/posts",
|
|
42
|
+
params: { url: "https://www.facebook.com/Meta" },
|
|
43
|
+
});
|
|
44
|
+
// Should skip preflight and reach the API-key-required stage.
|
|
45
|
+
expect(result).toContain("No API key configured");
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
describe("request tool — idempotency forwarding", () => {
|
|
49
|
+
const originalEnv = process.env;
|
|
50
|
+
beforeEach(() => {
|
|
51
|
+
process.env = { ...originalEnv, SOCIALCRAWL_API_KEY: "sc_test_key" };
|
|
52
|
+
});
|
|
53
|
+
afterEach(() => {
|
|
54
|
+
process.env = originalEnv;
|
|
55
|
+
vi.restoreAllMocks();
|
|
56
|
+
});
|
|
57
|
+
it("forwards idempotencyKey to the API client as Idempotency-Key header", async () => {
|
|
58
|
+
let capturedHeaders = {};
|
|
59
|
+
vi.stubGlobal("fetch", async (_url, init) => {
|
|
60
|
+
capturedHeaders = init.headers;
|
|
61
|
+
return new Response(JSON.stringify({ success: true, data: {} }), { status: 200 });
|
|
62
|
+
});
|
|
63
|
+
await request({
|
|
64
|
+
platform: "tiktok",
|
|
65
|
+
resource: "profile",
|
|
66
|
+
params: { handle: "charlidamelio" },
|
|
67
|
+
idempotencyKey: "tool-key-xyz",
|
|
68
|
+
});
|
|
69
|
+
expect(capturedHeaders["Idempotency-Key"]).toBe("tool-key-xyz");
|
|
70
|
+
});
|
|
27
71
|
});
|
|
28
72
|
//# sourceMappingURL=preflight.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preflight.test.js","sourceRoot":"","sources":["../../src/__tests__/preflight.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"preflight.test.js","sourceRoot":"","sources":["../../src/__tests__/preflight.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;QAC5E,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;QAC9E,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QACtF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1E,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC;QAChF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,eAAe;YACzB,MAAM,EAAE,EAAE;SACX,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;YAC3B,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,eAAe;YACzB,MAAM,EAAE,EAAE,GAAG,EAAE,+BAA+B,EAAE;SACjD,CAAC,CAAC;QACH,8DAA8D;QAC9D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACrD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;IAEhC,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,WAAW,EAAE,mBAAmB,EAAE,aAAa,EAAE,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,GAAG,GAAG,WAAW,CAAC;QAC1B,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,IAAI,eAAe,GAA2B,EAAE,CAAC;QACjD,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,IAAY,EAAE,IAAiB,EAAE,EAAE;YAC/D,eAAe,GAAG,IAAI,CAAC,OAAiC,CAAC;YACzD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACpF,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,CAAC;YACZ,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,SAAS;YACnB,MAAM,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE;YACnC,cAAc,EAAE,cAAc;SAC/B,CAAC,CAAC;QAEH,MAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/client.d.ts
CHANGED
|
@@ -2,6 +2,13 @@ interface RequestOptions {
|
|
|
2
2
|
platform: string;
|
|
3
3
|
resource: string;
|
|
4
4
|
params?: Record<string, string>;
|
|
5
|
+
/**
|
|
6
|
+
* Optional `Idempotency-Key` header value (BIL-02). Pass an opaque, client-generated
|
|
7
|
+
* string (UUIDv4 recommended) to enable safe retries. The first response is stored
|
|
8
|
+
* server-side for 24h; replays return the original body, status, and credits_used
|
|
9
|
+
* (with a `X-Idempotent-Replay: true` header), and deduct 0 new credits.
|
|
10
|
+
*/
|
|
11
|
+
idempotencyKey?: string;
|
|
5
12
|
}
|
|
6
13
|
export declare function makeRequest(options: RequestOptions): Promise<string>;
|
|
7
14
|
export {};
|
package/dist/client.js
CHANGED
|
@@ -13,12 +13,14 @@ export async function makeRequest(options) {
|
|
|
13
13
|
const url = buildUrl(options);
|
|
14
14
|
const controller = new AbortController();
|
|
15
15
|
const timeoutId = setTimeout(() => controller.abort(), TIMEOUT_MS);
|
|
16
|
+
const headers = { "x-api-key": apiKey };
|
|
17
|
+
if (options.idempotencyKey) {
|
|
18
|
+
headers["Idempotency-Key"] = options.idempotencyKey;
|
|
19
|
+
}
|
|
16
20
|
try {
|
|
17
21
|
const response = await fetch(url, {
|
|
18
22
|
method: "GET",
|
|
19
|
-
headers
|
|
20
|
-
"x-api-key": apiKey,
|
|
21
|
-
},
|
|
23
|
+
headers,
|
|
22
24
|
signal: controller.signal,
|
|
23
25
|
});
|
|
24
26
|
const body = await response.text();
|
|
@@ -41,7 +43,10 @@ export async function makeRequest(options) {
|
|
|
41
43
|
}
|
|
42
44
|
}
|
|
43
45
|
function buildUrl(options) {
|
|
44
|
-
const
|
|
46
|
+
const path = options.platform === "meta"
|
|
47
|
+
? `/v1/${options.resource}`
|
|
48
|
+
: `/v1/${options.platform}/${options.resource}`;
|
|
49
|
+
const base = `${getBaseUrl()}${path}`;
|
|
45
50
|
if (!options.params || Object.keys(options.params).length === 0) {
|
|
46
51
|
return base;
|
|
47
52
|
}
|
|
@@ -58,6 +63,7 @@ function formatHttpError(status, body, options) {
|
|
|
58
63
|
}
|
|
59
64
|
const errorType = parsed?.error?.type ?? "UNKNOWN_ERROR";
|
|
60
65
|
const errorMessage = parsed?.error?.message ?? body;
|
|
66
|
+
const docUrl = parsed?.error?.doc_url;
|
|
61
67
|
switch (status) {
|
|
62
68
|
case 401:
|
|
63
69
|
return "Error: Invalid API key. Check your SOCIALCRAWL_API_KEY configuration.";
|
|
@@ -66,15 +72,26 @@ function formatHttpError(status, body, options) {
|
|
|
66
72
|
case 400:
|
|
67
73
|
return `Error: ${errorMessage}`;
|
|
68
74
|
case 404:
|
|
75
|
+
if (errorType === "RESOURCE_NOT_FOUND") {
|
|
76
|
+
return `Error: Resource not found upstream. The requested ${options.platform} resource doesn't exist. Credits have been refunded automatically.`;
|
|
77
|
+
}
|
|
69
78
|
return `Error: Endpoint /v1/${options.platform}/${options.resource} not found. Use socialcrawl_list_endpoints to see available endpoints for ${options.platform}.`;
|
|
70
|
-
case
|
|
71
|
-
return
|
|
79
|
+
case 405:
|
|
80
|
+
return "Error: Method not allowed. SocialCrawl /v1/* endpoints accept GET requests only.";
|
|
81
|
+
case 409:
|
|
82
|
+
return "Error: Idempotency-Key conflict. The key you supplied was already used by another account. Generate a fresh key (UUIDv4 recommended).";
|
|
83
|
+
case 422:
|
|
84
|
+
return "Error: Idempotency-Key payload mismatch. You reused the same key with different parameters. Either use a different key, or repeat the original request exactly.";
|
|
85
|
+
case 429:
|
|
86
|
+
return "Error: Too many concurrent requests on this API key (50 max). Wait a moment and try again.";
|
|
72
87
|
case 502:
|
|
73
88
|
return "Error: Upstream error fetching data. Credits have been auto-refunded.";
|
|
74
|
-
case
|
|
75
|
-
return
|
|
76
|
-
default:
|
|
77
|
-
|
|
89
|
+
case 503:
|
|
90
|
+
return `Error: Platform ${options.platform} is temporarily unavailable. Credits have been auto-refunded — retry in 30 seconds.`;
|
|
91
|
+
default: {
|
|
92
|
+
const docHint = docUrl ? ` See ${docUrl}` : "";
|
|
93
|
+
return `Error (${status}): ${errorType} — ${errorMessage}${docHint}`;
|
|
94
|
+
}
|
|
78
95
|
}
|
|
79
96
|
}
|
|
80
97
|
function truncateResponse(body) {
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE7D,SAAS,UAAU;IACjB,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,6BAA6B,CAAC;AAC3E,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC;AAC/C,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/data/docs.d.ts
CHANGED