@plolink/sdk 0.0.4

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 (76) hide show
  1. package/README.md +259 -0
  2. package/dist/chunk-4H4RACSE.js +335 -0
  3. package/dist/chunk-4H4RACSE.js.map +1 -0
  4. package/dist/chunk-IHAAKFEJ.js +219 -0
  5. package/dist/chunk-IHAAKFEJ.js.map +1 -0
  6. package/dist/chunk-JR4HYYQI.cjs +221 -0
  7. package/dist/chunk-JR4HYYQI.cjs.map +1 -0
  8. package/dist/chunk-MD4O7FWT.js +46 -0
  9. package/dist/chunk-MD4O7FWT.js.map +1 -0
  10. package/dist/chunk-NS3DJP2O.cjs +349 -0
  11. package/dist/chunk-NS3DJP2O.cjs.map +1 -0
  12. package/dist/chunk-Y3UJVC2L.cjs +48 -0
  13. package/dist/chunk-Y3UJVC2L.cjs.map +1 -0
  14. package/dist/client-CAjIQKPm.d.cts +193 -0
  15. package/dist/client-CwNikk7i.d.ts +193 -0
  16. package/dist/common/index.cjs +65 -0
  17. package/dist/common/index.cjs.map +1 -0
  18. package/dist/common/index.d.cts +422 -0
  19. package/dist/common/index.d.ts +422 -0
  20. package/dist/common/index.js +4 -0
  21. package/dist/common/index.js.map +1 -0
  22. package/dist/core-77EbLgbp.d.cts +97 -0
  23. package/dist/core-77EbLgbp.d.ts +97 -0
  24. package/dist/index.cjs +350 -0
  25. package/dist/index.cjs.map +1 -0
  26. package/dist/index.d.cts +98 -0
  27. package/dist/index.d.ts +98 -0
  28. package/dist/index.js +306 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/modules/agent/index.cjs +21 -0
  31. package/dist/modules/agent/index.cjs.map +1 -0
  32. package/dist/modules/agent/index.d.cts +71 -0
  33. package/dist/modules/agent/index.d.ts +71 -0
  34. package/dist/modules/agent/index.js +19 -0
  35. package/dist/modules/agent/index.js.map +1 -0
  36. package/dist/modules/billing/index.cjs +413 -0
  37. package/dist/modules/billing/index.cjs.map +1 -0
  38. package/dist/modules/billing/index.d.cts +538 -0
  39. package/dist/modules/billing/index.d.ts +538 -0
  40. package/dist/modules/billing/index.js +411 -0
  41. package/dist/modules/billing/index.js.map +1 -0
  42. package/dist/modules/chat/index.cjs +20 -0
  43. package/dist/modules/chat/index.cjs.map +1 -0
  44. package/dist/modules/chat/index.d.cts +68 -0
  45. package/dist/modules/chat/index.d.ts +68 -0
  46. package/dist/modules/chat/index.js +18 -0
  47. package/dist/modules/chat/index.js.map +1 -0
  48. package/dist/modules/psych/index.cjs +20 -0
  49. package/dist/modules/psych/index.cjs.map +1 -0
  50. package/dist/modules/psych/index.d.cts +69 -0
  51. package/dist/modules/psych/index.d.ts +69 -0
  52. package/dist/modules/psych/index.js +18 -0
  53. package/dist/modules/psych/index.js.map +1 -0
  54. package/dist/modules/rbac/index.cjs +197 -0
  55. package/dist/modules/rbac/index.cjs.map +1 -0
  56. package/dist/modules/rbac/index.d.cts +293 -0
  57. package/dist/modules/rbac/index.d.ts +293 -0
  58. package/dist/modules/rbac/index.js +195 -0
  59. package/dist/modules/rbac/index.js.map +1 -0
  60. package/dist/modules/team/index.cjs +54 -0
  61. package/dist/modules/team/index.cjs.map +1 -0
  62. package/dist/modules/team/index.d.cts +91 -0
  63. package/dist/modules/team/index.d.ts +91 -0
  64. package/dist/modules/team/index.js +52 -0
  65. package/dist/modules/team/index.js.map +1 -0
  66. package/dist/modules/virtual-account/index.cjs +293 -0
  67. package/dist/modules/virtual-account/index.cjs.map +1 -0
  68. package/dist/modules/virtual-account/index.d.cts +366 -0
  69. package/dist/modules/virtual-account/index.d.ts +366 -0
  70. package/dist/modules/virtual-account/index.js +291 -0
  71. package/dist/modules/virtual-account/index.js.map +1 -0
  72. package/dist/poller-BlIRbwL4.d.cts +201 -0
  73. package/dist/poller-DWKZjuSw.d.ts +201 -0
  74. package/dist/shared-6ZepUSPW.d.cts +31 -0
  75. package/dist/shared-6ZepUSPW.d.ts +31 -0
  76. package/package.json +96 -0
package/dist/index.js ADDED
@@ -0,0 +1,306 @@
1
+ export { EventEmitter, TypedEventEmitter, environmentInfo, getEnvironment, isBrowser, isNode, isWebWorker } from './chunk-4H4RACSE.js';
2
+ export { Poller } from './chunk-IHAAKFEJ.js';
3
+ import { PlolinkError } from './chunk-MD4O7FWT.js';
4
+ export { PlolinkError } from './chunk-MD4O7FWT.js';
5
+ import axios from 'axios';
6
+
7
+ // src/core/logger.ts
8
+ var InternalLogger = class _InternalLogger {
9
+ /**
10
+ * 创建一个 InternalLogger 实例
11
+ *
12
+ * @param userLogger - 用户自定义的日志钩子函数
13
+ */
14
+ constructor(userLogger) {
15
+ this.userLogger = userLogger;
16
+ this.isDebugEnabled = typeof process !== "undefined" && process.env?.PLOLINK_SDK_DEBUG === "true";
17
+ }
18
+ /**
19
+ * 记录信息级别日志
20
+ *
21
+ * @param message - 日志消息
22
+ * @param context - 附加上下文数据
23
+ */
24
+ info(message, context) {
25
+ this.log("info", message, context);
26
+ }
27
+ /**
28
+ * 记录警告级别日志
29
+ *
30
+ * @param message - 日志消息
31
+ * @param context - 附加上下文数据
32
+ */
33
+ warn(message, context) {
34
+ this.log("warn", message, context);
35
+ }
36
+ /**
37
+ * 记录错误级别日志
38
+ *
39
+ * @param message - 日志消息
40
+ * @param context - 附加上下文数据
41
+ */
42
+ error(message, context) {
43
+ this.log("error", message, context);
44
+ }
45
+ /**
46
+ * 记录调试级别日志
47
+ * 只有在 debug 模式下才会输出
48
+ *
49
+ * @param message - 日志消息
50
+ * @param context - 附加上下文数据
51
+ */
52
+ debug(message, context) {
53
+ if (this.isDebugEnabled) {
54
+ this.log("debug", message, context);
55
+ }
56
+ }
57
+ /**
58
+ * 内部日志记录方法
59
+ *
60
+ * @param level - 日志级别
61
+ * @param message - 日志消息
62
+ * @param context - 附加上下文数据
63
+ */
64
+ log(level, message, context) {
65
+ const formattedMessage = `[Plolink SDK] ${message}`;
66
+ if (this.userLogger) {
67
+ this.userLogger(level, formattedMessage, context);
68
+ return;
69
+ }
70
+ const logData = context ? [formattedMessage, context] : [formattedMessage];
71
+ switch (level) {
72
+ case "info":
73
+ case "debug":
74
+ console.log(...logData);
75
+ break;
76
+ case "warn":
77
+ console.warn(...logData);
78
+ break;
79
+ case "error":
80
+ console.error(...logData);
81
+ break;
82
+ }
83
+ }
84
+ /**
85
+ * 创建一个带有固定上下文的子 logger
86
+ *
87
+ * @param context - 固定的上下文数据
88
+ * @returns 新的 logger 实例
89
+ *
90
+ * @example
91
+ * ```typescript
92
+ * const logger = new InternalLogger();
93
+ * const moduleLogger = logger.withContext({ module: 'billing' });
94
+ * moduleLogger.info('Payment processed'); // 日志会自动带上 module: 'billing'
95
+ * ```
96
+ */
97
+ withContext(context) {
98
+ const parentLogger = this.userLogger;
99
+ const wrappedLogger = (level, message, data) => {
100
+ const mergedData = { ...context, ...data || {} };
101
+ if (parentLogger) {
102
+ parentLogger(level, message, mergedData);
103
+ } else {
104
+ const formattedMessage = `[Plolink SDK] ${message}`;
105
+ const logData = [formattedMessage, mergedData];
106
+ switch (level) {
107
+ case "info":
108
+ case "debug":
109
+ console.log(...logData);
110
+ break;
111
+ case "warn":
112
+ console.warn(...logData);
113
+ break;
114
+ case "error":
115
+ console.error(...logData);
116
+ break;
117
+ }
118
+ }
119
+ };
120
+ return new _InternalLogger(wrappedLogger);
121
+ }
122
+ };
123
+ function createAxiosInstance(config, logger) {
124
+ const instance = axios.create({
125
+ baseURL: config.baseUrl,
126
+ timeout: config.timeout,
127
+ headers: {
128
+ "Content-Type": "application/json"
129
+ }
130
+ });
131
+ instance.interceptors.request.use(
132
+ (requestConfig) => {
133
+ const method = requestConfig.method?.toUpperCase() || "GET";
134
+ const url = requestConfig.url || "";
135
+ logger.debug(`Request: ${method} ${url}`, {
136
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
137
+ params: requestConfig.params,
138
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
139
+ data: requestConfig.data
140
+ });
141
+ if (config.token) {
142
+ requestConfig.headers = requestConfig.headers || {};
143
+ requestConfig.headers["Authorization"] = `Bearer ${config.token}`;
144
+ }
145
+ return requestConfig;
146
+ },
147
+ (error) => {
148
+ logger.error("Request interceptor error", { error: error.message });
149
+ return Promise.reject(error);
150
+ }
151
+ );
152
+ instance.interceptors.response.use(
153
+ (response) => {
154
+ const { code, data, message } = response.data;
155
+ logger.debug(`Response: ${response.config.method?.toUpperCase()} ${response.config.url}`, {
156
+ code,
157
+ message
158
+ });
159
+ if (code !== 200 && code !== 0) {
160
+ const error = new PlolinkError(
161
+ message || "Unknown business error",
162
+ code,
163
+ data
164
+ );
165
+ logger.error("Business error", {
166
+ code,
167
+ message,
168
+ data
169
+ });
170
+ throw error;
171
+ }
172
+ return data;
173
+ },
174
+ (error) => {
175
+ const status = error.response?.status || "NETWORK_ERROR";
176
+ const message = error.response?.data?.message || error.message || "Network request failed";
177
+ const data = error.response?.data?.data;
178
+ logger.error("Response error", {
179
+ status,
180
+ message,
181
+ url: error.config?.url,
182
+ method: error.config?.method
183
+ });
184
+ throw new PlolinkError(message, status, data);
185
+ }
186
+ );
187
+ return instance;
188
+ }
189
+
190
+ // src/core/client.ts
191
+ var PlolinkClient = class {
192
+ /**
193
+ * 创建一个 PlolinkClient 实例
194
+ *
195
+ * @param config - SDK 配置对象
196
+ * @throws {PlolinkError} 当配置验证失败时抛出
197
+ *
198
+ * @example
199
+ * ```typescript
200
+ * const client = new PlolinkClient({
201
+ * token: 'sk-your-api-key'
202
+ * });
203
+ * ```
204
+ */
205
+ constructor(config) {
206
+ this.validateConfig(config);
207
+ this.config = {
208
+ baseUrl: config.baseUrl || "https://hiring.djangotech.com/",
209
+ token: config.token,
210
+ timeout: config.timeout || 1e4,
211
+ logger: config.logger || (() => {
212
+ })
213
+ };
214
+ this.logger = new InternalLogger(this.config.logger);
215
+ this.logger.info("Initializing Plolink SDK Client", {
216
+ baseUrl: this.config.baseUrl,
217
+ timeout: this.config.timeout,
218
+ hasToken: !!this.config.token
219
+ });
220
+ this.axiosInstance = createAxiosInstance(
221
+ this.config,
222
+ this.logger
223
+ );
224
+ }
225
+ /**
226
+ * 验证 SDK 配置
227
+ *
228
+ * @param config - SDK 配置对象
229
+ * @throws {PlolinkError} 当配置不合法时抛出
230
+ * @private
231
+ */
232
+ validateConfig(config) {
233
+ if (!config.token) {
234
+ throw new PlolinkError(
235
+ "Config validation failed: token is required",
236
+ "CONFIG_ERROR"
237
+ );
238
+ }
239
+ const isApiKey = config.token.startsWith("sk-");
240
+ const isSessionId = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(config.token);
241
+ if (!isApiKey && !isSessionId) {
242
+ throw new PlolinkError(
243
+ "Config validation failed: token must be either an ApiKey (sk-xxx) or a SessionId (UUID format)",
244
+ "CONFIG_ERROR"
245
+ );
246
+ }
247
+ if (config.baseUrl) {
248
+ try {
249
+ new URL(config.baseUrl);
250
+ } catch {
251
+ throw new PlolinkError(
252
+ `Config validation failed: baseUrl is not a valid URL: ${config.baseUrl}`,
253
+ "CONFIG_ERROR"
254
+ );
255
+ }
256
+ }
257
+ if (config.timeout !== void 0 && (config.timeout <= 0 || !Number.isFinite(config.timeout))) {
258
+ throw new PlolinkError(
259
+ `Config validation failed: timeout must be a positive number, got ${config.timeout}`,
260
+ "CONFIG_ERROR"
261
+ );
262
+ }
263
+ }
264
+ /**
265
+ * 获取当前 SDK 版本
266
+ *
267
+ * @returns SDK 版本号
268
+ */
269
+ getVersion() {
270
+ return "1.0.0";
271
+ }
272
+ /**
273
+ * 检查客户端健康状态
274
+ *
275
+ * @returns 健康状态信息
276
+ *
277
+ * @example
278
+ * ```typescript
279
+ * const health = client.healthCheck();
280
+ * console.log(health);
281
+ * // { status: 'ok', baseUrl: '...', version: '...' }
282
+ * ```
283
+ */
284
+ healthCheck() {
285
+ return {
286
+ status: "ok",
287
+ baseUrl: this.config.baseUrl,
288
+ version: this.getVersion(),
289
+ hasToken: !!this.config.token
290
+ };
291
+ }
292
+ };
293
+
294
+ // src/index.ts
295
+ var VERSION = "1.0.0";
296
+ var DEFAULT_CONFIG = {
297
+ baseUrl: "https://hiring.djangotech.com/",
298
+ timeout: 1e4,
299
+ initialInterval: 1e3,
300
+ maxInterval: 3e4,
301
+ backoffFactor: 1.5
302
+ };
303
+
304
+ export { DEFAULT_CONFIG, InternalLogger, PlolinkClient, VERSION };
305
+ //# sourceMappingURL=index.js.map
306
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/logger.ts","../src/core/request.ts","../src/core/client.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { LogLevel, LoggerFunction } from '../types';\n\n/**\n * SDK 内部日志器\n * \n * @description\n * 提供统一的日志接口,支持用户自定义日志钩子。\n * 默认使用 console 输出,用户可以通过配置自定义 logger 函数来集成 Sentry 等监控系统。\n * \n * @example\n * ```typescript\n * const logger = new InternalLogger((level, message, data) => {\n * // 自定义日志处理,例如发送到 Sentry\n * console.log(`[${level}] ${message}`, data);\n * });\n * \n * logger.info('Operation started', { userId: '123' });\n * logger.error('Operation failed', { error: 'Network timeout' });\n * ```\n */\nexport class InternalLogger {\n /**\n * 用户自定义的日志钩子函数\n */\n private readonly userLogger?: LoggerFunction;\n\n /**\n * 是否启用日志输出\n * 可以通过环境变量 PLOLINK_SDK_DEBUG 控制\n */\n private readonly isDebugEnabled: boolean;\n\n /**\n * 创建一个 InternalLogger 实例\n * \n * @param userLogger - 用户自定义的日志钩子函数\n */\n constructor(userLogger?: LoggerFunction) {\n this.userLogger = userLogger;\n this.isDebugEnabled =\n typeof process !== 'undefined' &&\n process.env?.PLOLINK_SDK_DEBUG === 'true';\n }\n\n /**\n * 记录信息级别日志\n * \n * @param message - 日志消息\n * @param context - 附加上下文数据\n */\n public info(message: string, context?: unknown): void {\n this.log('info', message, context);\n }\n\n /**\n * 记录警告级别日志\n * \n * @param message - 日志消息\n * @param context - 附加上下文数据\n */\n public warn(message: string, context?: unknown): void {\n this.log('warn', message, context);\n }\n\n /**\n * 记录错误级别日志\n * \n * @param message - 日志消息\n * @param context - 附加上下文数据\n */\n public error(message: string, context?: unknown): void {\n this.log('error', message, context);\n }\n\n /**\n * 记录调试级别日志\n * 只有在 debug 模式下才会输出\n * \n * @param message - 日志消息\n * @param context - 附加上下文数据\n */\n public debug(message: string, context?: unknown): void {\n if (this.isDebugEnabled) {\n this.log('debug', message, context);\n }\n }\n\n /**\n * 内部日志记录方法\n * \n * @param level - 日志级别\n * @param message - 日志消息\n * @param context - 附加上下文数据\n */\n private log(level: LogLevel, message: string, context?: unknown): void {\n const formattedMessage = `[Plolink SDK] ${message}`;\n\n // 优先使用用户自定义的 logger\n if (this.userLogger) {\n this.userLogger(level, formattedMessage, context);\n return;\n }\n\n // 降级到 console 输出\n const logData = context ? [formattedMessage, context] : [formattedMessage];\n\n switch (level) {\n case 'info':\n case 'debug':\n // eslint-disable-next-line no-console\n console.log(...logData);\n break;\n case 'warn':\n console.warn(...logData);\n break;\n case 'error':\n console.error(...logData);\n break;\n }\n }\n\n /**\n * 创建一个带有固定上下文的子 logger\n * \n * @param context - 固定的上下文数据\n * @returns 新的 logger 实例\n * \n * @example\n * ```typescript\n * const logger = new InternalLogger();\n * const moduleLogger = logger.withContext({ module: 'billing' });\n * moduleLogger.info('Payment processed'); // 日志会自动带上 module: 'billing'\n * ```\n */\n public withContext(context: Record<string, unknown>): InternalLogger {\n const parentLogger = this.userLogger;\n const wrappedLogger: LoggerFunction = (level, message, data) => {\n const mergedData = { ...context, ...((data as Record<string, unknown>) || {}) };\n if (parentLogger) {\n parentLogger(level, message, mergedData);\n } else {\n // 使用默认的 console 输出\n const formattedMessage = `[Plolink SDK] ${message}`;\n const logData = [formattedMessage, mergedData];\n switch (level) {\n case 'info':\n case 'debug':\n // eslint-disable-next-line no-console\n console.log(...logData);\n break;\n case 'warn':\n console.warn(...logData);\n break;\n case 'error':\n console.error(...logData);\n break;\n }\n }\n };\n\n return new InternalLogger(wrappedLogger);\n }\n}\n\n","import axios, { type AxiosInstance, type AxiosRequestConfig, AxiosError } from 'axios';\nimport { PlolinkError } from './error';\nimport { InternalLogger } from './logger';\nimport type { SDKConfig } from '../types';\n\n/**\n * 标准 API 响应格式\n */\ninterface APIResponse<T = unknown> {\n code: number;\n message: string;\n data: T;\n}\n\n/**\n * 创建配置好的 Axios 实例\n * \n * @description\n * 创建一个单例的 Axios 实例,配置了请求和响应拦截器。\n * - 请求拦截器:注入 Bearer Token 认证\n * - 响应拦截器:统一处理 code/message/data 格式,只返回 data 部分\n * - 错误处理:将所有错误转换为 PlolinkError\n * \n * @param config - SDK 配置对象\n * @param logger - 日志记录器\n * @returns 配置好的 Axios 实例\n * \n * @internal\n */\nexport function createAxiosInstance(\n config: Required<SDKConfig>,\n logger: InternalLogger\n): AxiosInstance {\n // 创建 Axios 实例\n const instance = axios.create({\n baseURL: config.baseUrl,\n timeout: config.timeout,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n // 请求拦截器:注入认证信息\n instance.interceptors.request.use(\n (requestConfig) => {\n const method = requestConfig.method?.toUpperCase() || 'GET';\n const url = requestConfig.url || '';\n\n logger.debug(`Request: ${method} ${url}`, {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n params: requestConfig.params,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n data: requestConfig.data,\n });\n\n // 统一使用 Bearer Token 认证\n if (config.token) {\n requestConfig.headers = requestConfig.headers || {};\n requestConfig.headers['Authorization'] = `Bearer ${config.token}`;\n }\n\n return requestConfig;\n },\n (error: AxiosError) => {\n logger.error('Request interceptor error', { error: error.message });\n return Promise.reject(error);\n }\n );\n\n // 响应拦截器:统一格式化与状态检测\n instance.interceptors.response.use(\n (response) => {\n const { code, data, message } = response.data as APIResponse;\n\n logger.debug(`Response: ${response.config.method?.toUpperCase()} ${response.config.url}`, {\n code,\n message,\n });\n\n // 检查业务状态码(根据后端约定,200 或 0 表示成功)\n if (code !== 200 && code !== 0) {\n const error = new PlolinkError(\n message || 'Unknown business error',\n code,\n data\n );\n logger.error('Business error', {\n code,\n message,\n data,\n });\n throw error;\n }\n\n // 直接返回 data 部分\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n return data as unknown as typeof response;\n },\n (error: AxiosError) => {\n // 处理网络错误和 HTTP 错误\n const status = error.response?.status || 'NETWORK_ERROR';\n const message =\n (error.response?.data as APIResponse)?.message ||\n error.message ||\n 'Network request failed';\n const data = (error.response?.data as APIResponse)?.data;\n\n logger.error('Response error', {\n status,\n message,\n url: error.config?.url,\n method: error.config?.method,\n });\n\n throw new PlolinkError(message, status, data);\n }\n );\n\n return instance;\n}\n\n/**\n * 为 Axios 实例添加类型安全的请求方法\n * \n * @description\n * 这些方法封装了 Axios 的原始方法,提供更好的类型推断。\n */\nexport interface TypedAxiosInstance extends AxiosInstance {\n get<T = unknown>(url: string, config?: AxiosRequestConfig): Promise<T>;\n post<T = unknown>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T>;\n put<T = unknown>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T>;\n patch<T = unknown>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T>;\n delete<T = unknown>(url: string, config?: AxiosRequestConfig): Promise<T>;\n}\n\n","import type { SDKConfig } from '../types';\nimport { InternalLogger } from './logger';\nimport { createAxiosInstance, type TypedAxiosInstance } from './request';\nimport { PlolinkError } from './error';\n\n/**\n * Plolink SDK 客户端主类\n * \n * @description\n * PlolinkClient 是 SDK 的核心类,负责:\n * - 管理 SDK 配置(认证 Token、API 地址等)\n * - 初始化 Axios 实例并配置拦截器\n * - 提供统一的日志接口\n * - 作为所有业务模块的基础依赖\n * \n * @example\n * ```typescript\n * // 使用 ApiKey\n * const client = new PlolinkClient({\n * token: 'sk-123456789',\n * logger: (level, msg, data) => {\n * console.log(`[${level}] ${msg}`, data);\n * }\n * });\n * \n * // 使用 SessionId (登录后获取)\n * const client = new PlolinkClient({\n * token: 'a1b2c3d4-e5f6-7890-abcd-ef1234567890',\n * baseUrl: 'https://api.plolink.com'\n * });\n * ```\n */\nexport class PlolinkClient {\n /**\n * SDK 配置对象(已填充默认值)\n */\n public readonly config: Required<SDKConfig>;\n\n /**\n * Axios 实例,用于发起 HTTP 请求\n */\n public readonly axiosInstance: TypedAxiosInstance;\n\n /**\n * 内部日志记录器\n */\n public readonly logger: InternalLogger;\n\n /**\n * 创建一个 PlolinkClient 实例\n * \n * @param config - SDK 配置对象\n * @throws {PlolinkError} 当配置验证失败时抛出\n * \n * @example\n * ```typescript\n * const client = new PlolinkClient({\n * token: 'sk-your-api-key'\n * });\n * ```\n */\n constructor(config: SDKConfig) {\n // 验证配置\n this.validateConfig(config);\n\n // 填充默认配置\n this.config = {\n baseUrl: config.baseUrl || 'https://hiring.djangotech.com/',\n token: config.token,\n timeout: config.timeout || 10000,\n logger: config.logger || (() => {}),\n };\n\n // 初始化日志记录器\n this.logger = new InternalLogger(this.config.logger);\n\n this.logger.info('Initializing Plolink SDK Client', {\n baseUrl: this.config.baseUrl,\n timeout: this.config.timeout,\n hasToken: !!this.config.token,\n });\n\n // 创建 Axios 实例\n this.axiosInstance = createAxiosInstance(\n this.config,\n this.logger\n ) as TypedAxiosInstance;\n }\n\n /**\n * 验证 SDK 配置\n * \n * @param config - SDK 配置对象\n * @throws {PlolinkError} 当配置不合法时抛出\n * @private\n */\n private validateConfig(config: SDKConfig): void {\n // 验证必填字段 token\n if (!config.token) {\n throw new PlolinkError(\n 'Config validation failed: token is required',\n 'CONFIG_ERROR'\n );\n }\n\n // 验证 token 格式(ApiKey 或 SessionId)\n const isApiKey = config.token.startsWith('sk-');\n const isSessionId = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(config.token);\n \n if (!isApiKey && !isSessionId) {\n throw new PlolinkError(\n 'Config validation failed: token must be either an ApiKey (sk-xxx) or a SessionId (UUID format)',\n 'CONFIG_ERROR'\n );\n }\n\n // 验证 baseUrl 格式\n if (config.baseUrl) {\n try {\n new URL(config.baseUrl);\n } catch {\n throw new PlolinkError(\n `Config validation failed: baseUrl is not a valid URL: ${config.baseUrl}`,\n 'CONFIG_ERROR'\n );\n }\n }\n\n // 验证 timeout\n if (config.timeout !== undefined && (config.timeout <= 0 || !Number.isFinite(config.timeout))) {\n throw new PlolinkError(\n `Config validation failed: timeout must be a positive number, got ${config.timeout}`,\n 'CONFIG_ERROR'\n );\n }\n }\n\n /**\n * 获取当前 SDK 版本\n * \n * @returns SDK 版本号\n */\n public getVersion(): string {\n return '1.0.0';\n }\n\n /**\n * 检查客户端健康状态\n * \n * @returns 健康状态信息\n * \n * @example\n * ```typescript\n * const health = client.healthCheck();\n * console.log(health);\n * // { status: 'ok', baseUrl: '...', version: '...' }\n * ```\n */\n public healthCheck(): {\n status: 'ok';\n baseUrl: string;\n version: string;\n hasToken: boolean;\n } {\n return {\n status: 'ok',\n baseUrl: this.config.baseUrl,\n version: this.getVersion(),\n hasToken: !!this.config.token,\n };\n }\n}\n\n","/**\n * Plolink SDK 主入口\n * \n * @description\n * Plolink 开放平台官方 SDK,提供完整的 API 调用能力。\n * \n * @packageDocumentation\n * \n * @example\n * ```typescript\n * import { PlolinkClient } from '@plolink/sdk';\n * \n * // 创建客户端实例\n * const client = new PlolinkClient({\n * token: 'sk-your-api-key',\n * logger: (level, message, data) => {\n * console.log(`[${level}] ${message}`, data);\n * }\n * });\n * \n * // 检查健康状态\n * const health = client.healthCheck();\n * console.log(health);\n * ```\n */\n\n// 导出核心类\nexport { PlolinkClient } from './core/client';\nexport { PlolinkError } from './core/error';\nexport { InternalLogger } from './core/logger';\n\n// 导出公共工具(供高级用户使用)\nexport { Poller } from './common/poller';\nexport { EventEmitter, TypedEventEmitter } from './common/hooks';\nexport {\n isNode,\n isBrowser,\n isWebWorker,\n getEnvironment,\n environmentInfo,\n} from './common/adapter';\n\n// 导出类型定义\nexport type {\n SDKConfig,\n LogLevel,\n LoggerFunction,\n PollerOptions,\n PollerSnapshot,\n // shared (跨模块通用类型)\n RoleType,\n ScopeType,\n AssignRoleParams,\n} from './types';\n\n// 导出版本信息\nexport const VERSION = '1.0.0';\n\n/**\n * SDK 默认配置\n */\nexport const DEFAULT_CONFIG = {\n baseUrl: 'https://hiring.djangotech.com/',\n timeout: 10000,\n initialInterval: 1000,\n maxInterval: 30000,\n backoffFactor: 1.5,\n} as const;\n\n"]}
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ // src/modules/agent/index.ts
4
+ var AGENT_MODULE_INFO = {
5
+ name: "agent",
6
+ version: "1.0.0",
7
+ status: "planned",
8
+ features: [
9
+ "task-submit",
10
+ "task-status",
11
+ "task-result",
12
+ "anonymous-skill",
13
+ "file-packaging",
14
+ "task-cancel",
15
+ "real-time-progress"
16
+ ]
17
+ };
18
+
19
+ exports.AGENT_MODULE_INFO = AGENT_MODULE_INFO;
20
+ //# sourceMappingURL=index.cjs.map
21
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/modules/agent/index.ts"],"names":[],"mappings":";;;AAiEO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,IAAA,EAAM,OAAA;AAAA,EACN,OAAA,EAAS,OAAA;AAAA,EACT,MAAA,EAAQ,SAAA;AAAA,EACR,QAAA,EAAU;AAAA,IACR,aAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,iBAAA;AAAA,IACA,gBAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA;AAEJ","file":"index.cjs","sourcesContent":["/**\n * Agent 任务模块\n * \n * @description\n * 提供 Agent 任务提交、状态查询、结果获取等功能。\n * 支持匿名 Skill 上传,包含 input 和 output 的压缩包打包逻辑。\n * \n * @example\n * ```typescript\n * import { PlolinkClient } from '@plolink/sdk';\n * import { AgentTask } from '@plolink/sdk/agent';\n * \n * const client = new PlolinkClient({ mode: 'apiKey', apiKey: 'xxx' });\n * const agent = new AgentTask(client);\n * \n * // 提交任务\n * const task = await agent.submitTask({\n * skillId: 'skill-123',\n * input: { query: 'Hello' }\n * });\n * ```\n * \n * @module agent\n */\n\n// 预留:将在后续实现 AgentTask 类\n\n/**\n * Agent 模块占位符\n * \n * @description\n * 此模块将在后续版本中实现以下功能:\n * - 任务提交\n * - 任务状态查询\n * - 任务结果获取\n * - 匿名 Skill 上传\n * - Input/Output 压缩包打包\n * - 任务取消\n * - 实时进度推送\n * \n * @example\n * ```typescript\n * // 未来使用方式(预览)\n * const agent = new AgentTask(client);\n * \n * // 提交任务\n * const task = await agent.submitTask({\n * skillId: 'skill-123',\n * input: { query: 'Hello' }\n * });\n * \n * // 监听状态变化\n * task.on('status-change', (status) => {\n * console.log('Task status:', status);\n * });\n * \n * // 监听输出\n * task.on('output', (output) => {\n * console.log('Task output:', output);\n * });\n * \n * // 获取最终结果\n * const result = await task.waitForCompletion();\n * ```\n */\nexport const AGENT_MODULE_INFO = {\n name: 'agent',\n version: '1.0.0',\n status: 'planned',\n features: [\n 'task-submit',\n 'task-status',\n 'task-result',\n 'anonymous-skill',\n 'file-packaging',\n 'task-cancel',\n 'real-time-progress',\n ],\n} as const;\n\n// 导出类型(预留)\nexport type AgentModuleInfo = typeof AGENT_MODULE_INFO;\n\n"]}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Agent 任务模块
3
+ *
4
+ * @description
5
+ * 提供 Agent 任务提交、状态查询、结果获取等功能。
6
+ * 支持匿名 Skill 上传,包含 input 和 output 的压缩包打包逻辑。
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { PlolinkClient } from '@plolink/sdk';
11
+ * import { AgentTask } from '@plolink/sdk/agent';
12
+ *
13
+ * const client = new PlolinkClient({ mode: 'apiKey', apiKey: 'xxx' });
14
+ * const agent = new AgentTask(client);
15
+ *
16
+ * // 提交任务
17
+ * const task = await agent.submitTask({
18
+ * skillId: 'skill-123',
19
+ * input: { query: 'Hello' }
20
+ * });
21
+ * ```
22
+ *
23
+ * @module agent
24
+ */
25
+ /**
26
+ * Agent 模块占位符
27
+ *
28
+ * @description
29
+ * 此模块将在后续版本中实现以下功能:
30
+ * - 任务提交
31
+ * - 任务状态查询
32
+ * - 任务结果获取
33
+ * - 匿名 Skill 上传
34
+ * - Input/Output 压缩包打包
35
+ * - 任务取消
36
+ * - 实时进度推送
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * // 未来使用方式(预览)
41
+ * const agent = new AgentTask(client);
42
+ *
43
+ * // 提交任务
44
+ * const task = await agent.submitTask({
45
+ * skillId: 'skill-123',
46
+ * input: { query: 'Hello' }
47
+ * });
48
+ *
49
+ * // 监听状态变化
50
+ * task.on('status-change', (status) => {
51
+ * console.log('Task status:', status);
52
+ * });
53
+ *
54
+ * // 监听输出
55
+ * task.on('output', (output) => {
56
+ * console.log('Task output:', output);
57
+ * });
58
+ *
59
+ * // 获取最终结果
60
+ * const result = await task.waitForCompletion();
61
+ * ```
62
+ */
63
+ declare const AGENT_MODULE_INFO: {
64
+ readonly name: "agent";
65
+ readonly version: "1.0.0";
66
+ readonly status: "planned";
67
+ readonly features: readonly ["task-submit", "task-status", "task-result", "anonymous-skill", "file-packaging", "task-cancel", "real-time-progress"];
68
+ };
69
+ type AgentModuleInfo = typeof AGENT_MODULE_INFO;
70
+
71
+ export { AGENT_MODULE_INFO, type AgentModuleInfo };
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Agent 任务模块
3
+ *
4
+ * @description
5
+ * 提供 Agent 任务提交、状态查询、结果获取等功能。
6
+ * 支持匿名 Skill 上传,包含 input 和 output 的压缩包打包逻辑。
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { PlolinkClient } from '@plolink/sdk';
11
+ * import { AgentTask } from '@plolink/sdk/agent';
12
+ *
13
+ * const client = new PlolinkClient({ mode: 'apiKey', apiKey: 'xxx' });
14
+ * const agent = new AgentTask(client);
15
+ *
16
+ * // 提交任务
17
+ * const task = await agent.submitTask({
18
+ * skillId: 'skill-123',
19
+ * input: { query: 'Hello' }
20
+ * });
21
+ * ```
22
+ *
23
+ * @module agent
24
+ */
25
+ /**
26
+ * Agent 模块占位符
27
+ *
28
+ * @description
29
+ * 此模块将在后续版本中实现以下功能:
30
+ * - 任务提交
31
+ * - 任务状态查询
32
+ * - 任务结果获取
33
+ * - 匿名 Skill 上传
34
+ * - Input/Output 压缩包打包
35
+ * - 任务取消
36
+ * - 实时进度推送
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * // 未来使用方式(预览)
41
+ * const agent = new AgentTask(client);
42
+ *
43
+ * // 提交任务
44
+ * const task = await agent.submitTask({
45
+ * skillId: 'skill-123',
46
+ * input: { query: 'Hello' }
47
+ * });
48
+ *
49
+ * // 监听状态变化
50
+ * task.on('status-change', (status) => {
51
+ * console.log('Task status:', status);
52
+ * });
53
+ *
54
+ * // 监听输出
55
+ * task.on('output', (output) => {
56
+ * console.log('Task output:', output);
57
+ * });
58
+ *
59
+ * // 获取最终结果
60
+ * const result = await task.waitForCompletion();
61
+ * ```
62
+ */
63
+ declare const AGENT_MODULE_INFO: {
64
+ readonly name: "agent";
65
+ readonly version: "1.0.0";
66
+ readonly status: "planned";
67
+ readonly features: readonly ["task-submit", "task-status", "task-result", "anonymous-skill", "file-packaging", "task-cancel", "real-time-progress"];
68
+ };
69
+ type AgentModuleInfo = typeof AGENT_MODULE_INFO;
70
+
71
+ export { AGENT_MODULE_INFO, type AgentModuleInfo };
@@ -0,0 +1,19 @@
1
+ // src/modules/agent/index.ts
2
+ var AGENT_MODULE_INFO = {
3
+ name: "agent",
4
+ version: "1.0.0",
5
+ status: "planned",
6
+ features: [
7
+ "task-submit",
8
+ "task-status",
9
+ "task-result",
10
+ "anonymous-skill",
11
+ "file-packaging",
12
+ "task-cancel",
13
+ "real-time-progress"
14
+ ]
15
+ };
16
+
17
+ export { AGENT_MODULE_INFO };
18
+ //# sourceMappingURL=index.js.map
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/modules/agent/index.ts"],"names":[],"mappings":";AAiEO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,IAAA,EAAM,OAAA;AAAA,EACN,OAAA,EAAS,OAAA;AAAA,EACT,MAAA,EAAQ,SAAA;AAAA,EACR,QAAA,EAAU;AAAA,IACR,aAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,iBAAA;AAAA,IACA,gBAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA;AAEJ","file":"index.js","sourcesContent":["/**\n * Agent 任务模块\n * \n * @description\n * 提供 Agent 任务提交、状态查询、结果获取等功能。\n * 支持匿名 Skill 上传,包含 input 和 output 的压缩包打包逻辑。\n * \n * @example\n * ```typescript\n * import { PlolinkClient } from '@plolink/sdk';\n * import { AgentTask } from '@plolink/sdk/agent';\n * \n * const client = new PlolinkClient({ mode: 'apiKey', apiKey: 'xxx' });\n * const agent = new AgentTask(client);\n * \n * // 提交任务\n * const task = await agent.submitTask({\n * skillId: 'skill-123',\n * input: { query: 'Hello' }\n * });\n * ```\n * \n * @module agent\n */\n\n// 预留:将在后续实现 AgentTask 类\n\n/**\n * Agent 模块占位符\n * \n * @description\n * 此模块将在后续版本中实现以下功能:\n * - 任务提交\n * - 任务状态查询\n * - 任务结果获取\n * - 匿名 Skill 上传\n * - Input/Output 压缩包打包\n * - 任务取消\n * - 实时进度推送\n * \n * @example\n * ```typescript\n * // 未来使用方式(预览)\n * const agent = new AgentTask(client);\n * \n * // 提交任务\n * const task = await agent.submitTask({\n * skillId: 'skill-123',\n * input: { query: 'Hello' }\n * });\n * \n * // 监听状态变化\n * task.on('status-change', (status) => {\n * console.log('Task status:', status);\n * });\n * \n * // 监听输出\n * task.on('output', (output) => {\n * console.log('Task output:', output);\n * });\n * \n * // 获取最终结果\n * const result = await task.waitForCompletion();\n * ```\n */\nexport const AGENT_MODULE_INFO = {\n name: 'agent',\n version: '1.0.0',\n status: 'planned',\n features: [\n 'task-submit',\n 'task-status',\n 'task-result',\n 'anonymous-skill',\n 'file-packaging',\n 'task-cancel',\n 'real-time-progress',\n ],\n} as const;\n\n// 导出类型(预留)\nexport type AgentModuleInfo = typeof AGENT_MODULE_INFO;\n\n"]}