Skip to content

Commit 602b795

Browse files
committed
feat: add node client entrypoint stub
1 parent f816344 commit 602b795

6 files changed

Lines changed: 106 additions & 13 deletions

File tree

biome.json

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,30 @@
7474
}
7575
}
7676
}
77+
},
78+
{
79+
"includes": ["packages/client/src/**/*.ts"],
80+
"linter": {
81+
"rules": {
82+
"style": {
83+
"noRestrictedImports": {
84+
"level": "error",
85+
"options": {
86+
"patterns": [
87+
{
88+
"group": [
89+
"**/node",
90+
"**/node.ts",
91+
"@polymarket/client/node"
92+
],
93+
"message": "Import shared client modules directly instead of routing through the Node-only entrypoint."
94+
}
95+
]
96+
}
97+
}
98+
}
99+
}
100+
}
77101
}
78102
]
79103
}

packages/client/package.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
"types": "./dist/index.d.ts",
1111
"default": "./dist/index.js"
1212
},
13+
"./node": {
14+
"types": "./dist/node.d.ts",
15+
"default": "./dist/node.js"
16+
},
1317
"./actions": {
1418
"types": "./dist/actions/index.d.ts",
1519
"default": "./dist/actions/index.js"
@@ -21,6 +25,9 @@
2125
},
2226
"typesVersions": {
2327
"*": {
28+
"node": [
29+
"./dist/node.d.ts"
30+
],
2431
"actions": [
2532
"./dist/actions/index.d.ts"
2633
],

packages/client/src/node.test.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { dirname, resolve } from 'node:path';
2+
import { fileURLToPath, pathToFileURL } from 'node:url';
3+
import { afterEach, describe, expect, it, vi } from 'vitest';
4+
5+
const clientSourceDir = dirname(fileURLToPath(import.meta.url));
6+
const nodeEntryUrl = pathToFileURL(resolve(clientSourceDir, 'node.ts'));
7+
8+
describe('node entrypoint', () => {
9+
afterEach(() => {
10+
vi.unstubAllGlobals();
11+
});
12+
13+
it('rejects browser-like runtimes during module evaluation', async () => {
14+
vi.stubGlobal('window', {});
15+
vi.stubGlobal('document', {});
16+
17+
await expect(
18+
import(`${nodeEntryUrl.href}?browser=${Date.now()}`),
19+
).rejects.toThrow(/browser-like runtime/i);
20+
});
21+
});

packages/client/src/node.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import process from 'node:process';
2+
import { invariant } from '@polymarket/types';
3+
import {
4+
type PublicClientConfig as BasePublicClientConfig,
5+
createPublicClient as createBasePublicClient,
6+
type PublicClient,
7+
} from './clients';
8+
9+
invariant(
10+
process.release.name === 'node',
11+
'The @polymarket/client/node entrypoint requires a Node.js runtime.',
12+
);
13+
invariant(
14+
typeof window === 'undefined' && typeof document === 'undefined',
15+
'The @polymarket/client/node entrypoint cannot be imported in a browser-like runtime.',
16+
);
17+
18+
export type PublicClientConfig = BasePublicClientConfig & {
19+
// TODO add builder credentials here
20+
};
21+
22+
export function createPublicClient(
23+
config: PublicClientConfig = {},
24+
): PublicClient {
25+
return createBasePublicClient(config);
26+
}

packages/client/tsup.config.ts

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,30 @@
22

33
import { defineConfig } from 'tsup';
44

5-
export default defineConfig(() => ({
6-
entry: ['src/index.ts', 'src/actions/index.ts', 'src/viem/index.ts'],
7-
outDir: 'dist',
8-
sourcemap: true,
9-
treeshake: true,
10-
clean: true,
11-
tsconfig: 'tsconfig.build.json',
12-
bundle: true,
13-
minify: true,
14-
dts: true,
15-
platform: 'neutral',
16-
format: ['esm'],
17-
}));
5+
export default defineConfig(() => [
6+
{
7+
entry: ['src/index.ts', 'src/actions/index.ts', 'src/viem/index.ts'],
8+
outDir: 'dist',
9+
sourcemap: true,
10+
treeshake: true,
11+
clean: true,
12+
tsconfig: 'tsconfig.build.json',
13+
bundle: true,
14+
minify: true,
15+
dts: true,
16+
platform: 'neutral',
17+
format: ['esm'],
18+
},
19+
{
20+
entry: ['src/node.ts'],
21+
outDir: 'dist',
22+
sourcemap: true,
23+
treeshake: true,
24+
clean: true,
25+
tsconfig: 'tsconfig.build.json',
26+
minify: true,
27+
dts: true,
28+
platform: 'node',
29+
format: ['esm'],
30+
},
31+
]);

tsconfig.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"@polymarket/bindings/data": ["./packages/bindings/src/data"],
1111
"@polymarket/bindings/gamma": ["./packages/bindings/src/gamma"],
1212
"@polymarket/client": ["./packages/client/src"],
13+
"@polymarket/client/node": ["./packages/client/src/node.ts"],
1314
"@polymarket/client/actions": ["./packages/client/src/actions"],
1415
"@polymarket/client/viem": ["./packages/client/src/viem"],
1516
"@polymarket/types": ["./packages/types/src"]

0 commit comments

Comments
 (0)