@lifi/perps-sdk-provider-ondo 13.0.0 → 14.0.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/dist/cjs/utils/apiClient.d.ts +2 -1
- package/dist/cjs/utils/apiClient.d.ts.map +1 -1
- package/dist/cjs/utils/apiClient.js +10 -3
- package/dist/cjs/utils/apiClient.js.map +1 -1
- package/dist/cjs/utils/ondoErrorCode.d.ts +3 -0
- package/dist/cjs/utils/ondoErrorCode.d.ts.map +1 -0
- package/dist/cjs/utils/ondoErrorCode.js +11 -0
- package/dist/cjs/utils/ondoErrorCode.js.map +1 -0
- package/dist/esm/utils/apiClient.d.ts +4 -2
- package/dist/esm/utils/apiClient.d.ts.map +1 -1
- package/dist/esm/utils/apiClient.js +14 -5
- package/dist/esm/utils/apiClient.js.map +1 -1
- package/dist/esm/utils/ondoErrorCode.d.ts +7 -0
- package/dist/esm/utils/ondoErrorCode.d.ts.map +1 -0
- package/dist/esm/utils/ondoErrorCode.js +12 -0
- package/dist/esm/utils/ondoErrorCode.js.map +1 -0
- package/dist/types/utils/apiClient.d.ts +4 -2
- package/dist/types/utils/apiClient.d.ts.map +1 -1
- package/dist/types/utils/ondoErrorCode.d.ts +7 -0
- package/dist/types/utils/ondoErrorCode.d.ts.map +1 -0
- package/package.json +3 -3
- package/src/utils/apiClient.ts +23 -4
- package/src/utils/ondoErrorCode.ts +16 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { PerpsError, type ResolvedRetryPolicy } from '@lifi/perps-sdk';
|
|
2
|
+
import { PerpsErrorCode } from '@lifi/perps-types';
|
|
2
3
|
import type { OndoPageInfo } from '../types/wire.js';
|
|
3
4
|
export type ApiParams = Record<string, string | number | boolean>;
|
|
4
5
|
export interface OndoPage<T> {
|
|
@@ -8,7 +9,7 @@ export interface OndoPage<T> {
|
|
|
8
9
|
export type OndoHttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE';
|
|
9
10
|
export declare class OndoApiError extends PerpsError {
|
|
10
11
|
readonly errorCode: string | undefined;
|
|
11
|
-
constructor(message: string, errorCode?: string);
|
|
12
|
+
constructor(message: string, errorCode?: string, code?: PerpsErrorCode);
|
|
12
13
|
}
|
|
13
14
|
export declare class OndoSessionExpiredError extends PerpsError {
|
|
14
15
|
constructor(message: string);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiClient.d.ts","sourceRoot":"","sources":["../../../src/utils/apiClient.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"apiClient.d.ts","sourceRoot":"","sources":["../../../src/utils/apiClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,UAAU,EACV,KAAK,mBAAmB,EACzB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAIpD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAA;AAGjE,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,MAAM,EAAE,CAAC,EAAE,CAAA;IACX,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAA;CACnC;AAGD,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAA;AAS9D,qBAAa,YAAa,SAAQ,UAAU;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;gBAGpC,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,EAClB,IAAI,GAAE,cAA+C;CAKxD;AASD,qBAAa,uBAAwB,SAAQ,UAAU;gBACzC,OAAO,EAAE,MAAM;CAG5B;AAGD,eAAO,MAAM,mBAAmB,EAAE,mBAmBjC,CAAA;AAGD,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,MAAM,CAAC,EAAE,mBAAmB,CAAA;IAC5B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CACzB;AAGD,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,SAAS,CAAA;IAElB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAqBD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;gBAExC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB;IAOrD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAc9D,OAAO,CAAC,CAAC,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAejB,IAAI,CAAC,CAAC,EACV,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,OAAO,CAAA;QACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAChC,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,GACA,OAAO,CAAC,CAAC,CAAC;IAgBP,IAAI,CAAC,CAAC,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,GAC9C,OAAO,CAAC,CAAC,CAAC;IAUb,OAAO,CAAC,QAAQ;YAaF,OAAO;IAgCrB,OAAO,CAAC,MAAM;CAqCf"}
|
|
@@ -3,10 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.OndoApiClient = exports.ONDO_RETRY_DEFAULTS = exports.OndoSessionExpiredError = exports.OndoApiError = void 0;
|
|
4
4
|
const perps_sdk_1 = require("@lifi/perps-sdk");
|
|
5
5
|
const perps_types_1 = require("@lifi/perps-types");
|
|
6
|
+
const ondoErrorCode_js_1 = require("./ondoErrorCode.js");
|
|
6
7
|
class OndoApiError extends perps_sdk_1.PerpsError {
|
|
7
8
|
errorCode;
|
|
8
|
-
constructor(message, errorCode) {
|
|
9
|
-
super(
|
|
9
|
+
constructor(message, errorCode, code = perps_types_1.PerpsErrorCode.ThirdPartyError) {
|
|
10
|
+
super(code, message);
|
|
10
11
|
this.errorCode = errorCode;
|
|
11
12
|
}
|
|
12
13
|
}
|
|
@@ -119,8 +120,14 @@ class OndoApiClient {
|
|
|
119
120
|
if (status === 401) {
|
|
120
121
|
throw new OndoSessionExpiredError(`Ondo rejected the session token for ${path}`);
|
|
121
122
|
}
|
|
123
|
+
if (isGenericResponse(data) && !data.success) {
|
|
124
|
+
const bodyCode = (0, ondoErrorCode_js_1.ondoErrorCodeFromBody)(data.error_code);
|
|
125
|
+
if (bodyCode !== undefined) {
|
|
126
|
+
throw new OndoApiError(`Ondo API error for ${path}: ${data.error_code} — ${data.error ?? 'no error message'}`, data.error_code, bodyCode);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
122
129
|
if (status < 200 || status >= 300) {
|
|
123
|
-
throw new OndoApiError(`Ondo API request failed: ${status} — ${JSON.stringify(data).slice(0, 200)}`, isGenericResponse(data) ? data.error_code : undefined);
|
|
130
|
+
throw new OndoApiError(`Ondo API request failed: ${status} — ${JSON.stringify(data).slice(0, 200)}`, isGenericResponse(data) ? data.error_code : undefined, (0, perps_sdk_1.errorCodeFromStatus)(status, perps_types_1.PerpsErrorCode.ThirdPartyError));
|
|
124
131
|
}
|
|
125
132
|
if (!isGenericResponse(data)) {
|
|
126
133
|
throw new OndoApiError(`Ondo API returned an unexpected body for ${path}: ${JSON.stringify(data).slice(0, 200)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiClient.js","sourceRoot":"","sources":["../../../src/utils/apiClient.ts"],"names":[],"mappings":";;;AAAA,+
|
|
1
|
+
{"version":3,"file":"apiClient.js","sourceRoot":"","sources":["../../../src/utils/apiClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ondoErrorCode.d.ts","sourceRoot":"","sources":["../../../src/utils/ondoErrorCode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAYlD,eAAO,MAAM,qBAAqB,GAChC,WAAW,MAAM,GAAG,SAAS,KAC5B,cAAc,GAAG,SACwD,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ondoErrorCodeFromBody = void 0;
|
|
4
|
+
const perps_types_1 = require("@lifi/perps-types");
|
|
5
|
+
const ONDO_BODY_ERROR_CODES = new Map([
|
|
6
|
+
['insufficient_margin', perps_types_1.PerpsErrorCode.InsufficientMargin],
|
|
7
|
+
['clientOrderID_collision', perps_types_1.PerpsErrorCode.NonceAlreadyUsed],
|
|
8
|
+
]);
|
|
9
|
+
const ondoErrorCodeFromBody = (errorCode) => errorCode === undefined ? undefined : ONDO_BODY_ERROR_CODES.get(errorCode);
|
|
10
|
+
exports.ondoErrorCodeFromBody = ondoErrorCodeFromBody;
|
|
11
|
+
//# sourceMappingURL=ondoErrorCode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ondoErrorCode.js","sourceRoot":"","sources":["../../../src/utils/ondoErrorCode.ts"],"names":[],"mappings":";;;AAAA,mDAAkD;AAGlD,MAAM,qBAAqB,GAAwC,IAAI,GAAG,CAAC;IACzE,CAAC,qBAAqB,EAAE,4BAAc,CAAC,kBAAkB,CAAC;IAC1D,CAAC,yBAAyB,EAAE,4BAAc,CAAC,gBAAgB,CAAC;CAC7D,CAAC,CAAA;AAMK,MAAM,qBAAqB,GAAG,CACnC,SAA6B,EACD,EAAE,CAC9B,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;AAH/D,QAAA,qBAAqB,yBAG0C"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { PerpsError, type ResolvedRetryPolicy } from '@lifi/perps-sdk';
|
|
2
|
+
import { PerpsErrorCode } from '@lifi/perps-types';
|
|
2
3
|
import type { OndoPageInfo } from '../types/wire.js';
|
|
3
4
|
/** @internal */
|
|
4
5
|
export type ApiParams = Record<string, string | number | boolean>;
|
|
@@ -18,7 +19,7 @@ export type OndoHttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE';
|
|
|
18
19
|
*/
|
|
19
20
|
export declare class OndoApiError extends PerpsError {
|
|
20
21
|
readonly errorCode: string | undefined;
|
|
21
|
-
constructor(message: string, errorCode?: string);
|
|
22
|
+
constructor(message: string, errorCode?: string, code?: PerpsErrorCode);
|
|
22
23
|
}
|
|
23
24
|
/**
|
|
24
25
|
* The Ondo session JWT was rejected (HTTP 401). Distinct from
|
|
@@ -52,7 +53,8 @@ export interface OndoRequestOptions {
|
|
|
52
53
|
* the LI.FI backend. Every response is an `OndoGenericResponse` envelope; the
|
|
53
54
|
* client unwraps `result` on success and throws {@link OndoApiError} (carrying
|
|
54
55
|
* the wire `error_code`) otherwise. An HTTP 401 throws
|
|
55
|
-
* {@link OndoSessionExpiredError} so callers can re-run the SIWE login
|
|
56
|
+
* {@link OndoSessionExpiredError} so callers can re-run the SIWE login, and an
|
|
57
|
+
* HTTP 429 carries `RateLimitExceeded`.
|
|
56
58
|
* @public
|
|
57
59
|
*/
|
|
58
60
|
export declare class OndoApiClient {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiClient.d.ts","sourceRoot":"","sources":["../../../src/utils/apiClient.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"apiClient.d.ts","sourceRoot":"","sources":["../../../src/utils/apiClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,UAAU,EACV,KAAK,mBAAmB,EACzB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAGpD,gBAAgB;AAChB,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAA;AAEjE,0FAA0F;AAC1F,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,MAAM,EAAE,CAAC,EAAE,CAAA;IACX,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAA;CACnC;AAED,gBAAgB;AAChB,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAA;AAE9D;;;;;;GAMG;AACH,qBAAa,YAAa,SAAQ,UAAU;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;gBAGpC,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,EAClB,IAAI,GAAE,cAA+C;CAKxD;AAED;;;;;;GAMG;AACH,qBAAa,uBAAwB,SAAQ,UAAU;gBACzC,OAAO,EAAE,MAAM;CAG5B;AAED,gBAAgB;AAChB,eAAO,MAAM,mBAAmB,EAAE,mBAmBjC,CAAA;AAED,gBAAgB;AAChB,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,MAAM,CAAC,EAAE,mBAAmB,CAAA;IAC5B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CACzB;AAED,gBAAgB;AAChB,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AASD;;;;;;;;;;;GAWG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;gBAExC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB;IAOrD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAUpE;;;OAGG;IACG,OAAO,CAAC,CAAC,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAYvB;;OAEG;IACG,IAAI,CAAC,CAAC,EACV,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,OAAO,CAAA;QACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAChC,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,GACA,OAAO,CAAC,CAAC,CAAC;IAWb;;;;OAIG;IACG,IAAI,CAAC,CAAC,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,GAC9C,OAAO,CAAC,CAAC,CAAC;IAUb,OAAO,CAAC,QAAQ;YAaF,OAAO;IAgCrB,OAAO,CAAC,MAAM;CAqCf"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { DISABLED_RETRY, fetchWithRetry, PerpsError, } from '@lifi/perps-sdk';
|
|
1
|
+
import { DISABLED_RETRY, errorCodeFromStatus, fetchWithRetry, PerpsError, } from '@lifi/perps-sdk';
|
|
2
2
|
import { PerpsErrorCode } from '@lifi/perps-types';
|
|
3
|
+
import { ondoErrorCodeFromBody } from './ondoErrorCode.js';
|
|
3
4
|
/**
|
|
4
5
|
* Ondo request failure — a non-2xx HTTP status, a `success: false` envelope,
|
|
5
6
|
* or a body that is not a `GenericResponse` envelope at all. `errorCode`
|
|
@@ -9,8 +10,8 @@ import { PerpsErrorCode } from '@lifi/perps-types';
|
|
|
9
10
|
*/
|
|
10
11
|
export class OndoApiError extends PerpsError {
|
|
11
12
|
errorCode;
|
|
12
|
-
constructor(message, errorCode) {
|
|
13
|
-
super(
|
|
13
|
+
constructor(message, errorCode, code = PerpsErrorCode.ThirdPartyError) {
|
|
14
|
+
super(code, message);
|
|
14
15
|
this.errorCode = errorCode;
|
|
15
16
|
}
|
|
16
17
|
}
|
|
@@ -56,7 +57,8 @@ const isGenericResponse = (data) => typeof data === 'object' &&
|
|
|
56
57
|
* the LI.FI backend. Every response is an `OndoGenericResponse` envelope; the
|
|
57
58
|
* client unwraps `result` on success and throws {@link OndoApiError} (carrying
|
|
58
59
|
* the wire `error_code`) otherwise. An HTTP 401 throws
|
|
59
|
-
* {@link OndoSessionExpiredError} so callers can re-run the SIWE login
|
|
60
|
+
* {@link OndoSessionExpiredError} so callers can re-run the SIWE login, and an
|
|
61
|
+
* HTTP 429 carries `RateLimitExceeded`.
|
|
60
62
|
* @public
|
|
61
63
|
*/
|
|
62
64
|
export class OndoApiClient {
|
|
@@ -149,11 +151,18 @@ export class OndoApiClient {
|
|
|
149
151
|
return { status: response.status, data };
|
|
150
152
|
}
|
|
151
153
|
unwrap(path, status, data) {
|
|
154
|
+
// A 401 outranks any body code: only this branch evicts the stale JWT.
|
|
152
155
|
if (status === 401) {
|
|
153
156
|
throw new OndoSessionExpiredError(`Ondo rejected the session token for ${path}`);
|
|
154
157
|
}
|
|
158
|
+
if (isGenericResponse(data) && !data.success) {
|
|
159
|
+
const bodyCode = ondoErrorCodeFromBody(data.error_code);
|
|
160
|
+
if (bodyCode !== undefined) {
|
|
161
|
+
throw new OndoApiError(`Ondo API error for ${path}: ${data.error_code} — ${data.error ?? 'no error message'}`, data.error_code, bodyCode);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
155
164
|
if (status < 200 || status >= 300) {
|
|
156
|
-
throw new OndoApiError(`Ondo API request failed: ${status} — ${JSON.stringify(data).slice(0, 200)}`, isGenericResponse(data) ? data.error_code : undefined);
|
|
165
|
+
throw new OndoApiError(`Ondo API request failed: ${status} — ${JSON.stringify(data).slice(0, 200)}`, isGenericResponse(data) ? data.error_code : undefined, errorCodeFromStatus(status, PerpsErrorCode.ThirdPartyError));
|
|
157
166
|
}
|
|
158
167
|
if (!isGenericResponse(data)) {
|
|
159
168
|
throw new OndoApiError(`Ondo API returned an unexpected body for ${path}: ${JSON.stringify(data).slice(0, 200)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiClient.js","sourceRoot":"","sources":["../../../src/utils/apiClient.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,cAAc,EACd,UAAU,GAEX,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"apiClient.js","sourceRoot":"","sources":["../../../src/utils/apiClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { PerpsErrorCode } from '@lifi/perps-types';
|
|
2
|
+
/**
|
|
3
|
+
* Maps an Ondo envelope `error_code` to the `PerpsErrorCode` it names. Returns
|
|
4
|
+
* `undefined` for every other code so the status-driven layer decides.
|
|
5
|
+
*/
|
|
6
|
+
export declare const ondoErrorCodeFromBody: (errorCode: string | undefined) => PerpsErrorCode | undefined;
|
|
7
|
+
//# sourceMappingURL=ondoErrorCode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ondoErrorCode.d.ts","sourceRoot":"","sources":["../../../src/utils/ondoErrorCode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAQlD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAChC,WAAW,MAAM,GAAG,SAAS,KAC5B,cAAc,GAAG,SACwD,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { PerpsErrorCode } from '@lifi/perps-types';
|
|
2
|
+
/** Ondo envelope `error_code` values that name a rejection a `PerpsErrorCode` describes. */
|
|
3
|
+
const ONDO_BODY_ERROR_CODES = new Map([
|
|
4
|
+
['insufficient_margin', PerpsErrorCode.InsufficientMargin],
|
|
5
|
+
['clientOrderID_collision', PerpsErrorCode.NonceAlreadyUsed],
|
|
6
|
+
]);
|
|
7
|
+
/**
|
|
8
|
+
* Maps an Ondo envelope `error_code` to the `PerpsErrorCode` it names. Returns
|
|
9
|
+
* `undefined` for every other code so the status-driven layer decides.
|
|
10
|
+
*/
|
|
11
|
+
export const ondoErrorCodeFromBody = (errorCode) => errorCode === undefined ? undefined : ONDO_BODY_ERROR_CODES.get(errorCode);
|
|
12
|
+
//# sourceMappingURL=ondoErrorCode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ondoErrorCode.js","sourceRoot":"","sources":["../../../src/utils/ondoErrorCode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,4FAA4F;AAC5F,MAAM,qBAAqB,GAAwC,IAAI,GAAG,CAAC;IACzE,CAAC,qBAAqB,EAAE,cAAc,CAAC,kBAAkB,CAAC;IAC1D,CAAC,yBAAyB,EAAE,cAAc,CAAC,gBAAgB,CAAC;CAC7D,CAAC,CAAA;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,SAA6B,EACD,EAAE,CAC9B,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { PerpsError, type ResolvedRetryPolicy } from '@lifi/perps-sdk';
|
|
2
|
+
import { PerpsErrorCode } from '@lifi/perps-types';
|
|
2
3
|
import type { OndoPageInfo } from '../types/wire.js';
|
|
3
4
|
/** @internal */
|
|
4
5
|
export type ApiParams = Record<string, string | number | boolean>;
|
|
@@ -18,7 +19,7 @@ export type OndoHttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE';
|
|
|
18
19
|
*/
|
|
19
20
|
export declare class OndoApiError extends PerpsError {
|
|
20
21
|
readonly errorCode: string | undefined;
|
|
21
|
-
constructor(message: string, errorCode?: string);
|
|
22
|
+
constructor(message: string, errorCode?: string, code?: PerpsErrorCode);
|
|
22
23
|
}
|
|
23
24
|
/**
|
|
24
25
|
* The Ondo session JWT was rejected (HTTP 401). Distinct from
|
|
@@ -52,7 +53,8 @@ export interface OndoRequestOptions {
|
|
|
52
53
|
* the LI.FI backend. Every response is an `OndoGenericResponse` envelope; the
|
|
53
54
|
* client unwraps `result` on success and throws {@link OndoApiError} (carrying
|
|
54
55
|
* the wire `error_code`) otherwise. An HTTP 401 throws
|
|
55
|
-
* {@link OndoSessionExpiredError} so callers can re-run the SIWE login
|
|
56
|
+
* {@link OndoSessionExpiredError} so callers can re-run the SIWE login, and an
|
|
57
|
+
* HTTP 429 carries `RateLimitExceeded`.
|
|
56
58
|
* @public
|
|
57
59
|
*/
|
|
58
60
|
export declare class OndoApiClient {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apiClient.d.ts","sourceRoot":"","sources":["../../../src/utils/apiClient.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"apiClient.d.ts","sourceRoot":"","sources":["../../../src/utils/apiClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,UAAU,EACV,KAAK,mBAAmB,EACzB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAGpD,gBAAgB;AAChB,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAA;AAEjE,0FAA0F;AAC1F,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,MAAM,EAAE,CAAC,EAAE,CAAA;IACX,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAA;CACnC;AAED,gBAAgB;AAChB,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAA;AAE9D;;;;;;GAMG;AACH,qBAAa,YAAa,SAAQ,UAAU;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;gBAGpC,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,EAClB,IAAI,GAAE,cAA+C;CAKxD;AAED;;;;;;GAMG;AACH,qBAAa,uBAAwB,SAAQ,UAAU;gBACzC,OAAO,EAAE,MAAM;CAG5B;AAED,gBAAgB;AAChB,eAAO,MAAM,mBAAmB,EAAE,mBAmBjC,CAAA;AAED,gBAAgB;AAChB,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,MAAM,CAAC,EAAE,mBAAmB,CAAA;IAC5B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CACzB;AAED,gBAAgB;AAChB,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AASD;;;;;;;;;;;GAWG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;gBAExC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB;IAOrD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAUpE;;;OAGG;IACG,OAAO,CAAC,CAAC,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAYvB;;OAEG;IACG,IAAI,CAAC,CAAC,EACV,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,OAAO,CAAA;QACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAChC,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,GACA,OAAO,CAAC,CAAC,CAAC;IAWb;;;;OAIG;IACG,IAAI,CAAC,CAAC,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,GAC9C,OAAO,CAAC,CAAC,CAAC;IAUb,OAAO,CAAC,QAAQ;YAaF,OAAO;IAgCrB,OAAO,CAAC,MAAM;CAqCf"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { PerpsErrorCode } from '@lifi/perps-types';
|
|
2
|
+
/**
|
|
3
|
+
* Maps an Ondo envelope `error_code` to the `PerpsErrorCode` it names. Returns
|
|
4
|
+
* `undefined` for every other code so the status-driven layer decides.
|
|
5
|
+
*/
|
|
6
|
+
export declare const ondoErrorCodeFromBody: (errorCode: string | undefined) => PerpsErrorCode | undefined;
|
|
7
|
+
//# sourceMappingURL=ondoErrorCode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ondoErrorCode.d.ts","sourceRoot":"","sources":["../../../src/utils/ondoErrorCode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAQlD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAChC,WAAW,MAAM,GAAG,SAAS,KAC5B,cAAc,GAAG,SACwD,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lifi/perps-sdk-provider-ondo",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "14.0.0",
|
|
4
4
|
"description": "Ondo Perps provider plugin for @lifi/perps-sdk",
|
|
5
5
|
"homepage": "https://github.com/lifinance/perps-sdk",
|
|
6
6
|
"bugs": {
|
|
@@ -44,10 +44,10 @@
|
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"big.js": "^7.0.1",
|
|
46
46
|
"viem": "^2.55.18",
|
|
47
|
-
"@lifi/perps-types": "^12.0
|
|
47
|
+
"@lifi/perps-types": "^12.1.0"
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
50
|
-
"@lifi/perps-sdk": "^12.
|
|
50
|
+
"@lifi/perps-sdk": "^12.1.0"
|
|
51
51
|
},
|
|
52
52
|
"publishConfig": {
|
|
53
53
|
"access": "public"
|
package/src/utils/apiClient.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DISABLED_RETRY,
|
|
3
|
+
errorCodeFromStatus,
|
|
3
4
|
fetchWithRetry,
|
|
4
5
|
PerpsError,
|
|
5
6
|
type ResolvedRetryPolicy,
|
|
@@ -7,6 +8,7 @@ import {
|
|
|
7
8
|
import { PerpsErrorCode } from '@lifi/perps-types'
|
|
8
9
|
import type { OndoGenericResponse } from '../types/auth.js'
|
|
9
10
|
import type { OndoPageInfo } from '../types/wire.js'
|
|
11
|
+
import { ondoErrorCodeFromBody } from './ondoErrorCode.js'
|
|
10
12
|
|
|
11
13
|
/** @internal */
|
|
12
14
|
export type ApiParams = Record<string, string | number | boolean>
|
|
@@ -30,8 +32,12 @@ export type OndoHttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE'
|
|
|
30
32
|
export class OndoApiError extends PerpsError {
|
|
31
33
|
readonly errorCode: string | undefined
|
|
32
34
|
|
|
33
|
-
constructor(
|
|
34
|
-
|
|
35
|
+
constructor(
|
|
36
|
+
message: string,
|
|
37
|
+
errorCode?: string,
|
|
38
|
+
code: PerpsErrorCode = PerpsErrorCode.ThirdPartyError
|
|
39
|
+
) {
|
|
40
|
+
super(code, message)
|
|
35
41
|
this.errorCode = errorCode
|
|
36
42
|
}
|
|
37
43
|
}
|
|
@@ -100,7 +106,8 @@ const isGenericResponse = (
|
|
|
100
106
|
* the LI.FI backend. Every response is an `OndoGenericResponse` envelope; the
|
|
101
107
|
* client unwraps `result` on success and throws {@link OndoApiError} (carrying
|
|
102
108
|
* the wire `error_code`) otherwise. An HTTP 401 throws
|
|
103
|
-
* {@link OndoSessionExpiredError} so callers can re-run the SIWE login
|
|
109
|
+
* {@link OndoSessionExpiredError} so callers can re-run the SIWE login, and an
|
|
110
|
+
* HTTP 429 carries `RateLimitExceeded`.
|
|
104
111
|
* @public
|
|
105
112
|
*/
|
|
106
113
|
export class OndoApiClient {
|
|
@@ -232,15 +239,27 @@ export class OndoApiClient {
|
|
|
232
239
|
}
|
|
233
240
|
|
|
234
241
|
private unwrap<T>(path: string, status: number, data: unknown): T {
|
|
242
|
+
// A 401 outranks any body code: only this branch evicts the stale JWT.
|
|
235
243
|
if (status === 401) {
|
|
236
244
|
throw new OndoSessionExpiredError(
|
|
237
245
|
`Ondo rejected the session token for ${path}`
|
|
238
246
|
)
|
|
239
247
|
}
|
|
248
|
+
if (isGenericResponse(data) && !data.success) {
|
|
249
|
+
const bodyCode = ondoErrorCodeFromBody(data.error_code)
|
|
250
|
+
if (bodyCode !== undefined) {
|
|
251
|
+
throw new OndoApiError(
|
|
252
|
+
`Ondo API error for ${path}: ${data.error_code} — ${data.error ?? 'no error message'}`,
|
|
253
|
+
data.error_code,
|
|
254
|
+
bodyCode
|
|
255
|
+
)
|
|
256
|
+
}
|
|
257
|
+
}
|
|
240
258
|
if (status < 200 || status >= 300) {
|
|
241
259
|
throw new OndoApiError(
|
|
242
260
|
`Ondo API request failed: ${status} — ${JSON.stringify(data).slice(0, 200)}`,
|
|
243
|
-
isGenericResponse(data) ? data.error_code : undefined
|
|
261
|
+
isGenericResponse(data) ? data.error_code : undefined,
|
|
262
|
+
errorCodeFromStatus(status, PerpsErrorCode.ThirdPartyError)
|
|
244
263
|
)
|
|
245
264
|
}
|
|
246
265
|
if (!isGenericResponse(data)) {
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { PerpsErrorCode } from '@lifi/perps-types'
|
|
2
|
+
|
|
3
|
+
/** Ondo envelope `error_code` values that name a rejection a `PerpsErrorCode` describes. */
|
|
4
|
+
const ONDO_BODY_ERROR_CODES: ReadonlyMap<string, PerpsErrorCode> = new Map([
|
|
5
|
+
['insufficient_margin', PerpsErrorCode.InsufficientMargin],
|
|
6
|
+
['clientOrderID_collision', PerpsErrorCode.NonceAlreadyUsed],
|
|
7
|
+
])
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Maps an Ondo envelope `error_code` to the `PerpsErrorCode` it names. Returns
|
|
11
|
+
* `undefined` for every other code so the status-driven layer decides.
|
|
12
|
+
*/
|
|
13
|
+
export const ondoErrorCodeFromBody = (
|
|
14
|
+
errorCode: string | undefined
|
|
15
|
+
): PerpsErrorCode | undefined =>
|
|
16
|
+
errorCode === undefined ? undefined : ONDO_BODY_ERROR_CODES.get(errorCode)
|