@n1xyz/nord-ts 0.0.1 → 0.0.4

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.
Files changed (237) hide show
  1. package/.eslintrc.js +11 -0
  2. package/README.md +148 -65
  3. package/dist/bridge/NordUser.d.ts +78 -0
  4. package/dist/bridge/NordUser.js +196 -0
  5. package/dist/bridge/client.d.ts +150 -0
  6. package/dist/bridge/client.js +394 -0
  7. package/dist/bridge/const.d.ts +23 -0
  8. package/dist/bridge/const.js +47 -0
  9. package/dist/bridge/index.d.ts +5 -0
  10. package/dist/bridge/index.js +23 -0
  11. package/dist/bridge/types.d.ts +118 -0
  12. package/dist/bridge/types.js +16 -0
  13. package/dist/bridge/utils.d.ts +64 -0
  14. package/dist/bridge/utils.js +131 -0
  15. package/dist/client.d.ts +70 -0
  16. package/dist/client.js +129 -0
  17. package/dist/const.d.ts +2 -5
  18. package/dist/const.js +18 -22
  19. package/dist/constants/endpoints.d.ts +65 -0
  20. package/dist/constants/endpoints.js +68 -0
  21. package/dist/gen/common.d.ts +6 -1
  22. package/dist/gen/common.js +19 -9
  23. package/dist/gen/nord.d.ts +75 -17
  24. package/dist/gen/nord.js +987 -423
  25. package/dist/idl/bridge.d.ts +2 -0
  26. package/dist/idl/bridge.js +703 -0
  27. package/dist/index.d.ts +8 -5
  28. package/dist/index.js +18 -2
  29. package/dist/models/account.d.ts +58 -0
  30. package/dist/models/account.js +6 -0
  31. package/dist/models/index.d.ts +8 -0
  32. package/dist/models/index.js +28 -0
  33. package/dist/models/market.d.ts +137 -0
  34. package/dist/models/market.js +6 -0
  35. package/dist/models/order.d.ts +211 -0
  36. package/dist/models/order.js +6 -0
  37. package/dist/models/token.d.ts +50 -0
  38. package/dist/models/token.js +6 -0
  39. package/dist/nord/Nord.d.ts +222 -49
  40. package/dist/nord/Nord.js +290 -278
  41. package/dist/nord/NordError.d.ts +23 -0
  42. package/dist/nord/NordError.js +48 -0
  43. package/dist/nord/NordImpl.d.ts +6 -2
  44. package/dist/nord/NordImpl.js +21 -1
  45. package/dist/nord/NordUser.d.ts +208 -42
  46. package/dist/nord/NordUser.js +389 -157
  47. package/dist/nord/Subscriber.d.ts +37 -0
  48. package/dist/nord/Subscriber.js +29 -0
  49. package/dist/nord/api/actions.d.ts +101 -0
  50. package/dist/nord/api/actions.js +250 -0
  51. package/dist/nord/api/core.d.ts +49 -0
  52. package/dist/nord/api/core.js +121 -0
  53. package/dist/nord/api/index.d.ts +1 -0
  54. package/dist/nord/api/index.js +17 -0
  55. package/dist/nord/api/market.d.ts +36 -0
  56. package/dist/nord/api/market.js +98 -0
  57. package/dist/nord/api/metrics.d.ts +67 -0
  58. package/dist/nord/api/metrics.js +132 -0
  59. package/dist/nord/api/orderFunctions.d.ts +168 -0
  60. package/dist/nord/api/orderFunctions.js +133 -0
  61. package/dist/nord/api/queries.d.ts +81 -0
  62. package/dist/nord/api/queries.js +187 -0
  63. package/dist/nord/client/Nord.d.ts +335 -0
  64. package/dist/nord/client/Nord.js +532 -0
  65. package/dist/nord/client/NordUser.d.ts +320 -0
  66. package/dist/nord/client/NordUser.js +701 -0
  67. package/dist/nord/core.d.ts +48 -0
  68. package/dist/nord/core.js +97 -0
  69. package/dist/nord/index.d.ts +9 -2
  70. package/dist/nord/index.js +30 -6
  71. package/dist/nord/market.d.ts +36 -0
  72. package/dist/nord/market.js +90 -0
  73. package/dist/nord/metrics.d.ts +67 -0
  74. package/dist/nord/metrics.js +124 -0
  75. package/dist/nord/models/Subscriber.d.ts +37 -0
  76. package/dist/nord/models/Subscriber.js +29 -0
  77. package/dist/nord/queries.d.ts +81 -0
  78. package/dist/nord/queries.js +181 -0
  79. package/dist/nord/types.d.ts +88 -0
  80. package/dist/nord/types.js +2 -0
  81. package/dist/nord/utils/NordError.d.ts +35 -0
  82. package/dist/nord/utils/NordError.js +46 -0
  83. package/dist/nord/websocket.d.ts +49 -0
  84. package/dist/nord/websocket.js +107 -0
  85. package/dist/operations/account.d.ts +58 -0
  86. package/dist/operations/account.js +112 -0
  87. package/dist/operations/market.d.ts +65 -0
  88. package/dist/operations/market.js +131 -0
  89. package/dist/operations/orders.d.ts +57 -0
  90. package/dist/operations/orders.js +129 -0
  91. package/dist/solana/NordUser.d.ts +78 -0
  92. package/dist/solana/NordUser.js +196 -0
  93. package/dist/solana/client.d.ts +139 -0
  94. package/dist/solana/client.js +360 -0
  95. package/dist/solana/const.d.ts +23 -0
  96. package/dist/solana/const.js +47 -0
  97. package/dist/solana/index.d.ts +5 -0
  98. package/dist/solana/index.js +23 -0
  99. package/dist/solana/types.d.ts +118 -0
  100. package/dist/solana/types.js +16 -0
  101. package/dist/solana/utils.d.ts +64 -0
  102. package/dist/solana/utils.js +131 -0
  103. package/dist/types/api.d.ts +152 -0
  104. package/dist/types/api.js +6 -0
  105. package/dist/types/config.d.ts +34 -0
  106. package/dist/types/config.js +6 -0
  107. package/dist/types.d.ts +144 -87
  108. package/dist/types.js +13 -2
  109. package/dist/utils/errors.d.ts +96 -0
  110. package/dist/utils/errors.js +132 -0
  111. package/dist/utils/http.d.ts +35 -0
  112. package/dist/utils/http.js +105 -0
  113. package/dist/utils.d.ts +14 -5
  114. package/dist/utils.js +26 -7
  115. package/dist/websocket/NordWebSocketClient.d.ts +71 -0
  116. package/dist/websocket/NordWebSocketClient.js +343 -0
  117. package/dist/websocket/client.d.ts +93 -0
  118. package/dist/websocket/client.js +222 -0
  119. package/dist/websocket/events.d.ts +19 -0
  120. package/dist/websocket/events.js +2 -0
  121. package/dist/websocket/index.d.ts +2 -0
  122. package/dist/websocket/index.js +5 -0
  123. package/dist/websocket.d.ts +55 -0
  124. package/dist/websocket.js +211 -0
  125. package/docs/assets/navigation.js +1 -1
  126. package/docs/assets/search.js +1 -1
  127. package/docs/classes/Nord.html +2 -15
  128. package/docs/classes/NordUser.html +4 -4
  129. package/docs/enums/FillMode.html +2 -2
  130. package/docs/enums/KeyType.html +2 -2
  131. package/docs/enums/PeakTpsPeriodUnit.html +2 -2
  132. package/docs/enums/Side.html +2 -2
  133. package/docs/functions/assert.html +1 -1
  134. package/docs/functions/bigIntToProtoU128.html +1 -1
  135. package/docs/functions/checkPubKeyLength.html +1 -1
  136. package/docs/functions/checkedFetch.html +1 -1
  137. package/docs/functions/decodeLengthDelimited.html +1 -1
  138. package/docs/functions/encodeLengthDelimited.html +1 -1
  139. package/docs/functions/fillModeToProtoFillMode.html +1 -1
  140. package/docs/functions/findMarket.html +1 -1
  141. package/docs/functions/findToken.html +1 -1
  142. package/docs/functions/makeWalletSignFn.html +1 -1
  143. package/docs/functions/optExpect.html +1 -1
  144. package/docs/functions/optMap.html +1 -1
  145. package/docs/functions/optUnwrap.html +1 -1
  146. package/docs/functions/panic.html +1 -1
  147. package/docs/functions/signAction.html +1 -1
  148. package/docs/functions/toScaledU128.html +1 -1
  149. package/docs/functions/toScaledU64.html +1 -1
  150. package/docs/interfaces/Account.html +2 -2
  151. package/docs/interfaces/ActionInfo.html +2 -2
  152. package/docs/interfaces/ActionQuery.html +2 -2
  153. package/docs/interfaces/ActionResponse.html +2 -2
  154. package/docs/interfaces/ActionsExtendedInfo.html +2 -2
  155. package/docs/interfaces/ActionsQuery.html +2 -2
  156. package/docs/interfaces/ActionsResponse.html +2 -2
  157. package/docs/interfaces/AggregateMetrics.html +2 -2
  158. package/docs/interfaces/BlockQuery.html +2 -2
  159. package/docs/interfaces/BlockResponse.html +2 -2
  160. package/docs/interfaces/BlockSummary.html +2 -2
  161. package/docs/interfaces/BlockSummaryResponse.html +2 -2
  162. package/docs/interfaces/DeltaEvent.html +2 -2
  163. package/docs/interfaces/ERC20TokenInfo.html +2 -2
  164. package/docs/interfaces/Info.html +2 -2
  165. package/docs/interfaces/Market.html +2 -2
  166. package/docs/interfaces/MarketStats.html +2 -2
  167. package/docs/interfaces/MarketsStatsResponse.html +2 -2
  168. package/docs/interfaces/NordConfig.html +2 -2
  169. package/docs/interfaces/Order.html +2 -2
  170. package/docs/interfaces/OrderInfo.html +2 -2
  171. package/docs/interfaces/PerpMarketStats.html +2 -2
  172. package/docs/interfaces/RollmanActionExtendedInfo.html +2 -2
  173. package/docs/interfaces/RollmanActionInfo.html +2 -2
  174. package/docs/interfaces/RollmanActionResponse.html +2 -2
  175. package/docs/interfaces/RollmanActionsResponse.html +2 -2
  176. package/docs/interfaces/RollmanBlockResponse.html +2 -2
  177. package/docs/interfaces/SubscriberConfig.html +2 -2
  178. package/docs/interfaces/Token.html +2 -2
  179. package/docs/interfaces/Trade.html +2 -2
  180. package/docs/interfaces/Trades.html +2 -2
  181. package/docs/modules.html +0 -7
  182. package/docs/types/BigIntValue.html +1 -1
  183. package/docs/variables/DEBUG_KEYS.html +1 -1
  184. package/docs/variables/DEFAULT_FUNDING_AMOUNTS.html +1 -1
  185. package/docs/variables/DEV_CONTRACT_ADDRESS.html +1 -1
  186. package/docs/variables/DEV_TOKEN_INFOS.html +1 -1
  187. package/docs/variables/DEV_URL.html +1 -1
  188. package/docs/variables/ERC20_ABI.html +1 -1
  189. package/docs/variables/EVM_DEV_URL.html +1 -1
  190. package/docs/variables/FAUCET_PRIVATE_ADDRESS.html +1 -1
  191. package/docs/variables/MAX_BUFFER_LEN.html +1 -1
  192. package/docs/variables/NORD_GETTERS_FACET_ABI.html +1 -1
  193. package/docs/variables/NORD_RAMP_FACET_ABI.html +1 -1
  194. package/docs/variables/SESSION_TTL.html +1 -1
  195. package/docs/variables/WEBSERVER_DEV_URL.html +1 -1
  196. package/docs/variables/ZERO_DECIMAL.html +1 -1
  197. package/package.json +10 -12
  198. package/src/bridge/client.ts +487 -0
  199. package/src/bridge/const.ts +53 -0
  200. package/src/bridge/index.ts +7 -0
  201. package/src/bridge/types.ts +127 -0
  202. package/src/bridge/utils.ts +140 -0
  203. package/src/const.ts +20 -25
  204. package/src/gen/common.ts +27 -10
  205. package/src/gen/nord.ts +1044 -483
  206. package/src/idl/bridge.ts +702 -0
  207. package/src/index.ts +24 -5
  208. package/src/nord/{actions.ts → api/actions.ts} +33 -37
  209. package/src/nord/api/core.ts +130 -0
  210. package/src/nord/api/market.ts +125 -0
  211. package/src/nord/api/metrics.ts +154 -0
  212. package/src/nord/api/queries.ts +236 -0
  213. package/src/nord/client/Nord.ts +652 -0
  214. package/src/nord/client/NordUser.ts +1105 -0
  215. package/src/nord/index.ts +16 -2
  216. package/src/nord/models/Subscriber.ts +57 -0
  217. package/src/nord/utils/NordError.ts +72 -0
  218. package/src/types.ts +170 -99
  219. package/src/utils.ts +40 -19
  220. package/src/websocket/NordWebSocketClient.ts +432 -0
  221. package/src/websocket/events.ts +31 -0
  222. package/src/websocket/index.ts +2 -0
  223. package/tests/utils.spec.ts +24 -24
  224. package/docs/classes/Subscriber.html +0 -6
  225. package/docs/functions/createWebSocketSubscription.html +0 -12
  226. package/docs/interfaces/OrderbookOrder.html +0 -6
  227. package/docs/interfaces/OrderbookResponse.html +0 -10
  228. package/docs/interfaces/TradeInfo.html +0 -20
  229. package/docs/interfaces/TradesQueryParams.html +0 -10
  230. package/docs/interfaces/TradesResponse.html +0 -12
  231. package/src/abis/ERC20_ABI.ts +0 -310
  232. package/src/abis/NORD_GETTERS_FACET_ABI.ts +0 -192
  233. package/src/abis/NORD_RAMP_FACET_ABI.ts +0 -141
  234. package/src/abis/index.ts +0 -3
  235. package/src/nord/Nord.ts +0 -504
  236. package/src/nord/NordImpl.ts +0 -8
  237. package/src/nord/NordUser.ts +0 -469
@@ -0,0 +1,118 @@
1
+ import { PublicKey } from '@solana/web3.js';
2
+ import { BN } from '@coral-xyz/anchor';
3
+ /**
4
+ * Configuration for Solana bridge
5
+ */
6
+ export interface SolanaBridgeConfig {
7
+ /** Solana RPC URL */
8
+ rpcUrl: string;
9
+ /** Program ID for the bridge program */
10
+ programId: string;
11
+ /** Commitment level for transactions */
12
+ commitment: 'processed' | 'confirmed' | 'finalized';
13
+ /** Token information for supported SPL tokens */
14
+ tokenInfos: SPLTokenInfo[];
15
+ }
16
+ /**
17
+ * Information about an SPL token
18
+ */
19
+ export interface SPLTokenInfo {
20
+ /** Token mint address */
21
+ mint: string;
22
+ /** Token decimals */
23
+ precision: number;
24
+ /** Token ID in the Layer-N system */
25
+ tokenId: number;
26
+ /** Token name */
27
+ name: string;
28
+ }
29
+ /**
30
+ * Parameters for depositing SPL tokens
31
+ */
32
+ export interface DepositSplParams {
33
+ /** Amount to deposit (in token's smallest unit) */
34
+ amount: BN;
35
+ /** Mint address of the token to deposit */
36
+ mint: PublicKey;
37
+ /** User's token account to deposit from */
38
+ fromAccount: PublicKey;
39
+ /** Bridge's token account to deposit to */
40
+ toAccount: PublicKey;
41
+ }
42
+ /**
43
+ * Parameters for withdrawing tokens
44
+ */
45
+ export interface WithdrawalParams {
46
+ /** Withdrawal claim data */
47
+ claim: WithdrawalClaim;
48
+ /** User's token account to receive tokens */
49
+ toAccount: PublicKey;
50
+ /** Bridge's token account to withdraw from */
51
+ fromAccount: PublicKey;
52
+ }
53
+ /**
54
+ * Withdrawal claim data
55
+ */
56
+ export interface WithdrawalClaim {
57
+ /** Block ID containing the withdrawal */
58
+ blockId: BN;
59
+ /** Leaf index in the Merkle tree */
60
+ leafIndex: BN;
61
+ /** Amount to withdraw */
62
+ amount: BN;
63
+ /** Recipient address */
64
+ recipient: PublicKey;
65
+ /** Token mint address */
66
+ mint: PublicKey;
67
+ /** Merkle proof for the withdrawal */
68
+ proof: Buffer[];
69
+ }
70
+ /**
71
+ * Block facts data structure
72
+ */
73
+ export interface BlockFacts {
74
+ /** Previous state facts */
75
+ prevStateFacts: StateFacts;
76
+ /** Next state facts */
77
+ nextStateFacts: StateFacts;
78
+ /** Data availability commitment */
79
+ daCommitment: Buffer;
80
+ /** Withdrawal Merkle root */
81
+ withdrawalRoot: Buffer;
82
+ }
83
+ /**
84
+ * State facts data structure
85
+ */
86
+ export interface StateFacts {
87
+ /** Application state commitment */
88
+ appStateCommitment: Buffer;
89
+ /** Deposit root */
90
+ depositRoot: Buffer;
91
+ /** Last deposit index */
92
+ lastDepositIndex: BN;
93
+ /** Last action ID */
94
+ lastActionId: BN;
95
+ }
96
+ /**
97
+ * Transfer parameters
98
+ */
99
+ export interface TransferParams {
100
+ /** User public key */
101
+ user: PublicKey;
102
+ /** Token mint */
103
+ mint: PublicKey;
104
+ /** Amount to transfer */
105
+ amount: BN;
106
+ }
107
+ /**
108
+ * PDA seed types
109
+ */
110
+ export declare enum PdaSeedType {
111
+ ContractStorage = "contract_storage",
112
+ AssetWhitelisted = "asset_whitelisted",
113
+ DepositStorage = "deposit_storage",
114
+ BlockStorage = "block_storage",
115
+ WithdrawalNullifier = "withdrawal_nullifier",
116
+ Authority = "authority",
117
+ DaFactStorage = "da_fact_storage"
118
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PdaSeedType = void 0;
4
+ /**
5
+ * PDA seed types
6
+ */
7
+ var PdaSeedType;
8
+ (function (PdaSeedType) {
9
+ PdaSeedType["ContractStorage"] = "contract_storage";
10
+ PdaSeedType["AssetWhitelisted"] = "asset_whitelisted";
11
+ PdaSeedType["DepositStorage"] = "deposit_storage";
12
+ PdaSeedType["BlockStorage"] = "block_storage";
13
+ PdaSeedType["WithdrawalNullifier"] = "withdrawal_nullifier";
14
+ PdaSeedType["Authority"] = "authority";
15
+ PdaSeedType["DaFactStorage"] = "da_fact_storage";
16
+ })(PdaSeedType || (exports.PdaSeedType = PdaSeedType = {}));
@@ -0,0 +1,64 @@
1
+ import { Keypair, PublicKey } from '@solana/web3.js';
2
+ import { BN } from '@coral-xyz/anchor';
3
+ import { PdaSeedType } from './types';
4
+ /**
5
+ * Convert a private key string to a Solana Keypair
6
+ *
7
+ * @param privateKey Private key as base58 string, hex string, or Uint8Array
8
+ * @returns Solana Keypair
9
+ */
10
+ export declare function keypairFromPrivateKey(privateKey: string | Uint8Array): Keypair;
11
+ /**
12
+ * Create a signing function for Solana transactions
13
+ *
14
+ * @param keypair Solana keypair
15
+ * @returns Signing function
16
+ */
17
+ export declare function makeSigningFunction(keypair: Keypair): (message: Uint8Array) => Promise<Uint8Array>;
18
+ /**
19
+ * Convert a number to a BN with the specified number of decimals
20
+ *
21
+ * @param amount Amount as a number
22
+ * @param decimals Number of decimals
23
+ * @returns BN representation of the amount
24
+ */
25
+ export declare function bridgeToBN(amount: number, decimals: number): BN;
26
+ /**
27
+ * Format a BN as a human-readable number with the specified number of decimals
28
+ *
29
+ * @param amount Amount as a BN
30
+ * @param decimals Number of decimals
31
+ * @returns Formatted number
32
+ */
33
+ export declare function fromBN(amount: BN, decimals: number): number;
34
+ /**
35
+ * Derive a PDA (Program Derived Address) for the given seeds
36
+ *
37
+ * @param programId Program ID
38
+ * @param type PDA seed type
39
+ * @param seeds Additional seeds
40
+ * @returns [PDA, bump]
41
+ */
42
+ export declare function findPda(programId: PublicKey, type: PdaSeedType, ...seeds: (Buffer | PublicKey | string | number)[]): [PublicKey, number];
43
+ /**
44
+ * Convert a buffer to a hex string
45
+ *
46
+ * @param buffer Buffer to convert
47
+ * @returns Hex string
48
+ */
49
+ export declare function bufferToHex(buffer: Buffer | Uint8Array): string;
50
+ /**
51
+ * Convert a hex string to a buffer
52
+ *
53
+ * @param hex Hex string
54
+ * @returns Buffer
55
+ */
56
+ export declare function hexToBuffer(hex: string): Buffer;
57
+ /**
58
+ * Shorten a public key for display
59
+ *
60
+ * @param publicKey Public key to shorten
61
+ * @param chars Number of characters to show at the beginning and end
62
+ * @returns Shortened public key
63
+ */
64
+ export declare function shortenPublicKey(publicKey: PublicKey | string, chars?: number): string;
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.keypairFromPrivateKey = keypairFromPrivateKey;
7
+ exports.makeSigningFunction = makeSigningFunction;
8
+ exports.bridgeToBN = bridgeToBN;
9
+ exports.fromBN = fromBN;
10
+ exports.findPda = findPda;
11
+ exports.bufferToHex = bufferToHex;
12
+ exports.hexToBuffer = hexToBuffer;
13
+ exports.shortenPublicKey = shortenPublicKey;
14
+ const web3_js_1 = require("@solana/web3.js");
15
+ const anchor_1 = require("@coral-xyz/anchor");
16
+ const bs58_1 = __importDefault(require("bs58"));
17
+ /**
18
+ * Convert a private key string to a Solana Keypair
19
+ *
20
+ * @param privateKey Private key as base58 string, hex string, or Uint8Array
21
+ * @returns Solana Keypair
22
+ */
23
+ function keypairFromPrivateKey(privateKey) {
24
+ if (typeof privateKey === 'string') {
25
+ // Check if it's a base58 encoded string
26
+ if (!privateKey.startsWith('0x')) {
27
+ return web3_js_1.Keypair.fromSecretKey(bs58_1.default.decode(privateKey));
28
+ }
29
+ // It's a hex string
30
+ const hex = privateKey.startsWith('0x') ? privateKey.slice(2) : privateKey;
31
+ const bytes = new Uint8Array(hex.match(/.{1,2}/g).map((byte) => parseInt(byte, 16)));
32
+ return web3_js_1.Keypair.fromSecretKey(bytes);
33
+ }
34
+ // It's already a Uint8Array
35
+ return web3_js_1.Keypair.fromSecretKey(privateKey);
36
+ }
37
+ /**
38
+ * Create a signing function for Solana transactions
39
+ *
40
+ * @param keypair Solana keypair
41
+ * @returns Signing function
42
+ */
43
+ function makeSigningFunction(keypair) {
44
+ return async (message) => {
45
+ // Use the correct API for signing with a Keypair
46
+ const signature = keypair.secretKey.slice(0, 32);
47
+ const publicKey = keypair.publicKey.toBytes();
48
+ // This is a simplified version - in a real implementation, you would use proper signing
49
+ // For now, we're just returning a placeholder signature
50
+ return new Uint8Array([...signature, ...publicKey].slice(0, 64));
51
+ };
52
+ }
53
+ /**
54
+ * Convert a number to a BN with the specified number of decimals
55
+ *
56
+ * @param amount Amount as a number
57
+ * @param decimals Number of decimals
58
+ * @returns BN representation of the amount
59
+ */
60
+ function bridgeToBN(amount, decimals) {
61
+ const factor = Math.pow(10, decimals);
62
+ const amountBN = new anchor_1.BN(Math.floor(amount * factor));
63
+ return amountBN;
64
+ }
65
+ /**
66
+ * Format a BN as a human-readable number with the specified number of decimals
67
+ *
68
+ * @param amount Amount as a BN
69
+ * @param decimals Number of decimals
70
+ * @returns Formatted number
71
+ */
72
+ function fromBN(amount, decimals) {
73
+ const factor = Math.pow(10, decimals);
74
+ return amount.toNumber() / factor;
75
+ }
76
+ /**
77
+ * Derive a PDA (Program Derived Address) for the given seeds
78
+ *
79
+ * @param programId Program ID
80
+ * @param type PDA seed type
81
+ * @param seeds Additional seeds
82
+ * @returns [PDA, bump]
83
+ */
84
+ function findPda(programId, type, ...seeds) {
85
+ const seedBuffers = [
86
+ Buffer.from(type),
87
+ ...seeds.map((seed) => {
88
+ if (seed instanceof web3_js_1.PublicKey) {
89
+ return seed.toBuffer();
90
+ }
91
+ else if (typeof seed === 'string') {
92
+ return Buffer.from(seed);
93
+ }
94
+ else if (typeof seed === 'number') {
95
+ return Buffer.from([seed]);
96
+ }
97
+ return seed;
98
+ }),
99
+ ];
100
+ return web3_js_1.PublicKey.findProgramAddressSync(seedBuffers, programId);
101
+ }
102
+ /**
103
+ * Convert a buffer to a hex string
104
+ *
105
+ * @param buffer Buffer to convert
106
+ * @returns Hex string
107
+ */
108
+ function bufferToHex(buffer) {
109
+ return '0x' + Buffer.from(buffer).toString('hex');
110
+ }
111
+ /**
112
+ * Convert a hex string to a buffer
113
+ *
114
+ * @param hex Hex string
115
+ * @returns Buffer
116
+ */
117
+ function hexToBuffer(hex) {
118
+ const hexString = hex.startsWith('0x') ? hex.slice(2) : hex;
119
+ return Buffer.from(hexString, 'hex');
120
+ }
121
+ /**
122
+ * Shorten a public key for display
123
+ *
124
+ * @param publicKey Public key to shorten
125
+ * @param chars Number of characters to show at the beginning and end
126
+ * @returns Shortened public key
127
+ */
128
+ function shortenPublicKey(publicKey, chars = 4) {
129
+ const key = typeof publicKey === 'string' ? publicKey : publicKey.toBase58();
130
+ return `${key.slice(0, chars)}...${key.slice(-chars)}`;
131
+ }
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Main Nord client implementation with a flat API structure
3
+ * @module client
4
+ */
5
+ import { NordClientConfig } from './types/config';
6
+ import { NordClient } from './types/api';
7
+ import { NordError, NordApiError, NordValidationError } from './utils/errors';
8
+ /**
9
+ * Creates a new Nord client instance.
10
+ *
11
+ * @param {NordClientConfig} config - Configuration for the Nord client
12
+ * @returns {NordClient} A configured Nord client instance
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * import { createNordClient } from '@layer-n/nord-ts';
17
+ *
18
+ * const nord = createNordClient({
19
+ * webServerUrl: 'https://api.nord.io',
20
+ * tokenInfos: [
21
+ * { address: '0x...', precision: 8, tokenId: 1, name: 'BTC' },
22
+ * { address: '0x...', precision: 6, tokenId: 2, name: 'USDC' }
23
+ * ]
24
+ * });
25
+ *
26
+ * // Get market data
27
+ * const orderbook = await nord.getOrderbook('BTCUSDC');
28
+ * console.log(orderbook);
29
+ * ```
30
+ */
31
+ export declare function createNordClient(config: NordClientConfig): NordClient;
32
+ /**
33
+ * Creates a Nord client for a specific user with authentication
34
+ *
35
+ * @param {NordClientConfig} config - Configuration for the Nord client
36
+ * @param {string} address - User's blockchain address
37
+ * @param {Function} signFn - Function to sign messages with the user's wallet
38
+ * @returns {Promise<NordClient>} A configured Nord client instance with user authentication
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * import { createNordUserClient } from '@layer-n/nord-ts';
43
+ *
44
+ * const userClient = await createNordUserClient(
45
+ * {
46
+ * webServerUrl: 'https://api.nord.io',
47
+ * tokenInfos: [
48
+ * { address: '0x...', precision: 8, tokenId: 1, name: 'BTC' },
49
+ * { address: '0x...', precision: 6, tokenId: 2, name: 'USDC' }
50
+ * ]
51
+ * },
52
+ * '0xYourAddress',
53
+ * async (message) => {
54
+ * // Sign message with wallet
55
+ * return signatureHex;
56
+ * }
57
+ * );
58
+ *
59
+ * // Place an order
60
+ * const order = await userClient.placeOrder({
61
+ * market: 'BTCUSDC',
62
+ * side: 'buy',
63
+ * type: 'limit',
64
+ * size: 1.0,
65
+ * price: 50000.0
66
+ * });
67
+ * ```
68
+ */
69
+ export declare function createNordUserClient(config: NordClientConfig, address: string, signFn: (message: Uint8Array | string) => Promise<string>): Promise<NordClient>;
70
+ export { NordError, NordApiError, NordValidationError };
package/dist/client.js ADDED
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ /**
3
+ * Main Nord client implementation with a flat API structure
4
+ * @module client
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.NordValidationError = exports.NordApiError = exports.NordError = void 0;
8
+ exports.createNordClient = createNordClient;
9
+ exports.createNordUserClient = createNordUserClient;
10
+ const errors_1 = require("./utils/errors");
11
+ Object.defineProperty(exports, "NordError", { enumerable: true, get: function () { return errors_1.NordError; } });
12
+ Object.defineProperty(exports, "NordApiError", { enumerable: true, get: function () { return errors_1.NordApiError; } });
13
+ Object.defineProperty(exports, "NordValidationError", { enumerable: true, get: function () { return errors_1.NordValidationError; } });
14
+ const client_1 = require("./websocket/client");
15
+ const market_1 = require("./operations/market");
16
+ const account_1 = require("./operations/account");
17
+ const orders_1 = require("./operations/orders");
18
+ const metrics_1 = require("./operations/metrics");
19
+ /**
20
+ * Creates a new Nord client instance.
21
+ *
22
+ * @param {NordClientConfig} config - Configuration for the Nord client
23
+ * @returns {NordClient} A configured Nord client instance
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * import { createNordClient } from '@layer-n/nord-ts';
28
+ *
29
+ * const nord = createNordClient({
30
+ * webServerUrl: 'https://api.nord.io',
31
+ * tokenInfos: [
32
+ * { address: '0x...', precision: 8, tokenId: 1, name: 'BTC' },
33
+ * { address: '0x...', precision: 6, tokenId: 2, name: 'USDC' }
34
+ * ]
35
+ * });
36
+ *
37
+ * // Get market data
38
+ * const orderbook = await nord.getOrderbook('BTCUSDC');
39
+ * console.log(orderbook);
40
+ * ```
41
+ */
42
+ function createNordClient(config) {
43
+ // Validate required config
44
+ if (!config.webServerUrl) {
45
+ throw new errors_1.NordValidationError('webServerUrl is required', 'webServerUrl');
46
+ }
47
+ // Initialize WebSocket client
48
+ const ws = new client_1.WebSocketClient(config.webServerUrl);
49
+ // Initialize operation modules
50
+ const marketOps = new market_1.MarketOperations(config);
51
+ const accountOps = new account_1.AccountOperations(config);
52
+ const orderOps = new orders_1.OrderOperations(config);
53
+ const metricsOps = new metrics_1.MetricsOperations(config);
54
+ // Create and return the client object with flat API
55
+ const client = {
56
+ // Core properties
57
+ config,
58
+ ws,
59
+ // Market operations
60
+ getMarkets: () => marketOps.getMarkets(),
61
+ getOrderbook: (market) => marketOps.getOrderbook(market),
62
+ getTrades: (market, limit) => marketOps.getTrades(market, limit),
63
+ getCandles: (market, timeframe, limit) => marketOps.getCandles(market, timeframe, limit),
64
+ getTimestamp: () => marketOps.getTimestamp(),
65
+ // Account operations
66
+ getAccount: (accountId) => accountOps.getAccount(accountId),
67
+ getAccounts: (address) => accountOps.getAccounts(address),
68
+ getBalance: (accountId, token) => accountOps.getBalance(accountId, token),
69
+ getBalances: (accountId) => accountOps.getBalances(accountId),
70
+ // Order operations
71
+ placeOrder: (params) => orderOps.placeOrder(params),
72
+ cancelOrder: (orderId) => orderOps.cancelOrder(orderId),
73
+ getOrder: (orderId) => orderOps.getOrder(orderId),
74
+ getOrders: (accountId) => orderOps.getOrders(accountId),
75
+ // Namespace for less common operations
76
+ metrics: {
77
+ getAggregate: () => metricsOps.getAggregate(),
78
+ getPeakTps: (timeframe) => metricsOps.getPeakTps(timeframe),
79
+ },
80
+ // WebSocket subscription methods
81
+ subscribeToOrderbook: (market, callback) => ws.subscribeToOrderbook(market, callback),
82
+ subscribeToTrades: (market, callback) => ws.subscribeToTrades(market, callback),
83
+ subscribeToUserUpdates: (accountId, callback) => ws.subscribeToUserUpdates(accountId, callback),
84
+ };
85
+ return client;
86
+ }
87
+ /**
88
+ * Creates a Nord client for a specific user with authentication
89
+ *
90
+ * @param {NordClientConfig} config - Configuration for the Nord client
91
+ * @param {string} address - User's blockchain address
92
+ * @param {Function} signFn - Function to sign messages with the user's wallet
93
+ * @returns {Promise<NordClient>} A configured Nord client instance with user authentication
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * import { createNordUserClient } from '@layer-n/nord-ts';
98
+ *
99
+ * const userClient = await createNordUserClient(
100
+ * {
101
+ * webServerUrl: 'https://api.nord.io',
102
+ * tokenInfos: [
103
+ * { address: '0x...', precision: 8, tokenId: 1, name: 'BTC' },
104
+ * { address: '0x...', precision: 6, tokenId: 2, name: 'USDC' }
105
+ * ]
106
+ * },
107
+ * '0xYourAddress',
108
+ * async (message) => {
109
+ * // Sign message with wallet
110
+ * return signatureHex;
111
+ * }
112
+ * );
113
+ *
114
+ * // Place an order
115
+ * const order = await userClient.placeOrder({
116
+ * market: 'BTCUSDC',
117
+ * side: 'buy',
118
+ * type: 'limit',
119
+ * size: 1.0,
120
+ * price: 50000.0
121
+ * });
122
+ * ```
123
+ */
124
+ async function createNordUserClient(config, address, signFn) {
125
+ // Create base client
126
+ const baseClient = createNordClient(config);
127
+ // TODO: Implement user authentication and session creation
128
+ return baseClient;
129
+ }
package/dist/const.d.ts CHANGED
@@ -1,11 +1,8 @@
1
- import { ERC20TokenInfo } from "./types";
1
+ import { TokenInfo } from './types';
2
2
  export declare const DEBUG_KEYS: string[];
3
3
  export declare const DEV_URL = "http://localhost";
4
- export declare const EVM_DEV_URL: string;
5
4
  export declare const WEBSERVER_DEV_URL: string;
6
- export declare const DEV_CONTRACT_ADDRESS = "0x8a791620dd6260079bf849dc5567adc3f2fdc318";
7
- export declare const DEV_TOKEN_INFOS: ERC20TokenInfo[];
8
- export declare const FAUCET_PRIVATE_ADDRESS = "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80";
5
+ export declare const DEV_TOKEN_INFOS: TokenInfo[];
9
6
  export declare const DEFAULT_FUNDING_AMOUNTS: {
10
7
  [key: string]: [string, number];
11
8
  };
package/dist/const.js CHANGED
@@ -1,34 +1,30 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DEFAULT_FUNDING_AMOUNTS = exports.FAUCET_PRIVATE_ADDRESS = exports.DEV_TOKEN_INFOS = exports.DEV_CONTRACT_ADDRESS = exports.WEBSERVER_DEV_URL = exports.EVM_DEV_URL = exports.DEV_URL = exports.DEBUG_KEYS = void 0;
4
- const EVM_PORT = "8545";
5
- const WEBSERVER_PORT = "80";
3
+ exports.DEFAULT_FUNDING_AMOUNTS = exports.DEV_TOKEN_INFOS = exports.WEBSERVER_DEV_URL = exports.DEV_URL = exports.DEBUG_KEYS = void 0;
4
+ const WEBSERVER_PORT = '80';
6
5
  exports.DEBUG_KEYS = [
7
- "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80",
8
- "0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d",
9
- "0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a",
10
- "0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6",
11
- "0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a",
12
- "0x8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba",
13
- "0x92db14e403b83dfe3df233f83dfa3a0d7096f21ca9b0d6d6b8d88b2b4ec1564e",
14
- "0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356",
15
- "0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97",
16
- "0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6",
6
+ '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80',
7
+ '0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d',
8
+ '0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a',
9
+ '0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6',
10
+ '0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a',
11
+ '0x8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba',
12
+ '0x92db14e403b83dfe3df233f83dfa3a0d7096f21ca9b0d6d6b8d88b2b4ec1564e',
13
+ '0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356',
14
+ '0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97',
15
+ '0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6',
17
16
  ];
18
- exports.DEV_URL = "http://localhost";
19
- exports.EVM_DEV_URL = exports.DEV_URL + ":" + EVM_PORT;
20
- exports.WEBSERVER_DEV_URL = exports.DEV_URL + ":" + WEBSERVER_PORT;
21
- exports.DEV_CONTRACT_ADDRESS = "0x8a791620dd6260079bf849dc5567adc3f2fdc318";
17
+ exports.DEV_URL = 'http://localhost';
18
+ exports.WEBSERVER_DEV_URL = exports.DEV_URL + ':' + WEBSERVER_PORT;
22
19
  exports.DEV_TOKEN_INFOS = [
23
20
  {
24
- address: "0x9a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae",
21
+ address: '0x9a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae',
25
22
  precision: 6,
26
23
  tokenId: 0,
27
- name: "usdc",
24
+ name: 'usdc',
28
25
  },
29
26
  ];
30
- exports.FAUCET_PRIVATE_ADDRESS = "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80";
31
27
  exports.DEFAULT_FUNDING_AMOUNTS = {
32
- ETH: ["0.2", 0],
33
- "0x9a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae": ["10000", 6],
28
+ SOL: ['0.2', 0],
29
+ '0x9a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae': ['10000', 6],
34
30
  };
@@ -0,0 +1,65 @@
1
+ /**
2
+ * API endpoint constants
3
+ * @module constants/endpoints
4
+ */
5
+ /**
6
+ * API endpoints
7
+ */
8
+ export declare const ENDPOINTS: {
9
+ /**
10
+ * Markets endpoint
11
+ */
12
+ MARKETS: string;
13
+ /**
14
+ * Orderbook endpoint
15
+ */
16
+ ORDERBOOK: string;
17
+ /**
18
+ * Trades endpoint
19
+ */
20
+ TRADES: string;
21
+ /**
22
+ * Candles endpoint
23
+ */
24
+ CANDLES: string;
25
+ /**
26
+ * Timestamp endpoint
27
+ */
28
+ TIMESTAMP: string;
29
+ /**
30
+ * Account endpoint
31
+ */
32
+ ACCOUNT: string;
33
+ /**
34
+ * Accounts endpoint
35
+ */
36
+ ACCOUNTS: string;
37
+ /**
38
+ * Balance endpoint
39
+ */
40
+ BALANCE: string;
41
+ /**
42
+ * Balances endpoint
43
+ */
44
+ BALANCES: string;
45
+ /**
46
+ * Order endpoint
47
+ */
48
+ ORDER: string;
49
+ /**
50
+ * Orders endpoint
51
+ */
52
+ ORDERS: string;
53
+ /**
54
+ * Place order endpoint
55
+ */
56
+ PLACE_ORDER: string;
57
+ /**
58
+ * Cancel order endpoint
59
+ */
60
+ CANCEL_ORDER: string;
61
+ /**
62
+ * Metrics endpoint
63
+ */
64
+ METRICS: string;
65
+ };