@qzsy/pdd-core 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/dist/client.d.ts +68 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +308 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +214 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +187 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/sign.d.ts +46 -0
- package/dist/sign.d.ts.map +1 -0
- package/dist/sign.js +81 -0
- package/dist/sign.js.map +1 -0
- package/dist/token-strategy.d.ts +89 -0
- package/dist/token-strategy.d.ts.map +1 -0
- package/dist/token-strategy.js +159 -0
- package/dist/token-strategy.js.map +1 -0
- package/dist/token.d.ts +45 -0
- package/dist/token.d.ts.map +1 -0
- package/dist/token.js +62 -0
- package/dist/token.js.map +1 -0
- package/dist/types.d.ts +304 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +29 -0
- package/dist/types.js.map +1 -0
- package/package.json +40 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 qzsy
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { PddAccessTokenResponse, PddCallerKind, PddClientCaller, PddClientOptions, PddOAuthTokenRequest, PddRequestOptions, TokenKind, TokenStore } from "./types.ts";
|
|
2
|
+
/**
|
|
3
|
+
* 拼多多 HTTP 客户端。
|
|
4
|
+
*
|
|
5
|
+
* 负责组装公共参数、MD5 签名、解析 JSON、识别 `error_response`,并在令牌失效时重试一次。
|
|
6
|
+
*/
|
|
7
|
+
export declare class PddHttpClient {
|
|
8
|
+
#private;
|
|
9
|
+
/**
|
|
10
|
+
* 应用 `client_id`。
|
|
11
|
+
*/
|
|
12
|
+
readonly clientId: string;
|
|
13
|
+
/**
|
|
14
|
+
* 拼多多 POP 网关地址。
|
|
15
|
+
*/
|
|
16
|
+
readonly baseUrl: string;
|
|
17
|
+
/**
|
|
18
|
+
* OAuth 换票地址。
|
|
19
|
+
*/
|
|
20
|
+
readonly tokenUrl: string;
|
|
21
|
+
/**
|
|
22
|
+
* 令牌缓存。
|
|
23
|
+
*/
|
|
24
|
+
readonly tokenStore: TokenStore;
|
|
25
|
+
/**
|
|
26
|
+
* 默认注入的令牌策略。
|
|
27
|
+
*/
|
|
28
|
+
readonly tokenKind: TokenKind;
|
|
29
|
+
/**
|
|
30
|
+
* 发起方式。
|
|
31
|
+
*/
|
|
32
|
+
readonly callMode: PddCallerKind;
|
|
33
|
+
/**
|
|
34
|
+
* @param caller 应用凭据,以及可选的店铺令牌或代调用身份
|
|
35
|
+
* @param options 可选的地址、存储、超时与 `fetch` 注入
|
|
36
|
+
*/
|
|
37
|
+
constructor(caller: PddClientCaller, options?: PddClientOptions);
|
|
38
|
+
/**
|
|
39
|
+
* 调用一个拼多多官方接口。
|
|
40
|
+
*
|
|
41
|
+
* 成功时返回 `*_response` 内的业务对象;存在 `error_response` 时抛出 `PddApiError`。
|
|
42
|
+
* 令牌失效错误码会清缓存并重试一次。
|
|
43
|
+
*
|
|
44
|
+
* @param type 官方接口名,例如 `pdd.mall.info.get`
|
|
45
|
+
* @param params 业务参数,字段名保持官方 snake_case
|
|
46
|
+
* @param options 鉴权与取消信号
|
|
47
|
+
*/
|
|
48
|
+
call<T>(type: string, params?: object, options?: PddRequestOptions): Promise<T>;
|
|
49
|
+
/**
|
|
50
|
+
* 读取或刷新 `access_token`。
|
|
51
|
+
*
|
|
52
|
+
* 拼多多商家令牌来自 OAuth,不能只用 `client_id` + `client_secret` 换票。
|
|
53
|
+
*
|
|
54
|
+
* @param forceRefresh 为 `true` 时忽略缓存并重新申请
|
|
55
|
+
* @returns 接口调用凭证
|
|
56
|
+
*/
|
|
57
|
+
getAccessToken(forceRefresh?: boolean): Promise<string>;
|
|
58
|
+
/**
|
|
59
|
+
* 用授权码或刷新令牌换取 `access_token`。
|
|
60
|
+
*
|
|
61
|
+
* 对应官方接口:`POST https://open-api.pinduoduo.com/oauth/token`
|
|
62
|
+
*
|
|
63
|
+
* @param body OAuth 请求体
|
|
64
|
+
* @returns 令牌与授权主体信息
|
|
65
|
+
*/
|
|
66
|
+
oauthToken(body: PddOAuthTokenRequest): Promise<PddAccessTokenResponse>;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAEV,sBAAsB,EACtB,aAAa,EACb,eAAe,EACf,gBAAgB,EAEhB,oBAAoB,EACpB,iBAAiB,EACjB,SAAS,EACT,UAAU,EACX,MAAM,YAAY,CAAC;AAQpB;;;;GAIG;AACH,qBAAa,aAAa;;IACxB;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAEhC;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAE9B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IASjC;;;OAGG;IACH,YAAY,MAAM,EAAE,eAAe,EAAE,OAAO,GAAE,gBAAqB,EAiClE;IAED;;;;;;;;;OASG;IACG,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,CAAC,CAAC,CAkC5F;IAED;;;;;;;OAOG;IACH,cAAc,CAAC,YAAY,UAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAEpD;IAED;;;;;;;OAOG;IACG,UAAU,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAqC5E;CA+HF"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import { PddApiError, PddError, PddHttpError, STALE_ACCESS_TOKEN_CODES } from "./errors.js";
|
|
2
|
+
import { isPddFile, pddResponseKey, signPddParams, stringifyPddParams } from "./sign.js";
|
|
3
|
+
import { MemoryTokenStore } from "./token.js";
|
|
4
|
+
import { AuthorizerAccessTokenStrategy, MerchantAccessTokenStrategy, } from "./token-strategy.js";
|
|
5
|
+
import { isAuthorizerCaller } from "./types.js";
|
|
6
|
+
import { DEFAULT_PDD_BASE_URL, DEFAULT_PDD_TOKEN_URL, DEFAULT_TIMEOUT_MS, } from "./types.js";
|
|
7
|
+
/**
|
|
8
|
+
* 拼多多 HTTP 客户端。
|
|
9
|
+
*
|
|
10
|
+
* 负责组装公共参数、MD5 签名、解析 JSON、识别 `error_response`,并在令牌失效时重试一次。
|
|
11
|
+
*/
|
|
12
|
+
export class PddHttpClient {
|
|
13
|
+
/**
|
|
14
|
+
* 应用 `client_id`。
|
|
15
|
+
*/
|
|
16
|
+
clientId;
|
|
17
|
+
/**
|
|
18
|
+
* 拼多多 POP 网关地址。
|
|
19
|
+
*/
|
|
20
|
+
baseUrl;
|
|
21
|
+
/**
|
|
22
|
+
* OAuth 换票地址。
|
|
23
|
+
*/
|
|
24
|
+
tokenUrl;
|
|
25
|
+
/**
|
|
26
|
+
* 令牌缓存。
|
|
27
|
+
*/
|
|
28
|
+
tokenStore;
|
|
29
|
+
/**
|
|
30
|
+
* 默认注入的令牌策略。
|
|
31
|
+
*/
|
|
32
|
+
tokenKind;
|
|
33
|
+
/**
|
|
34
|
+
* 发起方式。
|
|
35
|
+
*/
|
|
36
|
+
callMode;
|
|
37
|
+
#clientSecret;
|
|
38
|
+
#fetch;
|
|
39
|
+
#userAgent;
|
|
40
|
+
#timeoutMs;
|
|
41
|
+
#now;
|
|
42
|
+
#accessTokenStrategy;
|
|
43
|
+
/**
|
|
44
|
+
* @param caller 应用凭据,以及可选的店铺令牌或代调用身份
|
|
45
|
+
* @param options 可选的地址、存储、超时与 `fetch` 注入
|
|
46
|
+
*/
|
|
47
|
+
constructor(caller, options = {}) {
|
|
48
|
+
const authorizer = isAuthorizerCaller(caller);
|
|
49
|
+
this.clientId = caller.clientId;
|
|
50
|
+
this.#clientSecret = caller.clientSecret;
|
|
51
|
+
this.baseUrl = options.baseUrl ?? DEFAULT_PDD_BASE_URL;
|
|
52
|
+
this.tokenUrl = options.tokenUrl ?? DEFAULT_PDD_TOKEN_URL;
|
|
53
|
+
this.tokenStore = options.tokenStore ?? new MemoryTokenStore();
|
|
54
|
+
this.tokenKind = options.tokenKind ?? "access_token";
|
|
55
|
+
this.callMode = authorizer ? "authorizer" : this.tokenKind === "none" ? "app" : "merchant";
|
|
56
|
+
this.#fetch = options.fetch ?? globalThis.fetch.bind(globalThis);
|
|
57
|
+
this.#userAgent = options.userAgent ?? "@qzsy/pdd-core";
|
|
58
|
+
this.#timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
59
|
+
this.#now = options.now ?? Date.now;
|
|
60
|
+
this.#accessTokenStrategy = authorizer
|
|
61
|
+
? new AuthorizerAccessTokenStrategy({
|
|
62
|
+
clientId: caller.clientId,
|
|
63
|
+
ownerId: caller.ownerId,
|
|
64
|
+
tokenStore: this.tokenStore,
|
|
65
|
+
getAccessToken: caller.getAccessToken,
|
|
66
|
+
})
|
|
67
|
+
: new MerchantAccessTokenStrategy({
|
|
68
|
+
clientId: caller.clientId,
|
|
69
|
+
ownerId: caller.ownerId,
|
|
70
|
+
tokenStore: this.tokenStore,
|
|
71
|
+
accessToken: caller.accessToken,
|
|
72
|
+
refreshToken: caller.refreshToken,
|
|
73
|
+
expiresIn: caller.expiresIn,
|
|
74
|
+
refresh: (refreshToken) => this.oauthToken({
|
|
75
|
+
grant_type: "refresh_token",
|
|
76
|
+
refresh_token: refreshToken,
|
|
77
|
+
}),
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* 调用一个拼多多官方接口。
|
|
82
|
+
*
|
|
83
|
+
* 成功时返回 `*_response` 内的业务对象;存在 `error_response` 时抛出 `PddApiError`。
|
|
84
|
+
* 令牌失效错误码会清缓存并重试一次。
|
|
85
|
+
*
|
|
86
|
+
* @param type 官方接口名,例如 `pdd.mall.info.get`
|
|
87
|
+
* @param params 业务参数,字段名保持官方 snake_case
|
|
88
|
+
* @param options 鉴权与取消信号
|
|
89
|
+
*/
|
|
90
|
+
async call(type, params = {}, options = {}) {
|
|
91
|
+
const auth = options.auth ?? this.tokenKind;
|
|
92
|
+
const result = await this.#send(type, params, options, auth, false);
|
|
93
|
+
if (result.ok === false &&
|
|
94
|
+
auth === "access_token" &&
|
|
95
|
+
STALE_ACCESS_TOKEN_CODES.has(result.errorCode)) {
|
|
96
|
+
await this.#accessTokenStrategy.invalidate();
|
|
97
|
+
const retried = await this.#send(type, params, options, auth, true);
|
|
98
|
+
if (retried.ok) {
|
|
99
|
+
return retried.data;
|
|
100
|
+
}
|
|
101
|
+
throw new PddApiError(this.#errorContext(type, auth, {
|
|
102
|
+
errorCode: retried.errorCode,
|
|
103
|
+
errorMsg: retried.errorMsg,
|
|
104
|
+
subCode: retried.subCode,
|
|
105
|
+
subMsg: retried.subMsg,
|
|
106
|
+
requestId: retried.requestId,
|
|
107
|
+
}));
|
|
108
|
+
}
|
|
109
|
+
if (result.ok === false) {
|
|
110
|
+
throw new PddApiError(this.#errorContext(type, auth, {
|
|
111
|
+
errorCode: result.errorCode,
|
|
112
|
+
errorMsg: result.errorMsg,
|
|
113
|
+
subCode: result.subCode,
|
|
114
|
+
subMsg: result.subMsg,
|
|
115
|
+
requestId: result.requestId,
|
|
116
|
+
}));
|
|
117
|
+
}
|
|
118
|
+
return result.data;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* 读取或刷新 `access_token`。
|
|
122
|
+
*
|
|
123
|
+
* 拼多多商家令牌来自 OAuth,不能只用 `client_id` + `client_secret` 换票。
|
|
124
|
+
*
|
|
125
|
+
* @param forceRefresh 为 `true` 时忽略缓存并重新申请
|
|
126
|
+
* @returns 接口调用凭证
|
|
127
|
+
*/
|
|
128
|
+
getAccessToken(forceRefresh = false) {
|
|
129
|
+
return this.#accessTokenStrategy.getAccessToken(forceRefresh);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* 用授权码或刷新令牌换取 `access_token`。
|
|
133
|
+
*
|
|
134
|
+
* 对应官方接口:`POST https://open-api.pinduoduo.com/oauth/token`
|
|
135
|
+
*
|
|
136
|
+
* @param body OAuth 请求体
|
|
137
|
+
* @returns 令牌与授权主体信息
|
|
138
|
+
*/
|
|
139
|
+
async oauthToken(body) {
|
|
140
|
+
const payload = {
|
|
141
|
+
client_id: this.clientId,
|
|
142
|
+
client_secret: this.#clientSecret,
|
|
143
|
+
grant_type: body.grant_type,
|
|
144
|
+
code: body.code,
|
|
145
|
+
refresh_token: body.refresh_token,
|
|
146
|
+
};
|
|
147
|
+
const headers = new Headers();
|
|
148
|
+
headers.set("user-agent", this.#userAgent);
|
|
149
|
+
headers.set("accept", "application/json");
|
|
150
|
+
headers.set("content-type", "application/json");
|
|
151
|
+
const signal = AbortSignal.timeout(this.#timeoutMs);
|
|
152
|
+
let response;
|
|
153
|
+
try {
|
|
154
|
+
response = await this.#fetch(this.tokenUrl, {
|
|
155
|
+
method: "POST",
|
|
156
|
+
headers,
|
|
157
|
+
body: JSON.stringify(payload),
|
|
158
|
+
signal,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
catch (cause) {
|
|
162
|
+
throw new PddHttpError("Pinduoduo OAuth request failed", this.#errorContext("/oauth/token", "none", {
|
|
163
|
+
status: 0,
|
|
164
|
+
cause,
|
|
165
|
+
}));
|
|
166
|
+
}
|
|
167
|
+
const parsed = await this.#readJson(response, "/oauth/token", "none");
|
|
168
|
+
const failure = readPddFailure(parsed);
|
|
169
|
+
if (failure) {
|
|
170
|
+
throw new PddApiError(this.#errorContext("/oauth/token", "none", failure));
|
|
171
|
+
}
|
|
172
|
+
return parsed;
|
|
173
|
+
}
|
|
174
|
+
async #send(type, params, options, auth, forceTokenRefresh) {
|
|
175
|
+
const query = stringifyPddParams(params);
|
|
176
|
+
query.type = type;
|
|
177
|
+
query.client_id = this.clientId;
|
|
178
|
+
query.timestamp = String(Math.floor(this.#now() / 1000));
|
|
179
|
+
query.data_type = "JSON";
|
|
180
|
+
if (auth === "access_token") {
|
|
181
|
+
query.access_token = await this.getAccessToken(forceTokenRefresh);
|
|
182
|
+
}
|
|
183
|
+
query.sign = signPddParams(query, this.#clientSecret);
|
|
184
|
+
const files = collectPddFiles(params);
|
|
185
|
+
const headers = new Headers(options.headers);
|
|
186
|
+
headers.set("user-agent", this.#userAgent);
|
|
187
|
+
headers.set("accept", "application/json");
|
|
188
|
+
let body;
|
|
189
|
+
if (Object.keys(files).length > 0) {
|
|
190
|
+
body = new FormData();
|
|
191
|
+
for (const [key, value] of Object.entries(query)) {
|
|
192
|
+
body.append(key, value);
|
|
193
|
+
}
|
|
194
|
+
for (const [key, file] of Object.entries(files)) {
|
|
195
|
+
body.append(key, file);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
headers.set("content-type", "application/x-www-form-urlencoded;charset=utf-8");
|
|
200
|
+
body = new URLSearchParams(query);
|
|
201
|
+
}
|
|
202
|
+
const signal = options.signal ?? AbortSignal.timeout(this.#timeoutMs);
|
|
203
|
+
let response;
|
|
204
|
+
try {
|
|
205
|
+
response = await this.#fetch(this.baseUrl, {
|
|
206
|
+
method: "POST",
|
|
207
|
+
headers,
|
|
208
|
+
body,
|
|
209
|
+
signal,
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
catch (cause) {
|
|
213
|
+
throw new PddHttpError("Pinduoduo HTTP request failed", this.#errorContext(type, auth, { status: 0, cause }));
|
|
214
|
+
}
|
|
215
|
+
const parsed = await this.#readJson(response, type, auth);
|
|
216
|
+
const failure = readPddFailure(parsed);
|
|
217
|
+
if (failure) {
|
|
218
|
+
return { ok: false, ...failure };
|
|
219
|
+
}
|
|
220
|
+
return { ok: true, data: unwrapPddResponse(type, parsed, options.responseKey) };
|
|
221
|
+
}
|
|
222
|
+
async #readJson(response, type, auth) {
|
|
223
|
+
const text = await response.text();
|
|
224
|
+
if (!response.ok) {
|
|
225
|
+
throw new PddHttpError(`Pinduoduo HTTP ${response.status}`, this.#errorContext(type, auth, {
|
|
226
|
+
status: response.status,
|
|
227
|
+
bodyText: text.slice(0, 500),
|
|
228
|
+
}));
|
|
229
|
+
}
|
|
230
|
+
if (text.length === 0) {
|
|
231
|
+
return {};
|
|
232
|
+
}
|
|
233
|
+
try {
|
|
234
|
+
return JSON.parse(text);
|
|
235
|
+
}
|
|
236
|
+
catch (cause) {
|
|
237
|
+
throw new PddHttpError("Pinduoduo returned non-JSON body", this.#errorContext(type, auth, {
|
|
238
|
+
status: response.status,
|
|
239
|
+
bodyText: text.slice(0, 500),
|
|
240
|
+
cause,
|
|
241
|
+
}));
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
#errorContext(type, auth, extra = {}) {
|
|
245
|
+
return {
|
|
246
|
+
type,
|
|
247
|
+
method: "POST",
|
|
248
|
+
auth,
|
|
249
|
+
callMode: this.callMode,
|
|
250
|
+
clientId: this.clientId,
|
|
251
|
+
errorCode: extra.errorCode ?? 0,
|
|
252
|
+
errorMsg: extra.errorMsg ?? "",
|
|
253
|
+
subCode: extra.subCode,
|
|
254
|
+
subMsg: extra.subMsg,
|
|
255
|
+
requestId: extra.requestId,
|
|
256
|
+
status: extra.status ?? 0,
|
|
257
|
+
bodyText: extra.bodyText,
|
|
258
|
+
cause: extra.cause,
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
function readPddFailure(body) {
|
|
263
|
+
if (body === null || typeof body !== "object") {
|
|
264
|
+
return undefined;
|
|
265
|
+
}
|
|
266
|
+
const envelope = body.error_response;
|
|
267
|
+
if (!envelope) {
|
|
268
|
+
return undefined;
|
|
269
|
+
}
|
|
270
|
+
return {
|
|
271
|
+
errorCode: envelope.error_code ?? 0,
|
|
272
|
+
errorMsg: envelope.error_msg ?? envelope.sub_msg ?? "",
|
|
273
|
+
subCode: envelope.sub_code,
|
|
274
|
+
subMsg: envelope.sub_msg,
|
|
275
|
+
requestId: envelope.request_id,
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
function collectPddFiles(params) {
|
|
279
|
+
const files = {};
|
|
280
|
+
for (const [key, value] of Object.entries(params)) {
|
|
281
|
+
if (isPddFile(value)) {
|
|
282
|
+
files[key] = value;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
return files;
|
|
286
|
+
}
|
|
287
|
+
function unwrapPddResponse(type, body, responseKey) {
|
|
288
|
+
if (body === null || typeof body !== "object") {
|
|
289
|
+
throw new PddError("拼多多返回了无法解析的成功体。", {
|
|
290
|
+
kind: "http",
|
|
291
|
+
type,
|
|
292
|
+
method: "POST",
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
const record = body;
|
|
296
|
+
if (responseKey && responseKey in record) {
|
|
297
|
+
return record[responseKey];
|
|
298
|
+
}
|
|
299
|
+
const key = pddResponseKey(type);
|
|
300
|
+
if (key in record) {
|
|
301
|
+
return record[key];
|
|
302
|
+
}
|
|
303
|
+
if ("open_api_response" in record) {
|
|
304
|
+
return record.open_api_response;
|
|
305
|
+
}
|
|
306
|
+
return record;
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import type { AuthMode, PddCallerKind } from "./types.ts";
|
|
2
|
+
/**
|
|
3
|
+
* 错误分类。
|
|
4
|
+
*
|
|
5
|
+
* - `http`:网络、非 2xx、非 JSON
|
|
6
|
+
* - `api`:拼多多返回 `error_response`
|
|
7
|
+
* - `config`:本地配置不足,例如商家接口缺少 `access_token`
|
|
8
|
+
*/
|
|
9
|
+
export type PddErrorKind = "http" | "api" | "config";
|
|
10
|
+
/**
|
|
11
|
+
* 统一异常上下文,便于日志与排障。
|
|
12
|
+
*/
|
|
13
|
+
export interface PddErrorContext {
|
|
14
|
+
/**
|
|
15
|
+
* 错误分类。
|
|
16
|
+
*/
|
|
17
|
+
kind: PddErrorKind;
|
|
18
|
+
/**
|
|
19
|
+
* 官方接口名,例如 `pdd.mall.info.get`。OAuth 换票时为 `/oauth/token`。
|
|
20
|
+
*/
|
|
21
|
+
type?: string;
|
|
22
|
+
/**
|
|
23
|
+
* HTTP 方法。
|
|
24
|
+
*/
|
|
25
|
+
method?: string;
|
|
26
|
+
/**
|
|
27
|
+
* 发起方式。`merchant` 商家自己调用,`authorizer` 调用方注入令牌,`app` 仅应用签名。
|
|
28
|
+
*/
|
|
29
|
+
callMode?: PddCallerKind;
|
|
30
|
+
/**
|
|
31
|
+
* 应用 `client_id`。
|
|
32
|
+
*/
|
|
33
|
+
clientId?: string;
|
|
34
|
+
/**
|
|
35
|
+
* 本次请求的鉴权方式。
|
|
36
|
+
*/
|
|
37
|
+
auth?: AuthMode;
|
|
38
|
+
/**
|
|
39
|
+
* 拼多多主错误码。HTTP 失败时可能不存在。
|
|
40
|
+
*/
|
|
41
|
+
errorCode?: number;
|
|
42
|
+
/**
|
|
43
|
+
* 拼多多主错误信息。
|
|
44
|
+
*/
|
|
45
|
+
errorMsg?: string;
|
|
46
|
+
/**
|
|
47
|
+
* 子错误码。
|
|
48
|
+
*/
|
|
49
|
+
subCode?: number | string;
|
|
50
|
+
/**
|
|
51
|
+
* 子错误信息。
|
|
52
|
+
*/
|
|
53
|
+
subMsg?: string;
|
|
54
|
+
/**
|
|
55
|
+
* 平台返回的请求追踪 ID。
|
|
56
|
+
*/
|
|
57
|
+
requestId?: string;
|
|
58
|
+
/**
|
|
59
|
+
* HTTP 状态码。请求尚未发出时为 `0`。
|
|
60
|
+
*/
|
|
61
|
+
status?: number;
|
|
62
|
+
/**
|
|
63
|
+
* 响应正文截断预览。
|
|
64
|
+
*/
|
|
65
|
+
bodyText?: string;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* 构造统一异常时的可选字段。
|
|
69
|
+
*/
|
|
70
|
+
export interface PddErrorInit extends Partial<PddErrorContext> {
|
|
71
|
+
/**
|
|
72
|
+
* 原始异常。
|
|
73
|
+
*/
|
|
74
|
+
cause?: unknown;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* 把上下文拼进错误文案。
|
|
78
|
+
*
|
|
79
|
+
* @param fallback 没有上下文时的兜底文案
|
|
80
|
+
* @param ctx 排查字段
|
|
81
|
+
*/
|
|
82
|
+
export declare function formatPddErrorMessage(fallback: string, ctx: Partial<PddErrorContext>): string;
|
|
83
|
+
/**
|
|
84
|
+
* SDK 错误基类。HTTP / 业务 / 配置错误都挂在这棵树上,可用 `instanceof PddError` 统一捕获。
|
|
85
|
+
*/
|
|
86
|
+
export declare class PddError extends Error {
|
|
87
|
+
readonly name: string;
|
|
88
|
+
/**
|
|
89
|
+
* 错误分类。
|
|
90
|
+
*/
|
|
91
|
+
readonly kind: PddErrorKind;
|
|
92
|
+
/**
|
|
93
|
+
* 官方接口名。
|
|
94
|
+
*/
|
|
95
|
+
readonly type?: string;
|
|
96
|
+
/**
|
|
97
|
+
* HTTP 方法。
|
|
98
|
+
*/
|
|
99
|
+
readonly method?: string;
|
|
100
|
+
/**
|
|
101
|
+
* 发起方式。
|
|
102
|
+
*/
|
|
103
|
+
readonly callMode?: PddCallerKind;
|
|
104
|
+
/**
|
|
105
|
+
* 应用 `client_id`。
|
|
106
|
+
*/
|
|
107
|
+
readonly clientId?: string;
|
|
108
|
+
/**
|
|
109
|
+
* 本次请求的鉴权方式。
|
|
110
|
+
*/
|
|
111
|
+
readonly auth?: AuthMode;
|
|
112
|
+
/**
|
|
113
|
+
* 拼多多主错误码。
|
|
114
|
+
*/
|
|
115
|
+
readonly errorCode?: number;
|
|
116
|
+
/**
|
|
117
|
+
* 拼多多主错误信息。
|
|
118
|
+
*/
|
|
119
|
+
readonly errorMsg?: string;
|
|
120
|
+
/**
|
|
121
|
+
* 子错误码。
|
|
122
|
+
*/
|
|
123
|
+
readonly subCode?: number | string;
|
|
124
|
+
/**
|
|
125
|
+
* 子错误信息。
|
|
126
|
+
*/
|
|
127
|
+
readonly subMsg?: string;
|
|
128
|
+
/**
|
|
129
|
+
* 平台返回的请求追踪 ID。
|
|
130
|
+
*/
|
|
131
|
+
readonly requestId?: string;
|
|
132
|
+
/**
|
|
133
|
+
* HTTP 状态码。
|
|
134
|
+
*/
|
|
135
|
+
readonly status?: number;
|
|
136
|
+
/**
|
|
137
|
+
* 响应正文截断预览。
|
|
138
|
+
*/
|
|
139
|
+
readonly bodyText?: string;
|
|
140
|
+
/**
|
|
141
|
+
* @param message 错误说明
|
|
142
|
+
* @param init 排查上下文字段
|
|
143
|
+
*/
|
|
144
|
+
constructor(message: string, init?: PddErrorInit);
|
|
145
|
+
/**
|
|
146
|
+
* 序列化为结构化字段,便于打日志。
|
|
147
|
+
*
|
|
148
|
+
* @returns 名称、文案与排查上下文
|
|
149
|
+
*/
|
|
150
|
+
toJSON(): PddErrorContext & {
|
|
151
|
+
name: string;
|
|
152
|
+
message: string;
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* HTTP 层失败:网络错误、非 2xx、或响应不是 JSON。
|
|
157
|
+
*/
|
|
158
|
+
export declare class PddHttpError extends PddError {
|
|
159
|
+
readonly name = "PddHttpError";
|
|
160
|
+
/**
|
|
161
|
+
* HTTP 状态码。请求尚未发出时为 `0`。
|
|
162
|
+
*/
|
|
163
|
+
readonly status: number;
|
|
164
|
+
/**
|
|
165
|
+
* 官方接口名或 OAuth path。
|
|
166
|
+
*/
|
|
167
|
+
readonly type: string;
|
|
168
|
+
/**
|
|
169
|
+
* @param message 错误说明
|
|
170
|
+
* @param init.status HTTP 状态码
|
|
171
|
+
* @param init.type 官方接口名
|
|
172
|
+
* @param init.bodyText 响应正文截断
|
|
173
|
+
* @param init.cause 原始异常
|
|
174
|
+
*/
|
|
175
|
+
constructor(message: string, init: PddErrorInit & {
|
|
176
|
+
status: number;
|
|
177
|
+
type: string;
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* 拼多多业务错误:HTTP 成功但存在 `error_response`。
|
|
182
|
+
*/
|
|
183
|
+
export declare class PddApiError extends PddError {
|
|
184
|
+
readonly name = "PddApiError";
|
|
185
|
+
/**
|
|
186
|
+
* 拼多多返回的主错误码。
|
|
187
|
+
*/
|
|
188
|
+
readonly errorCode: number;
|
|
189
|
+
/**
|
|
190
|
+
* 拼多多返回的主错误信息。
|
|
191
|
+
*/
|
|
192
|
+
readonly errorMsg: string;
|
|
193
|
+
/**
|
|
194
|
+
* 官方接口名。
|
|
195
|
+
*/
|
|
196
|
+
readonly type: string;
|
|
197
|
+
/**
|
|
198
|
+
* @param init.errorCode 主错误码
|
|
199
|
+
* @param init.errorMsg 主错误信息
|
|
200
|
+
* @param init.type 官方接口名
|
|
201
|
+
*/
|
|
202
|
+
constructor(init: PddErrorInit & {
|
|
203
|
+
errorCode: number;
|
|
204
|
+
errorMsg: string;
|
|
205
|
+
type: string;
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* 视为令牌失效、需要刷新后重试一次的错误码。
|
|
210
|
+
*
|
|
211
|
+
* - `10019`:access_token 已过期
|
|
212
|
+
*/
|
|
213
|
+
export declare const STALE_ACCESS_TOKEN_CODES: ReadonlySet<number>;
|
|
214
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|