nothing-browser 0.0.13 → 0.0.15

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.
Files changed (49) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +120 -887
  3. package/dist/piggy/cache/memory.d.ts +7 -0
  4. package/dist/piggy/cache/memory.d.ts.map +1 -0
  5. package/dist/piggy/client/index.d.ts +79 -0
  6. package/dist/piggy/client/index.d.ts.map +1 -0
  7. package/dist/piggy/human/index.d.ts +7 -0
  8. package/dist/piggy/human/index.d.ts.map +1 -0
  9. package/dist/piggy/intercept/scripts.d.ts +13 -0
  10. package/dist/piggy/intercept/scripts.d.ts.map +1 -0
  11. package/dist/piggy/launch/detect.d.ts +3 -0
  12. package/dist/piggy/launch/detect.d.ts.map +1 -0
  13. package/dist/piggy/launch/spawn.d.ts +6 -0
  14. package/dist/piggy/launch/spawn.d.ts.map +1 -0
  15. package/dist/piggy/logger/index.d.ts +3 -0
  16. package/dist/piggy/logger/index.d.ts.map +1 -0
  17. package/dist/piggy/open/index.d.ts +4 -0
  18. package/dist/piggy/open/index.d.ts.map +1 -0
  19. package/dist/piggy/register/index.d.ts +7 -0
  20. package/dist/piggy/register/index.d.ts.map +1 -0
  21. package/dist/piggy/server/index.d.ts +21 -0
  22. package/dist/piggy/server/index.d.ts.map +1 -0
  23. package/dist/piggy.d.ts +222 -0
  24. package/dist/piggy.d.ts.map +1 -0
  25. package/dist/piggy.js +3 -3
  26. package/dist/register/index.js +1 -1
  27. package/package.json +30 -16
  28. package/piggy/cache/memory.d.ts +7 -0
  29. package/piggy/cache/memory.d.ts.map +1 -0
  30. package/piggy/client/index.d.ts +79 -0
  31. package/piggy/client/index.d.ts.map +1 -0
  32. package/piggy/human/index.d.ts +7 -0
  33. package/piggy/human/index.d.ts.map +1 -0
  34. package/piggy/intercept/scripts.d.ts +13 -0
  35. package/piggy/intercept/scripts.d.ts.map +1 -0
  36. package/piggy/launch/detect.d.ts +3 -0
  37. package/piggy/launch/detect.d.ts.map +1 -0
  38. package/piggy/launch/spawn.d.ts +6 -0
  39. package/piggy/launch/spawn.d.ts.map +1 -0
  40. package/piggy/logger/index.d.ts +3 -0
  41. package/piggy/logger/index.d.ts.map +1 -0
  42. package/piggy/open/index.d.ts +4 -0
  43. package/piggy/open/index.d.ts.map +1 -0
  44. package/piggy/register/index.d.ts +7 -0
  45. package/piggy/register/index.d.ts.map +1 -0
  46. package/piggy/register/index.ts +1 -1
  47. package/piggy/server/index.d.ts +21 -0
  48. package/piggy/server/index.d.ts.map +1 -0
  49. package/piggy.ts +344 -33
@@ -0,0 +1,7 @@
1
+ export declare function get(key: string): any | null;
2
+ export declare function set(key: string, data: any, ttlMs: number): void;
3
+ export declare function del(key: string): void;
4
+ export declare function clear(): void;
5
+ export declare function size(): number;
6
+ export declare function keys(): string[];
7
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../piggy/cache/memory.ts"],"names":[],"mappings":"AASA,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAQ3C;AAED,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,QAExD;AAED,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,QAE9B;AAED,wBAAgB,KAAK,SAEpB;AAED,wBAAgB,IAAI,WAEnB;AAED,wBAAgB,IAAI,aAEnB"}
@@ -0,0 +1,79 @@
1
+ export declare class PiggyClient {
2
+ private socketPath;
3
+ private socket;
4
+ private reqId;
5
+ private pending;
6
+ private buf;
7
+ private eventBuffer;
8
+ private eventHandlers;
9
+ private globalEventHandlers;
10
+ constructor(socketPath?: string);
11
+ connect(): Promise<void>;
12
+ private handleEvent;
13
+ onEvent(eventName: string, tabId: string, handler: (data: any) => void): () => void;
14
+ disconnect(): void;
15
+ send<T = any>(cmd: string, payload?: Record<string, any>): Promise<T>;
16
+ newTab(): Promise<string>;
17
+ closeTab(tabId: string): Promise<void>;
18
+ listTabs(): Promise<string[]>;
19
+ navigate(url: string, tabId?: string): Promise<void>;
20
+ reload(tabId?: string): Promise<void>;
21
+ goBack(tabId?: string): Promise<void>;
22
+ goForward(tabId?: string): Promise<void>;
23
+ getTitle(tabId?: string): Promise<string>;
24
+ getUrl(tabId?: string): Promise<string>;
25
+ content(tabId?: string): Promise<string>;
26
+ evaluate(js: string, tabId?: string): Promise<any>;
27
+ addInitScript(js: string, tabId?: string): Promise<void>;
28
+ click(selector: string, tabId?: string): Promise<boolean>;
29
+ doubleClick(selector: string, tabId?: string): Promise<boolean>;
30
+ hover(selector: string, tabId?: string): Promise<boolean>;
31
+ type(selector: string, text: string, tabId?: string): Promise<boolean>;
32
+ select(selector: string, value: string, tabId?: string): Promise<boolean>;
33
+ keyPress(key: string, tabId?: string): Promise<boolean>;
34
+ keyCombo(combo: string, tabId?: string): Promise<boolean>;
35
+ mouseMove(x: number, y: number, tabId?: string): Promise<boolean>;
36
+ mouseDrag(from: {
37
+ x: number;
38
+ y: number;
39
+ }, to: {
40
+ x: number;
41
+ y: number;
42
+ }, tabId?: string): Promise<boolean>;
43
+ scrollTo(selector: string, tabId?: string): Promise<boolean>;
44
+ scrollBy(px: number, tabId?: string): Promise<boolean>;
45
+ fetchText(query: string, tabId?: string): Promise<string | null>;
46
+ fetchLinks(query: string, tabId?: string): Promise<string[]>;
47
+ fetchImages(query: string, tabId?: string): Promise<string[]>;
48
+ searchCss(query: string, tabId?: string): Promise<any>;
49
+ searchId(query: string, tabId?: string): Promise<any>;
50
+ waitForSelector(selector: string, timeout?: number, tabId?: string): Promise<void>;
51
+ waitForNavigation(tabId?: string): Promise<void>;
52
+ waitForResponse(urlPattern: string, timeout?: number, tabId?: string): Promise<void>;
53
+ screenshot(filePath?: string, tabId?: string): Promise<string>;
54
+ pdf(filePath?: string, tabId?: string): Promise<string>;
55
+ blockImages(tabId?: string): Promise<void>;
56
+ unblockImages(tabId?: string): Promise<void>;
57
+ setCookie(name: string, value: string, domain: string, path?: string, tabId?: string): Promise<void>;
58
+ getCookie(name: string, tabId?: string): Promise<any>;
59
+ deleteCookie(name: string, tabId?: string): Promise<void>;
60
+ listCookies(tabId?: string): Promise<any[]>;
61
+ addInterceptRule(action: "block" | "redirect" | "modifyHeaders", pattern: string, options?: {
62
+ redirectUrl?: string;
63
+ headers?: Record<string, string>;
64
+ }, tabId?: string): Promise<void>;
65
+ clearInterceptRules(tabId?: string): Promise<void>;
66
+ captureStart(tabId?: string): Promise<void>;
67
+ captureStop(tabId?: string): Promise<void>;
68
+ captureRequests(tabId?: string): Promise<any[]>;
69
+ captureWs(tabId?: string): Promise<any[]>;
70
+ captureCookies(tabId?: string): Promise<any[]>;
71
+ captureStorage(tabId?: string): Promise<any>;
72
+ captureClear(tabId?: string): Promise<void>;
73
+ sessionExport(tabId?: string): Promise<any>;
74
+ sessionImport(data: any, tabId?: string): Promise<void>;
75
+ exposeFunction(name: string, handler: (data: any) => Promise<any> | any, tabId?: string): Promise<void>;
76
+ unexposeFunction(name: string, tabId?: string): Promise<void>;
77
+ clearExposedFunctions(tabId?: string): Promise<void>;
78
+ }
79
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../piggy/client/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare function randomDelay(min: number, max: number): Promise<void>;
2
+ /**
3
+ * Simulates human typing by introducing ~2 random typos and correcting them.
4
+ * Returns an array of { char, isBackspace } actions to replay.
5
+ */
6
+ export declare function humanTypeSequence(text: string): string[];
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../piggy/human/index.ts"],"names":[],"mappings":"AAEA,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEnE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CA0CxD"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Generates a script that short-circuits matching fetch/XHR requests
3
+ * and returns a static fake response — the request never hits the network.
4
+ */
5
+ export declare function buildRespondScript(pattern: string, status: number, contentType: string, body: string): string;
6
+ /**
7
+ * Generates a script that lets the request hit the network, then calls
8
+ * an exposed function with { body, status, headers }.
9
+ * The exposed function returns { body?, status?, headers? } modifications
10
+ * or an empty object {} to pass through unchanged.
11
+ */
12
+ export declare function buildModifyResponseScript(pattern: string, exposedFnName: string): string;
13
+ //# sourceMappingURL=scripts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts.d.ts","sourceRoot":"","sources":["../../../piggy/intercept/scripts.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GACX,MAAM,CAyER;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CA0DxF"}
@@ -0,0 +1,3 @@
1
+ export type BinaryMode = 'headless' | 'headful';
2
+ export declare function detectBinary(mode?: BinaryMode): string | null;
3
+ //# sourceMappingURL=detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../../piggy/launch/detect.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;AAOhD,wBAAgB,YAAY,CAAC,IAAI,GAAE,UAAuB,GAAG,MAAM,GAAG,IAAI,CA+BzE"}
@@ -0,0 +1,6 @@
1
+ import { type BinaryMode } from "./detect";
2
+ export declare function killAllBrowsers(): void;
3
+ export declare function spawnBrowser(mode?: BinaryMode): Promise<string>;
4
+ export declare function spawnBrowserOnSocket(socketName: string, mode?: BinaryMode): Promise<void>;
5
+ export declare function killBrowser(): void;
6
+ //# sourceMappingURL=spawn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../../piggy/launch/spawn.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AASzD,wBAAgB,eAAe,IAAI,IAAI,CAiBtC;AAED,wBAAsB,YAAY,CAAC,IAAI,GAAE,UAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqEjF;AAED,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,UAAuB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAqCf;AAED,wBAAgB,WAAW,IAAI,IAAI,CAmBlC"}
@@ -0,0 +1,3 @@
1
+ declare const logger: import("ernest-logger").Logger;
2
+ export default logger;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../piggy/logger/index.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,MAAM,gCAiDV,CAAC;AAKH,eAAe,MAAM,CAAC"}
@@ -0,0 +1,4 @@
1
+ export default function open(): {
2
+ name: string;
3
+ };
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../piggy/open/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,IAAI;;EAI3B"}
@@ -0,0 +1,7 @@
1
+ import { PiggyClient } from "../client";
2
+ export declare let humanMode: boolean;
3
+ export declare function setClient(c: PiggyClient | null): void;
4
+ export declare function setHumanMode(v: boolean): void;
5
+ export declare function createSiteObject(name: string, registeredUrl: string, client: PiggyClient, tabId: string): any;
6
+ export declare function createExposedAPI<T extends Record<string, (data: any) => any>>(site: any, apiName: string, handlers: T): Promise<void>;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../piggy/register/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAOxC,eAAO,IAAI,SAAS,SAAQ,CAAC;AAE7B,wBAAgB,SAAS,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI,QAAuB;AACtE,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,QAAoB;AAgB3D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,OAmcvG;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CASrI"}
@@ -0,0 +1,21 @@
1
+ import { Elysia } from "elysia";
2
+ export type BeforeMiddleware = (ctx: {
3
+ params: Record<string, string>;
4
+ query: Record<string, string>;
5
+ body: any;
6
+ headers: Record<string, string>;
7
+ set: any;
8
+ }) => void | Promise<void>;
9
+ export type RouteHandler = (params: Record<string, string>, query: Record<string, string>, body: any) => Promise<any>;
10
+ export interface RouteConfig {
11
+ path: string;
12
+ method: "GET" | "POST" | "PUT" | "DELETE";
13
+ handler: RouteHandler;
14
+ ttl: number;
15
+ before: BeforeMiddleware[];
16
+ }
17
+ export declare const routeRegistry: Map<string, RouteConfig>;
18
+ export declare const keepAliveSites: Set<string>;
19
+ export declare function startServer(port: number, hostname?: string): Promise<Elysia>;
20
+ export declare function stopServer(): void;
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../piggy/server/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,MAAM,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE;IACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,IAAI,EAAE,GAAG,CAAC;IACV,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,GAAG,EAAE,GAAG,CAAC;CACV,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE3B,MAAM,MAAM,YAAY,GAAG,CACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,IAAI,EAAE,GAAG,KACN,OAAO,CAAC,GAAG,CAAC,CAAC;AAElB,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC1C,OAAO,EAAE,YAAY,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,gBAAgB,EAAE,CAAC;CAC5B;AAED,eAAO,MAAM,aAAa,0BAAiC,CAAC;AAC5D,eAAO,MAAM,cAAc,aAAoB,CAAC;AAmBhD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAoFrF;AAED,wBAAgB,UAAU,SAGzB"}
@@ -0,0 +1,222 @@
1
+ import { type BinaryMode } from "./piggy/launch/detect";
2
+ import type { Logger } from "ernest-logger";
3
+ import type { Elysia } from "elysia";
4
+ import type { RouteHandler, BeforeMiddleware, RouteConfig } from "./piggy/server";
5
+ export type TabMode = "tab" | "process";
6
+ /** Returned by createSiteObject — full API surface of a registered site. */
7
+ export interface SiteObject {
8
+ /** Internal name used when registering. */
9
+ _name: string;
10
+ /** Internal CDP / socket tab ID. */
11
+ _tabId: string;
12
+ navigate(url?: string, opts?: {
13
+ retries?: number;
14
+ }): Promise<void>;
15
+ reload(): Promise<void>;
16
+ goBack(): Promise<void>;
17
+ goForward(): Promise<void>;
18
+ waitForNavigation(): Promise<void>;
19
+ title(): Promise<string>;
20
+ /** Returns the last known URL (synchronous — does NOT hit the browser). */
21
+ url(): string;
22
+ content(): Promise<string>;
23
+ wait(ms: number): Promise<void>;
24
+ waitForSelector(selector: string, timeout?: number): Promise<void>;
25
+ waitForVisible(selector: string, timeout?: number): Promise<void>;
26
+ waitForResponse(pattern: string, timeout?: number): Promise<void>;
27
+ addInitScript(js: string | (() => void)): Promise<SiteObject>;
28
+ on(event: "navigate", handler: (url: string) => void): () => void;
29
+ on(event: string, handler: (data: unknown) => void): () => void;
30
+ off(event: string, handler: (data: unknown) => void): void;
31
+ click(selector: string, opts?: {
32
+ retries?: number;
33
+ timeout?: number;
34
+ }): Promise<boolean>;
35
+ doubleClick(selector: string): Promise<boolean>;
36
+ hover(selector: string): Promise<boolean>;
37
+ type(selector: string, text: string, opts?: {
38
+ delay?: number;
39
+ retries?: number;
40
+ fact?: boolean;
41
+ wpm?: number;
42
+ }): Promise<boolean>;
43
+ select(selector: string, value: string): Promise<boolean>;
44
+ evaluate<T = unknown>(js: string | ((...args: unknown[]) => T), ...args: unknown[]): Promise<T>;
45
+ keyboard: {
46
+ press(key: string): Promise<boolean>;
47
+ combo(combo: string): Promise<boolean>;
48
+ };
49
+ mouse: {
50
+ move(x: number, y: number): Promise<boolean>;
51
+ drag(from: {
52
+ x: number;
53
+ y: number;
54
+ }, to: {
55
+ x: number;
56
+ y: number;
57
+ }): Promise<boolean>;
58
+ };
59
+ scroll: {
60
+ to(selector: string): Promise<boolean>;
61
+ by(px: number): Promise<boolean>;
62
+ };
63
+ fetchText(selector: string): Promise<string | null>;
64
+ fetchLinks(selector: string): Promise<string[]>;
65
+ fetchImages(selector: string): Promise<string[]>;
66
+ search: {
67
+ css(query: string): Promise<unknown>;
68
+ id(query: string): Promise<unknown>;
69
+ };
70
+ screenshot(filePath?: string): Promise<string>;
71
+ pdf(filePath?: string): Promise<string>;
72
+ blockImages(): Promise<void>;
73
+ unblockImages(): Promise<void>;
74
+ cookies: {
75
+ set(name: string, value: string, domain: string, path?: string): Promise<void>;
76
+ get(name: string): Promise<unknown>;
77
+ delete(name: string): Promise<void>;
78
+ list(): Promise<unknown[]>;
79
+ };
80
+ intercept: {
81
+ block(pattern: string): Promise<void>;
82
+ redirect(pattern: string, redirectUrl: string): Promise<void>;
83
+ headers(pattern: string, headers: Record<string, string>): Promise<void>;
84
+ respond(pattern: string, handlerOrResponse: {
85
+ status?: number;
86
+ contentType?: string;
87
+ body: string;
88
+ } | ((req: {
89
+ url: string;
90
+ method: string;
91
+ }) => {
92
+ status?: number;
93
+ contentType?: string;
94
+ body: string;
95
+ })): Promise<SiteObject>;
96
+ modifyResponse(pattern: string, handler: (response: {
97
+ body: string;
98
+ status: number;
99
+ headers: Record<string, string>;
100
+ }) => Promise<{
101
+ body?: string;
102
+ status?: number;
103
+ headers?: Record<string, string>;
104
+ } | void> | void): Promise<SiteObject>;
105
+ clear(): Promise<void>;
106
+ };
107
+ capture: {
108
+ start(): Promise<void>;
109
+ stop(): Promise<void>;
110
+ requests(): Promise<unknown[]>;
111
+ ws(): Promise<unknown[]>;
112
+ cookies(): Promise<unknown[]>;
113
+ storage(): Promise<unknown>;
114
+ clear(): Promise<void>;
115
+ };
116
+ session: {
117
+ export(): Promise<unknown>;
118
+ import(data: unknown): Promise<void>;
119
+ };
120
+ exposeFunction(fnName: string, handler: (data: unknown) => Promise<unknown> | unknown): Promise<SiteObject>;
121
+ unexposeFunction(fnName: string): Promise<SiteObject>;
122
+ clearExposedFunctions(): Promise<SiteObject>;
123
+ exposeAndInject(fnName: string, handler: (data: unknown) => Promise<unknown> | unknown, injectionJs: string | ((fnName: string) => string)): Promise<SiteObject>;
124
+ api(path: string, handler: RouteHandler, opts?: {
125
+ ttl?: number;
126
+ before?: BeforeMiddleware[];
127
+ method?: "GET" | "POST" | "PUT" | "DELETE";
128
+ }): SiteObject;
129
+ noclose(): SiteObject;
130
+ close(): Promise<void>;
131
+ }
132
+ export interface RouteSummary {
133
+ site: string;
134
+ method: RouteConfig["method"];
135
+ path: string;
136
+ ttl: number;
137
+ middlewareCount: number;
138
+ }
139
+ /**
140
+ * Proxy that runs the same method on every site in parallel (Promise.all).
141
+ * The return type mirrors the SiteObject API but every method returns
142
+ * `Promise<ReturnType[]>` instead of a single value.
143
+ */
144
+ export type AllProxy = {
145
+ [K in keyof SiteObject]: SiteObject[K] extends (...args: infer A) => Promise<infer R> ? (...args: A) => Promise<R[]> : SiteObject[K] extends (...args: infer A) => infer R ? (...args: A) => Promise<R[]> : never;
146
+ };
147
+ /**
148
+ * Proxy that runs the same method on every site in parallel and returns a
149
+ * Record keyed by site `_name`.
150
+ */
151
+ export type DiffProxy = {
152
+ [K in keyof SiteObject]: SiteObject[K] extends (...args: infer A) => Promise<infer R> ? (...args: A) => Promise<Record<string, R>> : SiteObject[K] extends (...args: infer A) => infer R ? (...args: A) => Promise<Record<string, R>> : never;
153
+ };
154
+ export interface LaunchOptions {
155
+ /** Whether to open a separate browser process per registered site or share a single one via tabs. Default: `"tab"`. */
156
+ mode?: TabMode;
157
+ /** Whether to run the browser binary in headed or headless mode. Default: `"headless"`. */
158
+ binary?: BinaryMode;
159
+ }
160
+ export interface RegisterOptions {
161
+ /** Override the binary mode for this site's dedicated process (only used when `mode === "process"`). */
162
+ binary?: BinaryMode;
163
+ }
164
+ export interface ServeOptions {
165
+ hostname?: string;
166
+ }
167
+ export interface Piggy {
168
+ /**
169
+ * Spawns the Nothing Browser binary and connects the internal socket client.
170
+ * Must be called before any other method.
171
+ */
172
+ launch(opts?: LaunchOptions): Promise<Piggy>;
173
+ /**
174
+ * Registers a named site at the given URL.
175
+ * After registration `piggy[name]` is available as a `SiteObject`.
176
+ */
177
+ register(name: string, url: string, opts?: RegisterOptions): Promise<Piggy>;
178
+ /** Enables or disables human-simulation mode (random delays, typos, smooth scrolling). */
179
+ actHuman(enable: boolean): Piggy;
180
+ /** Changes the tab/process mode *before* the next `register()` call. */
181
+ mode(m: TabMode): Piggy;
182
+ /** Exposes a Node.js function to the browser's global scope on the default (or specified) tab. */
183
+ expose(name: string, handler: (data: unknown) => Promise<unknown> | unknown, tabId?: string): Promise<Piggy>;
184
+ /** Removes a previously exposed function from the browser. */
185
+ unexpose(name: string, tabId?: string): Promise<Piggy>;
186
+ /** Starts an Elysia HTTP server that exposes all registered `.api()` routes. */
187
+ serve(port: number, opts?: ServeOptions): Promise<Elysia>;
188
+ /** Stops the running Elysia server. */
189
+ stopServer(): void;
190
+ /** Returns a summary of every mounted HTTP route. */
191
+ routes(): RouteSummary[];
192
+ /**
193
+ * Returns a proxy that calls the same method on **all** given sites in
194
+ * parallel (via `Promise.all`) and returns an array of results.
195
+ */
196
+ all(sites: SiteObject[]): AllProxy;
197
+ /**
198
+ * Returns a proxy that calls the same method on **all** given sites in
199
+ * parallel and returns a `Record<siteName, result>` object.
200
+ */
201
+ diff(sites: SiteObject[]): DiffProxy;
202
+ /**
203
+ * Gracefully shuts down all tabs and the browser process.
204
+ * Pass `{ force: true }` to skip graceful close and kill immediately.
205
+ */
206
+ close(opts?: {
207
+ force?: boolean;
208
+ }): Promise<void>;
209
+ /** Detects the Nothing Browser binary path for the given mode. */
210
+ detect(mode?: BinaryMode): string | null;
211
+ /** The ernest-logger instance used internally. */
212
+ logger: Logger;
213
+ /**
214
+ * After `piggy.register("mysite", url)` you can access the site as
215
+ * `piggy.mysite`. The index signature covers those dynamic properties.
216
+ */
217
+ [site: string]: SiteObject | unknown;
218
+ }
219
+ declare const piggy: Piggy;
220
+ export default piggy;
221
+ export { piggy };
222
+ //# sourceMappingURL=piggy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"piggy.d.ts","sourceRoot":"","sources":["../piggy.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAMtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlF,MAAM,MAAM,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;AAExC,4EAA4E;AAC5E,MAAM,WAAW,UAAU;IACzB,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IAGf,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,2EAA2E;IAC3E,GAAG,IAAI,MAAM,CAAC;IACd,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAG3B,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGlE,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAG9D,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAClE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAChE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;IAG3D,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzF,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,CACF,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GACxE,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1D,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAEhG,QAAQ,EAAE;QACR,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QACrC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KACxC,CAAC;IAEF,KAAK,EAAE;QACL,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,EAAE,EAAE,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KACtF,CAAC;IAEF,MAAM,EAAE;QACN,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QACvC,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KAClC,CAAC;IAGF,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACpD,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEjD,MAAM,EAAE;QACN,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QACrC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KACrC,CAAC;IAGF,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,GAAG,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAG/B,OAAO,EAAE;QACP,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/E,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;KAC5B,CAAC;IAGF,SAAS,EAAE;QACT,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9D,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACzE,OAAO,CACL,OAAO,EAAE,MAAM,EACf,iBAAiB,EACb;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,GACvD,CAAC,CAAC,GAAG,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,KAAK;YACzC,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,WAAW,CAAC,EAAE,MAAM,CAAC;YACrB,IAAI,EAAE,MAAM,CAAC;SACd,CAAC,GACL,OAAO,CAAC,UAAU,CAAC,CAAC;QACvB,cAAc,CACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,CAAC,QAAQ,EAAE;YAClB,IAAI,EAAE,MAAM,CAAC;YACb,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SACjC,KAAK,OAAO,CAAC;YAAE,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAAE,GAAG,IAAI,CAAC,GAAG,IAAI,GAChG,OAAO,CAAC,UAAU,CAAC,CAAC;QACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;KACxB,CAAC;IAGF,OAAO,EAAE;QACP,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;QACtB,QAAQ,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/B,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACzB,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;KACxB,CAAC;IAGF,OAAO,EAAE;QACP,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3B,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KACtC,CAAC;IAGF,cAAc,CACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,GACrD,OAAO,CAAC,UAAU,CAAC,CAAC;IACvB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACtD,qBAAqB,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7C,eAAe,CACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,EACtD,WAAW,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,GACjD,OAAO,CAAC,UAAU,CAAC,CAAC;IAGvB,GAAG,CACD,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,EACrB,IAAI,CAAC,EAAE;QACL,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC;QAC5B,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;KAC5C,GACA,UAAU,CAAC;IAEd,OAAO,IAAI,UAAU,CAAC;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAID,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;CACzB;AAID;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG;KACpB,CAAC,IAAI,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GACjF,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,GAC5B,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC,GACjD,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,GAC5B,KAAK;CACZ,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG;KACrB,CAAC,IAAI,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GACjF,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAC1C,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC,GACjD,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAC1C,KAAK;CACZ,CAAC;AAIF,MAAM,WAAW,aAAa;IAC5B,uHAAuH;IACvH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,2FAA2F;IAC3F,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,wGAAwG;IACxG,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,MAAM,WAAW,KAAK;IAEpB;;;OAGG;IACH,MAAM,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAE7C;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAG5E,0FAA0F;IAC1F,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,KAAK,CAAC;IAEjC,wEAAwE;IACxE,IAAI,CAAC,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAGxB,kGAAkG;IAClG,MAAM,CACJ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,EACtD,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,KAAK,CAAC,CAAC;IAElB,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAGvD,gFAAgF;IAChF,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE1D,uCAAuC;IACvC,UAAU,IAAI,IAAI,CAAC;IAGnB,qDAAqD;IACrD,MAAM,IAAI,YAAY,EAAE,CAAC;IAGzB;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC;IAEnC;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC;IAGrC;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGjD,kEAAkE;IAClE,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC;IAEzC,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IAGf;;;OAGG;IACH,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;CACtC;AAWD,QAAA,MAAM,KAAK,EAAE,KAuJZ,CAAC;AAEF,eAAe,KAAK,CAAC;AACrB,OAAO,EAAE,KAAK,EAAE,CAAC"}
package/dist/piggy.js CHANGED
@@ -21830,7 +21830,7 @@ var piggy = {
21830
21830
  routes: () => Array.from(routeRegistry.entries()).map(([key, cfg]) => {
21831
21831
  const [site] = key.split(":");
21832
21832
  return {
21833
- site,
21833
+ site: site ?? key,
21834
21834
  method: cfg.method,
21835
21835
  path: `/${site}${cfg.path}`,
21836
21836
  ttl: cfg.ttl,
@@ -21838,10 +21838,10 @@ var piggy = {
21838
21838
  };
21839
21839
  }),
21840
21840
  all: (sites) => new Proxy({}, {
21841
- get: (_, method) => (...args) => Promise.all(sites.map((s) => s[method]?.(...args)))
21841
+ get: (_target, method) => (...args) => Promise.all(sites.map((s) => s[method]?.(...args)))
21842
21842
  }),
21843
21843
  diff: (sites) => new Proxy({}, {
21844
- get: (_, method) => async (...args) => {
21844
+ get: (_target, method) => async (...args) => {
21845
21845
  const results = await Promise.all(sites.map((s) => s[method]?.(...args)));
21846
21846
  return Object.fromEntries(sites.map((s, i) => [s._name ?? i, results[i]]));
21847
21847
  }
@@ -17252,7 +17252,7 @@ function createExposedAPI(site, apiName, handlers) {
17252
17252
  try {
17253
17253
  return await handler(args);
17254
17254
  } catch (err) {
17255
- logger_default.error(`[${site._name}] API error in ${method}:`, err);
17255
+ logger_default.error(`[${site._name}] API error in ${method}: ${err}`);
17256
17256
  throw err;
17257
17257
  }
17258
17258
  };
package/package.json CHANGED
@@ -1,17 +1,30 @@
1
1
  {
2
2
  "name": "nothing-browser",
3
- "version": "0.0.13",
3
+ "version": "0.0.15",
4
4
  "description": "Browser automation library powered by Nothing Browser",
5
- "main": "./dist/index.js",
6
- "types": "./dist/index.d.ts",
7
- "exports": {
8
-
9
- ".": {
10
- "bun": "./piggy.ts",
11
- "node": "./dist/piggy.js",
12
- "default": "./dist/piggy.js"
5
+ "homepage": "https://github.com/ernest-tech-house-co-operation/nothing-browser#readme",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/ernest-tech-house-co-operation/nothing-browser.git"
9
+ },
10
+ "bugs": {
11
+ "url": "https://github.com/ernest-tech-house-co-operation/nothing-browser/issues"
12
+ },
13
+ "author": {
14
+ "name": "Pease Ernest",
15
+ "email": "pease@ernest.com",
16
+ "url": "https://github.com/ernest-tech-house-co-operation"
13
17
  },
14
-
18
+ "license": "MIT",
19
+ "main": "./dist/piggy.js",
20
+ "types": "./dist/piggy.d.ts",
21
+ "exports": {
22
+ ".": {
23
+ "bun": "./piggy.ts",
24
+ "node": "./dist/piggy.js",
25
+ "default": "./dist/piggy.js",
26
+ "types": "./dist/piggy.d.ts"
27
+ },
15
28
  "./register": {
16
29
  "bun": "./piggy/register/index.ts",
17
30
  "node": "./dist/register/index.js",
@@ -29,8 +42,11 @@
29
42
  }
30
43
  },
31
44
  "scripts": {
32
- "build": "bun build ./piggy.ts --outdir ./dist --target node && bun build ./piggy/client/index.ts --outdir ./dist/client --target node && bun build ./piggy/register/index.ts --outdir ./dist/register --target node && bun build ./piggy/server/index.ts --outdir ./dist/server --target node && bun build ./piggy/logger/index.ts --outdir ./dist/logger --target node && bun build ./piggy/launch/detect.ts --outdir ./dist/launch --target node && bun build ./piggy/launch/spawn.ts --outdir ./dist/launch --target node && bun build ./piggy/cache/memory.ts --outdir ./dist/cache --target node && bun build ./piggy/human/index.ts --outdir ./dist/human --target node",
33
- "prepublishOnly": "npm run build"
45
+ "clean": "rm -rf dist",
46
+ "build:types": "tsc --project tsconfig.json --emitDeclarationOnly --outDir dist",
47
+ "build:js": "bun build ./piggy.ts --outdir ./dist --target node && bun build ./piggy/client/index.ts --outdir ./dist/client --target node && bun build ./piggy/register/index.ts --outdir ./dist/register --target node && bun build ./piggy/server/index.ts --outdir ./dist/server --target node && bun build ./piggy/logger/index.ts --outdir ./dist/logger --target node && bun build ./piggy/launch/detect.ts --outdir ./dist/launch --target node && bun build ./piggy/launch/spawn.ts --outdir ./dist/launch --target node && bun build ./piggy/cache/memory.ts --outdir ./dist/cache --target node && bun build ./piggy/human/index.ts --outdir ./dist/human --target node",
48
+ "build": "bun run clean && bun run build:types && bun run build:js",
49
+ "prepublishOnly": "bun run build"
34
50
  },
35
51
  "dependencies": {
36
52
  "elysia": "^1.0.0"
@@ -41,7 +57,7 @@
41
57
  "devDependencies": {
42
58
  "@types/node": "^20.0.0",
43
59
  "bun-types": "latest",
44
- "typescript": "^5.0.0"
60
+ "typescript": "^5.8.0"
45
61
  },
46
62
  "engines": {
47
63
  "node": ">=18.0.0",
@@ -62,7 +78,5 @@
62
78
  "webdriver",
63
79
  "chromium",
64
80
  "nothing-browser"
65
- ],
66
- "author": "",
67
- "license": "MIT"
81
+ ]
68
82
  }
@@ -0,0 +1,7 @@
1
+ export declare function get(key: string): any | null;
2
+ export declare function set(key: string, data: any, ttlMs: number): void;
3
+ export declare function del(key: string): void;
4
+ export declare function clear(): void;
5
+ export declare function size(): number;
6
+ export declare function keys(): string[];
7
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["memory.ts"],"names":[],"mappings":"AASA,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAQ3C;AAED,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,QAExD;AAED,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,QAE9B;AAED,wBAAgB,KAAK,SAEpB;AAED,wBAAgB,IAAI,WAEnB;AAED,wBAAgB,IAAI,aAEnB"}