@0xmonaco/react 0.0.0-develop-20260129175602 → 0.0.0-develop-20260202185041
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/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useUserMovements/useUserMovements.d.ts.map +1 -1
- package/dist/hooks/useUserMovements/useUserMovements.js +22 -2
- package/dist/hooks/useUserMovements/useUserMovements.js.map +1 -1
- package/dist/hooks/useUserOrders/index.d.ts +3 -0
- package/dist/hooks/useUserOrders/index.d.ts.map +1 -0
- package/dist/hooks/useUserOrders/index.js +3 -0
- package/dist/hooks/useUserOrders/index.js.map +1 -0
- package/dist/hooks/useUserOrders/types.d.ts +19 -0
- package/dist/hooks/useUserOrders/types.d.ts.map +1 -0
- package/dist/hooks/useUserOrders/types.js +2 -0
- package/dist/hooks/useUserOrders/types.js.map +1 -0
- package/dist/hooks/useUserOrders/useUserOrders.d.ts +12 -0
- package/dist/hooks/useUserOrders/useUserOrders.d.ts.map +1 -0
- package/dist/hooks/useUserOrders/useUserOrders.js +192 -0
- package/dist/hooks/useUserOrders/useUserOrders.js.map +1 -0
- package/dist/provider/MonacoProvider.d.ts.map +1 -1
- package/dist/provider/MonacoProvider.js +41 -10
- package/dist/provider/MonacoProvider.js.map +1 -1
- package/package.json +3 -3
package/dist/hooks/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC"}
|
package/dist/hooks/index.js
CHANGED
package/dist/hooks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useUserMovements.d.ts","sourceRoot":"","sources":["../../../src/hooks/useUserMovements/useUserMovements.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"useUserMovements.d.ts","sourceRoot":"","sources":["../../../src/hooks/useUserMovements/useUserMovements.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAmCtD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,SAAK,GAAG,sBAAsB,CA+E1E"}
|
|
@@ -12,11 +12,18 @@ function ledgerMovementToEvent(movement, userId) {
|
|
|
12
12
|
entryType: movement.entry_type,
|
|
13
13
|
transactionType: movement.transaction_type,
|
|
14
14
|
tokenAddress: movement.token,
|
|
15
|
+
symbol: movement.symbol ?? undefined,
|
|
16
|
+
decimals: movement.decimals,
|
|
15
17
|
amount: movement.amount,
|
|
18
|
+
amountRaw: movement.amount_raw,
|
|
16
19
|
balanceBefore: movement.balance_before ?? undefined,
|
|
20
|
+
balanceBeforeRaw: movement.balance_before_raw ?? undefined,
|
|
17
21
|
balanceAfter: movement.balance_after ?? undefined,
|
|
22
|
+
balanceAfterRaw: movement.balance_after_raw ?? undefined,
|
|
18
23
|
lockedBefore: movement.locked_before ?? undefined,
|
|
24
|
+
lockedBeforeRaw: movement.locked_before_raw ?? undefined,
|
|
19
25
|
lockedAfter: movement.locked_after ?? undefined,
|
|
26
|
+
lockedAfterRaw: movement.locked_after_raw ?? undefined,
|
|
20
27
|
referenceId: movement.reference_id ?? undefined,
|
|
21
28
|
referenceType: movement.reference_type ?? undefined,
|
|
22
29
|
description: movement.description ?? undefined,
|
|
@@ -56,8 +63,21 @@ export function useUserMovements(maxMovements = 50) {
|
|
|
56
63
|
.getProfile()
|
|
57
64
|
.then(async (profile) => {
|
|
58
65
|
const response = await sdk.profile.getPaginatedUserMovements({ limit });
|
|
59
|
-
|
|
60
|
-
|
|
66
|
+
// Combine latest_movements (from Redis) with movements (from PostgreSQL)
|
|
67
|
+
// latest_movements contains real-time data that may not yet be in PostgreSQL
|
|
68
|
+
// Deduplicate by id, preferring latest_movements (newer data)
|
|
69
|
+
const latestMovements = (response.latest_movements || []).map((m) => ledgerMovementToEvent(m, profile.id));
|
|
70
|
+
const historicalMovements = response.movements.map((m) => ledgerMovementToEvent(m, profile.id));
|
|
71
|
+
// Merge: latest_movements first, then historical, deduplicated by id
|
|
72
|
+
const seenIds = new Set();
|
|
73
|
+
const mergedMovements = [];
|
|
74
|
+
for (const movement of [...latestMovements, ...historicalMovements]) {
|
|
75
|
+
if (!seenIds.has(movement.data.id)) {
|
|
76
|
+
seenIds.add(movement.data.id);
|
|
77
|
+
mergedMovements.push(movement);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
setMovements(mergedMovements.slice(0, limit));
|
|
61
81
|
// Subscribe to WebSocket movement updates after initial data is loaded
|
|
62
82
|
// This prevents race conditions where WS events could be overwritten by REST response
|
|
63
83
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useUserMovements.js","sourceRoot":"","sources":["../../../src/hooks/useUserMovements/useUserMovements.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C;;GAEG;AACH,SAAS,qBAAqB,CAAC,QAAwB,EAAE,MAAc;IACrE,OAAO;QACL,SAAS,EAAE,UAAU;QACrB,MAAM;QACN,IAAI,EAAE;YACJ,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,SAAS,EAAE,QAAQ,CAAC,UAAU;YAC9B,eAAe,EAAE,QAAQ,CAAC,gBAAgB;YAC1C,YAAY,EAAE,QAAQ,CAAC,KAAK;YAC5B,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,aAAa,EAAE,QAAQ,CAAC,cAAc,IAAI,SAAS;YACnD,YAAY,EAAE,QAAQ,CAAC,aAAa,IAAI,SAAS;YACjD,YAAY,EAAE,QAAQ,CAAC,aAAa,IAAI,SAAS;YACjD,WAAW,EAAE,QAAQ,CAAC,YAAY,IAAI,SAAS;YAC/C,WAAW,EAAE,QAAQ,CAAC,YAAY,IAAI,SAAS;YAC/C,aAAa,EAAE,QAAQ,CAAC,cAAc,IAAI,SAAS;YACnD,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,SAAS;YAC9C,MAAM,EAAE,QAAQ,CAAC,OAAO,IAAI,SAAS;YACrC,SAAS,EAAE,QAAQ,CAAC,UAAU,IAAI,SAAS;SAC5C;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,YAAY,GAAG,EAAE;IAChD,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY,EAAE,CAAC;IAE/B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAsB,EAAE,CAAC,CAAC;IACpE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IACvD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpD,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAEzD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC;YAC9B,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,YAAY,CAAC,EAAE,CAAC,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,UAAU,CAAC,IAAI,CAAC,CAAC;QAEjB,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QAEhE,4EAA4E;QAC5E,IAAI,WAAqC,CAAC;QAE1C,GAAG,CAAC,OAAO;aACR,UAAU,EAAE;aACZ,IAAI,CAAC,KAAK,EAAE,OAAoB,EAAE,EAAE;YACnC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,yBAAyB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"useUserMovements.js","sourceRoot":"","sources":["../../../src/hooks/useUserMovements/useUserMovements.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C;;GAEG;AACH,SAAS,qBAAqB,CAAC,QAAwB,EAAE,MAAc;IACrE,OAAO;QACL,SAAS,EAAE,UAAU;QACrB,MAAM;QACN,IAAI,EAAE;YACJ,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,SAAS,EAAE,QAAQ,CAAC,UAAU;YAC9B,eAAe,EAAE,QAAQ,CAAC,gBAAgB;YAC1C,YAAY,EAAE,QAAQ,CAAC,KAAK;YAC5B,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,SAAS;YACpC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,SAAS,EAAE,QAAQ,CAAC,UAAU;YAC9B,aAAa,EAAE,QAAQ,CAAC,cAAc,IAAI,SAAS;YACnD,gBAAgB,EAAE,QAAQ,CAAC,kBAAkB,IAAI,SAAS;YAC1D,YAAY,EAAE,QAAQ,CAAC,aAAa,IAAI,SAAS;YACjD,eAAe,EAAE,QAAQ,CAAC,iBAAiB,IAAI,SAAS;YACxD,YAAY,EAAE,QAAQ,CAAC,aAAa,IAAI,SAAS;YACjD,eAAe,EAAE,QAAQ,CAAC,iBAAiB,IAAI,SAAS;YACxD,WAAW,EAAE,QAAQ,CAAC,YAAY,IAAI,SAAS;YAC/C,cAAc,EAAE,QAAQ,CAAC,gBAAgB,IAAI,SAAS;YACtD,WAAW,EAAE,QAAQ,CAAC,YAAY,IAAI,SAAS;YAC/C,aAAa,EAAE,QAAQ,CAAC,cAAc,IAAI,SAAS;YACnD,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,SAAS;YAC9C,MAAM,EAAE,QAAQ,CAAC,OAAO,IAAI,SAAS;YACrC,SAAS,EAAE,QAAQ,CAAC,UAAU,IAAI,SAAS;SAC5C;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,YAAY,GAAG,EAAE;IAChD,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY,EAAE,CAAC;IAE/B,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAsB,EAAE,CAAC,CAAC;IACpE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IACvD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpD,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAEzD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC;YAC9B,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,YAAY,CAAC,EAAE,CAAC,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,UAAU,CAAC,IAAI,CAAC,CAAC;QAEjB,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QAEhE,4EAA4E;QAC5E,IAAI,WAAqC,CAAC;QAE1C,GAAG,CAAC,OAAO;aACR,UAAU,EAAE;aACZ,IAAI,CAAC,KAAK,EAAE,OAAoB,EAAE,EAAE;YACnC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,yBAAyB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YAExE,yEAAyE;YACzE,6EAA6E;YAC7E,8DAA8D;YAC9D,MAAM,eAAe,GAAG,CAAC,QAAQ,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3G,MAAM,mBAAmB,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;YAEhG,qEAAqE;YACrE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;YAClC,MAAM,eAAe,GAAwB,EAAE,CAAC;YAEhD,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,eAAe,EAAE,GAAG,mBAAmB,CAAC,EAAE,CAAC;gBACpE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;oBACnC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC9B,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;YAED,YAAY,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YAE9C,uEAAuE;YACvE,sFAAsF;YACtF,IAAI,CAAC;gBACH,WAAW,GAAG,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,KAAwB,EAAE,EAAE;oBAC1D,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE;wBACpB,0CAA0C;wBAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBAC3E,IAAI,MAAM,EAAE,CAAC;4BACX,2BAA2B;4BAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;wBACzF,CAAC;wBACD,OAAO,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;oBAC1C,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBACH,aAAa,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC9D,aAAa,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aAC7E,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QAEpC,OAAO,GAAG,EAAE;YACV,WAAW,EAAE,EAAE,CAAC;YAChB,aAAa,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAE1C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/useUserOrders/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/useUserOrders/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Order } from "@0xmonaco/types";
|
|
2
|
+
/**
|
|
3
|
+
* Return type for the useUserOrders hook
|
|
4
|
+
*/
|
|
5
|
+
export interface UseUserOrdersReturn {
|
|
6
|
+
/** Array of user orders (merged from REST API and WebSocket updates) */
|
|
7
|
+
orders: Order[];
|
|
8
|
+
/** Whether initial data is being loaded */
|
|
9
|
+
loading: boolean;
|
|
10
|
+
/** Whether currently subscribed to orders channel */
|
|
11
|
+
subscribed: boolean;
|
|
12
|
+
/** Any error that occurred during connection or subscription */
|
|
13
|
+
error: Error | null;
|
|
14
|
+
/** Clear the current error state */
|
|
15
|
+
clearError: () => void;
|
|
16
|
+
/** Manually refresh orders from REST API */
|
|
17
|
+
refresh: () => Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/useUserOrders/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,wEAAwE;IACxE,MAAM,EAAE,KAAK,EAAE,CAAC;IAEhB,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IAEjB,qDAAqD;IACrD,UAAU,EAAE,OAAO,CAAC;IAEpB,gEAAgE;IAChE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAEpB,oCAAoC;IACpC,UAAU,EAAE,MAAM,IAAI,CAAC;IAEvB,4CAA4C;IAC5C,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/hooks/useUserOrders/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { UseUserOrdersReturn } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Hook for subscribing to real-time user order events via WebSocket (authenticated)
|
|
4
|
+
*
|
|
5
|
+
* Fetches initial orders from the REST API, then subscribes to real-time updates.
|
|
6
|
+
* Requires authentication - the user must be logged in with a valid JWT token.
|
|
7
|
+
* User is identified on the backend via the JWT token.
|
|
8
|
+
*
|
|
9
|
+
* @param maxOrders - Maximum number of orders to keep in state (default: 50)
|
|
10
|
+
*/
|
|
11
|
+
export declare function useUserOrders(maxOrders?: number): UseUserOrdersReturn;
|
|
12
|
+
//# sourceMappingURL=useUserOrders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useUserOrders.d.ts","sourceRoot":"","sources":["../../../src/hooks/useUserOrders/useUserOrders.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,SAAS,SAAK,GAAG,mBAAmB,CAsHjE"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { useCallback, useEffect, useState } from "react";
|
|
2
|
+
import { useMonacoSDK } from "../useMonaco";
|
|
3
|
+
/**
|
|
4
|
+
* Hook for subscribing to real-time user order events via WebSocket (authenticated)
|
|
5
|
+
*
|
|
6
|
+
* Fetches initial orders from the REST API, then subscribes to real-time updates.
|
|
7
|
+
* Requires authentication - the user must be logged in with a valid JWT token.
|
|
8
|
+
* User is identified on the backend via the JWT token.
|
|
9
|
+
*
|
|
10
|
+
* @param maxOrders - Maximum number of orders to keep in state (default: 50)
|
|
11
|
+
*/
|
|
12
|
+
export function useUserOrders(maxOrders = 50) {
|
|
13
|
+
const { sdk } = useMonacoSDK();
|
|
14
|
+
const [orders, setOrders] = useState([]);
|
|
15
|
+
const [loading, setLoading] = useState(false);
|
|
16
|
+
const [error, setError] = useState(null);
|
|
17
|
+
const [subscribed, setSubscribed] = useState(false);
|
|
18
|
+
const clearError = useCallback(() => setError(null), []);
|
|
19
|
+
const fetchOrders = useCallback(async () => {
|
|
20
|
+
if (!sdk?.trading)
|
|
21
|
+
return;
|
|
22
|
+
setLoading(true);
|
|
23
|
+
try {
|
|
24
|
+
const response = await sdk.trading.getPaginatedOrders({
|
|
25
|
+
page: 1,
|
|
26
|
+
page_size: maxOrders,
|
|
27
|
+
});
|
|
28
|
+
// Combine latest_orders (from Redis) with orders (from PostgreSQL)
|
|
29
|
+
// latest_orders contains real-time data that may not yet be in PostgreSQL
|
|
30
|
+
// Deduplicate by id, preferring latest_orders (newer data)
|
|
31
|
+
const latestOrders = response.latest_orders || [];
|
|
32
|
+
const historicalOrders = response.orders;
|
|
33
|
+
// Merge: latest_orders first, then historical, deduplicated by id
|
|
34
|
+
const seenIds = new Set();
|
|
35
|
+
const mergedOrders = [];
|
|
36
|
+
for (const order of [...latestOrders, ...historicalOrders]) {
|
|
37
|
+
if (!seenIds.has(order.id)) {
|
|
38
|
+
seenIds.add(order.id);
|
|
39
|
+
mergedOrders.push(order);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
setOrders(mergedOrders.slice(0, maxOrders));
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
setError(err instanceof Error ? err : new Error(String(err)));
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
setLoading(false);
|
|
49
|
+
}
|
|
50
|
+
}, [sdk?.trading, maxOrders]);
|
|
51
|
+
// Manual refresh function
|
|
52
|
+
const refresh = useCallback(async () => {
|
|
53
|
+
await fetchOrders();
|
|
54
|
+
}, [fetchOrders]);
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
if (!sdk?.ws || !sdk?.trading) {
|
|
57
|
+
setSubscribed(false);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
setOrders([]);
|
|
61
|
+
setError(null);
|
|
62
|
+
setLoading(true);
|
|
63
|
+
const limit = Number.isFinite(maxOrders) ? maxOrders : 50;
|
|
64
|
+
// Fetch initial orders via REST API, then subscribe to WebSocket updates
|
|
65
|
+
let unsubscribe;
|
|
66
|
+
fetchOrders()
|
|
67
|
+
.then(() => {
|
|
68
|
+
// Subscribe to WebSocket order updates after initial data is loaded
|
|
69
|
+
// This prevents race conditions where WS events could be overwritten by REST response
|
|
70
|
+
try {
|
|
71
|
+
unsubscribe = sdk.ws.userOrders((event) => {
|
|
72
|
+
setOrders((prev) => {
|
|
73
|
+
const orderId = event.orderId;
|
|
74
|
+
// Check if this order already exists
|
|
75
|
+
const existingIndex = prev.findIndex((o) => o.id === orderId);
|
|
76
|
+
if (existingIndex >= 0) {
|
|
77
|
+
// Update existing order with new data from event
|
|
78
|
+
const existingOrder = prev[existingIndex];
|
|
79
|
+
const updatedOrder = updateOrderFromEvent(existingOrder, event);
|
|
80
|
+
// If order is terminal (filled, cancelled, rejected, expired), keep it but update
|
|
81
|
+
const newOrders = [...prev];
|
|
82
|
+
newOrders[existingIndex] = updatedOrder;
|
|
83
|
+
return newOrders;
|
|
84
|
+
}
|
|
85
|
+
// New order - add to the beginning if it's an OrderPlaced event
|
|
86
|
+
if (event.eventType === "OrderPlaced") {
|
|
87
|
+
const newOrder = orderFromEvent(event);
|
|
88
|
+
if (newOrder) {
|
|
89
|
+
return [newOrder, ...prev].slice(0, limit);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return prev;
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
setSubscribed(true);
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
setError(err instanceof Error ? err : new Error(String(err)));
|
|
99
|
+
setSubscribed(false);
|
|
100
|
+
setLoading(false);
|
|
101
|
+
}
|
|
102
|
+
})
|
|
103
|
+
.catch((err) => {
|
|
104
|
+
setError(err instanceof Error ? err : new Error(String(err)));
|
|
105
|
+
setLoading(false);
|
|
106
|
+
});
|
|
107
|
+
return () => {
|
|
108
|
+
unsubscribe?.();
|
|
109
|
+
setSubscribed(false);
|
|
110
|
+
};
|
|
111
|
+
}, [sdk?.ws, sdk?.trading, maxOrders, fetchOrders]);
|
|
112
|
+
return { orders, loading, subscribed, error, clearError, refresh };
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Create an Order object from an OrderPlaced event
|
|
116
|
+
*/
|
|
117
|
+
function orderFromEvent(event) {
|
|
118
|
+
if (event.eventType !== "OrderPlaced")
|
|
119
|
+
return null;
|
|
120
|
+
const { data } = event;
|
|
121
|
+
const tradingPair = data.tradingPairId || data.tradingPair;
|
|
122
|
+
if (!tradingPair)
|
|
123
|
+
return null;
|
|
124
|
+
return {
|
|
125
|
+
id: event.orderId,
|
|
126
|
+
trading_pair: tradingPair,
|
|
127
|
+
order_type: (data.orderType || "LIMIT"),
|
|
128
|
+
side: (data.side || "BUY"),
|
|
129
|
+
price: data.price,
|
|
130
|
+
quantity: data.quantity || "0",
|
|
131
|
+
filled_quantity: "0",
|
|
132
|
+
average_fill_price: undefined,
|
|
133
|
+
status: data.status,
|
|
134
|
+
trading_mode: (data.tradingMode || "SPOT"),
|
|
135
|
+
time_in_force: data.timeInForce,
|
|
136
|
+
created_at: event.timestamp,
|
|
137
|
+
updated_at: event.timestamp,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Update an existing Order with data from a WebSocket event
|
|
142
|
+
*/
|
|
143
|
+
function updateOrderFromEvent(order, event) {
|
|
144
|
+
const data = event.data;
|
|
145
|
+
// Prefer status from event data when available, fall back to event-type-based mapping
|
|
146
|
+
let newStatus = order.status;
|
|
147
|
+
if ("status" in data && data.status) {
|
|
148
|
+
newStatus = data.status;
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
switch (event.eventType) {
|
|
152
|
+
case "OrderPlaced":
|
|
153
|
+
newStatus = "SUBMITTED";
|
|
154
|
+
break;
|
|
155
|
+
case "OrderPartiallyFilled":
|
|
156
|
+
newStatus = "PARTIALLY_FILLED";
|
|
157
|
+
break;
|
|
158
|
+
case "OrderFilled":
|
|
159
|
+
newStatus = "FILLED";
|
|
160
|
+
break;
|
|
161
|
+
case "OrderCancelled":
|
|
162
|
+
newStatus = "CANCELLED";
|
|
163
|
+
break;
|
|
164
|
+
case "OrderRejected":
|
|
165
|
+
newStatus = "REJECTED";
|
|
166
|
+
break;
|
|
167
|
+
case "OrderExpired":
|
|
168
|
+
newStatus = "EXPIRED";
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// Get filled quantity from different event types
|
|
173
|
+
let filledQuantity = order.filled_quantity;
|
|
174
|
+
let avgFillPrice = order.average_fill_price;
|
|
175
|
+
if ("totalFilled" in data && data.totalFilled) {
|
|
176
|
+
filledQuantity = data.totalFilled;
|
|
177
|
+
}
|
|
178
|
+
if ("filledQuantity" in data && data.filledQuantity) {
|
|
179
|
+
filledQuantity = data.filledQuantity;
|
|
180
|
+
}
|
|
181
|
+
if ("averageFillPrice" in data && data.averageFillPrice) {
|
|
182
|
+
avgFillPrice = data.averageFillPrice;
|
|
183
|
+
}
|
|
184
|
+
return {
|
|
185
|
+
...order,
|
|
186
|
+
status: newStatus,
|
|
187
|
+
filled_quantity: filledQuantity,
|
|
188
|
+
average_fill_price: avgFillPrice,
|
|
189
|
+
updated_at: event.timestamp,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=useUserOrders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useUserOrders.js","sourceRoot":"","sources":["../../../src/hooks/useUserOrders/useUserOrders.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonacoProvider.d.ts","sourceRoot":"","sources":["../../src/provider/MonacoProvider.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAwB,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"MonacoProvider.d.ts","sourceRoot":"","sources":["../../src/provider/MonacoProvider.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAwB,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAalG,eAAO,MAAM,cAAc,GAAI,uGAAuG,mBAAmB,4CA+IxJ,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,kBAQnC,CAAC"}
|
|
@@ -2,20 +2,46 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { MonacoSDK } from "@0xmonaco/core";
|
|
3
3
|
import { createContext, useContext, useEffect, useMemo, useRef, useState } from "react";
|
|
4
4
|
import { useTokenLifecycle } from "../hooks";
|
|
5
|
-
import { loadAuthState } from "../utils";
|
|
5
|
+
import { clearAuthState, loadAuthState } from "../utils";
|
|
6
6
|
import { TradeFeedProvider } from "./TradeFeedProvider";
|
|
7
7
|
import { AuthenticationStatus } from "./types";
|
|
8
8
|
const MonacoContext = createContext(null);
|
|
9
|
+
const normalizeUrl = (url) => {
|
|
10
|
+
try {
|
|
11
|
+
const parsed = new URL(url);
|
|
12
|
+
return parsed.href.replace(/\/$/, '');
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return url;
|
|
16
|
+
}
|
|
17
|
+
};
|
|
9
18
|
export const MonacoProvider = ({ children, clientId, network, seiRpcUrl, wsUrl, walletClient, tokenLifecycle: tokenLifecycleConfig }) => {
|
|
10
19
|
const [sdk, setSdk] = useState(null);
|
|
11
20
|
const [error, setError] = useState(null);
|
|
12
|
-
|
|
21
|
+
// Track previous network config to detect actual changes vs initial mount
|
|
22
|
+
const prevNetworkRef = useRef(null);
|
|
13
23
|
// Global authentication state (shared across all components)
|
|
14
24
|
const [authenticationStatus, setAuthenticationStatus] = useState(AuthenticationStatus.UNAUTHENTICATED);
|
|
15
25
|
// Token lifecycle management
|
|
16
26
|
const tokenLifecycle = useTokenLifecycle(sdk, tokenLifecycleConfig);
|
|
27
|
+
// Ref to access tokenLifecycle.clearTokens without adding it to effect dependencies
|
|
28
|
+
// (tokenLifecycle depends on sdk, which would cause a circular dependency)
|
|
29
|
+
const tokenLifecycleRef = useRef(tokenLifecycle);
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
tokenLifecycleRef.current = tokenLifecycle;
|
|
32
|
+
}, [tokenLifecycle]);
|
|
17
33
|
// Initialize SDK without wallet (for public APIs)
|
|
18
34
|
useEffect(() => {
|
|
35
|
+
const prevNetwork = prevNetworkRef.current;
|
|
36
|
+
const networkChanged = prevNetwork !== null && (prevNetwork.network !== network ||
|
|
37
|
+
normalizeUrl(prevNetwork.seiRpcUrl) !== normalizeUrl(seiRpcUrl) ||
|
|
38
|
+
normalizeUrl(prevNetwork.wsUrl) !== normalizeUrl(wsUrl));
|
|
39
|
+
// Only reset auth state when network actually changes, not on initial mount
|
|
40
|
+
if (networkChanged) {
|
|
41
|
+
setAuthenticationStatus(AuthenticationStatus.UNAUTHENTICATED);
|
|
42
|
+
tokenLifecycleRef.current.clearTokens(); // stop auto-refresh and drop in-memory secrets
|
|
43
|
+
clearAuthState();
|
|
44
|
+
}
|
|
19
45
|
try {
|
|
20
46
|
setError(null);
|
|
21
47
|
const sdkConfig = {
|
|
@@ -24,30 +50,35 @@ export const MonacoProvider = ({ children, clientId, network, seiRpcUrl, wsUrl,
|
|
|
24
50
|
wsUrl,
|
|
25
51
|
};
|
|
26
52
|
const newSdk = new MonacoSDK(sdkConfig);
|
|
27
|
-
sdkRef.current = newSdk;
|
|
28
53
|
setSdk(newSdk);
|
|
54
|
+
// Update ref only after successful SDK creation
|
|
55
|
+
prevNetworkRef.current = { network, seiRpcUrl, wsUrl };
|
|
29
56
|
}
|
|
30
57
|
catch (err) {
|
|
31
58
|
const normalizedError = err instanceof Error ? err : new Error(String(err));
|
|
59
|
+
setSdk(null);
|
|
32
60
|
setError(normalizedError);
|
|
33
61
|
}
|
|
62
|
+
}, [network, seiRpcUrl, wsUrl]);
|
|
63
|
+
// Cleanup: disconnect WebSocket when SDK changes or unmounts
|
|
64
|
+
useEffect(() => {
|
|
34
65
|
return () => {
|
|
35
|
-
|
|
66
|
+
sdk?.ws.disconnect();
|
|
36
67
|
};
|
|
37
|
-
}, [
|
|
38
|
-
// Update wallet client when it changes
|
|
68
|
+
}, [sdk]);
|
|
69
|
+
// Update wallet client when it changes or when SDK is recreated (e.g., network change)
|
|
39
70
|
useEffect(() => {
|
|
40
|
-
if (!
|
|
71
|
+
if (!sdk || !walletClient)
|
|
41
72
|
return;
|
|
42
73
|
try {
|
|
43
|
-
|
|
74
|
+
sdk.setWalletClient(walletClient);
|
|
44
75
|
}
|
|
45
76
|
catch (err) {
|
|
46
77
|
const normalizedError = err instanceof Error ? err : new Error(String(err));
|
|
47
78
|
setError(normalizedError);
|
|
48
79
|
}
|
|
49
|
-
}, [walletClient]);
|
|
50
|
-
// Restore cached tokens when
|
|
80
|
+
}, [sdk, walletClient]);
|
|
81
|
+
// Restore cached tokens when SDK changes (including on mount)
|
|
51
82
|
useEffect(() => {
|
|
52
83
|
if (!sdk)
|
|
53
84
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonacoProvider.js","sourceRoot":"","sources":["../../src/provider/MonacoProvider.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"MonacoProvider.js","sourceRoot":"","sources":["../../src/provider/MonacoProvider.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@0xmonaco/react",
|
|
3
|
-
"version": "0.0.0-develop-
|
|
3
|
+
"version": "0.0.0-develop-20260202185041",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
"lint": "eslint src --ext .ts,.tsx"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@0xmonaco/core": "0.0.0-develop-
|
|
19
|
-
"@0xmonaco/types": "0.0.0-develop-
|
|
18
|
+
"@0xmonaco/core": "0.0.0-develop-20260202185041",
|
|
19
|
+
"@0xmonaco/types": "0.0.0-develop-20260202185041"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@types/react": "^19.1.12",
|