@lifi/perps-sdk-provider-ondo 2.1.0 → 2.2.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/OndoProvider.d.ts.map +1 -1
- package/dist/cjs/OndoProvider.js +14 -3
- package/dist/cjs/OndoProvider.js.map +1 -1
- package/dist/cjs/accountConfig.d.ts.map +1 -1
- package/dist/cjs/accountConfig.js +6 -0
- package/dist/cjs/accountConfig.js.map +1 -1
- package/dist/cjs/auth/signActions.d.ts.map +1 -1
- package/dist/cjs/auth/signActions.js +14 -0
- package/dist/cjs/auth/signActions.js.map +1 -1
- package/dist/cjs/utils/depositAddress.d.ts +24 -0
- package/dist/cjs/utils/depositAddress.d.ts.map +1 -0
- package/dist/cjs/utils/depositAddress.js +84 -0
- package/dist/cjs/utils/depositAddress.js.map +1 -0
- package/dist/cjs/utils/index.d.ts +1 -0
- package/dist/cjs/utils/index.d.ts.map +1 -1
- package/dist/cjs/utils/index.js +6 -1
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/websocket/OndoWsProvider.js +1 -1
- package/dist/esm/OndoProvider.d.ts.map +1 -1
- package/dist/esm/OndoProvider.js +15 -4
- package/dist/esm/OndoProvider.js.map +1 -1
- package/dist/esm/accountConfig.d.ts.map +1 -1
- package/dist/esm/accountConfig.js +8 -1
- package/dist/esm/accountConfig.js.map +1 -1
- package/dist/esm/auth/signActions.d.ts.map +1 -1
- package/dist/esm/auth/signActions.js +16 -0
- package/dist/esm/auth/signActions.js.map +1 -1
- package/dist/esm/utils/depositAddress.d.ts +38 -0
- package/dist/esm/utils/depositAddress.d.ts.map +1 -0
- package/dist/esm/utils/depositAddress.js +90 -0
- package/dist/esm/utils/depositAddress.js.map +1 -0
- package/dist/esm/utils/index.d.ts +1 -0
- package/dist/esm/utils/index.d.ts.map +1 -1
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/websocket/OndoWsProvider.js +1 -1
- package/dist/types/OndoProvider.d.ts.map +1 -1
- package/dist/types/accountConfig.d.ts.map +1 -1
- package/dist/types/auth/signActions.d.ts.map +1 -1
- package/dist/types/utils/depositAddress.d.ts +38 -0
- package/dist/types/utils/depositAddress.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +1 -0
- package/dist/types/utils/index.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/OndoProvider.ts +35 -23
- package/src/accountConfig.ts +10 -1
- package/src/auth/signActions.ts +28 -0
- package/src/utils/depositAddress.ts +128 -0
- package/src/utils/index.ts +8 -0
- package/src/websocket/OndoWsProvider.ts +1 -1
|
@@ -2,6 +2,7 @@ import { PerpsError } from '@lifi/perps-sdk';
|
|
|
2
2
|
import { ActionType, PerpsErrorCode, SigningMethod } from '@lifi/perps-types';
|
|
3
3
|
import { ONDO_API_KEY_NAME, ONDO_API_KEY_SCOPES, ONDO_PRIVACY_VERSION, ONDO_TERMS_VERSION, } from '../constants.js';
|
|
4
4
|
import { OndoApiError, OndoSessionExpiredError, } from '../utils/apiClient.js';
|
|
5
|
+
import { buildOndoProvisionPayload, listOndoDepositAddress, } from '../utils/depositAddress.js';
|
|
5
6
|
import { completeSiweLogin } from './completeSiweLogin.js';
|
|
6
7
|
import { hmacSignRequest } from './hmac.js';
|
|
7
8
|
import { isOndoApiKey } from './OndoApiKeyStore.js';
|
|
@@ -138,6 +139,21 @@ export async function ondoSignActions(deps, method, steps, address, ctx) {
|
|
|
138
139
|
throw new PerpsError(PerpsErrorCode.SDKError, `Ondo received a non-session step ('${step.action}') under the session signing method.`);
|
|
139
140
|
}
|
|
140
141
|
switch (step.action) {
|
|
142
|
+
case ActionType.CREATE_DEPOSIT_ADDRESS: {
|
|
143
|
+
const token = await deps.tokenStore.get(address);
|
|
144
|
+
if (token === null) {
|
|
145
|
+
throw new OndoSessionExpiredError(`No valid Ondo session token stored for ${address}. Run the SIWE login first.`);
|
|
146
|
+
}
|
|
147
|
+
const account = await deps.client.get('/v1/account', { authToken: token.token });
|
|
148
|
+
const payload = buildOndoProvisionPayload(step.session, typeof account.accountID === 'string' ? account.accountID : '');
|
|
149
|
+
await deps.client.post('/v1/provision_address', payload, {
|
|
150
|
+
authToken: token.token,
|
|
151
|
+
});
|
|
152
|
+
// Re-query to validate that Ondo can read the provisioned address;
|
|
153
|
+
// getAccount performs the authoritative state refresh afterward.
|
|
154
|
+
await listOndoDepositAddress(deps.client, token.token);
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
141
157
|
case ActionType.ACCEPT_PROVIDER_TERMS: {
|
|
142
158
|
const token = await deps.tokenStore.get(address);
|
|
143
159
|
if (token === null) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signActions.js","sourceRoot":"","sources":["../../../src/auth/signActions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA2B,MAAM,iBAAiB,CAAA;AASrE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAE7E,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EAEL,YAAY,EACZ,uBAAuB,GACxB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAwB,MAAM,sBAAsB,CAAA;AAUzE,MAAM,UAAU,GAAG,CAAC,IAAgB,EAA0B,EAAE,CAAC,MAAM,IAAI,IAAI,CAAA;AAE/E,MAAM,aAAa,GAAG,CAAC,IAAgB,EAA6B,EAAE,CACpE,SAAS,IAAI,IAAI,CAAA;AAEnB,MAAM,UAAU,GAAG,CACjB,IAAgB,EACmC,EAAE,CAAC,SAAS,IAAI,IAAI,CAAA;AAEzE;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,OAA0B;IAChD,MAAM,MAAM,GAAe;QACzB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAA;IACD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,YAAY,CACpB,2DAA2D,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CACnG,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,YAAY,CACzB,IAAyB,EACzB,OAAgB;IAEhB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACpD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAChD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,uBAAuB,CAC/B,0CAA0C,OAAO,6BAA6B,CAC/E,CAAA;IACH,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CACpC,cAAc,EACd,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,mBAAmB,EAAE,EACxD,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,CAC3B,CAAA;IACD,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;IACtC,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC3C,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,qBAAqB,CAClC,IAAyB,EACzB,OAAgB,EAChB,OAAkC;IAElC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAChD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,uBAAuB,CAC/B,0CAA0C,OAAO,6BAA6B,CAC/E,CAAA;IACH,CAAC;IACD,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE;QACnD,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACvE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,CAAC,KAAK,EAAE,EAAE;KACpD,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAyB,EACzB,MAAqB,EACrB,KAAmB,EACnB,OAAgB,EAChB,GAAwB;IAExB,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;YACxB,MAAM,UAAU,GAAG,GAAG,EAAE,UAAU,CAAA;YAClC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,QAAQ,EACvB,mEAAmE;oBACjE,4BAA4B,CAC/B,CAAA;YACH,CAAC;YACD,MAAM,MAAM,GAAuB,EAAE,CAAA;YACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtB,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,QAAQ,EACvB,mCAAmC,IAAI,CAAC,MAAM,mCAAmC,CAClF,CAAA;gBACH,CAAC;gBACD,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,iBAAiB,CAClD,IAAI,CAAC,MAAM,EACX,UAAU,EACV,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAC1D,CAAA;gBACD,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;gBACzC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;YAClE,CAAC;YACD,OAAO,MAAM,CAAA;QACf,CAAC;QAED,KAAK,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;YACxB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YAChD,OAAO,OAAO,CAAC,GAAG,CAChB,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAiC,EAAE;gBACtD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtB,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,QAAQ,EACvB,4CAA4C,IAAI,CAAC,MAAM,mCAAmC,CAC3F,CAAA;gBACH,CAAC;gBACD,wEAAwE;gBACxE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;gBAC9B,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE;oBACxD,WAAW;oBACX,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;oBAC3B,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;oBAChC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;iBACxB,CAAC,CAAA;gBACF,OAAO;oBACL,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,IAAI,EAAE;wBACJ,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,WAAW;wBACX,SAAS;qBACV;iBACF,CAAA;YACH,CAAC,CAAC,CACH,CAAA;QACH,CAAC;QAED,KAAK,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrB,MAAM,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;oBACxD,SAAQ;gBACV,CAAC;gBACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;oBACzB,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,QAAQ,EACvB,sCAAsC,IAAI,CAAC,MAAM,sCAAsC,CACxF,CAAA;gBACH,CAAC;gBACD,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;oBACpB,KAAK,UAAU,CAAC,qBAAqB,CAAC,CAAC,CAAC;wBACtC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;wBAChD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;4BACnB,MAAM,IAAI,uBAAuB,CAC/B,0CAA0C,OAAO,6BAA6B,CAC/E,CAAA;wBACH,CAAC;wBACD,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CACpB,eAAe,EACf;4BACE,YAAY,EAAE,kBAAkB;4BAChC,cAAc,EAAE,oBAAoB;yBACrC,EACD,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,CAC3B,CAAA;wBACD,MAAK;oBACP,CAAC;oBACD,KAAK,UAAU,CAAC,gBAAgB;wBAC9B,MAAM,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;wBACjC,MAAK;oBACP;wBACE,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,QAAQ,EACvB,iDAAiD,IAAI,CAAC,MAAM,IAAI,CACjE,CAAA;gBACL,CAAC;YACH,CAAC;YACD,OAAO,EAAE,CAAA;QACX,CAAC;QAED;YACE,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,QAAQ,EACvB,2BAA2B,MAAM,4CAA4C,CAC9E,CAAA;IACL,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"signActions.js","sourceRoot":"","sources":["../../../src/auth/signActions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA2B,MAAM,iBAAiB,CAAA;AASrE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAE7E,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EAEL,YAAY,EACZ,uBAAuB,GACxB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAwB,MAAM,sBAAsB,CAAA;AAUzE,MAAM,UAAU,GAAG,CAAC,IAAgB,EAA0B,EAAE,CAAC,MAAM,IAAI,IAAI,CAAA;AAE/E,MAAM,aAAa,GAAG,CAAC,IAAgB,EAA6B,EAAE,CACpE,SAAS,IAAI,IAAI,CAAA;AAEnB,MAAM,UAAU,GAAG,CACjB,IAAgB,EACmC,EAAE,CAAC,SAAS,IAAI,IAAI,CAAA;AAEzE;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,OAA0B;IAChD,MAAM,MAAM,GAAe;QACzB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAA;IACD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,YAAY,CACpB,2DAA2D,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CACnG,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,YAAY,CACzB,IAAyB,EACzB,OAAgB;IAEhB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACpD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAChD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,uBAAuB,CAC/B,0CAA0C,OAAO,6BAA6B,CAC/E,CAAA;IACH,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CACpC,cAAc,EACd,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,mBAAmB,EAAE,EACxD,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,CAC3B,CAAA;IACD,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;IACtC,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC3C,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,qBAAqB,CAClC,IAAyB,EACzB,OAAgB,EAChB,OAAkC;IAElC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAChD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,uBAAuB,CAC/B,0CAA0C,OAAO,6BAA6B,CAC/E,CAAA;IACH,CAAC;IACD,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE;QACnD,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACvE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,CAAC,KAAK,EAAE,EAAE;KACpD,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAyB,EACzB,MAAqB,EACrB,KAAmB,EACnB,OAAgB,EAChB,GAAwB;IAExB,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;YACxB,MAAM,UAAU,GAAG,GAAG,EAAE,UAAU,CAAA;YAClC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,QAAQ,EACvB,mEAAmE;oBACjE,4BAA4B,CAC/B,CAAA;YACH,CAAC;YACD,MAAM,MAAM,GAAuB,EAAE,CAAA;YACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtB,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,QAAQ,EACvB,mCAAmC,IAAI,CAAC,MAAM,mCAAmC,CAClF,CAAA;gBACH,CAAC;gBACD,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,iBAAiB,CAClD,IAAI,CAAC,MAAM,EACX,UAAU,EACV,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAC1D,CAAA;gBACD,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;gBACzC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;YAClE,CAAC;YACD,OAAO,MAAM,CAAA;QACf,CAAC;QAED,KAAK,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;YACxB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YAChD,OAAO,OAAO,CAAC,GAAG,CAChB,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAiC,EAAE;gBACtD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtB,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,QAAQ,EACvB,4CAA4C,IAAI,CAAC,MAAM,mCAAmC,CAC3F,CAAA;gBACH,CAAC;gBACD,wEAAwE;gBACxE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;gBAC9B,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,SAAS,EAAE;oBACxD,WAAW;oBACX,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;oBAC3B,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;oBAChC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;iBACxB,CAAC,CAAA;gBACF,OAAO;oBACL,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,IAAI,EAAE;wBACJ,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,WAAW;wBACX,SAAS;qBACV;iBACF,CAAA;YACH,CAAC,CAAC,CACH,CAAA;QACH,CAAC;QAED,KAAK,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrB,MAAM,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;oBACxD,SAAQ;gBACV,CAAC;gBACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;oBACzB,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,QAAQ,EACvB,sCAAsC,IAAI,CAAC,MAAM,sCAAsC,CACxF,CAAA;gBACH,CAAC;gBACD,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;oBACpB,KAAK,UAAU,CAAC,sBAAsB,CAAC,CAAC,CAAC;wBACvC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;wBAChD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;4BACnB,MAAM,IAAI,uBAAuB,CAC/B,0CAA0C,OAAO,6BAA6B,CAC/E,CAAA;wBACH,CAAC;wBACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CACnC,aAAa,EACb,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,CAC3B,CAAA;wBACD,MAAM,OAAO,GAAG,yBAAyB,CACvC,IAAI,CAAC,OAAO,EACZ,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAC/D,CAAA;wBACD,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,OAAO,EAAE;4BACvD,SAAS,EAAE,KAAK,CAAC,KAAK;yBACvB,CAAC,CAAA;wBACF,mEAAmE;wBACnE,iEAAiE;wBACjE,MAAM,sBAAsB,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;wBACtD,MAAK;oBACP,CAAC;oBAED,KAAK,UAAU,CAAC,qBAAqB,CAAC,CAAC,CAAC;wBACtC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;wBAChD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;4BACnB,MAAM,IAAI,uBAAuB,CAC/B,0CAA0C,OAAO,6BAA6B,CAC/E,CAAA;wBACH,CAAC;wBACD,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CACpB,eAAe,EACf;4BACE,YAAY,EAAE,kBAAkB;4BAChC,cAAc,EAAE,oBAAoB;yBACrC,EACD,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,CAC3B,CAAA;wBACD,MAAK;oBACP,CAAC;oBACD,KAAK,UAAU,CAAC,gBAAgB;wBAC9B,MAAM,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;wBACjC,MAAK;oBACP;wBACE,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,QAAQ,EACvB,iDAAiD,IAAI,CAAC,MAAM,IAAI,CACjE,CAAA;gBACL,CAAC;YACH,CAAC;YACD,OAAO,EAAE,CAAA;QACX,CAAC;QAED;YACE,MAAM,IAAI,UAAU,CAClB,cAAc,CAAC,QAAQ,EACvB,2BAA2B,MAAM,4CAA4C,CAC9E,CAAA;IACL,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { OndoApiClient } from './apiClient.js';
|
|
2
|
+
/** The only deposit policy supported by the Ondo provider. */
|
|
3
|
+
export declare const ONDO_DEPOSIT_POLICY: {
|
|
4
|
+
readonly network: "ethereum";
|
|
5
|
+
readonly symbol: "USDC";
|
|
6
|
+
readonly depositDestination: {
|
|
7
|
+
readonly wallet: "margin";
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
/** @internal */
|
|
11
|
+
export type OndoDepositPolicyMarker = {
|
|
12
|
+
network: 'ethereum';
|
|
13
|
+
symbol: 'USDC';
|
|
14
|
+
depositDestination: {
|
|
15
|
+
wallet: 'margin';
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
/** @internal */
|
|
19
|
+
export interface OndoDepositAddressRecord {
|
|
20
|
+
address: string;
|
|
21
|
+
coin: string;
|
|
22
|
+
network: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Extract the canonical Ethereum USDC address from Ondo's list response.
|
|
26
|
+
* An empty list is a valid, unsatisfied setup state; malformed records are
|
|
27
|
+
* errors so an API/schema failure cannot be mistaken for an absent address.
|
|
28
|
+
*/
|
|
29
|
+
export declare const parseOndoDepositAddress: (result: unknown) => string | null;
|
|
30
|
+
/** Query Ondo's authenticated Ethereum USDC deposit-address list. */
|
|
31
|
+
export declare const listOndoDepositAddress: (client: OndoApiClient, authToken: string) => Promise<string | null>;
|
|
32
|
+
/**
|
|
33
|
+
* Validate the backend's minimal client-only marker and hydrate the venue
|
|
34
|
+
* request with the authenticated account ID. The marker is validated against
|
|
35
|
+
* the one fixed Ondo policy before any venue write is attempted.
|
|
36
|
+
*/
|
|
37
|
+
export declare const buildOndoProvisionPayload: (marker: object, accountID: string) => Record<string, unknown>;
|
|
38
|
+
//# sourceMappingURL=depositAddress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depositAddress.d.ts","sourceRoot":"","sources":["../../../src/utils/depositAddress.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAGnD,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB;;;;;;CAItB,CAAA;AAEV,gBAAgB;AAChB,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,UAAU,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,kBAAkB,EAAE;QAAE,MAAM,EAAE,QAAQ,CAAA;KAAE,CAAA;CACzC,CAAA;AAED,gBAAgB;AAChB,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAsBD;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,GAAI,QAAQ,OAAO,KAAG,MAAM,GAAG,IAoBlE,CAAA;AAED,qEAAqE;AACrE,eAAO,MAAM,sBAAsB,GACjC,QAAQ,aAAa,EACrB,WAAW,MAAM,KAChB,OAAO,CAAC,MAAM,GAAG,IAAI,CAOrB,CAAA;AAgBH;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,GACpC,QAAQ,MAAM,EACd,WAAW,MAAM,KAChB,MAAM,CAAC,MAAM,EAAE,OAAO,CAoBxB,CAAA"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { isAddress } from 'viem';
|
|
2
|
+
import { OndoApiError } from './apiClient.js';
|
|
3
|
+
/** The only deposit policy supported by the Ondo provider. */
|
|
4
|
+
export const ONDO_DEPOSIT_POLICY = {
|
|
5
|
+
network: 'ethereum',
|
|
6
|
+
symbol: 'USDC',
|
|
7
|
+
depositDestination: { wallet: 'margin' },
|
|
8
|
+
};
|
|
9
|
+
const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
10
|
+
const malformed = (message) => new OndoApiError(`Ondo deposit-address response is malformed: ${message}`);
|
|
11
|
+
const entriesFromResult = (result) => {
|
|
12
|
+
if (Array.isArray(result)) {
|
|
13
|
+
return result;
|
|
14
|
+
}
|
|
15
|
+
if (isRecord(result)) {
|
|
16
|
+
for (const key of ['addresses', 'deposit_addresses', 'depositAddresses']) {
|
|
17
|
+
if (Array.isArray(result[key])) {
|
|
18
|
+
return result[key];
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
throw malformed('expected an address array');
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Extract the canonical Ethereum USDC address from Ondo's list response.
|
|
26
|
+
* An empty list is a valid, unsatisfied setup state; malformed records are
|
|
27
|
+
* errors so an API/schema failure cannot be mistaken for an absent address.
|
|
28
|
+
*/
|
|
29
|
+
export const parseOndoDepositAddress = (result) => {
|
|
30
|
+
const entries = entriesFromResult(result);
|
|
31
|
+
for (const entry of entries) {
|
|
32
|
+
if (!isRecord(entry)) {
|
|
33
|
+
throw malformed('address entries must be objects');
|
|
34
|
+
}
|
|
35
|
+
const coin = entry.coin ?? entry.symbol;
|
|
36
|
+
const network = entry.network;
|
|
37
|
+
if (typeof coin !== 'string' || typeof network !== 'string') {
|
|
38
|
+
throw malformed('address entries require coin and network');
|
|
39
|
+
}
|
|
40
|
+
if (coin.toUpperCase() !== 'USDC' || network.toLowerCase() !== 'ethereum') {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
if (typeof entry.address !== 'string' || !isAddress(entry.address)) {
|
|
44
|
+
throw malformed('the Ethereum USDC entry has an invalid address');
|
|
45
|
+
}
|
|
46
|
+
return entry.address;
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
};
|
|
50
|
+
/** Query Ondo's authenticated Ethereum USDC deposit-address list. */
|
|
51
|
+
export const listOndoDepositAddress = async (client, authToken) => parseOndoDepositAddress(await client.post('/v1/wallet/deposit_address/list', { coins: ['USDC'], network: 'ethereum' }, { authToken }));
|
|
52
|
+
const policyCandidate = (marker) => {
|
|
53
|
+
if (!isRecord(marker)) {
|
|
54
|
+
throw malformed('session marker must be an object');
|
|
55
|
+
}
|
|
56
|
+
const candidate = marker.policy;
|
|
57
|
+
if (candidate === undefined) {
|
|
58
|
+
return marker;
|
|
59
|
+
}
|
|
60
|
+
if (!isRecord(candidate)) {
|
|
61
|
+
throw malformed('session policy must be an object');
|
|
62
|
+
}
|
|
63
|
+
return candidate;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Validate the backend's minimal client-only marker and hydrate the venue
|
|
67
|
+
* request with the authenticated account ID. The marker is validated against
|
|
68
|
+
* the one fixed Ondo policy before any venue write is attempted.
|
|
69
|
+
*/
|
|
70
|
+
export const buildOndoProvisionPayload = (marker, accountID) => {
|
|
71
|
+
if (typeof accountID !== 'string' || accountID.length === 0) {
|
|
72
|
+
throw malformed('accountID is missing from /v1/account');
|
|
73
|
+
}
|
|
74
|
+
const candidate = policyCandidate(marker);
|
|
75
|
+
const network = candidate.network;
|
|
76
|
+
const symbol = candidate.symbol;
|
|
77
|
+
const destination = candidate.depositDestination ?? candidate.deposit_destination;
|
|
78
|
+
if (network !== 'ethereum' || symbol !== 'USDC' || !isRecord(destination)) {
|
|
79
|
+
throw malformed('unsupported deposit policy');
|
|
80
|
+
}
|
|
81
|
+
if (destination.wallet !== 'margin') {
|
|
82
|
+
throw malformed('unsupported deposit wallet');
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
network: 'ethereum',
|
|
86
|
+
symbol: 'USDC',
|
|
87
|
+
deposit_destination: { id: accountID, wallet: 'margin' },
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=depositAddress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depositAddress.js","sourceRoot":"","sources":["../../../src/utils/depositAddress.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { decodeActivityCursor, encodeActivityCursor, type OndoActivityCursor, } from './activityCursor.js';
|
|
2
2
|
export { type ApiParams, ONDO_RETRY_DEFAULTS, OndoApiClient, type OndoApiClientOptions, OndoApiError, type OndoHttpMethod, type OndoPage, type OndoRequestOptions, OndoSessionExpiredError, } from './apiClient.js';
|
|
3
|
+
export { buildOndoProvisionPayload, listOndoDepositAddress, ONDO_DEPOSIT_POLICY, type OndoDepositAddressRecord, type OndoDepositPolicyMarker, parseOndoDepositAddress, } from './depositAddress.js';
|
|
3
4
|
export { estimateLiquidationPrice } from './liquidation.js';
|
|
4
5
|
export { mapFundingActivity, mapLiquidationActivity } from './mapActivity.js';
|
|
5
6
|
export { mapFill } from './mapFill.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,KAAK,SAAS,EACd,mBAAmB,EACnB,aAAa,EACb,KAAK,oBAAoB,EACzB,YAAY,EACZ,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,uBAAuB,GACxB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,QAAQ,EACR,cAAc,EACd,cAAc,EACd,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAChE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,KAAK,SAAS,EACd,mBAAmB,EACnB,aAAa,EACb,KAAK,oBAAoB,EACzB,YAAY,EACZ,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,uBAAuB,GACxB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,uBAAuB,GACxB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,QAAQ,EACR,cAAc,EACd,cAAc,EACd,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAChE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA"}
|
package/dist/esm/utils/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// biome-ignore-all lint/performance/noBarrelFile: module public entry point.
|
|
2
2
|
export { decodeActivityCursor, encodeActivityCursor, } from './activityCursor.js';
|
|
3
3
|
export { ONDO_RETRY_DEFAULTS, OndoApiClient, OndoApiError, OndoSessionExpiredError, } from './apiClient.js';
|
|
4
|
+
export { buildOndoProvisionPayload, listOndoDepositAddress, ONDO_DEPOSIT_POLICY, parseOndoDepositAddress, } from './depositAddress.js';
|
|
4
5
|
export { estimateLiquidationPrice } from './liquidation.js';
|
|
5
6
|
export { mapFundingActivity, mapLiquidationActivity } from './mapActivity.js';
|
|
6
7
|
export { mapFill } from './mapFill.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAE7E,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GAErB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAEL,mBAAmB,EACnB,aAAa,EAEb,YAAY,EAIZ,uBAAuB,GACxB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,QAAQ,EACR,cAAc,EACd,cAAc,EACd,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAChE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAE7E,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GAErB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAEL,mBAAmB,EACnB,aAAa,EAEb,YAAY,EAIZ,uBAAuB,GACxB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,mBAAmB,EAGnB,uBAAuB,GACxB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,QAAQ,EACR,cAAc,EACd,cAAc,EACd,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAChE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -530,7 +530,7 @@ export class OndoWsProvider extends WsProviderBase {
|
|
|
530
530
|
this.emit(`candle:${kline.m}:${interval}`, {
|
|
531
531
|
channel: 'candle',
|
|
532
532
|
data: {
|
|
533
|
-
t: kline.
|
|
533
|
+
t: kline.s * 1000,
|
|
534
534
|
o: String(kline.o),
|
|
535
535
|
h: String(kline.h),
|
|
536
536
|
l: String(kline.l),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OndoProvider.d.ts","sourceRoot":"","sources":["../../src/OndoProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,mBAAmB,EAcxB,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"OndoProvider.d.ts","sourceRoot":"","sources":["../../src/OndoProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,mBAAmB,EAcxB,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAA;AAyExB;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,6EAA6E;IAC7E,OAAO,CAAC,EAAE,cAAc,CAAA;CACzB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,YAAY,GACvB,UAAS,mBAAwB,KAChC,mBA0hBF,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,IAAI,aAliBN,mBAAmB,KAC3B,mBAiiB6B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accountConfig.d.ts","sourceRoot":"","sources":["../../src/accountConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EAEpB,cAAc,EACf,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"accountConfig.d.ts","sourceRoot":"","sources":["../../src/accountConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EAEpB,cAAc,EACf,MAAM,mBAAmB,CAAA;AAkG1B;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,EAAE,cAAc,EAAE,GACxB,oBAAoB,EAAE,CAUxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signActions.d.ts","sourceRoot":"","sources":["../../../src/auth/signActions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,KAAK,EACV,UAAU,EAIV,gBAAgB,EAEjB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAA8B,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAC7E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AASnC,OAAO,EACL,KAAK,aAAa,EAGnB,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"signActions.d.ts","sourceRoot":"","sources":["../../../src/auth/signActions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,KAAK,EACV,UAAU,EAIV,gBAAgB,EAEjB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAA8B,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAC7E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AASnC,OAAO,EACL,KAAK,aAAa,EAGnB,MAAM,uBAAuB,CAAA;AAO9B,OAAO,EAAgB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEzD,gBAAgB;AAChB,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,aAAa,CAAA;IACrB,UAAU,EAAE,cAAc,CAAA;IAC1B,WAAW,EAAE,eAAe,CAAA;CAC7B;AAwFD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,mBAAmB,EACzB,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,UAAU,EAAE,EACnB,OAAO,EAAE,OAAO,EAChB,GAAG,CAAC,EAAE,kBAAkB,GACvB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAsI7B"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { OndoApiClient } from './apiClient.js';
|
|
2
|
+
/** The only deposit policy supported by the Ondo provider. */
|
|
3
|
+
export declare const ONDO_DEPOSIT_POLICY: {
|
|
4
|
+
readonly network: "ethereum";
|
|
5
|
+
readonly symbol: "USDC";
|
|
6
|
+
readonly depositDestination: {
|
|
7
|
+
readonly wallet: "margin";
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
/** @internal */
|
|
11
|
+
export type OndoDepositPolicyMarker = {
|
|
12
|
+
network: 'ethereum';
|
|
13
|
+
symbol: 'USDC';
|
|
14
|
+
depositDestination: {
|
|
15
|
+
wallet: 'margin';
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
/** @internal */
|
|
19
|
+
export interface OndoDepositAddressRecord {
|
|
20
|
+
address: string;
|
|
21
|
+
coin: string;
|
|
22
|
+
network: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Extract the canonical Ethereum USDC address from Ondo's list response.
|
|
26
|
+
* An empty list is a valid, unsatisfied setup state; malformed records are
|
|
27
|
+
* errors so an API/schema failure cannot be mistaken for an absent address.
|
|
28
|
+
*/
|
|
29
|
+
export declare const parseOndoDepositAddress: (result: unknown) => string | null;
|
|
30
|
+
/** Query Ondo's authenticated Ethereum USDC deposit-address list. */
|
|
31
|
+
export declare const listOndoDepositAddress: (client: OndoApiClient, authToken: string) => Promise<string | null>;
|
|
32
|
+
/**
|
|
33
|
+
* Validate the backend's minimal client-only marker and hydrate the venue
|
|
34
|
+
* request with the authenticated account ID. The marker is validated against
|
|
35
|
+
* the one fixed Ondo policy before any venue write is attempted.
|
|
36
|
+
*/
|
|
37
|
+
export declare const buildOndoProvisionPayload: (marker: object, accountID: string) => Record<string, unknown>;
|
|
38
|
+
//# sourceMappingURL=depositAddress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"depositAddress.d.ts","sourceRoot":"","sources":["../../../src/utils/depositAddress.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAGnD,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB;;;;;;CAItB,CAAA;AAEV,gBAAgB;AAChB,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,UAAU,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,kBAAkB,EAAE;QAAE,MAAM,EAAE,QAAQ,CAAA;KAAE,CAAA;CACzC,CAAA;AAED,gBAAgB;AAChB,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAsBD;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,GAAI,QAAQ,OAAO,KAAG,MAAM,GAAG,IAoBlE,CAAA;AAED,qEAAqE;AACrE,eAAO,MAAM,sBAAsB,GACjC,QAAQ,aAAa,EACrB,WAAW,MAAM,KAChB,OAAO,CAAC,MAAM,GAAG,IAAI,CAOrB,CAAA;AAgBH;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,GACpC,QAAQ,MAAM,EACd,WAAW,MAAM,KAChB,MAAM,CAAC,MAAM,EAAE,OAAO,CAoBxB,CAAA"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { decodeActivityCursor, encodeActivityCursor, type OndoActivityCursor, } from './activityCursor.js';
|
|
2
2
|
export { type ApiParams, ONDO_RETRY_DEFAULTS, OndoApiClient, type OndoApiClientOptions, OndoApiError, type OndoHttpMethod, type OndoPage, type OndoRequestOptions, OndoSessionExpiredError, } from './apiClient.js';
|
|
3
|
+
export { buildOndoProvisionPayload, listOndoDepositAddress, ONDO_DEPOSIT_POLICY, type OndoDepositAddressRecord, type OndoDepositPolicyMarker, parseOndoDepositAddress, } from './depositAddress.js';
|
|
3
4
|
export { estimateLiquidationPrice } from './liquidation.js';
|
|
4
5
|
export { mapFundingActivity, mapLiquidationActivity } from './mapActivity.js';
|
|
5
6
|
export { mapFill } from './mapFill.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,KAAK,SAAS,EACd,mBAAmB,EACnB,aAAa,EACb,KAAK,oBAAoB,EACzB,YAAY,EACZ,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,uBAAuB,GACxB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,QAAQ,EACR,cAAc,EACd,cAAc,EACd,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAChE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,KAAK,kBAAkB,GACxB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,KAAK,SAAS,EACd,mBAAmB,EACnB,aAAa,EACb,KAAK,oBAAoB,EACzB,YAAY,EACZ,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,uBAAuB,GACxB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,uBAAuB,GACxB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,QAAQ,EACR,cAAc,EACd,cAAc,EACd,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAChE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lifi/perps-sdk-provider-ondo",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "Ondo Perps provider plugin for @lifi/perps-sdk",
|
|
5
5
|
"homepage": "https://github.com/lifinance/perps-sdk",
|
|
6
6
|
"bugs": {
|
|
@@ -43,10 +43,10 @@
|
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"big.js": "^7.0.1",
|
|
45
45
|
"viem": "^2.48.8",
|
|
46
|
-
"@lifi/perps-types": "^3.
|
|
46
|
+
"@lifi/perps-types": "^3.3.0"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
|
49
|
-
"@lifi/perps-sdk": "^4.
|
|
49
|
+
"@lifi/perps-sdk": "^4.3.0"
|
|
50
50
|
},
|
|
51
51
|
"publishConfig": {
|
|
52
52
|
"access": "public"
|
package/src/OndoProvider.ts
CHANGED
|
@@ -82,6 +82,7 @@ import {
|
|
|
82
82
|
estimateLiquidationPrice,
|
|
83
83
|
formatOrderPrice,
|
|
84
84
|
formatOrderSize,
|
|
85
|
+
listOndoDepositAddress,
|
|
85
86
|
mapFill,
|
|
86
87
|
mapFundingActivity,
|
|
87
88
|
mapLiquidationActivity,
|
|
@@ -169,6 +170,7 @@ export const ondoProvider = (
|
|
|
169
170
|
termsAccepted: false,
|
|
170
171
|
apiKeyRegistered: false,
|
|
171
172
|
referralSet: false,
|
|
173
|
+
depositAddress: null,
|
|
172
174
|
}
|
|
173
175
|
|
|
174
176
|
const loggedOutAccount = (address: Address): AccountResponse => ({
|
|
@@ -232,21 +234,23 @@ export const ondoProvider = (
|
|
|
232
234
|
},
|
|
233
235
|
async (token) => {
|
|
234
236
|
const client = apiClient(opts)
|
|
235
|
-
const [balance, rawPositions, referral, account] =
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
237
|
+
const [balance, rawPositions, referral, account, depositAddress] =
|
|
238
|
+
await Promise.all([
|
|
239
|
+
client.get<OndoBalanceSummary>('/v1/perps/balance', {
|
|
240
|
+
authToken: token.token,
|
|
241
|
+
}),
|
|
242
|
+
client.get<OndoPosition[]>('/v1/perps/positions', {
|
|
243
|
+
authToken: token.token,
|
|
244
|
+
}),
|
|
245
|
+
client.get<OndoAccountReferral | null>('/v1/account/referral', {
|
|
246
|
+
authToken: token.token,
|
|
247
|
+
}),
|
|
248
|
+
client.get<OndoAccountInfo>('/v1/account', {
|
|
249
|
+
authToken: token.token,
|
|
250
|
+
}),
|
|
251
|
+
listOndoDepositAddress(client, token.token),
|
|
252
|
+
marketRegistry().sync(),
|
|
253
|
+
])
|
|
250
254
|
|
|
251
255
|
const positions: Position[] = mapOpenPositions(
|
|
252
256
|
rawPositions,
|
|
@@ -280,6 +284,7 @@ export const ondoProvider = (
|
|
|
280
284
|
account.privacyVersion === ONDO_PRIVACY_VERSION,
|
|
281
285
|
apiKeyRegistered,
|
|
282
286
|
referralSet: referral !== null && referral !== undefined,
|
|
287
|
+
depositAddress,
|
|
283
288
|
},
|
|
284
289
|
}
|
|
285
290
|
}
|
|
@@ -619,19 +624,26 @@ export const ondoProvider = (
|
|
|
619
624
|
return projectOndoConfigSettings(config, setup, configOptions)
|
|
620
625
|
},
|
|
621
626
|
|
|
622
|
-
signActions(
|
|
627
|
+
async signActions(
|
|
623
628
|
method: SigningMethod,
|
|
624
629
|
steps: ActionStep[],
|
|
625
630
|
address: Address,
|
|
626
631
|
ctx?: SignActionsContext
|
|
627
632
|
): Promise<SignedActionStep[]> {
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
633
|
+
try {
|
|
634
|
+
return await ondoSignActions(
|
|
635
|
+
{ client: apiClient(), tokenStore, apiKeyStore },
|
|
636
|
+
method,
|
|
637
|
+
steps,
|
|
638
|
+
address,
|
|
639
|
+
ctx
|
|
640
|
+
)
|
|
641
|
+
} catch (err) {
|
|
642
|
+
if (err instanceof OndoSessionExpiredError) {
|
|
643
|
+
await tokenStore.remove(address)
|
|
644
|
+
}
|
|
645
|
+
throw err
|
|
646
|
+
}
|
|
635
647
|
},
|
|
636
648
|
|
|
637
649
|
// The venue rejecting an HMAC-signed request with Unauthorized means the
|
package/src/accountConfig.ts
CHANGED
|
@@ -15,8 +15,9 @@ function assertNever(value: never): never {
|
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* Project a single Ondo descriptor against the typed `OndoAccountConfig`
|
|
18
|
-
* into an `AccountConfigSetting`. Ondo has
|
|
18
|
+
* into an `AccountConfigSetting`. Ondo has five setup descriptors:
|
|
19
19
|
* `SIWE_LOGIN`, satisfied by the presence of a live session token;
|
|
20
|
+
* `CREATE_DEPOSIT_ADDRESS`, satisfied by a canonical Ethereum USDC address;
|
|
20
21
|
* `ACCEPT_PROVIDER_TERMS`, satisfied once the venue terms are accepted;
|
|
21
22
|
* `REGISTER_API_KEY`, satisfied by a locally stored venue API key; and
|
|
22
23
|
* `SET_REFERRAL`, satisfied when a referral code is already applied to the
|
|
@@ -40,6 +41,14 @@ function projectOndoDescriptor(
|
|
|
40
41
|
satisfied: config.loggedIn,
|
|
41
42
|
}
|
|
42
43
|
|
|
44
|
+
case ActionType.CREATE_DEPOSIT_ADDRESS:
|
|
45
|
+
return {
|
|
46
|
+
type: descriptor.type,
|
|
47
|
+
values: [{ name: 'depositAddress', value: config.depositAddress }],
|
|
48
|
+
satisfied:
|
|
49
|
+
config.depositAddress !== null && config.depositAddress.length > 0,
|
|
50
|
+
}
|
|
51
|
+
|
|
43
52
|
case ActionType.ACCEPT_PROVIDER_TERMS:
|
|
44
53
|
return {
|
|
45
54
|
type: descriptor.type,
|
package/src/auth/signActions.ts
CHANGED
|
@@ -22,6 +22,10 @@ import {
|
|
|
22
22
|
OndoApiError,
|
|
23
23
|
OndoSessionExpiredError,
|
|
24
24
|
} from '../utils/apiClient.js'
|
|
25
|
+
import {
|
|
26
|
+
buildOndoProvisionPayload,
|
|
27
|
+
listOndoDepositAddress,
|
|
28
|
+
} from '../utils/depositAddress.js'
|
|
25
29
|
import { completeSiweLogin } from './completeSiweLogin.js'
|
|
26
30
|
import { hmacSignRequest } from './hmac.js'
|
|
27
31
|
import { isOndoApiKey, type OndoApiKeyStore } from './OndoApiKeyStore.js'
|
|
@@ -219,6 +223,30 @@ export async function ondoSignActions(
|
|
|
219
223
|
)
|
|
220
224
|
}
|
|
221
225
|
switch (step.action) {
|
|
226
|
+
case ActionType.CREATE_DEPOSIT_ADDRESS: {
|
|
227
|
+
const token = await deps.tokenStore.get(address)
|
|
228
|
+
if (token === null) {
|
|
229
|
+
throw new OndoSessionExpiredError(
|
|
230
|
+
`No valid Ondo session token stored for ${address}. Run the SIWE login first.`
|
|
231
|
+
)
|
|
232
|
+
}
|
|
233
|
+
const account = await deps.client.get<{ accountID?: unknown }>(
|
|
234
|
+
'/v1/account',
|
|
235
|
+
{ authToken: token.token }
|
|
236
|
+
)
|
|
237
|
+
const payload = buildOndoProvisionPayload(
|
|
238
|
+
step.session,
|
|
239
|
+
typeof account.accountID === 'string' ? account.accountID : ''
|
|
240
|
+
)
|
|
241
|
+
await deps.client.post('/v1/provision_address', payload, {
|
|
242
|
+
authToken: token.token,
|
|
243
|
+
})
|
|
244
|
+
// Re-query to validate that Ondo can read the provisioned address;
|
|
245
|
+
// getAccount performs the authoritative state refresh afterward.
|
|
246
|
+
await listOndoDepositAddress(deps.client, token.token)
|
|
247
|
+
break
|
|
248
|
+
}
|
|
249
|
+
|
|
222
250
|
case ActionType.ACCEPT_PROVIDER_TERMS: {
|
|
223
251
|
const token = await deps.tokenStore.get(address)
|
|
224
252
|
if (token === null) {
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { isAddress } from 'viem'
|
|
2
|
+
import type { OndoApiClient } from './apiClient.js'
|
|
3
|
+
import { OndoApiError } from './apiClient.js'
|
|
4
|
+
|
|
5
|
+
/** The only deposit policy supported by the Ondo provider. */
|
|
6
|
+
export const ONDO_DEPOSIT_POLICY = {
|
|
7
|
+
network: 'ethereum',
|
|
8
|
+
symbol: 'USDC',
|
|
9
|
+
depositDestination: { wallet: 'margin' },
|
|
10
|
+
} as const
|
|
11
|
+
|
|
12
|
+
/** @internal */
|
|
13
|
+
export type OndoDepositPolicyMarker = {
|
|
14
|
+
network: 'ethereum'
|
|
15
|
+
symbol: 'USDC'
|
|
16
|
+
depositDestination: { wallet: 'margin' }
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** @internal */
|
|
20
|
+
export interface OndoDepositAddressRecord {
|
|
21
|
+
address: string
|
|
22
|
+
coin: string
|
|
23
|
+
network: string
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const isRecord = (value: unknown): value is Record<string, unknown> =>
|
|
27
|
+
typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
28
|
+
|
|
29
|
+
const malformed = (message: string): OndoApiError =>
|
|
30
|
+
new OndoApiError(`Ondo deposit-address response is malformed: ${message}`)
|
|
31
|
+
|
|
32
|
+
const entriesFromResult = (result: unknown): unknown[] => {
|
|
33
|
+
if (Array.isArray(result)) {
|
|
34
|
+
return result
|
|
35
|
+
}
|
|
36
|
+
if (isRecord(result)) {
|
|
37
|
+
for (const key of ['addresses', 'deposit_addresses', 'depositAddresses']) {
|
|
38
|
+
if (Array.isArray(result[key])) {
|
|
39
|
+
return result[key]
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
throw malformed('expected an address array')
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Extract the canonical Ethereum USDC address from Ondo's list response.
|
|
48
|
+
* An empty list is a valid, unsatisfied setup state; malformed records are
|
|
49
|
+
* errors so an API/schema failure cannot be mistaken for an absent address.
|
|
50
|
+
*/
|
|
51
|
+
export const parseOndoDepositAddress = (result: unknown): string | null => {
|
|
52
|
+
const entries = entriesFromResult(result)
|
|
53
|
+
for (const entry of entries) {
|
|
54
|
+
if (!isRecord(entry)) {
|
|
55
|
+
throw malformed('address entries must be objects')
|
|
56
|
+
}
|
|
57
|
+
const coin = entry.coin ?? entry.symbol
|
|
58
|
+
const network = entry.network
|
|
59
|
+
if (typeof coin !== 'string' || typeof network !== 'string') {
|
|
60
|
+
throw malformed('address entries require coin and network')
|
|
61
|
+
}
|
|
62
|
+
if (coin.toUpperCase() !== 'USDC' || network.toLowerCase() !== 'ethereum') {
|
|
63
|
+
continue
|
|
64
|
+
}
|
|
65
|
+
if (typeof entry.address !== 'string' || !isAddress(entry.address)) {
|
|
66
|
+
throw malformed('the Ethereum USDC entry has an invalid address')
|
|
67
|
+
}
|
|
68
|
+
return entry.address
|
|
69
|
+
}
|
|
70
|
+
return null
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Query Ondo's authenticated Ethereum USDC deposit-address list. */
|
|
74
|
+
export const listOndoDepositAddress = async (
|
|
75
|
+
client: OndoApiClient,
|
|
76
|
+
authToken: string
|
|
77
|
+
): Promise<string | null> =>
|
|
78
|
+
parseOndoDepositAddress(
|
|
79
|
+
await client.post<unknown>(
|
|
80
|
+
'/v1/wallet/deposit_address/list',
|
|
81
|
+
{ coins: ['USDC'], network: 'ethereum' },
|
|
82
|
+
{ authToken }
|
|
83
|
+
)
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
const policyCandidate = (marker: object): Record<string, unknown> => {
|
|
87
|
+
if (!isRecord(marker)) {
|
|
88
|
+
throw malformed('session marker must be an object')
|
|
89
|
+
}
|
|
90
|
+
const candidate = marker.policy
|
|
91
|
+
if (candidate === undefined) {
|
|
92
|
+
return marker
|
|
93
|
+
}
|
|
94
|
+
if (!isRecord(candidate)) {
|
|
95
|
+
throw malformed('session policy must be an object')
|
|
96
|
+
}
|
|
97
|
+
return candidate
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Validate the backend's minimal client-only marker and hydrate the venue
|
|
102
|
+
* request with the authenticated account ID. The marker is validated against
|
|
103
|
+
* the one fixed Ondo policy before any venue write is attempted.
|
|
104
|
+
*/
|
|
105
|
+
export const buildOndoProvisionPayload = (
|
|
106
|
+
marker: object,
|
|
107
|
+
accountID: string
|
|
108
|
+
): Record<string, unknown> => {
|
|
109
|
+
if (typeof accountID !== 'string' || accountID.length === 0) {
|
|
110
|
+
throw malformed('accountID is missing from /v1/account')
|
|
111
|
+
}
|
|
112
|
+
const candidate = policyCandidate(marker)
|
|
113
|
+
const network = candidate.network
|
|
114
|
+
const symbol = candidate.symbol
|
|
115
|
+
const destination =
|
|
116
|
+
candidate.depositDestination ?? candidate.deposit_destination
|
|
117
|
+
if (network !== 'ethereum' || symbol !== 'USDC' || !isRecord(destination)) {
|
|
118
|
+
throw malformed('unsupported deposit policy')
|
|
119
|
+
}
|
|
120
|
+
if (destination.wallet !== 'margin') {
|
|
121
|
+
throw malformed('unsupported deposit wallet')
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
network: 'ethereum',
|
|
125
|
+
symbol: 'USDC',
|
|
126
|
+
deposit_destination: { id: accountID, wallet: 'margin' },
|
|
127
|
+
}
|
|
128
|
+
}
|