@flaunch/sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/LICENSE +9 -0
  2. package/README.md +315 -0
  3. package/dist/abi/FairLaunch.d.ts +364 -0
  4. package/dist/abi/FairLaunch.d.ts.map +1 -0
  5. package/dist/abi/FastFlaunchZap.d.ts +75 -0
  6. package/dist/abi/FastFlaunchZap.d.ts.map +1 -0
  7. package/dist/abi/Flaunch.d.ts +832 -0
  8. package/dist/abi/Flaunch.d.ts.map +1 -0
  9. package/dist/abi/FlaunchPositionManager.d.ts +2030 -0
  10. package/dist/abi/FlaunchPositionManager.d.ts.map +1 -0
  11. package/dist/abi/Memecoin.d.ts +743 -0
  12. package/dist/abi/Memecoin.d.ts.map +1 -0
  13. package/dist/abi/Permit2.d.ts +701 -0
  14. package/dist/abi/Permit2.d.ts.map +1 -0
  15. package/dist/abi/PoolManager.d.ts +1057 -0
  16. package/dist/abi/PoolManager.d.ts.map +1 -0
  17. package/dist/abi/Quoter.d.ts +486 -0
  18. package/dist/abi/Quoter.d.ts.map +1 -0
  19. package/dist/abi/UniversalRouter.d.ts +342 -0
  20. package/dist/abi/UniversalRouter.d.ts.map +1 -0
  21. package/dist/abi/index.cjs +3023 -0
  22. package/dist/abi/index.cjs.map +1 -0
  23. package/dist/abi/index.d.ts +6 -0
  24. package/dist/abi/index.d.ts.map +1 -0
  25. package/dist/abi/index.js +3015 -0
  26. package/dist/abi/index.js.map +1 -0
  27. package/dist/addresses/index.cjs +5334 -0
  28. package/dist/addresses/index.cjs.map +1 -0
  29. package/dist/addresses/index.js +5321 -0
  30. package/dist/addresses/index.js.map +1 -0
  31. package/dist/addresses.d.ts +12 -0
  32. package/dist/addresses.d.ts.map +1 -0
  33. package/dist/clients/FairLaunchClient.d.ts +21 -0
  34. package/dist/clients/FairLaunchClient.d.ts.map +1 -0
  35. package/dist/clients/FastFlaunchClient.d.ts +25 -0
  36. package/dist/clients/FastFlaunchClient.d.ts.map +1 -0
  37. package/dist/clients/FlaunchClient.d.ts +10 -0
  38. package/dist/clients/FlaunchClient.d.ts.map +1 -0
  39. package/dist/clients/FlaunchPositionManagerClient.d.ts +89 -0
  40. package/dist/clients/FlaunchPositionManagerClient.d.ts.map +1 -0
  41. package/dist/clients/MemecoinClient.d.ts +12 -0
  42. package/dist/clients/MemecoinClient.d.ts.map +1 -0
  43. package/dist/clients/Permit2Client.d.ts +13 -0
  44. package/dist/clients/Permit2Client.d.ts.map +1 -0
  45. package/dist/clients/PoolManagerClient.d.ts +32 -0
  46. package/dist/clients/PoolManagerClient.d.ts.map +1 -0
  47. package/dist/clients/QuoterClient.d.ts +12 -0
  48. package/dist/clients/QuoterClient.d.ts.map +1 -0
  49. package/dist/helpers/hex.d.ts +4 -0
  50. package/dist/helpers/hex.d.ts.map +1 -0
  51. package/dist/helpers/index.cjs +191 -0
  52. package/dist/helpers/index.cjs.map +1 -0
  53. package/dist/helpers/index.d.ts +3 -0
  54. package/dist/helpers/index.d.ts.map +1 -0
  55. package/dist/helpers/index.js +177 -0
  56. package/dist/helpers/index.js.map +1 -0
  57. package/dist/helpers/ipfs.d.ts +47 -0
  58. package/dist/helpers/ipfs.d.ts.map +1 -0
  59. package/dist/hooks/FlaunchPositionManagerHooks.d.ts +12 -0
  60. package/dist/hooks/FlaunchPositionManagerHooks.d.ts.map +1 -0
  61. package/dist/hooks/index.cjs +69 -0
  62. package/dist/hooks/index.cjs.map +1 -0
  63. package/dist/hooks/index.d.ts +2 -0
  64. package/dist/hooks/index.d.ts.map +1 -0
  65. package/dist/hooks/index.js +64 -0
  66. package/dist/hooks/index.js.map +1 -0
  67. package/dist/index.cjs.js +11498 -0
  68. package/dist/index.cjs.js.map +1 -0
  69. package/dist/index.d.ts +10 -0
  70. package/dist/index.d.ts.map +1 -0
  71. package/dist/index.esm.js +11466 -0
  72. package/dist/index.esm.js.map +1 -0
  73. package/dist/index.umd.js +2 -0
  74. package/dist/index.umd.js.map +1 -0
  75. package/dist/sdk/FlaunchSDK.d.ts +121 -0
  76. package/dist/sdk/FlaunchSDK.d.ts.map +1 -0
  77. package/dist/types.d.ts +34 -0
  78. package/dist/types.d.ts.map +1 -0
  79. package/dist/utils/univ4.d.ts +20 -0
  80. package/dist/utils/univ4.d.ts.map +1 -0
  81. package/dist/utils/universalRouter.d.ts +74 -0
  82. package/dist/utils/universalRouter.d.ts.map +1 -0
  83. package/package.json +88 -0
@@ -0,0 +1,177 @@
1
+ import { hexToBigInt, pad, encodeAbiParameters } from 'viem';
2
+ import axios from 'axios';
3
+
4
+ const bytes32ToUint256 = (value) => {
5
+ return hexToBigInt(value);
6
+ };
7
+ const uint256ToBytes32 = (value) => {
8
+ return pad(encodeAbiParameters([{ type: "uint256", name: "value" }], [value]), { size: 32, dir: "right" });
9
+ };
10
+
11
+ const resolveIPFS = (value) => {
12
+ if (value.startsWith("ipfs://")) {
13
+ return `https://gateway.pinata.cloud/ipfs/${value.slice(7)}`;
14
+ }
15
+ return value;
16
+ };
17
+ /**
18
+ * Uploads a file to IPFS using Pinata
19
+ * @param params Configuration and file data
20
+ * @returns Upload response with CID and other details
21
+ */
22
+ const uploadFileToIPFS = async (params) => {
23
+ try {
24
+ const formData = new FormData();
25
+ formData.append("file", params.file);
26
+ const pinataMetadata = {
27
+ name: params.name || null,
28
+ keyvalues: params.metadata || {},
29
+ };
30
+ formData.append("pinataMetadata", JSON.stringify(pinataMetadata));
31
+ const pinataOptions = {
32
+ cidVersion: 1,
33
+ };
34
+ formData.append("pinataOptions", JSON.stringify(pinataOptions));
35
+ const response = await axios.post("https://api.pinata.cloud/pinning/pinFileToIPFS", formData, {
36
+ headers: {
37
+ Authorization: `Bearer ${params.pinataConfig.jwt}`,
38
+ "Content-Type": "multipart/form-data",
39
+ },
40
+ });
41
+ return {
42
+ IpfsHash: response.data.IpfsHash,
43
+ PinSize: response.data.PinSize,
44
+ Timestamp: response.data.Timestamp,
45
+ isDuplicate: response.data.isDuplicate || false,
46
+ };
47
+ }
48
+ catch (error) {
49
+ if (axios.isAxiosError(error)) {
50
+ throw new Error(`Failed to upload file to IPFS: ${error.response?.data?.message || error.message}`);
51
+ }
52
+ throw error;
53
+ }
54
+ };
55
+ /**
56
+ * Uploads JSON data to IPFS using Pinata
57
+ * @param params Configuration and JSON data
58
+ * @returns Upload response with CID and other details
59
+ */
60
+ const uploadJsonToIPFS = async (params) => {
61
+ try {
62
+ const requestBody = {
63
+ pinataOptions: {
64
+ cidVersion: 1,
65
+ },
66
+ pinataMetadata: {
67
+ name: params.name || null,
68
+ keyvalues: params.metadata || {},
69
+ },
70
+ pinataContent: params.json,
71
+ };
72
+ const response = await axios.post("https://api.pinata.cloud/pinning/pinJSONToIPFS", requestBody, {
73
+ headers: {
74
+ Authorization: `Bearer ${params.pinataConfig.jwt}`,
75
+ "Content-Type": "application/json",
76
+ },
77
+ });
78
+ return {
79
+ IpfsHash: response.data.IpfsHash,
80
+ PinSize: response.data.PinSize,
81
+ Timestamp: response.data.Timestamp,
82
+ isDuplicate: response.data.isDuplicate || false,
83
+ };
84
+ }
85
+ catch (error) {
86
+ if (axios.isAxiosError(error)) {
87
+ throw new Error(`Failed to upload JSON to IPFS: ${error.response?.data?.message || error.message}`);
88
+ }
89
+ throw error;
90
+ }
91
+ };
92
+ /**
93
+ * Uploads a base64 image to IPFS using Pinata
94
+ * @param params Configuration and base64 image data
95
+ * @returns Upload response with CID and other details
96
+ */
97
+ const uploadImageToIPFS = async (params) => {
98
+ try {
99
+ const formData = new FormData();
100
+ // Convert base64 to Blob and then to File
101
+ // Remove data URL prefix if present (e.g., "data:image/jpeg;base64,")
102
+ const base64Data = params.base64Image.split(",")[1] || params.base64Image;
103
+ const byteCharacters = atob(base64Data);
104
+ const byteArrays = [];
105
+ for (let offset = 0; offset < byteCharacters.length; offset += 1024) {
106
+ const slice = byteCharacters.slice(offset, offset + 1024);
107
+ const byteNumbers = new Array(slice.length);
108
+ for (let i = 0; i < slice.length; i++) {
109
+ byteNumbers[i] = slice.charCodeAt(i);
110
+ }
111
+ const byteArray = new Uint8Array(byteNumbers);
112
+ byteArrays.push(byteArray);
113
+ }
114
+ // Detect mime type from base64 string
115
+ let mimeType = "image/png"; // default
116
+ if (params.base64Image.startsWith("data:")) {
117
+ mimeType = params.base64Image.split(";")[0].split(":")[1];
118
+ }
119
+ const blob = new Blob(byteArrays, { type: mimeType });
120
+ const fileName = params.name || `image.${mimeType.split("/")[1]}`;
121
+ const file = new File([blob], fileName, { type: mimeType });
122
+ formData.append("file", file);
123
+ const pinataMetadata = {
124
+ name: params.name || null,
125
+ keyvalues: params.metadata || {},
126
+ };
127
+ formData.append("pinataMetadata", JSON.stringify(pinataMetadata));
128
+ const pinataOptions = {
129
+ cidVersion: 1,
130
+ };
131
+ formData.append("pinataOptions", JSON.stringify(pinataOptions));
132
+ const response = await axios.post("https://api.pinata.cloud/pinning/pinFileToIPFS", formData, {
133
+ headers: {
134
+ Authorization: `Bearer ${params.pinataConfig.jwt}`,
135
+ "Content-Type": "multipart/form-data",
136
+ },
137
+ });
138
+ return {
139
+ IpfsHash: response.data.IpfsHash,
140
+ PinSize: response.data.PinSize,
141
+ Timestamp: response.data.Timestamp,
142
+ isDuplicate: response.data.isDuplicate || false,
143
+ };
144
+ }
145
+ catch (error) {
146
+ if (axios.isAxiosError(error)) {
147
+ throw new Error(`Failed to upload image to IPFS: ${error.response?.data?.message || error.message}`);
148
+ }
149
+ throw error;
150
+ }
151
+ };
152
+ const generateTokenUri = async (name, params) => {
153
+ // 1. upload image to IPFS
154
+ const imageRes = await uploadImageToIPFS({
155
+ pinataConfig: params.pinataConfig,
156
+ base64Image: params.metadata.base64Image,
157
+ });
158
+ // 2. upload metadata to IPFS
159
+ const coinMetadata = {
160
+ name,
161
+ description: params.metadata.description,
162
+ image: `ipfs://${imageRes.IpfsHash}`,
163
+ external_link: params.metadata.websiteUrl,
164
+ collaborators: [],
165
+ discordUrl: params.metadata.discordUrl,
166
+ twitterUrl: params.metadata.twitterUrl,
167
+ telegramUrl: params.metadata.telegramUrl,
168
+ };
169
+ const metadataRes = await uploadJsonToIPFS({
170
+ pinataConfig: params.pinataConfig,
171
+ json: coinMetadata,
172
+ });
173
+ return `ipfs://${metadataRes.IpfsHash}`;
174
+ };
175
+
176
+ export { bytes32ToUint256, generateTokenUri, resolveIPFS, uint256ToBytes32, uploadFileToIPFS, uploadImageToIPFS, uploadJsonToIPFS };
177
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/helpers/hex.ts","../../../src/helpers/ipfs.ts"],"sourcesContent":[null,null],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { IPFSParams } from "../types";
2
+ export declare const resolveIPFS: (value: string) => string;
3
+ export interface PinataConfig {
4
+ jwt: string;
5
+ }
6
+ interface UploadResponse {
7
+ IpfsHash: string;
8
+ PinSize: number;
9
+ Timestamp: string;
10
+ isDuplicate: boolean;
11
+ }
12
+ /**
13
+ * Uploads a file to IPFS using Pinata
14
+ * @param params Configuration and file data
15
+ * @returns Upload response with CID and other details
16
+ */
17
+ export declare const uploadFileToIPFS: (params: {
18
+ pinataConfig: PinataConfig;
19
+ file: File;
20
+ name?: string;
21
+ metadata?: Record<string, string>;
22
+ }) => Promise<UploadResponse>;
23
+ /**
24
+ * Uploads JSON data to IPFS using Pinata
25
+ * @param params Configuration and JSON data
26
+ * @returns Upload response with CID and other details
27
+ */
28
+ export declare const uploadJsonToIPFS: (params: {
29
+ pinataConfig: PinataConfig;
30
+ json: Record<string, any>;
31
+ name?: string;
32
+ metadata?: Record<string, string>;
33
+ }) => Promise<UploadResponse>;
34
+ /**
35
+ * Uploads a base64 image to IPFS using Pinata
36
+ * @param params Configuration and base64 image data
37
+ * @returns Upload response with CID and other details
38
+ */
39
+ export declare const uploadImageToIPFS: (params: {
40
+ pinataConfig: PinataConfig;
41
+ base64Image: string;
42
+ name?: string;
43
+ metadata?: Record<string, string>;
44
+ }) => Promise<UploadResponse>;
45
+ export declare const generateTokenUri: (name: string, params: IPFSParams) => Promise<string>;
46
+ export {};
47
+ //# sourceMappingURL=ipfs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ipfs.d.ts","sourceRoot":"","sources":["../../src/helpers/ipfs.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,UAAU,EAAE,MAAM,UAAU,CAAC;AAEpD,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,WAKxC,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,UAAU,cAAc;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAU,QAAQ;IAC7C,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC,KAAG,OAAO,CAAC,cAAc,CA2CzB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAU,QAAQ;IAC7C,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC,KAAG,OAAO,CAAC,cAAc,CAwCzB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAU,QAAQ;IAC9C,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC,KAAG,OAAO,CAAC,cAAc,CAsEzB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAU,MAAM,MAAM,EAAE,QAAQ,UAAU,oBAyBtE,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { BuySwapLog, PoolCreatedLogs, SellSwapLog } from "../clients/FlaunchPositionManagerClient";
2
+ import { ReadFlaunchSDK } from "../sdk/FlaunchSDK";
3
+ import { Address } from "viem";
4
+ export declare function usePoolCreatedEvents(flaunch: ReadFlaunchSDK, startBlockNumber?: bigint): {
5
+ logs: PoolCreatedLogs;
6
+ isFetchingFromStart: boolean;
7
+ };
8
+ export declare function usePoolSwapEvents(flaunch: ReadFlaunchSDK, coinAddress: Address, startBlockNumber?: bigint): {
9
+ logs: (BuySwapLog | SellSwapLog)[];
10
+ isFetchingFromStart: boolean;
11
+ };
12
+ //# sourceMappingURL=FlaunchPositionManagerHooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlaunchPositionManagerHooks.d.ts","sourceRoot":"","sources":["../../src/hooks/FlaunchPositionManagerHooks.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EACV,eAAe,EACf,WAAW,EACZ,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,cAAc,EACvB,gBAAgB,CAAC,EAAE,MAAM;;;EAmC1B;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,OAAO,EACpB,gBAAgB,CAAC,EAAE,MAAM;;;EAoC1B"}
@@ -0,0 +1,69 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var react = require('react');
6
+
7
+ function usePoolCreatedEvents(flaunch, startBlockNumber) {
8
+ const [logs, setLogs] = react.useState([]);
9
+ const [isFetchingFromStart, setIsFetchingFromStart] = react.useState(false);
10
+ react.useEffect(() => {
11
+ const setupWatcher = async () => {
12
+ const cleanup = await flaunch.watchPoolCreated({
13
+ onPoolCreated: ({ logs: newLogs, isFetchingFromStart }) => {
14
+ setIsFetchingFromStart(isFetchingFromStart);
15
+ setLogs((prevLogs) => [...newLogs, ...prevLogs]);
16
+ },
17
+ startBlockNumber,
18
+ });
19
+ return cleanup;
20
+ };
21
+ const cleanupPromise = setupWatcher();
22
+ return () => {
23
+ cleanupPromise.then(({ cleanup }) => cleanup());
24
+ };
25
+ }, [flaunch.chainId, startBlockNumber]);
26
+ // Add effect to update times
27
+ react.useEffect(() => {
28
+ const timer = setInterval(() => {
29
+ // Force re-render to update relative times
30
+ setLogs((prev) => [...prev]);
31
+ }, 1000);
32
+ return () => clearInterval(timer);
33
+ }, []);
34
+ return { logs, isFetchingFromStart };
35
+ }
36
+ function usePoolSwapEvents(flaunch, coinAddress, startBlockNumber) {
37
+ const [logs, setLogs] = react.useState([]);
38
+ const [isFetchingFromStart, setIsFetchingFromStart] = react.useState(false);
39
+ react.useEffect(() => {
40
+ const setupWatcher = async () => {
41
+ const cleanup = await flaunch.watchPoolSwap({
42
+ onPoolSwap: ({ logs: newLogs, isFetchingFromStart }) => {
43
+ setIsFetchingFromStart(isFetchingFromStart);
44
+ setLogs((prevLogs) => [...newLogs, ...prevLogs]);
45
+ },
46
+ filterByCoin: coinAddress,
47
+ startBlockNumber,
48
+ });
49
+ return cleanup;
50
+ };
51
+ const cleanupPromise = setupWatcher();
52
+ return () => {
53
+ cleanupPromise.then(({ cleanup }) => cleanup());
54
+ };
55
+ }, [flaunch.chainId, coinAddress, startBlockNumber]);
56
+ // Add effect to update times
57
+ react.useEffect(() => {
58
+ const timer = setInterval(() => {
59
+ // Force re-render to update relative times
60
+ setLogs((prev) => [...prev]);
61
+ }, 1000);
62
+ return () => clearInterval(timer);
63
+ }, []);
64
+ return { logs, isFetchingFromStart };
65
+ }
66
+
67
+ exports.usePoolCreatedEvents = usePoolCreatedEvents;
68
+ exports.usePoolSwapEvents = usePoolSwapEvents;
69
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/hooks/FlaunchPositionManagerHooks.ts"],"sourcesContent":[null],"names":["useState","useEffect"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from "./FlaunchPositionManagerHooks";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC"}
@@ -0,0 +1,64 @@
1
+ import { useState, useEffect } from 'react';
2
+
3
+ function usePoolCreatedEvents(flaunch, startBlockNumber) {
4
+ const [logs, setLogs] = useState([]);
5
+ const [isFetchingFromStart, setIsFetchingFromStart] = useState(false);
6
+ useEffect(() => {
7
+ const setupWatcher = async () => {
8
+ const cleanup = await flaunch.watchPoolCreated({
9
+ onPoolCreated: ({ logs: newLogs, isFetchingFromStart }) => {
10
+ setIsFetchingFromStart(isFetchingFromStart);
11
+ setLogs((prevLogs) => [...newLogs, ...prevLogs]);
12
+ },
13
+ startBlockNumber,
14
+ });
15
+ return cleanup;
16
+ };
17
+ const cleanupPromise = setupWatcher();
18
+ return () => {
19
+ cleanupPromise.then(({ cleanup }) => cleanup());
20
+ };
21
+ }, [flaunch.chainId, startBlockNumber]);
22
+ // Add effect to update times
23
+ useEffect(() => {
24
+ const timer = setInterval(() => {
25
+ // Force re-render to update relative times
26
+ setLogs((prev) => [...prev]);
27
+ }, 1000);
28
+ return () => clearInterval(timer);
29
+ }, []);
30
+ return { logs, isFetchingFromStart };
31
+ }
32
+ function usePoolSwapEvents(flaunch, coinAddress, startBlockNumber) {
33
+ const [logs, setLogs] = useState([]);
34
+ const [isFetchingFromStart, setIsFetchingFromStart] = useState(false);
35
+ useEffect(() => {
36
+ const setupWatcher = async () => {
37
+ const cleanup = await flaunch.watchPoolSwap({
38
+ onPoolSwap: ({ logs: newLogs, isFetchingFromStart }) => {
39
+ setIsFetchingFromStart(isFetchingFromStart);
40
+ setLogs((prevLogs) => [...newLogs, ...prevLogs]);
41
+ },
42
+ filterByCoin: coinAddress,
43
+ startBlockNumber,
44
+ });
45
+ return cleanup;
46
+ };
47
+ const cleanupPromise = setupWatcher();
48
+ return () => {
49
+ cleanupPromise.then(({ cleanup }) => cleanup());
50
+ };
51
+ }, [flaunch.chainId, coinAddress, startBlockNumber]);
52
+ // Add effect to update times
53
+ useEffect(() => {
54
+ const timer = setInterval(() => {
55
+ // Force re-render to update relative times
56
+ setLogs((prev) => [...prev]);
57
+ }, 1000);
58
+ return () => clearInterval(timer);
59
+ }, []);
60
+ return { logs, isFetchingFromStart };
61
+ }
62
+
63
+ export { usePoolCreatedEvents, usePoolSwapEvents };
64
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/hooks/FlaunchPositionManagerHooks.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}