@0xmonaco/react 0.1.15 → 0.1.17
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/hooks/useAuth/types.d.ts +10 -10
- package/dist/hooks/useAuth/types.d.ts.map +1 -1
- package/dist/hooks/useTrade/types.d.ts +5 -1
- package/dist/hooks/useTrade/types.d.ts.map +1 -1
- package/dist/hooks/useTrade/useTrade.d.ts.map +1 -1
- package/dist/hooks/useTrade/useTrade.js +13 -6
- package/dist/hooks/useTrade/useTrade.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import type { AuthState, ChallengeResponse, TokenRefreshResponse
|
|
1
|
+
import type { AuthState, ChallengeResponse, TokenRefreshResponse } from "@0xmonaco/types";
|
|
2
2
|
import type { AuthenticationStatus } from "../../provider";
|
|
3
3
|
export interface UseAuthState {
|
|
4
4
|
/** Current authentication status */
|
|
5
5
|
authenticationStatus: AuthenticationStatus;
|
|
6
6
|
}
|
|
7
7
|
export interface UseAuthReturn extends UseAuthState {
|
|
8
|
-
/** Complete authentication flow */
|
|
8
|
+
/** Complete authentication flow. Returns AuthState with accessToken and refreshToken. */
|
|
9
9
|
login: () => Promise<AuthState>;
|
|
10
|
-
/** Logout user and clear state */
|
|
10
|
+
/** Logout user and clear state. Revokes the refresh token on the server. */
|
|
11
11
|
logout: () => Promise<void>;
|
|
12
|
-
/** Refresh authentication tokens */
|
|
12
|
+
/** Refresh authentication tokens using the stored refresh token. */
|
|
13
13
|
refreshAuth: () => Promise<AuthState>;
|
|
14
|
-
/** Sign a challenge message */
|
|
14
|
+
/** Sign a challenge message with the connected wallet. */
|
|
15
15
|
signChallenge: (message: string) => Promise<string>;
|
|
16
|
-
/** Create authentication challenge */
|
|
16
|
+
/** Create authentication challenge for the given address. */
|
|
17
17
|
createChallenge: (address: string) => Promise<ChallengeResponse>;
|
|
18
|
-
/** Complete authentication with signature */
|
|
19
|
-
authenticate: () => Promise<
|
|
20
|
-
/** Refresh access token */
|
|
18
|
+
/** Complete authentication with signature. Returns tokens. */
|
|
19
|
+
authenticate: () => Promise<AuthState>;
|
|
20
|
+
/** Refresh access token. Pass the refreshToken from authState. */
|
|
21
21
|
refreshToken: (refreshToken: string) => Promise<TokenRefreshResponse>;
|
|
22
|
-
/** Revoke refresh token */
|
|
22
|
+
/** Revoke refresh token. Pass authState.refreshToken from authState.login() response. */
|
|
23
23
|
revokeToken: (refreshToken: string) => Promise<void>;
|
|
24
24
|
}
|
|
25
25
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/useAuth/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/useAuth/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC1F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE3D,MAAM,WAAW,YAAY;IAC3B,oCAAoC;IACpC,oBAAoB,EAAE,oBAAoB,CAAC;CAC5C;AAED,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD,yFAAyF;IACzF,KAAK,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,4EAA4E;IAC5E,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,oEAAoE;IACpE,WAAW,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;IACtC,0DAA0D;IAC1D,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACpD,6DAA6D;IAC7D,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACjE,8DAA8D;IAC9D,YAAY,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;IACvC,kEAAkE;IAClE,YAAY,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACtE,yFAAyF;IACzF,WAAW,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD"}
|
|
@@ -3,18 +3,22 @@ export interface UseTradeReturn {
|
|
|
3
3
|
/** Place a limit order */
|
|
4
4
|
placeLimitOrder: (tradingPairId: string, side: OrderSide, quantity: string, price: string, options?: {
|
|
5
5
|
tradingMode?: string;
|
|
6
|
+
useMasterBalance?: boolean;
|
|
7
|
+
expirationDate?: string;
|
|
8
|
+
timeInForce?: string;
|
|
6
9
|
}) => Promise<CreateOrderResponse>;
|
|
7
10
|
/** Place a market order */
|
|
8
11
|
placeMarketOrder: (tradingPairId: string, side: OrderSide, quantity: string, options?: {
|
|
9
12
|
tradingMode?: string;
|
|
10
13
|
slippageTolerance?: number;
|
|
14
|
+
timeInForce?: string;
|
|
11
15
|
}) => Promise<CreateOrderResponse>;
|
|
12
16
|
/** Cancel an existing order */
|
|
13
17
|
cancelOrder: (orderId: string) => Promise<CancelOrderResponse>;
|
|
14
18
|
/** Replace an existing order */
|
|
15
19
|
replaceOrder: (orderId: string, newOrder: {
|
|
16
20
|
price?: string;
|
|
17
|
-
quantity
|
|
21
|
+
quantity?: string;
|
|
18
22
|
useMasterBalance?: boolean;
|
|
19
23
|
}) => Promise<ReplaceOrderResponse>;
|
|
20
24
|
/** Get paginated orders */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTrade/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC1B,wBAAwB,EACxB,gBAAgB,EAChB,SAAS,EACV,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,cAAc;IAC7B,0BAA0B;IAC1B,eAAe,EAAE,CACf,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTrade/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC1B,wBAAwB,EACxB,gBAAgB,EAChB,SAAS,EACV,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,cAAc;IAC7B,0BAA0B;IAC1B,eAAe,EAAE,CACf,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,KAC1G,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAElC,2BAA2B;IAC3B,gBAAgB,EAAE,CAChB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,KACjF,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAElC,+BAA+B;IAC/B,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAE/D,gCAAgC;IAChC,YAAY,EAAE,CACZ,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE,KACxE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAEnC,2BAA2B;IAC3B,kBAAkB,EAAE,CAAC,MAAM,CAAC,EAAE,wBAAwB,KAAK,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAE/F,+BAA+B;IAC/B,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC1D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTrade.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTrade/useTrade.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,eAAO,MAAM,QAAQ,QAAO,
|
|
1
|
+
{"version":3,"file":"useTrade.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTrade/useTrade.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,eAAO,MAAM,QAAQ,QAAO,cAkH3B,CAAC"}
|
|
@@ -46,12 +46,19 @@ export const useTrade = () => {
|
|
|
46
46
|
throw new Error("Order ID is required and cannot be empty");
|
|
47
47
|
if (!newOrder)
|
|
48
48
|
throw new Error("New order object is required");
|
|
49
|
-
if
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
49
|
+
// Validate quantity only if provided
|
|
50
|
+
if (newOrder.quantity !== undefined) {
|
|
51
|
+
if (!newOrder.quantity?.trim())
|
|
52
|
+
throw new Error("Quantity cannot be empty");
|
|
53
|
+
if (Number(newOrder.quantity) <= 0)
|
|
54
|
+
throw new Error("Quantity must be greater than 0");
|
|
55
|
+
}
|
|
56
|
+
// Validate price only if provided
|
|
57
|
+
if (newOrder.price !== undefined) {
|
|
58
|
+
if (!newOrder.price?.trim())
|
|
59
|
+
throw new Error("Price cannot be empty");
|
|
60
|
+
if (Number(newOrder.price) <= 0)
|
|
61
|
+
throw new Error("Price must be a valid positive number");
|
|
55
62
|
}
|
|
56
63
|
return await sdk.trading.replaceOrder(orderId, newOrder);
|
|
57
64
|
}, [sdk]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTrade.js","sourceRoot":"","sources":["../../../src/hooks/useTrade/useTrade.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAmB,EAAE;IAC3C,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY,EAAE,CAAC;IAE/B,MAAM,eAAe,GAAG,WAAW,CACjC,KAAK,EACH,aAAqB,EACrB,IAAe,EACf,QAAgB,EAChB,KAAa,EACb,
|
|
1
|
+
{"version":3,"file":"useTrade.js","sourceRoot":"","sources":["../../../src/hooks/useTrade/useTrade.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type { MonacoSDK, Network, SDKConfig } from "@0xmonaco/core";
|
|
2
|
-
export type { AuthState, ChallengeResponse, TokenRefreshResponse, UserProfile
|
|
2
|
+
export type { AuthState, ChallengeResponse, TokenRefreshResponse, UserProfile } from "@0xmonaco/types";
|
|
3
3
|
export * from "./hooks";
|
|
4
4
|
export * from "./provider";
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACpE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACpE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEvG,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@0xmonaco/react",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.17",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"dist"
|
|
10
10
|
],
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@0xmonaco/core": "0.2.
|
|
12
|
+
"@0xmonaco/core": "0.2.9"
|
|
13
13
|
},
|
|
14
14
|
"devDependencies": {
|
|
15
15
|
"@types/react": "^19.1.12",
|