From eb4705c27b7c7af9209ee9d25e6b68c6dbce84ae Mon Sep 17 00:00:00 2001 From: Cesare Naldi <3353250+cesarenaldi@users.noreply.github.com> Date: Fri, 5 Jun 2026 21:13:18 +0200 Subject: [PATCH 1/2] fix(client): accept copied event market URLs --- .changeset/dev-168-market-event-url.md | 5 +++++ packages/client/src/actions/markets.ts | 2 +- packages/client/src/decorators/discovery.ts | 2 +- packages/client/src/polymarket-url.ts | 11 +++++++++++ packages/client/tests/integration/markets.test.ts | 2 +- 5 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 .changeset/dev-168-market-event-url.md diff --git a/.changeset/dev-168-market-event-url.md b/.changeset/dev-168-market-event-url.md new file mode 100644 index 0000000..0342ac7 --- /dev/null +++ b/.changeset/dev-168-market-event-url.md @@ -0,0 +1,5 @@ +--- +"@polymarket/client": patch +--- + +Accept copied market URLs in the current `/event/{eventSlug}/{marketSlug}` shape when fetching markets by URL. diff --git a/packages/client/src/actions/markets.ts b/packages/client/src/actions/markets.ts index eaedc67..f765eb9 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-event-slug/some-market-slug', * }); * * // market === Market diff --git a/packages/client/src/decorators/discovery.ts b/packages/client/src/decorators/discovery.ts index 0dac117..d1f989b 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-event-slug/some-market-slug', * }); * ``` */ diff --git a/packages/client/src/polymarket-url.ts b/packages/client/src/polymarket-url.ts index c1df836..7c14383 100644 --- a/packages/client/src/polymarket-url.ts +++ b/packages/client/src/polymarket-url.ts @@ -24,6 +24,17 @@ export function parsePolymarketSlugUrl( const [actualResource, slug, ...extraSegments] = url.pathname .split('/') .filter(Boolean); + const marketSlug = extraSegments[0]; + + if ( + resource === 'market' && + actualResource === 'event' && + slug !== undefined && + marketSlug !== undefined && + extraSegments.length === 1 + ) { + return marketSlug; + } if ( actualResource !== resource || diff --git a/packages/client/tests/integration/markets.test.ts b/packages/client/tests/integration/markets.test.ts index d284f24..d79f79c 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/some-event-slug/${expectPresent(market.slug)}`, }); expect(marketByUrl.id).toBe(market.id); From a75a6fd0a15b11a7a079dd70fac3f63eb1ca2789 Mon Sep 17 00:00:00 2001 From: Cesare Naldi <3353250+cesarenaldi@users.noreply.github.com> Date: Fri, 5 Jun 2026 21:46:04 +0200 Subject: [PATCH 2/2] fix(client): support event slug market urls --- .changeset/dev-168-market-event-url.md | 2 +- packages/client/src/actions/markets.ts | 2 +- packages/client/src/decorators/discovery.ts | 2 +- packages/client/src/polymarket-url.ts | 5 ++--- packages/client/tests/integration/markets.test.ts | 4 ++-- 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/.changeset/dev-168-market-event-url.md b/.changeset/dev-168-market-event-url.md index 0342ac7..38f1317 100644 --- a/.changeset/dev-168-market-event-url.md +++ b/.changeset/dev-168-market-event-url.md @@ -2,4 +2,4 @@ "@polymarket/client": patch --- -Accept copied market URLs in the current `/event/{eventSlug}/{marketSlug}` shape when fetching markets by URL. +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 f765eb9..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/event/some-event-slug/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 d1f989b..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/event/some-event-slug/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 7c14383..21b4a5a 100644 --- a/packages/client/src/polymarket-url.ts +++ b/packages/client/src/polymarket-url.ts @@ -30,10 +30,9 @@ export function parsePolymarketSlugUrl( resource === 'market' && actualResource === 'event' && slug !== undefined && - marketSlug !== undefined && - extraSegments.length === 1 + extraSegments.length <= 1 ) { - return marketSlug; + return marketSlug ?? slug; } if ( diff --git a/packages/client/tests/integration/markets.test.ts b/packages/client/tests/integration/markets.test.ts index d79f79c..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/event/some-event-slug/${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); });