extended-typescript-sdk 0.0.1

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 (173) hide show
  1. package/LICENSE +28 -0
  2. package/README.md +445 -0
  3. package/dist/config.d.ts +11 -0
  4. package/dist/config.d.ts.map +1 -0
  5. package/dist/config.js +15 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/errors.d.ts +25 -0
  8. package/dist/errors.d.ts.map +1 -0
  9. package/dist/errors.js +45 -0
  10. package/dist/errors.js.map +1 -0
  11. package/dist/index.d.ts +39 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +142 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/perpetual/accounts.d.ts +88 -0
  16. package/dist/perpetual/accounts.d.ts.map +1 -0
  17. package/dist/perpetual/accounts.js +152 -0
  18. package/dist/perpetual/accounts.js.map +1 -0
  19. package/dist/perpetual/amounts.d.ts +41 -0
  20. package/dist/perpetual/amounts.d.ts.map +1 -0
  21. package/dist/perpetual/amounts.js +79 -0
  22. package/dist/perpetual/amounts.js.map +1 -0
  23. package/dist/perpetual/assets.d.ts +74 -0
  24. package/dist/perpetual/assets.d.ts.map +1 -0
  25. package/dist/perpetual/assets.js +119 -0
  26. package/dist/perpetual/assets.js.map +1 -0
  27. package/dist/perpetual/bridges.d.ts +29 -0
  28. package/dist/perpetual/bridges.d.ts.map +1 -0
  29. package/dist/perpetual/bridges.js +45 -0
  30. package/dist/perpetual/bridges.js.map +1 -0
  31. package/dist/perpetual/candles.d.ts +26 -0
  32. package/dist/perpetual/candles.d.ts.map +1 -0
  33. package/dist/perpetual/candles.js +29 -0
  34. package/dist/perpetual/candles.js.map +1 -0
  35. package/dist/perpetual/clients.d.ts +15 -0
  36. package/dist/perpetual/clients.d.ts.map +1 -0
  37. package/dist/perpetual/clients.js +25 -0
  38. package/dist/perpetual/clients.js.map +1 -0
  39. package/dist/perpetual/configuration.d.ts +39 -0
  40. package/dist/perpetual/configuration.d.ts.map +1 -0
  41. package/dist/perpetual/configuration.js +61 -0
  42. package/dist/perpetual/configuration.js.map +1 -0
  43. package/dist/perpetual/crypto/signer.d.ts +164 -0
  44. package/dist/perpetual/crypto/signer.d.ts.map +1 -0
  45. package/dist/perpetual/crypto/signer.js +318 -0
  46. package/dist/perpetual/crypto/signer.js.map +1 -0
  47. package/dist/perpetual/fees.d.ts +20 -0
  48. package/dist/perpetual/fees.d.ts.map +1 -0
  49. package/dist/perpetual/fees.js +35 -0
  50. package/dist/perpetual/fees.js.map +1 -0
  51. package/dist/perpetual/funding-rates.d.ts +15 -0
  52. package/dist/perpetual/funding-rates.d.ts.map +1 -0
  53. package/dist/perpetual/funding-rates.js +23 -0
  54. package/dist/perpetual/funding-rates.js.map +1 -0
  55. package/dist/perpetual/markets.d.ts +83 -0
  56. package/dist/perpetual/markets.d.ts.map +1 -0
  57. package/dist/perpetual/markets.js +124 -0
  58. package/dist/perpetual/markets.js.map +1 -0
  59. package/dist/perpetual/order-object-settlement.d.ts +43 -0
  60. package/dist/perpetual/order-object-settlement.d.ts.map +1 -0
  61. package/dist/perpetual/order-object-settlement.js +121 -0
  62. package/dist/perpetual/order-object-settlement.js.map +1 -0
  63. package/dist/perpetual/order-object.d.ts +38 -0
  64. package/dist/perpetual/order-object.d.ts.map +1 -0
  65. package/dist/perpetual/order-object.js +90 -0
  66. package/dist/perpetual/order-object.js.map +1 -0
  67. package/dist/perpetual/orderbooks.d.ts +23 -0
  68. package/dist/perpetual/orderbooks.d.ts.map +1 -0
  69. package/dist/perpetual/orderbooks.js +36 -0
  70. package/dist/perpetual/orderbooks.js.map +1 -0
  71. package/dist/perpetual/orders.d.ts +207 -0
  72. package/dist/perpetual/orders.d.ts.map +1 -0
  73. package/dist/perpetual/orders.js +266 -0
  74. package/dist/perpetual/orders.js.map +1 -0
  75. package/dist/perpetual/positions.d.ts +80 -0
  76. package/dist/perpetual/positions.d.ts.map +1 -0
  77. package/dist/perpetual/positions.js +94 -0
  78. package/dist/perpetual/positions.js.map +1 -0
  79. package/dist/perpetual/stream-client/perpetual-stream-connection.d.ts +47 -0
  80. package/dist/perpetual/stream-client/perpetual-stream-connection.d.ts.map +1 -0
  81. package/dist/perpetual/stream-client/perpetual-stream-connection.js +125 -0
  82. package/dist/perpetual/stream-client/perpetual-stream-connection.js.map +1 -0
  83. package/dist/perpetual/stream-client/stream-client.d.ts +46 -0
  84. package/dist/perpetual/stream-client/stream-client.d.ts.map +1 -0
  85. package/dist/perpetual/stream-client/stream-client.js +79 -0
  86. package/dist/perpetual/stream-client/stream-client.js.map +1 -0
  87. package/dist/perpetual/trades.d.ts +44 -0
  88. package/dist/perpetual/trades.d.ts.map +1 -0
  89. package/dist/perpetual/trades.js +48 -0
  90. package/dist/perpetual/trades.js.map +1 -0
  91. package/dist/perpetual/trading-client/account-module.d.ts +192 -0
  92. package/dist/perpetual/trading-client/account-module.d.ts.map +1 -0
  93. package/dist/perpetual/trading-client/account-module.js +357 -0
  94. package/dist/perpetual/trading-client/account-module.js.map +1 -0
  95. package/dist/perpetual/trading-client/base-module.d.ts +27 -0
  96. package/dist/perpetual/trading-client/base-module.d.ts.map +1 -0
  97. package/dist/perpetual/trading-client/base-module.js +49 -0
  98. package/dist/perpetual/trading-client/base-module.js.map +1 -0
  99. package/dist/perpetual/trading-client/info-module.d.ts +24 -0
  100. package/dist/perpetual/trading-client/info-module.d.ts.map +1 -0
  101. package/dist/perpetual/trading-client/info-module.js +33 -0
  102. package/dist/perpetual/trading-client/info-module.js.map +1 -0
  103. package/dist/perpetual/trading-client/markets-information-module.d.ts +53 -0
  104. package/dist/perpetual/trading-client/markets-information-module.d.ts.map +1 -0
  105. package/dist/perpetual/trading-client/markets-information-module.js +106 -0
  106. package/dist/perpetual/trading-client/markets-information-module.js.map +1 -0
  107. package/dist/perpetual/trading-client/order-management-module.d.ts +40 -0
  108. package/dist/perpetual/trading-client/order-management-module.d.ts.map +1 -0
  109. package/dist/perpetual/trading-client/order-management-module.js +71 -0
  110. package/dist/perpetual/trading-client/order-management-module.js.map +1 -0
  111. package/dist/perpetual/trading-client/testnet-module.d.ts +27 -0
  112. package/dist/perpetual/trading-client/testnet-module.d.ts.map +1 -0
  113. package/dist/perpetual/trading-client/testnet-module.js +45 -0
  114. package/dist/perpetual/trading-client/testnet-module.js.map +1 -0
  115. package/dist/perpetual/trading-client/trading-client.d.ts +75 -0
  116. package/dist/perpetual/trading-client/trading-client.d.ts.map +1 -0
  117. package/dist/perpetual/trading-client/trading-client.js +115 -0
  118. package/dist/perpetual/trading-client/trading-client.js.map +1 -0
  119. package/dist/perpetual/transfer-object.d.ts +12 -0
  120. package/dist/perpetual/transfer-object.d.ts.map +1 -0
  121. package/dist/perpetual/transfer-object.js +57 -0
  122. package/dist/perpetual/transfer-object.js.map +1 -0
  123. package/dist/perpetual/transfers.d.ts +54 -0
  124. package/dist/perpetual/transfers.d.ts.map +1 -0
  125. package/dist/perpetual/transfers.js +90 -0
  126. package/dist/perpetual/transfers.js.map +1 -0
  127. package/dist/perpetual/user-client/onboarding.d.ts +101 -0
  128. package/dist/perpetual/user-client/onboarding.d.ts.map +1 -0
  129. package/dist/perpetual/user-client/onboarding.js +247 -0
  130. package/dist/perpetual/user-client/onboarding.js.map +1 -0
  131. package/dist/perpetual/user-client/user-client.d.ts +45 -0
  132. package/dist/perpetual/user-client/user-client.d.ts.map +1 -0
  133. package/dist/perpetual/user-client/user-client.js +185 -0
  134. package/dist/perpetual/user-client/user-client.js.map +1 -0
  135. package/dist/perpetual/withdrawal-object.d.ts +12 -0
  136. package/dist/perpetual/withdrawal-object.d.ts.map +1 -0
  137. package/dist/perpetual/withdrawal-object.js +51 -0
  138. package/dist/perpetual/withdrawal-object.js.map +1 -0
  139. package/dist/perpetual/withdrawals.d.ts +40 -0
  140. package/dist/perpetual/withdrawals.d.ts.map +1 -0
  141. package/dist/perpetual/withdrawals.js +65 -0
  142. package/dist/perpetual/withdrawals.js.map +1 -0
  143. package/dist/utils/date.d.ts +13 -0
  144. package/dist/utils/date.d.ts.map +1 -0
  145. package/dist/utils/date.js +21 -0
  146. package/dist/utils/date.js.map +1 -0
  147. package/dist/utils/env.d.ts +50 -0
  148. package/dist/utils/env.d.ts.map +1 -0
  149. package/dist/utils/env.js +157 -0
  150. package/dist/utils/env.js.map +1 -0
  151. package/dist/utils/http.d.ts +98 -0
  152. package/dist/utils/http.d.ts.map +1 -0
  153. package/dist/utils/http.js +290 -0
  154. package/dist/utils/http.js.map +1 -0
  155. package/dist/utils/model.d.ts +35 -0
  156. package/dist/utils/model.d.ts.map +1 -0
  157. package/dist/utils/model.js +86 -0
  158. package/dist/utils/model.js.map +1 -0
  159. package/dist/utils/nonce.d.ts +9 -0
  160. package/dist/utils/nonce.d.ts.map +1 -0
  161. package/dist/utils/nonce.js +14 -0
  162. package/dist/utils/nonce.js.map +1 -0
  163. package/dist/utils/string.d.ts +10 -0
  164. package/dist/utils/string.d.ts.map +1 -0
  165. package/dist/utils/string.js +20 -0
  166. package/dist/utils/string.js.map +1 -0
  167. package/package.json +56 -0
  168. package/wasm/stark_crypto_wasm-web.js +5 -0
  169. package/wasm/stark_crypto_wasm.d-web.ts +63 -0
  170. package/wasm/stark_crypto_wasm.d.ts +63 -0
  171. package/wasm/stark_crypto_wasm.js +362 -0
  172. package/wasm/stark_crypto_wasm_bg-web.wasm +0 -0
  173. package/wasm/stark_crypto_wasm_bg.wasm +0 -0
@@ -0,0 +1,185 @@
1
+ "use strict";
2
+ /**
3
+ * User client for onboarding and account management
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.UserClient = void 0;
7
+ const ethers_1 = require("ethers");
8
+ const accounts_1 = require("../accounts");
9
+ const errors_1 = require("../../errors");
10
+ const http_1 = require("../../utils/http");
11
+ const date_1 = require("../../utils/date");
12
+ const onboarding_1 = require("./onboarding");
13
+ const L1_AUTH_SIGNATURE_HEADER = 'L1_SIGNATURE';
14
+ const L1_MESSAGE_TIME_HEADER = 'L1_MESSAGE_TIME';
15
+ const ACTIVE_ACCOUNT_HEADER = 'X-X10-ACTIVE-ACCOUNT';
16
+ /**
17
+ * User client for onboarding and L1 account operations
18
+ */
19
+ class UserClient {
20
+ endpointConfig;
21
+ l1PrivateKey;
22
+ constructor(endpointConfig, l1PrivateKey) {
23
+ this.endpointConfig = endpointConfig;
24
+ this.l1PrivateKey = l1PrivateKey;
25
+ }
26
+ /**
27
+ * Get URL
28
+ */
29
+ getUrl(baseUrl, path, options = {}) {
30
+ return (0, http_1.getUrl)(`${baseUrl}${path}`, options);
31
+ }
32
+ /**
33
+ * Onboard new account
34
+ */
35
+ async onboard(referralCode) {
36
+ const wallet = new ethers_1.ethers.Wallet(this.l1PrivateKey());
37
+ const keyPair = await (0, onboarding_1.getL2KeysFromL1Account)(this.l1PrivateKey(), 0, this.endpointConfig.signingDomain);
38
+ const payload = await (0, onboarding_1.getOnboardingPayload)(this.l1PrivateKey(), this.endpointConfig.signingDomain, keyPair, this.endpointConfig.onboardingUrl, referralCode);
39
+ const url = this.getUrl(this.endpointConfig.onboardingUrl, '/auth/onboard');
40
+ const onboardingResponse = await (0, http_1.sendPostRequest)(url, payload.toJson());
41
+ const onboardedClient = onboardingResponse.data;
42
+ if (!onboardedClient) {
43
+ throw new Error('No account data returned from onboarding');
44
+ }
45
+ return {
46
+ account: onboardedClient.defaultAccount,
47
+ l2KeyPair: keyPair,
48
+ };
49
+ }
50
+ /**
51
+ * Onboard sub-account
52
+ */
53
+ async onboardSubaccount(accountIndex, description) {
54
+ const requestPath = '/auth/onboard/subaccount';
55
+ const finalDescription = description || `Subaccount ${accountIndex}`;
56
+ const wallet = new ethers_1.ethers.Wallet(this.l1PrivateKey());
57
+ const time = (0, date_1.utcNow)();
58
+ const authTimeString = time.toISOString().replace(/\.\d{3}Z$/, 'Z');
59
+ const l1Message = `${requestPath}@${authTimeString}`;
60
+ // Sign with ethers
61
+ const l1Signature = await wallet.signMessage(l1Message);
62
+ const keyPair = await (0, onboarding_1.getL2KeysFromL1Account)(this.l1PrivateKey(), accountIndex, this.endpointConfig.signingDomain);
63
+ const payload = await (0, onboarding_1.getSubAccountCreationPayload)(accountIndex, wallet.address, keyPair, finalDescription, this.endpointConfig.onboardingUrl);
64
+ const headers = {
65
+ [L1_AUTH_SIGNATURE_HEADER]: l1Signature,
66
+ [L1_MESSAGE_TIME_HEADER]: authTimeString,
67
+ };
68
+ const url = this.getUrl(this.endpointConfig.onboardingUrl, requestPath);
69
+ try {
70
+ const onboardingResponse = await (0, http_1.sendPostRequest)(url, payload.toJson(), undefined, headers, new Map([[409, errors_1.SubAccountExists]]));
71
+ const onboardedAccount = onboardingResponse.data;
72
+ if (!onboardedAccount) {
73
+ throw new Error('No account data returned from onboarding');
74
+ }
75
+ return {
76
+ account: onboardedAccount,
77
+ l2KeyPair: keyPair,
78
+ };
79
+ }
80
+ catch (error) {
81
+ if (error instanceof errors_1.SubAccountExists) {
82
+ const clientAccounts = await this.getAccounts();
83
+ const accountWithIndex = clientAccounts.find((acc) => acc.account.accountIndex === accountIndex);
84
+ if (!accountWithIndex) {
85
+ throw new errors_1.SubAccountExists('Subaccount already exists but not found in client accounts');
86
+ }
87
+ return accountWithIndex;
88
+ }
89
+ throw error;
90
+ }
91
+ }
92
+ /**
93
+ * Get all accounts
94
+ */
95
+ async getAccounts() {
96
+ const requestPath = '/api/v1/user/accounts';
97
+ const wallet = new ethers_1.ethers.Wallet(this.l1PrivateKey());
98
+ const time = (0, date_1.utcNow)();
99
+ const authTimeString = time.toISOString().replace(/\.\d{3}Z$/, 'Z');
100
+ const l1Message = `${requestPath}@${authTimeString}`;
101
+ const l1Signature = await wallet.signMessage(l1Message);
102
+ const headers = {
103
+ [L1_AUTH_SIGNATURE_HEADER]: l1Signature,
104
+ [L1_MESSAGE_TIME_HEADER]: authTimeString,
105
+ };
106
+ const url = this.getUrl(this.endpointConfig.onboardingUrl, requestPath);
107
+ const response = await (0, http_1.sendGetRequest)(url, undefined, headers);
108
+ const accounts = response.data || [];
109
+ const result = [];
110
+ for (const account of accounts) {
111
+ const keyPair = await (0, onboarding_1.getL2KeysFromL1Account)(this.l1PrivateKey(), account.accountIndex, this.endpointConfig.signingDomain);
112
+ result.push({
113
+ account,
114
+ l2KeyPair: keyPair,
115
+ });
116
+ }
117
+ return result;
118
+ }
119
+ /**
120
+ * Create account API key
121
+ */
122
+ async createAccountApiKey(account, description) {
123
+ const requestPath = '/api/v1/user/account/api-key';
124
+ const finalDescription = description || `trading api key for account ${account.id}`;
125
+ const wallet = new ethers_1.ethers.Wallet(this.l1PrivateKey());
126
+ const time = (0, date_1.utcNow)();
127
+ const authTimeString = time.toISOString().replace(/\.\d{3}Z$/, 'Z');
128
+ const l1Message = `${requestPath}@${authTimeString}`;
129
+ const l1Signature = await wallet.signMessage(l1Message);
130
+ const headers = {
131
+ [L1_AUTH_SIGNATURE_HEADER]: l1Signature,
132
+ [L1_MESSAGE_TIME_HEADER]: authTimeString,
133
+ [ACTIVE_ACCOUNT_HEADER]: account.id.toString(),
134
+ };
135
+ const url = this.getUrl(this.endpointConfig.onboardingUrl, requestPath);
136
+ const request = new accounts_1.ApiKeyRequestModel(finalDescription);
137
+ const response = await (0, http_1.sendPostRequest)(url, request.toApiRequestJson(), undefined, headers);
138
+ const responseData = response.data;
139
+ if (!responseData) {
140
+ throw new Error('No API key data returned from onboarding');
141
+ }
142
+ return responseData.key;
143
+ }
144
+ /**
145
+ * Delete account API key
146
+ * https://api.docs.extended.exchange/#delete-api-key
147
+ */
148
+ async deleteAccountApiKey(account, apiKeyId) {
149
+ const requestPath = `/api/v1/user/account/api-key/${apiKeyId}`;
150
+ const wallet = new ethers_1.ethers.Wallet(this.l1PrivateKey());
151
+ const time = (0, date_1.utcNow)();
152
+ const authTimeString = time.toISOString().replace(/\.\d{3}Z$/, 'Z');
153
+ const l1Message = `${requestPath}@${authTimeString}`;
154
+ const l1Signature = await wallet.signMessage(l1Message);
155
+ const headers = {
156
+ [L1_AUTH_SIGNATURE_HEADER]: l1Signature,
157
+ [L1_MESSAGE_TIME_HEADER]: authTimeString,
158
+ [ACTIVE_ACCOUNT_HEADER]: account.id.toString(),
159
+ };
160
+ const url = this.getUrl(this.endpointConfig.onboardingUrl, requestPath);
161
+ await (0, http_1.sendDeleteRequest)(url, undefined, headers);
162
+ }
163
+ /**
164
+ * Get list of account API keys
165
+ * https://api.docs.extended.exchange/#get-api-keys
166
+ */
167
+ async getAccountApiKeys(account) {
168
+ const requestPath = '/api/v1/user/account/api-key';
169
+ const wallet = new ethers_1.ethers.Wallet(this.l1PrivateKey());
170
+ const time = (0, date_1.utcNow)();
171
+ const authTimeString = time.toISOString().replace(/\.\d{3}Z$/, 'Z');
172
+ const l1Message = `${requestPath}@${authTimeString}`;
173
+ const l1Signature = await wallet.signMessage(l1Message);
174
+ const headers = {
175
+ [L1_AUTH_SIGNATURE_HEADER]: l1Signature,
176
+ [L1_MESSAGE_TIME_HEADER]: authTimeString,
177
+ [ACTIVE_ACCOUNT_HEADER]: account.id.toString(),
178
+ };
179
+ const url = this.getUrl(this.endpointConfig.onboardingUrl, requestPath);
180
+ const response = await (0, http_1.sendGetRequest)(url, undefined, headers);
181
+ return response.data || [];
182
+ }
183
+ }
184
+ exports.UserClient = UserClient;
185
+ //# sourceMappingURL=user-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-client.js","sourceRoot":"","sources":["../../../src/perpetual/user-client/user-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Withdrawal object creation
3
+ */
4
+ import Decimal from 'decimal.js';
5
+ import { EndpointConfig } from './configuration';
6
+ import { StarkPerpetualAccount } from './accounts';
7
+ import { WithdrawalRequest } from './withdrawals';
8
+ /**
9
+ * Create withdrawal object
10
+ */
11
+ export declare function createWithdrawalObject(amount: Decimal, recipientStarkAddress: string, starkAccount: StarkPerpetualAccount, config: EndpointConfig, accountId: number, chainId: string, description?: string, nonce?: number, quoteId?: string): WithdrawalRequest;
12
+ //# sourceMappingURL=withdrawal-object.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withdrawal-object.d.ts","sourceRoot":"","sources":["../../src/perpetual/withdrawal-object.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,cAAc,EAAkB,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAwC,MAAM,eAAe,CAAC;AAexF;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,OAAO,EACf,qBAAqB,EAAE,MAAM,EAC7B,YAAY,EAAE,qBAAqB,EACnC,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,GACf,iBAAiB,CA+CnB"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ /**
3
+ * Withdrawal object creation
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createWithdrawalObject = createWithdrawalObject;
7
+ const withdrawals_1 = require("./withdrawals");
8
+ const model_1 = require("../utils/model");
9
+ const signer_1 = require("./crypto/signer");
10
+ const nonce_1 = require("../utils/nonce");
11
+ const date_1 = require("../utils/date");
12
+ /**
13
+ * Calculate expiration timestamp (15 days from now)
14
+ */
15
+ function calcExpirationTimestamp() {
16
+ const expireTime = new Date((0, date_1.utcNow)());
17
+ expireTime.setDate(expireTime.getDate() + 15);
18
+ return Math.ceil(expireTime.getTime() / 1000);
19
+ }
20
+ /**
21
+ * Create withdrawal object
22
+ */
23
+ function createWithdrawalObject(amount, recipientStarkAddress, starkAccount, config, accountId, chainId, description, nonce, quoteId) {
24
+ const expirationTimestamp = calcExpirationTimestamp();
25
+ // Scale amount by decimals
26
+ const scaledAmount = amount.mul(Math.pow(10, config.collateralDecimals));
27
+ const starkAmount = Math.round(scaledAmount.toNumber());
28
+ const starknetDomain = config.starknetDomain;
29
+ const finalNonce = nonce || (0, nonce_1.generateNonce)();
30
+ const withdrawalHash = (0, signer_1.getWithdrawalMsgHash)({
31
+ recipientHex: recipientStarkAddress.startsWith('0x')
32
+ ? recipientStarkAddress
33
+ : '0x' + recipientStarkAddress,
34
+ positionId: starkAccount.getVault(),
35
+ amount: starkAmount.toString(),
36
+ expiration: expirationTimestamp,
37
+ salt: finalNonce.toString(),
38
+ userPublicKey: '0x' + starkAccount.getPublicKey().toString(16),
39
+ domainName: starknetDomain.name,
40
+ domainVersion: starknetDomain.version,
41
+ domainChainId: starknetDomain.chainId,
42
+ domainRevision: starknetDomain.revision,
43
+ collateralId: config.collateralAssetOnChainId,
44
+ });
45
+ const [transferSignatureR, transferSignatureS] = starkAccount.sign(withdrawalHash);
46
+ const settlement = new withdrawals_1.StarkWithdrawalSettlement(recipientStarkAddress.startsWith('0x') ? recipientStarkAddress : `0x${recipientStarkAddress}`, // Hex string
47
+ starkAccount.getVault(), config.collateralAssetOnChainId, // Already a hex string
48
+ starkAmount, new withdrawals_1.Timestamp(expirationTimestamp), finalNonce, new model_1.SettlementSignatureModel(transferSignatureR, transferSignatureS));
49
+ return new withdrawals_1.WithdrawalRequest(accountId, amount, settlement, chainId, 'USD', description, quoteId);
50
+ }
51
+ //# sourceMappingURL=withdrawal-object.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withdrawal-object.js","sourceRoot":"","sources":["../../src/perpetual/withdrawal-object.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAuBH,wDAyDC;AA3ED,+CAAwF;AACxF,0CAA0D;AAC1D,4CAAuD;AACvD,0CAA+C;AAC/C,wCAAuC;AAEvC;;GAEG;AACH,SAAS,uBAAuB;IAC9B,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAA,aAAM,GAAE,CAAC,CAAC;IACtC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,SAAgB,sBAAsB,CACpC,MAAe,EACf,qBAA6B,EAC7B,YAAmC,EACnC,MAAsB,EACtB,SAAiB,EACjB,OAAe,EACf,WAAoB,EACpB,KAAc,EACd,OAAgB;IAEhB,MAAM,mBAAmB,GAAG,uBAAuB,EAAE,CAAC;IAEtD,2BAA2B;IAC3B,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACzE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;IAExD,MAAM,cAAc,GAAmB,MAAM,CAAC,cAAc,CAAC;IAC7D,MAAM,UAAU,GAAG,KAAK,IAAI,IAAA,qBAAa,GAAE,CAAC;IAE5C,MAAM,cAAc,GAAG,IAAA,6BAAoB,EAAC;QAC1C,YAAY,EAAE,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC;YAClD,CAAC,CAAC,qBAAqB;YACvB,CAAC,CAAC,IAAI,GAAG,qBAAqB;QAChC,UAAU,EAAE,YAAY,CAAC,QAAQ,EAAE;QACnC,MAAM,EAAE,WAAW,CAAC,QAAQ,EAAE;QAC9B,UAAU,EAAE,mBAAmB;QAC/B,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE;QAC3B,aAAa,EAAE,IAAI,GAAG,YAAY,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9D,UAAU,EAAE,cAAc,CAAC,IAAI;QAC/B,aAAa,EAAE,cAAc,CAAC,OAAO;QACrC,aAAa,EAAE,cAAc,CAAC,OAAO;QACrC,cAAc,EAAE,cAAc,CAAC,QAAQ;QACvC,YAAY,EAAE,MAAM,CAAC,wBAAwB;KAC9C,CAAC,CAAC;IAEH,MAAM,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAEnF,MAAM,UAAU,GAAG,IAAI,uCAAyB,CAC9C,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,qBAAqB,EAAE,EAAE,aAAa;IAC5G,YAAY,CAAC,QAAQ,EAAE,EACvB,MAAM,CAAC,wBAAwB,EAAE,uBAAuB;IACxD,WAAW,EACX,IAAI,uBAAS,CAAC,mBAAmB,CAAC,EAClC,UAAU,EACV,IAAI,gCAAwB,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CACrE,CAAC;IAEF,OAAO,IAAI,+BAAiB,CAC1B,SAAS,EACT,MAAM,EACN,UAAU,EACV,OAAO,EACP,KAAK,EACL,WAAW,EACX,OAAO,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Withdrawal models
3
+ */
4
+ import Decimal from 'decimal.js';
5
+ import { X10BaseModel, HexValue } from '../utils/model';
6
+ import { SettlementSignatureModel } from '../utils/model';
7
+ /**
8
+ * Timestamp model
9
+ */
10
+ export declare class Timestamp extends X10BaseModel {
11
+ seconds: number;
12
+ constructor(seconds: number);
13
+ }
14
+ /**
15
+ * Stark withdrawal settlement
16
+ */
17
+ export declare class StarkWithdrawalSettlement extends X10BaseModel {
18
+ recipient: HexValue;
19
+ positionId: number;
20
+ collateralId: HexValue;
21
+ amount: number;
22
+ expiration: Timestamp;
23
+ salt: number;
24
+ signature: SettlementSignatureModel;
25
+ constructor(recipient: HexValue, positionId: number, collateralId: HexValue, amount: number, expiration: Timestamp, salt: number, signature: SettlementSignatureModel);
26
+ }
27
+ /**
28
+ * Withdrawal request model
29
+ */
30
+ export declare class WithdrawalRequest extends X10BaseModel {
31
+ accountId: number;
32
+ amount: Decimal;
33
+ description?: string;
34
+ settlement: StarkWithdrawalSettlement;
35
+ chainId: string;
36
+ quoteId?: string;
37
+ asset: string;
38
+ constructor(accountId: number, amount: Decimal, settlement: StarkWithdrawalSettlement, chainId: string, asset: string, description?: string, quoteId?: string);
39
+ }
40
+ //# sourceMappingURL=withdrawals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withdrawals.d.ts","sourceRoot":"","sources":["../../src/perpetual/withdrawals.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1D;;GAEG;AACH,qBAAa,SAAU,SAAQ,YAAY;IACzC,OAAO,EAAE,MAAM,CAAC;gBAEJ,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,YAAY;IACzD,SAAS,EAAE,QAAQ,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,QAAQ,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,SAAS,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,wBAAwB,CAAC;gBAGlC,SAAS,EAAE,QAAQ,EACnB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,QAAQ,EACtB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,SAAS,EACrB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,wBAAwB;CAWtC;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,yBAAyB,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;gBAGZ,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,yBAAyB,EACrC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,MAAM;CAWnB"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ /**
3
+ * Withdrawal models
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.WithdrawalRequest = exports.StarkWithdrawalSettlement = exports.Timestamp = void 0;
7
+ const model_1 = require("../utils/model");
8
+ /**
9
+ * Timestamp model
10
+ */
11
+ class Timestamp extends model_1.X10BaseModel {
12
+ seconds;
13
+ constructor(seconds) {
14
+ super();
15
+ this.seconds = seconds;
16
+ }
17
+ }
18
+ exports.Timestamp = Timestamp;
19
+ /**
20
+ * Stark withdrawal settlement
21
+ */
22
+ class StarkWithdrawalSettlement extends model_1.X10BaseModel {
23
+ recipient;
24
+ positionId;
25
+ collateralId;
26
+ amount;
27
+ expiration;
28
+ salt;
29
+ signature;
30
+ constructor(recipient, positionId, collateralId, amount, expiration, salt, signature) {
31
+ super();
32
+ this.recipient = recipient;
33
+ this.positionId = positionId;
34
+ this.collateralId = collateralId;
35
+ this.amount = amount;
36
+ this.expiration = expiration;
37
+ this.salt = salt;
38
+ this.signature = signature;
39
+ }
40
+ }
41
+ exports.StarkWithdrawalSettlement = StarkWithdrawalSettlement;
42
+ /**
43
+ * Withdrawal request model
44
+ */
45
+ class WithdrawalRequest extends model_1.X10BaseModel {
46
+ accountId;
47
+ amount;
48
+ description;
49
+ settlement;
50
+ chainId;
51
+ quoteId;
52
+ asset;
53
+ constructor(accountId, amount, settlement, chainId, asset, description, quoteId) {
54
+ super();
55
+ this.accountId = accountId;
56
+ this.amount = amount;
57
+ this.description = description;
58
+ this.settlement = settlement;
59
+ this.chainId = chainId;
60
+ this.quoteId = quoteId;
61
+ this.asset = asset;
62
+ }
63
+ }
64
+ exports.WithdrawalRequest = WithdrawalRequest;
65
+ //# sourceMappingURL=withdrawals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withdrawals.js","sourceRoot":"","sources":["../../src/perpetual/withdrawals.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAGH,0CAAwD;AAGxD;;GAEG;AACH,MAAa,SAAU,SAAQ,oBAAY;IACzC,OAAO,CAAS;IAEhB,YAAY,OAAe;QACzB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAPD,8BAOC;AAED;;GAEG;AACH,MAAa,yBAA0B,SAAQ,oBAAY;IACzD,SAAS,CAAW;IACpB,UAAU,CAAS;IACnB,YAAY,CAAW;IACvB,MAAM,CAAS;IACf,UAAU,CAAY;IACtB,IAAI,CAAS;IACb,SAAS,CAA2B;IAEpC,YACE,SAAmB,EACnB,UAAkB,EAClB,YAAsB,EACtB,MAAc,EACd,UAAqB,EACrB,IAAY,EACZ,SAAmC;QAEnC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AA3BD,8DA2BC;AAED;;GAEG;AACH,MAAa,iBAAkB,SAAQ,oBAAY;IACjD,SAAS,CAAS;IAClB,MAAM,CAAU;IAChB,WAAW,CAAU;IACrB,UAAU,CAA4B;IACtC,OAAO,CAAS;IAChB,OAAO,CAAU;IACjB,KAAK,CAAS;IAEd,YACE,SAAiB,EACjB,MAAe,EACf,UAAqC,EACrC,OAAe,EACf,KAAa,EACb,WAAoB,EACpB,OAAgB;QAEhB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AA3BD,8CA2BC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Date and time utility functions
3
+ */
4
+ /**
5
+ * Get current UTC datetime
6
+ */
7
+ export declare function utcNow(): Date;
8
+ /**
9
+ * Convert Date to epoch milliseconds
10
+ * Uses Math.ceil to ensure consistent rounding behavior
11
+ */
12
+ export declare function toEpochMillis(value: Date): number;
13
+ //# sourceMappingURL=date.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/utils/date.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,MAAM,IAAI,IAAI,CAE7B;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,GAAG,MAAM,CAEjD"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ /**
3
+ * Date and time utility functions
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.utcNow = utcNow;
7
+ exports.toEpochMillis = toEpochMillis;
8
+ /**
9
+ * Get current UTC datetime
10
+ */
11
+ function utcNow() {
12
+ return new Date();
13
+ }
14
+ /**
15
+ * Convert Date to epoch milliseconds
16
+ * Uses Math.ceil to ensure consistent rounding behavior
17
+ */
18
+ function toEpochMillis(value) {
19
+ return Math.ceil(value.getTime());
20
+ }
21
+ //# sourceMappingURL=date.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/utils/date.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAKH,wBAEC;AAMD,sCAEC;AAbD;;GAEG;AACH,SAAgB,MAAM;IACpB,OAAO,IAAI,IAAI,EAAE,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,SAAgB,aAAa,CAAC,KAAW;IACvC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AACpC,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Environment variable utilities
3
+ */
4
+ /**
5
+ * Get environment variable or throw error
6
+ */
7
+ export declare function getEnv(name: string): string;
8
+ /**
9
+ * Get environment variable or return default
10
+ */
11
+ export declare function getEnvOptional(name: string, defaultValue?: string): string | undefined;
12
+ /**
13
+ * Get environment variable as number
14
+ */
15
+ export declare function getEnvNumber(name: string): number;
16
+ /**
17
+ * Get environment variable as number or return default
18
+ */
19
+ export declare function getEnvNumberOptional(name: string, defaultValue?: number): number | undefined;
20
+ /**
21
+ * Get environment variable as boolean
22
+ */
23
+ export declare function getEnvBoolean(name: string): boolean;
24
+ /**
25
+ * Get environment variable as boolean or return default
26
+ */
27
+ export declare function getEnvBooleanOptional(name: string, defaultValue?: boolean): boolean | undefined;
28
+ /**
29
+ * Load environment variables from .env.local (if exists)
30
+ * Note: This requires dotenv package
31
+ */
32
+ export declare function loadEnv(): void;
33
+ /**
34
+ * X10 SDK environment configuration
35
+ */
36
+ export interface X10EnvConfig {
37
+ apiKey: string;
38
+ publicKey: string;
39
+ privateKey: string;
40
+ vaultId: number;
41
+ builderId?: number;
42
+ l1PrivateKey?: string;
43
+ environment?: 'testnet' | 'mainnet';
44
+ }
45
+ /**
46
+ * Get X10 SDK environment configuration
47
+ * Supports both X10_* and alternative naming conventions
48
+ */
49
+ export declare function getX10EnvConfig(requirePrivateApi?: boolean): X10EnvConfig;
50
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM3C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEtF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOjD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAU5F;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGnD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAO/F;AAED;;;GAGG;AACH,wBAAgB,OAAO,IAAI,IAAI,CA6B9B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CACrC;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,iBAAiB,GAAE,OAAc,GAAG,YAAY,CAiD/E"}
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ /**
3
+ * Environment variable utilities
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getEnv = getEnv;
7
+ exports.getEnvOptional = getEnvOptional;
8
+ exports.getEnvNumber = getEnvNumber;
9
+ exports.getEnvNumberOptional = getEnvNumberOptional;
10
+ exports.getEnvBoolean = getEnvBoolean;
11
+ exports.getEnvBooleanOptional = getEnvBooleanOptional;
12
+ exports.loadEnv = loadEnv;
13
+ exports.getX10EnvConfig = getX10EnvConfig;
14
+ /**
15
+ * Get environment variable or throw error
16
+ */
17
+ function getEnv(name) {
18
+ const value = process.env[name];
19
+ if (!value) {
20
+ throw new Error(`${name} is not set in environment variables`);
21
+ }
22
+ return value;
23
+ }
24
+ /**
25
+ * Get environment variable or return default
26
+ */
27
+ function getEnvOptional(name, defaultValue) {
28
+ return process.env[name] || defaultValue;
29
+ }
30
+ /**
31
+ * Get environment variable as number
32
+ */
33
+ function getEnvNumber(name) {
34
+ const value = getEnv(name);
35
+ const num = parseInt(value, 10);
36
+ if (isNaN(num)) {
37
+ throw new Error(`${name} must be a valid number, got: ${value}`);
38
+ }
39
+ return num;
40
+ }
41
+ /**
42
+ * Get environment variable as number or return default
43
+ */
44
+ function getEnvNumberOptional(name, defaultValue) {
45
+ const value = process.env[name];
46
+ if (!value) {
47
+ return defaultValue;
48
+ }
49
+ const num = parseInt(value, 10);
50
+ if (isNaN(num)) {
51
+ throw new Error(`${name} must be a valid number, got: ${value}`);
52
+ }
53
+ return num;
54
+ }
55
+ /**
56
+ * Get environment variable as boolean
57
+ */
58
+ function getEnvBoolean(name) {
59
+ const value = getEnv(name).toLowerCase();
60
+ return value === 'true' || value === '1' || value === 'yes';
61
+ }
62
+ /**
63
+ * Get environment variable as boolean or return default
64
+ */
65
+ function getEnvBooleanOptional(name, defaultValue) {
66
+ const value = process.env[name];
67
+ if (!value) {
68
+ return defaultValue;
69
+ }
70
+ const lowerValue = value.toLowerCase();
71
+ return lowerValue === 'true' || lowerValue === '1' || lowerValue === 'yes';
72
+ }
73
+ /**
74
+ * Load environment variables from .env.local (if exists)
75
+ * Note: This requires dotenv package
76
+ */
77
+ function loadEnv() {
78
+ try {
79
+ // Try to load dotenv if available
80
+ const dotenv = require('dotenv');
81
+ const path = require('path');
82
+ const fs = require('fs');
83
+ // Try multiple paths
84
+ const possiblePaths = [
85
+ path.join(process.cwd(), '.env.local'),
86
+ path.join(process.cwd(), '.env'),
87
+ path.join(__dirname, '../../.env.local'),
88
+ path.join(__dirname, '../../.env'),
89
+ ];
90
+ for (const envPath of possiblePaths) {
91
+ if (fs.existsSync(envPath)) {
92
+ const result = dotenv.config({ path: envPath });
93
+ if (!result.error) {
94
+ break; // Successfully loaded
95
+ }
96
+ }
97
+ }
98
+ // Also try default dotenv.config() which looks in current working directory
99
+ dotenv.config();
100
+ }
101
+ catch (error) {
102
+ // dotenv not installed, skip
103
+ }
104
+ }
105
+ /**
106
+ * Get X10 SDK environment configuration
107
+ * Supports both X10_* and alternative naming conventions
108
+ */
109
+ function getX10EnvConfig(requirePrivateApi = true) {
110
+ loadEnv();
111
+ // Support both X10_* and alternative naming conventions
112
+ const apiKey = process.env.X10_API_KEY || process.env.API_KEY;
113
+ const publicKey = process.env.X10_PUBLIC_KEY || process.env.X10_Stark_Key_Public || process.env.Stark_Key_Public;
114
+ const privateKey = process.env.X10_PRIVATE_KEY || process.env.X10_Stark_Key_Private || process.env.Stark_Key_Private;
115
+ const vaultId = process.env.X10_VAULT_ID || process.env.X10_Vault_Number || process.env.Vault_Number;
116
+ const builderId = process.env.X10_BUILDER_ID || process.env.X10_Client_ID || process.env.Client_ID;
117
+ const l1PrivateKey = process.env.L1_PRIVATE_KEY;
118
+ const environment = (process.env.ENVIRONMENT || 'testnet');
119
+ if (requirePrivateApi) {
120
+ if (!apiKey)
121
+ throw new Error('API_KEY or X10_API_KEY is not set');
122
+ if (!publicKey)
123
+ throw new Error('Stark_Key_Public or X10_PUBLIC_KEY is not set');
124
+ if (!privateKey)
125
+ throw new Error('Stark_Key_Private or X10_PRIVATE_KEY is not set');
126
+ if (!vaultId)
127
+ throw new Error('Vault_Number or X10_VAULT_ID is not set');
128
+ // Ensure keys have 0x prefix
129
+ const normalizedPublicKey = publicKey.startsWith('0x') ? publicKey : `0x${publicKey}`;
130
+ const normalizedPrivateKey = privateKey.startsWith('0x') ? privateKey : `0x${privateKey}`;
131
+ if (!normalizedPublicKey.match(/^0x[0-9a-fA-F]+$/)) {
132
+ throw new Error('Public key must be a valid hex string');
133
+ }
134
+ if (!normalizedPrivateKey.match(/^0x[0-9a-fA-F]+$/)) {
135
+ throw new Error('Private key must be a valid hex string');
136
+ }
137
+ return {
138
+ apiKey: apiKey,
139
+ publicKey: normalizedPublicKey,
140
+ privateKey: normalizedPrivateKey,
141
+ vaultId: parseInt(vaultId, 10),
142
+ builderId: builderId ? parseInt(builderId, 10) : undefined,
143
+ l1PrivateKey: l1PrivateKey || undefined,
144
+ environment,
145
+ };
146
+ }
147
+ return {
148
+ apiKey: apiKey || '',
149
+ publicKey: publicKey ? (publicKey.startsWith('0x') ? publicKey : `0x${publicKey}`) : '',
150
+ privateKey: privateKey ? (privateKey.startsWith('0x') ? privateKey : `0x${privateKey}`) : '',
151
+ vaultId: vaultId ? parseInt(vaultId, 10) : 0,
152
+ builderId: builderId ? parseInt(builderId, 10) : undefined,
153
+ l1PrivateKey: l1PrivateKey || undefined,
154
+ environment,
155
+ };
156
+ }
157
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"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"}