reflet-sdk 0.4.2 → 0.5.0

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.
@@ -0,0 +1,19 @@
1
+ import { t as DevtoolsServerOptions } from "./options-7KtQZJj8.js";
2
+ //#region src/devtools/server/handler.d.ts
3
+ type DevtoolsHandler = (request: Request) => Promise<Response>;
4
+ //#endregion
5
+ //#region src/devtools/server/next.d.ts
6
+ export interface DevtoolsRoute {
7
+ GET: DevtoolsHandler;
8
+ POST: DevtoolsHandler;
9
+ }
10
+ /**
11
+ * Route handlers for `app/api/reflet-devtools/[...path]/route.ts`. They answer
12
+ * only under `next dev`; production builds get an empty 404.
13
+ */
14
+ export declare function createDevtoolsRoute(options?: DevtoolsServerOptions): DevtoolsRoute;
15
+ export declare const GET: DevtoolsHandler;
16
+ export declare const POST: DevtoolsHandler;
17
+ //#endregion
18
+ export type { DevtoolsServerOptions };
19
+ //# sourceMappingURL=devtools-next.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools-next.d.ts","names":[],"sources":["../src/devtools/server/handler.ts","../src/devtools/server/next.ts"],"mappings":";;KAuBY,mBAAmB,SAAS,YAAY,QAAQ;;;iBClB3C;EACf,KAAK;EACL,MAAM;;;;;;wBAOQ,oBACd,UAAS,wBACR;qBAcU,KAAG;qBACH,MAAI"}
@@ -0,0 +1,25 @@
1
+ import { t as createDevtoolsHandler } from "./handler-CHP0m7KF.js";
2
+ //#region src/devtools/server/next.ts
3
+ /**
4
+ * Route handlers for `app/api/reflet-devtools/[...path]/route.ts`. They answer
5
+ * only under `next dev`; production builds get an empty 404.
6
+ */
7
+ function createDevtoolsRoute(options = {}) {
8
+ let handler = null;
9
+ const handle = async (request) => {
10
+ if (process.env.NODE_ENV !== "development") return new Response(null, { status: 404 });
11
+ handler ??= createDevtoolsHandler(options);
12
+ return await handler(request);
13
+ };
14
+ return {
15
+ GET: handle,
16
+ POST: handle
17
+ };
18
+ }
19
+ const defaultRoute = createDevtoolsRoute();
20
+ const GET = defaultRoute.GET;
21
+ const POST = defaultRoute.POST;
22
+ //#endregion
23
+ export { GET, POST, createDevtoolsRoute };
24
+
25
+ //# sourceMappingURL=devtools-next.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools-next.js","names":[],"sources":["../src/devtools/server/next.ts"],"sourcesContent":["import { createDevtoolsHandler, type DevtoolsHandler } from \"./handler\";\nimport type { DevtoolsServerOptions } from \"./options\";\n\nexport type { DevtoolsServerOptions } from \"./options\";\n\nexport interface DevtoolsRoute {\n GET: DevtoolsHandler;\n POST: DevtoolsHandler;\n}\n\n/**\n * Route handlers for `app/api/reflet-devtools/[...path]/route.ts`. They answer\n * only under `next dev`; production builds get an empty 404.\n */\nexport function createDevtoolsRoute(\n options: DevtoolsServerOptions = {}\n): DevtoolsRoute {\n let handler: DevtoolsHandler | null = null;\n const handle: DevtoolsHandler = async (request) => {\n if (process.env.NODE_ENV !== \"development\") {\n return new Response(null, { status: 404 });\n }\n handler ??= createDevtoolsHandler(options);\n return await handler(request);\n };\n return { GET: handle, POST: handle };\n}\n\nconst defaultRoute = createDevtoolsRoute();\n\nexport const GET = defaultRoute.GET;\nexport const POST = defaultRoute.POST;\n"],"mappings":";;;;;;AAcA,SAAgB,oBACd,UAAiC,CAAC,GACnB;CACf,IAAI,UAAkC;CACtC,MAAM,SAA0B,OAAO,YAAY;EACjD,IAAI,QAAQ,IAAI,aAAa,eAC3B,OAAO,IAAI,SAAS,MAAM,EAAE,QAAQ,IAAI,CAAC;EAE3C,YAAY,sBAAsB,OAAO;EACzC,OAAO,MAAM,QAAQ,OAAO;CAC9B;CACA,OAAO;EAAE,KAAK;EAAQ,MAAM;CAAO;AACrC;AAEA,MAAM,eAAe,oBAAoB;AAEzC,MAAa,MAAM,aAAa;AAChC,MAAa,OAAO,aAAa"}
@@ -0,0 +1,8 @@
1
+ import { t as DevtoolsServerOptions } from "./options-7KtQZJj8.js";
2
+ import { Plugin } from "vite";
3
+ //#region src/devtools/server/vite.d.ts
4
+ /** Serves the Reflet devtools route from the Vite dev server; never part of a build. */
5
+ export declare function refletDevtools(options?: DevtoolsServerOptions): Plugin;
6
+ //#endregion
7
+ export type { DevtoolsServerOptions };
8
+ //# sourceMappingURL=devtools-vite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools-vite.d.ts","names":[],"sources":["../src/devtools/server/vite.ts"],"mappings":";;;;wBA8EgB,eAAe,UAAS,wBAA6B"}
@@ -0,0 +1,75 @@
1
+ import { r as DEVTOOLS_ROUTE_BASE } from "./protocol-Bn6Bg_0r.js";
2
+ import { n as errorResponse, t as createDevtoolsHandler } from "./handler-CHP0m7KF.js";
3
+ import { loadEnv } from "vite";
4
+ //#region src/devtools/server/vite.ts
5
+ const MAX_BODY_BYTES = 1048576;
6
+ const ENV_PREFIX = "REFLET_";
7
+ async function readBody(request) {
8
+ const chunks = [];
9
+ let size = 0;
10
+ for await (const chunk of request) {
11
+ const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk));
12
+ size += buffer.length;
13
+ if (size <= MAX_BODY_BYTES) chunks.push(buffer);
14
+ }
15
+ return size > MAX_BODY_BYTES ? null : Buffer.concat(chunks).toString("utf8");
16
+ }
17
+ function toWebRequest(request, method, body) {
18
+ const origin = `http://${request.headers.host ?? "localhost"}`;
19
+ const url = new URL(request.originalUrl ?? request.url ?? "/", origin);
20
+ const headers = new Headers();
21
+ for (const [name, value] of Object.entries(request.headers)) {
22
+ if (name.startsWith(":") || value === void 0) continue;
23
+ for (const item of Array.isArray(value) ? value : [value]) headers.append(name, item);
24
+ }
25
+ return new Request(url, {
26
+ body,
27
+ headers,
28
+ method
29
+ });
30
+ }
31
+ async function sendWebResponse(response, serverResponse) {
32
+ serverResponse.statusCode = response.status;
33
+ for (const [name, value] of response.headers) serverResponse.setHeader(name, value);
34
+ serverResponse.end(Buffer.from(await response.arrayBuffer()));
35
+ }
36
+ async function serveDevtoolsRequest(handler, request, serverResponse) {
37
+ const method = request.method ?? "GET";
38
+ const body = method !== "GET" && method !== "HEAD" ? await readBody(request) : void 0;
39
+ if (body === null) {
40
+ await sendWebResponse(errorResponse("Reflet devtools requests are limited to 1 MB.", 413), serverResponse);
41
+ return;
42
+ }
43
+ await sendWebResponse(await handler(toWebRequest(request, method, body)), serverResponse);
44
+ }
45
+ /** Serves the Reflet devtools route from the Vite dev server; never part of a build. */
46
+ function refletDevtools(options = {}) {
47
+ let handler = null;
48
+ return {
49
+ apply: "serve",
50
+ configResolved(config) {
51
+ const env = loadEnv(config.mode, config.envDir, ENV_PREFIX);
52
+ handler = createDevtoolsHandler({
53
+ ...options,
54
+ root: options.root ?? config.root
55
+ }, {
56
+ ...process.env,
57
+ ...env
58
+ });
59
+ },
60
+ configureServer(server) {
61
+ server.middlewares.use(DEVTOOLS_ROUTE_BASE, (request, response, next) => {
62
+ if (!handler) {
63
+ next();
64
+ return;
65
+ }
66
+ serveDevtoolsRequest(handler, request, response).catch(next);
67
+ });
68
+ },
69
+ name: "reflet-devtools"
70
+ };
71
+ }
72
+ //#endregion
73
+ export { refletDevtools };
74
+
75
+ //# sourceMappingURL=devtools-vite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools-vite.js","names":[],"sources":["../src/devtools/server/vite.ts"],"sourcesContent":["import type { ServerResponse } from \"node:http\";\nimport { type Connect, loadEnv, type Plugin } from \"vite\";\nimport { DEVTOOLS_ROUTE_BASE } from \"../protocol\";\nimport { createDevtoolsHandler, type DevtoolsHandler } from \"./handler\";\nimport { errorResponse } from \"./json-response\";\nimport type { DevtoolsServerOptions } from \"./options\";\n\nexport type { DevtoolsServerOptions } from \"./options\";\n\nconst MAX_BODY_BYTES = 1_048_576;\nconst ENV_PREFIX = \"REFLET_\";\n\nasync function readBody(\n request: Connect.IncomingMessage\n): Promise<string | null> {\n const chunks: Buffer[] = [];\n let size = 0;\n for await (const chunk of request) {\n const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk));\n size += buffer.length;\n // Keep draining: leaving the loop early destroys the socket before the 413 is sent.\n if (size <= MAX_BODY_BYTES) {\n chunks.push(buffer);\n }\n }\n return size > MAX_BODY_BYTES ? null : Buffer.concat(chunks).toString(\"utf8\");\n}\n\nfunction toWebRequest(\n request: Connect.IncomingMessage,\n method: string,\n body: string | undefined\n): Request {\n const origin = `http://${request.headers.host ?? \"localhost\"}`;\n const url = new URL(request.originalUrl ?? request.url ?? \"/\", origin);\n const headers = new Headers();\n for (const [name, value] of Object.entries(request.headers)) {\n if (name.startsWith(\":\") || value === undefined) {\n continue;\n }\n for (const item of Array.isArray(value) ? value : [value]) {\n headers.append(name, item);\n }\n }\n return new Request(url, { body, headers, method });\n}\n\nasync function sendWebResponse(\n response: Response,\n serverResponse: ServerResponse\n): Promise<void> {\n serverResponse.statusCode = response.status;\n for (const [name, value] of response.headers) {\n serverResponse.setHeader(name, value);\n }\n serverResponse.end(Buffer.from(await response.arrayBuffer()));\n}\n\nasync function serveDevtoolsRequest(\n handler: DevtoolsHandler,\n request: Connect.IncomingMessage,\n serverResponse: ServerResponse\n): Promise<void> {\n const method = request.method ?? \"GET\";\n const hasBody = method !== \"GET\" && method !== \"HEAD\";\n const body = hasBody ? await readBody(request) : undefined;\n if (body === null) {\n await sendWebResponse(\n errorResponse(\"Reflet devtools requests are limited to 1 MB.\", 413),\n serverResponse\n );\n return;\n }\n const response = await handler(toWebRequest(request, method, body));\n await sendWebResponse(response, serverResponse);\n}\n\n/** Serves the Reflet devtools route from the Vite dev server; never part of a build. */\nexport function refletDevtools(options: DevtoolsServerOptions = {}): Plugin {\n let handler: DevtoolsHandler | null = null;\n\n return {\n apply: \"serve\",\n configResolved(config) {\n const env = loadEnv(config.mode, config.envDir, ENV_PREFIX);\n handler = createDevtoolsHandler(\n { ...options, root: options.root ?? config.root },\n { ...process.env, ...env }\n );\n },\n configureServer(server) {\n server.middlewares.use(DEVTOOLS_ROUTE_BASE, (request, response, next) => {\n if (!handler) {\n next();\n return;\n }\n serveDevtoolsRequest(handler, request, response).catch(next);\n });\n },\n name: \"reflet-devtools\",\n };\n}\n"],"mappings":";;;;AASA,MAAM,iBAAiB;AACvB,MAAM,aAAa;AAEnB,eAAe,SACb,SACwB;CACxB,MAAM,SAAmB,CAAC;CAC1B,IAAI,OAAO;CACX,WAAW,MAAM,SAAS,SAAS;EACjC,MAAM,SAAS,OAAO,SAAS,KAAK,IAAI,QAAQ,OAAO,KAAK,OAAO,KAAK,CAAC;EACzE,QAAQ,OAAO;EAEf,IAAI,QAAQ,gBACV,OAAO,KAAK,MAAM;CAEtB;CACA,OAAO,OAAO,iBAAiB,OAAO,OAAO,OAAO,MAAM,CAAC,CAAC,SAAS,MAAM;AAC7E;AAEA,SAAS,aACP,SACA,QACA,MACS;CACT,MAAM,SAAS,UAAU,QAAQ,QAAQ,QAAQ;CACjD,MAAM,MAAM,IAAI,IAAI,QAAQ,eAAe,QAAQ,OAAO,KAAK,MAAM;CACrE,MAAM,UAAU,IAAI,QAAQ;CAC5B,KAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,QAAQ,OAAO,GAAG;EAC3D,IAAI,KAAK,WAAW,GAAG,KAAK,UAAU,KAAA,GACpC;EAEF,KAAK,MAAM,QAAQ,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK,GACtD,QAAQ,OAAO,MAAM,IAAI;CAE7B;CACA,OAAO,IAAI,QAAQ,KAAK;EAAE;EAAM;EAAS;CAAO,CAAC;AACnD;AAEA,eAAe,gBACb,UACA,gBACe;CACf,eAAe,aAAa,SAAS;CACrC,KAAK,MAAM,CAAC,MAAM,UAAU,SAAS,SACnC,eAAe,UAAU,MAAM,KAAK;CAEtC,eAAe,IAAI,OAAO,KAAK,MAAM,SAAS,YAAY,CAAC,CAAC;AAC9D;AAEA,eAAe,qBACb,SACA,SACA,gBACe;CACf,MAAM,SAAS,QAAQ,UAAU;CAEjC,MAAM,OADU,WAAW,SAAS,WAAW,SACxB,MAAM,SAAS,OAAO,IAAI,KAAA;CACjD,IAAI,SAAS,MAAM;EACjB,MAAM,gBACJ,cAAc,iDAAiD,GAAG,GAClE,cACF;EACA;CACF;CAEA,MAAM,gBAAgB,MADC,QAAQ,aAAa,SAAS,QAAQ,IAAI,CAAC,GAClC,cAAc;AAChD;;AAGA,SAAgB,eAAe,UAAiC,CAAC,GAAW;CAC1E,IAAI,UAAkC;CAEtC,OAAO;EACL,OAAO;EACP,eAAe,QAAQ;GACrB,MAAM,MAAM,QAAQ,OAAO,MAAM,OAAO,QAAQ,UAAU;GAC1D,UAAU,sBACR;IAAE,GAAG;IAAS,MAAM,QAAQ,QAAQ,OAAO;GAAK,GAChD;IAAE,GAAG,QAAQ;IAAK,GAAG;GAAI,CAC3B;EACF;EACA,gBAAgB,QAAQ;GACtB,OAAO,YAAY,IAAI,sBAAsB,SAAS,UAAU,SAAS;IACvE,IAAI,CAAC,SAAS;KACZ,KAAK;KACL;IACF;IACA,qBAAqB,SAAS,SAAS,QAAQ,CAAC,CAAC,MAAM,IAAI;GAC7D,CAAC;EACH;EACA,MAAM;CACR;AACF"}
@@ -74,6 +74,11 @@ interface RefletFeedbackProps {
74
74
  captureConsole?: boolean;
75
75
  /** Take a screenshot of the viewport as soon as the panel opens. */
76
76
  captureOnOpen?: boolean;
77
+ /**
78
+ * Dev-only tools for your team: inspect an element's code, keep notes, read
79
+ * the board for the current page. Never loaded outside `NODE_ENV=development`.
80
+ */
81
+ devtools?: boolean;
77
82
  /** Let reporters hide the launcher for this many days. */
78
83
  dismissForDays?: number;
79
84
  /** Render nothing when false — lets an app gate the widget per user. */
@@ -1 +1 @@
1
- {"version":3,"file":"feedback.d.ts","names":[],"sources":["../src/feedback/types.ts","../src/feedback/core/capture.ts","../src/feedback/core/element-selector.ts","../src/feedback/core/page-context.ts","../src/feedback/widget.tsx"],"mappings":";;cAKM;KAUM,yBAAyB;UAEpB;EACf;EACA;;UAGe;EACf;EACA,KAAK;EACL;;EAEA,SAAS;EACT,OAAO;EACP;EACA,MAAM;;UAGS;EACf,MAAM;EACN;EACA;;EAEA;EACA;;UAce;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;UAgDe;;EAEf;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA;EACA,SAAS,QAAQ;;EAEjB,WAAW;;EAEX;EACA;EACA,aAAa;IAAU;;EACvB;EACA,YAAY;IAAU;;EACtB;EACA;EACA;EACA;EACA,OAAO;EACP;;;;UCwDe;;EAEf,UAAU;EACV;EACA;;EAEA;;;;;;;;;;wBA2GoB,gBACpB,UAAS,iBACR,QAAQ;wBAiDK,eAAe,OAAO;;;;wBCvGtB,sBAAsB,SAAS,UAAU;;;;wBCjMzC,mBAAmB;EACjC;IACE;;;wBCnFY,eAAe,OAAO,sCAAmB,IAAA"}
1
+ {"version":3,"file":"feedback.d.ts","names":[],"sources":["../src/feedback/types.ts","../src/feedback/core/capture.ts","../src/feedback/core/element-selector.ts","../src/feedback/core/page-context.ts","../src/feedback/widget.tsx"],"mappings":";;cAKM;KAUM,yBAAyB;UAEpB;EACf;EACA;;UAGe;EACf;EACA,KAAK;EACL;;EAEA,SAAS;EACT,OAAO;EACP;EACA,MAAM;;UAGS;EACf,MAAM;EACN;EACA;;EAEA;EACA;;UAce;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;UAgDe;;EAEf;;EAEA;;EAEA;;;;;EAKA;;EAEA;;EAEA;;EAEA;EACA,SAAS,QAAQ;;EAEjB,WAAW;;EAEX;EACA;EACA,aAAa;IAAU;;EACvB;EACA,YAAY;IAAU;;EACtB;EACA;EACA;EACA;EACA,OAAO;EACP;;;;UC6De;;EAEf,UAAU;EACV;EACA;;EAEA;;;;;;;;;;wBA2GoB,gBACpB,UAAS,iBACR,QAAQ;wBAiDK,eAAe,OAAO;;;;wBCjHtB,sBAAsB,SAAS,UAAU;;;;wBCjMzC,mBAAmB;EACjC;IACE;;;wBCvEY,eAAe,OAAO,sCAAmB,IAAA"}