uapi-browser-sdk 0.1.12 → 0.1.13

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 (74) hide show
  1. package/README.md +1 -1
  2. package/dist/internal/src/apis/ClipzyApi.d.ts +0 -12
  3. package/dist/internal/src/apis/ClipzyApi.js +15 -36
  4. package/dist/internal/src/apis/ConvertApi.d.ts +0 -8
  5. package/dist/internal/src/apis/ConvertApi.js +10 -24
  6. package/dist/internal/src/apis/DailyApi.d.ts +0 -4
  7. package/dist/internal/src/apis/DailyApi.js +5 -12
  8. package/dist/internal/src/apis/DefaultApi.d.ts +0 -20
  9. package/dist/internal/src/apis/DefaultApi.js +25 -60
  10. package/dist/internal/src/apis/GameApi.d.ts +0 -20
  11. package/dist/internal/src/apis/GameApi.js +25 -60
  12. package/dist/internal/src/apis/ImageApi.d.ts +0 -44
  13. package/dist/internal/src/apis/ImageApi.js +55 -132
  14. package/dist/internal/src/apis/MiscApi.d.ts +0 -60
  15. package/dist/internal/src/apis/MiscApi.js +75 -180
  16. package/dist/internal/src/apis/NetworkApi.d.ts +0 -40
  17. package/dist/internal/src/apis/NetworkApi.js +50 -120
  18. package/dist/internal/src/apis/PoemApi.d.ts +0 -4
  19. package/dist/internal/src/apis/PoemApi.js +5 -12
  20. package/dist/internal/src/apis/RandomApi.d.ts +0 -16
  21. package/dist/internal/src/apis/RandomApi.js +20 -48
  22. package/dist/internal/src/apis/SocialApi.d.ts +0 -32
  23. package/dist/internal/src/apis/SocialApi.js +40 -96
  24. package/dist/internal/src/apis/StatusApi.d.ts +0 -8
  25. package/dist/internal/src/apis/StatusApi.js +10 -24
  26. package/dist/internal/src/apis/TextApi.d.ts +0 -44
  27. package/dist/internal/src/apis/TextApi.js +55 -132
  28. package/dist/internal/src/apis/TranslateApi.d.ts +0 -16
  29. package/dist/internal/src/apis/TranslateApi.js +20 -48
  30. package/dist/internal/src/apis/WebParseApi.d.ts +0 -16
  31. package/dist/internal/src/apis/WebParseApi.js +20 -48
  32. package/dist/internal/src/models/GetMiscHolidayCalendar200ResponseHolidaysInner.d.ts +1 -1
  33. package/dist/internal/src/models/GetMiscWeather200Response.d.ts +1 -1
  34. package/dist/internal/src/models/PostAiTranslateRequest.d.ts +2 -2
  35. package/dist/internal/src/models/PostSearchAggregateRequest.d.ts +2 -2
  36. package/dist/internal/src/models/PostSensitiveWordAnalyze200ResponseResultsInner.d.ts +2 -2
  37. package/dist/internal/src/models/PostTextAesDecryptAdvancedRequest.d.ts +2 -2
  38. package/dist/internal/src/models/PostTextAesEncryptAdvancedRequest.d.ts +3 -3
  39. package/dist/internal/src/models/PostTextConvertRequest.d.ts +2 -2
  40. package/dist/internal/src/models/PostTranslateStream400Response.d.ts +1 -1
  41. package/dist/internal/src/runtime.js +0 -15
  42. package/dist/src/errors.d.ts +85 -0
  43. package/dist/src/errors.js +247 -0
  44. package/dist/src/index.d.ts +5 -6
  45. package/dist/src/index.js +9 -10
  46. package/internal/.openapi-generator/VERSION +1 -1
  47. package/internal/src/apis/ClipzyApi.ts +15 -39
  48. package/internal/src/apis/ConvertApi.ts +10 -26
  49. package/internal/src/apis/DailyApi.ts +5 -13
  50. package/internal/src/apis/DefaultApi.ts +25 -65
  51. package/internal/src/apis/GameApi.ts +25 -65
  52. package/internal/src/apis/ImageApi.ts +55 -143
  53. package/internal/src/apis/MiscApi.ts +75 -195
  54. package/internal/src/apis/NetworkApi.ts +50 -130
  55. package/internal/src/apis/PoemApi.ts +5 -13
  56. package/internal/src/apis/RandomApi.ts +20 -52
  57. package/internal/src/apis/SocialApi.ts +40 -104
  58. package/internal/src/apis/StatusApi.ts +10 -26
  59. package/internal/src/apis/TextApi.ts +55 -143
  60. package/internal/src/apis/TranslateApi.ts +20 -52
  61. package/internal/src/apis/WebParseApi.ts +20 -52
  62. package/internal/src/models/GetMiscHolidayCalendar200ResponseHolidaysInner.ts +1 -1
  63. package/internal/src/models/GetMiscWeather200Response.ts +1 -1
  64. package/internal/src/models/PostAiTranslateRequest.ts +2 -2
  65. package/internal/src/models/PostSearchAggregateRequest.ts +2 -2
  66. package/internal/src/models/PostSensitiveWordAnalyze200ResponseResultsInner.ts +2 -2
  67. package/internal/src/models/PostTextAesDecryptAdvancedRequest.ts +2 -2
  68. package/internal/src/models/PostTextAesEncryptAdvancedRequest.ts +3 -3
  69. package/internal/src/models/PostTextConvertRequest.ts +2 -2
  70. package/internal/src/models/PostTranslateStream400Response.ts +1 -1
  71. package/internal/src/runtime.ts +0 -18
  72. package/package.json +1 -1
  73. package/src/errors.ts +282 -0
  74. package/src/index.ts +12 -8
@@ -0,0 +1,247 @@
1
+ export class UapiError extends Error {
2
+ constructor(code, status, message, details, payload, meta) {
3
+ super(`[${status}] ${code}: ${message}`);
4
+ this.code = code;
5
+ this.status = status;
6
+ this.details = details;
7
+ this.payload = payload;
8
+ this.meta = meta;
9
+ }
10
+ }
11
+ export class ApiErrorError extends UapiError {
12
+ }
13
+ export class AvatarNotFoundError extends UapiError {
14
+ }
15
+ export class ConversionFailedError extends UapiError {
16
+ }
17
+ export class FileOpenErrorError extends UapiError {
18
+ }
19
+ export class FileRequiredError extends UapiError {
20
+ }
21
+ export class InsufficientCreditsError extends UapiError {
22
+ }
23
+ export class InternalServerErrorError extends UapiError {
24
+ }
25
+ export class InvalidParameterError extends UapiError {
26
+ }
27
+ export class InvalidParamsError extends UapiError {
28
+ }
29
+ export class NotFoundError extends UapiError {
30
+ }
31
+ export class NoMatchError extends UapiError {
32
+ }
33
+ export class NoTrackingDataError extends UapiError {
34
+ }
35
+ export class PhoneInfoFailedError extends UapiError {
36
+ }
37
+ export class RecognitionFailedError extends UapiError {
38
+ }
39
+ export class RequestEntityTooLargeError extends UapiError {
40
+ }
41
+ export class ServiceBusyError extends UapiError {
42
+ }
43
+ export class TimezoneNotFoundError extends UapiError {
44
+ }
45
+ export class UnauthorizedError extends UapiError {
46
+ }
47
+ export class UnsupportedCarrierError extends UapiError {
48
+ }
49
+ export class UnsupportedFormatError extends UapiError {
50
+ }
51
+ export class VisitorMonthlyQuotaExhaustedError extends UapiError {
52
+ }
53
+ function defaultCode(status) {
54
+ switch (status) {
55
+ case 400:
56
+ return 'INVALID_PARAMETER';
57
+ case 401:
58
+ return 'UNAUTHORIZED';
59
+ case 402:
60
+ return 'INSUFFICIENT_CREDITS';
61
+ case 404:
62
+ return 'NOT_FOUND';
63
+ case 413:
64
+ return 'REQUEST_ENTITY_TOO_LARGE';
65
+ case 429:
66
+ return 'SERVICE_BUSY';
67
+ case 500:
68
+ return 'INTERNAL_SERVER_ERROR';
69
+ default:
70
+ return 'API_ERROR';
71
+ }
72
+ }
73
+ function toHeaderMap(headers) {
74
+ const out = {};
75
+ if (!headers) {
76
+ return out;
77
+ }
78
+ if (typeof headers.forEach === 'function') {
79
+ ;
80
+ headers.forEach((value, key) => {
81
+ out[String(key).toLowerCase()] = String(value);
82
+ });
83
+ return out;
84
+ }
85
+ for (const [rawKey, rawValue] of Object.entries(headers)) {
86
+ if (rawValue === undefined || rawValue === null) {
87
+ continue;
88
+ }
89
+ out[String(rawKey).toLowerCase()] = String(rawValue);
90
+ }
91
+ return out;
92
+ }
93
+ function parseNumber(value) {
94
+ if (value === undefined) {
95
+ return undefined;
96
+ }
97
+ const parsed = Number(value);
98
+ return Number.isFinite(parsed) ? parsed : undefined;
99
+ }
100
+ function parseBoolean(value) {
101
+ if (value === undefined) {
102
+ return undefined;
103
+ }
104
+ const normalized = value.trim().toLowerCase();
105
+ if (normalized === 'true') {
106
+ return true;
107
+ }
108
+ if (normalized === 'false') {
109
+ return false;
110
+ }
111
+ return undefined;
112
+ }
113
+ function unquote(value) {
114
+ const trimmed = value.trim();
115
+ if (trimmed.length >= 2 && trimmed.startsWith('"') && trimmed.endsWith('"')) {
116
+ return trimmed.slice(1, -1);
117
+ }
118
+ return trimmed;
119
+ }
120
+ function parseStructuredItems(raw) {
121
+ if (!raw) {
122
+ return [];
123
+ }
124
+ return raw
125
+ .split(',')
126
+ .map((item) => item.trim())
127
+ .filter(Boolean)
128
+ .map((item) => {
129
+ const segments = item.split(';').map((segment) => segment.trim()).filter(Boolean);
130
+ const [head, ...rest] = segments;
131
+ const params = {};
132
+ for (const segment of rest) {
133
+ const eq = segment.indexOf('=');
134
+ if (eq <= 0) {
135
+ continue;
136
+ }
137
+ const key = segment.slice(0, eq).trim();
138
+ const value = unquote(segment.slice(eq + 1));
139
+ params[key] = value;
140
+ }
141
+ return { name: unquote(head), params };
142
+ });
143
+ }
144
+ export function extractMetaFromHeaders(headers) {
145
+ const rawHeaders = toHeaderMap(headers);
146
+ const rateLimitPolicies = {};
147
+ const rateLimits = {};
148
+ for (const item of parseStructuredItems(rawHeaders['ratelimit-policy'])) {
149
+ rateLimitPolicies[item.name] = {
150
+ name: item.name,
151
+ quota: parseNumber(item.params.q),
152
+ unit: item.params['uapi-unit'],
153
+ windowSeconds: parseNumber(item.params.w),
154
+ };
155
+ }
156
+ for (const item of parseStructuredItems(rawHeaders['ratelimit'])) {
157
+ rateLimits[item.name] = {
158
+ name: item.name,
159
+ remaining: parseNumber(item.params.r),
160
+ unit: item.params['uapi-unit'],
161
+ resetAfterSeconds: parseNumber(item.params.t),
162
+ };
163
+ }
164
+ return {
165
+ requestId: rawHeaders['x-request-id'],
166
+ retryAfterSeconds: parseNumber(rawHeaders['retry-after']),
167
+ debitStatus: rawHeaders['uapi-debit-status'],
168
+ creditsRequested: parseNumber(rawHeaders['uapi-credits-requested']),
169
+ creditsCharged: parseNumber(rawHeaders['uapi-credits-charged']),
170
+ creditsPricing: rawHeaders['uapi-credits-pricing'],
171
+ activeQuotaBuckets: parseNumber(rawHeaders['uapi-quota-active-buckets']),
172
+ stopOnEmpty: parseBoolean(rawHeaders['uapi-stop-on-empty']),
173
+ rateLimitPolicyRaw: rawHeaders['ratelimit-policy'],
174
+ rateLimitRaw: rawHeaders['ratelimit'],
175
+ rateLimitPolicies,
176
+ rateLimits,
177
+ balanceLimitCents: rateLimitPolicies['billing-balance']?.quota,
178
+ balanceRemainingCents: rateLimits['billing-balance']?.remaining,
179
+ quotaLimitCredits: rateLimitPolicies['billing-quota']?.quota,
180
+ quotaRemainingCredits: rateLimits['billing-quota']?.remaining,
181
+ visitorQuotaLimitCredits: rateLimitPolicies['visitor-quota']?.quota,
182
+ visitorQuotaRemainingCredits: rateLimits['visitor-quota']?.remaining,
183
+ rawHeaders,
184
+ };
185
+ }
186
+ function pickDetails(body) {
187
+ if (!body || typeof body !== 'object') {
188
+ return undefined;
189
+ }
190
+ const payload = body;
191
+ if (payload.details !== undefined) {
192
+ return payload.details;
193
+ }
194
+ if (payload.quota !== undefined) {
195
+ return payload.quota;
196
+ }
197
+ if (payload.docs !== undefined) {
198
+ return payload.docs;
199
+ }
200
+ return undefined;
201
+ }
202
+ export function mapError(res, body) {
203
+ const payload = body && typeof body === 'object' ? body : undefined;
204
+ const code = String(payload?.code || payload?.error || defaultCode(res.status)).toUpperCase();
205
+ const message = payload?.message ||
206
+ payload?.errMsg ||
207
+ (typeof body === 'string' ? body : '') ||
208
+ res.statusText ||
209
+ 'Request failed';
210
+ const meta = extractMetaFromHeaders(res.headers);
211
+ const table = {
212
+ "API_ERROR": ApiErrorError,
213
+ "AVATAR_NOT_FOUND": AvatarNotFoundError,
214
+ "CONVERSION_FAILED": ConversionFailedError,
215
+ "FILE_OPEN_ERROR": FileOpenErrorError,
216
+ "FILE_REQUIRED": FileRequiredError,
217
+ "INSUFFICIENT_CREDITS": InsufficientCreditsError,
218
+ "INTERNAL_SERVER_ERROR": InternalServerErrorError,
219
+ "INVALID_PARAMETER": InvalidParameterError,
220
+ "INVALID_PARAMS": InvalidParamsError,
221
+ "NOT_FOUND": NotFoundError,
222
+ "NO_MATCH": NoMatchError,
223
+ "NO_TRACKING_DATA": NoTrackingDataError,
224
+ "PHONE_INFO_FAILED": PhoneInfoFailedError,
225
+ "RECOGNITION_FAILED": RecognitionFailedError,
226
+ "REQUEST_ENTITY_TOO_LARGE": RequestEntityTooLargeError,
227
+ "SERVICE_BUSY": ServiceBusyError,
228
+ "TIMEZONE_NOT_FOUND": TimezoneNotFoundError,
229
+ "UNAUTHORIZED": UnauthorizedError,
230
+ "UNSUPPORTED_CARRIER": UnsupportedCarrierError,
231
+ "UNSUPPORTED_FORMAT": UnsupportedFormatError,
232
+ "VISITOR_MONTHLY_QUOTA_EXHAUSTED": VisitorMonthlyQuotaExhaustedError,
233
+ };
234
+ const fallback = res.status === 401
235
+ ? UnauthorizedError
236
+ : res.status === 402
237
+ ? InsufficientCreditsError
238
+ : res.status === 404
239
+ ? NotFoundError
240
+ : res.status === 429
241
+ ? ServiceBusyError
242
+ : res.status >= 500
243
+ ? InternalServerErrorError
244
+ : UapiError;
245
+ const Ctor = table[code] || fallback;
246
+ return new Ctor(code, res.status, message, pickDetails(payload), payload ?? body, meta);
247
+ }
@@ -1,10 +1,7 @@
1
1
  import type * as Internal from '../internal/src/index.js';
2
- export declare class UapiError extends Error {
3
- code: string;
4
- status: number;
5
- details?: unknown | undefined;
6
- constructor(code: string, status: number, details?: unknown | undefined);
7
- }
2
+ import { type ResponseMeta } from './errors.js';
3
+ export { UapiError, mapError, extractMetaFromHeaders } from './errors.js';
4
+ export type { RateLimitPolicyEntry, RateLimitStateEntry, ResponseMeta } from './errors.js';
8
5
  export type GetClipzyGetResponse = Internal.GetClipzyGet200Response;
9
6
  export interface GetClipzyGetArgs {
10
7
  /** 片段的唯一 ID。 */
@@ -711,6 +708,7 @@ export interface PostSearchAggregateArgs {
711
708
  export declare class UapiClient {
712
709
  private baseURL;
713
710
  private token?;
711
+ private _lastResponseMeta?;
714
712
  readonly clipzyZaiXianJianTieBan: ClipzyZaiXianJianTieBanApi;
715
713
  readonly "Clipzy 在线剪贴板": ClipzyZaiXianJianTieBanApi;
716
714
  readonly convert: ConvertApi;
@@ -744,6 +742,7 @@ export declare class UapiClient {
744
742
  readonly zhiNengSouSuo: ZhiNengSouSuoApi;
745
743
  readonly "智能搜索": ZhiNengSouSuoApi;
746
744
  constructor(baseURL: string, token?: string);
745
+ get lastResponseMeta(): ResponseMeta | undefined;
747
746
  _request(method: string, path: string, params?: Record<string, unknown>, body?: Record<string, unknown>, headers?: Record<string, string>, responseKind?: 'json' | 'text' | 'arrayBuffer'): Promise<any>;
748
747
  }
749
748
  export declare class ClipzyZaiXianJianTieBanApi {
package/dist/src/index.js CHANGED
@@ -1,11 +1,5 @@
1
- export class UapiError extends Error {
2
- constructor(code, status, details) {
3
- super(`${status} ${code}`);
4
- this.code = code;
5
- this.status = status;
6
- this.details = details;
7
- }
8
- }
1
+ import { extractMetaFromHeaders, mapError } from './errors.js';
2
+ export { UapiError, mapError, extractMetaFromHeaders } from './errors.js';
9
3
  export class UapiClient {
10
4
  constructor(baseURL, token) {
11
5
  this.baseURL = baseURL;
@@ -59,6 +53,9 @@ export class UapiClient {
59
53
  this.zhiNengSouSuo = zhiNengSouSuo;
60
54
  this["智能搜索"] = zhiNengSouSuo;
61
55
  }
56
+ get lastResponseMeta() {
57
+ return this._lastResponseMeta;
58
+ }
62
59
  async _request(method, path, params, body, headers, responseKind = 'json') {
63
60
  const url = new URL(this.baseURL.replace(/\/$/, '') + path);
64
61
  if (params) {
@@ -83,9 +80,11 @@ export class UapiClient {
83
80
  data = await res.json();
84
81
  }
85
82
  catch { }
86
- const code = typeof data === 'object' && data && 'code' in data ? String(data.code ?? 'API_ERROR').toUpperCase() : 'API_ERROR';
87
- throw new UapiError(code, res.status, data);
83
+ const mapped = mapError(res, data);
84
+ this._lastResponseMeta = mapped.meta;
85
+ throw mapped;
88
86
  }
87
+ this._lastResponseMeta = extractMetaFromHeaders(res.headers);
89
88
  if (responseKind === 'arrayBuffer') {
90
89
  return res.arrayBuffer();
91
90
  }
@@ -1 +1 @@
1
- 7.21.0
1
+ 7.17.0
@@ -65,9 +65,10 @@ export interface PostClipzyStoreOperationRequest {
65
65
  export class ClipzyApi extends runtime.BaseAPI {
66
66
 
67
67
  /**
68
- * Creates request options for getClipzyGet without sending the request
68
+ * **此接口用于“最高安全等级”方法。** 您提供第一步中获得的ID,它会返回存储在服务器上的**加密数据**。您需要在自己的客户端中,使用您自己保管的密钥来解密它。
69
+ * 步骤2 (方法一): 获取加密数据
69
70
  */
70
- async getClipzyGetRequestOpts(requestParameters: GetClipzyGetRequest): Promise<runtime.RequestOpts> {
71
+ async getClipzyGetRaw(requestParameters: GetClipzyGetRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<GetClipzyGet200Response>> {
71
72
  if (requestParameters['id'] == null) {
72
73
  throw new runtime.RequiredError(
73
74
  'id',
@@ -86,21 +87,12 @@ export class ClipzyApi extends runtime.BaseAPI {
86
87
 
87
88
  let urlPath = `/api/get`;
88
89
 
89
- return {
90
+ const response = await this.request({
90
91
  path: urlPath,
91
92
  method: 'GET',
92
93
  headers: headerParameters,
93
94
  query: queryParameters,
94
- };
95
- }
96
-
97
- /**
98
- * **此接口用于“最高安全等级”方法。** 您提供第一步中获得的ID,它会返回存储在服务器上的**加密数据**。您需要在自己的客户端中,使用您自己保管的密钥来解密它。
99
- * 步骤2 (方法一): 获取加密数据
100
- */
101
- async getClipzyGetRaw(requestParameters: GetClipzyGetRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<GetClipzyGet200Response>> {
102
- const requestOptions = await this.getClipzyGetRequestOpts(requestParameters);
103
- const response = await this.request(requestOptions, initOverrides);
95
+ }, initOverrides);
104
96
 
105
97
  return new runtime.JSONApiResponse(response, (jsonValue) => GetClipzyGet200ResponseFromJSON(jsonValue));
106
98
  }
@@ -115,9 +107,10 @@ export class ClipzyApi extends runtime.BaseAPI {
115
107
  }
116
108
 
117
109
  /**
118
- * Creates request options for getClipzyRaw without sending the request
110
+ * **此接口用于“方便自动化”方法。** 您提供第一步获得的ID,并附上您自己保管的**解密密钥**作为 `key` 参数。服务器会直接为您解密,并返回纯文本内容。 > [!IMPORTANT] > 查看文档首页的 **cURL 示例**,了解此接口最典型的用法。
111
+ * 步骤2 (方法二): 获取原始文本
119
112
  */
120
- async getClipzyRawRequestOpts(requestParameters: GetClipzyRawRequest): Promise<runtime.RequestOpts> {
113
+ async getClipzyRawRaw(requestParameters: GetClipzyRawRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<string>> {
121
114
  if (requestParameters['id'] == null) {
122
115
  throw new runtime.RequiredError(
123
116
  'id',
@@ -144,21 +137,12 @@ export class ClipzyApi extends runtime.BaseAPI {
144
137
  let urlPath = `/api/raw/{id}`;
145
138
  urlPath = urlPath.replace(`{${"id"}}`, encodeURIComponent(String(requestParameters['id'])));
146
139
 
147
- return {
140
+ const response = await this.request({
148
141
  path: urlPath,
149
142
  method: 'GET',
150
143
  headers: headerParameters,
151
144
  query: queryParameters,
152
- };
153
- }
154
-
155
- /**
156
- * **此接口用于“方便自动化”方法。** 您提供第一步获得的ID,并附上您自己保管的**解密密钥**作为 `key` 参数。服务器会直接为您解密,并返回纯文本内容。 > [!IMPORTANT] > 查看文档首页的 **cURL 示例**,了解此接口最典型的用法。
157
- * 步骤2 (方法二): 获取原始文本
158
- */
159
- async getClipzyRawRaw(requestParameters: GetClipzyRawRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<string>> {
160
- const requestOptions = await this.getClipzyRawRequestOpts(requestParameters);
161
- const response = await this.request(requestOptions, initOverrides);
145
+ }, initOverrides);
162
146
 
163
147
  if (this.isJsonMime(response.headers.get('content-type'))) {
164
148
  return new runtime.JSONApiResponse<string>(response);
@@ -177,9 +161,10 @@ export class ClipzyApi extends runtime.BaseAPI {
177
161
  }
178
162
 
179
163
  /**
180
- * Creates request options for postClipzyStore without sending the request
164
+ * 这是所有流程的第一步。您的客户端应用需要先在本地准备好 **加密后的数据**,然后调用此接口进行上传。成功后,您会得到一个用于后续操作的唯一ID。 > [!NOTE] > 您发送给此接口的应该是**密文**,而不是原始文本。请参考文档首页的JavaScript示例来了解如何在客户端进行加密。
165
+ * 步骤1:上传加密数据
181
166
  */
182
- async postClipzyStoreRequestOpts(requestParameters: PostClipzyStoreOperationRequest): Promise<runtime.RequestOpts> {
167
+ async postClipzyStoreRaw(requestParameters: PostClipzyStoreOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<PostClipzyStore200Response>> {
183
168
  if (requestParameters['postClipzyStoreRequest'] == null) {
184
169
  throw new runtime.RequiredError(
185
170
  'postClipzyStoreRequest',
@@ -196,22 +181,13 @@ export class ClipzyApi extends runtime.BaseAPI {
196
181
 
197
182
  let urlPath = `/api/store`;
198
183
 
199
- return {
184
+ const response = await this.request({
200
185
  path: urlPath,
201
186
  method: 'POST',
202
187
  headers: headerParameters,
203
188
  query: queryParameters,
204
189
  body: PostClipzyStoreRequestToJSON(requestParameters['postClipzyStoreRequest']),
205
- };
206
- }
207
-
208
- /**
209
- * 这是所有流程的第一步。您的客户端应用需要先在本地准备好 **加密后的数据**,然后调用此接口进行上传。成功后,您会得到一个用于后续操作的唯一ID。 > [!NOTE] > 您发送给此接口的应该是**密文**,而不是原始文本。请参考文档首页的JavaScript示例来了解如何在客户端进行加密。
210
- * 步骤1:上传加密数据
211
- */
212
- async postClipzyStoreRaw(requestParameters: PostClipzyStoreOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<PostClipzyStore200Response>> {
213
- const requestOptions = await this.postClipzyStoreRequestOpts(requestParameters);
214
- const response = await this.request(requestOptions, initOverrides);
190
+ }, initOverrides);
215
191
 
216
192
  return new runtime.JSONApiResponse(response, (jsonValue) => PostClipzyStore200ResponseFromJSON(jsonValue));
217
193
  }
@@ -48,9 +48,10 @@ export interface PostConvertJsonOperationRequest {
48
48
  export class ConvertApi extends runtime.BaseAPI {
49
49
 
50
50
  /**
51
- * Creates request options for getConvertUnixtime without sending the request
51
+ * 时间戳和日期字符串,哪个用着更顺手?别纠结了,这个接口让你轻松拥有两种格式! ## 功能概述 这是一个非常智能的转换器。你给它一个 Unix 时间戳,它还你一个人类可读的日期时间;你给它一个日期时间字符串,它还你一个 Unix 时间戳。它会自动识别你输入的是哪种格式。 ## 使用须知 这个接口非常智能,能够自动识别输入格式: - **输入时间戳**:支持10位秒级(如 `1672531200`)和13位毫秒级(如 `1672531200000`)。 - **输入日期字符串**:为了确保准确性,推荐使用 `YYYY-MM-DD HH:mm:ss` 标准格式(如 `2023-01-01 08:00:00`)。 > [!TIP] > 无论你输入哪种格式,响应中都会同时包含标准日期字符串和秒级Unix时间戳,方便你按需取用。 ## 错误处理指南 - **400 Bad Request**: 如果你提供的 `time` 参数既不是有效的时间戳,也不是我们支持的日期格式,就会收到这个错误。请检查你的输入值。
52
+ * 时间戳转换
52
53
  */
53
- async getConvertUnixtimeRequestOpts(requestParameters: GetConvertUnixtimeRequest): Promise<runtime.RequestOpts> {
54
+ async getConvertUnixtimeRaw(requestParameters: GetConvertUnixtimeRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<GetConvertUnixtime200Response>> {
54
55
  if (requestParameters['time'] == null) {
55
56
  throw new runtime.RequiredError(
56
57
  'time',
@@ -69,21 +70,12 @@ export class ConvertApi extends runtime.BaseAPI {
69
70
 
70
71
  let urlPath = `/convert/unixtime`;
71
72
 
72
- return {
73
+ const response = await this.request({
73
74
  path: urlPath,
74
75
  method: 'GET',
75
76
  headers: headerParameters,
76
77
  query: queryParameters,
77
- };
78
- }
79
-
80
- /**
81
- * 时间戳和日期字符串,哪个用着更顺手?别纠结了,这个接口让你轻松拥有两种格式! ## 功能概述 这是一个非常智能的转换器。你给它一个 Unix 时间戳,它还你一个人类可读的日期时间;你给它一个日期时间字符串,它还你一个 Unix 时间戳。它会自动识别你输入的是哪种格式。 ## 使用须知 这个接口非常智能,能够自动识别输入格式: - **输入时间戳**:支持10位秒级(如 `1672531200`)和13位毫秒级(如 `1672531200000`)。 - **输入日期字符串**:为了确保准确性,推荐使用 `YYYY-MM-DD HH:mm:ss` 标准格式(如 `2023-01-01 08:00:00`)。 > [!TIP] > 无论你输入哪种格式,响应中都会同时包含标准日期字符串和秒级Unix时间戳,方便你按需取用。 ## 错误处理指南 - **400 Bad Request**: 如果你提供的 `time` 参数既不是有效的时间戳,也不是我们支持的日期格式,就会收到这个错误。请检查你的输入值。
82
- * 时间戳转换
83
- */
84
- async getConvertUnixtimeRaw(requestParameters: GetConvertUnixtimeRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<GetConvertUnixtime200Response>> {
85
- const requestOptions = await this.getConvertUnixtimeRequestOpts(requestParameters);
86
- const response = await this.request(requestOptions, initOverrides);
78
+ }, initOverrides);
87
79
 
88
80
  return new runtime.JSONApiResponse(response, (jsonValue) => GetConvertUnixtime200ResponseFromJSON(jsonValue));
89
81
  }
@@ -98,9 +90,10 @@ export class ConvertApi extends runtime.BaseAPI {
98
90
  }
99
91
 
100
92
  /**
101
- * Creates request options for postConvertJson without sending the request
93
+ * 还在为一团乱麻的 JSON 字符串头疼吗?这个接口能瞬间让它变得井井有条,赏心悦目。 ## 功能概述 你只需要提供一个原始的、可能是压缩过的或者格式混乱的 JSON 字符串,这个 API 就会返回一个经过美化(带标准缩进和换行)的版本。这在调试 API 响应、或者需要在前端界面清晰展示 JSON 数据时非常有用。 ## 使用须知 > [!NOTE] > **请求格式** > 请注意,待格式化的 JSON 字符串需要被包裹在另一个 JSON 对象中,作为 `content` 字段的值提交。具体格式请参考请求体示例。 ## 错误处理指南 - **400 Bad Request**: 最常见的原因是你提供的 `content` 字符串本身不是一个有效的 JSON。请仔细检查括号、引号是否正确闭合,或者有没有多余的逗号等语法错误。
94
+ * JSON 格式化
102
95
  */
103
- async postConvertJsonRequestOpts(requestParameters: PostConvertJsonOperationRequest): Promise<runtime.RequestOpts> {
96
+ async postConvertJsonRaw(requestParameters: PostConvertJsonOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<PostConvertJson200Response>> {
104
97
  if (requestParameters['postConvertJsonRequest'] == null) {
105
98
  throw new runtime.RequiredError(
106
99
  'postConvertJsonRequest',
@@ -117,22 +110,13 @@ export class ConvertApi extends runtime.BaseAPI {
117
110
 
118
111
  let urlPath = `/convert/json`;
119
112
 
120
- return {
113
+ const response = await this.request({
121
114
  path: urlPath,
122
115
  method: 'POST',
123
116
  headers: headerParameters,
124
117
  query: queryParameters,
125
118
  body: PostConvertJsonRequestToJSON(requestParameters['postConvertJsonRequest']),
126
- };
127
- }
128
-
129
- /**
130
- * 还在为一团乱麻的 JSON 字符串头疼吗?这个接口能瞬间让它变得井井有条,赏心悦目。 ## 功能概述 你只需要提供一个原始的、可能是压缩过的或者格式混乱的 JSON 字符串,这个 API 就会返回一个经过美化(带标准缩进和换行)的版本。这在调试 API 响应、或者需要在前端界面清晰展示 JSON 数据时非常有用。 ## 使用须知 > [!NOTE] > **请求格式** > 请注意,待格式化的 JSON 字符串需要被包裹在另一个 JSON 对象中,作为 `content` 字段的值提交。具体格式请参考请求体示例。 ## 错误处理指南 - **400 Bad Request**: 最常见的原因是你提供的 `content` 字符串本身不是一个有效的 JSON。请仔细检查括号、引号是否正确闭合,或者有没有多余的逗号等语法错误。
131
- * JSON 格式化
132
- */
133
- async postConvertJsonRaw(requestParameters: PostConvertJsonOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<PostConvertJson200Response>> {
134
- const requestOptions = await this.postConvertJsonRequestOpts(requestParameters);
135
- const response = await this.request(requestOptions, initOverrides);
119
+ }, initOverrides);
136
120
 
137
121
  return new runtime.JSONApiResponse(response, (jsonValue) => PostConvertJson200ResponseFromJSON(jsonValue));
138
122
  }
@@ -31,9 +31,10 @@ import {
31
31
  export class DailyApi extends runtime.BaseAPI {
32
32
 
33
33
  /**
34
- * Creates request options for getDailyNewsImage without sending the request
34
+ * 想用一张图快速了解天下大事?这个接口为你一键生成今日新闻摘要,非常适合用在早报、数字看板或应用首页等场景。 ## 功能概述 此接口会实时抓取各大平台的热点新闻,并动态地将它们渲染成一张清晰、美观的摘要图片。你调用接口,直接就能得到一张可以展示的图片。 ## 使用须知 调用此接口时,请务必注意以下两点: 1. **响应格式是图片**:接口成功时直接返回 `image/jpeg` 格式的二进制数据,而非 JSON。请确保你的客户端能正确处理二进制流,例如直接在 `<img>` 标签中显示,或保存为 `.jpg` 文件。 2. **设置合理超时**:由于涉及实时新闻抓取和图片渲染,处理过程可能耗时数秒。建议将客户端请求超时时间设置为至少10秒,以防止因等待过久而失败。 > [!IMPORTANT] > 未能正确处理图片响应或超时设置过短,是导致调用失败的最常见原因。
35
+ * 每日新闻图
35
36
  */
36
- async getDailyNewsImageRequestOpts(): Promise<runtime.RequestOpts> {
37
+ async getDailyNewsImageRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Blob>> {
37
38
  const queryParameters: any = {};
38
39
 
39
40
  const headerParameters: runtime.HTTPHeaders = {};
@@ -41,21 +42,12 @@ export class DailyApi extends runtime.BaseAPI {
41
42
 
42
43
  let urlPath = `/daily/news-image`;
43
44
 
44
- return {
45
+ const response = await this.request({
45
46
  path: urlPath,
46
47
  method: 'GET',
47
48
  headers: headerParameters,
48
49
  query: queryParameters,
49
- };
50
- }
51
-
52
- /**
53
- * 想用一张图快速了解天下大事?这个接口为你一键生成今日新闻摘要,非常适合用在早报、数字看板或应用首页等场景。 ## 功能概述 此接口会实时抓取各大平台的热点新闻,并动态地将它们渲染成一张清晰、美观的摘要图片。你调用接口,直接就能得到一张可以展示的图片。 ## 使用须知 调用此接口时,请务必注意以下两点: 1. **响应格式是图片**:接口成功时直接返回 `image/jpeg` 格式的二进制数据,而非 JSON。请确保你的客户端能正确处理二进制流,例如直接在 `<img>` 标签中显示,或保存为 `.jpg` 文件。 2. **设置合理超时**:由于涉及实时新闻抓取和图片渲染,处理过程可能耗时数秒。建议将客户端请求超时时间设置为至少10秒,以防止因等待过久而失败。 > [!IMPORTANT] > 未能正确处理图片响应或超时设置过短,是导致调用失败的最常见原因。
54
- * 每日新闻图
55
- */
56
- async getDailyNewsImageRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Blob>> {
57
- const requestOptions = await this.getDailyNewsImageRequestOpts();
58
- const response = await this.request(requestOptions, initOverrides);
50
+ }, initOverrides);
59
51
 
60
52
  return new runtime.BlobApiResponse(response);
61
53
  }