@spicyapi/sdk 0.1.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/LICENSE +21 -0
- package/README.md +21 -0
- package/SECURITY.md +4 -0
- package/contracts/openapi.yaml +752 -0
- package/dist/src/docs/index.d.ts +10 -0
- package/dist/src/docs/index.d.ts.map +1 -0
- package/dist/src/docs/index.js +181 -0
- package/dist/src/docs/index.js.map +1 -0
- package/dist/src/generated/openapi.d.ts +888 -0
- package/dist/src/generated/openapi.d.ts.map +1 -0
- package/dist/src/generated/openapi.js +6 -0
- package/dist/src/generated/openapi.js.map +1 -0
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +5 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/openapi.d.ts +2 -0
- package/dist/src/openapi.d.ts.map +1 -0
- package/dist/src/openapi.js +18 -0
- package/dist/src/openapi.js.map +1 -0
- package/dist/src/sdk/client.d.ts +41 -0
- package/dist/src/sdk/client.d.ts.map +1 -0
- package/dist/src/sdk/client.js +407 -0
- package/dist/src/sdk/client.js.map +1 -0
- package/dist/src/sdk/errors.d.ts +36 -0
- package/dist/src/sdk/errors.d.ts.map +1 -0
- package/dist/src/sdk/errors.js +53 -0
- package/dist/src/sdk/errors.js.map +1 -0
- package/dist/src/sdk/index.d.ts +4 -0
- package/dist/src/sdk/index.d.ts.map +1 -0
- package/dist/src/sdk/index.js +3 -0
- package/dist/src/sdk/index.js.map +1 -0
- package/dist/src/sdk/types.d.ts +73 -0
- package/dist/src/sdk/types.d.ts.map +1 -0
- package/dist/src/sdk/types.js +2 -0
- package/dist/src/sdk/types.js.map +1 -0
- package/dist/src/webhooks/index.d.ts +28 -0
- package/dist/src/webhooks/index.d.ts.map +1 -0
- package/dist/src/webhooks/index.js +83 -0
- package/dist/src/webhooks/index.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface DocumentationEntry {
|
|
2
|
+
slug: string;
|
|
3
|
+
title: string;
|
|
4
|
+
summary: string;
|
|
5
|
+
url: string;
|
|
6
|
+
keywords: string[];
|
|
7
|
+
}
|
|
8
|
+
export declare const DOCUMENTATION: DocumentationEntry[];
|
|
9
|
+
export declare function searchDocumentation(query?: string, limit?: number): DocumentationEntry[];
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/docs/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AA8GD,eAAO,MAAM,aAAa,EAAE,kBAAkB,EAG3C,CAAC;AA6CJ,wBAAgB,mBAAmB,CAAC,KAAK,SAAK,EAAE,KAAK,SAAK,GAAG,kBAAkB,EAAE,CAoChF"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
const DOCS_BASE_URL = "https://spicyapi.ai/en/docs";
|
|
2
|
+
const definitions = [
|
|
3
|
+
{
|
|
4
|
+
slug: "",
|
|
5
|
+
title: "Quickstart",
|
|
6
|
+
summary: "Create a task, follow its state, and retrieve generated media.",
|
|
7
|
+
keywords: ["start", "guide", "quickstart", "入门", "开始"],
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
slug: "authentication",
|
|
11
|
+
title: "Authentication",
|
|
12
|
+
summary: "API keys, per-key controls, rotation, and incident response.",
|
|
13
|
+
keywords: ["api key", "bearer", "security", "认证", "密钥"],
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
slug: "models",
|
|
17
|
+
title: "Models and parameters",
|
|
18
|
+
summary: "Live model IDs, account-specific pricing, input schemas, and examples.",
|
|
19
|
+
keywords: ["catalog", "schema", "price", "model", "模型", "价格", "参数"],
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
slug: "tasks",
|
|
23
|
+
title: "Asynchronous tasks",
|
|
24
|
+
summary: "Create tasks, inspect task records, states, costs, and outputs.",
|
|
25
|
+
keywords: ["createTask", "recordInfo", "poll", "state", "任务", "轮询"],
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
slug: "task-actions",
|
|
29
|
+
title: "Task actions",
|
|
30
|
+
summary: "Retry failed or expired tasks safely and understand unsupported actions.",
|
|
31
|
+
keywords: ["retry", "cancel", "重试", "取消"],
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
slug: "media",
|
|
35
|
+
title: "Media transfer",
|
|
36
|
+
summary: "Direct uploads, spicy:// references, commits, and signed output downloads.",
|
|
37
|
+
keywords: ["upload", "download", "file", "image", "上传", "下载", "文件"],
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
slug: "billing",
|
|
41
|
+
title: "Billing",
|
|
42
|
+
summary: "Prices, holds, settlement, failures, refunds, and balance fields.",
|
|
43
|
+
keywords: ["cost", "credit", "balance", "payment", "billing", "余额", "付费", "计费"],
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
slug: "idempotency",
|
|
47
|
+
title: "Idempotency",
|
|
48
|
+
summary: "Retry one logical generation without duplicate work or duplicate holds.",
|
|
49
|
+
keywords: ["idempotency-key", "retry", "duplicate", "幂等", "重复"],
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
slug: "webhooks",
|
|
53
|
+
title: "Webhooks",
|
|
54
|
+
summary: "Payload versions, raw-body signatures, delivery IDs, and retries.",
|
|
55
|
+
keywords: ["callback", "hmac", "signature", "webhook", "回调", "签名"],
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
slug: "errors",
|
|
59
|
+
title: "Errors",
|
|
60
|
+
summary: "HTTP statuses, business codes, correlation IDs, and retry decisions.",
|
|
61
|
+
keywords: [
|
|
62
|
+
"code",
|
|
63
|
+
"request_id",
|
|
64
|
+
"429",
|
|
65
|
+
"503",
|
|
66
|
+
"unavailable",
|
|
67
|
+
"service unavailable",
|
|
68
|
+
"no route",
|
|
69
|
+
"customer price",
|
|
70
|
+
"错误",
|
|
71
|
+
"不可用",
|
|
72
|
+
"重试",
|
|
73
|
+
],
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
slug: "limits",
|
|
77
|
+
title: "Rate limits",
|
|
78
|
+
summary: "Shared account rate limits and recommended backoff behavior.",
|
|
79
|
+
keywords: ["rate", "quota", "retry-after", "限流", "配额"],
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
slug: "retention",
|
|
83
|
+
title: "Data retention",
|
|
84
|
+
summary: "Task input, output, media, and operational-record retention boundaries.",
|
|
85
|
+
keywords: ["privacy", "delete", "storage", "retention", "隐私", "删除", "保留"],
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
slug: "policy",
|
|
89
|
+
title: "Content policy",
|
|
90
|
+
summary: "Transparent mature-flag forwarding, model-service behavior, and caller responsibility.",
|
|
91
|
+
keywords: ["mature", "forward", "pass through", "content", "policy", "透明传递", "内容"],
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
slug: "agents",
|
|
95
|
+
title: "Agent integrations",
|
|
96
|
+
summary: "Safe patterns for AI agents using the public API contract.",
|
|
97
|
+
keywords: ["agent", "mcp", "tool", "智能体", "代理"],
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
slug: "api-reference",
|
|
101
|
+
title: "API reference",
|
|
102
|
+
summary: "The complete public endpoint and envelope reference.",
|
|
103
|
+
keywords: ["openapi", "endpoint", "reference", "接口", "参考"],
|
|
104
|
+
},
|
|
105
|
+
];
|
|
106
|
+
export const DOCUMENTATION = definitions.map((entry) => ({
|
|
107
|
+
...entry,
|
|
108
|
+
url: entry.slug ? `${DOCS_BASE_URL}/${entry.slug}` : DOCS_BASE_URL,
|
|
109
|
+
}));
|
|
110
|
+
const SEARCH_STOP_WORDS = new Set([
|
|
111
|
+
"a",
|
|
112
|
+
"about",
|
|
113
|
+
"across",
|
|
114
|
+
"after",
|
|
115
|
+
"an",
|
|
116
|
+
"and",
|
|
117
|
+
"are",
|
|
118
|
+
"as",
|
|
119
|
+
"at",
|
|
120
|
+
"before",
|
|
121
|
+
"by",
|
|
122
|
+
"for",
|
|
123
|
+
"from",
|
|
124
|
+
"how",
|
|
125
|
+
"in",
|
|
126
|
+
"into",
|
|
127
|
+
"is",
|
|
128
|
+
"it",
|
|
129
|
+
"of",
|
|
130
|
+
"on",
|
|
131
|
+
"or",
|
|
132
|
+
"the",
|
|
133
|
+
"to",
|
|
134
|
+
"using",
|
|
135
|
+
"what",
|
|
136
|
+
"when",
|
|
137
|
+
"where",
|
|
138
|
+
"which",
|
|
139
|
+
"who",
|
|
140
|
+
"why",
|
|
141
|
+
"with",
|
|
142
|
+
"without",
|
|
143
|
+
]);
|
|
144
|
+
function normalizeSearchText(value) {
|
|
145
|
+
return value
|
|
146
|
+
.normalize("NFKC")
|
|
147
|
+
.toLowerCase()
|
|
148
|
+
.replace(/[^\p{L}\p{N}]+/gu, " ")
|
|
149
|
+
.trim();
|
|
150
|
+
}
|
|
151
|
+
export function searchDocumentation(query = "", limit = 10) {
|
|
152
|
+
if (!Number.isInteger(limit) || limit < 1 || limit > 25) {
|
|
153
|
+
throw new TypeError("limit must be an integer between 1 and 25");
|
|
154
|
+
}
|
|
155
|
+
const normalizedQuery = normalizeSearchText(query);
|
|
156
|
+
const allTerms = normalizedQuery.split(/\s+/).filter(Boolean);
|
|
157
|
+
const meaningfulTerms = allTerms.filter((term) => !SEARCH_STOP_WORDS.has(term));
|
|
158
|
+
const terms = meaningfulTerms.length > 0 ? meaningfulTerms : allTerms;
|
|
159
|
+
if (terms.length === 0)
|
|
160
|
+
return DOCUMENTATION.slice(0, limit);
|
|
161
|
+
return DOCUMENTATION.map((entry, index) => {
|
|
162
|
+
const title = normalizeSearchText(entry.title);
|
|
163
|
+
const slug = normalizeSearchText(entry.slug);
|
|
164
|
+
const summary = normalizeSearchText(entry.summary);
|
|
165
|
+
const keywords = normalizeSearchText(entry.keywords.join(" "));
|
|
166
|
+
const haystack = `${title} ${slug} ${summary} ${keywords}`;
|
|
167
|
+
const matched = terms.filter((term) => haystack.includes(term));
|
|
168
|
+
const score = matched.reduce((total, term) => total +
|
|
169
|
+
(title.includes(term) ? 8 : 0) +
|
|
170
|
+
(slug.includes(term) ? 6 : 0) +
|
|
171
|
+
(keywords.includes(term) ? 4 : 0) +
|
|
172
|
+
(summary.includes(term) ? 2 : 0) +
|
|
173
|
+
1, haystack.includes(normalizedQuery) ? 20 : 0);
|
|
174
|
+
return { entry, index, matched: matched.length, score };
|
|
175
|
+
})
|
|
176
|
+
.filter((candidate) => candidate.matched > 0)
|
|
177
|
+
.sort((left, right) => right.matched - left.matched || right.score - left.score || left.index - right.index)
|
|
178
|
+
.slice(0, limit)
|
|
179
|
+
.map((candidate) => candidate.entry);
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/docs/index.ts"],"names":[],"mappings":"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"}
|