@waiaas/actions 2.6.0-rc.6

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 (30) hide show
  1. package/LICENSE +21 -0
  2. package/dist/common/action-api-client.d.ts +14 -0
  3. package/dist/common/action-api-client.d.ts.map +1 -0
  4. package/dist/common/action-api-client.js +78 -0
  5. package/dist/common/action-api-client.js.map +1 -0
  6. package/dist/common/slippage.d.ts +15 -0
  7. package/dist/common/slippage.d.ts.map +1 -0
  8. package/dist/common/slippage.js +26 -0
  9. package/dist/common/slippage.js.map +1 -0
  10. package/dist/index.d.ts +25 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +35 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/providers/jupiter-swap/config.d.ts +16 -0
  15. package/dist/providers/jupiter-swap/config.d.ts.map +1 -0
  16. package/dist/providers/jupiter-swap/config.js +15 -0
  17. package/dist/providers/jupiter-swap/config.js.map +1 -0
  18. package/dist/providers/jupiter-swap/index.d.ts +11 -0
  19. package/dist/providers/jupiter-swap/index.d.ts.map +1 -0
  20. package/dist/providers/jupiter-swap/index.js +102 -0
  21. package/dist/providers/jupiter-swap/index.js.map +1 -0
  22. package/dist/providers/jupiter-swap/jupiter-api-client.d.ts +23 -0
  23. package/dist/providers/jupiter-swap/jupiter-api-client.d.ts.map +1 -0
  24. package/dist/providers/jupiter-swap/jupiter-api-client.js +37 -0
  25. package/dist/providers/jupiter-swap/jupiter-api-client.js.map +1 -0
  26. package/dist/providers/jupiter-swap/schemas.d.ts +743 -0
  27. package/dist/providers/jupiter-swap/schemas.d.ts.map +1 -0
  28. package/dist/providers/jupiter-swap/schemas.js +57 -0
  29. package/dist/providers/jupiter-swap/schemas.js.map +1 -0
  30. package/package.json +46 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 WAIaaS Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Base HTTP client for DeFi Action Providers.
3
+ * Uses native fetch + AbortController with Zod runtime validation.
4
+ */
5
+ import type { z } from 'zod';
6
+ export declare class ActionApiClient {
7
+ private readonly timeoutMs;
8
+ private readonly headers;
9
+ private readonly _baseUrl;
10
+ constructor(baseUrl: string, timeoutMs?: number, headers?: Record<string, string>);
11
+ get<T>(path: string, schema: z.ZodType<T>, params?: Record<string, string>): Promise<T>;
12
+ post<T>(path: string, body: unknown, schema: z.ZodType<T>): Promise<T>;
13
+ }
14
+ //# sourceMappingURL=action-api-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-api-client.d.ts","sourceRoot":"","sources":["../../src/common/action-api-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAG7B,qBAAa,eAAe;IAKxB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAL1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAGhC,OAAO,EAAE,MAAM,EACE,SAAS,GAAE,MAAe,EAC1B,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAMjD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IA8BvF,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CA6B7E"}
@@ -0,0 +1,78 @@
1
+ import { ChainError } from '@waiaas/core';
2
+ export class ActionApiClient {
3
+ timeoutMs;
4
+ headers;
5
+ _baseUrl;
6
+ constructor(baseUrl, timeoutMs = 10_000, headers = {}) {
7
+ this.timeoutMs = timeoutMs;
8
+ this.headers = headers;
9
+ // Ensure trailing slash so relative path resolution works correctly
10
+ this._baseUrl = baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`;
11
+ }
12
+ async get(path, schema, params) {
13
+ const url = new URL(path, this._baseUrl);
14
+ if (params)
15
+ Object.entries(params).forEach(([k, v]) => url.searchParams.set(k, v));
16
+ const controller = new AbortController();
17
+ const timeoutId = setTimeout(() => controller.abort(), this.timeoutMs);
18
+ try {
19
+ const res = await fetch(url.toString(), {
20
+ signal: controller.signal,
21
+ headers: this.headers,
22
+ });
23
+ if (!res.ok) {
24
+ const body = await res.text();
25
+ if (res.status === 429) {
26
+ throw new ChainError('ACTION_RATE_LIMITED', 'api', { message: `Rate limited: ${body}` });
27
+ }
28
+ throw new ChainError('ACTION_API_ERROR', 'api', { message: `API error ${res.status}: ${body}` });
29
+ }
30
+ const data = await res.json();
31
+ return schema.parse(data);
32
+ }
33
+ catch (err) {
34
+ if (err instanceof ChainError)
35
+ throw err;
36
+ if (err instanceof Error && err.name === 'AbortError') {
37
+ throw new ChainError('ACTION_API_TIMEOUT', 'api', { message: `API timeout after ${this.timeoutMs}ms` });
38
+ }
39
+ throw err;
40
+ }
41
+ finally {
42
+ clearTimeout(timeoutId);
43
+ }
44
+ }
45
+ async post(path, body, schema) {
46
+ const controller = new AbortController();
47
+ const timeoutId = setTimeout(() => controller.abort(), this.timeoutMs);
48
+ try {
49
+ const res = await fetch(new URL(path, this._baseUrl).toString(), {
50
+ method: 'POST',
51
+ signal: controller.signal,
52
+ headers: { ...this.headers, 'Content-Type': 'application/json' },
53
+ body: JSON.stringify(body),
54
+ });
55
+ if (!res.ok) {
56
+ const text = await res.text();
57
+ if (res.status === 429) {
58
+ throw new ChainError('ACTION_RATE_LIMITED', 'api', { message: `Rate limited: ${text}` });
59
+ }
60
+ throw new ChainError('ACTION_API_ERROR', 'api', { message: `API error ${res.status}: ${text}` });
61
+ }
62
+ const data = await res.json();
63
+ return schema.parse(data);
64
+ }
65
+ catch (err) {
66
+ if (err instanceof ChainError)
67
+ throw err;
68
+ if (err instanceof Error && err.name === 'AbortError') {
69
+ throw new ChainError('ACTION_API_TIMEOUT', 'api', { message: `API timeout after ${this.timeoutMs}ms` });
70
+ }
71
+ throw err;
72
+ }
73
+ finally {
74
+ clearTimeout(timeoutId);
75
+ }
76
+ }
77
+ }
78
+ //# sourceMappingURL=action-api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-api-client.js","sourceRoot":"","sources":["../../src/common/action-api-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Slippage utilities with branded types to prevent unit confusion.
3
+ */
4
+ export type SlippageBps = number & {
5
+ __brand: 'bps';
6
+ };
7
+ export type SlippagePct = number & {
8
+ __brand: 'pct';
9
+ };
10
+ export declare function asBps(value: number): SlippageBps;
11
+ export declare function asPct(value: number): SlippagePct;
12
+ export declare function clampSlippageBps(input: number, defaultBps: SlippageBps, maxBps: SlippageBps): SlippageBps;
13
+ export declare function bpsToPct(bps: SlippageBps): number;
14
+ export declare function pctToBps(pct: SlippagePct): SlippageBps;
15
+ //# sourceMappingURL=slippage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slippage.d.ts","sourceRoot":"","sources":["../../src/common/slippage.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,KAAK,CAAA;CAAE,CAAC;AACtD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,KAAK,CAAA;CAAE,CAAC;AAEtD,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAKhD;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAKhD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,GAAG,WAAW,CAGzG;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAEjD;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,WAAW,GAAG,WAAW,CAEtD"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Slippage utilities with branded types to prevent unit confusion.
3
+ */
4
+ export function asBps(value) {
5
+ if (!Number.isInteger(value) || value < 1 || value > 10000) {
6
+ throw new Error(`Invalid bps value: ${value} (must be integer 1-10000)`);
7
+ }
8
+ return value;
9
+ }
10
+ export function asPct(value) {
11
+ if (value < 0.001 || value > 1.0) {
12
+ throw new Error(`Invalid pct value: ${value} (must be 0.001-1.0)`);
13
+ }
14
+ return value;
15
+ }
16
+ export function clampSlippageBps(input, defaultBps, maxBps) {
17
+ const value = input <= 0 ? defaultBps : Math.min(input, maxBps);
18
+ return asBps(Math.round(value));
19
+ }
20
+ export function bpsToPct(bps) {
21
+ return bps / 10000;
22
+ }
23
+ export function pctToBps(pct) {
24
+ return asBps(Math.round(pct * 10000));
25
+ }
26
+ //# sourceMappingURL=slippage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slippage.js","sourceRoot":"","sources":["../../src/common/slippage.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,UAAU,KAAK,CAAC,KAAa;IACjC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,4BAA4B,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,KAAoB,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,KAAa;IACjC,IAAI,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,sBAAsB,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,KAAoB,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,UAAuB,EAAE,MAAmB;IAC1F,MAAM,KAAK,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAChE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAgB;IACvC,OAAO,GAAG,GAAG,KAAK,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAgB;IACvC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * WAIaaS built-in DeFi Action Provider implementations.
3
+ *
4
+ * Exports registerBuiltInProviders() for daemon lifecycle integration
5
+ * and individual provider classes for direct usage.
6
+ */
7
+ import type { IActionProvider } from '@waiaas/core';
8
+ export { JupiterSwapActionProvider } from './providers/jupiter-swap/index.js';
9
+ export { JUPITER_PROGRAM_ID, JUPITER_SWAP_DEFAULTS } from './providers/jupiter-swap/config.js';
10
+ export type { JupiterSwapConfig } from './providers/jupiter-swap/config.js';
11
+ export { ActionApiClient } from './common/action-api-client.js';
12
+ export { asBps, asPct, clampSlippageBps, bpsToPct, pctToBps } from './common/slippage.js';
13
+ export type { SlippageBps, SlippagePct } from './common/slippage.js';
14
+ interface ActionsConfig {
15
+ jupiter_swap?: Partial<import('./providers/jupiter-swap/config.js').JupiterSwapConfig>;
16
+ [key: string]: unknown;
17
+ }
18
+ interface ProviderRegistry {
19
+ register(provider: IActionProvider): void;
20
+ }
21
+ export declare function registerBuiltInProviders(registry: ProviderRegistry, actionsConfig?: ActionsConfig): {
22
+ loaded: string[];
23
+ skipped: string[];
24
+ };
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAIpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC/F,YAAY,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAG5E,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC1F,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAMrE,UAAU,aAAa;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC,OAAO,oCAAoC,EAAE,iBAAiB,CAAC,CAAC;IACvF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,UAAU,gBAAgB;IACxB,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;CAC3C;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,gBAAgB,EAC1B,aAAa,CAAC,EAAE,aAAa,GAC5B;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CA2BzC"}
package/dist/index.js ADDED
@@ -0,0 +1,35 @@
1
+ import { JupiterSwapActionProvider } from './providers/jupiter-swap/index.js';
2
+ // Re-export provider classes
3
+ export { JupiterSwapActionProvider } from './providers/jupiter-swap/index.js';
4
+ export { JUPITER_PROGRAM_ID, JUPITER_SWAP_DEFAULTS } from './providers/jupiter-swap/config.js';
5
+ // Re-export common utilities
6
+ export { ActionApiClient } from './common/action-api-client.js';
7
+ export { asBps, asPct, clampSlippageBps, bpsToPct, pctToBps } from './common/slippage.js';
8
+ export function registerBuiltInProviders(registry, actionsConfig) {
9
+ const loaded = [];
10
+ const skipped = [];
11
+ const providers = [
12
+ {
13
+ key: 'jupiter_swap',
14
+ factory: () => new JupiterSwapActionProvider(actionsConfig?.jupiter_swap),
15
+ },
16
+ ];
17
+ for (const { key, factory } of providers) {
18
+ const cfg = actionsConfig?.[key];
19
+ if (cfg?.enabled) {
20
+ try {
21
+ registry.register(factory());
22
+ loaded.push(key);
23
+ }
24
+ catch (err) {
25
+ console.warn(`Built-in provider '${key}' registration failed:`, err);
26
+ skipped.push(key);
27
+ }
28
+ }
29
+ else {
30
+ skipped.push(key);
31
+ }
32
+ }
33
+ return { loaded, skipped };
34
+ }
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,6BAA6B;AAC7B,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAG/F,6BAA6B;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAgB1F,MAAM,UAAU,wBAAwB,CACtC,QAA0B,EAC1B,aAA6B;IAE7B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,MAAM,SAAS,GAA2D;QACxE;YACE,GAAG,EAAE,cAAc;YACnB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,yBAAyB,CAAC,aAAa,EAAE,YAAY,CAAC;SAC1E;KACF,CAAC;IAEF,KAAK,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,SAAS,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC,GAAG,CAAsC,CAAC;QACtE,IAAI,GAAG,EAAE,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC7B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,sBAAsB,GAAG,wBAAwB,EAAE,GAAG,CAAC,CAAC;gBACrE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Jupiter Swap configuration type and defaults.
3
+ */
4
+ export interface JupiterSwapConfig {
5
+ enabled: boolean;
6
+ apiBaseUrl: string;
7
+ apiKey: string;
8
+ defaultSlippageBps: number;
9
+ maxSlippageBps: number;
10
+ maxPriceImpactPct: number;
11
+ jitoTipLamports: number;
12
+ requestTimeoutMs: number;
13
+ }
14
+ export declare const JUPITER_SWAP_DEFAULTS: JupiterSwapConfig;
15
+ export declare const JUPITER_PROGRAM_ID = "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4";
16
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/providers/jupiter-swap/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,qBAAqB,EAAE,iBASnC,CAAC;AAEF,eAAO,MAAM,kBAAkB,gDAAgD,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Jupiter Swap configuration type and defaults.
3
+ */
4
+ export const JUPITER_SWAP_DEFAULTS = {
5
+ enabled: false,
6
+ apiBaseUrl: 'https://api.jup.ag/swap/v1',
7
+ apiKey: '',
8
+ defaultSlippageBps: 50, // 0.5%
9
+ maxSlippageBps: 500, // 5%
10
+ maxPriceImpactPct: 1.0, // 1%
11
+ jitoTipLamports: 1000,
12
+ requestTimeoutMs: 10_000,
13
+ };
14
+ export const JUPITER_PROGRAM_ID = 'JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4';
15
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/providers/jupiter-swap/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,MAAM,CAAC,MAAM,qBAAqB,GAAsB;IACtD,OAAO,EAAE,KAAK;IACd,UAAU,EAAE,4BAA4B;IACxC,MAAM,EAAE,EAAE;IACV,kBAAkB,EAAE,EAAE,EAAK,OAAO;IAClC,cAAc,EAAE,GAAG,EAAQ,KAAK;IAChC,iBAAiB,EAAE,GAAG,EAAK,KAAK;IAChC,eAAe,EAAE,IAAI;IACrB,gBAAgB,EAAE,MAAM;CACzB,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,6CAA6C,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { IActionProvider, ActionProviderMetadata, ActionDefinition, ActionContext, ContractCallRequest } from '@waiaas/core';
2
+ import { type JupiterSwapConfig } from './config.js';
3
+ export declare class JupiterSwapActionProvider implements IActionProvider {
4
+ readonly metadata: ActionProviderMetadata;
5
+ readonly actions: readonly ActionDefinition[];
6
+ private readonly config;
7
+ private readonly apiClient;
8
+ constructor(config?: Partial<JupiterSwapConfig>);
9
+ resolve(actionName: string, params: Record<string, unknown>, context: ActionContext): Promise<ContractCallRequest>;
10
+ }
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/jupiter-swap/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACpB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,KAAK,iBAAiB,EAA6C,MAAM,aAAa,CAAC;AAkBhG,qBAAa,yBAA0B,YAAW,eAAe;IAC/D,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAE9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;gBAEjC,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC;IA0BzC,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,mBAAmB,CAAC;CAsEhC"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Jupiter Swap Action Provider.
3
+ *
4
+ * Implements IActionProvider to resolve Jupiter DEX swap requests
5
+ * into ContractCallRequest objects for the 6-stage pipeline.
6
+ */
7
+ import { z } from 'zod';
8
+ import { ChainError } from '@waiaas/core';
9
+ import { JupiterApiClient } from './jupiter-api-client.js';
10
+ import { JUPITER_SWAP_DEFAULTS, JUPITER_PROGRAM_ID } from './config.js';
11
+ import { clampSlippageBps, asBps } from '../../common/slippage.js';
12
+ // ---------------------------------------------------------------------------
13
+ // Input schema for the swap action
14
+ // ---------------------------------------------------------------------------
15
+ const SwapInputSchema = z.object({
16
+ inputMint: z.string().min(1, 'inputMint is required'),
17
+ outputMint: z.string().min(1, 'outputMint is required'),
18
+ amount: z.string().min(1, 'amount is required (in smallest units)'),
19
+ slippageBps: z.number().int().optional(),
20
+ });
21
+ // ---------------------------------------------------------------------------
22
+ // Provider implementation
23
+ // ---------------------------------------------------------------------------
24
+ export class JupiterSwapActionProvider {
25
+ metadata;
26
+ actions;
27
+ config;
28
+ apiClient;
29
+ constructor(config) {
30
+ this.config = { ...JUPITER_SWAP_DEFAULTS, ...config };
31
+ this.apiClient = new JupiterApiClient(this.config);
32
+ this.metadata = {
33
+ name: 'jupiter_swap',
34
+ description: 'Jupiter DEX aggregator for Solana token swaps with MEV protection',
35
+ version: '1.0.0',
36
+ chains: ['solana'],
37
+ mcpExpose: true,
38
+ requiresApiKey: false,
39
+ requiredApis: ['jupiter'],
40
+ };
41
+ this.actions = [
42
+ {
43
+ name: 'swap',
44
+ description: 'Swap tokens on Solana via Jupiter aggregator with slippage protection and Jito MEV tips',
45
+ chain: 'solana',
46
+ inputSchema: SwapInputSchema,
47
+ riskLevel: 'medium',
48
+ defaultTier: 'DELAY',
49
+ },
50
+ ];
51
+ }
52
+ async resolve(actionName, params, context) {
53
+ if (actionName !== 'swap') {
54
+ throw new ChainError('INVALID_INSTRUCTION', 'solana', { message: `Unknown action: ${actionName}` });
55
+ }
56
+ const input = SwapInputSchema.parse(params);
57
+ // SAFE-05: Block same-token swap
58
+ if (input.inputMint === input.outputMint) {
59
+ throw new ChainError('INVALID_INSTRUCTION', 'solana', { message: 'Cannot swap a token for itself' });
60
+ }
61
+ // SAFE-01/02: Clamp slippage
62
+ const slippageBps = clampSlippageBps(input.slippageBps ?? 0, asBps(this.config.defaultSlippageBps), asBps(this.config.maxSlippageBps));
63
+ // SWAP-01/06: Get quote with restrictIntermediateTokens=true
64
+ const quote = await this.apiClient.getQuote({
65
+ inputMint: input.inputMint,
66
+ outputMint: input.outputMint,
67
+ amount: input.amount,
68
+ slippageBps,
69
+ restrictIntermediateTokens: true,
70
+ });
71
+ // SAFE-03: Price impact check
72
+ const priceImpact = parseFloat(quote.priceImpactPct);
73
+ if (priceImpact > this.config.maxPriceImpactPct) {
74
+ throw new ChainError('PRICE_IMPACT_TOO_HIGH', 'solana', { message: `Price impact ${priceImpact}% exceeds max ${this.config.maxPriceImpactPct}%` });
75
+ }
76
+ // SWAP-02/SAFE-04: Get swap instructions with Jito MEV tip
77
+ const instructions = await this.apiClient.getSwapInstructions({
78
+ quoteResponse: quote,
79
+ userPublicKey: context.walletAddress,
80
+ jitoTipLamports: this.config.jitoTipLamports,
81
+ });
82
+ // SWAP-05: Verify program ID
83
+ if (instructions.swapInstruction.programId !== JUPITER_PROGRAM_ID) {
84
+ throw new ChainError('INVALID_INSTRUCTION', 'solana', { message: `Unexpected program ID: ${instructions.swapInstruction.programId} (expected ${JUPITER_PROGRAM_ID})` });
85
+ }
86
+ // SWAP-03: Convert to ContractCallRequest
87
+ const request = {
88
+ type: 'CONTRACT_CALL',
89
+ to: JUPITER_PROGRAM_ID,
90
+ programId: instructions.swapInstruction.programId,
91
+ instructionData: instructions.swapInstruction.data,
92
+ accounts: instructions.swapInstruction.accounts.map((a) => ({
93
+ pubkey: a.pubkey,
94
+ isSigner: a.isSigner,
95
+ isWritable: a.isWritable,
96
+ })),
97
+ network: context.chain === 'solana' ? undefined : undefined,
98
+ };
99
+ return request;
100
+ }
101
+ }
102
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/jupiter-swap/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Jupiter REST API client (v1).
3
+ * Wraps /swap/v1/quote and /swap/v1/swap-instructions endpoints.
4
+ */
5
+ import { ActionApiClient } from '../../common/action-api-client.js';
6
+ import type { QuoteResponse, SwapInstructionsResponse } from './schemas.js';
7
+ import type { JupiterSwapConfig } from './config.js';
8
+ export declare class JupiterApiClient extends ActionApiClient {
9
+ constructor(config: JupiterSwapConfig);
10
+ getQuote(params: {
11
+ inputMint: string;
12
+ outputMint: string;
13
+ amount: string;
14
+ slippageBps: number;
15
+ restrictIntermediateTokens?: boolean;
16
+ }): Promise<QuoteResponse>;
17
+ getSwapInstructions(params: {
18
+ quoteResponse: QuoteResponse;
19
+ userPublicKey: string;
20
+ jitoTipLamports?: number;
21
+ }): Promise<SwapInstructionsResponse>;
22
+ }
23
+ //# sourceMappingURL=jupiter-api-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jupiter-api-client.d.ts","sourceRoot":"","sources":["../../../src/providers/jupiter-swap/jupiter-api-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEpE,OAAO,KAAK,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,qBAAa,gBAAiB,SAAQ,eAAe;gBACvC,MAAM,EAAE,iBAAiB;IAQ/B,QAAQ,CAAC,MAAM,EAAE;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,0BAA0B,CAAC,EAAE,OAAO,CAAC;KACtC,GAAG,OAAO,CAAC,aAAa,CAAC;IAUpB,mBAAmB,CAAC,MAAM,EAAE;QAChC,aAAa,EAAE,aAAa,CAAC;QAC7B,aAAa,EAAE,MAAM,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,GAAG,OAAO,CAAC,wBAAwB,CAAC;CAYtC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Jupiter REST API client (v1).
3
+ * Wraps /swap/v1/quote and /swap/v1/swap-instructions endpoints.
4
+ */
5
+ import { ActionApiClient } from '../../common/action-api-client.js';
6
+ import { QuoteResponseSchema, SwapInstructionsResponseSchema } from './schemas.js';
7
+ export class JupiterApiClient extends ActionApiClient {
8
+ constructor(config) {
9
+ const headers = {};
10
+ if (config.apiKey) {
11
+ headers['x-api-key'] = config.apiKey;
12
+ }
13
+ super(config.apiBaseUrl, config.requestTimeoutMs, headers);
14
+ }
15
+ async getQuote(params) {
16
+ return this.get('quote', QuoteResponseSchema, {
17
+ inputMint: params.inputMint,
18
+ outputMint: params.outputMint,
19
+ amount: params.amount,
20
+ slippageBps: String(params.slippageBps),
21
+ restrictIntermediateTokens: String(params.restrictIntermediateTokens ?? true),
22
+ });
23
+ }
24
+ async getSwapInstructions(params) {
25
+ const body = {
26
+ quoteResponse: params.quoteResponse,
27
+ userPublicKey: params.userPublicKey,
28
+ };
29
+ if (params.jitoTipLamports && params.jitoTipLamports > 0) {
30
+ body.prioritizationFeeLamports = {
31
+ jitoTipLamports: params.jitoTipLamports,
32
+ };
33
+ }
34
+ return this.post('swap-instructions', body, SwapInstructionsResponseSchema);
35
+ }
36
+ }
37
+ //# sourceMappingURL=jupiter-api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jupiter-api-client.js","sourceRoot":"","sources":["../../../src/providers/jupiter-swap/jupiter-api-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAInF,MAAM,OAAO,gBAAiB,SAAQ,eAAe;IACnD,YAAY,MAAyB;QACnC,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACvC,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAMd;QACC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,mBAAmB,EAAE;YAC5C,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;YACvC,0BAA0B,EAAE,MAAM,CAAC,MAAM,CAAC,0BAA0B,IAAI,IAAI,CAAC;SAC9E,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,MAIzB;QACC,MAAM,IAAI,GAA4B;YACpC,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC,CAAC;QACF,IAAI,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC;YACzD,IAAI,CAAC,yBAAyB,GAAG;gBAC/B,eAAe,EAAE,MAAM,CAAC,eAAe;aACxC,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,EAAE,8BAA8B,CAAC,CAAC;IAC9E,CAAC;CACF"}