Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
2cbb292
Upgrade deps
AlexanderKolberg Aug 19, 2025
65b8bec
Add trails
AlexanderKolberg Aug 19, 2025
76c9ece
New tailwind generated styles
AlexanderKolberg Aug 19, 2025
4937dfe
Add trails
AlexanderKolberg Aug 25, 2025
bfd4b12
Add trails to shared
AlexanderKolberg Aug 25, 2025
5ba5688
Simplify buy store
AlexanderKolberg Aug 25, 2025
4946a26
Fallback buy modal
AlexanderKolberg Aug 25, 2025
5453824
Simplify store
AlexanderKolberg Aug 25, 2025
9fc8169
TMP: Include trails types
AlexanderKolberg Aug 25, 2025
131b026
wip
AlexanderKolberg Aug 27, 2025
2f71575
take back useCheckoutOptions hook
mithatakbulut Aug 28, 2025
00b059d
Enhance BuyModalContent with market order data integration
mithatakbulut Aug 28, 2025
d7b903d
Refactor FallbackPurchaseUI
mithatakbulut Aug 28, 2025
4b96c3a
Add useOrders hook and orders query functionality
mithatakbulut Aug 28, 2025
89715b8
Remove useCheckoutOptions hook and its associated tests
mithatakbulut Aug 28, 2025
d41d30f
Merge pull request #525 from 0xsequence/simple-buy-modal
AlexanderKolberg Aug 28, 2025
68d7773
Upgrade packages
AlexanderKolberg Sep 1, 2025
f772b08
--wip-- [skip ci]
AlexanderKolberg Sep 12, 2025
11924cf
--wip-- [skip ci]
AlexanderKolberg Sep 12, 2025
7e1f46c
wip
AlexanderKolberg Sep 12, 2025
0cf174a
--wip-- [skip ci]
AlexanderKolberg Sep 14, 2025
6ede672
wip
AlexanderKolberg Sep 14, 2025
3ad2269
--wip-- [skip ci]
AlexanderKolberg Sep 15, 2025
e54602c
merge master
AlexanderKolberg Sep 15, 2025
263509a
--wip-- [skip ci]
AlexanderKolberg Sep 15, 2025
10a9d52
wip
AlexanderKolberg Sep 15, 2025
33ef88c
wip
AlexanderKolberg Sep 15, 2025
71924d0
wip
AlexanderKolberg Sep 15, 2025
a730f1e
wip
AlexanderKolberg Sep 15, 2025
4034a8b
wip
AlexanderKolberg Sep 15, 2025
701a162
wip
AlexanderKolberg Sep 15, 2025
7bae40c
wip
AlexanderKolberg Sep 15, 2025
61ee256
wip
AlexanderKolberg Sep 15, 2025
1d26b05
wip
AlexanderKolberg Sep 15, 2025
b15c555
Enhance FallbackPurchaseUI with price formatting and media component …
mithatakbulut Sep 15, 2025
6724d38
Refactor BuyModalContent to improve data handling by adding collectio…
mithatakbulut Sep 15, 2025
1da5784
pnpm i
mithatakbulut Sep 15, 2025
579f5f2
Add new orange color variants to styles
mithatakbulut Sep 15, 2025
83700d3
copy/paste lock file with base branch
mithatakbulut Sep 15, 2025
bf30375
Merge pull request #542 from 0xsequence/fallback-buy-modal-ui-fix
AlexanderKolberg Sep 15, 2025
f6005fe
remove opacity from bg-secondary and replace with matching color with…
mithatakbulut Sep 15, 2025
db3ce89
Merge pull request #543 from 0xsequence/trails-bg-secondary
AlexanderKolberg Sep 15, 2025
c6ff2ef
Update useHasSufficientBalance hook to include tokenAddress and value…
mithatakbulut Sep 16, 2025
a390fa7
Refactor useBuyModalData to integrate useCollection hook for improved…
mithatakbulut Sep 16, 2025
07fbbe4
Enhance FallbackPurchaseUI by integrating loading state management an…
mithatakbulut Sep 16, 2025
439f118
Merge pull request #544 from 0xsequence/trails-shop-fallback-ui
AlexanderKolberg Sep 16, 2025
371c4c9
Enhance FallbackPurchaseUI by adding currency price rendering logic a…
mithatakbulut Sep 16, 2025
449e032
Merge pull request #545 from 0xsequence/fallback-buy-modal-price-disp…
mithatakbulut Sep 16, 2025
fbb01cc
auto updated styles.ts from tailwind styles
mithatakbulut Sep 16, 2025
b3f47b7
Add market platform fee handling to useBuyTransaction hook
mithatakbulut Sep 16, 2025
2f20098
fix: rename `useTransactionModalState` to `useTransactionStatusModalS…
mithatakbulut Sep 16, 2025
2cb8645
fix: add value parameter to sendTransactionAsync in FallbackPurchaseU…
mithatakbulut Sep 16, 2025
c60b5f8
fix: update BuyModalContent to handle market conditions and improve t…
mithatakbulut Sep 16, 2025
f03575a
fix: enhance error handling in FallbackPurchaseUI for transaction exe…
mithatakbulut Sep 17, 2025
3581c6f
Merge pull request #547 from 0xsequence/trails-txn-status-modal
mithatakbulut Sep 17, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions .github/workflows/pre-release-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ name: Publish Pre-release
on:
workflow_dispatch:
push:
branches:
- master

jobs:
publish:
Expand Down Expand Up @@ -62,14 +60,14 @@ jobs:
# Initialize git in tmp directory
cd /tmp/marketplace-sdk
git init
git checkout -b pre-release
git checkout -b trails-testing

# Configure git
git config user.name "github-actions"
git config user.email "[email protected]"

# Commit and push
git add .
git commit -m "Build: publish marketplace-sdk pre-release"
git commit -m "Build: publish marketplace-sdk trails-testing"
git remote add origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git
git push -f origin HEAD:pre-release
git push -f origin HEAD:trails-testing
7 changes: 4 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"coverage": "pnpm run --r --filter \"./sdk\" coverage",
"tailwind": "pnpm --filter \"./sdk\" tailwind"
},
"packageManager": "pnpm@10.15.1",
"packageManager": "pnpm@10.16.1",
"engines": {
"node": "24.x"
},
Expand All @@ -31,15 +31,16 @@
"@0xsequence/marketplace-sdk": "workspace:*"
},
"onlyBuiltDependencies": [
"@tailwindcss/oxide",
"msw",
"oxc-resolver"
]
},
"devDependencies": {
"@biomejs/biome": "catalog:",
"@types/node": "^24.3.1",
"@types/node": "^24.3.3",
"knip": "^5.63.1",
"lefthook": "^1.12.4",
"lefthook": "^1.13.0",
"typescript": "catalog:"
},
"prepare": "lefthook install"
Expand Down
3 changes: 2 additions & 1 deletion playgrounds/shared/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
"@tailwindcss/vite": "^4.1.13",
"date-fns": "^4.1.0",
"postcss": "^8.5.6",
"react-virtuoso": "^4.14.0"
"react-virtuoso": "^4.14.0",
"zod": "3.25.76"
}
}
17,422 changes: 12,724 additions & 4,698 deletions pnpm-lock.yaml

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions pnpm-workspace.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ catalog:
nuqs: ^2.6.0
react: ^19.1.1
react-day-picker: ^9.9.0
0xtrails: ^0.1.6
react-dom: ^19.1.1
tailwindcss: ^4.1.13
tsup: ^8.5.0
Expand Down
1 change: 1 addition & 0 deletions sdk/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
"@legendapp/state": "catalog:",
"@tailwindcss/cli": "^4.1.13",
"@xstate/store": "catalog:",
"xtrails": "npm:0xtrails@^0.1.6",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"date-fns": "catalog:",
Expand Down
73 changes: 73 additions & 0 deletions sdk/src/react/hooks/data/orders/useOrders.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
'use client';

import { useQuery } from '@tanstack/react-query';
import type { Optional } from '../../../_internal';
import {
type FetchOrdersParams,
type OrdersQueryOptions,
ordersQueryOptions,
} from '../../../queries/orders';
import { useConfig } from '../../config/useConfig';

export type UseOrdersParams = Optional<OrdersQueryOptions, 'config'>;

/**
* Hook to fetch orders from the marketplace
*
* Retrieves orders based on the provided parameters from the marketplace.
*
* @param params - Configuration parameters
* @param params.chainId - Optional chain ID to filter orders
* @param params.contractAddress - Optional contract address to filter orders
* @param params.tokenId - Optional token ID to filter orders
* @param params.maker - Optional maker address to filter orders
* @param params.taker - Optional taker address to filter orders
* @param params.status - Optional status to filter orders
* @param params.side - Optional side to filter orders
* @param params.pagination - Optional pagination parameters
* @param params.query - Optional React Query configuration
*
* @returns Query result containing the orders data
*
* @example
* Basic usage:
* ```typescript
* const { data, isLoading } = useOrders({
* chainId: '137',
* contractAddress: '0x...'
* })
* ```
*
* @example
* With pagination:
* ```typescript
* const { data, isLoading } = useOrders({
* chainId: '1',
* pagination: {
* limit: 20,
* offset: 0
* },
* query: {
* refetchInterval: 15000
* }
* })
* ```
*/
export function useOrders(params: UseOrdersParams) {
const defaultConfig = useConfig();

const { config = defaultConfig, ...rest } = params;

const queryOptions = ordersQueryOptions({
config,
...rest,
});

return useQuery({
...queryOptions,
});
}

export { ordersQueryOptions };

export type { FetchOrdersParams, OrdersQueryOptions };
5 changes: 5 additions & 0 deletions sdk/src/react/hooks/transactions/index.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
export * from './useBuyTransaction';
export * from './useCancelOrder';
export * from './useCancelTransactionSteps';
export * from './useGenerateCancelTransaction';
export * from './useGenerateListingTransaction';
export * from './useGenerateOfferTransaction';
export * from './useGenerateSellTransaction';
export * from './useMarketTransactionSteps';
export * from './useOrderSteps';
export * from './usePrimarySaleTransactionSteps';
export * from './useProcessStep';
export * from './useTransactionExecution';
export * from './useTransactionType';
export * from './useTransferTokens';
79 changes: 79 additions & 0 deletions sdk/src/react/hooks/transactions/useBuyTransaction.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import { zeroAddress } from 'viem';
import { useAccount } from 'wagmi';
import { TransactionType } from '../../../types/transactions';
import { ContractType } from '../../_internal';
import { MarketplaceKind } from '../../_internal/api';
import { useMarketPlatformFee } from '../../ui/modals/BuyModal/hooks/useMarketPlatformFee';
import type { BuyModalProps } from '../../ui/modals/BuyModal/store';
import { isMarketProps, isShopProps } from '../../ui/modals/BuyModal/store';
import { useMarketTransactionSteps } from './useMarketTransactionSteps';
import { usePrimarySaleTransactionSteps } from './usePrimarySaleTransactionSteps';
import { useTransactionType } from './useTransactionType';

/**
* Unified hook that handles both market and primary sale transactions
* Automatically selects the appropriate transaction type based on modal props
*/
export function useBuyTransaction(modalProps: BuyModalProps) {
const { address: buyer } = useAccount();
const transactionType = useTransactionType(modalProps);
const marketPlatformFee = useMarketPlatformFee({
chainId: modalProps.chainId,
collectionAddress: modalProps.collectionAddress,
});

// Market transaction query
const marketQuery = useMarketTransactionSteps({
chainId: modalProps.chainId,
collectionAddress: modalProps.collectionAddress,
buyer: buyer!,
marketplace: isMarketProps(modalProps)
? modalProps.marketplace
: MarketplaceKind.sequence_marketplace_v2,
orderId: isMarketProps(modalProps) ? modalProps.orderId : '',
collectibleId: isMarketProps(modalProps) ? modalProps.collectibleId : '',
quantity: '1', // Single item purchase for now
additionalFees: [marketPlatformFee],
enabled: transactionType === TransactionType.MARKET_BUY && !!buyer,
});

// Primary sale transaction query
const primaryQuery = usePrimarySaleTransactionSteps({
chainId: modalProps.chainId,
buyer: buyer!,
salesContractAddress: isShopProps(modalProps)
? modalProps.salesContractAddress
: zeroAddress,
tokenIds: isShopProps(modalProps)
? modalProps.items.map((item) => item.tokenId || '0')
: [],
amounts: isShopProps(modalProps)
? modalProps.items.map((item) => Number(item.quantity) || 1)
: [],
maxTotal: isShopProps(modalProps) ? modalProps.salePrice.amount : '0',
paymentToken: isShopProps(modalProps)
? modalProps.salePrice.currencyAddress
: zeroAddress,
contractType: ContractType.ERC1155, // TODO: Determine from contract
enabled: transactionType === TransactionType.PRIMARY_SALE && !!buyer,
});

// Return the active query based on transaction type
if (transactionType === TransactionType.MARKET_BUY) {
return {
data: marketQuery.data,
isLoading: marketQuery.isLoading,
error: marketQuery.error,
isError: marketQuery.isError,
refetch: marketQuery.refetch,
};
}

return {
data: primaryQuery.data,
isLoading: primaryQuery.isLoading,
error: primaryQuery.error,
isError: primaryQuery.isError,
refetch: primaryQuery.refetch,
};
}
74 changes: 74 additions & 0 deletions sdk/src/react/hooks/transactions/useMarketTransactionSteps.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import { useQuery } from '@tanstack/react-query';
import { useMemo } from 'react';
import type { Address } from 'viem';
import type { AdditionalFee, MarketplaceKind, Step } from '../../_internal/api';
import { getMarketplaceClient, WalletKind } from '../../_internal/api';
import { useConfig } from '../config';

export interface UseMarketTransactionStepsParams {
chainId: number;
collectionAddress: Address;
buyer: Address;
marketplace: MarketplaceKind;
orderId: string;
collectibleId: string;
quantity: string;
additionalFees?: AdditionalFee[];
enabled?: boolean;
}

/**
* Hook to generate transaction steps for market transactions (secondary sales)
* This directly calls the marketplace API without using generators
*/
export function useMarketTransactionSteps({
chainId,
collectionAddress,
buyer,
marketplace,
orderId,
collectibleId,
quantity,
additionalFees = [],
enabled = true,
}: UseMarketTransactionStepsParams) {
const config = useConfig();
const marketplaceClient = useMemo(
() => getMarketplaceClient(config),
[config],
);

return useQuery<Step[], Error>({
queryKey: [
'market-transaction-steps',
{
chainId,
collectionAddress,
buyer,
orderId,
collectibleId,
quantity,
},
],
queryFn: async () => {
const response = await marketplaceClient.generateBuyTransaction({
chainId: chainId.toString(),
collectionAddress,
buyer,
marketplace,
ordersData: [
{
orderId,
quantity,
tokenId: collectibleId,
},
],
additionalFees,
walletType: WalletKind.sequence,
});

return response.steps;
},
enabled: enabled && !!buyer,
});
}
Loading