qapture2 0.9.0 → 0.10.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/dist/index.cjs CHANGED
@@ -1,24 +1,24 @@
1
1
  'use strict';
2
2
 
3
- var chunk5EWNGJ2N_cjs = require('./chunk-5EWNGJ2N.cjs');
3
+ var chunkR6WVHVXO_cjs = require('./chunk-R6WVHVXO.cjs');
4
4
 
5
5
 
6
6
 
7
7
  Object.defineProperty(exports, "QaStudio", {
8
8
  enumerable: true,
9
- get: function () { return chunk5EWNGJ2N_cjs.Qapture; }
9
+ get: function () { return chunkR6WVHVXO_cjs.Qapture; }
10
10
  });
11
11
  Object.defineProperty(exports, "Qapture", {
12
12
  enumerable: true,
13
- get: function () { return chunk5EWNGJ2N_cjs.Qapture; }
13
+ get: function () { return chunkR6WVHVXO_cjs.Qapture; }
14
14
  });
15
15
  Object.defineProperty(exports, "deleteQaDatabase", {
16
16
  enumerable: true,
17
- get: function () { return chunk5EWNGJ2N_cjs.deleteQaDatabase; }
17
+ get: function () { return chunkR6WVHVXO_cjs.deleteQaDatabase; }
18
18
  });
19
19
  Object.defineProperty(exports, "initQaStudio", {
20
20
  enumerable: true,
21
- get: function () { return chunk5EWNGJ2N_cjs.initQaStudio; }
21
+ get: function () { return chunkR6WVHVXO_cjs.initQaStudio; }
22
22
  });
23
23
  //# sourceMappingURL=index.cjs.map
24
24
  //# sourceMappingURL=index.cjs.map
package/dist/index.d.cts CHANGED
@@ -88,6 +88,11 @@ type QaPreamble = {
88
88
  type QaConfig = {
89
89
  /** Storage + DB namespace. Defaults to 'qapture'. */
90
90
  namespace?: string;
91
+ /**
92
+ * Where `npx qapture2 shots` is listening, when you started it on a port
93
+ * other than the default 7017. Only needed if 7017 was already taken.
94
+ */
95
+ shotPort?: number;
91
96
  /**
92
97
  * Override any subset of the colour palette.
93
98
  *
@@ -125,6 +130,24 @@ type QaConfig = {
125
130
  * no interruption. It is a label, not an announcement.
126
131
  */
127
132
  beta?: boolean;
133
+ /**
134
+ * Post each note to a collector as it is written, so the client never has to
135
+ * remember to export and send anything.
136
+ *
137
+ * Purely additive: notes are saved locally first and the export is unchanged,
138
+ * so a collector that is down or unreachable costs nothing at all.
139
+ *
140
+ * The token here is WRITE-ONLY and ships to the browser, which is fine by
141
+ * design: it can add notes to one project and cannot read anything back.
142
+ * Never put the collector's admin token in a page.
143
+ */
144
+ collector?: {
145
+ url: string;
146
+ token: string;
147
+ project: string;
148
+ campaign?: string;
149
+ tester?: string;
150
+ };
128
151
  /**
129
152
  * Whether the panel is visible.
130
153
  * - true / false: always show / always hide
@@ -157,6 +180,7 @@ type QaConfig = {
157
180
  };
158
181
  type ResolvedConfig = {
159
182
  namespace: string;
183
+ shotPort: number;
160
184
  brand: {
161
185
  label: string;
162
186
  };
@@ -169,6 +193,13 @@ type ResolvedConfig = {
169
193
  preamble: QaPreamble | null;
170
194
  rtl: boolean;
171
195
  beta: boolean;
196
+ collector: {
197
+ url: string;
198
+ token: string;
199
+ project: string;
200
+ campaign?: string;
201
+ tester?: string;
202
+ } | null;
172
203
  /**
173
204
  * Visibility sentinel.
174
205
  * - true: always show
package/dist/index.d.ts CHANGED
@@ -88,6 +88,11 @@ type QaPreamble = {
88
88
  type QaConfig = {
89
89
  /** Storage + DB namespace. Defaults to 'qapture'. */
90
90
  namespace?: string;
91
+ /**
92
+ * Where `npx qapture2 shots` is listening, when you started it on a port
93
+ * other than the default 7017. Only needed if 7017 was already taken.
94
+ */
95
+ shotPort?: number;
91
96
  /**
92
97
  * Override any subset of the colour palette.
93
98
  *
@@ -125,6 +130,24 @@ type QaConfig = {
125
130
  * no interruption. It is a label, not an announcement.
126
131
  */
127
132
  beta?: boolean;
133
+ /**
134
+ * Post each note to a collector as it is written, so the client never has to
135
+ * remember to export and send anything.
136
+ *
137
+ * Purely additive: notes are saved locally first and the export is unchanged,
138
+ * so a collector that is down or unreachable costs nothing at all.
139
+ *
140
+ * The token here is WRITE-ONLY and ships to the browser, which is fine by
141
+ * design: it can add notes to one project and cannot read anything back.
142
+ * Never put the collector's admin token in a page.
143
+ */
144
+ collector?: {
145
+ url: string;
146
+ token: string;
147
+ project: string;
148
+ campaign?: string;
149
+ tester?: string;
150
+ };
128
151
  /**
129
152
  * Whether the panel is visible.
130
153
  * - true / false: always show / always hide
@@ -157,6 +180,7 @@ type QaConfig = {
157
180
  };
158
181
  type ResolvedConfig = {
159
182
  namespace: string;
183
+ shotPort: number;
160
184
  brand: {
161
185
  label: string;
162
186
  };
@@ -169,6 +193,13 @@ type ResolvedConfig = {
169
193
  preamble: QaPreamble | null;
170
194
  rtl: boolean;
171
195
  beta: boolean;
196
+ collector: {
197
+ url: string;
198
+ token: string;
199
+ project: string;
200
+ campaign?: string;
201
+ tester?: string;
202
+ } | null;
172
203
  /**
173
204
  * Visibility sentinel.
174
205
  * - true: always show
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export { Qapture as QaStudio, Qapture, deleteQaDatabase, initQaStudio } from './chunk-B22X5Y6U.js';
1
+ export { Qapture as QaStudio, Qapture, deleteQaDatabase, initQaStudio } from './chunk-5W5FS7JY.js';
2
2
  //# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
package/dist/next.cjs CHANGED
@@ -1,21 +1,21 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunk5EWNGJ2N_cjs = require('./chunk-5EWNGJ2N.cjs');
4
+ var chunkR6WVHVXO_cjs = require('./chunk-R6WVHVXO.cjs');
5
5
 
6
6
 
7
7
 
8
8
  Object.defineProperty(exports, "QaStudio", {
9
9
  enumerable: true,
10
- get: function () { return chunk5EWNGJ2N_cjs.Qapture; }
10
+ get: function () { return chunkR6WVHVXO_cjs.Qapture; }
11
11
  });
12
12
  Object.defineProperty(exports, "Qapture", {
13
13
  enumerable: true,
14
- get: function () { return chunk5EWNGJ2N_cjs.Qapture; }
14
+ get: function () { return chunkR6WVHVXO_cjs.Qapture; }
15
15
  });
16
16
  Object.defineProperty(exports, "initQaStudio", {
17
17
  enumerable: true,
18
- get: function () { return chunk5EWNGJ2N_cjs.initQaStudio; }
18
+ get: function () { return chunkR6WVHVXO_cjs.initQaStudio; }
19
19
  });
20
20
  //# sourceMappingURL=next.cjs.map
21
21
  //# sourceMappingURL=next.cjs.map
package/dist/next.js CHANGED
@@ -1,4 +1,4 @@
1
1
  "use client";
2
- export { Qapture as QaStudio, Qapture, initQaStudio } from './chunk-B22X5Y6U.js';
2
+ export { Qapture as QaStudio, Qapture, initQaStudio } from './chunk-5W5FS7JY.js';
3
3
  //# sourceMappingURL=next.js.map
4
4
  //# sourceMappingURL=next.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunk5EWNGJ2N_cjs = require('./chunk-5EWNGJ2N.cjs');
3
+ var chunkR6WVHVXO_cjs = require('./chunk-R6WVHVXO.cjs');
4
4
 
5
5
  // src/standalone.ts
6
6
  if (typeof window !== "undefined" && typeof customElements !== "undefined" && !customElements.get("qapture-widget")) {
@@ -38,7 +38,7 @@ if (typeof window !== "undefined" && typeof customElements !== "undefined" && !c
38
38
 
39
39
  Object.defineProperty(exports, "initQaStudio", {
40
40
  enumerable: true,
41
- get: function () { return chunk5EWNGJ2N_cjs.initQaStudio; }
41
+ get: function () { return chunkR6WVHVXO_cjs.initQaStudio; }
42
42
  });
43
43
  //# sourceMappingURL=standalone.cjs.map
44
44
  //# sourceMappingURL=standalone.cjs.map
@@ -1,4 +1,4 @@
1
- export { initQaStudio } from './chunk-B22X5Y6U.js';
1
+ export { initQaStudio } from './chunk-5W5FS7JY.js';
2
2
 
3
3
  // src/standalone.ts
4
4
  if (typeof window !== "undefined" && typeof customElements !== "undefined" && !customElements.get("qapture-widget")) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qapture2",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "description": "Drop-in, AI-aware in-browser QA capture widget. A tester annotates the live app (element/region + auto-screenshot + note), tracks a graded testing journey, and exports a ZIP your own coding agent reads. Ships zero AI.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -95,10 +95,11 @@
95
95
  "loop-features-test": "node scripts/loop-features-test.mjs",
96
96
  "walk-test": "node scripts/walk-test.mjs",
97
97
  "modern-css-test": "node scripts/modern-css-test.mjs",
98
- "verify": "npm run typecheck && npm run typecheck:bin && npm run build && npm run smoke && npm run export-smoke && npm run cli-smoke && npm run cli-detectors-smoke && npm run selector-smoke && npm run capture-timeout-smoke && npm run fs-sync-smoke && npm run frame-calibration-smoke && npm run standalone-smoke",
98
+ "verify": "npm run typecheck && npm run typecheck:bin && npm run build && npm run smoke && npm run export-smoke && npm run cli-smoke && npm run cli-detectors-smoke && npm run selector-smoke && npm run capture-timeout-smoke && npm run fs-sync-smoke && npm run frame-calibration-smoke && npm run standalone-smoke && npm run shot-server-smoke",
99
99
  "play": "npm --prefix playground run dev",
100
100
  "walk-navigation-test": "node scripts/walk-navigation-test.mjs",
101
- "freeze-capture-test": "node scripts/freeze-capture-test.mjs"
101
+ "freeze-capture-test": "node scripts/freeze-capture-test.mjs",
102
+ "shot-server-smoke": "esbuild src/bin/shotServer.ts --bundle --format=esm --platform=node --outfile=dist/_shot-test.mjs --log-level=error && node scripts/shot-server-smoke.mjs"
102
103
  },
103
104
  "engines": {
104
105
  "node": ">=18"