genius-intents 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +45 -0
- package/LICENSE +21 -0
- package/README.md +376 -0
- package/dist/src/index.d.ts +27 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +62 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/intents-protocols.d.ts +69 -0
- package/dist/src/intents-protocols.d.ts.map +1 -0
- package/dist/src/intents-protocols.js +371 -0
- package/dist/src/intents-protocols.js.map +1 -0
- package/dist/src/interfaces/intent-protocol.d.ts +21 -0
- package/dist/src/interfaces/intent-protocol.d.ts.map +1 -0
- package/dist/src/interfaces/intent-protocol.js +3 -0
- package/dist/src/interfaces/intent-protocol.js.map +1 -0
- package/dist/src/protocols/aftermath/aftermath.service.d.ts +28 -0
- package/dist/src/protocols/aftermath/aftermath.service.d.ts.map +1 -0
- package/dist/src/protocols/aftermath/aftermath.service.js +162 -0
- package/dist/src/protocols/aftermath/aftermath.service.js.map +1 -0
- package/dist/src/protocols/aftermath/aftermath.types.d.ts +100 -0
- package/dist/src/protocols/aftermath/aftermath.types.d.ts.map +1 -0
- package/dist/src/protocols/aftermath/aftermath.types.js +3 -0
- package/dist/src/protocols/aftermath/aftermath.types.js.map +1 -0
- package/dist/src/protocols/aftermath/index.d.ts +3 -0
- package/dist/src/protocols/aftermath/index.d.ts.map +1 -0
- package/dist/src/protocols/aftermath/index.js +7 -0
- package/dist/src/protocols/aftermath/index.js.map +1 -0
- package/dist/src/protocols/debridge/debridge.service.d.ts +157 -0
- package/dist/src/protocols/debridge/debridge.service.d.ts.map +1 -0
- package/dist/src/protocols/debridge/debridge.service.js +462 -0
- package/dist/src/protocols/debridge/debridge.service.js.map +1 -0
- package/dist/src/protocols/debridge/debridge.types.d.ts +82 -0
- package/dist/src/protocols/debridge/debridge.types.d.ts.map +1 -0
- package/dist/src/protocols/debridge/debridge.types.js +3 -0
- package/dist/src/protocols/debridge/debridge.types.js.map +1 -0
- package/dist/src/protocols/debridge/index.d.ts +3 -0
- package/dist/src/protocols/debridge/index.d.ts.map +1 -0
- package/dist/src/protocols/debridge/index.js +7 -0
- package/dist/src/protocols/debridge/index.js.map +1 -0
- package/dist/src/protocols/genius-bridge/genius-bridge.service.d.ts +36 -0
- package/dist/src/protocols/genius-bridge/genius-bridge.service.d.ts.map +1 -0
- package/dist/src/protocols/genius-bridge/genius-bridge.service.js +312 -0
- package/dist/src/protocols/genius-bridge/genius-bridge.service.js.map +1 -0
- package/dist/src/protocols/genius-bridge/genius-bridge.types.d.ts +100 -0
- package/dist/src/protocols/genius-bridge/genius-bridge.types.d.ts.map +1 -0
- package/dist/src/protocols/genius-bridge/genius-bridge.types.js +3 -0
- package/dist/src/protocols/genius-bridge/genius-bridge.types.js.map +1 -0
- package/dist/src/protocols/genius-bridge/index.d.ts +3 -0
- package/dist/src/protocols/genius-bridge/index.d.ts.map +1 -0
- package/dist/src/protocols/genius-bridge/index.js +7 -0
- package/dist/src/protocols/genius-bridge/index.js.map +1 -0
- package/dist/src/protocols/jupiter/index.d.ts +3 -0
- package/dist/src/protocols/jupiter/index.d.ts.map +1 -0
- package/dist/src/protocols/jupiter/index.js +7 -0
- package/dist/src/protocols/jupiter/index.js.map +1 -0
- package/dist/src/protocols/jupiter/jupiter.service.d.ts +37 -0
- package/dist/src/protocols/jupiter/jupiter.service.d.ts.map +1 -0
- package/dist/src/protocols/jupiter/jupiter.service.js +188 -0
- package/dist/src/protocols/jupiter/jupiter.service.js.map +1 -0
- package/dist/src/protocols/jupiter/jupiter.types.d.ts +272 -0
- package/dist/src/protocols/jupiter/jupiter.types.d.ts.map +1 -0
- package/dist/src/protocols/jupiter/jupiter.types.js +3 -0
- package/dist/src/protocols/jupiter/jupiter.types.js.map +1 -0
- package/dist/src/protocols/kyberswap/index.d.ts +3 -0
- package/dist/src/protocols/kyberswap/index.d.ts.map +1 -0
- package/dist/src/protocols/kyberswap/index.js +7 -0
- package/dist/src/protocols/kyberswap/index.js.map +1 -0
- package/dist/src/protocols/kyberswap/kyberswap.service.d.ts +34 -0
- package/dist/src/protocols/kyberswap/kyberswap.service.d.ts.map +1 -0
- package/dist/src/protocols/kyberswap/kyberswap.service.js +218 -0
- package/dist/src/protocols/kyberswap/kyberswap.service.js.map +1 -0
- package/dist/src/protocols/kyberswap/kyberswap.types.d.ts +114 -0
- package/dist/src/protocols/kyberswap/kyberswap.types.d.ts.map +1 -0
- package/dist/src/protocols/kyberswap/kyberswap.types.js +3 -0
- package/dist/src/protocols/kyberswap/kyberswap.types.js.map +1 -0
- package/dist/src/protocols/odos/index.d.ts +3 -0
- package/dist/src/protocols/odos/index.d.ts.map +1 -0
- package/dist/src/protocols/odos/index.js +7 -0
- package/dist/src/protocols/odos/index.js.map +1 -0
- package/dist/src/protocols/odos/odos.service.d.ts +39 -0
- package/dist/src/protocols/odos/odos.service.d.ts.map +1 -0
- package/dist/src/protocols/odos/odos.service.js +207 -0
- package/dist/src/protocols/odos/odos.service.js.map +1 -0
- package/dist/src/protocols/odos/odos.types.d.ts +114 -0
- package/dist/src/protocols/odos/odos.types.d.ts.map +1 -0
- package/dist/src/protocols/odos/odos.types.js +3 -0
- package/dist/src/protocols/odos/odos.types.js.map +1 -0
- package/dist/src/protocols/okx/index.d.ts +3 -0
- package/dist/src/protocols/okx/index.d.ts.map +1 -0
- package/dist/src/protocols/okx/index.js +7 -0
- package/dist/src/protocols/okx/index.js.map +1 -0
- package/dist/src/protocols/okx/okx.service.d.ts +36 -0
- package/dist/src/protocols/okx/okx.service.d.ts.map +1 -0
- package/dist/src/protocols/okx/okx.service.js +281 -0
- package/dist/src/protocols/okx/okx.service.js.map +1 -0
- package/dist/src/protocols/okx/okx.types.d.ts +119 -0
- package/dist/src/protocols/okx/okx.types.d.ts.map +1 -0
- package/dist/src/protocols/okx/okx.types.js +4 -0
- package/dist/src/protocols/okx/okx.types.js.map +1 -0
- package/dist/src/protocols/okx-bridge/okx-bridge.service.d.ts +1 -0
- package/dist/src/protocols/okx-bridge/okx-bridge.service.d.ts.map +1 -0
- package/dist/src/protocols/okx-bridge/okx-bridge.service.js +2 -0
- package/dist/src/protocols/okx-bridge/okx-bridge.service.js.map +1 -0
- package/dist/src/protocols/okx-bridge/okx-bridge.types.d.ts +1 -0
- package/dist/src/protocols/okx-bridge/okx-bridge.types.d.ts.map +1 -0
- package/dist/src/protocols/okx-bridge/okx-bridge.types.js +2 -0
- package/dist/src/protocols/okx-bridge/okx-bridge.types.js.map +1 -0
- package/dist/src/protocols/openocean/index.d.ts +3 -0
- package/dist/src/protocols/openocean/index.d.ts.map +1 -0
- package/dist/src/protocols/openocean/index.js +7 -0
- package/dist/src/protocols/openocean/index.js.map +1 -0
- package/dist/src/protocols/openocean/openocean.service.d.ts +29 -0
- package/dist/src/protocols/openocean/openocean.service.d.ts.map +1 -0
- package/dist/src/protocols/openocean/openocean.service.js +181 -0
- package/dist/src/protocols/openocean/openocean.service.js.map +1 -0
- package/dist/src/protocols/openocean/openocean.types.d.ts +68 -0
- package/dist/src/protocols/openocean/openocean.types.d.ts.map +1 -0
- package/dist/src/protocols/openocean/openocean.types.js +3 -0
- package/dist/src/protocols/openocean/openocean.types.js.map +1 -0
- package/dist/src/protocols/pumpfun/index.d.ts +3 -0
- package/dist/src/protocols/pumpfun/index.d.ts.map +1 -0
- package/dist/src/protocols/pumpfun/index.js +7 -0
- package/dist/src/protocols/pumpfun/index.js.map +1 -0
- package/dist/src/protocols/pumpfun/pumpfun.service.d.ts +45 -0
- package/dist/src/protocols/pumpfun/pumpfun.service.d.ts.map +1 -0
- package/dist/src/protocols/pumpfun/pumpfun.service.js +217 -0
- package/dist/src/protocols/pumpfun/pumpfun.service.js.map +1 -0
- package/dist/src/protocols/pumpfun/pumpfun.types.d.ts +14 -0
- package/dist/src/protocols/pumpfun/pumpfun.types.d.ts.map +1 -0
- package/dist/src/protocols/pumpfun/pumpfun.types.js +3 -0
- package/dist/src/protocols/pumpfun/pumpfun.types.js.map +1 -0
- package/dist/src/protocols/raydium/index.d.ts +3 -0
- package/dist/src/protocols/raydium/index.d.ts.map +1 -0
- package/dist/src/protocols/raydium/index.js +7 -0
- package/dist/src/protocols/raydium/index.js.map +1 -0
- package/dist/src/protocols/raydium/raydium-v2.service.d.ts +35 -0
- package/dist/src/protocols/raydium/raydium-v2.service.d.ts.map +1 -0
- package/dist/src/protocols/raydium/raydium-v2.service.js +301 -0
- package/dist/src/protocols/raydium/raydium-v2.service.js.map +1 -0
- package/dist/src/protocols/raydium/raydium-v2.types.d.ts +96 -0
- package/dist/src/protocols/raydium/raydium-v2.types.d.ts.map +1 -0
- package/dist/src/protocols/raydium/raydium-v2.types.js +3 -0
- package/dist/src/protocols/raydium/raydium-v2.types.js.map +1 -0
- package/dist/src/protocols/zeroX/index.d.ts +3 -0
- package/dist/src/protocols/zeroX/index.d.ts.map +1 -0
- package/dist/src/protocols/zeroX/index.js +7 -0
- package/dist/src/protocols/zeroX/index.js.map +1 -0
- package/dist/src/protocols/zeroX/zeroX.service.d.ts +37 -0
- package/dist/src/protocols/zeroX/zeroX.service.d.ts.map +1 -0
- package/dist/src/protocols/zeroX/zeroX.service.js +209 -0
- package/dist/src/protocols/zeroX/zeroX.service.js.map +1 -0
- package/dist/src/protocols/zeroX/zeroX.types.d.ts +120 -0
- package/dist/src/protocols/zeroX/zeroX.types.d.ts.map +1 -0
- package/dist/src/protocols/zeroX/zeroX.types.js +3 -0
- package/dist/src/protocols/zeroX/zeroX.types.js.map +1 -0
- package/dist/src/types/enums.d.ts +42 -0
- package/dist/src/types/enums.d.ts.map +1 -0
- package/dist/src/types/enums.js +49 -0
- package/dist/src/types/enums.js.map +1 -0
- package/dist/src/types/intents-protocols.d.ts +89 -0
- package/dist/src/types/intents-protocols.d.ts.map +1 -0
- package/dist/src/types/intents-protocols.js +3 -0
- package/dist/src/types/intents-protocols.js.map +1 -0
- package/dist/src/types/price-response.d.ts +26 -0
- package/dist/src/types/price-response.d.ts.map +1 -0
- package/dist/src/types/price-response.js +3 -0
- package/dist/src/types/price-response.js.map +1 -0
- package/dist/src/types/quote-response.d.ts +31 -0
- package/dist/src/types/quote-response.d.ts.map +1 -0
- package/dist/src/types/quote-response.js +3 -0
- package/dist/src/types/quote-response.js.map +1 -0
- package/dist/src/utils/address-validation.d.ts +9 -0
- package/dist/src/utils/address-validation.d.ts.map +1 -0
- package/dist/src/utils/address-validation.js +42 -0
- package/dist/src/utils/address-validation.js.map +1 -0
- package/dist/src/utils/address.d.ts +9 -0
- package/dist/src/utils/address.d.ts.map +1 -0
- package/dist/src/utils/address.js +74 -0
- package/dist/src/utils/address.js.map +1 -0
- package/dist/src/utils/base64-to-base58.d.ts +2 -0
- package/dist/src/utils/base64-to-base58.d.ts.map +1 -0
- package/dist/src/utils/base64-to-base58.js +22 -0
- package/dist/src/utils/base64-to-base58.js.map +1 -0
- package/dist/src/utils/chain-id-name.d.ts +3 -0
- package/dist/src/utils/chain-id-name.d.ts.map +1 -0
- package/dist/src/utils/chain-id-name.js +23 -0
- package/dist/src/utils/chain-id-name.js.map +1 -0
- package/dist/src/utils/check-vm.d.ts +8 -0
- package/dist/src/utils/check-vm.d.ts.map +1 -0
- package/dist/src/utils/check-vm.js +39 -0
- package/dist/src/utils/check-vm.js.map +1 -0
- package/dist/src/utils/constants.d.ts +7 -0
- package/dist/src/utils/constants.d.ts.map +1 -0
- package/dist/src/utils/constants.js +10 -0
- package/dist/src/utils/constants.js.map +1 -0
- package/dist/src/utils/create-error-message.d.ts +5 -0
- package/dist/src/utils/create-error-message.d.ts.map +1 -0
- package/dist/src/utils/create-error-message.js +42 -0
- package/dist/src/utils/create-error-message.js.map +1 -0
- package/dist/src/utils/fetch-spl-metadata.d.ts +4 -0
- package/dist/src/utils/fetch-spl-metadata.d.ts.map +1 -0
- package/dist/src/utils/fetch-spl-metadata.js +108 -0
- package/dist/src/utils/fetch-spl-metadata.js.map +1 -0
- package/dist/src/utils/is-native.d.ts +2 -0
- package/dist/src/utils/is-native.d.ts.map +1 -0
- package/dist/src/utils/is-native.js +23 -0
- package/dist/src/utils/is-native.js.map +1 -0
- package/dist/src/utils/logger.d.ts +56 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +108 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/throw-error.d.ts +3 -0
- package/dist/src/utils/throw-error.d.ts.map +1 -0
- package/dist/src/utils/throw-error.js +8 -0
- package/dist/src/utils/throw-error.js.map +1 -0
- package/dist/tests/core/intent-protocol-suite.test.d.ts +2 -0
- package/dist/tests/core/intent-protocol-suite.test.d.ts.map +1 -0
- package/dist/tests/core/intent-protocol-suite.test.js +485 -0
- package/dist/tests/core/intent-protocol-suite.test.js.map +1 -0
- package/dist/tests/core/intents-protocols.test.d.ts +2 -0
- package/dist/tests/core/intents-protocols.test.d.ts.map +1 -0
- package/dist/tests/core/intents-protocols.test.js +307 -0
- package/dist/tests/core/intents-protocols.test.js.map +1 -0
- package/dist/tests/core/protocol-test-runner.d.ts +62 -0
- package/dist/tests/core/protocol-test-runner.d.ts.map +1 -0
- package/dist/tests/core/protocol-test-runner.js +260 -0
- package/dist/tests/core/protocol-test-runner.js.map +1 -0
- package/dist/tests/core/setup.test.d.ts +1 -0
- package/dist/tests/core/setup.test.d.ts.map +1 -0
- package/dist/tests/core/setup.test.js +13 -0
- package/dist/tests/core/setup.test.js.map +1 -0
- package/dist/tests/fixtures/test-data.d.ts +84 -0
- package/dist/tests/fixtures/test-data.d.ts.map +1 -0
- package/dist/tests/fixtures/test-data.js +142 -0
- package/dist/tests/fixtures/test-data.js.map +1 -0
- package/dist/tests/integration/cross-chain.test.d.ts +2 -0
- package/dist/tests/integration/cross-chain.test.d.ts.map +1 -0
- package/dist/tests/integration/cross-chain.test.js +44 -0
- package/dist/tests/integration/cross-chain.test.js.map +1 -0
- package/dist/tests/protocols/simple-protocol.test.d.ts +2 -0
- package/dist/tests/protocols/simple-protocol.test.d.ts.map +1 -0
- package/dist/tests/protocols/simple-protocol.test.js +77 -0
- package/dist/tests/protocols/simple-protocol.test.js.map +1 -0
- package/dist/tests/setup.d.ts +24 -0
- package/dist/tests/setup.d.ts.map +1 -0
- package/dist/tests/setup.js +48 -0
- package/dist/tests/setup.js.map +1 -0
- package/dist/tests/utils/test-generator.d.ts +30 -0
- package/dist/tests/utils/test-generator.d.ts.map +1 -0
- package/dist/tests/utils/test-generator.js +153 -0
- package/dist/tests/utils/test-generator.js.map +1 -0
- package/package.json +102 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"okx-bridge.types.js","sourceRoot":"","sources":["../../../../src/protocols/okx-bridge/okx-bridge.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/protocols/openocean/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OpenOceanService = void 0;
|
|
4
|
+
// OpenOcean Protocol - All exports
|
|
5
|
+
var openocean_service_1 = require("./openocean.service");
|
|
6
|
+
Object.defineProperty(exports, "OpenOceanService", { enumerable: true, get: function () { return openocean_service_1.OpenOceanService; } });
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/protocols/openocean/index.ts"],"names":[],"mappings":";;;AAAA,mCAAmC;AACnC,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { IIntentProtocol } from '../../interfaces/intent-protocol';
|
|
2
|
+
import { ChainIdEnum, ProtocolEnum } from '../../types/enums';
|
|
3
|
+
import { IntentPriceParams } from '../../types/price-params';
|
|
4
|
+
import { PriceResponse, RawProtocolPriceResponse } from '../../types/price-response';
|
|
5
|
+
import { IntentQuoteParams } from '../../types/quote-params';
|
|
6
|
+
import { QuoteResponse } from '../../types/quote-response';
|
|
7
|
+
import { IntentsSDKConfig } from '../../types/sdk-config';
|
|
8
|
+
import { OpenOceanConfig, OpenOceanPriceResponse } from './openocean.types';
|
|
9
|
+
export declare class OpenOceanService implements IIntentProtocol {
|
|
10
|
+
readonly protocol = ProtocolEnum.OPEN_OCEAN;
|
|
11
|
+
readonly chains: ChainIdEnum[];
|
|
12
|
+
readonly singleChain = true;
|
|
13
|
+
readonly multiChain = false;
|
|
14
|
+
readonly baseUrl: string;
|
|
15
|
+
protected readonly apiVersion: string;
|
|
16
|
+
protected readonly disabledDexIds?: string;
|
|
17
|
+
protected readonly enabledDexIds?: string;
|
|
18
|
+
constructor(config?: IntentsSDKConfig & OpenOceanConfig);
|
|
19
|
+
isCorrectConfig<T extends {
|
|
20
|
+
[key: string]: string;
|
|
21
|
+
}>(_config: {
|
|
22
|
+
[key: string]: string;
|
|
23
|
+
}): _config is T;
|
|
24
|
+
fetchPrice(params: IntentPriceParams): Promise<PriceResponse>;
|
|
25
|
+
fetchQuote(params: IntentQuoteParams): Promise<QuoteResponse>;
|
|
26
|
+
protected validatePriceParams(params: IntentPriceParams): void;
|
|
27
|
+
protected isOpenOceanPriceResponse(response: RawProtocolPriceResponse): response is OpenOceanPriceResponse;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=openocean.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openocean.service.d.ts","sourceRoot":"","sources":["../../../../src/protocols/openocean/openocean.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAgB,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI1D,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAA0B,MAAM,mBAAmB,CAAC;AAKpG,qBAAa,gBAAiB,YAAW,eAAe;IACtD,SAAgB,QAAQ,2BAA2B;IACnD,SAAgB,MAAM,gBAapB;IACF,SAAgB,WAAW,QAAQ;IACnC,SAAgB,UAAU,SAAS;IAEnC,SAAgB,OAAO,EAAE,MAAM,CAAC;IAEhC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IACtC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAC3C,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;gBAE9B,MAAM,CAAC,EAAE,gBAAgB,GAAG,eAAe;IAiBvD,eAAe,CAAC,CAAC,SAAS;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EAAE,OAAO,EAAE;QAC5D,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KACvB,GAAG,OAAO,IAAI,CAAC;IAKH,UAAU,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC;IA+D7D,UAAU,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC;IA6E1E,SAAS,CAAC,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;IAiB9D,SAAS,CAAC,wBAAwB,CAChC,QAAQ,EAAE,wBAAwB,GACjC,QAAQ,IAAI,sBAAsB;CAGtC"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.OpenOceanService = void 0;
|
|
7
|
+
const enums_1 = require("../../types/enums");
|
|
8
|
+
const logger_1 = require("../../utils/logger");
|
|
9
|
+
const throw_error_1 = require("../../utils/throw-error");
|
|
10
|
+
const check_vm_1 = require("../../utils/check-vm");
|
|
11
|
+
const create_error_message_1 = require("../../utils/create-error-message");
|
|
12
|
+
const axios_1 = __importDefault(require("axios"));
|
|
13
|
+
let logger;
|
|
14
|
+
class OpenOceanService {
|
|
15
|
+
constructor(config) {
|
|
16
|
+
this.protocol = enums_1.ProtocolEnum.OPEN_OCEAN;
|
|
17
|
+
this.chains = [
|
|
18
|
+
enums_1.ChainIdEnum.ETHEREUM,
|
|
19
|
+
enums_1.ChainIdEnum.ARBITRUM,
|
|
20
|
+
enums_1.ChainIdEnum.OPTIMISM,
|
|
21
|
+
enums_1.ChainIdEnum.POLYGON,
|
|
22
|
+
enums_1.ChainIdEnum.BSC,
|
|
23
|
+
enums_1.ChainIdEnum.AVALANCHE,
|
|
24
|
+
enums_1.ChainIdEnum.BASE,
|
|
25
|
+
enums_1.ChainIdEnum.SOLANA,
|
|
26
|
+
enums_1.ChainIdEnum.SONIC,
|
|
27
|
+
// ChainIdEnum.APTOS,
|
|
28
|
+
// ChainIdEnum.SUI,
|
|
29
|
+
// Add other supported chains
|
|
30
|
+
];
|
|
31
|
+
this.singleChain = true;
|
|
32
|
+
this.multiChain = false;
|
|
33
|
+
if (config?.debug) {
|
|
34
|
+
logger_1.LoggerFactory.configure(logger_1.LoggerFactory.createConsoleLogger({ level: logger_1.LogLevelEnum.DEBUG }));
|
|
35
|
+
}
|
|
36
|
+
// Use custom logger if provided
|
|
37
|
+
else if (config?.logger) {
|
|
38
|
+
logger_1.LoggerFactory.configure(config.logger);
|
|
39
|
+
}
|
|
40
|
+
logger = logger_1.LoggerFactory.getLogger();
|
|
41
|
+
// Apply configuration with defaults
|
|
42
|
+
this.baseUrl = config?.openOceanPrivateUrl || 'https://open-api.openocean.finance';
|
|
43
|
+
this.apiVersion = config?.openOceanApiVersion || 'v4';
|
|
44
|
+
this.disabledDexIds = config?.openOceanDisabledDexIds;
|
|
45
|
+
this.enabledDexIds = config?.openOceanEnabledDexIds;
|
|
46
|
+
}
|
|
47
|
+
isCorrectConfig(_config) {
|
|
48
|
+
// OpenOcean has no required config fields, all are optional
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
async fetchPrice(params) {
|
|
52
|
+
this.validatePriceParams(params);
|
|
53
|
+
const queryNetwork = (0, check_vm_1.isSolanaNetwork)(params.networkIn) ? 'solana' : params.networkIn;
|
|
54
|
+
try {
|
|
55
|
+
const url = `${this.baseUrl}/${this.apiVersion}/${queryNetwork}/quote`;
|
|
56
|
+
const queryParams = {
|
|
57
|
+
inTokenAddress: params.tokenIn,
|
|
58
|
+
outTokenAddress: params.tokenOut,
|
|
59
|
+
amount: params.amountIn,
|
|
60
|
+
disabledDexIds: this.disabledDexIds,
|
|
61
|
+
enabledDexIds: this.enabledDexIds,
|
|
62
|
+
gasPrice: 1,
|
|
63
|
+
};
|
|
64
|
+
const fullUrl = new URL(url);
|
|
65
|
+
Object.entries(queryParams).forEach(([key, value]) => {
|
|
66
|
+
if (value !== undefined) {
|
|
67
|
+
fullUrl.searchParams.append(key, value.toString());
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
logger.debug(`Making OpenOcean price request to: ${fullUrl}`);
|
|
71
|
+
const response = await axios_1.default.get(fullUrl.toString());
|
|
72
|
+
if (response.data.code !== 200 || !response.data.data) {
|
|
73
|
+
throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.PRICE_NOT_FOUND, `OpenOcean API returned error: ${JSON.stringify(response.data)}`);
|
|
74
|
+
}
|
|
75
|
+
const priceData = response.data.data;
|
|
76
|
+
logger.debug('Successfully received price info from OpenOcean', {
|
|
77
|
+
amountOut: priceData.outAmount,
|
|
78
|
+
estimatedGas: priceData.estimatedGas,
|
|
79
|
+
});
|
|
80
|
+
return {
|
|
81
|
+
protocol: this.protocol,
|
|
82
|
+
networkIn: params.networkIn,
|
|
83
|
+
networkOut: params.networkOut,
|
|
84
|
+
tokenIn: params.tokenIn,
|
|
85
|
+
tokenOut: params.tokenOut,
|
|
86
|
+
amountIn: params.amountIn,
|
|
87
|
+
amountOut: priceData.outAmount,
|
|
88
|
+
estimatedGas: priceData.estimatedGas,
|
|
89
|
+
slippage: params.slippage,
|
|
90
|
+
priceImpact: priceData.price_impact ? parseFloat(priceData.price_impact) : undefined,
|
|
91
|
+
protocolResponse: priceData,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
const { errorMessage, errorMessageError } = (0, create_error_message_1.createErrorMessage)(error);
|
|
96
|
+
logger.error(`Failed to fetch swap price from ${this.protocol}`, errorMessageError);
|
|
97
|
+
throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.PRICE_NOT_FOUND, `Failed to fetch OpenOcean price, error: ${errorMessage}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async fetchQuote(params) {
|
|
101
|
+
this.validatePriceParams(params);
|
|
102
|
+
const { from, receiver, tokenIn, amountIn, networkIn, networkOut, slippage, tokenOut } = params;
|
|
103
|
+
const queryNetwork = (0, check_vm_1.isSolanaNetwork)(networkIn) ? 'solana' : networkIn;
|
|
104
|
+
try {
|
|
105
|
+
const url = `${this.baseUrl}/${this.apiVersion}/${queryNetwork}/swap`;
|
|
106
|
+
const queryParams = {
|
|
107
|
+
inTokenAddress: tokenIn,
|
|
108
|
+
outTokenAddress: tokenOut,
|
|
109
|
+
amount: amountIn,
|
|
110
|
+
gasPrice: 1, // Default gas price, could be made configurable
|
|
111
|
+
slippage: slippage.toString(),
|
|
112
|
+
account: from,
|
|
113
|
+
disabledDexIds: this.disabledDexIds,
|
|
114
|
+
enabledDexIds: this.enabledDexIds,
|
|
115
|
+
};
|
|
116
|
+
const fullUrl = new URL(url);
|
|
117
|
+
Object.entries(queryParams).forEach(([key, value]) => {
|
|
118
|
+
if (value !== undefined) {
|
|
119
|
+
fullUrl.searchParams.append(key, value.toString());
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
logger.debug(`Making OpenOcean quote request to: ${fullUrl}`);
|
|
123
|
+
const response = await axios_1.default.get(fullUrl.toString());
|
|
124
|
+
if (response.data.code !== 200 || !response.data.data) {
|
|
125
|
+
throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.QUOTE_NOT_FOUND, `OpenOcean API returned error: ${JSON.stringify(response.data)}`);
|
|
126
|
+
}
|
|
127
|
+
const quoteData = response.data.data;
|
|
128
|
+
logger.debug('Successfully received quote info from OpenOcean', {
|
|
129
|
+
amountOut: quoteData.outAmount,
|
|
130
|
+
estimatedGas: quoteData.estimatedGas,
|
|
131
|
+
});
|
|
132
|
+
return {
|
|
133
|
+
protocol: this.protocol,
|
|
134
|
+
tokenIn: tokenIn,
|
|
135
|
+
tokenOut: params.tokenOut,
|
|
136
|
+
amountIn: amountIn,
|
|
137
|
+
amountOut: quoteData.outAmount,
|
|
138
|
+
from,
|
|
139
|
+
receiver: receiver || from,
|
|
140
|
+
executionPayload: {
|
|
141
|
+
transactionData: {
|
|
142
|
+
data: quoteData.data,
|
|
143
|
+
to: quoteData.to,
|
|
144
|
+
value: quoteData.value,
|
|
145
|
+
gasEstimate: quoteData.estimatedGas.toString(),
|
|
146
|
+
gasLimit: (parseInt(quoteData.estimatedGas) * 1.1).toString(), // 10% buffer
|
|
147
|
+
},
|
|
148
|
+
},
|
|
149
|
+
slippage,
|
|
150
|
+
networkIn,
|
|
151
|
+
networkOut,
|
|
152
|
+
protocolResponse: quoteData,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
const { errorMessage, errorMessageError } = (0, create_error_message_1.createErrorMessage)(error);
|
|
157
|
+
logger.error(`Failed to fetch quote from ${this.protocol}`, errorMessageError);
|
|
158
|
+
throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.QUOTE_NOT_FOUND, `Failed to fetch OpenOcean quote, error: ${errorMessage}`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
validatePriceParams(params) {
|
|
162
|
+
const { networkIn, networkOut } = params;
|
|
163
|
+
if (!this.multiChain && networkIn !== networkOut) {
|
|
164
|
+
logger.error('Multi-chain swaps not supported');
|
|
165
|
+
throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.INVALID_PARAMS, 'Multi-chain swaps not supported');
|
|
166
|
+
}
|
|
167
|
+
if (!this.chains.includes(networkIn)) {
|
|
168
|
+
logger.error(`Network ${networkIn} not supported`);
|
|
169
|
+
throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.INVALID_PARAMS, `Network ${networkIn} not supported`);
|
|
170
|
+
}
|
|
171
|
+
if (!this.chains.includes(networkOut)) {
|
|
172
|
+
logger.error(`Network ${networkOut} not supported`);
|
|
173
|
+
throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.INVALID_PARAMS, `Network ${networkOut} not supported`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
isOpenOceanPriceResponse(response) {
|
|
177
|
+
return response && 'inToken' in response && 'outToken' in response && 'outAmount' in response;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
exports.OpenOceanService = OpenOceanService;
|
|
181
|
+
//# sourceMappingURL=openocean.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openocean.service.js","sourceRoot":"","sources":["../../../../src/protocols/openocean/openocean.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export type OpenOceanConfig = {
|
|
2
|
+
openOceanPrivateUrl?: string;
|
|
3
|
+
openOceanApiVersion?: string;
|
|
4
|
+
openOceanDisabledDexIds?: string;
|
|
5
|
+
openOceanEnabledDexIds?: string;
|
|
6
|
+
};
|
|
7
|
+
export type OpenOceanTokenInfo = {
|
|
8
|
+
address: string;
|
|
9
|
+
decimals: number;
|
|
10
|
+
symbol: string;
|
|
11
|
+
name: string;
|
|
12
|
+
usd?: string;
|
|
13
|
+
volume?: number;
|
|
14
|
+
};
|
|
15
|
+
export type OpenOceanDexInfo = {
|
|
16
|
+
dexIndex: number;
|
|
17
|
+
dexCode: string;
|
|
18
|
+
swapAmount: string;
|
|
19
|
+
};
|
|
20
|
+
export type OpenOceanRouteInfo = {
|
|
21
|
+
from: string;
|
|
22
|
+
to: string;
|
|
23
|
+
parts: number;
|
|
24
|
+
routes: {
|
|
25
|
+
parts: number;
|
|
26
|
+
percentage: number;
|
|
27
|
+
subRoutes: {
|
|
28
|
+
from: string;
|
|
29
|
+
to: string;
|
|
30
|
+
parts: number;
|
|
31
|
+
dexes: {
|
|
32
|
+
dex: string;
|
|
33
|
+
id: string;
|
|
34
|
+
parts: number;
|
|
35
|
+
percentage: number;
|
|
36
|
+
}[];
|
|
37
|
+
}[];
|
|
38
|
+
}[];
|
|
39
|
+
};
|
|
40
|
+
export type OpenOceanPriceResponse = {
|
|
41
|
+
inToken: OpenOceanTokenInfo;
|
|
42
|
+
outToken: OpenOceanTokenInfo;
|
|
43
|
+
inAmount: string;
|
|
44
|
+
outAmount: string;
|
|
45
|
+
estimatedGas: string;
|
|
46
|
+
dexes?: OpenOceanDexInfo[];
|
|
47
|
+
path?: OpenOceanRouteInfo;
|
|
48
|
+
save?: number;
|
|
49
|
+
price_impact?: string;
|
|
50
|
+
};
|
|
51
|
+
export type OpenOceanQuoteResponse = {
|
|
52
|
+
inToken: OpenOceanTokenInfo;
|
|
53
|
+
outToken: OpenOceanTokenInfo;
|
|
54
|
+
inAmount: string;
|
|
55
|
+
outAmount: string;
|
|
56
|
+
estimatedGas: string;
|
|
57
|
+
minOutAmount: string;
|
|
58
|
+
from: string;
|
|
59
|
+
to: string;
|
|
60
|
+
value: string;
|
|
61
|
+
gasPrice: string;
|
|
62
|
+
data: string;
|
|
63
|
+
chainId: number;
|
|
64
|
+
rfqDeadline?: number;
|
|
65
|
+
gmxFee?: number;
|
|
66
|
+
price_impact?: string;
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=openocean.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openocean.types.d.ts","sourceRoot":"","sources":["../../../../src/protocols/openocean/openocean.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE;YACT,IAAI,EAAE,MAAM,CAAC;YACb,EAAE,EAAE,MAAM,CAAC;YACX,KAAK,EAAE,MAAM,CAAC;YACd,KAAK,EAAE;gBACL,GAAG,EAAE,MAAM,CAAC;gBACZ,EAAE,EAAE,MAAM,CAAC;gBACX,KAAK,EAAE,MAAM,CAAC;gBACd,UAAU,EAAE,MAAM,CAAC;aACpB,EAAE,CAAC;SACL,EAAE,CAAC;KACL,EAAE,CAAC;CACL,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openocean.types.js","sourceRoot":"","sources":["../../../../src/protocols/openocean/openocean.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/protocols/pumpfun/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PumpFunService = void 0;
|
|
4
|
+
// PumpFun Protocol - All exports
|
|
5
|
+
var pumpfun_service_1 = require("./pumpfun.service");
|
|
6
|
+
Object.defineProperty(exports, "PumpFunService", { enumerable: true, get: function () { return pumpfun_service_1.PumpFunService; } });
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/protocols/pumpfun/index.ts"],"names":[],"mappings":";;;AAAA,iCAAiC;AACjC,qDAAmD;AAA1C,iHAAA,cAAc,OAAA"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { PublicKey, Transaction, Connection } from '@solana/web3.js';
|
|
2
|
+
import { BondingCurveAccount, PumpFunSDK } from 'pumpdotfun-sdk';
|
|
3
|
+
import { IIntentProtocol } from '../../interfaces/intent-protocol';
|
|
4
|
+
import { ChainIdEnum, ProtocolEnum } from '../../types/enums';
|
|
5
|
+
import { IntentPriceParams } from '../../types/price-params';
|
|
6
|
+
import { PriceResponse, RawProtocolPriceResponse } from '../../types/price-response';
|
|
7
|
+
import { IntentQuoteParams } from '../../types/quote-params';
|
|
8
|
+
import { QuoteResponse } from '../../types/quote-response';
|
|
9
|
+
import { IntentsSDKConfig } from '../../types/sdk-config';
|
|
10
|
+
import { PumpFunConfig } from './pumpfun.types';
|
|
11
|
+
export type PumpFunPriceResponse = {
|
|
12
|
+
tokenMint: string;
|
|
13
|
+
tokenAmount: string;
|
|
14
|
+
solAmount: string;
|
|
15
|
+
operation: 'buy' | 'sell';
|
|
16
|
+
feeBasisPoint: string;
|
|
17
|
+
};
|
|
18
|
+
export type PumpFunQuoteResponse = {
|
|
19
|
+
transactions: string[];
|
|
20
|
+
};
|
|
21
|
+
export declare class PumpFunService implements IIntentProtocol {
|
|
22
|
+
readonly protocol = ProtocolEnum.PUMPFUN;
|
|
23
|
+
readonly chains: ChainIdEnum[];
|
|
24
|
+
readonly singleChain = true;
|
|
25
|
+
readonly multiChain = false;
|
|
26
|
+
protected readonly anchorProvider: {
|
|
27
|
+
connection: Connection;
|
|
28
|
+
publicKey: PublicKey;
|
|
29
|
+
signTransaction: (tx: Transaction) => Promise<Transaction>;
|
|
30
|
+
signAllTransactions: (txs: Transaction[]) => Promise<Transaction[]>;
|
|
31
|
+
};
|
|
32
|
+
protected readonly connection: Connection;
|
|
33
|
+
protected sdk: PumpFunSDK;
|
|
34
|
+
constructor(config: IntentsSDKConfig & PumpFunConfig);
|
|
35
|
+
isCorrectConfig<T extends {
|
|
36
|
+
[key: string]: string;
|
|
37
|
+
}>(config: {
|
|
38
|
+
[key: string]: string;
|
|
39
|
+
}): config is T;
|
|
40
|
+
fetchPrice(params: IntentPriceParams): Promise<PriceResponse>;
|
|
41
|
+
fetchQuote(params: IntentQuoteParams): Promise<QuoteResponse>;
|
|
42
|
+
protected getBondingCurveAccount(tokenMint: PublicKey): Promise<BondingCurveAccount | null>;
|
|
43
|
+
protected isPumpFunPriceResponse(response: RawProtocolPriceResponse): response is PumpFunPriceResponse;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=pumpfun.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pumpfun.service.d.ts","sourceRoot":"","sources":["../../../../src/protocols/pumpfun/pumpfun.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,SAAS,EACT,WAAW,EAEX,UAAU,EACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAgB,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAK1D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,MAAM,MAAM,oBAAoB,GAAG;IAEjC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAIF,qBAAa,cAAe,YAAW,eAAe;IACpD,SAAgB,QAAQ,wBAAwB;IAChD,SAAgB,MAAM,gBAAwB;IAC9C,SAAgB,WAAW,QAAQ;IACnC,SAAgB,UAAU,SAAS;IAEnC,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE;QACjC,UAAU,EAAE,UAAU,CAAC;QACvB,SAAS,EAAE,SAAS,CAAC;QACrB,eAAe,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;QAC3D,mBAAmB,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;KACrE,CAAC;IAEF,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAC1C,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC;gBAEd,MAAM,EAAE,gBAAgB,GAAG,aAAa;IAwCpD,eAAe,CAAC,CAAC,SAAS;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EAAE,MAAM,EAAE;QAC3D,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KACvB,GAAG,MAAM,IAAI,CAAC;IAIF,UAAU,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC;IAyF7D,UAAU,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC;cA6F1D,sBAAsB,CACpC,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAYtC,SAAS,CAAC,sBAAsB,CAC9B,QAAQ,EAAE,wBAAwB,GACjC,QAAQ,IAAI,oBAAoB;CASpC"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.PumpFunService = void 0;
|
|
7
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
8
|
+
const pumpdotfun_sdk_1 = require("pumpdotfun-sdk");
|
|
9
|
+
const bs58_1 = __importDefault(require("bs58"));
|
|
10
|
+
const enums_1 = require("../../types/enums");
|
|
11
|
+
const constants_1 = require("../../utils/constants");
|
|
12
|
+
const logger_1 = require("../../utils/logger");
|
|
13
|
+
const throw_error_1 = require("../../utils/throw-error");
|
|
14
|
+
const create_error_message_1 = require("../../utils/create-error-message");
|
|
15
|
+
let logger;
|
|
16
|
+
class PumpFunService {
|
|
17
|
+
constructor(config) {
|
|
18
|
+
this.protocol = enums_1.ProtocolEnum.PUMPFUN;
|
|
19
|
+
this.chains = [enums_1.ChainIdEnum.SOLANA];
|
|
20
|
+
this.singleChain = true;
|
|
21
|
+
this.multiChain = false;
|
|
22
|
+
// Configure logging
|
|
23
|
+
if (config.debug) {
|
|
24
|
+
logger_1.LoggerFactory.configure(logger_1.LoggerFactory.createConsoleLogger({ level: logger_1.LogLevelEnum.DEBUG }));
|
|
25
|
+
}
|
|
26
|
+
else if (config.logger) {
|
|
27
|
+
logger_1.LoggerFactory.configure(config.logger);
|
|
28
|
+
}
|
|
29
|
+
logger = logger_1.LoggerFactory.getLogger();
|
|
30
|
+
this.connection = new web3_js_1.Connection(config.solanaRpcUrl, 'confirmed');
|
|
31
|
+
// Initialize the anchor provider with a random keypair
|
|
32
|
+
const keyPair = web3_js_1.Keypair.generate();
|
|
33
|
+
this.anchorProvider = {
|
|
34
|
+
connection: this.connection,
|
|
35
|
+
publicKey: keyPair.publicKey,
|
|
36
|
+
signTransaction: async (tx) => {
|
|
37
|
+
tx.partialSign(keyPair);
|
|
38
|
+
return tx;
|
|
39
|
+
},
|
|
40
|
+
signAllTransactions: async (txs) => {
|
|
41
|
+
return txs.map(tx => {
|
|
42
|
+
tx.partialSign(keyPair);
|
|
43
|
+
return tx;
|
|
44
|
+
});
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
try {
|
|
48
|
+
this.sdk = new pumpdotfun_sdk_1.PumpFunSDK(this.anchorProvider);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
const { errorMessage, errorMessageError } = (0, create_error_message_1.createErrorMessage)(error);
|
|
52
|
+
logger.error('Failed to initialize PumpFun SDK', errorMessageError);
|
|
53
|
+
throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.INVALID_PARAMS, `Failed to initialize PumpFun SDK, error: ${errorMessage}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
isCorrectConfig(config) {
|
|
57
|
+
return typeof config['solanaRpcUrl'] === 'string' && config['solanaRpcUrl'].length > 0;
|
|
58
|
+
}
|
|
59
|
+
async fetchPrice(params) {
|
|
60
|
+
// Validate networks
|
|
61
|
+
if (params.networkIn !== enums_1.ChainIdEnum.SOLANA || params.networkOut !== enums_1.ChainIdEnum.SOLANA) {
|
|
62
|
+
logger.error(`PumpFun only supports Solana network`);
|
|
63
|
+
throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.INVALID_PARAMS, 'PumpFun only supports Solana network');
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
// Ensure one token is SOL and the other is a PumpFun token
|
|
67
|
+
const tokenIn = params.tokenIn;
|
|
68
|
+
const tokenOut = params.tokenOut;
|
|
69
|
+
// Check if one token is SOL
|
|
70
|
+
const tokenInIsSol = tokenIn === constants_1.SOL_NATIVE_ADDRESS;
|
|
71
|
+
const tokenOutIsSol = tokenOut === constants_1.SOL_NATIVE_ADDRESS;
|
|
72
|
+
if (!tokenInIsSol && !tokenOutIsSol) {
|
|
73
|
+
throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.INVALID_PARAMS, 'PumpFun swaps require one token to be SOL');
|
|
74
|
+
}
|
|
75
|
+
// Get the non-SOL token to check if it has a bonding curve
|
|
76
|
+
const tokenToCheck = tokenInIsSol ? tokenOut : tokenIn;
|
|
77
|
+
const tokenPk = new web3_js_1.PublicKey(tokenToCheck);
|
|
78
|
+
// Get bonding curve for the non-SOL token
|
|
79
|
+
const bondingCurve = await this.getBondingCurveAccount(tokenPk);
|
|
80
|
+
if (!bondingCurve) {
|
|
81
|
+
throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.PRICE_NOT_FOUND, `Token ${tokenToCheck} does not have a PumpFun bonding curve`);
|
|
82
|
+
}
|
|
83
|
+
// Determine operation (buy = SOL to Token, sell = Token to SOL)
|
|
84
|
+
const operation = tokenInIsSol ? 'buy' : 'sell';
|
|
85
|
+
const { amountIn, slippage } = params;
|
|
86
|
+
const slippageBps = slippage * 100;
|
|
87
|
+
// Calculate amounts based on operation
|
|
88
|
+
let solAmount, tokenAmount;
|
|
89
|
+
if (operation === 'buy') {
|
|
90
|
+
// Buy operation: SOL -> PumpFun token
|
|
91
|
+
solAmount = BigInt(amountIn);
|
|
92
|
+
tokenAmount = bondingCurve.getBuyPrice(solAmount);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
// Sell operation: PumpFun token -> SOL
|
|
96
|
+
tokenAmount = BigInt(amountIn);
|
|
97
|
+
solAmount = bondingCurve.getSellPrice(tokenAmount, BigInt(slippageBps));
|
|
98
|
+
}
|
|
99
|
+
if (!solAmount || !tokenAmount) {
|
|
100
|
+
throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.PRICE_NOT_FOUND, 'Failed to calculate price from bonding curve');
|
|
101
|
+
}
|
|
102
|
+
// Prepare response
|
|
103
|
+
const priceInfo = {
|
|
104
|
+
tokenMint: tokenPk.toBase58(),
|
|
105
|
+
tokenAmount: tokenAmount.toString(),
|
|
106
|
+
solAmount: solAmount.toString(),
|
|
107
|
+
operation,
|
|
108
|
+
feeBasisPoint: slippageBps.toString(),
|
|
109
|
+
};
|
|
110
|
+
return {
|
|
111
|
+
protocol: enums_1.ProtocolEnum.PUMPFUN,
|
|
112
|
+
networkIn: params.networkIn,
|
|
113
|
+
networkOut: params.networkOut,
|
|
114
|
+
tokenIn: params.tokenIn,
|
|
115
|
+
tokenOut: params.tokenOut,
|
|
116
|
+
amountIn: params.amountIn,
|
|
117
|
+
amountOut: operation === 'buy' ? tokenAmount.toString() : solAmount.toString(),
|
|
118
|
+
slippage: params.slippage,
|
|
119
|
+
protocolResponse: priceInfo,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
const { errorMessage, errorMessageError } = (0, create_error_message_1.createErrorMessage)(error);
|
|
124
|
+
logger.error(`Failed to fetch swap price from ${this.protocol}`, errorMessageError);
|
|
125
|
+
throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.PRICE_NOT_FOUND, `Failed to fetch PumpFun price, error: ${errorMessage}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
async fetchQuote(params) {
|
|
129
|
+
if (!this.connection) {
|
|
130
|
+
throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.MISSING_RPC_URL, 'Connection not initialized');
|
|
131
|
+
}
|
|
132
|
+
const { from, receiver } = params;
|
|
133
|
+
let { priceResponse } = params;
|
|
134
|
+
// If no price response provided, fetch it
|
|
135
|
+
if (!priceResponse) {
|
|
136
|
+
priceResponse = await this.fetchPrice(params);
|
|
137
|
+
}
|
|
138
|
+
if (!this.isPumpFunPriceResponse(priceResponse.protocolResponse)) {
|
|
139
|
+
logger.error(`Invalid PumpFun price response`);
|
|
140
|
+
throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.PRICE_NOT_FOUND, `Invalid PumpFun price response: ${JSON.stringify(priceResponse)}`);
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
const pumpfunPrice = priceResponse.protocolResponse;
|
|
144
|
+
const operation = pumpfunPrice.operation;
|
|
145
|
+
const tokenMint = new web3_js_1.PublicKey(pumpfunPrice.tokenMint);
|
|
146
|
+
// Get fee recipient account
|
|
147
|
+
const global = await this.sdk.getGlobalAccount();
|
|
148
|
+
const feeRecipientAccount = global.feeRecipient;
|
|
149
|
+
// Get latest blockhash
|
|
150
|
+
const { blockhash } = await this.connection.getLatestBlockhash();
|
|
151
|
+
let instructions;
|
|
152
|
+
if (operation === 'buy') {
|
|
153
|
+
// Buy instructions: spending SOL to get tokens
|
|
154
|
+
instructions = await this.sdk.getBuyInstructions(new web3_js_1.PublicKey(from), tokenMint, feeRecipientAccount, BigInt(pumpfunPrice.tokenAmount), // amount of tokens to receive
|
|
155
|
+
BigInt(pumpfunPrice.solAmount));
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
// Sell instructions: spending tokens to get SOL
|
|
159
|
+
instructions = await this.sdk.getSellInstructions(new web3_js_1.PublicKey(from), tokenMint, feeRecipientAccount, BigInt(pumpfunPrice.tokenAmount), // amount of tokens to sell
|
|
160
|
+
BigInt(pumpfunPrice.solAmount));
|
|
161
|
+
}
|
|
162
|
+
// Create versioned transaction
|
|
163
|
+
instructions.recentBlockhash = blockhash;
|
|
164
|
+
instructions.feePayer = new web3_js_1.PublicKey(from);
|
|
165
|
+
const messageV0 = new web3_js_1.MessageV0(instructions.compileMessage());
|
|
166
|
+
const versionedTransaction = new web3_js_1.VersionedTransaction(messageV0);
|
|
167
|
+
const encodedTransaction = bs58_1.default.encode(versionedTransaction.serialize());
|
|
168
|
+
// Prepare response
|
|
169
|
+
const pumpFunQuoteResponse = {
|
|
170
|
+
transactions: [encodedTransaction],
|
|
171
|
+
};
|
|
172
|
+
return {
|
|
173
|
+
protocol: enums_1.ProtocolEnum.PUMPFUN,
|
|
174
|
+
networkIn: params.networkIn,
|
|
175
|
+
networkOut: params.networkOut,
|
|
176
|
+
tokenIn: priceResponse.tokenIn,
|
|
177
|
+
tokenOut: priceResponse.tokenOut,
|
|
178
|
+
amountIn: priceResponse.amountIn,
|
|
179
|
+
amountOut: priceResponse.amountOut,
|
|
180
|
+
from,
|
|
181
|
+
receiver: receiver || from,
|
|
182
|
+
slippage: params.slippage,
|
|
183
|
+
executionPayload: {
|
|
184
|
+
transactionData: [encodedTransaction],
|
|
185
|
+
},
|
|
186
|
+
protocolResponse: pumpFunQuoteResponse,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
const { errorMessage, errorMessageError } = (0, create_error_message_1.createErrorMessage)(error);
|
|
191
|
+
logger.error(`Failed to fetch quote from ${this.protocol}`, errorMessageError);
|
|
192
|
+
throw (0, throw_error_1.sdkError)(enums_1.SdkErrorEnum.QUOTE_NOT_FOUND, `Failed to fetch PumpFun quote, error: ${errorMessage}`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// Helper: Get bonding curve account for a token
|
|
196
|
+
async getBondingCurveAccount(tokenMint) {
|
|
197
|
+
try {
|
|
198
|
+
const bondingCurveAccount = await this.sdk?.getBondingCurveAccount(tokenMint);
|
|
199
|
+
return bondingCurveAccount || null;
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
const { errorMessageError } = (0, create_error_message_1.createErrorMessage)(error);
|
|
203
|
+
logger.error(`Failed to get bonding curve for ${tokenMint.toBase58()}`, errorMessageError);
|
|
204
|
+
return null;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// Helper: Check if a response is a PumpFun price response
|
|
208
|
+
isPumpFunPriceResponse(response) {
|
|
209
|
+
return (response &&
|
|
210
|
+
'operation' in response &&
|
|
211
|
+
'tokenMint' in response &&
|
|
212
|
+
'tokenAmount' in response &&
|
|
213
|
+
'solAmount' in response);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
exports.PumpFunService = PumpFunService;
|
|
217
|
+
//# sourceMappingURL=pumpfun.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pumpfun.service.js","sourceRoot":"","sources":["../../../../src/protocols/pumpfun/pumpfun.service.ts"],"names":[],"mappings":"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"}
|