diff --git a/.changeset/dev-168-market-event-url.md b/.changeset/dev-168-market-event-url.md new file mode 100644 index 0000000..38f1317 --- /dev/null +++ b/.changeset/dev-168-market-event-url.md @@ -0,0 +1,5 @@ +--- +"@polymarket/client": patch +--- + +Accept copied `/event/{slug}` market URLs when fetching markets by URL. diff --git a/packages/client/src/actions/markets.ts b/packages/client/src/actions/markets.ts index eaedc67..0c1f80f 100644 --- a/packages/client/src/actions/markets.ts +++ b/packages/client/src/actions/markets.ts @@ -266,7 +266,7 @@ export const FetchMarketError = makeErrorGuard( * }); * * const marketByUrl = await fetchMarket(client, { - * url: 'https://polymarket.com/market/some-market-slug', + * url: 'https://polymarket.com/event/some-market-slug', * }); * * // market === Market diff --git a/packages/client/src/decorators/discovery.ts b/packages/client/src/decorators/discovery.ts index 0dac117..fa30392 100644 --- a/packages/client/src/decorators/discovery.ts +++ b/packages/client/src/decorators/discovery.ts @@ -189,7 +189,7 @@ export type DiscoveryActions = { * }); * * const marketByUrl = await client.fetchMarket({ - * url: 'https://polymarket.com/market/some-market-slug', + * url: 'https://polymarket.com/event/some-market-slug', * }); * ``` */ diff --git a/packages/client/src/polymarket-url.ts b/packages/client/src/polymarket-url.ts index c1df836..21b4a5a 100644 --- a/packages/client/src/polymarket-url.ts +++ b/packages/client/src/polymarket-url.ts @@ -24,6 +24,16 @@ export function parsePolymarketSlugUrl( const [actualResource, slug, ...extraSegments] = url.pathname .split('/') .filter(Boolean); + const marketSlug = extraSegments[0]; + + if ( + resource === 'market' && + actualResource === 'event' && + slug !== undefined && + extraSegments.length <= 1 + ) { + return marketSlug ?? slug; + } if ( actualResource !== resource || diff --git a/packages/client/tests/integration/markets.test.ts b/packages/client/tests/integration/markets.test.ts index d284f24..a2d6571 100644 --- a/packages/client/tests/integration/markets.test.ts +++ b/packages/client/tests/integration/markets.test.ts @@ -58,7 +58,7 @@ describe('Markets', () => { it('fetches a market by URL', async ({ publicClient }) => { const marketByUrl = await publicClient.fetchMarket({ - url: `https://polymarket.com/market/${expectPresent(market.slug)}`, + url: `https://polymarket.com/event/${expectPresent(market.slug)}`, }); expect(marketByUrl.id).toBe(market.id); @@ -79,7 +79,7 @@ describe('Markets', () => { await expect( publicClient.fetchMarket({ - url: 'https://polymarket.com/event/presidential-election-2028', + url: 'https://polymarket.com/tag/politics', }), ).rejects.toThrow(UserInputError); });