@satelink/sdk 0.2.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.
package/README.md ADDED
@@ -0,0 +1,240 @@
1
+ # @satelink/sdk
2
+
3
+ Official SDK for the Satelink DePIN network — blockchain RPC, MEV relay, AI inference, and more.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @satelink/sdk
9
+ # or
10
+ pnpm add @satelink/sdk
11
+ # or
12
+ yarn add @satelink/sdk
13
+ ```
14
+
15
+ ## Quick Start
16
+
17
+ ```typescript
18
+ import { SatelinkRPC, SatelinkMEV, getEthersProvider } from '@satelink/sdk';
19
+
20
+ // RPC calls (no API key needed for public tier)
21
+ const rpc = new SatelinkRPC({ chain: 'polygon' });
22
+ const blockNumber = await rpc.getBlockNumber();
23
+ console.log('Current block:', blockNumber);
24
+
25
+ // ethers.js provider (drop-in Alchemy replacement)
26
+ const provider = getEthersProvider('polygon');
27
+ const balance = await provider.getBalance('0x...');
28
+
29
+ // MEV relay (API key required)
30
+ const mev = new SatelinkMEV({ apiKey: 'sk_live_...' });
31
+ const simulation = await mev.simulateBundle([signedTx1, signedTx2]);
32
+ if (simulation.profitable) {
33
+ const result = await mev.submitBundle([signedTx1, signedTx2]);
34
+ }
35
+ ```
36
+
37
+ ## RPC Usage
38
+
39
+ ```typescript
40
+ import { SatelinkRPC } from '@satelink/sdk';
41
+
42
+ const rpc = new SatelinkRPC({
43
+ apiKey: 'sk_live_...', // optional for higher rate limits
44
+ chain: 'ethereum' // ethereum, polygon, arbitrum, base, polygon-amoy
45
+ });
46
+
47
+ // Get block number
48
+ const block = await rpc.getBlockNumber();
49
+
50
+ // Get balance
51
+ const balance = await rpc.getBalance('0x742d35Cc6634C0532925a3b844Bc9e7595f7bA8f');
52
+
53
+ // Make contract call
54
+ const result = await rpc.call({
55
+ to: '0x...',
56
+ data: '0x...'
57
+ });
58
+
59
+ // Send signed transaction
60
+ const txHash = await rpc.sendRawTransaction('0x...');
61
+
62
+ // Raw JSON-RPC request
63
+ const logs = await rpc.request('eth_getLogs', [{
64
+ fromBlock: '0x0',
65
+ toBlock: 'latest',
66
+ address: '0x...'
67
+ }]);
68
+ ```
69
+
70
+ ## MEV Relay
71
+
72
+ Private mempool for MEV searchers. Transactions bypass public mempool.
73
+
74
+ ```typescript
75
+ import { createMevClient } from '@satelink/sdk';
76
+
77
+ const mev = createMevClient({ apiKey: 'sk_live_...' });
78
+
79
+ // 1. Simulate bundle first (cheap - $0.0001)
80
+ const simulation = await mev.simulateBundle([
81
+ '0x02f8...', // signed tx 1
82
+ '0x02f8...' // signed tx 2
83
+ ]);
84
+
85
+ console.log('Profitable:', simulation.profitable);
86
+ console.log('Coinbase diff:', simulation.simulation?.coinbaseDiff);
87
+
88
+ // 2. Submit if profitable ($0.005 per bundle)
89
+ if (simulation.profitable) {
90
+ const result = await mev.submitBundle(
91
+ ['0x02f8...', '0x02f8...'],
92
+ { blockNumber: 'latest' }
93
+ );
94
+ console.log('Bundle hash:', result.bundleHash);
95
+
96
+ // 3. Track inclusion status
97
+ const status = await mev.getBundleStatus(result.bundleHash);
98
+ console.log('Status:', status.status);
99
+ }
100
+
101
+ // Submit single private tx ($0.001)
102
+ const tx = await mev.submitPrivateTransaction('0x02f8...');
103
+ ```
104
+
105
+ ### MEV Pricing
106
+
107
+ | Method | Price |
108
+ |--------|-------|
109
+ | eth_callBundle (simulation) | $0.0001 |
110
+ | eth_sendRawTransaction | $0.001 |
111
+ | eth_sendBundle | $0.005 |
112
+ | flashbots_getBundleStats | $0.00005 |
113
+
114
+ ## Framework Adapters
115
+
116
+ Drop-in replacements for Alchemy/Infura with zero config changes.
117
+
118
+ ### ethers.js
119
+
120
+ ```typescript
121
+ import { getEthersProvider } from '@satelink/sdk';
122
+
123
+ // ethers v5 or v6 - auto-detected
124
+ const provider = getEthersProvider('polygon');
125
+ const block = await provider.getBlockNumber();
126
+ const balance = await provider.getBalance('0x...');
127
+ ```
128
+
129
+ ### viem
130
+
131
+ ```typescript
132
+ import { createPublicClient } from 'viem';
133
+ import { polygon } from 'viem/chains';
134
+ import { getViemTransport } from '@satelink/sdk';
135
+
136
+ const client = createPublicClient({
137
+ chain: polygon,
138
+ transport: getViemTransport('polygon'),
139
+ });
140
+
141
+ const block = await client.getBlockNumber();
142
+ ```
143
+
144
+ ### wagmi
145
+
146
+ ```typescript
147
+ import { createConfig, http } from 'wagmi';
148
+ import { polygon, arbitrum, base } from 'wagmi/chains';
149
+ import { getSatelinkRpcUrl } from '@satelink/sdk';
150
+
151
+ const config = createConfig({
152
+ chains: [polygon, arbitrum, base],
153
+ transports: {
154
+ [polygon.id]: http(getSatelinkRpcUrl('polygon')),
155
+ [arbitrum.id]: http(getSatelinkRpcUrl('arbitrum')),
156
+ [base.id]: http(getSatelinkRpcUrl('base')),
157
+ },
158
+ });
159
+ ```
160
+
161
+ ### Raw JSON-RPC (no dependencies)
162
+
163
+ ```typescript
164
+ import { rpc } from '@satelink/sdk';
165
+
166
+ const blockNumber = await rpc('eth_blockNumber', [], 'polygon');
167
+ const balance = await rpc('eth_getBalance', ['0x...', 'latest'], 'ethereum');
168
+ ```
169
+
170
+ ## AI Usage
171
+
172
+ ```typescript
173
+ import { SatelinkAI } from '@satelink/sdk';
174
+
175
+ const ai = new SatelinkAI({ apiKey: 'sk_live_...' });
176
+
177
+ // Chat completion (OpenAI-compatible)
178
+ const chatResponse = await ai.chat([
179
+ { role: 'system', content: 'You are a helpful assistant.' },
180
+ { role: 'user', content: 'What is DePIN?' }
181
+ ], {
182
+ model: 'gpt-4o',
183
+ max_tokens: 500
184
+ });
185
+
186
+ console.log(chatResponse.choices[0].message.content);
187
+ ```
188
+
189
+ ## EIP-1193 Provider
190
+
191
+ Full EIP-1193 compatible provider with event support:
192
+
193
+ ```typescript
194
+ import { SatelinkProvider } from '@satelink/sdk';
195
+
196
+ const provider = new SatelinkProvider({
197
+ chainId: 137, // Polygon
198
+ apiKey: 'sk_live_...'
199
+ });
200
+
201
+ // Standard EIP-1193 request
202
+ const blockNumber = await provider.request({ method: 'eth_blockNumber' });
203
+
204
+ // Listen for chain changes
205
+ provider.on('chainChanged', (chainId) => {
206
+ console.log('Chain changed to:', chainId);
207
+ });
208
+
209
+ // Switch chains
210
+ await provider.request({
211
+ method: 'wallet_switchEthereumChain',
212
+ params: [{ chainId: '0x89' }] // Polygon
213
+ });
214
+ ```
215
+
216
+ ## Supported Chains
217
+
218
+ | Chain | ID | Slug | MEV Support |
219
+ |-------|-----|------|-------------|
220
+ | Ethereum | 1 | `ethereum` | Yes (Flashbots) |
221
+ | Polygon | 137 | `polygon` | Yes |
222
+ | Arbitrum | 42161 | `arbitrum` | Yes |
223
+ | Base | 8453 | `base` | No |
224
+ | Polygon Amoy | 80002 | `amoy` | No (testnet) |
225
+
226
+ ## Pricing
227
+
228
+ - **RPC calls**: $0.00003 USDT per call
229
+ - **MEV relay**: $0.001-$0.005 per tx/bundle
230
+ - **AI inference**: $0.000001 per input token
231
+
232
+ ## Links
233
+
234
+ - Website: https://satelink.network
235
+ - RPC Endpoint: https://rpc.satelink.network
236
+ - GitHub: https://github.com/Satelink-Protocol/Satelink_Network
237
+
238
+ ## License
239
+
240
+ MIT
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Framework Adapters
3
+ * L8-002: Drop-in adapters for ethers.js, wagmi, and viem
4
+ *
5
+ * Makes Satelink RPC a drop-in replacement for Alchemy/Infura
6
+ */
7
+ export declare const SATELINK_CHAINS: {
8
+ readonly polygon: {
9
+ readonly chainId: 137;
10
+ readonly name: "Polygon";
11
+ readonly rpcUrl: "https://rpc.satelink.network/rpc/polygon";
12
+ };
13
+ readonly ethereum: {
14
+ readonly chainId: 1;
15
+ readonly name: "Ethereum";
16
+ readonly rpcUrl: "https://rpc.satelink.network/rpc/ethereum";
17
+ };
18
+ readonly arbitrum: {
19
+ readonly chainId: 42161;
20
+ readonly name: "Arbitrum One";
21
+ readonly rpcUrl: "https://rpc.satelink.network/rpc/arbitrum";
22
+ };
23
+ readonly base: {
24
+ readonly chainId: 8453;
25
+ readonly name: "Base";
26
+ readonly rpcUrl: "https://rpc.satelink.network/rpc/base";
27
+ };
28
+ readonly amoy: {
29
+ readonly chainId: 80002;
30
+ readonly name: "Polygon Amoy";
31
+ readonly rpcUrl: "https://rpc.satelink.network/rpc/amoy";
32
+ };
33
+ };
34
+ export type SatelinkChain = keyof typeof SATELINK_CHAINS;
35
+ /**
36
+ * Get the RPC URL for a chain
37
+ */
38
+ export declare function getSatelinkRpcUrl(chain?: SatelinkChain, apiKey?: string): string;
39
+ /**
40
+ * Create an ethers.js v6 JsonRpcProvider for Satelink
41
+ *
42
+ * @example
43
+ * ```ts
44
+ * import { getEthersProvider } from '@satelink/sdk';
45
+ * const provider = getEthersProvider('polygon');
46
+ * const block = await provider.getBlockNumber();
47
+ * ```
48
+ */
49
+ export declare function getEthersProvider(chain?: SatelinkChain, apiKey?: string): unknown;
50
+ /**
51
+ * Create a viem http transport for Satelink
52
+ *
53
+ * @example
54
+ * ```ts
55
+ * import { createPublicClient } from 'viem';
56
+ * import { polygon } from 'viem/chains';
57
+ * import { getViemTransport } from '@satelink/sdk';
58
+ *
59
+ * const client = createPublicClient({
60
+ * chain: polygon,
61
+ * transport: getViemTransport('polygon'),
62
+ * });
63
+ * ```
64
+ */
65
+ export declare function getViemTransport(chain?: SatelinkChain, apiKey?: string): unknown;
66
+ /**
67
+ * Get a wagmi-compatible chain config for Satelink RPC
68
+ *
69
+ * @example
70
+ * ```ts
71
+ * import { createConfig, http } from 'wagmi';
72
+ * import { getSatelinkChainConfig } from '@satelink/sdk';
73
+ *
74
+ * const config = createConfig({
75
+ * chains: [getSatelinkChainConfig('polygon')],
76
+ * transports: { 137: http('https://rpc.satelink.network/rpc/polygon') }
77
+ * });
78
+ * ```
79
+ */
80
+ export declare function getSatelinkChainConfig(chain?: SatelinkChain): {
81
+ id: 137 | 1 | 42161 | 8453 | 80002;
82
+ name: "Polygon" | "Ethereum" | "Arbitrum One" | "Base" | "Polygon Amoy";
83
+ nativeCurrency: {
84
+ name: string;
85
+ symbol: string;
86
+ decimals: number;
87
+ };
88
+ rpcUrls: {
89
+ default: {
90
+ http: ("https://rpc.satelink.network/rpc/polygon" | "https://rpc.satelink.network/rpc/ethereum" | "https://rpc.satelink.network/rpc/arbitrum" | "https://rpc.satelink.network/rpc/base" | "https://rpc.satelink.network/rpc/amoy")[];
91
+ };
92
+ public: {
93
+ http: ("https://rpc.satelink.network/rpc/polygon" | "https://rpc.satelink.network/rpc/ethereum" | "https://rpc.satelink.network/rpc/arbitrum" | "https://rpc.satelink.network/rpc/base" | "https://rpc.satelink.network/rpc/amoy")[];
94
+ };
95
+ };
96
+ blockExplorers: {
97
+ default: {
98
+ name: string;
99
+ url: string;
100
+ };
101
+ };
102
+ };
103
+ /**
104
+ * Raw JSON-RPC call to Satelink (no dependencies)
105
+ *
106
+ * @example
107
+ * ```ts
108
+ * import { rpc } from '@satelink/sdk';
109
+ * const blockNumber = await rpc('eth_blockNumber', [], 'polygon');
110
+ * ```
111
+ */
112
+ export declare function rpc<T = unknown>(method: string, params?: unknown[], chain?: SatelinkChain, apiKey?: string): Promise<T>;
113
+ //# sourceMappingURL=adapters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../src/adapters.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;CAMlB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,eAAe,CAAC;AAEzD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,GAAE,aAAyB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAG3F;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,GAAE,aAAyB,EAChC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAgCT;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,GAAE,aAAyB,EAChC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAmBT;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,GAAE,aAAyB;;;;;;;;;;;;;;;;;iBAgCnB;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAA;SAAE;;EAnBhF;AA6BD;;;;;;;;GAQG;AACH,wBAAsB,GAAG,CAAC,CAAC,GAAG,OAAO,EACnC,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,OAAO,EAAO,EACtB,KAAK,GAAE,aAAyB,EAChC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,CAAC,CAAC,CAuBZ"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Framework Adapters
3
+ * L8-002: Drop-in adapters for ethers.js, wagmi, and viem
4
+ *
5
+ * Makes Satelink RPC a drop-in replacement for Alchemy/Infura
6
+ */
7
+ const BASE_URL = 'https://rpc.satelink.network';
8
+ export const SATELINK_CHAINS = {
9
+ polygon: { chainId: 137, name: 'Polygon', rpcUrl: `${BASE_URL}/rpc/polygon` },
10
+ ethereum: { chainId: 1, name: 'Ethereum', rpcUrl: `${BASE_URL}/rpc/ethereum` },
11
+ arbitrum: { chainId: 42161, name: 'Arbitrum One', rpcUrl: `${BASE_URL}/rpc/arbitrum` },
12
+ base: { chainId: 8453, name: 'Base', rpcUrl: `${BASE_URL}/rpc/base` },
13
+ amoy: { chainId: 80002, name: 'Polygon Amoy', rpcUrl: `${BASE_URL}/rpc/amoy` }
14
+ };
15
+ /**
16
+ * Get the RPC URL for a chain
17
+ */
18
+ export function getSatelinkRpcUrl(chain = 'polygon', apiKey) {
19
+ const config = SATELINK_CHAINS[chain];
20
+ return apiKey ? `${config.rpcUrl}?apiKey=${apiKey}` : config.rpcUrl;
21
+ }
22
+ /**
23
+ * Create an ethers.js v6 JsonRpcProvider for Satelink
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * import { getEthersProvider } from '@satelink/sdk';
28
+ * const provider = getEthersProvider('polygon');
29
+ * const block = await provider.getBlockNumber();
30
+ * ```
31
+ */
32
+ export function getEthersProvider(chain = 'polygon', apiKey) {
33
+ const config = SATELINK_CHAINS[chain];
34
+ const url = config.rpcUrl;
35
+ try {
36
+ // Try ethers v6 first
37
+ const { JsonRpcProvider } = require('ethers');
38
+ const fetchRequest = apiKey ? {
39
+ url,
40
+ getUrlFunc: () => url,
41
+ processFunc: (req, resp) => resp,
42
+ setHeader: (key, value) => { },
43
+ } : undefined;
44
+ return new JsonRpcProvider(url, config.chainId, {
45
+ staticNetwork: true
46
+ });
47
+ }
48
+ catch {
49
+ try {
50
+ // Fall back to ethers v5
51
+ const { providers } = require('ethers');
52
+ const connection = apiKey
53
+ ? { url, headers: { 'X-API-Key': apiKey } }
54
+ : url;
55
+ return new providers.JsonRpcProvider(connection, config.chainId);
56
+ }
57
+ catch {
58
+ throw new Error('@satelink/sdk ethers adapter requires ethers ^5.0.0 or ^6.0.0. ' +
59
+ 'Install with: npm install ethers');
60
+ }
61
+ }
62
+ }
63
+ /**
64
+ * Create a viem http transport for Satelink
65
+ *
66
+ * @example
67
+ * ```ts
68
+ * import { createPublicClient } from 'viem';
69
+ * import { polygon } from 'viem/chains';
70
+ * import { getViemTransport } from '@satelink/sdk';
71
+ *
72
+ * const client = createPublicClient({
73
+ * chain: polygon,
74
+ * transport: getViemTransport('polygon'),
75
+ * });
76
+ * ```
77
+ */
78
+ export function getViemTransport(chain = 'polygon', apiKey) {
79
+ const config = SATELINK_CHAINS[chain];
80
+ try {
81
+ const { http } = require('viem');
82
+ return http(config.rpcUrl, {
83
+ fetchOptions: apiKey
84
+ ? { headers: { 'X-API-Key': apiKey } }
85
+ : undefined,
86
+ retryCount: 3,
87
+ retryDelay: 150,
88
+ timeout: 20000
89
+ });
90
+ }
91
+ catch {
92
+ throw new Error('@satelink/sdk viem adapter requires viem ^1.0.0 or ^2.0.0. ' +
93
+ 'Install with: npm install viem');
94
+ }
95
+ }
96
+ /**
97
+ * Get a wagmi-compatible chain config for Satelink RPC
98
+ *
99
+ * @example
100
+ * ```ts
101
+ * import { createConfig, http } from 'wagmi';
102
+ * import { getSatelinkChainConfig } from '@satelink/sdk';
103
+ *
104
+ * const config = createConfig({
105
+ * chains: [getSatelinkChainConfig('polygon')],
106
+ * transports: { 137: http('https://rpc.satelink.network/rpc/polygon') }
107
+ * });
108
+ * ```
109
+ */
110
+ export function getSatelinkChainConfig(chain = 'polygon') {
111
+ const config = SATELINK_CHAINS[chain];
112
+ return {
113
+ id: config.chainId,
114
+ name: config.name,
115
+ nativeCurrency: getNativeCurrency(chain),
116
+ rpcUrls: {
117
+ default: { http: [config.rpcUrl] },
118
+ public: { http: [config.rpcUrl] }
119
+ },
120
+ blockExplorers: getBlockExplorer(chain)
121
+ };
122
+ }
123
+ function getNativeCurrency(chain) {
124
+ switch (chain) {
125
+ case 'polygon':
126
+ case 'amoy':
127
+ return { name: 'MATIC', symbol: 'MATIC', decimals: 18 };
128
+ case 'ethereum':
129
+ return { name: 'Ether', symbol: 'ETH', decimals: 18 };
130
+ case 'arbitrum':
131
+ return { name: 'Ether', symbol: 'ETH', decimals: 18 };
132
+ case 'base':
133
+ return { name: 'Ether', symbol: 'ETH', decimals: 18 };
134
+ default:
135
+ return { name: 'Ether', symbol: 'ETH', decimals: 18 };
136
+ }
137
+ }
138
+ function getBlockExplorer(chain) {
139
+ const explorers = {
140
+ polygon: { default: { name: 'Polygonscan', url: 'https://polygonscan.com' } },
141
+ ethereum: { default: { name: 'Etherscan', url: 'https://etherscan.io' } },
142
+ arbitrum: { default: { name: 'Arbiscan', url: 'https://arbiscan.io' } },
143
+ base: { default: { name: 'Basescan', url: 'https://basescan.org' } },
144
+ amoy: { default: { name: 'Polygonscan Amoy', url: 'https://amoy.polygonscan.com' } }
145
+ };
146
+ return explorers[chain];
147
+ }
148
+ /**
149
+ * Raw JSON-RPC call to Satelink (no dependencies)
150
+ *
151
+ * @example
152
+ * ```ts
153
+ * import { rpc } from '@satelink/sdk';
154
+ * const blockNumber = await rpc('eth_blockNumber', [], 'polygon');
155
+ * ```
156
+ */
157
+ export async function rpc(method, params = [], chain = 'polygon', apiKey) {
158
+ const config = SATELINK_CHAINS[chain];
159
+ const headers = { 'Content-Type': 'application/json' };
160
+ if (apiKey)
161
+ headers['X-API-Key'] = apiKey;
162
+ const response = await fetch(config.rpcUrl, {
163
+ method: 'POST',
164
+ headers,
165
+ body: JSON.stringify({
166
+ jsonrpc: '2.0',
167
+ id: Date.now(),
168
+ method,
169
+ params
170
+ })
171
+ });
172
+ const data = await response.json();
173
+ if (data.error) {
174
+ throw new Error(`RPC error: ${data.error.message} (code: ${data.error.code})`);
175
+ }
176
+ return data.result;
177
+ }
178
+ //# sourceMappingURL=adapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapters.js","sourceRoot":"","sources":["../src/adapters.ts"],"names":[],"mappings":"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"}
package/dist/ai.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ import type { SatelinkAIOptions, ChatMessage, ChatCompletionOptions, ChatCompletionResponse, Model } from './types.js';
2
+ export declare class SatelinkAI {
3
+ private apiKey;
4
+ private baseUrl;
5
+ constructor(options: SatelinkAIOptions);
6
+ private getHeaders;
7
+ chat(messages: ChatMessage[], options?: ChatCompletionOptions): Promise<ChatCompletionResponse>;
8
+ complete(prompt: string, options?: ChatCompletionOptions): Promise<string>;
9
+ getModels(): Promise<Model[]>;
10
+ get models(): Promise<Model[]>;
11
+ }
12
+ //# sourceMappingURL=ai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,qBAAqB,EACrB,sBAAsB,EACtB,KAAK,EACN,MAAM,YAAY,CAAC;AAIpB,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,EAAE,iBAAiB;IAQtC,OAAO,CAAC,UAAU;IAOZ,IAAI,CACR,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,sBAAsB,CAAC;IAyB5B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,MAAM,CAAC;IAyB9E,SAAS,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAcnC,IAAI,MAAM,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAE7B;CACF"}
package/dist/ai.js ADDED
@@ -0,0 +1,71 @@
1
+ const DEFAULT_BASE_URL = 'https://rpc.satelink.network';
2
+ export class SatelinkAI {
3
+ apiKey;
4
+ baseUrl;
5
+ constructor(options) {
6
+ if (!options.apiKey) {
7
+ throw new Error('API key is required for SatelinkAI');
8
+ }
9
+ this.apiKey = options.apiKey;
10
+ this.baseUrl = options.baseUrl || DEFAULT_BASE_URL;
11
+ }
12
+ getHeaders() {
13
+ return {
14
+ 'Content-Type': 'application/json',
15
+ 'x-api-key': this.apiKey
16
+ };
17
+ }
18
+ async chat(messages, options = {}) {
19
+ const body = {
20
+ model: options.model || 'satelink-default',
21
+ messages,
22
+ max_tokens: options.max_tokens || 1000,
23
+ temperature: options.temperature,
24
+ stream: false
25
+ };
26
+ const response = await fetch(`${this.baseUrl}/v1/chat/completions`, {
27
+ method: 'POST',
28
+ headers: this.getHeaders(),
29
+ body: JSON.stringify(body)
30
+ });
31
+ if (!response.ok) {
32
+ const error = await response.json().catch(() => ({}));
33
+ throw new Error(`AI request failed: ${response.status} - ${error.error?.message || response.statusText}`);
34
+ }
35
+ return response.json();
36
+ }
37
+ async complete(prompt, options = {}) {
38
+ const body = {
39
+ model: options.model || 'satelink-default',
40
+ prompt,
41
+ max_tokens: options.max_tokens || 100,
42
+ temperature: options.temperature
43
+ };
44
+ const response = await fetch(`${this.baseUrl}/v1/completions`, {
45
+ method: 'POST',
46
+ headers: this.getHeaders(),
47
+ body: JSON.stringify(body)
48
+ });
49
+ if (!response.ok) {
50
+ const error = await response.json().catch(() => ({}));
51
+ throw new Error(`AI request failed: ${response.status} - ${error.error?.message || response.statusText}`);
52
+ }
53
+ const data = await response.json();
54
+ return data.choices?.[0]?.text || '';
55
+ }
56
+ async getModels() {
57
+ const response = await fetch(`${this.baseUrl}/v1/models`, {
58
+ method: 'GET',
59
+ headers: this.getHeaders()
60
+ });
61
+ if (!response.ok) {
62
+ throw new Error(`Failed to fetch models: ${response.status}`);
63
+ }
64
+ const data = await response.json();
65
+ return data.data || [];
66
+ }
67
+ get models() {
68
+ return this.getModels();
69
+ }
70
+ }
71
+ //# sourceMappingURL=ai.js.map
package/dist/ai.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.js","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export { SatelinkRPC, createProvider } from './rpc.js';
2
+ export { SatelinkProvider, createSatelinkProvider } from './provider.js';
3
+ export { SatelinkAI } from './ai.js';
4
+ export { SatelinkMEV, createMevClient } from './mev.js';
5
+ export { SATELINK_CHAINS, getSatelinkRpcUrl, getEthersProvider, getViemTransport, getSatelinkChainConfig, rpc } from './adapters.js';
6
+ export type { SatelinkRPCOptions, SatelinkAIOptions, JsonRpcRequest, JsonRpcResponse, ChatMessage, ChatCompletionOptions, ChatCompletionResponse, Model, TransactionRequest } from './types.js';
7
+ export type { EIP1193Provider } from './rpc.js';
8
+ export type { SatelinkProviderOptions } from './provider.js';
9
+ export type { SatelinkChain } from './adapters.js';
10
+ export type { MevClientOptions, MevSubmitResult, MevSimulationResult, MevBundleStatus } from './mev.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAGvD,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAGzE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAGxD,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,GAAG,EACJ,MAAM,eAAe,CAAC;AAGvB,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,WAAW,EACX,qBAAqB,EACrB,sBAAsB,EACtB,KAAK,EACL,kBAAkB,EACnB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,YAAY,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAC7D,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,eAAe,EAChB,MAAM,UAAU,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ // Core RPC client
2
+ export { SatelinkRPC, createProvider } from './rpc.js';
3
+ // EIP-1193 Provider
4
+ export { SatelinkProvider, createSatelinkProvider } from './provider.js';
5
+ // AI inference client
6
+ export { SatelinkAI } from './ai.js';
7
+ // MEV relay client
8
+ export { SatelinkMEV, createMevClient } from './mev.js';
9
+ // Framework adapters (ethers.js, viem, wagmi)
10
+ export { SATELINK_CHAINS, getSatelinkRpcUrl, getEthersProvider, getViemTransport, getSatelinkChainConfig, rpc } from './adapters.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kBAAkB;AAClB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAEvD,oBAAoB;AACpB,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAEzE,sBAAsB;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,mBAAmB;AACnB,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAExD,8CAA8C;AAC9C,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,GAAG,EACJ,MAAM,eAAe,CAAC"}