@0xmonaco/core 0.1.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.
Files changed (50) hide show
  1. package/README.md +421 -0
  2. package/dist/api/auth/api.d.ts +198 -0
  3. package/dist/api/auth/api.d.ts.map +1 -0
  4. package/dist/api/auth/api.js +359 -0
  5. package/dist/api/auth/api.js.map +1 -0
  6. package/dist/api/auth/index.d.ts +6 -0
  7. package/dist/api/auth/index.d.ts.map +1 -0
  8. package/dist/api/auth/index.js +5 -0
  9. package/dist/api/auth/index.js.map +1 -0
  10. package/dist/api/index.d.ts +8 -0
  11. package/dist/api/index.d.ts.map +1 -0
  12. package/dist/api/index.js +8 -0
  13. package/dist/api/index.js.map +1 -0
  14. package/dist/api/trading/api.d.ts +152 -0
  15. package/dist/api/trading/api.d.ts.map +1 -0
  16. package/dist/api/trading/api.js +229 -0
  17. package/dist/api/trading/api.js.map +1 -0
  18. package/dist/api/trading/index.d.ts +6 -0
  19. package/dist/api/trading/index.d.ts.map +1 -0
  20. package/dist/api/trading/index.js +5 -0
  21. package/dist/api/trading/index.js.map +1 -0
  22. package/dist/api/vault/api.d.ts +224 -0
  23. package/dist/api/vault/api.d.ts.map +1 -0
  24. package/dist/api/vault/api.js +514 -0
  25. package/dist/api/vault/api.js.map +1 -0
  26. package/dist/api/vault/index.d.ts +6 -0
  27. package/dist/api/vault/index.d.ts.map +1 -0
  28. package/dist/api/vault/index.js +5 -0
  29. package/dist/api/vault/index.js.map +1 -0
  30. package/dist/chains.d.ts +90 -0
  31. package/dist/chains.d.ts.map +1 -0
  32. package/dist/chains.js +56 -0
  33. package/dist/chains.js.map +1 -0
  34. package/dist/errors.d.ts +132 -0
  35. package/dist/errors.d.ts.map +1 -0
  36. package/dist/errors.js +165 -0
  37. package/dist/errors.js.map +1 -0
  38. package/dist/index.d.ts +11 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +19 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/networks.d.ts +8 -0
  43. package/dist/networks.d.ts.map +1 -0
  44. package/dist/networks.js +16 -0
  45. package/dist/networks.js.map +1 -0
  46. package/dist/sdk.d.ts +76 -0
  47. package/dist/sdk.d.ts.map +1 -0
  48. package/dist/sdk.js +203 -0
  49. package/dist/sdk.js.map +1 -0
  50. package/package.json +38 -0
package/dist/sdk.js ADDED
@@ -0,0 +1,203 @@
1
+ /**
2
+ * Monaco SDK – minimal version with only Vault and Trading APIs
3
+ */
4
+ import { http, createPublicClient, createWalletClient, } from "viem";
5
+ import { privateKeyToAccount } from "viem/accounts";
6
+ import { CONTRACT_ADDRESSES } from "@0xmonaco/contracts";
7
+ import { NETWORK_ENDPOINTS } from "./networks";
8
+ import { InvalidConfigError, InitializationError, UnsupportedNetworkError, } from "./errors";
9
+ import { VaultAPIImpl } from "./api/vault";
10
+ import { TradingAPIImpl } from "./api/trading";
11
+ import { AuthAPIImpl } from "./api/auth";
12
+ import { seiMainnet, seiTestnet } from "./chains";
13
+ // ---------------------------------------------------------------------------
14
+ // SDK implementation
15
+ // ---------------------------------------------------------------------------
16
+ export class MonacoSDKImpl {
17
+ constructor(cfg) {
18
+ // Validate authentication method
19
+ if (!cfg.privateKey && !cfg.signer && !cfg.account) {
20
+ throw new InvalidConfigError("Authentication required: provide either privateKey, signer, or account", "authentication");
21
+ }
22
+ // Use provided network or default to mainnet
23
+ const network = cfg.network ?? "mainnet";
24
+ // Map network string to chain object
25
+ const chain = network === "testnet" ? seiTestnet : seiMainnet;
26
+ // Always use the chain's default RPC URL - no transport override
27
+ const transport = http(chain.rpcUrls.default.http[0]);
28
+ // Set up account with priority: account > privateKey > signer
29
+ let account;
30
+ if (cfg.account) {
31
+ // Custom account takes highest priority
32
+ account = cfg.account;
33
+ }
34
+ else if (cfg.privateKey) {
35
+ // Convert private key to account
36
+ try {
37
+ account = privateKeyToAccount(cfg.privateKey);
38
+ }
39
+ catch (error) {
40
+ throw new InvalidConfigError(`Invalid private key: ${error instanceof Error ? error.message : "Invalid format"}`, "privateKey");
41
+ }
42
+ }
43
+ else if (cfg.signer) {
44
+ // Use provided signer
45
+ account = cfg.signer;
46
+ }
47
+ else {
48
+ // This should never happen due to validation above
49
+ throw new InitializationError("No valid authentication method found");
50
+ }
51
+ // Create both clients internally, but only expose walletClient
52
+ this.publicClient = createPublicClient({
53
+ chain: chain,
54
+ transport,
55
+ });
56
+ this.walletClient = createWalletClient({
57
+ chain: chain,
58
+ account,
59
+ transport,
60
+ });
61
+ // Get network endpoints based on network string
62
+ const endpoints = NETWORK_ENDPOINTS[network];
63
+ // Get contract addresses from chain ID
64
+ const contracts = CONTRACT_ADDRESSES[chain.id];
65
+ // Validate that we have contract addresses for this chain
66
+ if (!contracts) {
67
+ throw new UnsupportedNetworkError(`Chain ID ${chain.id} is not supported. Supported chains: ${[seiTestnet.id, seiMainnet.id].join(", ")}`, chain.id, [seiTestnet.id, seiMainnet.id]);
68
+ }
69
+ // Instantiate APIs
70
+ this.auth = new AuthAPIImpl(this.walletClient, endpoints.apiUrl, chain);
71
+ this.vault = new VaultAPIImpl(this.publicClient, this.walletClient, contracts.vault, endpoints.apiUrl, chain);
72
+ this.trading = new TradingAPIImpl(endpoints.apiUrl);
73
+ }
74
+ // -----------------------------------------------------------------------
75
+ // Authentication
76
+ // -----------------------------------------------------------------------
77
+ /**
78
+ * Authenticate the user
79
+ * @param clientId - The client ID to use for authentication
80
+ * @returns The authentication response
81
+ */
82
+ async login(clientId) {
83
+ const response = await this.auth.authenticate(clientId);
84
+ this.authState = {
85
+ accessToken: response.accessToken,
86
+ refreshToken: response.refreshToken,
87
+ expiresAt: response.expiresAt,
88
+ user: response.user,
89
+ createdAt: Math.floor(Date.now() / 1000),
90
+ };
91
+ // Set access tokens for APIs
92
+ this.vault.setAccessToken(this.authState.accessToken);
93
+ this.trading.setAccessToken(this.authState.accessToken);
94
+ return this.authState;
95
+ }
96
+ /**
97
+ * Get the current authentication state
98
+ * @returns The authentication state
99
+ */
100
+ getAuthState() {
101
+ return this.authState;
102
+ }
103
+ /**
104
+ * Check if the user is authenticated
105
+ * @returns True if the user is authenticated
106
+ */
107
+ isAuthenticated() {
108
+ return !!this.authState;
109
+ }
110
+ // -----------------------------------------------------------------------
111
+ // Basic helpers
112
+ // -----------------------------------------------------------------------
113
+ isConnected() {
114
+ return !!this.walletClient;
115
+ }
116
+ /**
117
+ * Get the current account address
118
+ * @returns The account address as a string
119
+ */
120
+ getAccountAddress() {
121
+ return this.walletClient.account?.address ?? "";
122
+ }
123
+ /**
124
+ * Get the current network ('mainnet' or 'testnet')
125
+ * @returns The network string
126
+ */
127
+ getNetwork() {
128
+ return this.publicClient.chain?.id === seiTestnet.id
129
+ ? "testnet"
130
+ : "mainnet";
131
+ }
132
+ /**
133
+ * Get the current chain information
134
+ * @returns The chain configuration
135
+ */
136
+ getChain() {
137
+ return this.publicClient.chain;
138
+ }
139
+ /**
140
+ * Get the current chain ID
141
+ * @returns The chain ID as a number
142
+ */
143
+ getChainId() {
144
+ return this.publicClient.chain?.id ?? 0;
145
+ }
146
+ /**
147
+ * Switch to a different account
148
+ * @param newAccount - The new account to use
149
+ */
150
+ switchAccount(newAccount) {
151
+ // Create new wallet client with the new account
152
+ // We need to recreate the transport since we can't directly access the original
153
+ const transport = http(this.publicClient.chain.rpcUrls.default.http[0]);
154
+ this.walletClient = createWalletClient({
155
+ chain: this.publicClient.chain,
156
+ account: newAccount,
157
+ transport,
158
+ });
159
+ }
160
+ /**
161
+ * Switch to a different private key
162
+ * @param privateKey - The new private key to use
163
+ */
164
+ switchPrivateKey(privateKey) {
165
+ try {
166
+ const newAccount = privateKeyToAccount(privateKey);
167
+ this.switchAccount(newAccount);
168
+ }
169
+ catch (error) {
170
+ throw new InvalidConfigError(`Invalid private key: ${error instanceof Error ? error.message : "Invalid format"}`, "privateKey");
171
+ }
172
+ }
173
+ // ============================================================================
174
+ // Essential SDK Utilities
175
+ // ============================================================================
176
+ /**
177
+ * Check if the current account can sign messages
178
+ * @returns True if the account supports signing
179
+ */
180
+ canSign() {
181
+ return this.walletClient.account?.type === "local";
182
+ }
183
+ /**
184
+ * Wait for a transaction to be confirmed
185
+ * @param hash - Transaction hash
186
+ * @param confirmations - Number of confirmations to wait for
187
+ * @param timeout - Timeout in milliseconds (default: 60000ms)
188
+ * @returns Promise resolving to the transaction receipt
189
+ */
190
+ async waitForTransaction(hash, confirmations = 2, timeout = 60000) {
191
+ const timeoutPromise = new Promise((_, reject) => {
192
+ setTimeout(() => {
193
+ reject(new Error(`Transaction ${hash} timed out after ${timeout}ms`));
194
+ }, timeout);
195
+ });
196
+ const receiptPromise = this.publicClient.waitForTransactionReceipt({
197
+ hash: hash,
198
+ confirmations,
199
+ });
200
+ return Promise.race([receiptPromise, timeoutPromise]);
201
+ }
202
+ }
203
+ //# sourceMappingURL=sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@0xmonaco/core",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "dependencies": {
12
+ "@0xmonaco/contracts": "0.1.0",
13
+ "@0xmonaco/types": "0.1.0",
14
+ "@0xmonaco/utils": "0.1.0",
15
+ "viem": "^2.30.6"
16
+ },
17
+ "devDependencies": {
18
+ "@types/node": "^20.11.30",
19
+ "@vitest/coverage-v8": "^1.3.1",
20
+ "dotenv": "^17.1.0",
21
+ "typescript": "5.7.3",
22
+ "vitest": "^1.3.1"
23
+ },
24
+ "exports": {
25
+ ".": {
26
+ "types": "./dist/index.d.ts",
27
+ "default": "./dist/index.js"
28
+ }
29
+ },
30
+ "scripts": {
31
+ "build": "tsc -b",
32
+ "dev": "tsc --watch",
33
+ "clean": "rm -rf dist",
34
+ "lint": "eslint src --ext .ts",
35
+ "test": "vitest --config vitest.config.ts",
36
+ "test:coverage": "vitest run --coverage --config vitest.config.ts"
37
+ }
38
+ }