@mindbowser_inc/ui-feedback-plugin 0.1.0 → 0.2.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindbowser_inc/ui-feedback-plugin",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "A floating widget for collecting annotated UI feedback on web prototypes — Figma-style comments, screenshots, reply threads, Firebase/Supabase/S3 support",
5
5
  "main": "dist/ui-feedback-plugin.umd.js",
6
6
  "module": "dist/ui-feedback-plugin.es.js",
@@ -1,32 +0,0 @@
1
- var a = Object.defineProperty;
2
- var d = (n, e, t) => e in n ? a(n, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : n[e] = t;
3
- var r = (n, e, t) => d(n, typeof e != "symbol" ? e + "" : e, t);
4
- class c {
5
- constructor(e, t = {}) {
6
- r(this, "endpoint");
7
- r(this, "headers");
8
- this.endpoint = e, this.headers = t;
9
- }
10
- async uploadScreenshot(e, t) {
11
- const i = t.includes(",") ? t.split(",")[1] : t, o = await fetch(this.endpoint, {
12
- method: "POST",
13
- headers: {
14
- "Content-Type": "application/json",
15
- ...this.headers
16
- },
17
- body: JSON.stringify({ commentId: e, imageData: i })
18
- });
19
- if (!o.ok)
20
- throw new Error(
21
- `[ui-feedback-plugin] Screenshot upload failed: ${o.status} ${o.statusText}`
22
- );
23
- const s = await o.json();
24
- if (!(s != null && s.url))
25
- throw new Error("[ui-feedback-plugin] Upload endpoint did not return { url }");
26
- return s.url;
27
- }
28
- }
29
- export {
30
- c as S3ScreenshotAdapter
31
- };
32
- //# sourceMappingURL=s3-DkzKoz0A.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"s3-DkzKoz0A.mjs","sources":["../src/adapters/s3.ts"],"sourcesContent":["/**\n * S3 screenshot adapter — routes uploads through your own backend endpoint.\n *\n * AWS credentials MUST live on your server, never in browser code.\n * Your endpoint receives: POST { commentId: string, imageData: string (base64) }\n * Your endpoint returns: { url: string } (the public S3 URL)\n *\n * Minimal Node/Express example:\n *\n * const { S3Client, PutObjectCommand } = require('@aws-sdk/client-s3')\n * const s3 = new S3Client({\n * region: process.env.AWS_REGION,\n * credentials: {\n * accessKeyId: process.env.AWS_ACCESS_KEY_ID,\n * secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,\n * },\n * })\n *\n * app.post('/upload-screenshot', async (req, res) => {\n * const { commentId, imageData } = req.body\n * const buffer = Buffer.from(imageData, 'base64')\n * await s3.send(new PutObjectCommand({\n * Bucket: process.env.S3_BUCKET,\n * Key: `ufp/${commentId}.png`,\n * Body: buffer,\n * ContentType: 'image/png',\n * }))\n * res.json({ url: `https://${process.env.S3_BUCKET}.s3.amazonaws.com/ufp/${commentId}.png` })\n * })\n */\nimport type { ScreenshotAdapter } from '../core/types'\n\nexport class S3ScreenshotAdapter implements ScreenshotAdapter {\n private endpoint: string\n private headers: Record<string, string>\n\n constructor(endpoint: string, headers: Record<string, string> = {}) {\n this.endpoint = endpoint\n this.headers = headers\n }\n\n async uploadScreenshot(commentId: string, dataUrl: string): Promise<string> {\n // Strip the data URL prefix — send only the base64 payload\n const imageData = dataUrl.includes(',') ? dataUrl.split(',')[1] : dataUrl\n\n const response = await fetch(this.endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...this.headers,\n },\n body: JSON.stringify({ commentId, imageData }),\n })\n\n if (!response.ok) {\n throw new Error(\n `[ui-feedback-plugin] Screenshot upload failed: ${response.status} ${response.statusText}`\n )\n }\n\n const json = await response.json() as { url: string }\n if (!json?.url) {\n throw new Error('[ui-feedback-plugin] Upload endpoint did not return { url }')\n }\n return json.url\n }\n}\n"],"names":["S3ScreenshotAdapter","endpoint","headers","__publicField","commentId","dataUrl","imageData","response","json"],"mappings":";;;AAgCO,MAAMA,EAAiD;AAAA,EAI5D,YAAYC,GAAkBC,IAAkC,IAAI;AAH5D,IAAAC,EAAA;AACA,IAAAA,EAAA;AAGN,SAAK,WAAWF,GAChB,KAAK,UAAUC;AAAA,EACjB;AAAA,EAEA,MAAM,iBAAiBE,GAAmBC,GAAkC;AAE1E,UAAMC,IAAYD,EAAQ,SAAS,GAAG,IAAIA,EAAQ,MAAM,GAAG,EAAE,CAAC,IAAIA,GAE5DE,IAAW,MAAM,MAAM,KAAK,UAAU;AAAA,MAC1C,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,GAAG,KAAK;AAAA,MAAA;AAAA,MAEV,MAAM,KAAK,UAAU,EAAE,WAAAH,GAAW,WAAAE,GAAW;AAAA,IAAA,CAC9C;AAED,QAAI,CAACC,EAAS;AACZ,YAAM,IAAI;AAAA,QACR,kDAAkDA,EAAS,MAAM,IAAIA,EAAS,UAAU;AAAA,MAAA;AAI5F,UAAMC,IAAO,MAAMD,EAAS,KAAA;AAC5B,QAAI,EAACC,KAAA,QAAAA,EAAM;AACT,YAAM,IAAI,MAAM,6DAA6D;AAE/E,WAAOA,EAAK;AAAA,EACd;AACF;"}