@sign-global/tokentable 1.5.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @sign-global/tokentable
2
2
 
3
+ ## 1.6.0
4
+
5
+ ### Minor Changes
6
+
7
+ - feat: add Cosmos wallet support
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies
12
+ - @sign-global/tokentable-wallets@1.4.0
13
+ - @sign-global/tokentable-core@1.6.0
14
+
3
15
  ## 1.5.0
4
16
 
5
17
  ### Minor Changes
package/README.md ADDED
@@ -0,0 +1,286 @@
1
+
2
+
3
+ # @sign-global/tokentable
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @sign-global/tokentable
9
+ ```
10
+
11
+ ## Based MerkleTree Airdrop
12
+
13
+ ## Initialization
14
+
15
+ ### Initialization AirdropClient
16
+
17
+ AirdropClient supports initialization for two chain types:
18
+
19
+
20
+ The baseURL parameter determines which environment the SDK will interact with. The default is the production environment. You can pass the test environment address for testing.
21
+
22
+ ```typescript
23
+ import { AirdropClient } from '@sign-global/tokentable';
24
+
25
+ // Initialize with projectId
26
+ const client = new AirdropClient({
27
+ projectId: "your_project_id",
28
+ endpoint: "http://ec2-3-89-178-45.compute-1.amazonaws.com:3030/api" // optional
29
+ })
30
+
31
+ // Or initialize with slug
32
+ const client = new AirdropClient({
33
+ slug: "your_slug",
34
+ endpoint: "optional_api_base_url" // optional
35
+ })
36
+ ```
37
+
38
+
39
+
40
+ ## Main Features
41
+
42
+
43
+ ### Get Airdrop Claims
44
+
45
+ ```typescript
46
+ const claims = await client.getAirdropClaims({
47
+ address: "user_address"
48
+ })
49
+ ```
50
+
51
+
52
+ ### Get Airdrop Projects Info
53
+
54
+ ```typescript
55
+ // Get project list
56
+ const projects = client.getProjectInfo()
57
+ ```
58
+
59
+
60
+ ### Claim Airdrop
61
+
62
+
63
+ #### TON Chain Claiming
64
+
65
+ ```typescript
66
+ const result = await tonClient.claimAirdrop({
67
+ claimId: "claim_id",
68
+ walletClient: TonConnectUI
69
+ }, {
70
+ onLoading: () => {
71
+ // Handle loading state
72
+ }
73
+ })
74
+ ```
75
+
76
+
77
+ #### EVM Chain Claiming
78
+
79
+ ```typescript
80
+ import { useWalletClient } from 'wagmi';
81
+ const { data: walletClient } = useWalletClient();
82
+ // or const walletClient = await getWalletClient(wagmiConfig); //wagmi
83
+ const result = await evmClient.claimAirdrop({
84
+ claimId: "claim_id",
85
+ // wallet client
86
+ walletClient: walletClient
87
+ })
88
+ ```
89
+
90
+
91
+ ### Check Claim Status
92
+
93
+ ```typescript
94
+ const isClaimed = await client.checkClaimed("claim_id")
95
+ ```
96
+
97
+ ### Batch Check Claimed (EVM Chain Only)
98
+
99
+ ```typescript
100
+ const isClaimedArr = await client.batchCheckClaimed()
101
+ ```
102
+
103
+
104
+ ### TON Chain Specific Features
105
+
106
+ Check if contract is paused:
107
+
108
+ ```typescript
109
+ const isPaused = await tonClient.getPaused()
110
+ ```
111
+
112
+ ## Important Notes
113
+
114
+
115
+
116
+ 1. Before calling claim-related methods, you need to call `getAirdropClaims` to get claim information
117
+
118
+
119
+ 2. TON chain and EVM chain use different claiming methods
120
+
121
+
122
+ 3. All asynchronous operations need proper error handling
123
+
124
+
125
+
126
+ ## Error Handling
127
+
128
+
129
+ The SDK will throw errors in the following cases:
130
+
131
+
132
+ - Claim data not found
133
+
134
+ - Contract wrapper not found
135
+
136
+ - Unsupported chain type
137
+
138
+ - API call failures
139
+
140
+
141
+ It's recommended to use try-catch for error handling:
142
+
143
+ ```typescript
144
+ try {
145
+ const claims = await client.getAirdropClaims({
146
+ address: "user_address"
147
+ })
148
+ } catch (error) {
149
+ console.error("Failed to fetch claims:", error)
150
+ }
151
+ ```
152
+
153
+
154
+ ## Based Identity Airdrop
155
+
156
+ ### AddProvider
157
+
158
+ ```typescript
159
+ import { EvmProvider,SolanaProvider } from '@sign-global/tokentable';
160
+
161
+
162
+ const App = ({children}) => {
163
+ return (
164
+ <EvmProvider>
165
+ <SolanaProvider>
166
+ {children}
167
+ </SolanaProvider>
168
+ </EvmProvider>
169
+ )
170
+ }
171
+
172
+ ```
173
+
174
+ ### Initialization
175
+
176
+ ```typescript
177
+ import { SignatureAirdropClient } from '@sign-global/tokentable';
178
+
179
+ const client = new SignatureAirdropClient({
180
+ projectId: 'your_project_id', // Project ID
181
+ });
182
+ ```
183
+
184
+ ### Main Features
185
+
186
+ #### Get Airdrop Claims
187
+
188
+ ```typescript
189
+ const res = await client.getClaims();
190
+
191
+ console.log(res);
192
+ ```
193
+
194
+ #### Connect Identity
195
+
196
+ ```typescript
197
+ const checkEligibility = () => {
198
+ const res = await client.getClaims();
199
+
200
+ console.log(res);
201
+ }
202
+ // Connect Twitter account
203
+ await client.connectX({
204
+ onSuccess: () => {
205
+ checkEligibility();
206
+ console.log('Twitter connection successful');
207
+ },
208
+ onError: () => {
209
+ console.log('Twitter connection failed');
210
+ }
211
+ });
212
+
213
+ // Connect wallet
214
+ await client.connectWallet({
215
+ chainType: ChainType.Evm, // Supports Evm, Solana
216
+ onSuccess: () => {
217
+ checkEligibility();
218
+ console.log('Wallet connection successful');
219
+ },
220
+ onError: (error) => {
221
+ console.log('Wallet connection failed:', error);
222
+ }
223
+ });
224
+
225
+ // Disconnect identity
226
+ await client.disconnectIdentity({
227
+ recipientType: AirdropSigIdentityTypeEnum.Twitter,
228
+ recipient?: 'optional_recipient'
229
+ });
230
+
231
+ ```
232
+
233
+ ### Claim Airdrop
234
+
235
+ #### EVM
236
+
237
+ ``` typescript
238
+ import { useWalletClient } from 'wagmi';
239
+
240
+ const { data: walletClient } = useWalletClient();
241
+ // Check airdrop eligibility
242
+ const eligibility = await client.getClaims();
243
+
244
+ // Batch check claim status
245
+ const claimedStatus = await client.batchCheckClaimed();
246
+
247
+ const claimIds = eligibility.claims.map((claim) => claim.claimId);
248
+ // Claim airdrop
249
+ const txHash = await client.claimAirdrop({
250
+ claimIds: claimIds, // List of claim IDs
251
+ walletClient: walletClient, // Wallet client
252
+ recipient: 'optional_recipient' // Optional: recipient address
253
+ });
254
+
255
+ ```
256
+ #### Solana
257
+ ``` typescript
258
+ import { useWallet } from '@solana/wallet-adapter-react';
259
+
260
+ const walletClient = useWallet();
261
+ // Check airdrop eligibility
262
+ const eligibility = await client.getClaims();
263
+
264
+ // Batch check claim status
265
+ const claimedStatus = await client.batchCheckClaimed();
266
+
267
+ const claimIds = eligibility.claims.map((claim) => claim.claimId);
268
+ // Claim airdrop
269
+ await client.claimAirdrop({
270
+ claimIds: claimIds, // List of claim IDs
271
+ walletClient: walletClient, // Wallet client
272
+ });
273
+
274
+ ```
275
+
276
+ ### Error Handling
277
+
278
+ All SDK methods throw appropriate errors. It's recommended to use try-catch for error handling:
279
+
280
+ ``` typescript
281
+ try {
282
+ await client.claimAirdrop({...});
283
+ } catch (error) {
284
+ console.error('Claim failed:', error);
285
+ }
286
+ ```
package/dist/index.js CHANGED
@@ -743,7 +743,8 @@ var SignatureAirdropClient = class {
743
743
  [import_tokentable_core7.ChainType.Solana]: import_tokentable_core7.AirdropSigIdentityTypeEnum.SolanaWallet,
744
744
  [import_tokentable_core7.ChainType.Ton]: import_tokentable_core7.AirdropSigIdentityTypeEnum.TONWallet,
745
745
  [import_tokentable_core7.ChainType.Sui]: "",
746
- [import_tokentable_core7.ChainType.Aptos]: ""
746
+ [import_tokentable_core7.ChainType.Aptos]: "",
747
+ [import_tokentable_core7.ChainType.Cosmos]: import_tokentable_core7.AirdropSigIdentityTypeEnum.CosmosWallet
747
748
  };
748
749
  const msg = [project.id, recipientTypeMap[chainType], timestamp].join(",");
749
750
  const signResult = await wallet.signin(msg, false);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/AirdropClient.ts","../src/strategies/AirdropStrategyFactory.ts","../src/strategies/EvmAirdropStrategy.ts","../src/strategies/SolanaAirdropStrategy.ts","../src/strategies/TonAirdropStrategy.ts","../src/strategies/AptosAirdropStrategy.ts","../src/strategies/StrategyCache.ts","../src/SignatureAirdropClient.ts"],"sourcesContent":["export { AirdropClient } from './AirdropClient';\nexport { SignatureAirdropClient } from './SignatureAirdropClient';\nexport * from '@sign-global/tokentable-core';\nexport * from '@sign-global/tokentable-wallets';\n","import { TonClient } from '@ton/ton';\nimport {\n getAirdropPro,\n getAirdropProject,\n getAirdropQuery,\n getAirdropContractConfig,\n getChainRpc,\n getTonProjectIdByAddress,\n ChainId,\n ChainType,\n ETokenType,\n EvmAirdropVersionEnum,\n IAirdropClaim,\n IAirdropOptions,\n IContractConfig,\n IProject,\n IWalletClient\n} from '@sign-global/tokentable-core';\nimport { AirdropStrategyFactory } from './strategies/AirdropStrategyFactory';\nimport { IAirdropStrategy } from './strategies/IAirdropStrategy';\nimport { strategyCache } from './strategies/StrategyCache';\n\nexport class AirdropClient {\n private tonClient?: TonClient;\n private slug?: string;\n private projectId?: string;\n private endpoint?: string;\n private project: IProject | undefined;\n protected chainRpc?: string;\n protected claims?: IAirdropClaim[];\n private projectPromise: Promise<void> | undefined;\n private claimHook: ((claimData: IAirdropClaim) => { isLegacy: boolean; attestationId: bigint }) | undefined;\n private contractConfig: IContractConfig | null = null;\n\n constructor(params: IAirdropOptions) {\n if ('slug' in params) {\n this.slug = params.slug;\n }\n this.projectId = params.projectId;\n this.endpoint = params.endpoint;\n this.chainRpc = params.chainRpc;\n if (this.project) {\n this.project = params.project;\n } else {\n this.projectPromise = this.initializeProjects();\n }\n }\n\n setTonClient(tonClient: TonClient) {\n this.tonClient = tonClient;\n }\n\n private getTonClient(): TonClient | undefined {\n if (!this.tonClient) {\n return undefined;\n }\n return this.tonClient;\n }\n\n private async fetchProjectFromSlug(address?: string): Promise<string | undefined> {\n if (!this.slug) return undefined;\n\n const res = await getAirdropPro(this.slug, this.endpoint);\n const projectMap = res?.childProjectMapping || {};\n\n return getTonProjectIdByAddress({\n address,\n slug: this.slug,\n data: projectMap\n });\n }\n\n private async fetchProjectDetails(projectId: string): Promise<void> {\n const project = await getAirdropProject(projectId, this.endpoint);\n this.project = project;\n if (this.chainRpc) return;\n const chainId = project.chainType === ChainType.Evm ? Number(project.chainId) : project.chainId;\n this.chainRpc = getChainRpc(chainId as ChainId);\n }\n\n protected async initializeProjects(address?: string) {\n try {\n let projectId = this.projectId;\n\n // If slug is provided, try to fetch project ID from slug\n if (!projectId) {\n projectId = await this.fetchProjectFromSlug(address);\n }\n\n if (!projectId) {\n return;\n }\n\n // Fetch project details\n await this.fetchProjectDetails(projectId);\n } catch (error: any) {\n throw new Error(`Failed to initialize project: ${error.message}`);\n }\n }\n\n async getProjectInfo() {\n if (this.projectPromise) {\n await this.projectPromise;\n }\n if (!this.project) throw new Error('Project not found');\n return this.project;\n }\n\n async getAirdropClaims(data: { address: string }) {\n if (this.slug) {\n await this.initializeProjects(data.address); // Fetch project details by address & slug\n }\n const project = await this.getProjectInfo();\n\n const res = await getAirdropQuery(\n {\n recipient: data.address,\n projectId: project!.id,\n recipientType: project!.recipientType\n },\n this.endpoint\n );\n const claimsRes = res.claims?.map((it) => ({\n ...it,\n project: project!,\n claimId: project!.chainType === ChainType.Evm ? `${project!.id}:${it.leaf}` : `${project!.id}:${it.index}`\n }));\n this.claims = claimsRes;\n return this.claims;\n }\n\n public async getStrategy(walletClient?: IWalletClient): Promise<IAirdropStrategy> {\n const project = await this.getProjectInfo();\n const version = this.contractConfig?.version || undefined;\n\n const hasWallet = !!walletClient;\n\n // Try to get cached strategy\n let strategy = strategyCache.getStrategy(project.contractAddress, project.chainId, project.chainType, hasWallet);\n\n if (!strategy) {\n // Create new strategy if not cached\n strategy = AirdropStrategyFactory.createStrategy({\n chainType: project.chainType,\n contractAddress: project.contractAddress,\n chainId: project.chainId,\n projectId: project.id,\n walletClient,\n tonClient: this.getTonClient(),\n version,\n chainRpc: this.chainRpc!\n });\n\n // Initialize the strategy\n await strategy.initialize(walletClient);\n\n // Cache the initialized strategy\n strategyCache.setStrategy(project.contractAddress, project.chainId, project.chainType, strategy, hasWallet);\n } else if (hasWallet) {\n // If we have a wallet and the strategy exists, just initialize with the new wallet\n await strategy.initialize(walletClient);\n }\n\n return strategy;\n }\n\n private getClaimDataById(claimId: string) {\n const claimData = this.claims?.find((it) => it.claimId === claimId);\n if (!claimData) throw new Error('Claim data not found');\n return claimData;\n }\n\n setClaimHook(fn: (claimData: IAirdropClaim) => { isLegacy: boolean; attestationId: bigint }) {\n this.claimHook = fn;\n }\n\n private getDefaultExtraData() {\n return {\n isLegacy: true,\n attestationId: BigInt(1)\n };\n }\n\n private async calculateClaimFee(project: IProject, claimData: IAirdropClaim): Promise<string | bigint | undefined> {\n const claimAmount = claimData.amount;\n if (project.chainType === ChainType.Evm) {\n const version = await this.getVersion();\n const isNativeFreeVersion =\n project.tokenType === ETokenType.Native &&\n [EvmAirdropVersionEnum.V3, EvmAirdropVersionEnum.V4].includes(version as EvmAirdropVersionEnum);\n if (isNativeFreeVersion) {\n return undefined;\n }\n if (version.includes('TokenTableMerkleDistributorWithFees')) {\n const fees = claimData.fees;\n return fees ? BigInt(fees) : '0';\n }\n return await this.getClaimFee(BigInt(claimAmount));\n }\n\n if (project.chainType === ChainType.Ton) {\n return await this.getClaimFee(BigInt(claimAmount));\n }\n if (project.chainType === ChainType.Aptos) {\n const fees = claimData.fees;\n return fees ? BigInt(fees) : 0n;\n }\n\n return undefined;\n }\n\n async claimAirdrop(\n { claimId, walletClient }: { claimId: string; walletClient: IWalletClient },\n options?: { onLoading?: () => void }\n ) {\n // Get claim data and initialize strategy\n const claimData = this.getClaimDataById(claimId);\n const strategy = await this.getStrategy(walletClient);\n const project = await this.getProjectInfo();\n\n // Process extra data\n const extraData =\n project.chainType === ChainType.Ton\n ? undefined\n : this.claimHook\n ? this.claimHook(claimData)\n : this.getDefaultExtraData();\n\n // Calculate claim value based on project type\n const value = await this.calculateClaimFee(project, claimData);\n\n // Execute claim with processed data\n return strategy.claim(\n {\n ...claimData,\n extraData,\n value\n },\n options\n );\n }\n\n async checkClaimed(claimId: string): Promise<boolean> {\n const claimData = this.getClaimDataById(claimId);\n const strategy = await this.getStrategy();\n return strategy.checkClaimed(claimData);\n }\n\n private async getContractConfig(): Promise<IContractConfig | null> {\n try {\n const project = await this.getProjectInfo();\n\n if (!this.contractConfig && [ChainType.Evm, ChainType.Ton].includes(project.chainType)) {\n this.contractConfig = await getAirdropContractConfig(\n {\n chainId: project.chainId,\n chainType: project.chainType,\n contractAddress: project.contractAddress\n },\n this.endpoint\n );\n }\n return this.contractConfig;\n } catch (error) {\n console.error('Error fetching contract config:', error);\n return null;\n }\n }\n\n async getVersion(): Promise<string> {\n const config = await this.getContractConfig();\n if (config?.version) {\n return config.version;\n }\n\n const strategy = await this.getStrategy();\n return strategy.getVersion();\n }\n\n async getPaused(): Promise<boolean> {\n const config = await this.getContractConfig();\n if (config && config?.paused !== null) {\n return config.paused;\n }\n\n const strategy = await this.getStrategy();\n if (!strategy.getPaused) {\n throw new Error('getPaused is not supported for this chain');\n }\n return strategy.getPaused();\n }\n\n async getClaimFee(amount?: bigint, walletClient?: IWalletClient): Promise<string | bigint> {\n const config = await this.getContractConfig();\n if (config?.claimFee) {\n return config.claimFee;\n }\n\n const strategy = await this.getStrategy(walletClient);\n if (!strategy.getClaimFee) {\n throw new Error('getClaimFee is not supported for this chain');\n }\n return strategy.getClaimFee(this.project?.contractAddress || '', amount || BigInt(0));\n }\n\n // params claimId[]\n async batchCheckClaimed(): Promise<{ result: boolean; status: string }[]> {\n const strategy = await this.getStrategy();\n if (!strategy.batchCheckClaimed) {\n throw new Error('batchCheckClaimed is not supported for this chain');\n }\n const leafs = this.claims?.map((it) => it.leaf);\n if (!leafs) return [];\n return strategy.batchCheckClaimed(leafs);\n }\n\n async getNFT(): Promise<string> {\n const strategy = await this.getStrategy();\n if (!strategy.getNFT) {\n throw new Error('getNFT is not supported for this chain');\n }\n return strategy.getNFT();\n }\n\n async getKycThreshold(): Promise<bigint> {\n const strategy = await this.getStrategy();\n if (!strategy.getKycThreshold) {\n throw new Error('getKycThreshold is not supported for this chain');\n }\n return strategy.getKycThreshold();\n }\n}\n","import { ChainType, IWalletClient } from '@sign-global/tokentable-core';\nimport { EvmAirdropStrategy } from './EvmAirdropStrategy';\nimport { IAirdropStrategy, IAirdropStrategyConstructor } from './IAirdropStrategy';\nimport { SolanaAirdropStrategy } from './SolanaAirdropStrategy';\nimport { TonAirdropStrategy } from './TonAirdropStrategy';\nimport { TonClient } from '@ton/ton';\nimport { AptosAirdropStrategy } from './AptosAirdropStrategy';\n\nexport class AirdropStrategyFactory {\n private static strategyMap: Record<ChainType, IAirdropStrategyConstructor | null> = {\n [ChainType.Evm]: EvmAirdropStrategy,\n [ChainType.Ton]: TonAirdropStrategy,\n [ChainType.Solana]: SolanaAirdropStrategy,\n [ChainType.Aptos]: AptosAirdropStrategy,\n [ChainType.Sui]: null\n };\n\n static createStrategy(params: {\n chainType: ChainType;\n contractAddress: string;\n chainId: string | number;\n walletClient?: IWalletClient;\n tonClient?: TonClient;\n version?: string;\n projectId: string;\n chainRpc: string;\n }): IAirdropStrategy {\n const { chainType, ...strategyParams } = params;\n const StrategyClass = this.strategyMap[chainType];\n\n if (!StrategyClass) {\n throw new Error(`Unsupported chain type: ${chainType}`);\n }\n\n return new StrategyClass(strategyParams);\n }\n}\n","import { EvmAirdropService, ChainId, IWalletClient } from '@sign-global/tokentable-core';\nimport { IAirdropStrategy } from './IAirdropStrategy';\nimport { WalletClient as ViemWalletClient } from 'viem';\n\nexport class EvmAirdropStrategy implements IAirdropStrategy {\n private service: EvmAirdropService | undefined;\n private readonly contractAddress: string;\n private readonly chainId: ChainId;\n private readonly chainRpc: string;\n private walletClient?: ViemWalletClient;\n private cachedVersion: string | null = null;\n\n constructor(params: {\n contractAddress: string;\n chainId: string | number;\n walletClient?: IWalletClient;\n chainRpc: string;\n }) {\n this.contractAddress = params.contractAddress;\n this.chainId = Number(params.chainId) as ChainId;\n this.chainRpc = params.chainRpc;\n if (params.walletClient) {\n this.walletClient = params.walletClient as ViemWalletClient;\n }\n }\n\n async initialize(walletClient?: IWalletClient): Promise<void> {\n if (walletClient) {\n this.walletClient = walletClient as ViemWalletClient;\n }\n this.service = new EvmAirdropService({\n contractAddress: this.contractAddress,\n chainId: this.chainId,\n walletClient: this.walletClient,\n chainRpc: this.chainRpc\n });\n }\n\n isInitialized(): boolean {\n return !!this.service;\n }\n\n async getVersion(): Promise<string> {\n if (this.cachedVersion) {\n return this.cachedVersion;\n }\n if (!this.service) throw new Error('Strategy not initialized');\n this.cachedVersion = await this.service.getVersion();\n return this.cachedVersion;\n }\n\n async claim(claimData: any): Promise<any> {\n if (!this.service) throw new Error('Strategy not initialized');\n const { proof, group, data, value, extraData } = claimData;\n return this.service.claim({\n proof,\n group,\n data,\n value,\n extraData\n });\n }\n\n async checkClaimed(claimData: any): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.isLeafUsed(claimData.leaf);\n }\n\n async batchCheckClaimed(leafs: string[]): Promise<{ result: boolean; status: string }[]> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.batchFetchClaimed(leafs);\n }\n\n async getNFT(): Promise<string> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getNFT() as unknown as string;\n }\n\n async getKycThreshold(): Promise<bigint> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getKycThreshold();\n }\n\n async getClaimFee(contractAddress: string, amount: bigint): Promise<bigint> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getClaimFee(contractAddress, amount) as unknown as bigint;\n }\n}\n","import { SolanaAirdropService, ChainId, IWalletClient, SolanaWalletState } from '@sign-global/tokentable-core';\nimport { IAirdropStrategy } from './IAirdropStrategy';\n\nexport class SolanaAirdropStrategy implements IAirdropStrategy {\n private service: SolanaAirdropService | undefined;\n private readonly chainId: ChainId;\n private readonly chainRpc: string;\n private walletClient?: SolanaWalletState;\n private cachedVersion: string | null = null;\n private projectId: string;\n\n constructor(params: {\n contractAddress: string;\n chainId: string | number;\n walletClient?: IWalletClient;\n projectId: string;\n chainRpc: string;\n }) {\n this.chainId = params.chainId as ChainId;\n this.projectId = params.projectId;\n this.chainRpc = params.chainRpc;\n if (params.walletClient) {\n this.walletClient = params.walletClient as SolanaWalletState;\n }\n }\n\n async initialize(walletClient?: IWalletClient): Promise<void> {\n if (walletClient) {\n this.walletClient = walletClient as SolanaWalletState;\n }\n this.service = new SolanaAirdropService({\n projectId: this.projectId,\n chainId: this.chainId as string,\n walletClient: this.walletClient as any,\n chainRpc: this.chainRpc\n });\n }\n\n isInitialized(): boolean {\n return !!this.service;\n }\n\n async getVersion(): Promise<string> {\n if (this.cachedVersion) {\n return this.cachedVersion;\n }\n if (!this.service) throw new Error('Strategy not initialized');\n this.cachedVersion = await this.service.getVersion();\n return this.cachedVersion;\n }\n\n async claim(claimData: any): Promise<any> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.claim(claimData);\n }\n\n async checkClaimed(claimData: any): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.isLeafUsed(claimData.leaf);\n }\n\n async batchCheckClaimed(leafs: string[]): Promise<{ result: boolean; status: string }[]> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.batchFetchClaimed(leafs);\n }\n\n async getClaimFee(contractAddress: string, amount: bigint): Promise<bigint> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getClaimFee(contractAddress, amount) as unknown as bigint;\n }\n\n async getPaused(): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getPaused();\n }\n}\n","import { TonClient } from '@ton/ton';\nimport { TonConnectUI } from '@tonconnect/ui-react';\nimport { TonAirdropService, IWalletClient } from '@sign-global/tokentable-core';\nimport { IAirdropStrategy } from './IAirdropStrategy';\n\nexport class TonAirdropStrategy implements IAirdropStrategy {\n private service: TonAirdropService | undefined;\n private readonly contractAddress: string;\n private readonly chainId: string;\n private readonly tonClient?: TonClient;\n private walletClient?: TonConnectUI;\n private cachedVersion: string | null = null;\n\n constructor(params: {\n contractAddress: string;\n chainId: string | number;\n walletClient?: IWalletClient;\n tonClient?: TonClient;\n version?: string;\n }) {\n this.contractAddress = params.contractAddress;\n this.chainId = params.chainId.toString();\n this.tonClient = params.tonClient;\n if (params.walletClient) {\n this.walletClient = params.walletClient as TonConnectUI;\n }\n if (params.version) {\n this.cachedVersion = params.version;\n }\n }\n\n async initialize(walletClient?: IWalletClient): Promise<void> {\n if (walletClient) {\n this.walletClient = walletClient as TonConnectUI;\n }\n this.service = new TonAirdropService({\n address: this.contractAddress,\n chainId: this.chainId,\n walletClient: this.walletClient,\n tonClient: this.tonClient,\n version: this.cachedVersion || undefined\n });\n }\n\n isInitialized(): boolean {\n return !!this.service;\n }\n\n async getVersion(): Promise<string> {\n if (!this.service) throw new Error('Strategy not initialized');\n if (!this.cachedVersion) {\n this.cachedVersion = await this.service.getVersion();\n }\n return this.cachedVersion;\n }\n\n async claim(claimData: any, options?: { onLoading?: () => void }): Promise<any> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.claim(claimData, options);\n }\n\n async checkClaimed(claimData: any): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.checkClaimed(claimData);\n }\n\n async getPaused(): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getPaused();\n }\n\n async getClaimFee(contractAddress: string, amount: bigint): Promise<string> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getClaimFee(contractAddress, amount);\n }\n}\n","import { ChainId, IWalletClient, AptosAirdropService, AptosWalletClient } from '@sign-global/tokentable-core';\nimport { IAirdropStrategy } from './IAirdropStrategy';\n\nexport class AptosAirdropStrategy implements IAirdropStrategy {\n private service: AptosAirdropService | undefined;\n private readonly chainId: ChainId;\n private readonly chainRpc: string;\n private walletClient?: AptosWalletClient;\n private cachedVersion: string | null = null;\n private readonly contractAddress: string;\n\n constructor(params: {\n contractAddress: string;\n chainId: string | number;\n walletClient?: IWalletClient;\n chainRpc: string;\n }) {\n this.chainId = params.chainId as ChainId;\n this.chainRpc = params.chainRpc;\n this.contractAddress = params.contractAddress;\n if (params.walletClient) {\n this.walletClient = params.walletClient as AptosWalletClient;\n }\n }\n\n async initialize(walletClient?: IWalletClient): Promise<void> {\n if (walletClient) {\n this.walletClient = walletClient as AptosWalletClient;\n }\n this.service = new AptosAirdropService({\n chainId: this.chainId as string,\n account: this.walletClient as any,\n chainRpc: this.chainRpc,\n address: this.contractAddress\n });\n }\n\n isInitialized(): boolean {\n return !!this.service;\n }\n\n async getVersion(): Promise<string> {\n if (this.cachedVersion) {\n return this.cachedVersion;\n }\n if (!this.service) throw new Error('Strategy not initialized');\n this.cachedVersion = await this.service.getVersion();\n return this.cachedVersion;\n }\n\n async claim(claimData: any): Promise<any> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.claim(claimData);\n }\n\n async checkClaimed(claimData: any): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.isLeafUsed(claimData.leaf);\n }\n\n async batchCheckClaimed(leafs: string[]): Promise<{ result: boolean; status: string }[]> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.batchFetchClaimed(leafs);\n }\n\n async getClaimFee(contractAddress: string, amount: bigint): Promise<bigint> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getClaimFee(contractAddress, amount) as unknown as bigint;\n }\n\n async getPaused(): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getPaused();\n }\n}\n","import { IAirdropStrategy } from './IAirdropStrategy';\n\nexport class StrategyCache {\n private readOnlyStrategies: Map<string, IAirdropStrategy> = new Map();\n private walletStrategies: Map<string, IAirdropStrategy> = new Map();\n\n private getCacheKey(contractAddress: string, chainId: string | number, chainType: string): string {\n return `${chainType}:${contractAddress}:${chainId}`;\n }\n\n getStrategy(contractAddress: string, chainId: string | number, chainType: string, hasWallet: boolean = false): IAirdropStrategy | undefined {\n const cache = hasWallet ? this.walletStrategies : this.readOnlyStrategies;\n const cacheKey = this.getCacheKey(contractAddress, chainId, chainType);\n return cache.get(cacheKey);\n }\n\n setStrategy(contractAddress: string, chainId: string | number, chainType: string, strategy: IAirdropStrategy, hasWallet: boolean = false): void {\n const cache = hasWallet ? this.walletStrategies : this.readOnlyStrategies;\n const cacheKey = this.getCacheKey(contractAddress, chainId, chainType);\n cache.set(cacheKey, strategy);\n }\n\n clearStrategy(contractAddress: string, chainId: string | number, chainType: string, hasWallet?: boolean): void {\n const cacheKey = this.getCacheKey(contractAddress, chainId, chainType);\n if (hasWallet === undefined || hasWallet) {\n this.walletStrategies.delete(cacheKey);\n }\n if (hasWallet === undefined || !hasWallet) {\n this.readOnlyStrategies.delete(cacheKey);\n }\n }\n}\n\nexport const strategyCache = new StrategyCache();\n","import { WalletFactory } from '@sign-global/tokentable-wallets';\nimport {\n bindWallet,\n checkEligibility,\n checkGetSignatures,\n connectGoogleApi,\n connectTwitter,\n disconnectRecipient,\n getAirdropProject,\n cleanUrlParams,\n isMobile,\n getChainRpc,\n CONST,\n EvmSignatureAirdropService,\n SolanaSignatureAirdropService,\n SuiSignatureAirdropService,\n AirdropSigIdentityTypeEnum,\n ChainId,\n ErrorCode,\n IAirdropOptions,\n IAirdropSignatureClaim,\n IAirdropSignatureIdentity,\n IClaimSignature,\n IProject,\n IWalletClient,\n SolanaWalletState,\n ViemWalletClient,\n ChainType,\n SuiWalletClient,\n connectDiscordApi\n} from '@sign-global/tokentable-core';\n\nexport class SignatureAirdropClient {\n private projectId?: string;\n private endpoint?: string;\n private project: IProject | undefined;\n private chainRpc?: string;\n protected claims?: IAirdropSignatureClaim[];\n protected identities?: IAirdropSignatureIdentity[];\n private projectPromise: Promise<void> | undefined;\n private authPromise: Promise<void> | undefined;\n private claimStrategy?: string;\n private strategyCache: Map<\n string,\n EvmSignatureAirdropService | SolanaSignatureAirdropService | SuiSignatureAirdropService\n > = new Map();\n constructor(params: IAirdropOptions) {\n this.projectId = params.projectId;\n this.endpoint = params.endpoint;\n this.chainRpc = params.chainRpc;\n if (this.project) {\n this.project = params.project;\n } else {\n this.projectPromise = this.initializeProjects();\n }\n if (isMobile()) {\n this.authPromise = this.checkAndHandleOAuthCode();\n }\n }\n\n private readonly LOCAL_STORAGE_SID_PREFIX = 'sid_';\n\n private async checkAndHandleOAuthCode() {\n try {\n const urlParams = new URLSearchParams(window.location.search);\n const code = urlParams.get('code');\n const type = urlParams.get('type');\n\n if (code && this.projectId) {\n let res;\n if (type === 'twitter') {\n res = await connectTwitter({ code, projectId: this.projectId }, this.endpoint);\n } else if (type === 'google') {\n res = await connectGoogleApi({ code, projectId: this.projectId }, this.endpoint);\n } else if (type === 'discord') {\n res = await connectDiscordApi({ code, projectId: this.projectId }, this.endpoint);\n }\n if (res?.sid) {\n this.setSid(this.projectId!, res.sid);\n } else {\n throw new Error('Failed to connect');\n }\n cleanUrlParams(['code', 'type']);\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n private setSid(projectId: string, sid: string): void {\n window.localStorage.setItem(`${this.LOCAL_STORAGE_SID_PREFIX}${projectId}`, sid);\n }\n\n private async fetchProjectDetails(projectId: string): Promise<void> {\n const project = await getAirdropProject(projectId, this.endpoint);\n this.project = project;\n if (this.chainRpc) return;\n const chainId = project.chainType === ChainType.Evm ? Number(project.chainId) : project.chainId;\n this.chainRpc = getChainRpc(chainId as ChainId);\n }\n\n protected async initializeProjects() {\n try {\n let projectId = this.projectId;\n if (!projectId) {\n return;\n }\n await this.fetchProjectDetails(projectId);\n } catch (error: any) {\n throw new Error(`Failed to initialize project: ${error.message}`);\n }\n }\n\n async getProjectInfo() {\n if (this.projectPromise) {\n await this.projectPromise;\n }\n if (!this.project) throw new Error('Project not found');\n return this.project;\n }\n\n async connectOAuth({\n onSuccess,\n onError,\n type\n }: {\n onSuccess: () => void;\n onError: (error: Error) => void;\n type: AirdropSigIdentityTypeEnum;\n }) {\n const project = await this.getProjectInfo();\n const authorizeUrl = project.identities.find((item: any) => item.identityType === type)?.authorizeUrl;\n if (!authorizeUrl) {\n onError(new Error('Authorize URL not found'));\n return;\n }\n if (isMobile()) {\n const state = encodeURIComponent(window.location.href);\n window.location.href = `${authorizeUrl}&state=${state}`;\n return;\n }\n const onWindowMessage = async (message: any) => {\n const name = message.data?.name;\n if (name && [CONST.TWITTER_AUTH_SUCCESS, CONST.GOOGLE_AUTH_SUCCESS, CONST.DISCORD_AUTH_SUCCESS].includes(name)) {\n const { code } = message.data.data || {};\n try {\n let res;\n if (name === CONST.GOOGLE_AUTH_SUCCESS) {\n res = await connectGoogleApi({ code, projectId: project.id }, this.endpoint);\n } else if (name === CONST.TWITTER_AUTH_SUCCESS) {\n res = await connectTwitter({ code, projectId: project.id }, this.endpoint);\n } else if (name === CONST.DISCORD_AUTH_SUCCESS) {\n res = await connectDiscordApi({ code, projectId: project.id }, this.endpoint);\n }\n if (res?.sid) {\n this.setSid(project.id, res?.sid);\n onSuccess();\n } else {\n onError(new Error('Failed to connect'));\n }\n } catch (error) {\n onError(error as Error);\n } finally {\n window.removeEventListener('message', onWindowMessage);\n }\n }\n };\n\n window.addEventListener('message', onWindowMessage);\n window.open(`${authorizeUrl}&state=state`, `twitter_auth_${project.id}`, 'width=600,height=800');\n }\n\n async connectX({ onSuccess, onError }: { onSuccess: () => void; onError: (error: Error) => void }) {\n await this.connectOAuth({\n onSuccess,\n onError,\n type: AirdropSigIdentityTypeEnum.Twitter\n });\n }\n\n async connectGoogle({ onSuccess, onError }: { onSuccess: () => void; onError: (error: Error) => void }) {\n await this.connectOAuth({\n onSuccess,\n onError,\n type: AirdropSigIdentityTypeEnum.Google\n });\n }\n\n async connectDiscord({ onSuccess, onError }: { onSuccess: () => void; onError: (error: Error) => void }) {\n await this.connectOAuth({\n onSuccess,\n onError,\n type: AirdropSigIdentityTypeEnum.Discord\n });\n }\n\n async connectWallet({\n chainType,\n onSuccess,\n onError\n }: {\n chainType: ChainType;\n onSuccess?: (address: string) => void;\n onError?: (error: any) => void;\n }) {\n try {\n const project = await this.getProjectInfo();\n const wallet = WalletFactory.getWallet(chainType);\n const timestamp = Date.now();\n const recipientTypeMap = {\n [ChainType.Evm]: AirdropSigIdentityTypeEnum.EVMWallet,\n [ChainType.Solana]: AirdropSigIdentityTypeEnum.SolanaWallet,\n [ChainType.Ton]: AirdropSigIdentityTypeEnum.TONWallet,\n [ChainType.Sui]: '',\n [ChainType.Aptos]: ''\n };\n const msg = [project.id, recipientTypeMap[chainType], timestamp].join(',');\n const signResult = await wallet.signin(msg, false);\n await wallet.disconnect();\n const { message, signature, signedMessage } = signResult || {};\n\n if (this.identities?.find((it) => it.value?.toLowerCase() === wallet.address?.toLowerCase())) {\n onError?.(ErrorCode.WALLET_ALREADY_CONNECTED);\n return;\n }\n\n const payload = {\n signature: signature as string,\n message: message as string,\n key: wallet.publicKey || wallet.address!,\n address: wallet.address!,\n projectId: project.id,\n timestamp: timestamp,\n recipientType: recipientTypeMap[chainType],\n encodedMessage: signedMessage\n };\n\n const res = await bindWallet(payload, this.endpoint);\n if (res?.sid) {\n this.setSid(project.id, res?.sid);\n }\n onSuccess?.(wallet.address!);\n } catch (error) {\n onError?.(error);\n }\n }\n\n async getClaims() {\n const project = await this.getProjectInfo();\n if (this.authPromise) {\n await this.authPromise;\n }\n const res = await checkEligibility(\n {\n projectId: project.id\n },\n this.endpoint\n );\n this.claims = res.claims;\n this.identities = res.identities;\n return res;\n }\n\n public async disconnectIdentity({\n recipientType,\n recipient\n }: {\n recipientType: AirdropSigIdentityTypeEnum;\n recipient?: string;\n }) {\n const project = await this.getProjectInfo();\n return await disconnectRecipient(\n {\n projectId: project.id,\n recipientType,\n recipient\n },\n this.endpoint\n );\n }\n\n public async setClaimStrategy(strategy: string) {\n this.claimStrategy = strategy;\n }\n\n public async getStrategy(\n walletClient?: IWalletClient\n ): Promise<EvmSignatureAirdropService | SolanaSignatureAirdropService | SuiSignatureAirdropService> {\n const project = await this.getProjectInfo();\n\n let cacheKey = 'default';\n if (walletClient) {\n if (project.chainType === ChainType.Evm) {\n cacheKey = (walletClient as ViemWalletClient).account?.address!;\n } else if (project.chainType === ChainType.Solana) {\n cacheKey = (walletClient as SolanaWalletState).publicKey!.toString();\n } else if (project.chainType === ChainType.Sui) {\n cacheKey = (walletClient as SuiWalletClient).accounts[0].address;\n }\n } else {\n cacheKey = 'walletClient';\n }\n\n if (this.strategyCache.has(cacheKey)) {\n return this.strategyCache.get(cacheKey)!;\n }\n\n let strategy = null;\n if (project.chainType === ChainType.Solana) {\n strategy = new SolanaSignatureAirdropService({\n chainId: project.chainId,\n projectId: project.id,\n token: project.tokenAddress,\n walletClient: walletClient as any,\n chainRpc: this.chainRpc!\n });\n } else if (project.chainType === ChainType.Sui) {\n strategy = new SuiSignatureAirdropService({\n chainId: project.chainId as any,\n coinType: project.tokenAddress,\n walletClient: walletClient as any,\n chainRpc: this.chainRpc!,\n distributorId: project.contractAddress\n });\n } else if (project.chainType === ChainType.Evm) {\n strategy = new EvmSignatureAirdropService({\n chainId: Number(project.chainId) as ChainId,\n contractAddress: project.contractAddress,\n walletClient: walletClient as any,\n chainRpc: this.chainRpc!\n });\n }\n if (!strategy) {\n throw new Error('No strategy found');\n }\n this.strategyCache.set(cacheKey, strategy);\n return strategy;\n }\n\n async getVersion(): Promise<string> {\n const strategy = await this.getStrategy();\n return strategy.getVersion();\n }\n\n // solana prams need to wallet\n async getClaimFee(amount?: bigint, walletClient?: IWalletClient): Promise<undefined | bigint> {\n const strategy = await this.getStrategy(walletClient);\n if (!strategy.getClaimFee) {\n throw new Error('getClaimFee is not supported for this chain');\n }\n return await strategy.getClaimFee(this.project?.contractAddress || '', amount || BigInt(1));\n }\n\n async claimAirdrop({\n claimIds,\n walletClient,\n recipient\n }: {\n claimIds: string[];\n walletClient: IWalletClient;\n recipient: string;\n }) {\n if (!claimIds.length) {\n throw new Error('Claim IDs cannot be empty');\n }\n if (!walletClient) {\n throw new Error('Wallet client is required');\n }\n if (!this.claims?.length) {\n throw new Error('No claims available');\n }\n const service = await this.getStrategy(walletClient);\n const project = await this.getProjectInfo();\n const res = await checkGetSignatures(\n {\n claimIds,\n projectId: this.projectId!,\n recipient,\n strategy: this.claimStrategy\n },\n this.endpoint\n );\n if (!res?.signatures?.length) {\n throw new Error('Failed to get signatures');\n }\n const signatureMap = res?.signatures?.reduce(\n (map, item) => {\n map[item.claimId] = item;\n return map;\n },\n {} as Record<string, IClaimSignature>\n );\n const filteredClaims = this.claims.filter((it) => claimIds.includes(it.claimId));\n if (!filteredClaims.length) {\n throw new Error('No matching claims found');\n }\n\n // only evm use\n const defaultRecipient =\n project.chainType === ChainType.Evm ? (walletClient as ViemWalletClient).account?.address! : '';\n\n const claimData = filteredClaims.map((it) => {\n const signature = signatureMap[it.claimId];\n if (!signature) {\n throw new Error(`Signature not found for claim ID: ${it.claimId}`);\n }\n\n return {\n ...it,\n recipient: recipient ? recipient : defaultRecipient,\n ...signature\n };\n });\n\n const hash = (await service!.claim(claimData, recipient)) as `0x${string}`;\n return hash;\n }\n\n async batchCheckClaimed(): Promise<boolean[]> {\n if (!this.claims?.length) return [];\n const strategy = await this.getStrategy();\n if (!strategy.batchFetchClaimed) {\n throw new Error('batchCheckClaimed is not supported for this chain');\n }\n const claimIds = this.claims?.map((it) => it.claimId);\n return strategy.batchFetchClaimed(claimIds);\n }\n\n async getPaused(): Promise<boolean> {\n const strategy = await this.getStrategy();\n if (!strategy.getPaused) {\n throw new Error('getPaused is not supported for this chain');\n }\n return strategy.getPaused();\n }\n}\n"],"mappings":"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","names":["import_tokentable_core","import_tokentable_core","import_tokentable_core","import_tokentable_core","import_tokentable_core","import_tokentable_core"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/AirdropClient.ts","../src/strategies/AirdropStrategyFactory.ts","../src/strategies/EvmAirdropStrategy.ts","../src/strategies/SolanaAirdropStrategy.ts","../src/strategies/TonAirdropStrategy.ts","../src/strategies/AptosAirdropStrategy.ts","../src/strategies/StrategyCache.ts","../src/SignatureAirdropClient.ts"],"sourcesContent":["export { AirdropClient } from './AirdropClient';\nexport { SignatureAirdropClient } from './SignatureAirdropClient';\nexport * from '@sign-global/tokentable-core';\nexport * from '@sign-global/tokentable-wallets';\n","import { TonClient } from '@ton/ton';\nimport {\n getAirdropPro,\n getAirdropProject,\n getAirdropQuery,\n getAirdropContractConfig,\n getChainRpc,\n getTonProjectIdByAddress,\n ChainId,\n ChainType,\n ETokenType,\n EvmAirdropVersionEnum,\n IAirdropClaim,\n IAirdropOptions,\n IContractConfig,\n IProject,\n IWalletClient\n} from '@sign-global/tokentable-core';\nimport { AirdropStrategyFactory } from './strategies/AirdropStrategyFactory';\nimport { IAirdropStrategy } from './strategies/IAirdropStrategy';\nimport { strategyCache } from './strategies/StrategyCache';\n\nexport class AirdropClient {\n private tonClient?: TonClient;\n private slug?: string;\n private projectId?: string;\n private endpoint?: string;\n private project: IProject | undefined;\n protected chainRpc?: string;\n protected claims?: IAirdropClaim[];\n private projectPromise: Promise<void> | undefined;\n private claimHook: ((claimData: IAirdropClaim) => { isLegacy: boolean; attestationId: bigint }) | undefined;\n private contractConfig: IContractConfig | null = null;\n\n constructor(params: IAirdropOptions) {\n if ('slug' in params) {\n this.slug = params.slug;\n }\n this.projectId = params.projectId;\n this.endpoint = params.endpoint;\n this.chainRpc = params.chainRpc;\n if (this.project) {\n this.project = params.project;\n } else {\n this.projectPromise = this.initializeProjects();\n }\n }\n\n setTonClient(tonClient: TonClient) {\n this.tonClient = tonClient;\n }\n\n private getTonClient(): TonClient | undefined {\n if (!this.tonClient) {\n return undefined;\n }\n return this.tonClient;\n }\n\n private async fetchProjectFromSlug(address?: string): Promise<string | undefined> {\n if (!this.slug) return undefined;\n\n const res = await getAirdropPro(this.slug, this.endpoint);\n const projectMap = res?.childProjectMapping || {};\n\n return getTonProjectIdByAddress({\n address,\n slug: this.slug,\n data: projectMap\n });\n }\n\n private async fetchProjectDetails(projectId: string): Promise<void> {\n const project = await getAirdropProject(projectId, this.endpoint);\n this.project = project;\n if (this.chainRpc) return;\n const chainId = project.chainType === ChainType.Evm ? Number(project.chainId) : project.chainId;\n this.chainRpc = getChainRpc(chainId as ChainId);\n }\n\n protected async initializeProjects(address?: string) {\n try {\n let projectId = this.projectId;\n\n // If slug is provided, try to fetch project ID from slug\n if (!projectId) {\n projectId = await this.fetchProjectFromSlug(address);\n }\n\n if (!projectId) {\n return;\n }\n\n // Fetch project details\n await this.fetchProjectDetails(projectId);\n } catch (error: any) {\n throw new Error(`Failed to initialize project: ${error.message}`);\n }\n }\n\n async getProjectInfo() {\n if (this.projectPromise) {\n await this.projectPromise;\n }\n if (!this.project) throw new Error('Project not found');\n return this.project;\n }\n\n async getAirdropClaims(data: { address: string }) {\n if (this.slug) {\n await this.initializeProjects(data.address); // Fetch project details by address & slug\n }\n const project = await this.getProjectInfo();\n\n const res = await getAirdropQuery(\n {\n recipient: data.address,\n projectId: project!.id,\n recipientType: project!.recipientType\n },\n this.endpoint\n );\n const claimsRes = res.claims?.map((it) => ({\n ...it,\n project: project!,\n claimId: project!.chainType === ChainType.Evm ? `${project!.id}:${it.leaf}` : `${project!.id}:${it.index}`\n }));\n this.claims = claimsRes;\n return this.claims;\n }\n\n public async getStrategy(walletClient?: IWalletClient): Promise<IAirdropStrategy> {\n const project = await this.getProjectInfo();\n const version = this.contractConfig?.version || undefined;\n\n const hasWallet = !!walletClient;\n\n // Try to get cached strategy\n let strategy = strategyCache.getStrategy(project.contractAddress, project.chainId, project.chainType, hasWallet);\n\n if (!strategy) {\n // Create new strategy if not cached\n strategy = AirdropStrategyFactory.createStrategy({\n chainType: project.chainType,\n contractAddress: project.contractAddress,\n chainId: project.chainId,\n projectId: project.id,\n walletClient,\n tonClient: this.getTonClient(),\n version,\n chainRpc: this.chainRpc!\n });\n\n // Initialize the strategy\n await strategy.initialize(walletClient);\n\n // Cache the initialized strategy\n strategyCache.setStrategy(project.contractAddress, project.chainId, project.chainType, strategy, hasWallet);\n } else if (hasWallet) {\n // If we have a wallet and the strategy exists, just initialize with the new wallet\n await strategy.initialize(walletClient);\n }\n\n return strategy;\n }\n\n private getClaimDataById(claimId: string) {\n const claimData = this.claims?.find((it) => it.claimId === claimId);\n if (!claimData) throw new Error('Claim data not found');\n return claimData;\n }\n\n setClaimHook(fn: (claimData: IAirdropClaim) => { isLegacy: boolean; attestationId: bigint }) {\n this.claimHook = fn;\n }\n\n private getDefaultExtraData() {\n return {\n isLegacy: true,\n attestationId: BigInt(1)\n };\n }\n\n private async calculateClaimFee(project: IProject, claimData: IAirdropClaim): Promise<string | bigint | undefined> {\n const claimAmount = claimData.amount;\n if (project.chainType === ChainType.Evm) {\n const version = await this.getVersion();\n const isNativeFreeVersion =\n project.tokenType === ETokenType.Native &&\n [EvmAirdropVersionEnum.V3, EvmAirdropVersionEnum.V4].includes(version as EvmAirdropVersionEnum);\n if (isNativeFreeVersion) {\n return undefined;\n }\n if (version.includes('TokenTableMerkleDistributorWithFees')) {\n const fees = claimData.fees;\n return fees ? BigInt(fees) : '0';\n }\n return await this.getClaimFee(BigInt(claimAmount));\n }\n\n if (project.chainType === ChainType.Ton) {\n return await this.getClaimFee(BigInt(claimAmount));\n }\n if (project.chainType === ChainType.Aptos) {\n const fees = claimData.fees;\n return fees ? BigInt(fees) : 0n;\n }\n\n return undefined;\n }\n\n async claimAirdrop(\n { claimId, walletClient }: { claimId: string; walletClient: IWalletClient },\n options?: { onLoading?: () => void }\n ) {\n // Get claim data and initialize strategy\n const claimData = this.getClaimDataById(claimId);\n const strategy = await this.getStrategy(walletClient);\n const project = await this.getProjectInfo();\n\n // Process extra data\n const extraData =\n project.chainType === ChainType.Ton\n ? undefined\n : this.claimHook\n ? this.claimHook(claimData)\n : this.getDefaultExtraData();\n\n // Calculate claim value based on project type\n const value = await this.calculateClaimFee(project, claimData);\n\n // Execute claim with processed data\n return strategy.claim(\n {\n ...claimData,\n extraData,\n value\n },\n options\n );\n }\n\n async checkClaimed(claimId: string): Promise<boolean> {\n const claimData = this.getClaimDataById(claimId);\n const strategy = await this.getStrategy();\n return strategy.checkClaimed(claimData);\n }\n\n private async getContractConfig(): Promise<IContractConfig | null> {\n try {\n const project = await this.getProjectInfo();\n\n if (!this.contractConfig && [ChainType.Evm, ChainType.Ton].includes(project.chainType)) {\n this.contractConfig = await getAirdropContractConfig(\n {\n chainId: project.chainId,\n chainType: project.chainType,\n contractAddress: project.contractAddress\n },\n this.endpoint\n );\n }\n return this.contractConfig;\n } catch (error) {\n console.error('Error fetching contract config:', error);\n return null;\n }\n }\n\n async getVersion(): Promise<string> {\n const config = await this.getContractConfig();\n if (config?.version) {\n return config.version;\n }\n\n const strategy = await this.getStrategy();\n return strategy.getVersion();\n }\n\n async getPaused(): Promise<boolean> {\n const config = await this.getContractConfig();\n if (config && config?.paused !== null) {\n return config.paused;\n }\n\n const strategy = await this.getStrategy();\n if (!strategy.getPaused) {\n throw new Error('getPaused is not supported for this chain');\n }\n return strategy.getPaused();\n }\n\n async getClaimFee(amount?: bigint, walletClient?: IWalletClient): Promise<string | bigint> {\n const config = await this.getContractConfig();\n if (config?.claimFee) {\n return config.claimFee;\n }\n\n const strategy = await this.getStrategy(walletClient);\n if (!strategy.getClaimFee) {\n throw new Error('getClaimFee is not supported for this chain');\n }\n return strategy.getClaimFee(this.project?.contractAddress || '', amount || BigInt(0));\n }\n\n // params claimId[]\n async batchCheckClaimed(): Promise<{ result: boolean; status: string }[]> {\n const strategy = await this.getStrategy();\n if (!strategy.batchCheckClaimed) {\n throw new Error('batchCheckClaimed is not supported for this chain');\n }\n const leafs = this.claims?.map((it) => it.leaf);\n if (!leafs) return [];\n return strategy.batchCheckClaimed(leafs);\n }\n\n async getNFT(): Promise<string> {\n const strategy = await this.getStrategy();\n if (!strategy.getNFT) {\n throw new Error('getNFT is not supported for this chain');\n }\n return strategy.getNFT();\n }\n\n async getKycThreshold(): Promise<bigint> {\n const strategy = await this.getStrategy();\n if (!strategy.getKycThreshold) {\n throw new Error('getKycThreshold is not supported for this chain');\n }\n return strategy.getKycThreshold();\n }\n}\n","import { ChainType, IWalletClient } from '@sign-global/tokentable-core';\nimport { EvmAirdropStrategy } from './EvmAirdropStrategy';\nimport { IAirdropStrategy, IAirdropStrategyConstructor } from './IAirdropStrategy';\nimport { SolanaAirdropStrategy } from './SolanaAirdropStrategy';\nimport { TonAirdropStrategy } from './TonAirdropStrategy';\nimport { TonClient } from '@ton/ton';\nimport { AptosAirdropStrategy } from './AptosAirdropStrategy';\n\nexport class AirdropStrategyFactory {\n private static strategyMap: Record<ChainType, IAirdropStrategyConstructor | null> = {\n [ChainType.Evm]: EvmAirdropStrategy,\n [ChainType.Ton]: TonAirdropStrategy,\n [ChainType.Solana]: SolanaAirdropStrategy,\n [ChainType.Aptos]: AptosAirdropStrategy,\n [ChainType.Sui]: null\n };\n\n static createStrategy(params: {\n chainType: ChainType;\n contractAddress: string;\n chainId: string | number;\n walletClient?: IWalletClient;\n tonClient?: TonClient;\n version?: string;\n projectId: string;\n chainRpc: string;\n }): IAirdropStrategy {\n const { chainType, ...strategyParams } = params;\n const StrategyClass = this.strategyMap[chainType];\n\n if (!StrategyClass) {\n throw new Error(`Unsupported chain type: ${chainType}`);\n }\n\n return new StrategyClass(strategyParams);\n }\n}\n","import { EvmAirdropService, ChainId, IWalletClient } from '@sign-global/tokentable-core';\nimport { IAirdropStrategy } from './IAirdropStrategy';\nimport { WalletClient as ViemWalletClient } from 'viem';\n\nexport class EvmAirdropStrategy implements IAirdropStrategy {\n private service: EvmAirdropService | undefined;\n private readonly contractAddress: string;\n private readonly chainId: ChainId;\n private readonly chainRpc: string;\n private walletClient?: ViemWalletClient;\n private cachedVersion: string | null = null;\n\n constructor(params: {\n contractAddress: string;\n chainId: string | number;\n walletClient?: IWalletClient;\n chainRpc: string;\n }) {\n this.contractAddress = params.contractAddress;\n this.chainId = Number(params.chainId) as ChainId;\n this.chainRpc = params.chainRpc;\n if (params.walletClient) {\n this.walletClient = params.walletClient as ViemWalletClient;\n }\n }\n\n async initialize(walletClient?: IWalletClient): Promise<void> {\n if (walletClient) {\n this.walletClient = walletClient as ViemWalletClient;\n }\n this.service = new EvmAirdropService({\n contractAddress: this.contractAddress,\n chainId: this.chainId,\n walletClient: this.walletClient,\n chainRpc: this.chainRpc\n });\n }\n\n isInitialized(): boolean {\n return !!this.service;\n }\n\n async getVersion(): Promise<string> {\n if (this.cachedVersion) {\n return this.cachedVersion;\n }\n if (!this.service) throw new Error('Strategy not initialized');\n this.cachedVersion = await this.service.getVersion();\n return this.cachedVersion;\n }\n\n async claim(claimData: any): Promise<any> {\n if (!this.service) throw new Error('Strategy not initialized');\n const { proof, group, data, value, extraData } = claimData;\n return this.service.claim({\n proof,\n group,\n data,\n value,\n extraData\n });\n }\n\n async checkClaimed(claimData: any): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.isLeafUsed(claimData.leaf);\n }\n\n async batchCheckClaimed(leafs: string[]): Promise<{ result: boolean; status: string }[]> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.batchFetchClaimed(leafs);\n }\n\n async getNFT(): Promise<string> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getNFT() as unknown as string;\n }\n\n async getKycThreshold(): Promise<bigint> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getKycThreshold();\n }\n\n async getClaimFee(contractAddress: string, amount: bigint): Promise<bigint> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getClaimFee(contractAddress, amount) as unknown as bigint;\n }\n}\n","import { SolanaAirdropService, ChainId, IWalletClient, SolanaWalletState } from '@sign-global/tokentable-core';\nimport { IAirdropStrategy } from './IAirdropStrategy';\n\nexport class SolanaAirdropStrategy implements IAirdropStrategy {\n private service: SolanaAirdropService | undefined;\n private readonly chainId: ChainId;\n private readonly chainRpc: string;\n private walletClient?: SolanaWalletState;\n private cachedVersion: string | null = null;\n private projectId: string;\n\n constructor(params: {\n contractAddress: string;\n chainId: string | number;\n walletClient?: IWalletClient;\n projectId: string;\n chainRpc: string;\n }) {\n this.chainId = params.chainId as ChainId;\n this.projectId = params.projectId;\n this.chainRpc = params.chainRpc;\n if (params.walletClient) {\n this.walletClient = params.walletClient as SolanaWalletState;\n }\n }\n\n async initialize(walletClient?: IWalletClient): Promise<void> {\n if (walletClient) {\n this.walletClient = walletClient as SolanaWalletState;\n }\n this.service = new SolanaAirdropService({\n projectId: this.projectId,\n chainId: this.chainId as string,\n walletClient: this.walletClient as any,\n chainRpc: this.chainRpc\n });\n }\n\n isInitialized(): boolean {\n return !!this.service;\n }\n\n async getVersion(): Promise<string> {\n if (this.cachedVersion) {\n return this.cachedVersion;\n }\n if (!this.service) throw new Error('Strategy not initialized');\n this.cachedVersion = await this.service.getVersion();\n return this.cachedVersion;\n }\n\n async claim(claimData: any): Promise<any> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.claim(claimData);\n }\n\n async checkClaimed(claimData: any): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.isLeafUsed(claimData.leaf);\n }\n\n async batchCheckClaimed(leafs: string[]): Promise<{ result: boolean; status: string }[]> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.batchFetchClaimed(leafs);\n }\n\n async getClaimFee(contractAddress: string, amount: bigint): Promise<bigint> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getClaimFee(contractAddress, amount) as unknown as bigint;\n }\n\n async getPaused(): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getPaused();\n }\n}\n","import { TonClient } from '@ton/ton';\nimport { TonConnectUI } from '@tonconnect/ui-react';\nimport { TonAirdropService, IWalletClient } from '@sign-global/tokentable-core';\nimport { IAirdropStrategy } from './IAirdropStrategy';\n\nexport class TonAirdropStrategy implements IAirdropStrategy {\n private service: TonAirdropService | undefined;\n private readonly contractAddress: string;\n private readonly chainId: string;\n private readonly tonClient?: TonClient;\n private walletClient?: TonConnectUI;\n private cachedVersion: string | null = null;\n\n constructor(params: {\n contractAddress: string;\n chainId: string | number;\n walletClient?: IWalletClient;\n tonClient?: TonClient;\n version?: string;\n }) {\n this.contractAddress = params.contractAddress;\n this.chainId = params.chainId.toString();\n this.tonClient = params.tonClient;\n if (params.walletClient) {\n this.walletClient = params.walletClient as TonConnectUI;\n }\n if (params.version) {\n this.cachedVersion = params.version;\n }\n }\n\n async initialize(walletClient?: IWalletClient): Promise<void> {\n if (walletClient) {\n this.walletClient = walletClient as TonConnectUI;\n }\n this.service = new TonAirdropService({\n address: this.contractAddress,\n chainId: this.chainId,\n walletClient: this.walletClient,\n tonClient: this.tonClient,\n version: this.cachedVersion || undefined\n });\n }\n\n isInitialized(): boolean {\n return !!this.service;\n }\n\n async getVersion(): Promise<string> {\n if (!this.service) throw new Error('Strategy not initialized');\n if (!this.cachedVersion) {\n this.cachedVersion = await this.service.getVersion();\n }\n return this.cachedVersion;\n }\n\n async claim(claimData: any, options?: { onLoading?: () => void }): Promise<any> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.claim(claimData, options);\n }\n\n async checkClaimed(claimData: any): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.checkClaimed(claimData);\n }\n\n async getPaused(): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getPaused();\n }\n\n async getClaimFee(contractAddress: string, amount: bigint): Promise<string> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getClaimFee(contractAddress, amount);\n }\n}\n","import { ChainId, IWalletClient, AptosAirdropService, AptosWalletClient } from '@sign-global/tokentable-core';\nimport { IAirdropStrategy } from './IAirdropStrategy';\n\nexport class AptosAirdropStrategy implements IAirdropStrategy {\n private service: AptosAirdropService | undefined;\n private readonly chainId: ChainId;\n private readonly chainRpc: string;\n private walletClient?: AptosWalletClient;\n private cachedVersion: string | null = null;\n private readonly contractAddress: string;\n\n constructor(params: {\n contractAddress: string;\n chainId: string | number;\n walletClient?: IWalletClient;\n chainRpc: string;\n }) {\n this.chainId = params.chainId as ChainId;\n this.chainRpc = params.chainRpc;\n this.contractAddress = params.contractAddress;\n if (params.walletClient) {\n this.walletClient = params.walletClient as AptosWalletClient;\n }\n }\n\n async initialize(walletClient?: IWalletClient): Promise<void> {\n if (walletClient) {\n this.walletClient = walletClient as AptosWalletClient;\n }\n this.service = new AptosAirdropService({\n chainId: this.chainId as string,\n account: this.walletClient as any,\n chainRpc: this.chainRpc,\n address: this.contractAddress\n });\n }\n\n isInitialized(): boolean {\n return !!this.service;\n }\n\n async getVersion(): Promise<string> {\n if (this.cachedVersion) {\n return this.cachedVersion;\n }\n if (!this.service) throw new Error('Strategy not initialized');\n this.cachedVersion = await this.service.getVersion();\n return this.cachedVersion;\n }\n\n async claim(claimData: any): Promise<any> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.claim(claimData);\n }\n\n async checkClaimed(claimData: any): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.isLeafUsed(claimData.leaf);\n }\n\n async batchCheckClaimed(leafs: string[]): Promise<{ result: boolean; status: string }[]> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.batchFetchClaimed(leafs);\n }\n\n async getClaimFee(contractAddress: string, amount: bigint): Promise<bigint> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getClaimFee(contractAddress, amount) as unknown as bigint;\n }\n\n async getPaused(): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getPaused();\n }\n}\n","import { IAirdropStrategy } from './IAirdropStrategy';\n\nexport class StrategyCache {\n private readOnlyStrategies: Map<string, IAirdropStrategy> = new Map();\n private walletStrategies: Map<string, IAirdropStrategy> = new Map();\n\n private getCacheKey(contractAddress: string, chainId: string | number, chainType: string): string {\n return `${chainType}:${contractAddress}:${chainId}`;\n }\n\n getStrategy(contractAddress: string, chainId: string | number, chainType: string, hasWallet: boolean = false): IAirdropStrategy | undefined {\n const cache = hasWallet ? this.walletStrategies : this.readOnlyStrategies;\n const cacheKey = this.getCacheKey(contractAddress, chainId, chainType);\n return cache.get(cacheKey);\n }\n\n setStrategy(contractAddress: string, chainId: string | number, chainType: string, strategy: IAirdropStrategy, hasWallet: boolean = false): void {\n const cache = hasWallet ? this.walletStrategies : this.readOnlyStrategies;\n const cacheKey = this.getCacheKey(contractAddress, chainId, chainType);\n cache.set(cacheKey, strategy);\n }\n\n clearStrategy(contractAddress: string, chainId: string | number, chainType: string, hasWallet?: boolean): void {\n const cacheKey = this.getCacheKey(contractAddress, chainId, chainType);\n if (hasWallet === undefined || hasWallet) {\n this.walletStrategies.delete(cacheKey);\n }\n if (hasWallet === undefined || !hasWallet) {\n this.readOnlyStrategies.delete(cacheKey);\n }\n }\n}\n\nexport const strategyCache = new StrategyCache();\n","import { WalletFactory } from '@sign-global/tokentable-wallets';\nimport {\n bindWallet,\n checkEligibility,\n checkGetSignatures,\n connectGoogleApi,\n connectTwitter,\n disconnectRecipient,\n getAirdropProject,\n cleanUrlParams,\n isMobile,\n getChainRpc,\n CONST,\n EvmSignatureAirdropService,\n SolanaSignatureAirdropService,\n SuiSignatureAirdropService,\n AirdropSigIdentityTypeEnum,\n ChainId,\n ErrorCode,\n IAirdropOptions,\n IAirdropSignatureClaim,\n IAirdropSignatureIdentity,\n IClaimSignature,\n IProject,\n IWalletClient,\n SolanaWalletState,\n ViemWalletClient,\n ChainType,\n SuiWalletClient,\n connectDiscordApi\n} from '@sign-global/tokentable-core';\n\nexport class SignatureAirdropClient {\n private projectId?: string;\n private endpoint?: string;\n private project: IProject | undefined;\n private chainRpc?: string;\n protected claims?: IAirdropSignatureClaim[];\n protected identities?: IAirdropSignatureIdentity[];\n private projectPromise: Promise<void> | undefined;\n private authPromise: Promise<void> | undefined;\n private claimStrategy?: string;\n private strategyCache: Map<\n string,\n EvmSignatureAirdropService | SolanaSignatureAirdropService | SuiSignatureAirdropService\n > = new Map();\n constructor(params: IAirdropOptions) {\n this.projectId = params.projectId;\n this.endpoint = params.endpoint;\n this.chainRpc = params.chainRpc;\n if (this.project) {\n this.project = params.project;\n } else {\n this.projectPromise = this.initializeProjects();\n }\n if (isMobile()) {\n this.authPromise = this.checkAndHandleOAuthCode();\n }\n }\n\n private readonly LOCAL_STORAGE_SID_PREFIX = 'sid_';\n\n private async checkAndHandleOAuthCode() {\n try {\n const urlParams = new URLSearchParams(window.location.search);\n const code = urlParams.get('code');\n const type = urlParams.get('type');\n\n if (code && this.projectId) {\n let res;\n if (type === 'twitter') {\n res = await connectTwitter({ code, projectId: this.projectId }, this.endpoint);\n } else if (type === 'google') {\n res = await connectGoogleApi({ code, projectId: this.projectId }, this.endpoint);\n } else if (type === 'discord') {\n res = await connectDiscordApi({ code, projectId: this.projectId }, this.endpoint);\n }\n if (res?.sid) {\n this.setSid(this.projectId!, res.sid);\n } else {\n throw new Error('Failed to connect');\n }\n cleanUrlParams(['code', 'type']);\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n private setSid(projectId: string, sid: string): void {\n window.localStorage.setItem(`${this.LOCAL_STORAGE_SID_PREFIX}${projectId}`, sid);\n }\n\n private async fetchProjectDetails(projectId: string): Promise<void> {\n const project = await getAirdropProject(projectId, this.endpoint);\n this.project = project;\n if (this.chainRpc) return;\n const chainId = project.chainType === ChainType.Evm ? Number(project.chainId) : project.chainId;\n this.chainRpc = getChainRpc(chainId as ChainId);\n }\n\n protected async initializeProjects() {\n try {\n let projectId = this.projectId;\n if (!projectId) {\n return;\n }\n await this.fetchProjectDetails(projectId);\n } catch (error: any) {\n throw new Error(`Failed to initialize project: ${error.message}`);\n }\n }\n\n async getProjectInfo() {\n if (this.projectPromise) {\n await this.projectPromise;\n }\n if (!this.project) throw new Error('Project not found');\n return this.project;\n }\n\n async connectOAuth({\n onSuccess,\n onError,\n type\n }: {\n onSuccess: () => void;\n onError: (error: Error) => void;\n type: AirdropSigIdentityTypeEnum;\n }) {\n const project = await this.getProjectInfo();\n const authorizeUrl = project.identities.find((item: any) => item.identityType === type)?.authorizeUrl;\n if (!authorizeUrl) {\n onError(new Error('Authorize URL not found'));\n return;\n }\n if (isMobile()) {\n const state = encodeURIComponent(window.location.href);\n window.location.href = `${authorizeUrl}&state=${state}`;\n return;\n }\n const onWindowMessage = async (message: any) => {\n const name = message.data?.name;\n if (name && [CONST.TWITTER_AUTH_SUCCESS, CONST.GOOGLE_AUTH_SUCCESS, CONST.DISCORD_AUTH_SUCCESS].includes(name)) {\n const { code } = message.data.data || {};\n try {\n let res;\n if (name === CONST.GOOGLE_AUTH_SUCCESS) {\n res = await connectGoogleApi({ code, projectId: project.id }, this.endpoint);\n } else if (name === CONST.TWITTER_AUTH_SUCCESS) {\n res = await connectTwitter({ code, projectId: project.id }, this.endpoint);\n } else if (name === CONST.DISCORD_AUTH_SUCCESS) {\n res = await connectDiscordApi({ code, projectId: project.id }, this.endpoint);\n }\n if (res?.sid) {\n this.setSid(project.id, res?.sid);\n onSuccess();\n } else {\n onError(new Error('Failed to connect'));\n }\n } catch (error) {\n onError(error as Error);\n } finally {\n window.removeEventListener('message', onWindowMessage);\n }\n }\n };\n\n window.addEventListener('message', onWindowMessage);\n window.open(`${authorizeUrl}&state=state`, `twitter_auth_${project.id}`, 'width=600,height=800');\n }\n\n async connectX({ onSuccess, onError }: { onSuccess: () => void; onError: (error: Error) => void }) {\n await this.connectOAuth({\n onSuccess,\n onError,\n type: AirdropSigIdentityTypeEnum.Twitter\n });\n }\n\n async connectGoogle({ onSuccess, onError }: { onSuccess: () => void; onError: (error: Error) => void }) {\n await this.connectOAuth({\n onSuccess,\n onError,\n type: AirdropSigIdentityTypeEnum.Google\n });\n }\n\n async connectDiscord({ onSuccess, onError }: { onSuccess: () => void; onError: (error: Error) => void }) {\n await this.connectOAuth({\n onSuccess,\n onError,\n type: AirdropSigIdentityTypeEnum.Discord\n });\n }\n\n async connectWallet({\n chainType,\n onSuccess,\n onError\n }: {\n chainType: ChainType;\n onSuccess?: (address: string) => void;\n onError?: (error: any) => void;\n }) {\n try {\n const project = await this.getProjectInfo();\n const wallet = WalletFactory.getWallet(chainType);\n const timestamp = Date.now();\n const recipientTypeMap = {\n [ChainType.Evm]: AirdropSigIdentityTypeEnum.EVMWallet,\n [ChainType.Solana]: AirdropSigIdentityTypeEnum.SolanaWallet,\n [ChainType.Ton]: AirdropSigIdentityTypeEnum.TONWallet,\n [ChainType.Sui]: '',\n [ChainType.Aptos]: '',\n [ChainType.Cosmos]: AirdropSigIdentityTypeEnum.CosmosWallet\n };\n const msg = [project.id, recipientTypeMap[chainType], timestamp].join(',');\n const signResult = await wallet.signin(msg, false);\n await wallet.disconnect();\n const { message, signature, signedMessage } = signResult || {};\n\n if (this.identities?.find((it) => it.value?.toLowerCase() === wallet.address?.toLowerCase())) {\n onError?.(ErrorCode.WALLET_ALREADY_CONNECTED);\n return;\n }\n\n const payload = {\n signature: signature as string,\n message: message as string,\n key: wallet.publicKey || wallet.address!,\n address: wallet.address!,\n projectId: project.id,\n timestamp: timestamp,\n recipientType: recipientTypeMap[chainType],\n encodedMessage: signedMessage\n };\n\n const res = await bindWallet(payload, this.endpoint);\n if (res?.sid) {\n this.setSid(project.id, res?.sid);\n }\n onSuccess?.(wallet.address!);\n } catch (error) {\n onError?.(error);\n }\n }\n\n async getClaims() {\n const project = await this.getProjectInfo();\n if (this.authPromise) {\n await this.authPromise;\n }\n const res = await checkEligibility(\n {\n projectId: project.id\n },\n this.endpoint\n );\n this.claims = res.claims;\n this.identities = res.identities;\n return res;\n }\n\n public async disconnectIdentity({\n recipientType,\n recipient\n }: {\n recipientType: AirdropSigIdentityTypeEnum;\n recipient?: string;\n }) {\n const project = await this.getProjectInfo();\n return await disconnectRecipient(\n {\n projectId: project.id,\n recipientType,\n recipient\n },\n this.endpoint\n );\n }\n\n public async setClaimStrategy(strategy: string) {\n this.claimStrategy = strategy;\n }\n\n public async getStrategy(\n walletClient?: IWalletClient\n ): Promise<EvmSignatureAirdropService | SolanaSignatureAirdropService | SuiSignatureAirdropService> {\n const project = await this.getProjectInfo();\n\n let cacheKey = 'default';\n if (walletClient) {\n if (project.chainType === ChainType.Evm) {\n cacheKey = (walletClient as ViemWalletClient).account?.address!;\n } else if (project.chainType === ChainType.Solana) {\n cacheKey = (walletClient as SolanaWalletState).publicKey!.toString();\n } else if (project.chainType === ChainType.Sui) {\n cacheKey = (walletClient as SuiWalletClient).accounts[0].address;\n }\n } else {\n cacheKey = 'walletClient';\n }\n\n if (this.strategyCache.has(cacheKey)) {\n return this.strategyCache.get(cacheKey)!;\n }\n\n let strategy = null;\n if (project.chainType === ChainType.Solana) {\n strategy = new SolanaSignatureAirdropService({\n chainId: project.chainId,\n projectId: project.id,\n token: project.tokenAddress,\n walletClient: walletClient as any,\n chainRpc: this.chainRpc!\n });\n } else if (project.chainType === ChainType.Sui) {\n strategy = new SuiSignatureAirdropService({\n chainId: project.chainId as any,\n coinType: project.tokenAddress,\n walletClient: walletClient as any,\n chainRpc: this.chainRpc!,\n distributorId: project.contractAddress\n });\n } else if (project.chainType === ChainType.Evm) {\n strategy = new EvmSignatureAirdropService({\n chainId: Number(project.chainId) as ChainId,\n contractAddress: project.contractAddress,\n walletClient: walletClient as any,\n chainRpc: this.chainRpc!\n });\n }\n if (!strategy) {\n throw new Error('No strategy found');\n }\n this.strategyCache.set(cacheKey, strategy);\n return strategy;\n }\n\n async getVersion(): Promise<string> {\n const strategy = await this.getStrategy();\n return strategy.getVersion();\n }\n\n // solana prams need to wallet\n async getClaimFee(amount?: bigint, walletClient?: IWalletClient): Promise<undefined | bigint> {\n const strategy = await this.getStrategy(walletClient);\n if (!strategy.getClaimFee) {\n throw new Error('getClaimFee is not supported for this chain');\n }\n return await strategy.getClaimFee(this.project?.contractAddress || '', amount || BigInt(1));\n }\n\n async claimAirdrop({\n claimIds,\n walletClient,\n recipient\n }: {\n claimIds: string[];\n walletClient: IWalletClient;\n recipient: string;\n }) {\n if (!claimIds.length) {\n throw new Error('Claim IDs cannot be empty');\n }\n if (!walletClient) {\n throw new Error('Wallet client is required');\n }\n if (!this.claims?.length) {\n throw new Error('No claims available');\n }\n const service = await this.getStrategy(walletClient);\n const project = await this.getProjectInfo();\n const res = await checkGetSignatures(\n {\n claimIds,\n projectId: this.projectId!,\n recipient,\n strategy: this.claimStrategy\n },\n this.endpoint\n );\n if (!res?.signatures?.length) {\n throw new Error('Failed to get signatures');\n }\n const signatureMap = res?.signatures?.reduce(\n (map, item) => {\n map[item.claimId] = item;\n return map;\n },\n {} as Record<string, IClaimSignature>\n );\n const filteredClaims = this.claims.filter((it) => claimIds.includes(it.claimId));\n if (!filteredClaims.length) {\n throw new Error('No matching claims found');\n }\n\n // only evm use\n const defaultRecipient =\n project.chainType === ChainType.Evm ? (walletClient as ViemWalletClient).account?.address! : '';\n\n const claimData = filteredClaims.map((it) => {\n const signature = signatureMap[it.claimId];\n if (!signature) {\n throw new Error(`Signature not found for claim ID: ${it.claimId}`);\n }\n\n return {\n ...it,\n recipient: recipient ? recipient : defaultRecipient,\n ...signature\n };\n });\n\n const hash = (await service!.claim(claimData, recipient)) as `0x${string}`;\n return hash;\n }\n\n async batchCheckClaimed(): Promise<boolean[]> {\n if (!this.claims?.length) return [];\n const strategy = await this.getStrategy();\n if (!strategy.batchFetchClaimed) {\n throw new Error('batchCheckClaimed is not supported for this chain');\n }\n const claimIds = this.claims?.map((it) => it.claimId);\n return strategy.batchFetchClaimed(claimIds);\n }\n\n async getPaused(): Promise<boolean> {\n const strategy = await this.getStrategy();\n if (!strategy.getPaused) {\n throw new Error('getPaused is not supported for this chain');\n }\n return strategy.getPaused();\n }\n}\n"],"mappings":"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","names":["import_tokentable_core","import_tokentable_core","import_tokentable_core","import_tokentable_core","import_tokentable_core","import_tokentable_core"]}
package/dist/index.mjs CHANGED
@@ -744,7 +744,8 @@ var SignatureAirdropClient = class {
744
744
  [ChainType3.Solana]: AirdropSigIdentityTypeEnum.SolanaWallet,
745
745
  [ChainType3.Ton]: AirdropSigIdentityTypeEnum.TONWallet,
746
746
  [ChainType3.Sui]: "",
747
- [ChainType3.Aptos]: ""
747
+ [ChainType3.Aptos]: "",
748
+ [ChainType3.Cosmos]: AirdropSigIdentityTypeEnum.CosmosWallet
748
749
  };
749
750
  const msg = [project.id, recipientTypeMap[chainType], timestamp].join(",");
750
751
  const signResult = await wallet.signin(msg, false);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/AirdropClient.ts","../src/strategies/AirdropStrategyFactory.ts","../src/strategies/EvmAirdropStrategy.ts","../src/strategies/SolanaAirdropStrategy.ts","../src/strategies/TonAirdropStrategy.ts","../src/strategies/AptosAirdropStrategy.ts","../src/strategies/StrategyCache.ts","../src/SignatureAirdropClient.ts","../src/index.ts"],"sourcesContent":["import { TonClient } from '@ton/ton';\nimport {\n getAirdropPro,\n getAirdropProject,\n getAirdropQuery,\n getAirdropContractConfig,\n getChainRpc,\n getTonProjectIdByAddress,\n ChainId,\n ChainType,\n ETokenType,\n EvmAirdropVersionEnum,\n IAirdropClaim,\n IAirdropOptions,\n IContractConfig,\n IProject,\n IWalletClient\n} from '@sign-global/tokentable-core';\nimport { AirdropStrategyFactory } from './strategies/AirdropStrategyFactory';\nimport { IAirdropStrategy } from './strategies/IAirdropStrategy';\nimport { strategyCache } from './strategies/StrategyCache';\n\nexport class AirdropClient {\n private tonClient?: TonClient;\n private slug?: string;\n private projectId?: string;\n private endpoint?: string;\n private project: IProject | undefined;\n protected chainRpc?: string;\n protected claims?: IAirdropClaim[];\n private projectPromise: Promise<void> | undefined;\n private claimHook: ((claimData: IAirdropClaim) => { isLegacy: boolean; attestationId: bigint }) | undefined;\n private contractConfig: IContractConfig | null = null;\n\n constructor(params: IAirdropOptions) {\n if ('slug' in params) {\n this.slug = params.slug;\n }\n this.projectId = params.projectId;\n this.endpoint = params.endpoint;\n this.chainRpc = params.chainRpc;\n if (this.project) {\n this.project = params.project;\n } else {\n this.projectPromise = this.initializeProjects();\n }\n }\n\n setTonClient(tonClient: TonClient) {\n this.tonClient = tonClient;\n }\n\n private getTonClient(): TonClient | undefined {\n if (!this.tonClient) {\n return undefined;\n }\n return this.tonClient;\n }\n\n private async fetchProjectFromSlug(address?: string): Promise<string | undefined> {\n if (!this.slug) return undefined;\n\n const res = await getAirdropPro(this.slug, this.endpoint);\n const projectMap = res?.childProjectMapping || {};\n\n return getTonProjectIdByAddress({\n address,\n slug: this.slug,\n data: projectMap\n });\n }\n\n private async fetchProjectDetails(projectId: string): Promise<void> {\n const project = await getAirdropProject(projectId, this.endpoint);\n this.project = project;\n if (this.chainRpc) return;\n const chainId = project.chainType === ChainType.Evm ? Number(project.chainId) : project.chainId;\n this.chainRpc = getChainRpc(chainId as ChainId);\n }\n\n protected async initializeProjects(address?: string) {\n try {\n let projectId = this.projectId;\n\n // If slug is provided, try to fetch project ID from slug\n if (!projectId) {\n projectId = await this.fetchProjectFromSlug(address);\n }\n\n if (!projectId) {\n return;\n }\n\n // Fetch project details\n await this.fetchProjectDetails(projectId);\n } catch (error: any) {\n throw new Error(`Failed to initialize project: ${error.message}`);\n }\n }\n\n async getProjectInfo() {\n if (this.projectPromise) {\n await this.projectPromise;\n }\n if (!this.project) throw new Error('Project not found');\n return this.project;\n }\n\n async getAirdropClaims(data: { address: string }) {\n if (this.slug) {\n await this.initializeProjects(data.address); // Fetch project details by address & slug\n }\n const project = await this.getProjectInfo();\n\n const res = await getAirdropQuery(\n {\n recipient: data.address,\n projectId: project!.id,\n recipientType: project!.recipientType\n },\n this.endpoint\n );\n const claimsRes = res.claims?.map((it) => ({\n ...it,\n project: project!,\n claimId: project!.chainType === ChainType.Evm ? `${project!.id}:${it.leaf}` : `${project!.id}:${it.index}`\n }));\n this.claims = claimsRes;\n return this.claims;\n }\n\n public async getStrategy(walletClient?: IWalletClient): Promise<IAirdropStrategy> {\n const project = await this.getProjectInfo();\n const version = this.contractConfig?.version || undefined;\n\n const hasWallet = !!walletClient;\n\n // Try to get cached strategy\n let strategy = strategyCache.getStrategy(project.contractAddress, project.chainId, project.chainType, hasWallet);\n\n if (!strategy) {\n // Create new strategy if not cached\n strategy = AirdropStrategyFactory.createStrategy({\n chainType: project.chainType,\n contractAddress: project.contractAddress,\n chainId: project.chainId,\n projectId: project.id,\n walletClient,\n tonClient: this.getTonClient(),\n version,\n chainRpc: this.chainRpc!\n });\n\n // Initialize the strategy\n await strategy.initialize(walletClient);\n\n // Cache the initialized strategy\n strategyCache.setStrategy(project.contractAddress, project.chainId, project.chainType, strategy, hasWallet);\n } else if (hasWallet) {\n // If we have a wallet and the strategy exists, just initialize with the new wallet\n await strategy.initialize(walletClient);\n }\n\n return strategy;\n }\n\n private getClaimDataById(claimId: string) {\n const claimData = this.claims?.find((it) => it.claimId === claimId);\n if (!claimData) throw new Error('Claim data not found');\n return claimData;\n }\n\n setClaimHook(fn: (claimData: IAirdropClaim) => { isLegacy: boolean; attestationId: bigint }) {\n this.claimHook = fn;\n }\n\n private getDefaultExtraData() {\n return {\n isLegacy: true,\n attestationId: BigInt(1)\n };\n }\n\n private async calculateClaimFee(project: IProject, claimData: IAirdropClaim): Promise<string | bigint | undefined> {\n const claimAmount = claimData.amount;\n if (project.chainType === ChainType.Evm) {\n const version = await this.getVersion();\n const isNativeFreeVersion =\n project.tokenType === ETokenType.Native &&\n [EvmAirdropVersionEnum.V3, EvmAirdropVersionEnum.V4].includes(version as EvmAirdropVersionEnum);\n if (isNativeFreeVersion) {\n return undefined;\n }\n if (version.includes('TokenTableMerkleDistributorWithFees')) {\n const fees = claimData.fees;\n return fees ? BigInt(fees) : '0';\n }\n return await this.getClaimFee(BigInt(claimAmount));\n }\n\n if (project.chainType === ChainType.Ton) {\n return await this.getClaimFee(BigInt(claimAmount));\n }\n if (project.chainType === ChainType.Aptos) {\n const fees = claimData.fees;\n return fees ? BigInt(fees) : 0n;\n }\n\n return undefined;\n }\n\n async claimAirdrop(\n { claimId, walletClient }: { claimId: string; walletClient: IWalletClient },\n options?: { onLoading?: () => void }\n ) {\n // Get claim data and initialize strategy\n const claimData = this.getClaimDataById(claimId);\n const strategy = await this.getStrategy(walletClient);\n const project = await this.getProjectInfo();\n\n // Process extra data\n const extraData =\n project.chainType === ChainType.Ton\n ? undefined\n : this.claimHook\n ? this.claimHook(claimData)\n : this.getDefaultExtraData();\n\n // Calculate claim value based on project type\n const value = await this.calculateClaimFee(project, claimData);\n\n // Execute claim with processed data\n return strategy.claim(\n {\n ...claimData,\n extraData,\n value\n },\n options\n );\n }\n\n async checkClaimed(claimId: string): Promise<boolean> {\n const claimData = this.getClaimDataById(claimId);\n const strategy = await this.getStrategy();\n return strategy.checkClaimed(claimData);\n }\n\n private async getContractConfig(): Promise<IContractConfig | null> {\n try {\n const project = await this.getProjectInfo();\n\n if (!this.contractConfig && [ChainType.Evm, ChainType.Ton].includes(project.chainType)) {\n this.contractConfig = await getAirdropContractConfig(\n {\n chainId: project.chainId,\n chainType: project.chainType,\n contractAddress: project.contractAddress\n },\n this.endpoint\n );\n }\n return this.contractConfig;\n } catch (error) {\n console.error('Error fetching contract config:', error);\n return null;\n }\n }\n\n async getVersion(): Promise<string> {\n const config = await this.getContractConfig();\n if (config?.version) {\n return config.version;\n }\n\n const strategy = await this.getStrategy();\n return strategy.getVersion();\n }\n\n async getPaused(): Promise<boolean> {\n const config = await this.getContractConfig();\n if (config && config?.paused !== null) {\n return config.paused;\n }\n\n const strategy = await this.getStrategy();\n if (!strategy.getPaused) {\n throw new Error('getPaused is not supported for this chain');\n }\n return strategy.getPaused();\n }\n\n async getClaimFee(amount?: bigint, walletClient?: IWalletClient): Promise<string | bigint> {\n const config = await this.getContractConfig();\n if (config?.claimFee) {\n return config.claimFee;\n }\n\n const strategy = await this.getStrategy(walletClient);\n if (!strategy.getClaimFee) {\n throw new Error('getClaimFee is not supported for this chain');\n }\n return strategy.getClaimFee(this.project?.contractAddress || '', amount || BigInt(0));\n }\n\n // params claimId[]\n async batchCheckClaimed(): Promise<{ result: boolean; status: string }[]> {\n const strategy = await this.getStrategy();\n if (!strategy.batchCheckClaimed) {\n throw new Error('batchCheckClaimed is not supported for this chain');\n }\n const leafs = this.claims?.map((it) => it.leaf);\n if (!leafs) return [];\n return strategy.batchCheckClaimed(leafs);\n }\n\n async getNFT(): Promise<string> {\n const strategy = await this.getStrategy();\n if (!strategy.getNFT) {\n throw new Error('getNFT is not supported for this chain');\n }\n return strategy.getNFT();\n }\n\n async getKycThreshold(): Promise<bigint> {\n const strategy = await this.getStrategy();\n if (!strategy.getKycThreshold) {\n throw new Error('getKycThreshold is not supported for this chain');\n }\n return strategy.getKycThreshold();\n }\n}\n","import { ChainType, IWalletClient } from '@sign-global/tokentable-core';\nimport { EvmAirdropStrategy } from './EvmAirdropStrategy';\nimport { IAirdropStrategy, IAirdropStrategyConstructor } from './IAirdropStrategy';\nimport { SolanaAirdropStrategy } from './SolanaAirdropStrategy';\nimport { TonAirdropStrategy } from './TonAirdropStrategy';\nimport { TonClient } from '@ton/ton';\nimport { AptosAirdropStrategy } from './AptosAirdropStrategy';\n\nexport class AirdropStrategyFactory {\n private static strategyMap: Record<ChainType, IAirdropStrategyConstructor | null> = {\n [ChainType.Evm]: EvmAirdropStrategy,\n [ChainType.Ton]: TonAirdropStrategy,\n [ChainType.Solana]: SolanaAirdropStrategy,\n [ChainType.Aptos]: AptosAirdropStrategy,\n [ChainType.Sui]: null\n };\n\n static createStrategy(params: {\n chainType: ChainType;\n contractAddress: string;\n chainId: string | number;\n walletClient?: IWalletClient;\n tonClient?: TonClient;\n version?: string;\n projectId: string;\n chainRpc: string;\n }): IAirdropStrategy {\n const { chainType, ...strategyParams } = params;\n const StrategyClass = this.strategyMap[chainType];\n\n if (!StrategyClass) {\n throw new Error(`Unsupported chain type: ${chainType}`);\n }\n\n return new StrategyClass(strategyParams);\n }\n}\n","import { EvmAirdropService, ChainId, IWalletClient } from '@sign-global/tokentable-core';\nimport { IAirdropStrategy } from './IAirdropStrategy';\nimport { WalletClient as ViemWalletClient } from 'viem';\n\nexport class EvmAirdropStrategy implements IAirdropStrategy {\n private service: EvmAirdropService | undefined;\n private readonly contractAddress: string;\n private readonly chainId: ChainId;\n private readonly chainRpc: string;\n private walletClient?: ViemWalletClient;\n private cachedVersion: string | null = null;\n\n constructor(params: {\n contractAddress: string;\n chainId: string | number;\n walletClient?: IWalletClient;\n chainRpc: string;\n }) {\n this.contractAddress = params.contractAddress;\n this.chainId = Number(params.chainId) as ChainId;\n this.chainRpc = params.chainRpc;\n if (params.walletClient) {\n this.walletClient = params.walletClient as ViemWalletClient;\n }\n }\n\n async initialize(walletClient?: IWalletClient): Promise<void> {\n if (walletClient) {\n this.walletClient = walletClient as ViemWalletClient;\n }\n this.service = new EvmAirdropService({\n contractAddress: this.contractAddress,\n chainId: this.chainId,\n walletClient: this.walletClient,\n chainRpc: this.chainRpc\n });\n }\n\n isInitialized(): boolean {\n return !!this.service;\n }\n\n async getVersion(): Promise<string> {\n if (this.cachedVersion) {\n return this.cachedVersion;\n }\n if (!this.service) throw new Error('Strategy not initialized');\n this.cachedVersion = await this.service.getVersion();\n return this.cachedVersion;\n }\n\n async claim(claimData: any): Promise<any> {\n if (!this.service) throw new Error('Strategy not initialized');\n const { proof, group, data, value, extraData } = claimData;\n return this.service.claim({\n proof,\n group,\n data,\n value,\n extraData\n });\n }\n\n async checkClaimed(claimData: any): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.isLeafUsed(claimData.leaf);\n }\n\n async batchCheckClaimed(leafs: string[]): Promise<{ result: boolean; status: string }[]> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.batchFetchClaimed(leafs);\n }\n\n async getNFT(): Promise<string> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getNFT() as unknown as string;\n }\n\n async getKycThreshold(): Promise<bigint> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getKycThreshold();\n }\n\n async getClaimFee(contractAddress: string, amount: bigint): Promise<bigint> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getClaimFee(contractAddress, amount) as unknown as bigint;\n }\n}\n","import { SolanaAirdropService, ChainId, IWalletClient, SolanaWalletState } from '@sign-global/tokentable-core';\nimport { IAirdropStrategy } from './IAirdropStrategy';\n\nexport class SolanaAirdropStrategy implements IAirdropStrategy {\n private service: SolanaAirdropService | undefined;\n private readonly chainId: ChainId;\n private readonly chainRpc: string;\n private walletClient?: SolanaWalletState;\n private cachedVersion: string | null = null;\n private projectId: string;\n\n constructor(params: {\n contractAddress: string;\n chainId: string | number;\n walletClient?: IWalletClient;\n projectId: string;\n chainRpc: string;\n }) {\n this.chainId = params.chainId as ChainId;\n this.projectId = params.projectId;\n this.chainRpc = params.chainRpc;\n if (params.walletClient) {\n this.walletClient = params.walletClient as SolanaWalletState;\n }\n }\n\n async initialize(walletClient?: IWalletClient): Promise<void> {\n if (walletClient) {\n this.walletClient = walletClient as SolanaWalletState;\n }\n this.service = new SolanaAirdropService({\n projectId: this.projectId,\n chainId: this.chainId as string,\n walletClient: this.walletClient as any,\n chainRpc: this.chainRpc\n });\n }\n\n isInitialized(): boolean {\n return !!this.service;\n }\n\n async getVersion(): Promise<string> {\n if (this.cachedVersion) {\n return this.cachedVersion;\n }\n if (!this.service) throw new Error('Strategy not initialized');\n this.cachedVersion = await this.service.getVersion();\n return this.cachedVersion;\n }\n\n async claim(claimData: any): Promise<any> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.claim(claimData);\n }\n\n async checkClaimed(claimData: any): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.isLeafUsed(claimData.leaf);\n }\n\n async batchCheckClaimed(leafs: string[]): Promise<{ result: boolean; status: string }[]> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.batchFetchClaimed(leafs);\n }\n\n async getClaimFee(contractAddress: string, amount: bigint): Promise<bigint> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getClaimFee(contractAddress, amount) as unknown as bigint;\n }\n\n async getPaused(): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getPaused();\n }\n}\n","import { TonClient } from '@ton/ton';\nimport { TonConnectUI } from '@tonconnect/ui-react';\nimport { TonAirdropService, IWalletClient } from '@sign-global/tokentable-core';\nimport { IAirdropStrategy } from './IAirdropStrategy';\n\nexport class TonAirdropStrategy implements IAirdropStrategy {\n private service: TonAirdropService | undefined;\n private readonly contractAddress: string;\n private readonly chainId: string;\n private readonly tonClient?: TonClient;\n private walletClient?: TonConnectUI;\n private cachedVersion: string | null = null;\n\n constructor(params: {\n contractAddress: string;\n chainId: string | number;\n walletClient?: IWalletClient;\n tonClient?: TonClient;\n version?: string;\n }) {\n this.contractAddress = params.contractAddress;\n this.chainId = params.chainId.toString();\n this.tonClient = params.tonClient;\n if (params.walletClient) {\n this.walletClient = params.walletClient as TonConnectUI;\n }\n if (params.version) {\n this.cachedVersion = params.version;\n }\n }\n\n async initialize(walletClient?: IWalletClient): Promise<void> {\n if (walletClient) {\n this.walletClient = walletClient as TonConnectUI;\n }\n this.service = new TonAirdropService({\n address: this.contractAddress,\n chainId: this.chainId,\n walletClient: this.walletClient,\n tonClient: this.tonClient,\n version: this.cachedVersion || undefined\n });\n }\n\n isInitialized(): boolean {\n return !!this.service;\n }\n\n async getVersion(): Promise<string> {\n if (!this.service) throw new Error('Strategy not initialized');\n if (!this.cachedVersion) {\n this.cachedVersion = await this.service.getVersion();\n }\n return this.cachedVersion;\n }\n\n async claim(claimData: any, options?: { onLoading?: () => void }): Promise<any> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.claim(claimData, options);\n }\n\n async checkClaimed(claimData: any): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.checkClaimed(claimData);\n }\n\n async getPaused(): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getPaused();\n }\n\n async getClaimFee(contractAddress: string, amount: bigint): Promise<string> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getClaimFee(contractAddress, amount);\n }\n}\n","import { ChainId, IWalletClient, AptosAirdropService, AptosWalletClient } from '@sign-global/tokentable-core';\nimport { IAirdropStrategy } from './IAirdropStrategy';\n\nexport class AptosAirdropStrategy implements IAirdropStrategy {\n private service: AptosAirdropService | undefined;\n private readonly chainId: ChainId;\n private readonly chainRpc: string;\n private walletClient?: AptosWalletClient;\n private cachedVersion: string | null = null;\n private readonly contractAddress: string;\n\n constructor(params: {\n contractAddress: string;\n chainId: string | number;\n walletClient?: IWalletClient;\n chainRpc: string;\n }) {\n this.chainId = params.chainId as ChainId;\n this.chainRpc = params.chainRpc;\n this.contractAddress = params.contractAddress;\n if (params.walletClient) {\n this.walletClient = params.walletClient as AptosWalletClient;\n }\n }\n\n async initialize(walletClient?: IWalletClient): Promise<void> {\n if (walletClient) {\n this.walletClient = walletClient as AptosWalletClient;\n }\n this.service = new AptosAirdropService({\n chainId: this.chainId as string,\n account: this.walletClient as any,\n chainRpc: this.chainRpc,\n address: this.contractAddress\n });\n }\n\n isInitialized(): boolean {\n return !!this.service;\n }\n\n async getVersion(): Promise<string> {\n if (this.cachedVersion) {\n return this.cachedVersion;\n }\n if (!this.service) throw new Error('Strategy not initialized');\n this.cachedVersion = await this.service.getVersion();\n return this.cachedVersion;\n }\n\n async claim(claimData: any): Promise<any> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.claim(claimData);\n }\n\n async checkClaimed(claimData: any): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.isLeafUsed(claimData.leaf);\n }\n\n async batchCheckClaimed(leafs: string[]): Promise<{ result: boolean; status: string }[]> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.batchFetchClaimed(leafs);\n }\n\n async getClaimFee(contractAddress: string, amount: bigint): Promise<bigint> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getClaimFee(contractAddress, amount) as unknown as bigint;\n }\n\n async getPaused(): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getPaused();\n }\n}\n","import { IAirdropStrategy } from './IAirdropStrategy';\n\nexport class StrategyCache {\n private readOnlyStrategies: Map<string, IAirdropStrategy> = new Map();\n private walletStrategies: Map<string, IAirdropStrategy> = new Map();\n\n private getCacheKey(contractAddress: string, chainId: string | number, chainType: string): string {\n return `${chainType}:${contractAddress}:${chainId}`;\n }\n\n getStrategy(contractAddress: string, chainId: string | number, chainType: string, hasWallet: boolean = false): IAirdropStrategy | undefined {\n const cache = hasWallet ? this.walletStrategies : this.readOnlyStrategies;\n const cacheKey = this.getCacheKey(contractAddress, chainId, chainType);\n return cache.get(cacheKey);\n }\n\n setStrategy(contractAddress: string, chainId: string | number, chainType: string, strategy: IAirdropStrategy, hasWallet: boolean = false): void {\n const cache = hasWallet ? this.walletStrategies : this.readOnlyStrategies;\n const cacheKey = this.getCacheKey(contractAddress, chainId, chainType);\n cache.set(cacheKey, strategy);\n }\n\n clearStrategy(contractAddress: string, chainId: string | number, chainType: string, hasWallet?: boolean): void {\n const cacheKey = this.getCacheKey(contractAddress, chainId, chainType);\n if (hasWallet === undefined || hasWallet) {\n this.walletStrategies.delete(cacheKey);\n }\n if (hasWallet === undefined || !hasWallet) {\n this.readOnlyStrategies.delete(cacheKey);\n }\n }\n}\n\nexport const strategyCache = new StrategyCache();\n","import { WalletFactory } from '@sign-global/tokentable-wallets';\nimport {\n bindWallet,\n checkEligibility,\n checkGetSignatures,\n connectGoogleApi,\n connectTwitter,\n disconnectRecipient,\n getAirdropProject,\n cleanUrlParams,\n isMobile,\n getChainRpc,\n CONST,\n EvmSignatureAirdropService,\n SolanaSignatureAirdropService,\n SuiSignatureAirdropService,\n AirdropSigIdentityTypeEnum,\n ChainId,\n ErrorCode,\n IAirdropOptions,\n IAirdropSignatureClaim,\n IAirdropSignatureIdentity,\n IClaimSignature,\n IProject,\n IWalletClient,\n SolanaWalletState,\n ViemWalletClient,\n ChainType,\n SuiWalletClient,\n connectDiscordApi\n} from '@sign-global/tokentable-core';\n\nexport class SignatureAirdropClient {\n private projectId?: string;\n private endpoint?: string;\n private project: IProject | undefined;\n private chainRpc?: string;\n protected claims?: IAirdropSignatureClaim[];\n protected identities?: IAirdropSignatureIdentity[];\n private projectPromise: Promise<void> | undefined;\n private authPromise: Promise<void> | undefined;\n private claimStrategy?: string;\n private strategyCache: Map<\n string,\n EvmSignatureAirdropService | SolanaSignatureAirdropService | SuiSignatureAirdropService\n > = new Map();\n constructor(params: IAirdropOptions) {\n this.projectId = params.projectId;\n this.endpoint = params.endpoint;\n this.chainRpc = params.chainRpc;\n if (this.project) {\n this.project = params.project;\n } else {\n this.projectPromise = this.initializeProjects();\n }\n if (isMobile()) {\n this.authPromise = this.checkAndHandleOAuthCode();\n }\n }\n\n private readonly LOCAL_STORAGE_SID_PREFIX = 'sid_';\n\n private async checkAndHandleOAuthCode() {\n try {\n const urlParams = new URLSearchParams(window.location.search);\n const code = urlParams.get('code');\n const type = urlParams.get('type');\n\n if (code && this.projectId) {\n let res;\n if (type === 'twitter') {\n res = await connectTwitter({ code, projectId: this.projectId }, this.endpoint);\n } else if (type === 'google') {\n res = await connectGoogleApi({ code, projectId: this.projectId }, this.endpoint);\n } else if (type === 'discord') {\n res = await connectDiscordApi({ code, projectId: this.projectId }, this.endpoint);\n }\n if (res?.sid) {\n this.setSid(this.projectId!, res.sid);\n } else {\n throw new Error('Failed to connect');\n }\n cleanUrlParams(['code', 'type']);\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n private setSid(projectId: string, sid: string): void {\n window.localStorage.setItem(`${this.LOCAL_STORAGE_SID_PREFIX}${projectId}`, sid);\n }\n\n private async fetchProjectDetails(projectId: string): Promise<void> {\n const project = await getAirdropProject(projectId, this.endpoint);\n this.project = project;\n if (this.chainRpc) return;\n const chainId = project.chainType === ChainType.Evm ? Number(project.chainId) : project.chainId;\n this.chainRpc = getChainRpc(chainId as ChainId);\n }\n\n protected async initializeProjects() {\n try {\n let projectId = this.projectId;\n if (!projectId) {\n return;\n }\n await this.fetchProjectDetails(projectId);\n } catch (error: any) {\n throw new Error(`Failed to initialize project: ${error.message}`);\n }\n }\n\n async getProjectInfo() {\n if (this.projectPromise) {\n await this.projectPromise;\n }\n if (!this.project) throw new Error('Project not found');\n return this.project;\n }\n\n async connectOAuth({\n onSuccess,\n onError,\n type\n }: {\n onSuccess: () => void;\n onError: (error: Error) => void;\n type: AirdropSigIdentityTypeEnum;\n }) {\n const project = await this.getProjectInfo();\n const authorizeUrl = project.identities.find((item: any) => item.identityType === type)?.authorizeUrl;\n if (!authorizeUrl) {\n onError(new Error('Authorize URL not found'));\n return;\n }\n if (isMobile()) {\n const state = encodeURIComponent(window.location.href);\n window.location.href = `${authorizeUrl}&state=${state}`;\n return;\n }\n const onWindowMessage = async (message: any) => {\n const name = message.data?.name;\n if (name && [CONST.TWITTER_AUTH_SUCCESS, CONST.GOOGLE_AUTH_SUCCESS, CONST.DISCORD_AUTH_SUCCESS].includes(name)) {\n const { code } = message.data.data || {};\n try {\n let res;\n if (name === CONST.GOOGLE_AUTH_SUCCESS) {\n res = await connectGoogleApi({ code, projectId: project.id }, this.endpoint);\n } else if (name === CONST.TWITTER_AUTH_SUCCESS) {\n res = await connectTwitter({ code, projectId: project.id }, this.endpoint);\n } else if (name === CONST.DISCORD_AUTH_SUCCESS) {\n res = await connectDiscordApi({ code, projectId: project.id }, this.endpoint);\n }\n if (res?.sid) {\n this.setSid(project.id, res?.sid);\n onSuccess();\n } else {\n onError(new Error('Failed to connect'));\n }\n } catch (error) {\n onError(error as Error);\n } finally {\n window.removeEventListener('message', onWindowMessage);\n }\n }\n };\n\n window.addEventListener('message', onWindowMessage);\n window.open(`${authorizeUrl}&state=state`, `twitter_auth_${project.id}`, 'width=600,height=800');\n }\n\n async connectX({ onSuccess, onError }: { onSuccess: () => void; onError: (error: Error) => void }) {\n await this.connectOAuth({\n onSuccess,\n onError,\n type: AirdropSigIdentityTypeEnum.Twitter\n });\n }\n\n async connectGoogle({ onSuccess, onError }: { onSuccess: () => void; onError: (error: Error) => void }) {\n await this.connectOAuth({\n onSuccess,\n onError,\n type: AirdropSigIdentityTypeEnum.Google\n });\n }\n\n async connectDiscord({ onSuccess, onError }: { onSuccess: () => void; onError: (error: Error) => void }) {\n await this.connectOAuth({\n onSuccess,\n onError,\n type: AirdropSigIdentityTypeEnum.Discord\n });\n }\n\n async connectWallet({\n chainType,\n onSuccess,\n onError\n }: {\n chainType: ChainType;\n onSuccess?: (address: string) => void;\n onError?: (error: any) => void;\n }) {\n try {\n const project = await this.getProjectInfo();\n const wallet = WalletFactory.getWallet(chainType);\n const timestamp = Date.now();\n const recipientTypeMap = {\n [ChainType.Evm]: AirdropSigIdentityTypeEnum.EVMWallet,\n [ChainType.Solana]: AirdropSigIdentityTypeEnum.SolanaWallet,\n [ChainType.Ton]: AirdropSigIdentityTypeEnum.TONWallet,\n [ChainType.Sui]: '',\n [ChainType.Aptos]: ''\n };\n const msg = [project.id, recipientTypeMap[chainType], timestamp].join(',');\n const signResult = await wallet.signin(msg, false);\n await wallet.disconnect();\n const { message, signature, signedMessage } = signResult || {};\n\n if (this.identities?.find((it) => it.value?.toLowerCase() === wallet.address?.toLowerCase())) {\n onError?.(ErrorCode.WALLET_ALREADY_CONNECTED);\n return;\n }\n\n const payload = {\n signature: signature as string,\n message: message as string,\n key: wallet.publicKey || wallet.address!,\n address: wallet.address!,\n projectId: project.id,\n timestamp: timestamp,\n recipientType: recipientTypeMap[chainType],\n encodedMessage: signedMessage\n };\n\n const res = await bindWallet(payload, this.endpoint);\n if (res?.sid) {\n this.setSid(project.id, res?.sid);\n }\n onSuccess?.(wallet.address!);\n } catch (error) {\n onError?.(error);\n }\n }\n\n async getClaims() {\n const project = await this.getProjectInfo();\n if (this.authPromise) {\n await this.authPromise;\n }\n const res = await checkEligibility(\n {\n projectId: project.id\n },\n this.endpoint\n );\n this.claims = res.claims;\n this.identities = res.identities;\n return res;\n }\n\n public async disconnectIdentity({\n recipientType,\n recipient\n }: {\n recipientType: AirdropSigIdentityTypeEnum;\n recipient?: string;\n }) {\n const project = await this.getProjectInfo();\n return await disconnectRecipient(\n {\n projectId: project.id,\n recipientType,\n recipient\n },\n this.endpoint\n );\n }\n\n public async setClaimStrategy(strategy: string) {\n this.claimStrategy = strategy;\n }\n\n public async getStrategy(\n walletClient?: IWalletClient\n ): Promise<EvmSignatureAirdropService | SolanaSignatureAirdropService | SuiSignatureAirdropService> {\n const project = await this.getProjectInfo();\n\n let cacheKey = 'default';\n if (walletClient) {\n if (project.chainType === ChainType.Evm) {\n cacheKey = (walletClient as ViemWalletClient).account?.address!;\n } else if (project.chainType === ChainType.Solana) {\n cacheKey = (walletClient as SolanaWalletState).publicKey!.toString();\n } else if (project.chainType === ChainType.Sui) {\n cacheKey = (walletClient as SuiWalletClient).accounts[0].address;\n }\n } else {\n cacheKey = 'walletClient';\n }\n\n if (this.strategyCache.has(cacheKey)) {\n return this.strategyCache.get(cacheKey)!;\n }\n\n let strategy = null;\n if (project.chainType === ChainType.Solana) {\n strategy = new SolanaSignatureAirdropService({\n chainId: project.chainId,\n projectId: project.id,\n token: project.tokenAddress,\n walletClient: walletClient as any,\n chainRpc: this.chainRpc!\n });\n } else if (project.chainType === ChainType.Sui) {\n strategy = new SuiSignatureAirdropService({\n chainId: project.chainId as any,\n coinType: project.tokenAddress,\n walletClient: walletClient as any,\n chainRpc: this.chainRpc!,\n distributorId: project.contractAddress\n });\n } else if (project.chainType === ChainType.Evm) {\n strategy = new EvmSignatureAirdropService({\n chainId: Number(project.chainId) as ChainId,\n contractAddress: project.contractAddress,\n walletClient: walletClient as any,\n chainRpc: this.chainRpc!\n });\n }\n if (!strategy) {\n throw new Error('No strategy found');\n }\n this.strategyCache.set(cacheKey, strategy);\n return strategy;\n }\n\n async getVersion(): Promise<string> {\n const strategy = await this.getStrategy();\n return strategy.getVersion();\n }\n\n // solana prams need to wallet\n async getClaimFee(amount?: bigint, walletClient?: IWalletClient): Promise<undefined | bigint> {\n const strategy = await this.getStrategy(walletClient);\n if (!strategy.getClaimFee) {\n throw new Error('getClaimFee is not supported for this chain');\n }\n return await strategy.getClaimFee(this.project?.contractAddress || '', amount || BigInt(1));\n }\n\n async claimAirdrop({\n claimIds,\n walletClient,\n recipient\n }: {\n claimIds: string[];\n walletClient: IWalletClient;\n recipient: string;\n }) {\n if (!claimIds.length) {\n throw new Error('Claim IDs cannot be empty');\n }\n if (!walletClient) {\n throw new Error('Wallet client is required');\n }\n if (!this.claims?.length) {\n throw new Error('No claims available');\n }\n const service = await this.getStrategy(walletClient);\n const project = await this.getProjectInfo();\n const res = await checkGetSignatures(\n {\n claimIds,\n projectId: this.projectId!,\n recipient,\n strategy: this.claimStrategy\n },\n this.endpoint\n );\n if (!res?.signatures?.length) {\n throw new Error('Failed to get signatures');\n }\n const signatureMap = res?.signatures?.reduce(\n (map, item) => {\n map[item.claimId] = item;\n return map;\n },\n {} as Record<string, IClaimSignature>\n );\n const filteredClaims = this.claims.filter((it) => claimIds.includes(it.claimId));\n if (!filteredClaims.length) {\n throw new Error('No matching claims found');\n }\n\n // only evm use\n const defaultRecipient =\n project.chainType === ChainType.Evm ? (walletClient as ViemWalletClient).account?.address! : '';\n\n const claimData = filteredClaims.map((it) => {\n const signature = signatureMap[it.claimId];\n if (!signature) {\n throw new Error(`Signature not found for claim ID: ${it.claimId}`);\n }\n\n return {\n ...it,\n recipient: recipient ? recipient : defaultRecipient,\n ...signature\n };\n });\n\n const hash = (await service!.claim(claimData, recipient)) as `0x${string}`;\n return hash;\n }\n\n async batchCheckClaimed(): Promise<boolean[]> {\n if (!this.claims?.length) return [];\n const strategy = await this.getStrategy();\n if (!strategy.batchFetchClaimed) {\n throw new Error('batchCheckClaimed is not supported for this chain');\n }\n const claimIds = this.claims?.map((it) => it.claimId);\n return strategy.batchFetchClaimed(claimIds);\n }\n\n async getPaused(): Promise<boolean> {\n const strategy = await this.getStrategy();\n if (!strategy.getPaused) {\n throw new Error('getPaused is not supported for this chain');\n }\n return strategy.getPaused();\n }\n}\n","export { AirdropClient } from './AirdropClient';\nexport { SignatureAirdropClient } from './SignatureAirdropClient';\nexport * from '@sign-global/tokentable-core';\nexport * from '@sign-global/tokentable-wallets';\n"],"mappings":"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","names":["ChainType","ChainType","getAirdropProject","getChainRpc","ChainType"]}
1
+ {"version":3,"sources":["../src/AirdropClient.ts","../src/strategies/AirdropStrategyFactory.ts","../src/strategies/EvmAirdropStrategy.ts","../src/strategies/SolanaAirdropStrategy.ts","../src/strategies/TonAirdropStrategy.ts","../src/strategies/AptosAirdropStrategy.ts","../src/strategies/StrategyCache.ts","../src/SignatureAirdropClient.ts","../src/index.ts"],"sourcesContent":["import { TonClient } from '@ton/ton';\nimport {\n getAirdropPro,\n getAirdropProject,\n getAirdropQuery,\n getAirdropContractConfig,\n getChainRpc,\n getTonProjectIdByAddress,\n ChainId,\n ChainType,\n ETokenType,\n EvmAirdropVersionEnum,\n IAirdropClaim,\n IAirdropOptions,\n IContractConfig,\n IProject,\n IWalletClient\n} from '@sign-global/tokentable-core';\nimport { AirdropStrategyFactory } from './strategies/AirdropStrategyFactory';\nimport { IAirdropStrategy } from './strategies/IAirdropStrategy';\nimport { strategyCache } from './strategies/StrategyCache';\n\nexport class AirdropClient {\n private tonClient?: TonClient;\n private slug?: string;\n private projectId?: string;\n private endpoint?: string;\n private project: IProject | undefined;\n protected chainRpc?: string;\n protected claims?: IAirdropClaim[];\n private projectPromise: Promise<void> | undefined;\n private claimHook: ((claimData: IAirdropClaim) => { isLegacy: boolean; attestationId: bigint }) | undefined;\n private contractConfig: IContractConfig | null = null;\n\n constructor(params: IAirdropOptions) {\n if ('slug' in params) {\n this.slug = params.slug;\n }\n this.projectId = params.projectId;\n this.endpoint = params.endpoint;\n this.chainRpc = params.chainRpc;\n if (this.project) {\n this.project = params.project;\n } else {\n this.projectPromise = this.initializeProjects();\n }\n }\n\n setTonClient(tonClient: TonClient) {\n this.tonClient = tonClient;\n }\n\n private getTonClient(): TonClient | undefined {\n if (!this.tonClient) {\n return undefined;\n }\n return this.tonClient;\n }\n\n private async fetchProjectFromSlug(address?: string): Promise<string | undefined> {\n if (!this.slug) return undefined;\n\n const res = await getAirdropPro(this.slug, this.endpoint);\n const projectMap = res?.childProjectMapping || {};\n\n return getTonProjectIdByAddress({\n address,\n slug: this.slug,\n data: projectMap\n });\n }\n\n private async fetchProjectDetails(projectId: string): Promise<void> {\n const project = await getAirdropProject(projectId, this.endpoint);\n this.project = project;\n if (this.chainRpc) return;\n const chainId = project.chainType === ChainType.Evm ? Number(project.chainId) : project.chainId;\n this.chainRpc = getChainRpc(chainId as ChainId);\n }\n\n protected async initializeProjects(address?: string) {\n try {\n let projectId = this.projectId;\n\n // If slug is provided, try to fetch project ID from slug\n if (!projectId) {\n projectId = await this.fetchProjectFromSlug(address);\n }\n\n if (!projectId) {\n return;\n }\n\n // Fetch project details\n await this.fetchProjectDetails(projectId);\n } catch (error: any) {\n throw new Error(`Failed to initialize project: ${error.message}`);\n }\n }\n\n async getProjectInfo() {\n if (this.projectPromise) {\n await this.projectPromise;\n }\n if (!this.project) throw new Error('Project not found');\n return this.project;\n }\n\n async getAirdropClaims(data: { address: string }) {\n if (this.slug) {\n await this.initializeProjects(data.address); // Fetch project details by address & slug\n }\n const project = await this.getProjectInfo();\n\n const res = await getAirdropQuery(\n {\n recipient: data.address,\n projectId: project!.id,\n recipientType: project!.recipientType\n },\n this.endpoint\n );\n const claimsRes = res.claims?.map((it) => ({\n ...it,\n project: project!,\n claimId: project!.chainType === ChainType.Evm ? `${project!.id}:${it.leaf}` : `${project!.id}:${it.index}`\n }));\n this.claims = claimsRes;\n return this.claims;\n }\n\n public async getStrategy(walletClient?: IWalletClient): Promise<IAirdropStrategy> {\n const project = await this.getProjectInfo();\n const version = this.contractConfig?.version || undefined;\n\n const hasWallet = !!walletClient;\n\n // Try to get cached strategy\n let strategy = strategyCache.getStrategy(project.contractAddress, project.chainId, project.chainType, hasWallet);\n\n if (!strategy) {\n // Create new strategy if not cached\n strategy = AirdropStrategyFactory.createStrategy({\n chainType: project.chainType,\n contractAddress: project.contractAddress,\n chainId: project.chainId,\n projectId: project.id,\n walletClient,\n tonClient: this.getTonClient(),\n version,\n chainRpc: this.chainRpc!\n });\n\n // Initialize the strategy\n await strategy.initialize(walletClient);\n\n // Cache the initialized strategy\n strategyCache.setStrategy(project.contractAddress, project.chainId, project.chainType, strategy, hasWallet);\n } else if (hasWallet) {\n // If we have a wallet and the strategy exists, just initialize with the new wallet\n await strategy.initialize(walletClient);\n }\n\n return strategy;\n }\n\n private getClaimDataById(claimId: string) {\n const claimData = this.claims?.find((it) => it.claimId === claimId);\n if (!claimData) throw new Error('Claim data not found');\n return claimData;\n }\n\n setClaimHook(fn: (claimData: IAirdropClaim) => { isLegacy: boolean; attestationId: bigint }) {\n this.claimHook = fn;\n }\n\n private getDefaultExtraData() {\n return {\n isLegacy: true,\n attestationId: BigInt(1)\n };\n }\n\n private async calculateClaimFee(project: IProject, claimData: IAirdropClaim): Promise<string | bigint | undefined> {\n const claimAmount = claimData.amount;\n if (project.chainType === ChainType.Evm) {\n const version = await this.getVersion();\n const isNativeFreeVersion =\n project.tokenType === ETokenType.Native &&\n [EvmAirdropVersionEnum.V3, EvmAirdropVersionEnum.V4].includes(version as EvmAirdropVersionEnum);\n if (isNativeFreeVersion) {\n return undefined;\n }\n if (version.includes('TokenTableMerkleDistributorWithFees')) {\n const fees = claimData.fees;\n return fees ? BigInt(fees) : '0';\n }\n return await this.getClaimFee(BigInt(claimAmount));\n }\n\n if (project.chainType === ChainType.Ton) {\n return await this.getClaimFee(BigInt(claimAmount));\n }\n if (project.chainType === ChainType.Aptos) {\n const fees = claimData.fees;\n return fees ? BigInt(fees) : 0n;\n }\n\n return undefined;\n }\n\n async claimAirdrop(\n { claimId, walletClient }: { claimId: string; walletClient: IWalletClient },\n options?: { onLoading?: () => void }\n ) {\n // Get claim data and initialize strategy\n const claimData = this.getClaimDataById(claimId);\n const strategy = await this.getStrategy(walletClient);\n const project = await this.getProjectInfo();\n\n // Process extra data\n const extraData =\n project.chainType === ChainType.Ton\n ? undefined\n : this.claimHook\n ? this.claimHook(claimData)\n : this.getDefaultExtraData();\n\n // Calculate claim value based on project type\n const value = await this.calculateClaimFee(project, claimData);\n\n // Execute claim with processed data\n return strategy.claim(\n {\n ...claimData,\n extraData,\n value\n },\n options\n );\n }\n\n async checkClaimed(claimId: string): Promise<boolean> {\n const claimData = this.getClaimDataById(claimId);\n const strategy = await this.getStrategy();\n return strategy.checkClaimed(claimData);\n }\n\n private async getContractConfig(): Promise<IContractConfig | null> {\n try {\n const project = await this.getProjectInfo();\n\n if (!this.contractConfig && [ChainType.Evm, ChainType.Ton].includes(project.chainType)) {\n this.contractConfig = await getAirdropContractConfig(\n {\n chainId: project.chainId,\n chainType: project.chainType,\n contractAddress: project.contractAddress\n },\n this.endpoint\n );\n }\n return this.contractConfig;\n } catch (error) {\n console.error('Error fetching contract config:', error);\n return null;\n }\n }\n\n async getVersion(): Promise<string> {\n const config = await this.getContractConfig();\n if (config?.version) {\n return config.version;\n }\n\n const strategy = await this.getStrategy();\n return strategy.getVersion();\n }\n\n async getPaused(): Promise<boolean> {\n const config = await this.getContractConfig();\n if (config && config?.paused !== null) {\n return config.paused;\n }\n\n const strategy = await this.getStrategy();\n if (!strategy.getPaused) {\n throw new Error('getPaused is not supported for this chain');\n }\n return strategy.getPaused();\n }\n\n async getClaimFee(amount?: bigint, walletClient?: IWalletClient): Promise<string | bigint> {\n const config = await this.getContractConfig();\n if (config?.claimFee) {\n return config.claimFee;\n }\n\n const strategy = await this.getStrategy(walletClient);\n if (!strategy.getClaimFee) {\n throw new Error('getClaimFee is not supported for this chain');\n }\n return strategy.getClaimFee(this.project?.contractAddress || '', amount || BigInt(0));\n }\n\n // params claimId[]\n async batchCheckClaimed(): Promise<{ result: boolean; status: string }[]> {\n const strategy = await this.getStrategy();\n if (!strategy.batchCheckClaimed) {\n throw new Error('batchCheckClaimed is not supported for this chain');\n }\n const leafs = this.claims?.map((it) => it.leaf);\n if (!leafs) return [];\n return strategy.batchCheckClaimed(leafs);\n }\n\n async getNFT(): Promise<string> {\n const strategy = await this.getStrategy();\n if (!strategy.getNFT) {\n throw new Error('getNFT is not supported for this chain');\n }\n return strategy.getNFT();\n }\n\n async getKycThreshold(): Promise<bigint> {\n const strategy = await this.getStrategy();\n if (!strategy.getKycThreshold) {\n throw new Error('getKycThreshold is not supported for this chain');\n }\n return strategy.getKycThreshold();\n }\n}\n","import { ChainType, IWalletClient } from '@sign-global/tokentable-core';\nimport { EvmAirdropStrategy } from './EvmAirdropStrategy';\nimport { IAirdropStrategy, IAirdropStrategyConstructor } from './IAirdropStrategy';\nimport { SolanaAirdropStrategy } from './SolanaAirdropStrategy';\nimport { TonAirdropStrategy } from './TonAirdropStrategy';\nimport { TonClient } from '@ton/ton';\nimport { AptosAirdropStrategy } from './AptosAirdropStrategy';\n\nexport class AirdropStrategyFactory {\n private static strategyMap: Record<ChainType, IAirdropStrategyConstructor | null> = {\n [ChainType.Evm]: EvmAirdropStrategy,\n [ChainType.Ton]: TonAirdropStrategy,\n [ChainType.Solana]: SolanaAirdropStrategy,\n [ChainType.Aptos]: AptosAirdropStrategy,\n [ChainType.Sui]: null\n };\n\n static createStrategy(params: {\n chainType: ChainType;\n contractAddress: string;\n chainId: string | number;\n walletClient?: IWalletClient;\n tonClient?: TonClient;\n version?: string;\n projectId: string;\n chainRpc: string;\n }): IAirdropStrategy {\n const { chainType, ...strategyParams } = params;\n const StrategyClass = this.strategyMap[chainType];\n\n if (!StrategyClass) {\n throw new Error(`Unsupported chain type: ${chainType}`);\n }\n\n return new StrategyClass(strategyParams);\n }\n}\n","import { EvmAirdropService, ChainId, IWalletClient } from '@sign-global/tokentable-core';\nimport { IAirdropStrategy } from './IAirdropStrategy';\nimport { WalletClient as ViemWalletClient } from 'viem';\n\nexport class EvmAirdropStrategy implements IAirdropStrategy {\n private service: EvmAirdropService | undefined;\n private readonly contractAddress: string;\n private readonly chainId: ChainId;\n private readonly chainRpc: string;\n private walletClient?: ViemWalletClient;\n private cachedVersion: string | null = null;\n\n constructor(params: {\n contractAddress: string;\n chainId: string | number;\n walletClient?: IWalletClient;\n chainRpc: string;\n }) {\n this.contractAddress = params.contractAddress;\n this.chainId = Number(params.chainId) as ChainId;\n this.chainRpc = params.chainRpc;\n if (params.walletClient) {\n this.walletClient = params.walletClient as ViemWalletClient;\n }\n }\n\n async initialize(walletClient?: IWalletClient): Promise<void> {\n if (walletClient) {\n this.walletClient = walletClient as ViemWalletClient;\n }\n this.service = new EvmAirdropService({\n contractAddress: this.contractAddress,\n chainId: this.chainId,\n walletClient: this.walletClient,\n chainRpc: this.chainRpc\n });\n }\n\n isInitialized(): boolean {\n return !!this.service;\n }\n\n async getVersion(): Promise<string> {\n if (this.cachedVersion) {\n return this.cachedVersion;\n }\n if (!this.service) throw new Error('Strategy not initialized');\n this.cachedVersion = await this.service.getVersion();\n return this.cachedVersion;\n }\n\n async claim(claimData: any): Promise<any> {\n if (!this.service) throw new Error('Strategy not initialized');\n const { proof, group, data, value, extraData } = claimData;\n return this.service.claim({\n proof,\n group,\n data,\n value,\n extraData\n });\n }\n\n async checkClaimed(claimData: any): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.isLeafUsed(claimData.leaf);\n }\n\n async batchCheckClaimed(leafs: string[]): Promise<{ result: boolean; status: string }[]> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.batchFetchClaimed(leafs);\n }\n\n async getNFT(): Promise<string> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getNFT() as unknown as string;\n }\n\n async getKycThreshold(): Promise<bigint> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getKycThreshold();\n }\n\n async getClaimFee(contractAddress: string, amount: bigint): Promise<bigint> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getClaimFee(contractAddress, amount) as unknown as bigint;\n }\n}\n","import { SolanaAirdropService, ChainId, IWalletClient, SolanaWalletState } from '@sign-global/tokentable-core';\nimport { IAirdropStrategy } from './IAirdropStrategy';\n\nexport class SolanaAirdropStrategy implements IAirdropStrategy {\n private service: SolanaAirdropService | undefined;\n private readonly chainId: ChainId;\n private readonly chainRpc: string;\n private walletClient?: SolanaWalletState;\n private cachedVersion: string | null = null;\n private projectId: string;\n\n constructor(params: {\n contractAddress: string;\n chainId: string | number;\n walletClient?: IWalletClient;\n projectId: string;\n chainRpc: string;\n }) {\n this.chainId = params.chainId as ChainId;\n this.projectId = params.projectId;\n this.chainRpc = params.chainRpc;\n if (params.walletClient) {\n this.walletClient = params.walletClient as SolanaWalletState;\n }\n }\n\n async initialize(walletClient?: IWalletClient): Promise<void> {\n if (walletClient) {\n this.walletClient = walletClient as SolanaWalletState;\n }\n this.service = new SolanaAirdropService({\n projectId: this.projectId,\n chainId: this.chainId as string,\n walletClient: this.walletClient as any,\n chainRpc: this.chainRpc\n });\n }\n\n isInitialized(): boolean {\n return !!this.service;\n }\n\n async getVersion(): Promise<string> {\n if (this.cachedVersion) {\n return this.cachedVersion;\n }\n if (!this.service) throw new Error('Strategy not initialized');\n this.cachedVersion = await this.service.getVersion();\n return this.cachedVersion;\n }\n\n async claim(claimData: any): Promise<any> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.claim(claimData);\n }\n\n async checkClaimed(claimData: any): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.isLeafUsed(claimData.leaf);\n }\n\n async batchCheckClaimed(leafs: string[]): Promise<{ result: boolean; status: string }[]> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.batchFetchClaimed(leafs);\n }\n\n async getClaimFee(contractAddress: string, amount: bigint): Promise<bigint> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getClaimFee(contractAddress, amount) as unknown as bigint;\n }\n\n async getPaused(): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getPaused();\n }\n}\n","import { TonClient } from '@ton/ton';\nimport { TonConnectUI } from '@tonconnect/ui-react';\nimport { TonAirdropService, IWalletClient } from '@sign-global/tokentable-core';\nimport { IAirdropStrategy } from './IAirdropStrategy';\n\nexport class TonAirdropStrategy implements IAirdropStrategy {\n private service: TonAirdropService | undefined;\n private readonly contractAddress: string;\n private readonly chainId: string;\n private readonly tonClient?: TonClient;\n private walletClient?: TonConnectUI;\n private cachedVersion: string | null = null;\n\n constructor(params: {\n contractAddress: string;\n chainId: string | number;\n walletClient?: IWalletClient;\n tonClient?: TonClient;\n version?: string;\n }) {\n this.contractAddress = params.contractAddress;\n this.chainId = params.chainId.toString();\n this.tonClient = params.tonClient;\n if (params.walletClient) {\n this.walletClient = params.walletClient as TonConnectUI;\n }\n if (params.version) {\n this.cachedVersion = params.version;\n }\n }\n\n async initialize(walletClient?: IWalletClient): Promise<void> {\n if (walletClient) {\n this.walletClient = walletClient as TonConnectUI;\n }\n this.service = new TonAirdropService({\n address: this.contractAddress,\n chainId: this.chainId,\n walletClient: this.walletClient,\n tonClient: this.tonClient,\n version: this.cachedVersion || undefined\n });\n }\n\n isInitialized(): boolean {\n return !!this.service;\n }\n\n async getVersion(): Promise<string> {\n if (!this.service) throw new Error('Strategy not initialized');\n if (!this.cachedVersion) {\n this.cachedVersion = await this.service.getVersion();\n }\n return this.cachedVersion;\n }\n\n async claim(claimData: any, options?: { onLoading?: () => void }): Promise<any> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.claim(claimData, options);\n }\n\n async checkClaimed(claimData: any): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.checkClaimed(claimData);\n }\n\n async getPaused(): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getPaused();\n }\n\n async getClaimFee(contractAddress: string, amount: bigint): Promise<string> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getClaimFee(contractAddress, amount);\n }\n}\n","import { ChainId, IWalletClient, AptosAirdropService, AptosWalletClient } from '@sign-global/tokentable-core';\nimport { IAirdropStrategy } from './IAirdropStrategy';\n\nexport class AptosAirdropStrategy implements IAirdropStrategy {\n private service: AptosAirdropService | undefined;\n private readonly chainId: ChainId;\n private readonly chainRpc: string;\n private walletClient?: AptosWalletClient;\n private cachedVersion: string | null = null;\n private readonly contractAddress: string;\n\n constructor(params: {\n contractAddress: string;\n chainId: string | number;\n walletClient?: IWalletClient;\n chainRpc: string;\n }) {\n this.chainId = params.chainId as ChainId;\n this.chainRpc = params.chainRpc;\n this.contractAddress = params.contractAddress;\n if (params.walletClient) {\n this.walletClient = params.walletClient as AptosWalletClient;\n }\n }\n\n async initialize(walletClient?: IWalletClient): Promise<void> {\n if (walletClient) {\n this.walletClient = walletClient as AptosWalletClient;\n }\n this.service = new AptosAirdropService({\n chainId: this.chainId as string,\n account: this.walletClient as any,\n chainRpc: this.chainRpc,\n address: this.contractAddress\n });\n }\n\n isInitialized(): boolean {\n return !!this.service;\n }\n\n async getVersion(): Promise<string> {\n if (this.cachedVersion) {\n return this.cachedVersion;\n }\n if (!this.service) throw new Error('Strategy not initialized');\n this.cachedVersion = await this.service.getVersion();\n return this.cachedVersion;\n }\n\n async claim(claimData: any): Promise<any> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.claim(claimData);\n }\n\n async checkClaimed(claimData: any): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.isLeafUsed(claimData.leaf);\n }\n\n async batchCheckClaimed(leafs: string[]): Promise<{ result: boolean; status: string }[]> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.batchFetchClaimed(leafs);\n }\n\n async getClaimFee(contractAddress: string, amount: bigint): Promise<bigint> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getClaimFee(contractAddress, amount) as unknown as bigint;\n }\n\n async getPaused(): Promise<boolean> {\n if (!this.service) throw new Error('Strategy not initialized');\n return this.service.getPaused();\n }\n}\n","import { IAirdropStrategy } from './IAirdropStrategy';\n\nexport class StrategyCache {\n private readOnlyStrategies: Map<string, IAirdropStrategy> = new Map();\n private walletStrategies: Map<string, IAirdropStrategy> = new Map();\n\n private getCacheKey(contractAddress: string, chainId: string | number, chainType: string): string {\n return `${chainType}:${contractAddress}:${chainId}`;\n }\n\n getStrategy(contractAddress: string, chainId: string | number, chainType: string, hasWallet: boolean = false): IAirdropStrategy | undefined {\n const cache = hasWallet ? this.walletStrategies : this.readOnlyStrategies;\n const cacheKey = this.getCacheKey(contractAddress, chainId, chainType);\n return cache.get(cacheKey);\n }\n\n setStrategy(contractAddress: string, chainId: string | number, chainType: string, strategy: IAirdropStrategy, hasWallet: boolean = false): void {\n const cache = hasWallet ? this.walletStrategies : this.readOnlyStrategies;\n const cacheKey = this.getCacheKey(contractAddress, chainId, chainType);\n cache.set(cacheKey, strategy);\n }\n\n clearStrategy(contractAddress: string, chainId: string | number, chainType: string, hasWallet?: boolean): void {\n const cacheKey = this.getCacheKey(contractAddress, chainId, chainType);\n if (hasWallet === undefined || hasWallet) {\n this.walletStrategies.delete(cacheKey);\n }\n if (hasWallet === undefined || !hasWallet) {\n this.readOnlyStrategies.delete(cacheKey);\n }\n }\n}\n\nexport const strategyCache = new StrategyCache();\n","import { WalletFactory } from '@sign-global/tokentable-wallets';\nimport {\n bindWallet,\n checkEligibility,\n checkGetSignatures,\n connectGoogleApi,\n connectTwitter,\n disconnectRecipient,\n getAirdropProject,\n cleanUrlParams,\n isMobile,\n getChainRpc,\n CONST,\n EvmSignatureAirdropService,\n SolanaSignatureAirdropService,\n SuiSignatureAirdropService,\n AirdropSigIdentityTypeEnum,\n ChainId,\n ErrorCode,\n IAirdropOptions,\n IAirdropSignatureClaim,\n IAirdropSignatureIdentity,\n IClaimSignature,\n IProject,\n IWalletClient,\n SolanaWalletState,\n ViemWalletClient,\n ChainType,\n SuiWalletClient,\n connectDiscordApi\n} from '@sign-global/tokentable-core';\n\nexport class SignatureAirdropClient {\n private projectId?: string;\n private endpoint?: string;\n private project: IProject | undefined;\n private chainRpc?: string;\n protected claims?: IAirdropSignatureClaim[];\n protected identities?: IAirdropSignatureIdentity[];\n private projectPromise: Promise<void> | undefined;\n private authPromise: Promise<void> | undefined;\n private claimStrategy?: string;\n private strategyCache: Map<\n string,\n EvmSignatureAirdropService | SolanaSignatureAirdropService | SuiSignatureAirdropService\n > = new Map();\n constructor(params: IAirdropOptions) {\n this.projectId = params.projectId;\n this.endpoint = params.endpoint;\n this.chainRpc = params.chainRpc;\n if (this.project) {\n this.project = params.project;\n } else {\n this.projectPromise = this.initializeProjects();\n }\n if (isMobile()) {\n this.authPromise = this.checkAndHandleOAuthCode();\n }\n }\n\n private readonly LOCAL_STORAGE_SID_PREFIX = 'sid_';\n\n private async checkAndHandleOAuthCode() {\n try {\n const urlParams = new URLSearchParams(window.location.search);\n const code = urlParams.get('code');\n const type = urlParams.get('type');\n\n if (code && this.projectId) {\n let res;\n if (type === 'twitter') {\n res = await connectTwitter({ code, projectId: this.projectId }, this.endpoint);\n } else if (type === 'google') {\n res = await connectGoogleApi({ code, projectId: this.projectId }, this.endpoint);\n } else if (type === 'discord') {\n res = await connectDiscordApi({ code, projectId: this.projectId }, this.endpoint);\n }\n if (res?.sid) {\n this.setSid(this.projectId!, res.sid);\n } else {\n throw new Error('Failed to connect');\n }\n cleanUrlParams(['code', 'type']);\n }\n } catch (error) {\n console.error(error);\n }\n }\n\n private setSid(projectId: string, sid: string): void {\n window.localStorage.setItem(`${this.LOCAL_STORAGE_SID_PREFIX}${projectId}`, sid);\n }\n\n private async fetchProjectDetails(projectId: string): Promise<void> {\n const project = await getAirdropProject(projectId, this.endpoint);\n this.project = project;\n if (this.chainRpc) return;\n const chainId = project.chainType === ChainType.Evm ? Number(project.chainId) : project.chainId;\n this.chainRpc = getChainRpc(chainId as ChainId);\n }\n\n protected async initializeProjects() {\n try {\n let projectId = this.projectId;\n if (!projectId) {\n return;\n }\n await this.fetchProjectDetails(projectId);\n } catch (error: any) {\n throw new Error(`Failed to initialize project: ${error.message}`);\n }\n }\n\n async getProjectInfo() {\n if (this.projectPromise) {\n await this.projectPromise;\n }\n if (!this.project) throw new Error('Project not found');\n return this.project;\n }\n\n async connectOAuth({\n onSuccess,\n onError,\n type\n }: {\n onSuccess: () => void;\n onError: (error: Error) => void;\n type: AirdropSigIdentityTypeEnum;\n }) {\n const project = await this.getProjectInfo();\n const authorizeUrl = project.identities.find((item: any) => item.identityType === type)?.authorizeUrl;\n if (!authorizeUrl) {\n onError(new Error('Authorize URL not found'));\n return;\n }\n if (isMobile()) {\n const state = encodeURIComponent(window.location.href);\n window.location.href = `${authorizeUrl}&state=${state}`;\n return;\n }\n const onWindowMessage = async (message: any) => {\n const name = message.data?.name;\n if (name && [CONST.TWITTER_AUTH_SUCCESS, CONST.GOOGLE_AUTH_SUCCESS, CONST.DISCORD_AUTH_SUCCESS].includes(name)) {\n const { code } = message.data.data || {};\n try {\n let res;\n if (name === CONST.GOOGLE_AUTH_SUCCESS) {\n res = await connectGoogleApi({ code, projectId: project.id }, this.endpoint);\n } else if (name === CONST.TWITTER_AUTH_SUCCESS) {\n res = await connectTwitter({ code, projectId: project.id }, this.endpoint);\n } else if (name === CONST.DISCORD_AUTH_SUCCESS) {\n res = await connectDiscordApi({ code, projectId: project.id }, this.endpoint);\n }\n if (res?.sid) {\n this.setSid(project.id, res?.sid);\n onSuccess();\n } else {\n onError(new Error('Failed to connect'));\n }\n } catch (error) {\n onError(error as Error);\n } finally {\n window.removeEventListener('message', onWindowMessage);\n }\n }\n };\n\n window.addEventListener('message', onWindowMessage);\n window.open(`${authorizeUrl}&state=state`, `twitter_auth_${project.id}`, 'width=600,height=800');\n }\n\n async connectX({ onSuccess, onError }: { onSuccess: () => void; onError: (error: Error) => void }) {\n await this.connectOAuth({\n onSuccess,\n onError,\n type: AirdropSigIdentityTypeEnum.Twitter\n });\n }\n\n async connectGoogle({ onSuccess, onError }: { onSuccess: () => void; onError: (error: Error) => void }) {\n await this.connectOAuth({\n onSuccess,\n onError,\n type: AirdropSigIdentityTypeEnum.Google\n });\n }\n\n async connectDiscord({ onSuccess, onError }: { onSuccess: () => void; onError: (error: Error) => void }) {\n await this.connectOAuth({\n onSuccess,\n onError,\n type: AirdropSigIdentityTypeEnum.Discord\n });\n }\n\n async connectWallet({\n chainType,\n onSuccess,\n onError\n }: {\n chainType: ChainType;\n onSuccess?: (address: string) => void;\n onError?: (error: any) => void;\n }) {\n try {\n const project = await this.getProjectInfo();\n const wallet = WalletFactory.getWallet(chainType);\n const timestamp = Date.now();\n const recipientTypeMap = {\n [ChainType.Evm]: AirdropSigIdentityTypeEnum.EVMWallet,\n [ChainType.Solana]: AirdropSigIdentityTypeEnum.SolanaWallet,\n [ChainType.Ton]: AirdropSigIdentityTypeEnum.TONWallet,\n [ChainType.Sui]: '',\n [ChainType.Aptos]: '',\n [ChainType.Cosmos]: AirdropSigIdentityTypeEnum.CosmosWallet\n };\n const msg = [project.id, recipientTypeMap[chainType], timestamp].join(',');\n const signResult = await wallet.signin(msg, false);\n await wallet.disconnect();\n const { message, signature, signedMessage } = signResult || {};\n\n if (this.identities?.find((it) => it.value?.toLowerCase() === wallet.address?.toLowerCase())) {\n onError?.(ErrorCode.WALLET_ALREADY_CONNECTED);\n return;\n }\n\n const payload = {\n signature: signature as string,\n message: message as string,\n key: wallet.publicKey || wallet.address!,\n address: wallet.address!,\n projectId: project.id,\n timestamp: timestamp,\n recipientType: recipientTypeMap[chainType],\n encodedMessage: signedMessage\n };\n\n const res = await bindWallet(payload, this.endpoint);\n if (res?.sid) {\n this.setSid(project.id, res?.sid);\n }\n onSuccess?.(wallet.address!);\n } catch (error) {\n onError?.(error);\n }\n }\n\n async getClaims() {\n const project = await this.getProjectInfo();\n if (this.authPromise) {\n await this.authPromise;\n }\n const res = await checkEligibility(\n {\n projectId: project.id\n },\n this.endpoint\n );\n this.claims = res.claims;\n this.identities = res.identities;\n return res;\n }\n\n public async disconnectIdentity({\n recipientType,\n recipient\n }: {\n recipientType: AirdropSigIdentityTypeEnum;\n recipient?: string;\n }) {\n const project = await this.getProjectInfo();\n return await disconnectRecipient(\n {\n projectId: project.id,\n recipientType,\n recipient\n },\n this.endpoint\n );\n }\n\n public async setClaimStrategy(strategy: string) {\n this.claimStrategy = strategy;\n }\n\n public async getStrategy(\n walletClient?: IWalletClient\n ): Promise<EvmSignatureAirdropService | SolanaSignatureAirdropService | SuiSignatureAirdropService> {\n const project = await this.getProjectInfo();\n\n let cacheKey = 'default';\n if (walletClient) {\n if (project.chainType === ChainType.Evm) {\n cacheKey = (walletClient as ViemWalletClient).account?.address!;\n } else if (project.chainType === ChainType.Solana) {\n cacheKey = (walletClient as SolanaWalletState).publicKey!.toString();\n } else if (project.chainType === ChainType.Sui) {\n cacheKey = (walletClient as SuiWalletClient).accounts[0].address;\n }\n } else {\n cacheKey = 'walletClient';\n }\n\n if (this.strategyCache.has(cacheKey)) {\n return this.strategyCache.get(cacheKey)!;\n }\n\n let strategy = null;\n if (project.chainType === ChainType.Solana) {\n strategy = new SolanaSignatureAirdropService({\n chainId: project.chainId,\n projectId: project.id,\n token: project.tokenAddress,\n walletClient: walletClient as any,\n chainRpc: this.chainRpc!\n });\n } else if (project.chainType === ChainType.Sui) {\n strategy = new SuiSignatureAirdropService({\n chainId: project.chainId as any,\n coinType: project.tokenAddress,\n walletClient: walletClient as any,\n chainRpc: this.chainRpc!,\n distributorId: project.contractAddress\n });\n } else if (project.chainType === ChainType.Evm) {\n strategy = new EvmSignatureAirdropService({\n chainId: Number(project.chainId) as ChainId,\n contractAddress: project.contractAddress,\n walletClient: walletClient as any,\n chainRpc: this.chainRpc!\n });\n }\n if (!strategy) {\n throw new Error('No strategy found');\n }\n this.strategyCache.set(cacheKey, strategy);\n return strategy;\n }\n\n async getVersion(): Promise<string> {\n const strategy = await this.getStrategy();\n return strategy.getVersion();\n }\n\n // solana prams need to wallet\n async getClaimFee(amount?: bigint, walletClient?: IWalletClient): Promise<undefined | bigint> {\n const strategy = await this.getStrategy(walletClient);\n if (!strategy.getClaimFee) {\n throw new Error('getClaimFee is not supported for this chain');\n }\n return await strategy.getClaimFee(this.project?.contractAddress || '', amount || BigInt(1));\n }\n\n async claimAirdrop({\n claimIds,\n walletClient,\n recipient\n }: {\n claimIds: string[];\n walletClient: IWalletClient;\n recipient: string;\n }) {\n if (!claimIds.length) {\n throw new Error('Claim IDs cannot be empty');\n }\n if (!walletClient) {\n throw new Error('Wallet client is required');\n }\n if (!this.claims?.length) {\n throw new Error('No claims available');\n }\n const service = await this.getStrategy(walletClient);\n const project = await this.getProjectInfo();\n const res = await checkGetSignatures(\n {\n claimIds,\n projectId: this.projectId!,\n recipient,\n strategy: this.claimStrategy\n },\n this.endpoint\n );\n if (!res?.signatures?.length) {\n throw new Error('Failed to get signatures');\n }\n const signatureMap = res?.signatures?.reduce(\n (map, item) => {\n map[item.claimId] = item;\n return map;\n },\n {} as Record<string, IClaimSignature>\n );\n const filteredClaims = this.claims.filter((it) => claimIds.includes(it.claimId));\n if (!filteredClaims.length) {\n throw new Error('No matching claims found');\n }\n\n // only evm use\n const defaultRecipient =\n project.chainType === ChainType.Evm ? (walletClient as ViemWalletClient).account?.address! : '';\n\n const claimData = filteredClaims.map((it) => {\n const signature = signatureMap[it.claimId];\n if (!signature) {\n throw new Error(`Signature not found for claim ID: ${it.claimId}`);\n }\n\n return {\n ...it,\n recipient: recipient ? recipient : defaultRecipient,\n ...signature\n };\n });\n\n const hash = (await service!.claim(claimData, recipient)) as `0x${string}`;\n return hash;\n }\n\n async batchCheckClaimed(): Promise<boolean[]> {\n if (!this.claims?.length) return [];\n const strategy = await this.getStrategy();\n if (!strategy.batchFetchClaimed) {\n throw new Error('batchCheckClaimed is not supported for this chain');\n }\n const claimIds = this.claims?.map((it) => it.claimId);\n return strategy.batchFetchClaimed(claimIds);\n }\n\n async getPaused(): Promise<boolean> {\n const strategy = await this.getStrategy();\n if (!strategy.getPaused) {\n throw new Error('getPaused is not supported for this chain');\n }\n return strategy.getPaused();\n }\n}\n","export { AirdropClient } from './AirdropClient';\nexport { SignatureAirdropClient } from './SignatureAirdropClient';\nexport * from '@sign-global/tokentable-core';\nexport * from '@sign-global/tokentable-wallets';\n"],"mappings":"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","names":["ChainType","ChainType","getAirdropProject","getChainRpc","ChainType"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sign-global/tokentable",
3
- "version": "1.5.0",
3
+ "version": "1.6.0",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.mjs",
6
6
  "types": "dist/index.d.ts",
@@ -29,8 +29,8 @@
29
29
  "@tonconnect/sdk": "^3.0.6",
30
30
  "tonweb": "^0.0.66",
31
31
  "viem": "^2.0.0",
32
- "@sign-global/tokentable-core": "1.5.0",
33
- "@sign-global/tokentable-wallets": "1.3.0"
32
+ "@sign-global/tokentable-core": "1.6.0",
33
+ "@sign-global/tokentable-wallets": "1.4.0"
34
34
  },
35
35
  "publishConfig": {
36
36
  "access": "public"
@@ -212,7 +212,8 @@ export class SignatureAirdropClient {
212
212
  [ChainType.Solana]: AirdropSigIdentityTypeEnum.SolanaWallet,
213
213
  [ChainType.Ton]: AirdropSigIdentityTypeEnum.TONWallet,
214
214
  [ChainType.Sui]: '',
215
- [ChainType.Aptos]: ''
215
+ [ChainType.Aptos]: '',
216
+ [ChainType.Cosmos]: AirdropSigIdentityTypeEnum.CosmosWallet
216
217
  };
217
218
  const msg = [project.id, recipientTypeMap[chainType], timestamp].join(',');
218
219
  const signResult = await wallet.signin(msg, false);