polynance_sdk
Version:
TypeScript SDK for prediction market aggregation supporting Polymarket, Limitless, and Truemarket
111 lines (110 loc) • 5.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.PolynanceApiError = exports.PolynanceErrorCode = void 0;
/**
* Polynance SDKで発生する可能性のあるエラーコードを定義します。
* AIがエラーの種類を特定しやすくするために使用されます。
*/
var PolynanceErrorCode;
(function (PolynanceErrorCode) {
// --- 通信・リクエストエラー ---
PolynanceErrorCode["NETWORK_ERROR"] = "ERR_NETWORK";
PolynanceErrorCode["TIMEOUT_ERROR"] = "ERR_TIMEOUT";
PolynanceErrorCode["API_REQUEST_FAILED"] = "ERR_API_REQUEST";
PolynanceErrorCode["SSE_CONNECTION_FAILED"] = "ERR_SSE_CONNECT";
PolynanceErrorCode["SSE_MESSAGE_ERROR"] = "ERR_SSE_MESSAGE";
PolynanceErrorCode["SSE_CLOSED"] = "ERR_SSE_CLOSED";
// --- 入力・バリデーションエラー ---
PolynanceErrorCode["INVALID_PARAMETER"] = "ERR_INVALID_PARAM";
PolynanceErrorCode["VALIDATION_ERROR"] = "ERR_VALIDATION";
// --- APIサーバー起因のエラー ---
PolynanceErrorCode["SERVER_ERROR"] = "ERR_SERVER";
PolynanceErrorCode["NOT_FOUND"] = "ERR_NOT_FOUND";
PolynanceErrorCode["UNAUTHORIZED"] = "ERR_UNAUTHORIZED";
PolynanceErrorCode["FORBIDDEN"] = "ERR_FORBIDDEN";
PolynanceErrorCode["RATE_LIMIT_EXCEEDED"] = "ERR_RATE_LIMIT";
// --- SDK内部エラー ---
PolynanceErrorCode["INTERNAL_SDK_ERROR"] = "ERR_SDK_INTERNAL";
PolynanceErrorCode["ENVIRONMENT_ERROR"] = "ERR_ENVIRONMENT";
})(PolynanceErrorCode || (exports.PolynanceErrorCode = PolynanceErrorCode = {}));
/**
* PolynanceClientから発生するAPI関連エラーのためのカスタムエラークラス。
* デバッグやAIとの連携を容易にするための構造化されたコンテキストを提供します。
*/
class PolynanceApiError extends Error {
constructor(message, code, options) {
// エラーオブジェクト自体のメッセージを詳細化
let detailedMessage = `[${code}] ${message}`;
if (options?.methodName)
detailedMessage += ` (Method: ${options.methodName})`;
if (options?.statusCode)
detailedMessage += ` (Status: ${options.statusCode})`;
super(detailedMessage); // 整形したメッセージを Error クラスに渡す
this.name = 'PolynanceApiError';
this.code = code;
this.originalError = options?.cause;
this.methodName = options?.methodName;
this.statusCode = options?.statusCode;
this.responseData = options?.responseData;
this.context = options?.context;
// ユニークなエラーIDを生成
this.errorId = `pn-err-${Date.now()}-${Math.random().toString(36).substring(2, 7)}`;
// スタックトレースを正しくキャプチャ
if (Error.captureStackTrace) {
Error.captureStackTrace(this, PolynanceApiError);
}
// ログ出力時に冗長にならないよう、一部プロパティは列挙不可に設定(任意)
Object.defineProperty(this, 'originalError', { enumerable: false });
Object.defineProperty(this, 'stack', { enumerable: false });
}
/**
* ログ出力やAIへのコンテキスト共有に適した、人間が読みやすい文字列を生成します。
* コピー&ペーストでの利用を想定しています。
*/
toString() {
let str = `--- Polynance SDK Error ---\n`;
str += `Error ID: ${this.errorId}\n`;
str += `Code: ${this.code}\n`;
str += `Message: ${this.message}\n`; // super() に渡した整形済みメッセージを利用
if (this.methodName)
str += `Method: ${this.methodName}\n`;
if (this.statusCode)
str += `Status Code: ${this.statusCode}\n`;
if (this.context && Object.keys(this.context).length > 0) {
try {
// コンテキストを安全に文字列化(例: 大きすぎるオブジェクトは省略)
const contextStr = JSON.stringify(this.context, (key, value) => typeof value === 'object' && value !== null && JSON.stringify(value).length > 500
? '[Object too large]'
: value, 2); // インデント付きで見やすく
str += `Context: ${contextStr}\n`;
}
catch {
str += `Context: [Could not stringify context]\n`;
}
}
if (this.responseData) {
try {
// レスポンスデータを安全に文字列化
const responseDataStr = JSON.stringify(this.responseData, null, 2);
str += `Response Data: ${responseDataStr.length > 1000 ? responseDataStr.substring(0, 1000) + '... [Truncated]' : responseDataStr}\n`;
}
catch {
str += `Response Data: [Could not stringify response data]\n`;
}
}
// 元のエラー情報も簡潔に含める (オプション)
if (this.originalError) {
str += `Original Error: ${this.originalError.name}: ${this.originalError.message}\n`;
}
// toString() にはスタックトレース全体を含めず、必要なら .stack プロパティを参照
str += `---------------------------\n`;
return str;
}
/**
* より簡潔なエラー概要を提供します。ログのサマリーなどに利用できます。
*/
get summary() {
return `[${this.code}] ${this.message.split(' (Method:')[0].trim()} ${this.statusCode ? `(HTTP ${this.statusCode})` : ''} (ID: ${this.errorId})`;
}
}
exports.PolynanceApiError = PolynanceApiError;