@unifyport/sdk-node 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 +19 -0
- package/dist/core/errors.d.ts +54 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +54 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/pagination.d.ts +13 -0
- package/dist/core/pagination.d.ts.map +1 -0
- package/dist/core/pagination.js +65 -0
- package/dist/core/pagination.js.map +1 -0
- package/dist/core/runtime.d.ts +5 -0
- package/dist/core/runtime.d.ts.map +1 -0
- package/dist/core/runtime.js +570 -0
- package/dist/core/runtime.js.map +1 -0
- package/dist/core/types.d.ts +82 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/device/index.d.ts +9 -0
- package/dist/device/index.d.ts.map +1 -0
- package/dist/device/index.js +6 -0
- package/dist/device/index.js.map +1 -0
- package/dist/generated/device/client.d.ts +140 -0
- package/dist/generated/device/client.d.ts.map +1 -0
- package/dist/generated/device/client.js +724 -0
- package/dist/generated/device/client.js.map +1 -0
- package/dist/generated/device/operation-catalog.d.ts +8333 -0
- package/dist/generated/device/operation-catalog.d.ts.map +1 -0
- package/dist/generated/device/operation-catalog.js +10144 -0
- package/dist/generated/device/operation-catalog.js.map +1 -0
- package/dist/generated/device/schema.d.ts +3300 -0
- package/dist/generated/device/schema.d.ts.map +1 -0
- package/dist/generated/device/schema.js +2 -0
- package/dist/generated/device/schema.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/package.json +43 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 UnifyPort
|
|
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/README.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# `@unifyport/sdk-node`
|
|
2
|
+
|
|
3
|
+
面向 Node.js/TypeScript 的 UnifyPort Device API SDK,提供 `UnifyPortDeviceClient`,并通过
|
|
4
|
+
`X-Api-Key` 保持固定认证边界以及统一的 timeout、错误和安全重试模型。Device API 内的 provider
|
|
5
|
+
账号管理、授权和运行态 operation 仍由该客户端提供。
|
|
6
|
+
|
|
7
|
+
## 安装
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @unifyport/sdk-node
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
完整用法、契约治理和安全说明见
|
|
14
|
+
[项目 README](https://github.com/Unify-Port/UnifyPort-SDK-Nodejs#readme)。公开发布前必须运行:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
pnpm check
|
|
18
|
+
pnpm public:check
|
|
19
|
+
```
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { ApiName } from "./types.js";
|
|
2
|
+
interface ErrorContext {
|
|
3
|
+
readonly api?: ApiName;
|
|
4
|
+
readonly operationId?: string;
|
|
5
|
+
readonly cause?: unknown;
|
|
6
|
+
}
|
|
7
|
+
export declare class UnifyPortError extends Error {
|
|
8
|
+
readonly api: ApiName | undefined;
|
|
9
|
+
readonly operationId: string | undefined;
|
|
10
|
+
constructor(message: string, context?: ErrorContext);
|
|
11
|
+
}
|
|
12
|
+
export declare class UnifyPortConfigurationError extends UnifyPortError {
|
|
13
|
+
}
|
|
14
|
+
interface RequestErrorContext extends ErrorContext {
|
|
15
|
+
readonly url: string;
|
|
16
|
+
}
|
|
17
|
+
export declare class UnifyPortNetworkError extends UnifyPortError {
|
|
18
|
+
readonly url: string;
|
|
19
|
+
constructor(message: string, context: RequestErrorContext);
|
|
20
|
+
}
|
|
21
|
+
export declare class UnifyPortTimeoutError extends UnifyPortNetworkError {
|
|
22
|
+
readonly timeoutMs: number;
|
|
23
|
+
constructor(message: string, context: RequestErrorContext & {
|
|
24
|
+
readonly timeoutMs: number;
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
export declare class UnifyPortAbortError extends UnifyPortNetworkError {
|
|
28
|
+
}
|
|
29
|
+
interface ResponseParseErrorContext extends Omit<ErrorContext, "cause"> {
|
|
30
|
+
readonly status?: number;
|
|
31
|
+
readonly requestId?: string;
|
|
32
|
+
}
|
|
33
|
+
export declare class UnifyPortResponseParseError extends UnifyPortError {
|
|
34
|
+
readonly status: number | undefined;
|
|
35
|
+
readonly requestId: string | undefined;
|
|
36
|
+
constructor(message: string, context?: ResponseParseErrorContext);
|
|
37
|
+
}
|
|
38
|
+
export declare class UnifyPortPaginationError extends UnifyPortError {
|
|
39
|
+
}
|
|
40
|
+
interface ApiErrorContext extends ErrorContext {
|
|
41
|
+
readonly status: number;
|
|
42
|
+
readonly code: string;
|
|
43
|
+
readonly requestId: string | undefined;
|
|
44
|
+
readonly details?: unknown;
|
|
45
|
+
}
|
|
46
|
+
export declare class UnifyPortApiError extends UnifyPortError {
|
|
47
|
+
readonly status: number;
|
|
48
|
+
readonly code: string;
|
|
49
|
+
readonly requestId: string | undefined;
|
|
50
|
+
readonly details: unknown;
|
|
51
|
+
constructor(message: string, context: ApiErrorContext);
|
|
52
|
+
}
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,UAAU,YAAY;IACpB,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,qBAAa,cAAe,SAAQ,KAAK;IACvC,SAAgB,GAAG,EAAE,OAAO,GAAG,SAAS,CAAC;IACzC,SAAgB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;gBAE7B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB;CAM/D;AAED,qBAAa,2BAA4B,SAAQ,cAAc;CAAG;AAElE,UAAU,mBAAoB,SAAQ,YAAY;IAChD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,qBAAsB,SAAQ,cAAc;IACvD,SAAgB,GAAG,EAAE,MAAM,CAAC;gBAET,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB;CAIjE;AAED,qBAAa,qBAAsB,SAAQ,qBAAqB;IAC9D,SAAgB,SAAS,EAAE,MAAM,CAAC;gBAGhC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,mBAAmB,GAAG;QAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;KAAE;CAKhE;AAED,qBAAa,mBAAoB,SAAQ,qBAAqB;CAAG;AAEjE,UAAU,yBAA0B,SAAQ,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC;IACrE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,qBAAa,2BAA4B,SAAQ,cAAc;IAC7D,SAAgB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,SAAgB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;gBAE3B,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,yBAA8B;CAM5E;AAED,qBAAa,wBAAyB,SAAQ,cAAc;CAAG;AAE/D,UAAU,eAAgB,SAAQ,YAAY;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,qBAAa,iBAAkB,SAAQ,cAAc;IACnD,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,SAAgB,OAAO,EAAE,OAAO,CAAC;gBAEd,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe;CAO7D"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export class UnifyPortError extends Error {
|
|
2
|
+
api;
|
|
3
|
+
operationId;
|
|
4
|
+
constructor(message, context = {}) {
|
|
5
|
+
super(message, context.cause === undefined ? undefined : { cause: context.cause });
|
|
6
|
+
this.name = new.target.name;
|
|
7
|
+
this.api = context.api;
|
|
8
|
+
this.operationId = context.operationId;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export class UnifyPortConfigurationError extends UnifyPortError {
|
|
12
|
+
}
|
|
13
|
+
export class UnifyPortNetworkError extends UnifyPortError {
|
|
14
|
+
url;
|
|
15
|
+
constructor(message, context) {
|
|
16
|
+
super(message, context);
|
|
17
|
+
this.url = context.url;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export class UnifyPortTimeoutError extends UnifyPortNetworkError {
|
|
21
|
+
timeoutMs;
|
|
22
|
+
constructor(message, context) {
|
|
23
|
+
super(message, context);
|
|
24
|
+
this.timeoutMs = context.timeoutMs;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export class UnifyPortAbortError extends UnifyPortNetworkError {
|
|
28
|
+
}
|
|
29
|
+
export class UnifyPortResponseParseError extends UnifyPortError {
|
|
30
|
+
status;
|
|
31
|
+
requestId;
|
|
32
|
+
constructor(message, context = {}) {
|
|
33
|
+
// Response/header/cause 都可能包含 secret;解析错误只保留筛选后的 HTTP 元数据。
|
|
34
|
+
super(message, context);
|
|
35
|
+
this.status = context.status;
|
|
36
|
+
this.requestId = context.requestId;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export class UnifyPortPaginationError extends UnifyPortError {
|
|
40
|
+
}
|
|
41
|
+
export class UnifyPortApiError extends UnifyPortError {
|
|
42
|
+
status;
|
|
43
|
+
code;
|
|
44
|
+
requestId;
|
|
45
|
+
details;
|
|
46
|
+
constructor(message, context) {
|
|
47
|
+
super(message, context);
|
|
48
|
+
this.status = context.status;
|
|
49
|
+
this.code = context.code;
|
|
50
|
+
this.requestId = context.requestId;
|
|
51
|
+
this.details = context.details;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvB,GAAG,CAAsB;IACzB,WAAW,CAAqB;IAEhD,YAAmB,OAAe,EAAE,UAAwB,EAAE;QAC5D,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACnF,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACzC,CAAC;CACF;AAED,MAAM,OAAO,2BAA4B,SAAQ,cAAc;CAAG;AAMlE,MAAM,OAAO,qBAAsB,SAAQ,cAAc;IACvC,GAAG,CAAS;IAE5B,YAAmB,OAAe,EAAE,OAA4B;QAC9D,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,qBAAqB;IAC9C,SAAS,CAAS;IAElC,YACE,OAAe,EACf,OAA6D;QAE7D,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACrC,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,qBAAqB;CAAG;AAOjE,MAAM,OAAO,2BAA4B,SAAQ,cAAc;IAC7C,MAAM,CAAqB;IAC3B,SAAS,CAAqB;IAE9C,YAAmB,OAAe,EAAE,UAAqC,EAAE;QACzE,2DAA2D;QAC3D,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACrC,CAAC;CACF;AAED,MAAM,OAAO,wBAAyB,SAAQ,cAAc;CAAG;AAS/D,MAAM,OAAO,iBAAkB,SAAQ,cAAc;IACnC,MAAM,CAAS;IACf,IAAI,CAAS;IACb,SAAS,CAAqB;IAC9B,OAAO,CAAU;IAEjC,YAAmB,OAAe,EAAE,OAAwB;QAC1D,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACjC,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface CursorPage<T> {
|
|
2
|
+
readonly items: readonly T[];
|
|
3
|
+
readonly has_more: boolean;
|
|
4
|
+
readonly next_cursor?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface CursorPaginationOptions {
|
|
7
|
+
readonly initialCursor?: string;
|
|
8
|
+
/** 有限上限防止上游 cursor 异常时代理或 worker 无限运行。 */
|
|
9
|
+
readonly maxPages?: number;
|
|
10
|
+
readonly signal?: AbortSignal;
|
|
11
|
+
}
|
|
12
|
+
export declare function paginateCursor<T>(fetchPage: (cursor: string | undefined, signal?: AbortSignal) => Promise<CursorPage<T>>, options?: CursorPaginationOptions): AsyncGenerator<T, void, undefined>;
|
|
13
|
+
//# sourceMappingURL=pagination.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/core/pagination.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,0CAA0C;IAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AA8BD,wBAAuB,cAAc,CAAC,CAAC,EACrC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EACvF,OAAO,GAAE,uBAA4B,GACpC,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAgCpC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { UnifyPortPaginationError } from "./errors.js";
|
|
2
|
+
function paginationAbortError() {
|
|
3
|
+
// AbortSignal.reason 可由调用方放入任意敏感对象;公开分页错误只返回稳定取消语义。
|
|
4
|
+
return new UnifyPortPaginationError("cursor pagination 已取消");
|
|
5
|
+
}
|
|
6
|
+
function signalAborted(signal) {
|
|
7
|
+
// aborted 会在异步边界外部变化;函数读取可避免把首次 false 错误视为永久窄化。
|
|
8
|
+
return signal?.aborted === true;
|
|
9
|
+
}
|
|
10
|
+
async function abortablePage(promise, signal) {
|
|
11
|
+
if (signal === undefined)
|
|
12
|
+
return await promise;
|
|
13
|
+
if (signal.aborted)
|
|
14
|
+
throw paginationAbortError();
|
|
15
|
+
let onAbort;
|
|
16
|
+
const aborted = new Promise((_resolve, reject) => {
|
|
17
|
+
onAbort = () => {
|
|
18
|
+
reject(paginationAbortError());
|
|
19
|
+
};
|
|
20
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
21
|
+
});
|
|
22
|
+
try {
|
|
23
|
+
// fetchPage 未必自行监听 signal;竞速保证挂起请求也能及时结束分页调用。
|
|
24
|
+
return await Promise.race([promise, aborted]);
|
|
25
|
+
}
|
|
26
|
+
finally {
|
|
27
|
+
if (onAbort !== undefined)
|
|
28
|
+
signal.removeEventListener("abort", onAbort);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export async function* paginateCursor(fetchPage, options = {}) {
|
|
32
|
+
const maxPages = options.maxPages ?? 10_000;
|
|
33
|
+
if (!Number.isInteger(maxPages) || maxPages <= 0) {
|
|
34
|
+
throw new UnifyPortPaginationError("maxPages 必须是正整数");
|
|
35
|
+
}
|
|
36
|
+
let cursor = options.initialCursor;
|
|
37
|
+
const seen = new Set();
|
|
38
|
+
if (cursor !== undefined)
|
|
39
|
+
seen.add(cursor);
|
|
40
|
+
for (let pageNumber = 1; pageNumber <= maxPages; pageNumber += 1) {
|
|
41
|
+
if (signalAborted(options.signal)) {
|
|
42
|
+
throw paginationAbortError();
|
|
43
|
+
}
|
|
44
|
+
const page = await abortablePage(fetchPage(cursor, options.signal), options.signal);
|
|
45
|
+
for (const item of page.items) {
|
|
46
|
+
// consumer 可在同一页两次 yield 之间取消,不能继续泄出已预取的剩余数据。
|
|
47
|
+
if (signalAborted(options.signal))
|
|
48
|
+
throw paginationAbortError();
|
|
49
|
+
yield item;
|
|
50
|
+
}
|
|
51
|
+
if (!page.has_more)
|
|
52
|
+
return;
|
|
53
|
+
const nextCursor = page.next_cursor;
|
|
54
|
+
if (nextCursor === undefined || nextCursor === "") {
|
|
55
|
+
throw new UnifyPortPaginationError("上游返回 has_more=true 但缺少 next_cursor");
|
|
56
|
+
}
|
|
57
|
+
if (seen.has(nextCursor)) {
|
|
58
|
+
throw new UnifyPortPaginationError("上游返回重复 next_cursor,已停止避免无限循环");
|
|
59
|
+
}
|
|
60
|
+
seen.add(nextCursor);
|
|
61
|
+
cursor = nextCursor;
|
|
62
|
+
}
|
|
63
|
+
throw new UnifyPortPaginationError(`cursor pagination 超过 maxPages=${String(maxPages)}`);
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=pagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/core/pagination.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ApiRuntime, DeviceClientConfig } from "./types.js";
|
|
2
|
+
/** @internal 仅供同仓库验证 retry listener 生命周期;package exports 不公开 runtime 子路径。 */
|
|
3
|
+
export declare function waitForRetryDelay(milliseconds: number, signal: AbortSignal): Promise<void>;
|
|
4
|
+
export declare function createDeviceRuntime(config: DeviceClientConfig): ApiRuntime;
|
|
5
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/core/runtime.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAEV,UAAU,EACV,kBAAkB,EAOnB,MAAM,YAAY,CAAC;AAmQpB,6EAA6E;AAC7E,wBAAsB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBhG;AAwWD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,kBAAkB,GAAG,UAAU,CAW1E"}
|