@sun-asterisk/sungen 3.2.22-beta.1 → 3.2.22

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 (101) hide show
  1. package/dist/generators/test-generator/adapters/appium/templates/imports.hbs +9 -0
  2. package/dist/generators/test-generator/adapters/appium/templates/scenario.hbs +23 -1
  3. package/dist/generators/test-generator/adapters/appium/templates/steps/actions/capture-row-column.hbs +2 -0
  4. package/dist/generators/test-generator/adapters/appium/templates/steps/actions/capture-variable.hbs +10 -0
  5. package/dist/generators/test-generator/adapters/appium/templates/steps/actions/click-with-alert-action.hbs +7 -0
  6. package/dist/generators/test-generator/adapters/appium/templates/steps/actions/drag-action.hbs +14 -2
  7. package/dist/generators/test-generator/adapters/appium/templates/steps/actions/hover-element-with-text.hbs +3 -0
  8. package/dist/generators/test-generator/adapters/appium/templates/steps/actions/table-action-in-row-nth.hbs +2 -0
  9. package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/all-contain-assertion.hbs +17 -0
  10. package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/all-contain-element.hbs +13 -0
  11. package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/disabled-with-filter-assertion.hbs +26 -0
  12. package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/disabled-with-role-variable-assertion.hbs +24 -0
  13. package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/disabled-with-variable-assertion.hbs +9 -0
  14. package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/hidden-dialog-heading-assertion.hbs +10 -0
  15. package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/hidden-with-filter-assertion.hbs +14 -0
  16. package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/hidden-with-role-variable-assertion.hbs +21 -0
  17. package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/hidden-with-variable-assertion.hbs +10 -0
  18. package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/row-scoped-column-assertion.hbs +2 -0
  19. package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/state-with-filter-assertion.hbs +23 -0
  20. package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/storage-key-assertion.hbs +2 -0
  21. package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/tab-order-assertion.hbs +3 -0
  22. package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/visible-dialog-heading-assertion.hbs +10 -0
  23. package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/visible-filtered-assertion.hbs +17 -0
  24. package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/visible-with-role-variable-assertion.hbs +13 -0
  25. package/dist/generators/test-generator/adapters/appium/templates/steps/navigation/wait-table-refresh.hbs +13 -0
  26. package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/drag-action.hbs +1 -1
  27. package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/frame-enter-action.hbs +1 -1
  28. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/all-contain-element.hbs +5 -5
  29. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/row-scoped-column-assertion.hbs +1 -0
  30. package/dist/generators/test-generator/code-generator.d.ts.map +1 -1
  31. package/dist/generators/test-generator/code-generator.js +29 -8
  32. package/dist/generators/test-generator/code-generator.js.map +1 -1
  33. package/dist/generators/test-generator/diagnostics.d.ts +20 -1
  34. package/dist/generators/test-generator/diagnostics.d.ts.map +1 -1
  35. package/dist/generators/test-generator/diagnostics.js +19 -0
  36. package/dist/generators/test-generator/diagnostics.js.map +1 -1
  37. package/dist/generators/test-generator/patterns/index.d.ts +45 -0
  38. package/dist/generators/test-generator/patterns/index.d.ts.map +1 -1
  39. package/dist/generators/test-generator/patterns/index.js +150 -19
  40. package/dist/generators/test-generator/patterns/index.js.map +1 -1
  41. package/dist/generators/test-generator/patterns/types.d.ts +36 -0
  42. package/dist/generators/test-generator/patterns/types.d.ts.map +1 -1
  43. package/dist/generators/test-generator/step-mapper.d.ts +33 -0
  44. package/dist/generators/test-generator/step-mapper.d.ts.map +1 -1
  45. package/dist/generators/test-generator/step-mapper.js +78 -24
  46. package/dist/generators/test-generator/step-mapper.js.map +1 -1
  47. package/dist/orchestrator/templates/ai-src/skills/sungen-api-design/SKILL.md +2 -2
  48. package/dist/orchestrator/templates/ai-src/skills/sungen-error-mapping/SKILL.md +4 -0
  49. package/dist/orchestrator/templates/ai-src/skills/sungen-gherkin-syntax/SKILL.md +61 -12
  50. package/dist/orchestrator/templates/ai-src/skills/sungen-mobile-gestures/SKILL.md +22 -8
  51. package/dist/orchestrator/templates/ai-src/skills/sungen-tc-generation/SKILL.md +5 -1
  52. package/dist/orchestrator/templates/specs-api.d.ts.map +1 -1
  53. package/dist/orchestrator/templates/specs-api.js +104 -29
  54. package/dist/orchestrator/templates/specs-api.js.map +1 -1
  55. package/dist/orchestrator/templates/specs-api.ts +104 -26
  56. package/dist/orchestrator/templates/specs-db.d.ts.map +1 -1
  57. package/dist/orchestrator/templates/specs-db.js +18 -5
  58. package/dist/orchestrator/templates/specs-db.js.map +1 -1
  59. package/dist/orchestrator/templates/specs-db.ts +19 -5
  60. package/package.json +3 -3
  61. package/src/generators/test-generator/adapters/appium/templates/imports.hbs +9 -0
  62. package/src/generators/test-generator/adapters/appium/templates/scenario.hbs +23 -1
  63. package/src/generators/test-generator/adapters/appium/templates/steps/actions/capture-row-column.hbs +2 -0
  64. package/src/generators/test-generator/adapters/appium/templates/steps/actions/capture-variable.hbs +10 -0
  65. package/src/generators/test-generator/adapters/appium/templates/steps/actions/click-with-alert-action.hbs +7 -0
  66. package/src/generators/test-generator/adapters/appium/templates/steps/actions/drag-action.hbs +14 -2
  67. package/src/generators/test-generator/adapters/appium/templates/steps/actions/hover-element-with-text.hbs +3 -0
  68. package/src/generators/test-generator/adapters/appium/templates/steps/actions/table-action-in-row-nth.hbs +2 -0
  69. package/src/generators/test-generator/adapters/appium/templates/steps/assertions/all-contain-assertion.hbs +17 -0
  70. package/src/generators/test-generator/adapters/appium/templates/steps/assertions/all-contain-element.hbs +13 -0
  71. package/src/generators/test-generator/adapters/appium/templates/steps/assertions/disabled-with-filter-assertion.hbs +26 -0
  72. package/src/generators/test-generator/adapters/appium/templates/steps/assertions/disabled-with-role-variable-assertion.hbs +24 -0
  73. package/src/generators/test-generator/adapters/appium/templates/steps/assertions/disabled-with-variable-assertion.hbs +9 -0
  74. package/src/generators/test-generator/adapters/appium/templates/steps/assertions/hidden-dialog-heading-assertion.hbs +10 -0
  75. package/src/generators/test-generator/adapters/appium/templates/steps/assertions/hidden-with-filter-assertion.hbs +14 -0
  76. package/src/generators/test-generator/adapters/appium/templates/steps/assertions/hidden-with-role-variable-assertion.hbs +21 -0
  77. package/src/generators/test-generator/adapters/appium/templates/steps/assertions/hidden-with-variable-assertion.hbs +10 -0
  78. package/src/generators/test-generator/adapters/appium/templates/steps/assertions/row-scoped-column-assertion.hbs +2 -0
  79. package/src/generators/test-generator/adapters/appium/templates/steps/assertions/state-with-filter-assertion.hbs +23 -0
  80. package/src/generators/test-generator/adapters/appium/templates/steps/assertions/storage-key-assertion.hbs +2 -0
  81. package/src/generators/test-generator/adapters/appium/templates/steps/assertions/tab-order-assertion.hbs +3 -0
  82. package/src/generators/test-generator/adapters/appium/templates/steps/assertions/visible-dialog-heading-assertion.hbs +10 -0
  83. package/src/generators/test-generator/adapters/appium/templates/steps/assertions/visible-filtered-assertion.hbs +17 -0
  84. package/src/generators/test-generator/adapters/appium/templates/steps/assertions/visible-with-role-variable-assertion.hbs +13 -0
  85. package/src/generators/test-generator/adapters/appium/templates/steps/navigation/wait-table-refresh.hbs +13 -0
  86. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/drag-action.hbs +1 -1
  87. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/frame-enter-action.hbs +1 -1
  88. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/all-contain-element.hbs +5 -5
  89. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/row-scoped-column-assertion.hbs +1 -0
  90. package/src/generators/test-generator/code-generator.ts +34 -9
  91. package/src/generators/test-generator/diagnostics.ts +20 -1
  92. package/src/generators/test-generator/patterns/index.ts +165 -24
  93. package/src/generators/test-generator/patterns/types.ts +35 -0
  94. package/src/generators/test-generator/step-mapper.ts +84 -23
  95. package/src/orchestrator/templates/ai-src/skills/sungen-api-design/SKILL.md +2 -2
  96. package/src/orchestrator/templates/ai-src/skills/sungen-error-mapping/SKILL.md +4 -0
  97. package/src/orchestrator/templates/ai-src/skills/sungen-gherkin-syntax/SKILL.md +61 -12
  98. package/src/orchestrator/templates/ai-src/skills/sungen-mobile-gestures/SKILL.md +22 -8
  99. package/src/orchestrator/templates/ai-src/skills/sungen-tc-generation/SKILL.md +5 -1
  100. package/src/orchestrator/templates/specs-api.ts +104 -26
  101. package/src/orchestrator/templates/specs-db.ts +19 -5
@@ -47,12 +47,16 @@ exports.joinApiUrl = joinApiUrl;
47
47
  * `{{name.body.<path>}}`. Base URL + auth come from a `kind: api` datasource in datasources.yaml,
48
48
  * with `${VAR}` resolved from .env.qa / process.env — never inline.
49
49
  *
50
+ * Runs on Node's global `fetch` (Node 18+) — no `@playwright/test` import, so this driver loads in
51
+ * mobile (Appium/Mocha) specs, which carry no Playwright dependency. Previously built on
52
+ * `APIRequestContext`; ported method-by-method (see `ApiClient.call`) to keep behaviour — including
53
+ * the `@hybrid` storageState cookie reuse — equivalent on web.
54
+ *
50
55
  * Safety: a datasource flagged `env: production` is refused unless SUNGEN_ALLOW_PROD=1.
51
56
  * DO NOT EDIT — regenerated by `sungen generate`.
52
57
  */
53
58
  const fs = __importStar(require("fs"));
54
59
  const path = __importStar(require("path"));
55
- const test_1 = require("@playwright/test");
56
60
  function loadEnvQa() {
57
61
  // Precedence (first set wins, real env highest): shell/CI env > .env.qa.<SUNGEN_ENV>
58
62
  // > .env.qa — the env-specific file OVERLAYS the base, mirroring test-data overlays.
@@ -86,13 +90,54 @@ function substituteRaw(text, params) {
86
90
  }
87
91
  /** Delete any case-insensitive variant of a header (HTTP header names are case-insensitive, but a
88
92
  * plain object keys on exact case — so a datasource `Content-Type` and our `content-type` would
89
- * both be sent). Call before setting, or to let Playwright own the header (multipart boundary). */
93
+ * both be sent). Call before setting, or to let fetch own the header (multipart boundary). */
90
94
  function deleteHeader(headers, name) {
91
95
  const lower = name.toLowerCase();
92
96
  for (const k of Object.keys(headers))
93
97
  if (k.toLowerCase() === lower)
94
98
  delete headers[k];
95
99
  }
100
+ /** True when `headers` already carries a case-insensitive match for `name` — used to respect an
101
+ * explicit catalog header instead of overriding it with our own content-type default. */
102
+ function hasHeader(headers, name) {
103
+ const lower = name.toLowerCase();
104
+ return Object.keys(headers).some((k) => k.toLowerCase() === lower);
105
+ }
106
+ /**
107
+ * Build a `Cookie:` header value from a Playwright storageState JSON file (written by
108
+ * `sungen makeauth` / `context.storageState()` — `{ cookies: [...], origins: [...] }`), scoped to
109
+ * the cookies that apply to `url` the way a browser would send them (domain + path + not expired).
110
+ * Powers `@hybrid`: the API call reuses the UI session's cookies without a browser/Playwright
111
+ * context. Returns undefined when the file has no cookie that matches `url`.
112
+ */
113
+ function loadStorageStateCookieHeader(storageStatePath, url) {
114
+ const abs = path.isAbsolute(storageStatePath) ? storageStatePath : path.join(process.cwd(), storageStatePath);
115
+ if (!fs.existsSync(abs)) {
116
+ throw new Error(`API Driver: storageState "${storageStatePath}" not found — run \`sungen makeauth\` first.`);
117
+ }
118
+ const state = JSON.parse(fs.readFileSync(abs, 'utf-8'));
119
+ const cookies = state.cookies || [];
120
+ if (!cookies.length)
121
+ return undefined;
122
+ const target = new URL(url);
123
+ const nowSec = Date.now() / 1000;
124
+ const targetIsSecure = target.protocol === 'https:';
125
+ const matches = cookies.filter((c) => {
126
+ const domain = (c.domain || '').replace(/^\./, '');
127
+ const domainOk = !domain || target.hostname === domain || target.hostname.endsWith(`.${domain}`);
128
+ const pathOk = target.pathname.startsWith(c.path || '/');
129
+ const notExpired = c.expires === undefined || c.expires < 0 || c.expires > nowSec;
130
+ // A Secure cookie must never leave over plaintext. Playwright's own cookie jar enforces this,
131
+ // and this function exists to be EQUIVALENT to it — omitting the check would make a mixed
132
+ // @hybrid setup (https browser session, http API datasource) leak the session cookie in clear,
133
+ // a downgrade introduced by us rather than by anything the author wrote.
134
+ const secureOk = !c.secure || targetIsSecure;
135
+ return domainOk && pathOk && notExpired && secureOk;
136
+ });
137
+ if (!matches.length)
138
+ return undefined;
139
+ return matches.map((c) => `${c.name}=${c.value}`).join('; ');
140
+ }
96
141
  const MIME = {
97
142
  png: 'image/png', jpg: 'image/jpeg', jpeg: 'image/jpeg', gif: 'image/gif', webp: 'image/webp',
98
143
  svg: 'image/svg+xml', pdf: 'application/pdf', csv: 'text/csv', txt: 'text/plain',
@@ -194,11 +239,13 @@ class ApiClient {
194
239
  if (req.body !== undefined && req.body !== null) {
195
240
  body = JSON.parse(JSON.stringify(req.body).replace(/":([A-Za-z_][A-Za-z0-9_]*)"/g, (_m, p) => JSON.stringify(params[p] ?? null)));
196
241
  }
197
- // Map the wire format to the right Playwright option (#345): json → data (application/json,
198
- // default), form → form (application/x-www-form-urlencoded), multipart → multipart (form-data).
199
- // A `files` block is a real upload: read each fixture into a { name, mimeType, buffer } part and
200
- // send multipart, with any `body` values riding along as text fields.
201
- const bodyOpt = {};
242
+ // Map the wire format to a fetch request body (#345): json → JSON string (application/json,
243
+ // default), form → URL-encoded string, multipart → FormData. A `files` block is a real upload:
244
+ // read each fixture into a Blob part and send multipart, with any `body` values riding along
245
+ // as text fields. (Typed as `any`, not fetch's DOM-only `BodyInit`: this package's tsconfig has
246
+ // no "dom" lib, so that alias isn't in scope even though the global runtime values are.)
247
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- see comment above
248
+ let fetchBody;
202
249
  if (req.bodyFile) {
203
250
  // Raw-binary body: the whole request body is the fixture's bytes. Content-Type comes from the
204
251
  // spec's mimeType (default application/octet-stream) — this is what octet-stream upload
@@ -207,48 +254,76 @@ class ApiClient {
207
254
  const fpath = substituteRaw(String(spec.path), params);
208
255
  if (fpath) {
209
256
  const resolved = resolveFixture(fpath, label);
210
- bodyOpt.data = fs.readFileSync(resolved);
257
+ fetchBody = fs.readFileSync(resolved);
211
258
  // Own the Content-Type: drop any datasource default (case-insensitive) so we don't send both.
212
259
  deleteHeader(headers, 'content-type');
213
260
  headers['content-type'] = spec.mimeType ?? 'application/octet-stream';
214
261
  }
215
262
  }
216
263
  else if (req.files && Object.keys(req.files).length) {
217
- // Playwright generates the multipart/form-data Content-Type (with boundary); drop any datasource
218
- // default Content-Type so it doesn't conflict with / duplicate the generated one.
264
+ // fetch derives the multipart/form-data Content-Type (with boundary) from the FormData body;
265
+ // drop any datasource default Content-Type so it doesn't conflict with / duplicate it.
219
266
  deleteHeader(headers, 'content-type');
220
- bodyOpt.multipart = buildMultipart(req.files, body, params, label);
267
+ fetchBody = buildMultipart(req.files, body, params, label);
221
268
  }
222
269
  else if (body !== undefined) {
223
270
  const enc = req.encoding ?? 'json';
224
- if (enc === 'form')
225
- bodyOpt.form = body;
226
- else if (enc === 'multipart')
227
- bodyOpt.multipart = body;
228
- else
229
- bodyOpt.data = body;
271
+ if (enc === 'form') {
272
+ if (!hasHeader(headers, 'content-type'))
273
+ headers['content-type'] = 'application/x-www-form-urlencoded';
274
+ fetchBody = new URLSearchParams(body).toString();
275
+ }
276
+ else if (enc === 'multipart') {
277
+ deleteHeader(headers, 'content-type');
278
+ fetchBody = buildMultipart({}, body, params, label); // no file fields — text fields only
279
+ }
280
+ else {
281
+ if (!hasHeader(headers, 'content-type'))
282
+ headers['content-type'] = 'application/json';
283
+ fetchBody = JSON.stringify(body);
284
+ }
285
+ }
286
+ // GET/HEAD requests may not carry a body under fetch (undici throws). Refuse LOUDLY rather than
287
+ // send a request quietly shorter than the catalog says it is — a dropped body reads as a server
288
+ // bug, not an authoring one. `validateApiEntry` catches this at generate time; this is the
289
+ // backstop for a catalog that reached the runtime some other way.
290
+ if (fetchBody !== undefined && /^(GET|HEAD)$/i.test(req.method)) {
291
+ throw new Error(`API Driver: ${label} — a ${req.method.toUpperCase()} request cannot carry a body. Remove body:/files:/bodyFile: from the catalog entry, or change its method to POST/PUT/PATCH.`);
292
+ }
293
+ // Full URL (not a baseURL-relative path) so a base path component like /api/v3 is preserved.
294
+ const fullUrl = joinApiUrl(base, urlPath);
295
+ // @hybrid: `storageState` is the @auth role's saved session (Playwright's `context.storageState()`
296
+ // JSON) — reuse its cookies (scoped to `fullUrl`'s domain/path) so the request shares the
297
+ // browser's authenticated session without a browser/Playwright context.
298
+ if (opts.storageState) {
299
+ const cookieHeader = loadStorageStateCookieHeader(opts.storageState, fullUrl);
300
+ if (cookieHeader) {
301
+ const existingKey = Object.keys(headers).find((k) => k.toLowerCase() === 'cookie');
302
+ headers[existingKey || 'cookie'] = existingKey ? `${headers[existingKey]}; ${cookieHeader}` : cookieHeader;
303
+ }
230
304
  }
231
- // Playwright APIRequestContext: same runner/report/retries as UI tests. @hybrid passes
232
- // `storageState` (the @auth role's saved session) so the request shares the browser's
233
- // authenticated cookies. Disposed per call so no request context lingers and hangs the process.
234
- const ctx = await test_1.request.newContext({
235
- extraHTTPHeaders: headers,
236
- timeout: req.timeout ?? conf.timeout_ms ?? 15000, // per-endpoint override → datasource → 15s
237
- ...(opts.storageState ? { storageState: opts.storageState } : {}),
238
- });
305
+ // Timeout: fetch has no built-in per-request timeout, so abort it manually — mirrors the prior
306
+ // per-endpoint-override datasource 15s default precedence.
307
+ const timeoutMs = req.timeout ?? conf.timeout_ms ?? 15000;
308
+ const controller = new AbortController();
309
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
239
310
  try {
240
- // Full URL (not a baseURL-relative path) so a base path component like /api/v3 is preserved.
241
- const res = await ctx.fetch(joinApiUrl(base, urlPath), { method: req.method, ...bodyOpt });
311
+ const res = await fetch(fullUrl, {
312
+ method: req.method,
313
+ headers,
314
+ ...(fetchBody !== undefined ? { body: fetchBody } : {}),
315
+ signal: controller.signal,
316
+ });
242
317
  const text = await res.text();
243
318
  let parsed = text;
244
319
  try {
245
320
  parsed = text ? JSON.parse(text) : null;
246
321
  }
247
322
  catch { /* non-JSON → keep text */ }
248
- return { status: res.status(), ok: res.ok(), body: parsed, headers: res.headers() };
323
+ return { status: res.status, ok: res.ok, body: parsed, headers: Object.fromEntries(res.headers.entries()) };
249
324
  }
250
325
  finally {
251
- await ctx.dispose();
326
+ clearTimeout(timer);
252
327
  }
253
328
  }
254
329
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"specs-api.js","sourceRoot":"","sources":["../../../src/orchestrator/templates/specs-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"specs-api.js","sourceRoot":"","sources":["../../../src/orchestrator/templates/specs-api.ts"],"names":[],"mappings":"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"}
@@ -7,12 +7,16 @@
7
7
  * `{{name.body.<path>}}`. Base URL + auth come from a `kind: api` datasource in datasources.yaml,
8
8
  * with `${VAR}` resolved from .env.qa / process.env — never inline.
9
9
  *
10
+ * Runs on Node's global `fetch` (Node 18+) — no `@playwright/test` import, so this driver loads in
11
+ * mobile (Appium/Mocha) specs, which carry no Playwright dependency. Previously built on
12
+ * `APIRequestContext`; ported method-by-method (see `ApiClient.call`) to keep behaviour — including
13
+ * the `@hybrid` storageState cookie reuse — equivalent on web.
14
+ *
10
15
  * Safety: a datasource flagged `env: production` is refused unless SUNGEN_ALLOW_PROD=1.
11
16
  * DO NOT EDIT — regenerated by `sungen generate`.
12
17
  */
13
18
  import * as fs from 'fs';
14
19
  import * as path from 'path';
15
- import { request, type APIRequestContext } from '@playwright/test';
16
20
 
17
21
  interface ApiDataSource {
18
22
  kind?: string;
@@ -56,11 +60,53 @@ function substituteRaw(text: string, params: Record<string, any>): string {
56
60
  }
57
61
  /** Delete any case-insensitive variant of a header (HTTP header names are case-insensitive, but a
58
62
  * plain object keys on exact case — so a datasource `Content-Type` and our `content-type` would
59
- * both be sent). Call before setting, or to let Playwright own the header (multipart boundary). */
63
+ * both be sent). Call before setting, or to let fetch own the header (multipart boundary). */
60
64
  function deleteHeader(headers: Record<string, string>, name: string): void {
61
65
  const lower = name.toLowerCase();
62
66
  for (const k of Object.keys(headers)) if (k.toLowerCase() === lower) delete headers[k];
63
67
  }
68
+ /** True when `headers` already carries a case-insensitive match for `name` — used to respect an
69
+ * explicit catalog header instead of overriding it with our own content-type default. */
70
+ function hasHeader(headers: Record<string, string>, name: string): boolean {
71
+ const lower = name.toLowerCase();
72
+ return Object.keys(headers).some((k) => k.toLowerCase() === lower);
73
+ }
74
+
75
+ /**
76
+ * Build a `Cookie:` header value from a Playwright storageState JSON file (written by
77
+ * `sungen makeauth` / `context.storageState()` — `{ cookies: [...], origins: [...] }`), scoped to
78
+ * the cookies that apply to `url` the way a browser would send them (domain + path + not expired).
79
+ * Powers `@hybrid`: the API call reuses the UI session's cookies without a browser/Playwright
80
+ * context. Returns undefined when the file has no cookie that matches `url`.
81
+ */
82
+ function loadStorageStateCookieHeader(storageStatePath: string, url: string): string | undefined {
83
+ const abs = path.isAbsolute(storageStatePath) ? storageStatePath : path.join(process.cwd(), storageStatePath);
84
+ if (!fs.existsSync(abs)) {
85
+ throw new Error(`API Driver: storageState "${storageStatePath}" not found — run \`sungen makeauth\` first.`);
86
+ }
87
+ const state = JSON.parse(fs.readFileSync(abs, 'utf-8')) as {
88
+ cookies?: Array<{ name: string; value: string; domain?: string; path?: string; expires?: number; secure?: boolean }>;
89
+ };
90
+ const cookies = state.cookies || [];
91
+ if (!cookies.length) return undefined;
92
+ const target = new URL(url);
93
+ const nowSec = Date.now() / 1000;
94
+ const targetIsSecure = target.protocol === 'https:';
95
+ const matches = cookies.filter((c) => {
96
+ const domain = (c.domain || '').replace(/^\./, '');
97
+ const domainOk = !domain || target.hostname === domain || target.hostname.endsWith(`.${domain}`);
98
+ const pathOk = target.pathname.startsWith(c.path || '/');
99
+ const notExpired = c.expires === undefined || c.expires < 0 || c.expires > nowSec;
100
+ // A Secure cookie must never leave over plaintext. Playwright's own cookie jar enforces this,
101
+ // and this function exists to be EQUIVALENT to it — omitting the check would make a mixed
102
+ // @hybrid setup (https browser session, http API datasource) leak the session cookie in clear,
103
+ // a downgrade introduced by us rather than by anything the author wrote.
104
+ const secureOk = !c.secure || targetIsSecure;
105
+ return domainOk && pathOk && notExpired && secureOk;
106
+ });
107
+ if (!matches.length) return undefined;
108
+ return matches.map((c) => `${c.name}=${c.value}`).join('; ');
109
+ }
64
110
 
65
111
  /** A multipart file field embedded by the compiler (string = shorthand for { path }). */
66
112
  type FileSpec = string | { path: string; mimeType?: string; filename?: string; name?: string };
@@ -173,11 +219,13 @@ class ApiClient {
173
219
  if (req.body !== undefined && req.body !== null) {
174
220
  body = JSON.parse(JSON.stringify(req.body).replace(/":([A-Za-z_][A-Za-z0-9_]*)"/g, (_m, p) => JSON.stringify(params[p] ?? null)));
175
221
  }
176
- // Map the wire format to the right Playwright option (#345): json → data (application/json,
177
- // default), form → form (application/x-www-form-urlencoded), multipart → multipart (form-data).
178
- // A `files` block is a real upload: read each fixture into a { name, mimeType, buffer } part and
179
- // send multipart, with any `body` values riding along as text fields.
180
- const bodyOpt: Record<string, unknown> = {};
222
+ // Map the wire format to a fetch request body (#345): json → JSON string (application/json,
223
+ // default), form → URL-encoded string, multipart → FormData. A `files` block is a real upload:
224
+ // read each fixture into a Blob part and send multipart, with any `body` values riding along
225
+ // as text fields. (Typed as `any`, not fetch's DOM-only `BodyInit`: this package's tsconfig has
226
+ // no "dom" lib, so that alias isn't in scope even though the global runtime values are.)
227
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- see comment above
228
+ let fetchBody: any;
181
229
  if (req.bodyFile) {
182
230
  // Raw-binary body: the whole request body is the fixture's bytes. Content-Type comes from the
183
231
  // spec's mimeType (default application/octet-stream) — this is what octet-stream upload
@@ -186,40 +234,70 @@ class ApiClient {
186
234
  const fpath = substituteRaw(String(spec.path), params);
187
235
  if (fpath) {
188
236
  const resolved = resolveFixture(fpath, label);
189
- bodyOpt.data = fs.readFileSync(resolved);
237
+ fetchBody = fs.readFileSync(resolved);
190
238
  // Own the Content-Type: drop any datasource default (case-insensitive) so we don't send both.
191
239
  deleteHeader(headers, 'content-type');
192
240
  headers['content-type'] = spec.mimeType ?? 'application/octet-stream';
193
241
  }
194
242
  } else if (req.files && Object.keys(req.files).length) {
195
- // Playwright generates the multipart/form-data Content-Type (with boundary); drop any datasource
196
- // default Content-Type so it doesn't conflict with / duplicate the generated one.
243
+ // fetch derives the multipart/form-data Content-Type (with boundary) from the FormData body;
244
+ // drop any datasource default Content-Type so it doesn't conflict with / duplicate it.
197
245
  deleteHeader(headers, 'content-type');
198
- bodyOpt.multipart = buildMultipart(req.files, body, params, label);
246
+ fetchBody = buildMultipart(req.files, body, params, label);
199
247
  } else if (body !== undefined) {
200
248
  const enc = req.encoding ?? 'json';
201
- if (enc === 'form') bodyOpt.form = body;
202
- else if (enc === 'multipart') bodyOpt.multipart = body;
203
- else bodyOpt.data = body;
249
+ if (enc === 'form') {
250
+ if (!hasHeader(headers, 'content-type')) headers['content-type'] = 'application/x-www-form-urlencoded';
251
+ fetchBody = new URLSearchParams(body as Record<string, string>).toString();
252
+ } else if (enc === 'multipart') {
253
+ deleteHeader(headers, 'content-type');
254
+ fetchBody = buildMultipart({}, body, params, label); // no file fields — text fields only
255
+ } else {
256
+ if (!hasHeader(headers, 'content-type')) headers['content-type'] = 'application/json';
257
+ fetchBody = JSON.stringify(body);
258
+ }
259
+ }
260
+
261
+ // GET/HEAD requests may not carry a body under fetch (undici throws). Refuse LOUDLY rather than
262
+ // send a request quietly shorter than the catalog says it is — a dropped body reads as a server
263
+ // bug, not an authoring one. `validateApiEntry` catches this at generate time; this is the
264
+ // backstop for a catalog that reached the runtime some other way.
265
+ if (fetchBody !== undefined && /^(GET|HEAD)$/i.test(req.method)) {
266
+ throw new Error(`API Driver: ${label} — a ${req.method.toUpperCase()} request cannot carry a body. Remove body:/files:/bodyFile: from the catalog entry, or change its method to POST/PUT/PATCH.`);
267
+ }
268
+
269
+ // Full URL (not a baseURL-relative path) so a base path component like /api/v3 is preserved.
270
+ const fullUrl = joinApiUrl(base, urlPath);
271
+
272
+ // @hybrid: `storageState` is the @auth role's saved session (Playwright's `context.storageState()`
273
+ // JSON) — reuse its cookies (scoped to `fullUrl`'s domain/path) so the request shares the
274
+ // browser's authenticated session without a browser/Playwright context.
275
+ if (opts.storageState) {
276
+ const cookieHeader = loadStorageStateCookieHeader(opts.storageState, fullUrl);
277
+ if (cookieHeader) {
278
+ const existingKey = Object.keys(headers).find((k) => k.toLowerCase() === 'cookie');
279
+ headers[existingKey || 'cookie'] = existingKey ? `${headers[existingKey]}; ${cookieHeader}` : cookieHeader;
280
+ }
204
281
  }
205
282
 
206
- // Playwright APIRequestContext: same runner/report/retries as UI tests. @hybrid passes
207
- // `storageState` (the @auth role's saved session) so the request shares the browser's
208
- // authenticated cookies. Disposed per call so no request context lingers and hangs the process.
209
- const ctx: APIRequestContext = await request.newContext({
210
- extraHTTPHeaders: headers,
211
- timeout: req.timeout ?? conf.timeout_ms ?? 15000, // per-endpoint override → datasource → 15s
212
- ...(opts.storageState ? { storageState: opts.storageState } : {}),
213
- });
283
+ // Timeout: fetch has no built-in per-request timeout, so abort it manually — mirrors the prior
284
+ // per-endpoint-override datasource 15s default precedence.
285
+ const timeoutMs = req.timeout ?? conf.timeout_ms ?? 15000;
286
+ const controller = new AbortController();
287
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
214
288
  try {
215
- // Full URL (not a baseURL-relative path) so a base path component like /api/v3 is preserved.
216
- const res = await ctx.fetch(joinApiUrl(base, urlPath), { method: req.method, ...bodyOpt });
289
+ const res = await fetch(fullUrl, {
290
+ method: req.method,
291
+ headers,
292
+ ...(fetchBody !== undefined ? { body: fetchBody } : {}),
293
+ signal: controller.signal,
294
+ });
217
295
  const text = await res.text();
218
296
  let parsed: any = text;
219
297
  try { parsed = text ? JSON.parse(text) : null; } catch { /* non-JSON → keep text */ }
220
- return { status: res.status(), ok: res.ok(), body: parsed, headers: res.headers() };
298
+ return { status: res.status, ok: res.ok, body: parsed, headers: Object.fromEntries(res.headers.entries()) };
221
299
  } finally {
222
- await ctx.dispose();
300
+ clearTimeout(timer);
223
301
  }
224
302
  }
225
303
 
@@ -1 +1 @@
1
- {"version":3,"file":"specs-db.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/templates/specs-db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"specs-db.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/templates/specs-db.ts"],"names":[],"mappings":"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"}
@@ -47,9 +47,12 @@ exports.cosmosBindParams = cosmosBindParams;
47
47
  * Engines: PostgreSQL (`pg`), MySQL (`mysql2`), and SQLite (`better-sqlite3`), lazy-loaded on first use.
48
48
  * Config: a `datasources.yaml` at the project root (or qa/), with ${VAR} resolved from env.
49
49
  *
50
+ * Assertions are plain thrown Errors — no `@playwright/test` import — so this helper loads in
51
+ * mobile (Appium/Mocha) specs too, which carry no Playwright dependency (same reason
52
+ * `specs/api.ts` runs on Node's global `fetch`).
53
+ *
50
54
  * DO NOT EDIT — regenerated by `sungen generate`.
51
55
  */
52
- const test_1 = require("@playwright/test");
53
56
  const fs = __importStar(require("fs"));
54
57
  const path = __importStar(require("path"));
55
58
  const IDENT = /^[A-Za-z_][A-Za-z0-9_]*$/;
@@ -663,12 +666,12 @@ class DataSource {
663
666
  async assertRow(table, filter, expected, datasource) {
664
667
  const { engine } = await this.engine(datasource);
665
668
  const rows = await engine.findRows(table, filter, 50);
666
- (0, test_1.expect)(rows.length, `Expected a row in "${table}" where ${desc(filter)} — found ${rows.length}`).toBeGreaterThanOrEqual(1);
669
+ assert(rows.length >= 1, `Expected a row in "${table}" where ${desc(filter)} — found ${rows.length}`);
667
670
  if (expected) {
668
671
  const row = rows[0];
669
672
  for (const [col, val] of Object.entries(expected)) {
670
673
  ident(col);
671
- (0, test_1.expect)(String(row[col]), `Column "${col}" of "${table}" where ${desc(filter)}`).toBe(String(val));
674
+ assert(String(row[col]) === String(val), `Column "${col}" of "${table}" where ${desc(filter)} — expected ${JSON.stringify(String(val))}, found ${JSON.stringify(String(row[col]))}`);
672
675
  }
673
676
  }
674
677
  }
@@ -676,14 +679,14 @@ class DataSource {
676
679
  async assertNoRow(table, filter, datasource) {
677
680
  const { engine } = await this.engine(datasource);
678
681
  const rows = await engine.findRows(table, filter, 50);
679
- (0, test_1.expect)(rows.length, `Expected NO row in "${table}" where ${desc(filter)} — found ${rows.length}`).toBe(0);
682
+ assert(rows.length === 0, `Expected NO row in "${table}" where ${desc(filter)} — found ${rows.length}`);
680
683
  }
681
684
  /** Exactly `count` rows must match `filter`. */
682
685
  async assertCount(table, filter, count, datasource) {
683
686
  const { engine } = await this.engine(datasource);
684
687
  const n = await engine.countRows(table, filter);
685
688
  const cols = Object.keys(filter);
686
- (0, test_1.expect)(n, `Expected ${count} row(s) in "${table}"${cols.length ? ' where ' + desc(filter) : ''} — found ${n}`).toBe(Number(count));
689
+ assert(n === Number(count), `Expected ${count} row(s) in "${table}"${cols.length ? ' where ' + desc(filter) : ''} — found ${n}`);
687
690
  }
688
691
  /**
689
692
  * Run a catalog query (read-only) and return its rows. The result is bound to a `{{name}}`
@@ -706,6 +709,16 @@ class DataSource {
706
709
  return engine.runShape(label, shape, params);
707
710
  }
708
711
  }
712
+ /**
713
+ * Fail a DB assertion. A thrown Error is exactly what BOTH runners report as a test failure
714
+ * (Playwright and Mocha/WDIO), so this replaces Playwright's `expect(...)` without importing it —
715
+ * the coupling that kept `specs/db.ts` out of mobile specs. Messages carry expected AND found,
716
+ * since there is no matcher to print them.
717
+ */
718
+ function assert(cond, message) {
719
+ if (!cond)
720
+ throw new Error(`[sungen] ${message}`);
721
+ }
709
722
  function desc(filter) {
710
723
  return Object.entries(filter).map(([k, v]) => `${k}=${JSON.stringify(v)}`).join(', ');
711
724
  }