Skip to content

Commit 72cfa56

Browse files
committed
chore(release): release typescript v0.1.15
1 parent d595a54 commit 72cfa56

5 files changed

Lines changed: 943 additions & 119 deletions

File tree

‎README.md‎

Lines changed: 2 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,10 @@ npm i uapi-sdk-typescript
1919
import { UapiClient } from 'uapi-sdk-typescript'
2020

2121
const client = new UapiClient('https://uapis.cn', 'YOUR_API_KEY')
22-
const result = await client.misc.getMiscHotboard({ type: 'weibo' })
22+
const result = await (client as any).social.getSocialQqUserinfo({ qq: '10001' })
2323
console.log(result)
2424
```
2525

26-
这个接口默认只要传 `type` 就可以拿当前热榜。`time`、`keyword`、`timeStart`、`timeEnd`、`limit`、`sources` 都是按场景再传的可选参数。
27-
2826
## 特性
2927

3028
现在你不再需要反反复复的查阅文档了。
@@ -35,67 +33,10 @@ console.log(result)
3533

3634
针对 401、404、429 等标准 HTTP 响应,SDK 已将其统一映射为具名的错误类型。这些错误均附带 `code`、`status`、`details` 等关键上下文信息,确保你在日志或 APM 中能第一时间准确、快速地诊断问题。
3735

38-
HTTP 封装基于 Axios,默认 15 秒超时并自动携带 `Authorization` 头。当前公开的构造参数只有 `baseURL` 和 `token`;如果你需要代理、重试或额外的 Header,建议在项目里再封装一层,或者按需扩展源码。
36+
HTTP 封装基于 Axios,默认 15 秒超时并自动携带 `Authorization` 头;如果你想接入代理、重试或额外的 Header,只需要在实例化后对 Axios 拦截器做扩展即可。
3937

4038
如果你需要查看字段细节或内部逻辑,仓库中的 `./internal` 目录同步保留了由 `openapi-generator` 生成的完整结构体,随时可供参考。
4139

42-
## 响应元信息
43-
44-
每次请求完成后,SDK 会自动把响应 Header 解析成结构化的 `ResponseMeta`,你不用自己拆原始字符串。
45-
46-
成功时可以通过 `client.lastResponseMeta` 读取,失败时可以通过 `err.meta` 读取,两条路径拿到的是同一套字段。
47-
48-
```ts
49-
import { UapiClient, UapiError } from 'uapi-sdk-typescript'
50-
51-
const client = new UapiClient('https://uapis.cn', 'YOUR_API_KEY')
52-
53-
// 成功路径
54-
await client.social.getSocialQqUserinfo({ qq: '10001' })
55-
const meta = client.lastResponseMeta
56-
if (meta) {
57-
console.log('这次请求原价:', meta.creditsRequested ?? 0, '积分')
58-
console.log('这次实际扣费:', meta.creditsCharged ?? 0, '积分')
59-
console.log('特殊计价:', meta.creditsPricing ?? '原价')
60-
console.log('余额剩余:', meta.balanceRemainingCents ?? 0, '分')
61-
console.log('资源包剩余:', meta.quotaRemainingCredits ?? 0, '积分')
62-
console.log('当前有效额度桶:', meta.activeQuotaBuckets ?? 0)
63-
console.log('额度用空即停:', meta.stopOnEmpty ?? false)
64-
console.log('Key QPS:', meta.billingKeyRateRemaining ?? 0, '/', meta.billingKeyRateLimit ?? 0, meta.billingKeyRateUnit ?? 'req')
65-
console.log('Request ID:', meta.requestId)
66-
}
67-
68-
// 失败路径
69-
try {
70-
await client.social.getSocialQqUserinfo({ qq: '10001' })
71-
} catch (err) {
72-
if (err instanceof UapiError && err.meta) {
73-
console.log('Retry-After 秒数:', err.meta.retryAfterSeconds ?? null)
74-
console.log('Retry-After 原始值:', err.meta.retryAfterRaw ?? null)
75-
console.log('访客 QPS:', err.meta.visitorRateRemaining ?? 0, '/', err.meta.visitorRateLimit ?? 0)
76-
console.log('Request ID:', err.meta.requestId)
77-
}
78-
}
79-
```
80-
81-
常用字段一览:
82-
83-
| 字段 | 说明 |
84-
|------|------|
85-
| `creditsRequested` | 这次请求原本要扣多少积分,也就是请求价 |
86-
| `creditsCharged` | 这次请求实际扣了多少积分 |
87-
| `creditsPricing` | 特殊计价原因,例如缓存半价 `cache-hit-half-price` |
88-
| `balanceRemainingCents` | 账户余额剩余(分) |
89-
| `quotaRemainingCredits` | 资源包剩余积分 |
90-
| `activeQuotaBuckets` | 当前还有多少个有效额度桶参与计费 |
91-
| `stopOnEmpty` | 额度耗尽后是否直接停止服务 |
92-
| `retryAfterSeconds` / `retryAfterRaw` | 限流后的等待时长;当服务端返回 HTTP 时间字符串时看 `retryAfterRaw` |
93-
| `requestId` | 请求唯一 ID,排障时使用 |
94-
| `billingKeyRateLimit` / `billingKeyRateRemaining` | Billing Key 当前 QPS 规则的上限与剩余 |
95-
| `billingIpRateLimit` / `billingIpRateRemaining` | Billing Key 单 IP 当前 QPS 规则的上限与剩余 |
96-
| `visitorRateLimit` / `visitorRateRemaining` | 访客当前 QPS 规则的上限与剩余 |
97-
| `rateLimitPolicies` / `rateLimits` | 完整结构化限流策略数据 |
98-
9940
## 错误模型概览
10041

10142
| HTTP 状态码 | SDK 错误类型 | 附加信息 |

‎internal/README.md‎

Lines changed: 37 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,49 @@
1-
## uapi-sdk-typescript internal
1+
## uapi-sdk-typescript@1.0.0
22

3-
这个目录保留的是 OpenAPI Generator 生成的原始参考文档,主要用来对照 operation、model 和生成器层面的类名。
4-
如果你是想直接安装并使用 SDK,请优先查看仓库根目录的 `README.md`。
3+
This generator creates TypeScript/JavaScript client that utilizes [axios](https://github.com/axios/axios). The generated Node module can be used in the following environments:
54

6-
### 安装
5+
Environment
6+
* Node.js
7+
* Webpack
8+
* Browserify
79

8-
```bash
9-
npm install uapi-sdk-typescript
10+
Language level
11+
* ES5 - you must have a Promises/A+ library installed
12+
* ES6
13+
14+
Module system
15+
* CommonJS
16+
* ES6 module system
17+
18+
It can be used in both TypeScript and JavaScript. In TypeScript, the definition will be automatically resolved via `package.json`. ([Reference](https://www.typescriptlang.org/docs/handbook/declaration-files/consumption.html))
19+
20+
### Building
21+
22+
To build and compile the typescript sources to javascript use:
23+
```
24+
npm install
25+
npm run build
1026
```
1127

12-
### 最小示例
28+
### Publishing
29+
30+
First build the package then run `npm publish`
1331

14-
```ts
15-
import { UapiClient } from 'uapi-sdk-typescript'
32+
### Consuming
1633

17-
const client = new UapiClient('https://uapis.cn', 'YOUR_API_KEY')
18-
const result = await client.misc.getMiscHotboard({ type: 'weibo' })
19-
console.log(result)
34+
navigate to the folder of your consuming project and run one of the following commands.
35+
36+
_published:_
37+
38+
```
39+
npm install uapi-sdk-typescript@1.0.0 --save
2040
```
2141

22-
### 说明
42+
_unPublished (not recommended):_
2343

24-
下面继续保留自动生成的 API / Model 索引,方便你按生成器原始命名检索。
44+
```
45+
npm install PATH_TO_GENERATED_PACKAGE --save
46+
```
2547

2648
### Documentation for API Endpoints
2749

@@ -458,3 +480,4 @@ Class | Method | HTTP request | Description
458480
## Documentation For Authorization
459481

460482
Endpoints do not require authorization.
483+

‎package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "uapi-sdk-typescript",
3-
"version": "0.1.14",
3+
"version": "0.1.15",
44
"type": "module",
55
"main": "dist/src/index.js",
66
"types": "dist/src/index.d.ts",

‎src/errors.ts‎

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ export interface RateLimitStateEntry {
1414

1515
export interface ResponseMeta {
1616
requestId?: string
17-
retryAfterRaw?: string
1817
retryAfterSeconds?: number
1918
debitStatus?: string
2019
creditsRequested?: number
@@ -32,21 +31,6 @@ export interface ResponseMeta {
3231
quotaRemainingCredits?: number
3332
visitorQuotaLimitCredits?: number
3433
visitorQuotaRemainingCredits?: number
35-
billingKeyRateLimit?: number
36-
billingKeyRateRemaining?: number
37-
billingKeyRateUnit?: string
38-
billingKeyRateWindowSeconds?: number
39-
billingKeyRateResetAfterSeconds?: number
40-
billingIpRateLimit?: number
41-
billingIpRateRemaining?: number
42-
billingIpRateUnit?: string
43-
billingIpRateWindowSeconds?: number
44-
billingIpRateResetAfterSeconds?: number
45-
visitorRateLimit?: number
46-
visitorRateRemaining?: number
47-
visitorRateUnit?: string
48-
visitorRateWindowSeconds?: number
49-
visitorRateResetAfterSeconds?: number
5034
rawHeaders: Record<string, string>
5135
}
5236

@@ -213,16 +197,8 @@ export function extractMetaFromHeaders(headers: any): ResponseMeta {
213197
}
214198
}
215199

216-
const billingKeyRatePolicy = rateLimitPolicies['billing-key-rate']
217-
const billingKeyRateState = rateLimits['billing-key-rate']
218-
const billingIpRatePolicy = rateLimitPolicies['billing-ip-rate']
219-
const billingIpRateState = rateLimits['billing-ip-rate']
220-
const visitorRatePolicy = rateLimitPolicies['visitor-rate']
221-
const visitorRateState = rateLimits['visitor-rate']
222-
223200
return {
224201
requestId: rawHeaders['x-request-id'],
225-
retryAfterRaw: rawHeaders['retry-after'],
226202
retryAfterSeconds: parseNumber(rawHeaders['retry-after']),
227203
debitStatus: rawHeaders['uapi-debit-status'],
228204
creditsRequested: parseNumber(rawHeaders['uapi-credits-requested']),
@@ -240,21 +216,6 @@ export function extractMetaFromHeaders(headers: any): ResponseMeta {
240216
quotaRemainingCredits: rateLimits['billing-quota']?.remaining,
241217
visitorQuotaLimitCredits: rateLimitPolicies['visitor-quota']?.quota,
242218
visitorQuotaRemainingCredits: rateLimits['visitor-quota']?.remaining,
243-
billingKeyRateLimit: billingKeyRatePolicy?.quota,
244-
billingKeyRateRemaining: billingKeyRateState?.remaining,
245-
billingKeyRateUnit: billingKeyRatePolicy?.unit ?? billingKeyRateState?.unit,
246-
billingKeyRateWindowSeconds: billingKeyRatePolicy?.windowSeconds,
247-
billingKeyRateResetAfterSeconds: billingKeyRateState?.resetAfterSeconds,
248-
billingIpRateLimit: billingIpRatePolicy?.quota,
249-
billingIpRateRemaining: billingIpRateState?.remaining,
250-
billingIpRateUnit: billingIpRatePolicy?.unit ?? billingIpRateState?.unit,
251-
billingIpRateWindowSeconds: billingIpRatePolicy?.windowSeconds,
252-
billingIpRateResetAfterSeconds: billingIpRateState?.resetAfterSeconds,
253-
visitorRateLimit: visitorRatePolicy?.quota,
254-
visitorRateRemaining: visitorRateState?.remaining,
255-
visitorRateUnit: visitorRatePolicy?.unit ?? visitorRateState?.unit,
256-
visitorRateWindowSeconds: visitorRatePolicy?.windowSeconds,
257-
visitorRateResetAfterSeconds: visitorRateState?.resetAfterSeconds,
258219
rawHeaders,
259220
}
260221
}

0 commit comments

Comments
 (0)