@essential-apps/shopify-test-runner 1.0.12 → 1.0.13

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 (96) hide show
  1. package/dist/lib/guestVnc.d.ts +31 -0
  2. package/dist/lib/guestVnc.d.ts.map +1 -0
  3. package/dist/lib/guestVnc.js +111 -0
  4. package/dist/lib/guestVnc.js.map +1 -0
  5. package/dist/probes/runProbe.js +0 -0
  6. package/dist/scripts/addStore.js +0 -0
  7. package/dist/scripts/buildImage.d.ts +3 -0
  8. package/dist/scripts/buildImage.d.ts.map +1 -0
  9. package/dist/scripts/{buildDockerImage.js → buildImage.js} +12 -10
  10. package/dist/scripts/buildImage.js.map +1 -0
  11. package/dist/scripts/captureAuth.js +0 -0
  12. package/dist/scripts/captureContracts.js +0 -0
  13. package/dist/scripts/captureRestContracts.js +0 -0
  14. package/dist/scripts/captureSharedContracts.d.ts +3 -0
  15. package/dist/scripts/captureSharedContracts.d.ts.map +1 -0
  16. package/dist/scripts/captureSharedContracts.js +209 -0
  17. package/dist/scripts/captureSharedContracts.js.map +1 -0
  18. package/dist/scripts/checkOperationCoverage.js +0 -0
  19. package/dist/scripts/cleanupStores.js +0 -0
  20. package/dist/scripts/createStores.js +0 -0
  21. package/dist/scripts/deployAppVersion.js +0 -0
  22. package/dist/scripts/devOnlineBackend.js +0 -0
  23. package/dist/scripts/installApp.js +0 -0
  24. package/dist/scripts/listStores.js +0 -0
  25. package/dist/scripts/runOffline.js +78 -1
  26. package/dist/scripts/runOffline.js.map +1 -1
  27. package/dist/scripts/runOfflineFullTests.js +49 -21
  28. package/dist/scripts/runOfflineFullTests.js.map +1 -1
  29. package/dist/scripts/runTests.js +0 -0
  30. package/dist/scripts/runVm.js +0 -0
  31. package/dist/scripts/runVmAuth.js +0 -0
  32. package/dist/scripts/setupTestDb.js +0 -0
  33. package/dist/scripts/verifyContracts.js +20 -29
  34. package/dist/scripts/verifyContracts.js.map +1 -1
  35. package/dist/scripts/verifyRestContracts.js +17 -30
  36. package/dist/scripts/verifyRestContracts.js.map +1 -1
  37. package/package.json +11 -9
  38. package/src/lib/guestVnc.ts +147 -0
  39. package/src/scripts/{buildDockerImage.ts → buildImage.ts} +11 -9
  40. package/src/scripts/captureSharedContracts.ts +228 -0
  41. package/src/scripts/runOffline.ts +82 -1
  42. package/src/scripts/runOfflineFullTests.ts +56 -21
  43. package/src/scripts/verifyContracts.ts +22 -38
  44. package/src/scripts/verifyRestContracts.ts +23 -42
  45. package/dist/edge/nodeShim.d.ts +0 -2
  46. package/dist/edge/nodeShim.d.ts.map +0 -1
  47. package/dist/edge/nodeShim.js +0 -217
  48. package/dist/edge/nodeShim.js.map +0 -1
  49. package/dist/scripts/_probeSourceUrl.d.ts +0 -3
  50. package/dist/scripts/_probeSourceUrl.d.ts.map +0 -1
  51. package/dist/scripts/_probeSourceUrl.js +0 -119
  52. package/dist/scripts/_probeSourceUrl.js.map +0 -1
  53. package/dist/scripts/buildDockerImage.d.ts +0 -3
  54. package/dist/scripts/buildDockerImage.d.ts.map +0 -1
  55. package/dist/scripts/buildDockerImage.js.map +0 -1
  56. package/dist/scripts/devE2eBackend.d.ts +0 -3
  57. package/dist/scripts/devE2eBackend.d.ts.map +0 -1
  58. package/dist/scripts/devE2eBackend.js +0 -117
  59. package/dist/scripts/devE2eBackend.js.map +0 -1
  60. package/dist/scripts/runDocker.d.ts +0 -3
  61. package/dist/scripts/runDocker.d.ts.map +0 -1
  62. package/dist/scripts/runDocker.js +0 -88
  63. package/dist/scripts/runDocker.js.map +0 -1
  64. package/dist/scripts/runDockerAuth.d.ts +0 -3
  65. package/dist/scripts/runDockerAuth.d.ts.map +0 -1
  66. package/dist/scripts/runDockerAuth.js +0 -108
  67. package/dist/scripts/runDockerAuth.js.map +0 -1
  68. package/dist/scripts/runDockerOffline.d.ts +0 -3
  69. package/dist/scripts/runDockerOffline.d.ts.map +0 -1
  70. package/dist/scripts/runDockerOffline.js +0 -129
  71. package/dist/scripts/runDockerOffline.js.map +0 -1
  72. package/dist/scripts/runDockerOfflineExplore.d.ts +0 -3
  73. package/dist/scripts/runDockerOfflineExplore.d.ts.map +0 -1
  74. package/dist/scripts/runDockerOfflineExplore.js +0 -116
  75. package/dist/scripts/runDockerOfflineExplore.js.map +0 -1
  76. package/dist/scripts/runIsolatedDockerOffline.d.ts +0 -3
  77. package/dist/scripts/runIsolatedDockerOffline.d.ts.map +0 -1
  78. package/dist/scripts/runIsolatedDockerOffline.js +0 -351
  79. package/dist/scripts/runIsolatedDockerOffline.js.map +0 -1
  80. package/dist/scripts/runOfflineE2e.d.ts +0 -3
  81. package/dist/scripts/runOfflineE2e.d.ts.map +0 -1
  82. package/dist/scripts/runOfflineE2e.js +0 -408
  83. package/dist/scripts/runOfflineE2e.js.map +0 -1
  84. package/dist/scripts/runSupermachine.d.ts +0 -3
  85. package/dist/scripts/runSupermachine.d.ts.map +0 -1
  86. package/dist/scripts/runSupermachine.js +0 -474
  87. package/dist/scripts/runSupermachine.js.map +0 -1
  88. package/dist/scripts/runSupermachineAuth.d.ts +0 -3
  89. package/dist/scripts/runSupermachineAuth.d.ts.map +0 -1
  90. package/dist/scripts/runSupermachineAuth.js +0 -454
  91. package/dist/scripts/runSupermachineAuth.js.map +0 -1
  92. package/dist/vite/offlineConfig.d.ts +0 -34
  93. package/dist/vite/offlineConfig.d.ts.map +0 -1
  94. package/dist/vite/offlineConfig.js +0 -61
  95. package/dist/vite/offlineConfig.js.map +0 -1
  96. package/src/scripts/runDockerAuth.ts +0 -120
@@ -1,217 +0,0 @@
1
- /**
2
- * Node-side socket-layer shim that routes Shopify hostnames to the
3
- * edge proxy. Mirrors what `--host-resolver-rules` does for Chromium,
4
- * but for the Node runtime that Playwright tests execute in.
5
- *
6
- * Why this exists:
7
- * Chromium's `--host-resolver-rules` only affects the browser.
8
- * Node's HTTP stack — used by Playwright's `page.request`, by
9
- * `globalThis.fetch` (undici-based), and by anything calling
10
- * `node:http` / `node:https` directly — uses Node's own DNS. A
11
- * test that does `page.request.get('https://test-shop.myshopify.com/x')`
12
- * would resolve that hostname via Node's DNS and hit real Shopify
13
- * on the public internet.
14
- *
15
- * What this does:
16
- * - Patches `dns.lookup` so `*.shopify.com` / `*.myshopify.com`
17
- * resolve to `127.0.0.1`.
18
- * - Patches `net.createConnection` (the path every HTTPS client
19
- * eventually takes, including undici) so when the resolved
20
- * address is `127.0.0.1` AND the original hostname was a
21
- * Shopify host, the connect targets the edge port instead of
22
- * the original 80/443.
23
- *
24
- * Net effect: any Node-side HTTP/HTTPS request to a Shopify
25
- * hostname lands on our edge proxy. From the calling code's
26
- * perspective, it's hitting real Shopify; only the kernel-adjacent
27
- * shim knows the difference. TLS SNI carries the original hostname
28
- * to the edge, which presents a cert with broad SANs for it.
29
- *
30
- * Loading: import this module BEFORE Playwright loads its HTTP
31
- * machinery — `NODE_OPTIONS=--import <path-to-built-shim.js>` is
32
- * the canonical hook (Node 20.6+). The orchestrator sets this when
33
- * it spawns Playwright.
34
- *
35
- * Env: reads `E2E_MOCK_EDGE_PORT` at module load. If unset, the
36
- * shim no-ops (so loading it in non-offline contexts is harmless).
37
- */
38
- import dns from 'node:dns';
39
- import net from 'node:net';
40
- const SHOPIFY_HOSTNAME = /(?:^|\.)(my)?shopify\.com$/i;
41
- const EDGE_PORT = process.env['E2E_MOCK_EDGE_PORT']
42
- ? Number(process.env['E2E_MOCK_EDGE_PORT'])
43
- : undefined;
44
- if (EDGE_PORT && Number.isFinite(EDGE_PORT)) {
45
- installDnsPatch();
46
- installConnectPatch(EDGE_PORT);
47
- // Accept self-signed certs at the Node TLS layer. The edge proxy
48
- // serves a self-signed cert for *.myshopify.com / *.shopify.com
49
- // (see packages/runner/src/edge/cert.ts) — Chromium already
50
- // accepts it via the `--ignore-certificate-errors` launch flag,
51
- // and Playwright's APIRequestContext inherits the BrowserContext's
52
- // `ignoreHTTPSErrors: true`. But raw `globalThis.fetch` (undici)
53
- // and direct `https.request` calls in the test process have no
54
- // per-call override — they need this process-level flag.
55
- //
56
- // SCOPE: this affects ALL TLS in the test process, not just
57
- // Shopify hostnames. That's acceptable here because:
58
- // 1. The test process should never make TLS connections that
59
- // depend on cert verification — production Shopify code
60
- // runs in the Remix backend (a separate process), not here.
61
- // 2. The shim already aggressively redirects to localhost via
62
- // DNS+connect patches; cert verification on those would
63
- // always fail anyway (hostname mismatch).
64
- // If a future test genuinely needs strict TLS verification against
65
- // a real public host, it should reset this flag locally for that
66
- // request.
67
- process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
68
- if (process.env['E2E_OFFLINE_SHIM_DEBUG'] === 'true') {
69
- console.error(`[node-shim] Shopify hostname routing → 127.0.0.1:${EDGE_PORT}; ` +
70
- `NODE_TLS_REJECT_UNAUTHORIZED=0 (test-process scope)`);
71
- }
72
- }
73
- else if (process.env['E2E_OFFLINE_SHIM_DEBUG'] === 'true') {
74
- console.error('[node-shim] E2E_MOCK_EDGE_PORT not set — shim is a no-op');
75
- }
76
- /**
77
- * Patch `dns.lookup` so Shopify hostnames resolve to 127.0.0.1.
78
- * Every HTTP client in Node ultimately calls this (or `dns.lookup`
79
- * with the `family`/`hints` options form). We handle both shapes.
80
- *
81
- * Don't patch `dns.resolve*` — those do direct DNS queries (used
82
- * for explicit DNS-record inspection, not for connection setup);
83
- * patching them would surprise tests that genuinely want to query
84
- * DNS records.
85
- */
86
- function installDnsPatch() {
87
- const origLookup = dns.lookup;
88
- /**
89
- * Signature variants to support:
90
- * dns.lookup(hostname, callback)
91
- * dns.lookup(hostname, family, callback)
92
- * dns.lookup(hostname, options, callback)
93
- */
94
- const patched = function patched(hostname, optionsOrCallback, maybeCallback) {
95
- if (!SHOPIFY_HOSTNAME.test(hostname)) {
96
- // Pass through to the original — same arity & types.
97
- return origLookup.call(dns, hostname, optionsOrCallback, maybeCallback);
98
- }
99
- // Synthesize the response Node's resolver would have produced.
100
- const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : maybeCallback;
101
- const opts = typeof optionsOrCallback === 'object' && optionsOrCallback !== null
102
- ? optionsOrCallback
103
- : { family: typeof optionsOrCallback === 'number' ? optionsOrCallback : 0 };
104
- if (typeof cb !== 'function') {
105
- // No callback → Promise form. Node 18+ supports this via
106
- // `dns/promises`, but `dns.lookup` itself is callback-only.
107
- // If someone calls it without a callback, that's their bug —
108
- // throw the same TypeError Node would.
109
- throw new TypeError('dns.lookup: callback required');
110
- }
111
- const address = { address: '127.0.0.1', family: 4 };
112
- if (opts.all) {
113
- cb(null, [address]);
114
- }
115
- else {
116
- cb(null, address.address, address.family);
117
- }
118
- return undefined;
119
- };
120
- // `dns.lookup` is a property of the `dns` module object; reassigning
121
- // it affects every consumer that does `dns.lookup(...)` (which is
122
- // every Node HTTP client). `Object.defineProperty` rather than `=`
123
- // to avoid surprise from frozen properties in future Node versions.
124
- Object.defineProperty(dns, 'lookup', { value: patched, writable: true, configurable: true });
125
- }
126
- /**
127
- * Patch `net.createConnection` (aliased as `net.connect`) so that
128
- * outbound TCP connections to Shopify hosts get their port rewritten
129
- * to the edge port. The hostname is preserved on the socket, so TLS
130
- * SNI carries it through and the edge sees the real Host header.
131
- *
132
- * Detection: we look at the `host` option (most callers) or the
133
- * `hostname` option (some), AND/OR the path option (Unix sockets,
134
- * irrelevant here). If neither matches, we pass through.
135
- */
136
- function installConnectPatch(edgePort) {
137
- /**
138
- * Decide whether a connect() call should be rewritten to the edge.
139
- *
140
- * Two triggers:
141
- * 1. `host` is a Shopify hostname (e.g. callers that pass
142
- * hostname+port to net.connect and let the kernel resolve
143
- * DNS during connect).
144
- * 2. `host` is loopback (127.0.0.1 / ::1) AND port is 80/443.
145
- * This catches clients that resolve DNS themselves (undici
146
- * does this — calls dns.lookup, then connects with the IP).
147
- * Our dns.lookup patch maps Shopify hostnames to 127.0.0.1;
148
- * the only way loopback:80/443 happens in the test process
149
- * is via that redirected resolution.
150
- */
151
- function parseAndMaybeRewrite(args) {
152
- const first = args[0];
153
- let opts = null;
154
- if (typeof first === 'object' && first !== null && !Array.isArray(first)) {
155
- opts = first;
156
- }
157
- else if (typeof first === 'number') {
158
- const second = args[1];
159
- const host = typeof second === 'string' ? second : undefined;
160
- opts = host !== undefined ? { port: first, host } : { port: first };
161
- }
162
- if (!opts)
163
- return null;
164
- const host = opts.host ?? opts.hostname;
165
- const isShopifyHost = !!host && SHOPIFY_HOSTNAME.test(host);
166
- const isLoopback = host === '127.0.0.1' || host === '::1' || host === '::ffff:127.0.0.1';
167
- const isWellKnownPort = opts.port === 80 || opts.port === 443;
168
- const shouldRedirect = isShopifyHost || (isLoopback && isWellKnownPort);
169
- if (!shouldRedirect)
170
- return null;
171
- if (process.env['E2E_OFFLINE_SHIM_DEBUG'] === 'true') {
172
- console.error(`[node-shim] connect ${host}:${opts.port ?? '?'} → 127.0.0.1:${edgePort}`);
173
- }
174
- return { ...opts, port: edgePort };
175
- }
176
- // ── 1. net.createConnection / net.connect ───────────────────
177
- // Path used by `http.request` / `https.request` (Node's built-in
178
- // HTTP clients) and many libraries built on them.
179
- const origCreate = net.createConnection;
180
- const patchedCreate = function patchedCreate(...args) {
181
- const rewritten = parseAndMaybeRewrite(args);
182
- if (rewritten) {
183
- const listener = args.find((a) => typeof a === 'function');
184
- return listener
185
- ? origCreate.call(net, rewritten, listener)
186
- : origCreate.call(net, rewritten);
187
- }
188
- return origCreate.apply(net, args);
189
- };
190
- Object.defineProperty(net, 'createConnection', {
191
- value: patchedCreate,
192
- writable: true,
193
- configurable: true,
194
- });
195
- Object.defineProperty(net, 'connect', {
196
- value: patchedCreate,
197
- writable: true,
198
- configurable: true,
199
- });
200
- // ── 2. net.Socket.prototype.connect ─────────────────────────
201
- // Path used by undici (Node's built-in `fetch`). undici creates
202
- // a Socket directly and calls .connect() on it — bypassing
203
- // net.createConnection entirely. Patch the prototype method so
204
- // it gets the same rewrite treatment.
205
- const origSocketConnect = net.Socket.prototype.connect;
206
- net.Socket.prototype.connect = function patchedSocketConnect(...args) {
207
- const rewritten = parseAndMaybeRewrite(args);
208
- if (rewritten) {
209
- const listener = args.find((a) => typeof a === 'function');
210
- return listener
211
- ? origSocketConnect.call(this, rewritten, listener)
212
- : origSocketConnect.call(this, rewritten);
213
- }
214
- return origSocketConnect.apply(this, args);
215
- };
216
- }
217
- //# sourceMappingURL=nodeShim.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nodeShim.js","sourceRoot":"","sources":["../../src/edge/nodeShim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,GAAG,MAAM,UAAU,CAAC;AAG3B,MAAM,gBAAgB,GAAG,6BAA6B,CAAC;AACvD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IACjD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAC3C,CAAC,CAAC,SAAS,CAAC;AAEd,IAAI,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;IAC5C,eAAe,EAAE,CAAC;IAClB,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAE/B,iEAAiE;IACjE,gEAAgE;IAChE,4DAA4D;IAC5D,gEAAgE;IAChE,mEAAmE;IACnE,iEAAiE;IACjE,+DAA+D;IAC/D,yDAAyD;IACzD,EAAE;IACF,4DAA4D;IAC5D,qDAAqD;IACrD,+DAA+D;IAC/D,6DAA6D;IAC7D,iEAAiE;IACjE,gEAAgE;IAChE,6DAA6D;IAC7D,+CAA+C;IAC/C,mEAAmE;IACnE,iEAAiE;IACjE,WAAW;IACX,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,GAAG,GAAG,CAAC;IAElD,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,KAAK,MAAM,EAAE,CAAC;QACrD,OAAO,CAAC,KAAK,CACX,oDAAoD,SAAS,IAAI;YAC/D,qDAAqD,CACxD,CAAC;IACJ,CAAC;AACH,CAAC;KAAM,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,KAAK,MAAM,EAAE,CAAC;IAC5D,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;AAC5E,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,eAAe;IACtB,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC;IAE9B;;;;;OAKG;IACH,MAAM,OAAO,GAAsB,SAAS,OAAO,CACjD,QAAgB,EAChB,iBAA0B,EAC1B,aAAuB;QAEvB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,qDAAqD;YACrD,OAAQ,UAAyD,CAAC,IAAI,CACpE,GAAG,EACH,QAAQ,EACR,iBAAiB,EACjB,aAAa,CACd,CAAC;QACJ,CAAC;QAED,+DAA+D;QAC/D,MAAM,EAAE,GACN,OAAO,iBAAiB,KAAK,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC;QAC9E,MAAM,IAAI,GACR,OAAO,iBAAiB,KAAK,QAAQ,IAAI,iBAAiB,KAAK,IAAI;YACjE,CAAC,CAAE,iBAAwD;YAC3D,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,iBAAiB,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEhF,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE,CAAC;YAC7B,yDAAyD;YACzD,4DAA4D;YAC5D,6DAA6D;YAC7D,uCAAuC;YACvC,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,OAAO,GAAkB,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACnE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACZ,EAA8E,CAC7E,IAAI,EACJ,CAAC,OAAO,CAAC,CACV,CAAC;QACJ,CAAC;aAAM,CAAC;YACL,EAIS,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAsB,CAAC;IAEvB,qEAAqE;IACrE,kEAAkE;IAClE,mEAAmE;IACnE,oEAAoE;IACpE,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/F,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,mBAAmB,CAAC,QAAgB;IAQ3C;;;;;;;;;;;;;OAaG;IACH,SAAS,oBAAoB,CAAC,IAAe;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,IAAI,GAAuB,IAAI,CAAC;QACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzE,IAAI,GAAG,KAAoB,CAAC;QAC9B,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,IAAI,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7D,IAAI,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC;QACxC,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,UAAU,GACd,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,kBAAkB,CAAC;QACxE,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC;QAC9D,MAAM,cAAc,GAAG,aAAa,IAAI,CAAC,UAAU,IAAI,eAAe,CAAC,CAAC;QACxE,IAAI,CAAC,cAAc;YAAE,OAAO,IAAI,CAAC;QAEjC,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,KAAK,MAAM,EAAE,CAAC;YACrD,OAAO,CAAC,KAAK,CACX,uBAAuB,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,gBAAgB,QAAQ,EAAE,CAC1E,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACrC,CAAC;IAED,+DAA+D;IAC/D,iEAAiE;IACjE,kDAAkD;IAClD,MAAM,UAAU,GAAG,GAAG,CAAC,gBAER,CAAC;IAChB,MAAM,aAAa,GAAG,SAAS,aAAa,CAAC,GAAG,IAAe;QAC7D,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,UAAU,CAE5C,CAAC;YACd,OAAO,QAAQ;gBACb,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC;gBAC3C,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC;IACF,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,kBAAkB,EAAE;QAC7C,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;IACH,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE;QACpC,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;IAEH,+DAA+D;IAC/D,gEAAgE;IAChE,2DAA2D;IAC3D,+DAA+D;IAC/D,sCAAsC;IACtC,MAAM,iBAAiB,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;IACvD,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,oBAAoB,CAE1D,GAAG,IAAe;QAElB,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,UAAU,CAE5C,CAAC;YACd,OAAO,QAAQ;gBACb,CAAC,CAAE,iBAAgE,CAAC,IAAI,CACpE,IAAI,EACJ,SAAS,EACT,QAAQ,CACT;gBACH,CAAC,CAAE,iBAAgE,CAAC,IAAI,CACpE,IAAI,EACJ,SAAS,CACV,CAAC;QACR,CAAC;QACD,OAAQ,iBAAgE,CAAC,KAAK,CAC5E,IAAI,EACJ,IAAI,CACL,CAAC;IACJ,CAAwC,CAAC;AAC3C,CAAC"}
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=_probeSourceUrl.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_probeSourceUrl.d.ts","sourceRoot":"","sources":["../../src/scripts/_probeSourceUrl.ts"],"names":[],"mappings":""}
@@ -1,119 +0,0 @@
1
- #!/usr/bin/env node
2
- /** Test the CLI's actual format: tar + brotli, sourceExtension: BR. */
3
- import { createReadStream, readFileSync, statSync, writeFileSync } from 'node:fs';
4
- import { Readable } from 'node:stream';
5
- import { randomUUID } from 'node:crypto';
6
- import { brotliCompressSync, constants as zlibConst } from 'node:zlib';
7
- import { pack as tarPack } from 'tar-stream';
8
- const TOKEN = process.env.SHOPIFY_APP_AUTOMATION_TOKEN;
9
- const ORG = 'gid://shopify/Organization/217838969';
10
- const APP = 'gid://shopify/App/366427176961';
11
- const WS = '/Users/domas/Developer/supercorp/essential-upsell';
12
- async function getAt() {
13
- const body = new URLSearchParams({
14
- grant_type: 'urn:ietf:params:oauth:grant-type:token-exchange',
15
- requested_token_type: 'urn:ietf:params:oauth:token-type:access_token',
16
- subject_token_type: 'urn:ietf:params:oauth:token-type:access_token',
17
- client_id: 'fbdb2649-e327-4907-8f67-908d24cfd7e3',
18
- audience: '7ee65a63608843c577db8b23c4d7316ea0a01bd2f7594f8a9c06ea668c1b775c',
19
- scope: 'https://api.shopify.com/auth/organization.apps.manage',
20
- subject_token: TOKEN,
21
- }).toString();
22
- const r = await fetch('https://accounts.shopify.com/oauth/token', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body });
23
- return JSON.parse(await r.text()).access_token;
24
- }
25
- async function gql(at, body) {
26
- const r = await fetch('https://app.shopify.com/app_management/unstable/graphql.json', { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${at}`, 'X-Shopify-Access-Token': `Bearer ${at}` }, body: JSON.stringify(body) });
27
- return { status: r.status, body: await r.text() };
28
- }
29
- async function mintBr(at) {
30
- const r = await gql(at, { query: `mutation Q($o:ID!){appRequestSourceUploadUrl(sourceExtension:BR,organizationId:$o){sourceUploadUrl userErrors{field message}}}`, variables: { o: ORG } });
31
- return JSON.parse(r.body).data.appRequestSourceUploadUrl.sourceUploadUrl;
32
- }
33
- async function upload(url, path) {
34
- const size = statSync(path).size;
35
- const body = Readable.toWeb(createReadStream(path));
36
- const r = await fetch(url, {
37
- method: 'PUT', body,
38
- // Match CLI: no content-encoding header, raw bytes
39
- headers: { 'Content-Length': String(size) },
40
- // @ts-expect-error
41
- duplex: 'half',
42
- });
43
- if (!r.ok)
44
- throw new Error(`upload: ${r.status} ${await r.text()}`);
45
- }
46
- /** Build a tar archive in memory from { path: bytes } map. */
47
- async function buildTarBr(files) {
48
- return new Promise((resolve, reject) => {
49
- const pack = tarPack();
50
- const chunks = [];
51
- pack.on('data', (c) => chunks.push(c));
52
- pack.on('end', () => {
53
- const tarBuf = Buffer.concat(chunks);
54
- const brBuf = brotliCompressSync(tarBuf, {
55
- params: { [zlibConst.BROTLI_PARAM_QUALITY]: 7 },
56
- });
57
- resolve(brBuf);
58
- });
59
- pack.on('error', reject);
60
- (async () => {
61
- for (const [name, content] of Object.entries(files)) {
62
- const buf = Buffer.isBuffer(content) ? content : Buffer.from(content, 'utf8');
63
- await new Promise((res, rej) => {
64
- pack.entry({ name }, buf, (err) => (err ? rej(err) : res()));
65
- });
66
- }
67
- pack.finalize();
68
- })().catch(reject);
69
- });
70
- }
71
- async function tryIt(at, label, manifest, files) {
72
- const tarBr = await buildTarBr({ 'manifest.json': JSON.stringify(manifest, null, 2), ...files });
73
- const p = `/tmp/probe-${Date.now()}.tar.br`;
74
- writeFileSync(p, tarBr);
75
- console.log(`\n--- ${label} (tar.br: ${tarBr.length} bytes) ---`);
76
- const url = await mintBr(at);
77
- await upload(url, p);
78
- const r = await gql(at, {
79
- query: `mutation Q($a:ID!,$v:AppVersionInput!,$m:VersionMetadataInput){appVersionCreate(appId:$a,version:$v,metadata:$m){version{id metadata{versionTag} appModules{uuid handle specification{identifier}}} userErrors{field message category code}}}`,
80
- variables: { a: APP, v: { sourceUrl: url }, m: { versionTag: `probe-${Date.now()}`, message: label } },
81
- });
82
- console.log(`status ${r.status}: ${r.body.slice(0, 1500)}`);
83
- }
84
- async function main() {
85
- const at = await getAt();
86
- const fnWasm = readFileSync(`${WS}/app_extensions/discounts/dist/function.wasm`);
87
- const fnWasmB64 = fnWasm.toString('base64');
88
- const iq1 = readFileSync(`${WS}/app_extensions/discounts/src/cart_lines_discounts_generate_run.graphql`, 'utf8');
89
- const iq2 = readFileSync(`${WS}/app_extensions/discounts/src/cart_delivery_options_discounts_generate_run.graphql`, 'utf8');
90
- const targets = [
91
- { handle: 'cart.lines.discounts.generate.run', export: 'cart-lines-discounts-generate-run', input_query: iq1 },
92
- { handle: 'cart.delivery-options.discounts.generate.run', export: 'cart-delivery-options-discounts-generate-run', input_query: iq2 },
93
- ];
94
- const uid = randomUUID();
95
- await tryIt(at, 'V53: tar.br with <uid>/dist/index.wasm (base64 text), full CLI shape', {
96
- name: 'Essential Upsell Test Online',
97
- handle: '',
98
- modules: [{
99
- type: 'function',
100
- handle: 'discounts',
101
- uid,
102
- assets: uid,
103
- target: '',
104
- config: {
105
- title: 'Discounts',
106
- module_id: randomUUID(),
107
- description: 'Discount function',
108
- app_key: '3384e849dbc1e2588cb63240b79907d3',
109
- api_version: '2026-04',
110
- enable_creation_ui: true,
111
- targets,
112
- },
113
- }],
114
- }, {
115
- [`${uid}/dist/index.wasm`]: fnWasmB64,
116
- });
117
- }
118
- main().catch((e) => { console.error(e); process.exit(1); });
119
- //# sourceMappingURL=_probeSourceUrl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_probeSourceUrl.js","sourceRoot":"","sources":["../../src/scripts/_probeSourceUrl.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=buildDockerImage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"buildDockerImage.d.ts","sourceRoot":"","sources":["../../src/scripts/buildDockerImage.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"buildDockerImage.js","sourceRoot":"","sources":["../../src/scripts/buildDockerImage.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,mEAAmE;AACnE,uEAAuE;AACvE,MAAM,WAAW,GAAG,oCAAoC,CAAC;AAEzD,SAAS,gBAAgB;IACvB,oEAAoE;IACpE,+CAA+C;IAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,gDAAgD;IAChD,MAAM,UAAU,GAAG;QACjB,OAAO,CAAC,IAAI,EAAE,cAAc,CAAC;QAC7B,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC;KAC3B,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IACD,MAAM,IAAI,KAAK,CACb,iEAAiE;QAC/D,UAAU,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACpC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,WAAW,CAAC;IACjE,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IAEnC,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IACjE,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=devE2eBackend.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"devE2eBackend.d.ts","sourceRoot":"","sources":["../../src/scripts/devE2eBackend.ts"],"names":[],"mappings":""}
@@ -1,117 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Manual run of the e2e backend WITHOUT Shopify CLI.
4
- *
5
- * Used for `npm run test:online:install` (which needs a running backend to
6
- * complete OAuth) and for local debugging. Mirrors the env-isolation
7
- * guarantees of runTests.ts but uses a persistent DB
8
- * (${appName}_e2e_${user}) instead of an ephemeral UUID one — so OAuth
9
- * tokens persist across runs.
10
- *
11
- * Serves on https://localhost:PORT with a self-signed cert (vite +
12
- * @vitejs/plugin-basic-ssl). No tunnel, no DNS.
13
- */
14
- import { spawn, execSync } from 'node:child_process';
15
- import { existsSync, readFileSync } from 'node:fs';
16
- import { resolve } from 'node:path';
17
- import { loadEnv, printEnvSummary } from '@essential-apps/shopify-test-core';
18
- import { isPortFree } from '../lib/freePort.js';
19
- const PG_HOST = 'localhost';
20
- const PG_PORT = '5432';
21
- function readAppName() {
22
- const pkgPath = resolve(process.cwd(), 'package.json');
23
- if (!existsSync(pkgPath)) {
24
- throw new Error(`No package.json at ${pkgPath}. Run this from the consuming app's repo root.`);
25
- }
26
- const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
27
- if (!pkg.name)
28
- throw new Error(`package.json at ${pkgPath} has no \`name\` field.`);
29
- return pkg.name.replace(/^@[^/]+\//, '');
30
- }
31
- function dbExists(name) {
32
- try {
33
- execSync(`psql -h ${PG_HOST} -p ${PG_PORT} -lqt | cut -d \\| -f 1 | grep -qw ${name}`, {
34
- stdio: 'ignore',
35
- });
36
- return true;
37
- }
38
- catch {
39
- return false;
40
- }
41
- }
42
- async function main() {
43
- const env = loadEnv();
44
- printEnvSummary(env);
45
- if (!env.apiSecret) {
46
- throw new Error(`SHOPIFY_API_SECRET is not set in .env.test.\n\n` +
47
- `Get it from Partner Dashboard → Apps → "${env.devAppHandle}" → ` +
48
- `Configuration → "Client credentials" → "Reveal client secret".\n` +
49
- `Paste it into .env.test as SHOPIFY_API_SECRET=...`);
50
- }
51
- const appUrl = new URL(env.devAppUrl);
52
- if (appUrl.hostname !== 'localhost' && appUrl.hostname !== '127.0.0.1') {
53
- throw new Error(`SHOPIFY_APP_URL must be a localhost URL (https://localhost:PORT). Got: ${env.devAppUrl}`);
54
- }
55
- if (appUrl.protocol !== 'https:') {
56
- throw new Error(`SHOPIFY_APP_URL must use https:// — got ${env.devAppUrl}`);
57
- }
58
- const port = appUrl.port || '443';
59
- if (!(await isPortFree(Number(port)))) {
60
- throw new Error(`Port ${port} is in use. Find what's there: lsof -i :${port}\n` +
61
- `Or change SHOPIFY_APP_URL in .env.test to a different port (and update Partner Dashboard).`);
62
- }
63
- const appName = readAppName();
64
- const dbPrefix = (process.env['TEST_ONLINE_DB_NAME_PREFIX'] ?? `${appName}_e2e`)
65
- .toLowerCase()
66
- .replace(/[^a-z0-9_]/g, '_');
67
- const PERSISTENT_DB_NAME = `${dbPrefix}_${process.env['USER'] ?? 'local'}`;
68
- const user = process.env['USER'] ?? '';
69
- const url = `postgresql://${user}@${PG_HOST}:${PG_PORT}/${PERSISTENT_DB_NAME}`;
70
- console.log(`[dev-e2e] Persistent DB: ${url}`);
71
- console.log(`[dev-e2e] Backend: ${env.devAppUrl} (vite https, self-signed cert)`);
72
- console.log('');
73
- if (!dbExists(PERSISTENT_DB_NAME)) {
74
- console.log(`[dev-e2e] createdb ${PERSISTENT_DB_NAME}…`);
75
- execSync(`createdb -h ${PG_HOST} -p ${PG_PORT} ${PERSISTENT_DB_NAME}`, {
76
- stdio: 'inherit',
77
- });
78
- }
79
- else {
80
- console.log(`[dev-e2e] DB ${PERSISTENT_DB_NAME} exists, reusing.`);
81
- }
82
- const backendEnv = {
83
- PATH: process.env['PATH'] ?? '',
84
- // See runOfflineFullTests.ts for the long-form note — empty HOME
85
- // makes npm write its cache to literal `~/.npm` in cwd.
86
- HOME: process.env['HOME'] || '/root',
87
- USER: process.env['USER'] ?? '',
88
- NODE_ENV: 'test',
89
- DATABASE_URL: url,
90
- DIRECT_URL: url,
91
- SHOPIFY_API_KEY: env.devClientId,
92
- SHOPIFY_API_SECRET: env.apiSecret,
93
- SCOPES: env.scopes,
94
- SHOPIFY_APP_URL: env.devAppUrl,
95
- PORT: port,
96
- HOST: env.devAppUrl,
97
- };
98
- console.log('[dev-e2e] prisma migrate deploy…');
99
- execSync('npx prisma migrate deploy', { stdio: 'inherit', env: backendEnv });
100
- console.log('');
101
- console.log('[dev-e2e] booting Remix dev server (vite, no tunnel)…');
102
- console.log(` Open ${env.devAppUrl} (accept self-signed cert warning once).`);
103
- console.log(' Ctrl-C to stop.');
104
- console.log('');
105
- const dev = spawn('npx', ['vite', '--port', port, '--strictPort', '--host', '0.0.0.0'], {
106
- stdio: 'inherit',
107
- env: backendEnv,
108
- });
109
- dev.on('exit', (code) => process.exit(code ?? 0));
110
- process.on('SIGINT', () => dev.kill('SIGINT'));
111
- process.on('SIGTERM', () => dev.kill('SIGTERM'));
112
- }
113
- main().catch((err) => {
114
- console.error(err);
115
- process.exit(1);
116
- });
117
- //# sourceMappingURL=devE2eBackend.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"devE2eBackend.js","sourceRoot":"","sources":["../../src/scripts/devE2eBackend.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=runDocker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runDocker.d.ts","sourceRoot":"","sources":["../../src/scripts/runDocker.ts"],"names":[],"mappings":""}
@@ -1,88 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Run e2e tests inside Apple's `container` (libkrun-based microVM).
4
- *
5
- * Why: macOS-host Chrome can't be hidden reliably while passing
6
- * Cloudflare's bot management. Running tests in a Linux microVM means
7
- * the browser exists entirely off-host — no window flashes ever, fully
8
- * invisible.
9
- *
10
- * Architecture:
11
- * - Image: ${appName}-e2e:latest (built once via the consuming app's
12
- * tests/e2e/docker/Dockerfile). Default image name is derived
13
- * from package.json `name`; override via E2E_IMAGE env var.
14
- * - Bind mounts:
15
- * - app repo → /workspace
16
- * - linux node_modules → /workspace/node_modules (cached)
17
- * - shopify-test repo → same host path inside the container
18
- * (so symlinks created by `npm install file:...` resolve
19
- * identically on host and container)
20
- * - Postgres starts inside the container via the app's entrypoint.sh.
21
- * - The shopify-test-run-tests CLI runs unchanged inside the
22
- * container — its localhost:5432 points at the container's pg,
23
- * not the host's.
24
- */
25
- import { spawn } from 'node:child_process';
26
- import { existsSync, mkdirSync, readFileSync } from 'node:fs';
27
- import { homedir } from 'node:os';
28
- import { resolve } from 'node:path';
29
- const repoRoot = process.cwd();
30
- function readAppName() {
31
- const pkgPath = resolve(repoRoot, 'package.json');
32
- if (!existsSync(pkgPath)) {
33
- throw new Error(`No package.json at ${pkgPath}. Run this from the consuming app's repo root.`);
34
- }
35
- const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
36
- if (!pkg.name) {
37
- throw new Error(`package.json at ${pkgPath} has no \`name\` field.`);
38
- }
39
- // Strip any npm scope: @essential-apps/foo → foo
40
- return pkg.name.replace(/^@[^/]+\//, '');
41
- }
42
- async function main() {
43
- const appName = readAppName();
44
- const image = process.env['E2E_IMAGE'] ?? `${appName}-e2e:latest`;
45
- // Linux node_modules cache lives OUTSIDE the project tree so neither
46
- // tsconfig-paths nor Playwright's test discovery sees it.
47
- const linuxModules = process.env['E2E_LINUX_NODE_MODULES'] ??
48
- resolve(homedir(), `.cache/${appName}-e2e/node_modules`);
49
- mkdirSync(linuxModules, { recursive: true });
50
- const args = [
51
- 'run',
52
- '--rm',
53
- // amd64 + Rosetta — image bundles Google Chrome (Linux amd64-only).
54
- // Apple `container` runs amd64 images on Apple Silicon via Rosetta.
55
- '--arch',
56
- 'amd64',
57
- '--memory',
58
- '8192M',
59
- '--cpus',
60
- '4',
61
- '--mount',
62
- `type=bind,source=${repoRoot},target=/workspace`,
63
- '--mount',
64
- `type=bind,source=${linuxModules},target=/workspace/node_modules`,
65
- '-w',
66
- '/workspace',
67
- image,
68
- 'bash',
69
- '-c',
70
- [
71
- // Use the .env.test we already have; run the built test runner
72
- // from the @essential-apps/shopify-test-runner package.
73
- // PG_HOST=127.0.0.1 inside container points at the container's
74
- // pg started by entrypoint.sh.
75
- 'node --env-file=.env.test node_modules/@essential-apps/shopify-test-runner/dist/scripts/runTests.js',
76
- ].join(' && '),
77
- ];
78
- console.log('[runDocker] container run', args.slice(0, 12).join(' '), '…');
79
- const p = spawn('container', args, { stdio: 'inherit' });
80
- p.on('exit', (code) => process.exit(code ?? 0));
81
- process.on('SIGINT', () => p.kill('SIGINT'));
82
- process.on('SIGTERM', () => p.kill('SIGTERM'));
83
- }
84
- main().catch((err) => {
85
- console.error(err);
86
- process.exit(1);
87
- });
88
- //# sourceMappingURL=runDocker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runDocker.js","sourceRoot":"","sources":["../../src/scripts/runDocker.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=runDockerAuth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runDockerAuth.d.ts","sourceRoot":"","sources":["../../src/scripts/runDockerAuth.ts"],"names":[],"mappings":""}