@harrylabsj/kiwi-merchant-cloud 0.12.0 → 0.12.1

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 (42) hide show
  1. package/app/cloud/bootstrap.d.ts +2 -0
  2. package/app/cloud/bootstrap.js +92 -10
  3. package/app/cloud/bootstrap.js.map +1 -1
  4. package/app/cloud/connect-service.d.ts +144 -0
  5. package/app/cloud/connect-service.js +776 -0
  6. package/app/cloud/connect-service.js.map +1 -0
  7. package/app/cloud/file-listing-publication.d.ts +105 -0
  8. package/app/cloud/file-listing-publication.js +436 -0
  9. package/app/cloud/file-listing-publication.js.map +1 -0
  10. package/app/cloud/merchant-connect.d.ts +19 -13
  11. package/app/cloud/merchant-connect.js +43 -284
  12. package/app/cloud/merchant-connect.js.map +1 -1
  13. package/app/cloud-sample/products.json +3 -3
  14. package/app/http/merchant-management/api.d.ts +21 -1
  15. package/app/http/merchant-management/api.js +136 -1
  16. package/app/http/merchant-management/api.js.map +1 -1
  17. package/app/http/merchant-management/page.d.ts +4 -1
  18. package/app/http/merchant-management/page.js +113 -7
  19. package/app/http/merchant-management/page.js.map +1 -1
  20. package/build-manifest.json +98 -68
  21. package/node_modules/@hono/node-server/dist/early-hints.cjs +1 -1
  22. package/node_modules/@hono/node-server/dist/early-hints.mjs +1 -1
  23. package/node_modules/@hono/node-server/dist/index.cjs +41 -19
  24. package/node_modules/@hono/node-server/dist/index.mjs +42 -20
  25. package/node_modules/@hono/node-server/dist/serve-static.cjs +1 -0
  26. package/node_modules/@hono/node-server/dist/serve-static.d.cts +2 -1
  27. package/node_modules/@hono/node-server/dist/serve-static.d.mts +2 -1
  28. package/node_modules/@hono/node-server/dist/serve-static.mjs +1 -0
  29. package/node_modules/@hono/node-server/package.json +3 -2
  30. package/node_modules/hono/dist/cjs/adapter/bun/websocket.js +1 -1
  31. package/node_modules/hono/dist/cjs/middleware/language/language.js +1 -1
  32. package/node_modules/hono/dist/cjs/middleware/serve-static/index.js +1 -0
  33. package/node_modules/hono/dist/middleware/language/language.js +1 -1
  34. package/node_modules/hono/dist/middleware/serve-static/index.js +1 -0
  35. package/node_modules/hono/package.json +1 -1
  36. package/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +19 -18
  37. package/node_modules/yaml/browser/dist/nodes/Alias.js +25 -23
  38. package/node_modules/yaml/dist/compose/resolve-flow-scalar.js +19 -18
  39. package/node_modules/yaml/dist/nodes/Alias.js +25 -23
  40. package/node_modules/yaml/package.json +1 -1
  41. package/package.json +2 -2
  42. package/runtime-package.json +2 -2
@@ -26,7 +26,7 @@
26
26
  * 适用于本页(壳内嵌确认流程的中间态不留缓存)。
27
27
  */
28
28
  /** 页面按 owner 视角展示管理动作;角色由服务端权限逐次裁决,前端只是提示。 */
29
- export function renderMerchantManagementPage() {
29
+ export function renderMerchantManagementPage(options = {}) {
30
30
  return `<!doctype html>
31
31
  <html lang="zh-CN">
32
32
  <head>
@@ -84,6 +84,12 @@ export function renderMerchantManagementPage() {
84
84
  var CSRF = "";
85
85
  var ROLE = "";
86
86
  var API = "/merchant/api/v1";
87
+ var FILE_PRODUCTS = ${options.productAuthority === "file"};
88
+ var CATALOG_CONNECT = ${options.catalogConnection === true};
89
+ var catalogBeginKey = "";
90
+ var catalogBeginPending = false;
91
+ var publicationDraft = null;
92
+ var publicationBusy = false;
87
93
  var $ = function (id) { return document.getElementById(id); };
88
94
  function esc(s) {
89
95
  return String(s == null ? "" : s).replace(/[&<>"']/g, function (c) {
@@ -124,13 +130,13 @@ async function apiError(res) {
124
130
  var fallback = await res.json().catch(function () { return {}; });
125
131
  return new Error((fallback.message || fallback.detail || fallback.code || ("HTTP " + res.status)) + "。请勿自动重复提交。");
126
132
  }
127
- function call(method, path, body) {
133
+ function call(method, path, body, apiBase) {
128
134
  var headers = {};
129
135
  if (body !== undefined) {
130
136
  headers["content-type"] = "application/json";
131
137
  if (CSRF) headers["x-csrf-token"] = CSRF;
132
138
  }
133
- return fetch(API + path, {
139
+ return fetch((apiBase || API) + path, {
134
140
  method: method,
135
141
  credentials: "same-origin",
136
142
  headers: headers,
@@ -155,6 +161,51 @@ function statePill(state) {
155
161
  return '<span class="pill ' + it[0] + '">' + esc(it[1]) + "</span>";
156
162
  }
157
163
 
164
+ function catalogStatusText(s) {
165
+ if (s.published) return "目录名片已发布";
166
+ var labels = { idle: "尚未连接", preparing: "等待你确认授权", pending: "等待你确认授权",
167
+ awaiting_confirmation: "等待你确认授权", authorized: "授权已收到,正在连接",
168
+ bound: "已连接,正在检查接待能力", expired: "授权已过期,请重新发起",
169
+ blocked: "连接未完成,请核对状态", paused: "目录服务已暂停", revoked: "授权已撤销" };
170
+ return labels[s.status] || "连接尚未完成";
171
+ }
172
+ function appendCatalogConnection(html) {
173
+ if (!CATALOG_CONNECT || ROLE !== "owner") return html;
174
+ return call("GET", "/catalog/connect").then(function (s) {
175
+ return html + '<div class="card"><h2>连接 Kiwi 目录</h2><p id="catalog-status">' + esc(catalogStatusText(s)) + '</p>' +
176
+ '<p class="muted">连接后,采购方可在目录发现本店。请本人核对配对码与公开资料,并在目录授权页确认发布。</p>' +
177
+ (s.published ? "" : '<button class="act primary" onclick="beginCatalogConnect()">发起或继续连接</button> ' +
178
+ '<button class="act" onclick="showCatalogPairing()">本人查看配对信息</button>') +
179
+ ' <button class="act" onclick="refresh()">刷新连接状态</button><div id="catalog-pairing"></div></div>';
180
+ }).catch(function () {
181
+ return html + '<div class="card"><h2>连接 Kiwi 目录</h2><p>暂时无法读取连接状态,请稍后刷新。</p></div>';
182
+ });
183
+ }
184
+ function beginCatalogConnect() {
185
+ if (catalogBeginPending) return;
186
+ catalogBeginPending = true;
187
+ if (!catalogBeginKey) catalogBeginKey = key("catalog-connect");
188
+ return call("POST", "/catalog/connect/begin", { idempotency_key: catalogBeginKey }).then(function (receipt) {
189
+ if (receipt.status === "succeeded") catalogBeginKey = "";
190
+ bar(receipt.status === "succeeded" ? "连接申请已准备,请本人查看配对信息并确认公开资料。" : "连接结果尚未确认,请先查看状态,不要重复提交。");
191
+ refresh();
192
+ }).catch(function () { bar("连接申请暂未完成,请先刷新状态后再试。", true); })
193
+ .finally(function () { catalogBeginPending = false; });
194
+ }
195
+ function showCatalogPairing() {
196
+ return call("GET", "/catalog/connect/pairing").then(function (result) {
197
+ var box = $("catalog-pairing");
198
+ if (!box) return;
199
+ var p = result.pairing;
200
+ if (!p) { box.textContent = "当前没有待确认的配对信息,请先发起连接或刷新状态。"; return; }
201
+ var url = new URL(p.verification_uri);
202
+ if (url.protocol !== "https:" || url.username || url.password) throw new Error("invalid link");
203
+ box.innerHTML = '<p>请在目录授权页核对相同配对码:<strong>' + esc(p.user_code) + '</strong></p>' +
204
+ '<p class="muted">有效期至 ' + esc(p.expires_at) + '。配对码请自行核对,不要发送给助手。</p>' +
205
+ '<a target="_blank" rel="noopener noreferrer" href="' + esc(url.href) + '">前往 Kiwi 目录核对并授权</a>';
206
+ }).catch(function () { bar("无法读取配对信息,请刷新连接状态。", true); });
207
+ }
208
+
158
209
  var views = {
159
210
  status: function () {
160
211
  return call("GET", "/runtime/status").then(function (s) {
@@ -187,12 +238,19 @@ var views = {
187
238
  html += '<p class="muted">恢复接待需要 owner 角色。</p>';
188
239
  }
189
240
  }
190
- return html + "</div>";
241
+ return appendCatalogConnection(html + "</div>");
191
242
  });
192
243
  },
193
244
  products: function () {
194
- return call("GET", "/products?limit=100").then(function (p) {
245
+ // 云端导入表与 exact 商品库是不同权威源;按装配选择,不能把空 exact 库当作导入失败。
246
+ return call("GET", "/products?limit=100", undefined, FILE_PRODUCTS ? "/merchant/api" : API).then(function (p) {
195
247
  var rows = (p.items || []).map(function (it) {
248
+ if (FILE_PRODUCTS) {
249
+ return "<tr><td>" + esc(it.sku) + "</td><td>" + esc(it.title) + "</td><td>" +
250
+ esc(it.currency) + " " + esc(it.price) + " / " + esc(it.price_unit) + "</td><td>" +
251
+ esc(it.min_order_qty == null ? "-" : it.min_order_qty) + "</td><td>" +
252
+ esc(it.valid_until) + "</td><td>" + esc(it.status) + "</td></tr>";
253
+ }
196
254
  var money = it.money || {};
197
255
  return "<tr><td>" + esc(it.sku) + "</td><td>" + esc(it.title) + "</td><td>" +
198
256
  esc(money.currency || "-") + " " + esc(money.amount_minor == null ? "-" : money.amount_minor) +
@@ -200,13 +258,20 @@ var views = {
200
258
  esc(it.authority_version == null ? "-" : it.authority_version) + "</td></tr>";
201
259
  }).join("");
202
260
  return '<div class="card"><h2>当前商品(' + (p.items || []).length + ")</h2>" +
203
- (rows ? "<table><tr><th>SKU</th><th>名称</th><th>价格(最小币单位)</th><th>库存</th><th>版本</th></tr>" + rows + "</table>"
261
+ (rows ? (FILE_PRODUCTS
262
+ ? "<table><tr><th>SKU</th><th>名称</th><th>单价</th><th>起订量</th><th>有效期至</th><th>状态</th></tr>"
263
+ : "<table><tr><th>SKU</th><th>名称</th><th>价格(最小币单位)</th><th>库存</th><th>版本</th></tr>") + rows + "</table>"
204
264
  : '<p class="muted">暂无商品,请先导入商品。没有商品时服务不会报价或发布名片。</p>') + "</div>" +
205
265
  '<div class="card"><h2>导入商品表(整表替换)</h2>' +
206
266
  '<p class="muted">支持 CSV、Excel(.xlsx)与商品表 JSON:先转换校验、预览增/改/留/删,确认后整批生效(不成功的批次不改动现有商品)。</p>' +
207
267
  '<p class="muted">模板:<a href="/merchant/api/v1/products/import-template?format=csv" download="kiwi-product-import-template.csv">下载 CSV 模板</a> · <a href="/merchant/api/v1/products/import-template?format=xlsx" download="kiwi-product-import-template.xlsx">下载 Excel 模板</a>(中文表头与示例行;中英文常见列名会自动识别)。</p>' +
208
268
  '<div class="row"><input type="file" id="pfile" accept=".json,.csv,.xlsx">' +
209
- '<button class="act" onclick="previewImport()">校验预览</button></div><div id="presult"></div></div>';
269
+ '<button class="act" onclick="previewImport()">校验预览</button></div><div id="presult"></div></div>' +
270
+ (FILE_PRODUCTS && CATALOG_CONNECT && ROLE === "owner" ?
271
+ '<div class="card"><h2>发布商品到 Kiwi 目录</h2><p>先完成目录连接,再选择商品并填写分类。公开名称、SKU 和分类;价格、库存及私有规则不会发布。</p>' +
272
+ '<p>每行填写一个 SKU 和分类,用英文竖线分隔,例如:KIWI-ACCEPT-001 | 验收测试</p>' +
273
+ '<textarea id="publication-selection" rows="4" aria-label="选定商品与分类"></textarea>' +
274
+ '<button class="act" onclick="previewPublication()">预览公开内容</button><div id="publication-result"></div></div>' : '');
210
275
  });
211
276
  },
212
277
  approvals: function () {
@@ -482,6 +547,47 @@ function decide(candidateId, approve) {
482
547
  }
483
548
  var pendingImport = null;
484
549
  var parsedTable = null;
550
+ function previewPublication() {
551
+ if (publicationBusy) return;
552
+ publicationDraft = null;
553
+ var selection = $("publication-selection");
554
+ var lines = selection.value.split(/\\r?\\n/).filter(function (line) { return line.trim(); });
555
+ var selections = [];
556
+ for (var i = 0; i < lines.length; i++) {
557
+ var parts = lines[i].split("|");
558
+ if (parts.length !== 2 || !parts[0].trim() || !parts[1].trim()) { bar("每行需填写 SKU | 分类", true); return; }
559
+ selections.push({ sku: parts[0].trim(), category: parts[1].trim() });
560
+ }
561
+ publicationBusy = true;
562
+ return call("POST", "/products/publication-drafts", { selections: selections }).then(function (draft) {
563
+ publicationDraft = draft;
564
+ $("publication-result").innerHTML = '<h3>将公开以下内容</h3><pre>' +
565
+ esc(JSON.stringify(draft.items.map(function (it) { return it.listing; }), null, 2)) +
566
+ '</pre><p>预览有效期至 ' + esc(draft.expires_at) + '</p>' +
567
+ '<button class="act primary" onclick="commitPublication()">确认公开这些商品</button>';
568
+ }).catch(function (err) { bar(err.message, true); }).finally(function () { publicationBusy = false; });
569
+ }
570
+ function commitPublication() {
571
+ if (publicationBusy || !publicationDraft) return;
572
+ publicationBusy = true;
573
+ var draft = publicationDraft;
574
+ return call("POST", "/products/publication-drafts/" + encodeURIComponent(draft.draft_id) + "/commit", {
575
+ expected_digest: draft.digest, confirm_publication: true,
576
+ }).then(function (receipt) {
577
+ var text = "已确认 " + receipt.succeeded + ";失败 " + receipt.failed + ";待确认 " + receipt.pending;
578
+ $("publication-result").innerHTML = '<p>' + esc(text) + '</p>' +
579
+ '<pre>' + esc(JSON.stringify(receipt.results, null, 2)) + '</pre>' +
580
+ (receipt.status !== "succeeded" ? '<button class="act" onclick="checkPublication()">查看原草稿回执</button><button class="act" onclick="commitPublication()">按原草稿继续确认</button>' : '');
581
+ if (receipt.status === "succeeded") publicationDraft = null;
582
+ }).catch(function (err) { bar(err.message + " 请保留本页,查看原草稿回执。", true); })
583
+ .finally(function () { publicationBusy = false; });
584
+ }
585
+ function checkPublication() {
586
+ if (!publicationDraft) return;
587
+ return call("GET", "/products/publication-drafts/" + encodeURIComponent(publicationDraft.draft_id)).then(function (result) {
588
+ bar("原草稿回执:" + JSON.stringify(result.receipts));
589
+ }).catch(function (err) { bar(err.message, true); });
590
+ }
485
591
  function previewImport() {
486
592
  var f = $("pfile").files[0];
487
593
  if (!f) { bar("请先选择 CSV / Excel / JSON 商品表文件", true); return; }
@@ -1 +1 @@
1
- {"version":3,"file":"page.js","sourceRoot":"","sources":["../../../src/http/merchant-management/page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;;;;GAWG;AAEH,8CAA8C;AAC9C,MAAM,UAAU,4BAA4B;IAC1C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAimBD,CAAC;AACT,CAAC"}
1
+ {"version":3,"file":"page.js","sourceRoot":"","sources":["../../../src/http/merchant-management/page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;;;;GAWG;AAEH,8CAA8C;AAC9C,MAAM,UAAU,4BAA4B,CAAC,UAGzC,EAAE;IACJ,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAyDa,OAAO,CAAC,gBAAgB,KAAK,MAAM;wBACjC,OAAO,CAAC,iBAAiB,KAAK,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAipBlD,CAAC;AACT,CAAC"}
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "schema_version": "0.1.2",
3
3
  "artifact_kind": "kiwi-merchant-cloud-package",
4
- "runtime_version": "0.12.0",
5
- "source_commit": "fb3b1f54ee1aa3718a5e02fe244f4ddeb212da9a",
6
- "source_artifact_sha256": "sha256:4638a59c83f3eb40f387cc6b13cd49317365a1422bd01749a0435df9c0f2402e",
7
- "artifact_sha256": "sha256:6d4371eab98399dcde7407c4982de3a54aa9854d3a189c02a246afb36e598dc1",
4
+ "runtime_version": "0.12.1",
5
+ "source_commit": "d5835b8b6868b77f3bbe71da08da8b9a84fc1564",
6
+ "source_artifact_sha256": "sha256:0a36cdcccbbc7204399e6e81314b0cc6294bbe8777ec3061d1f745829491c54f",
7
+ "artifact_sha256": "sha256:6ceebf1830b09f0e838984b53346594842ed374bce41ba02852e57c39dadf5a1",
8
8
  "files": [
9
9
  {
10
10
  "path": "app/a2a/client/client.d.ts",
@@ -1589,7 +1589,7 @@
1589
1589
  {
1590
1590
  "path": "app/cloud-sample/products.json",
1591
1591
  "size": 531,
1592
- "sha256": "sha256:b0de253f00b41d39551273d65d615a24fc7d6e81f87980ecd7cd01a049774ff4"
1592
+ "sha256": "sha256:f67860ebedec44cd9cc3c384e56dbe15ca83d82cf05ac5042b006407e3ab8a91"
1593
1593
  },
1594
1594
  {
1595
1595
  "path": "app/cloud/binding/audit.d.ts",
@@ -1698,18 +1698,18 @@
1698
1698
  },
1699
1699
  {
1700
1700
  "path": "app/cloud/bootstrap.d.ts",
1701
- "size": 3074,
1702
- "sha256": "sha256:d8c7d1bf13756a9c1ed15c5f567a3eae6ad323650df0e6f911abddcbd059ad9c"
1701
+ "size": 3216,
1702
+ "sha256": "sha256:a24789dbb74a47d6925396bc5d365b2206226e690f53443d310ac3fb897bae87"
1703
1703
  },
1704
1704
  {
1705
1705
  "path": "app/cloud/bootstrap.js",
1706
- "size": 61074,
1707
- "sha256": "sha256:ac2ec44315e3345fd6c6d0b46de837ba273db4ba5be739be309fd5293f177e47"
1706
+ "size": 66103,
1707
+ "sha256": "sha256:b0839ef119f4f44bcd2bd0a008ae02b68acdf41dd6664600f81e5ea9ebcca3ef"
1708
1708
  },
1709
1709
  {
1710
1710
  "path": "app/cloud/bootstrap.js.map",
1711
- "size": 41012,
1712
- "sha256": "sha256:772a4a773f0d7acb42c3372b8cfd8325b7da42ad9986a1c6554ace7ad825005d"
1711
+ "size": 44508,
1712
+ "sha256": "sha256:177f1763ecaf807f56a6733eef9fea3f3b001868ca3becfdbdd3e13c36a2ff9b"
1713
1713
  },
1714
1714
  {
1715
1715
  "path": "app/cloud/catalog-client.d.ts",
@@ -1741,6 +1741,36 @@
1741
1741
  "size": 10041,
1742
1742
  "sha256": "sha256:a6703b7494fa3a0dcafd13b1f6fb96bf19211f018d5c6456ae3c4eff43e37745"
1743
1743
  },
1744
+ {
1745
+ "path": "app/cloud/connect-service.d.ts",
1746
+ "size": 6963,
1747
+ "sha256": "sha256:38e9d9c8066681464109b58ddd4c2e5492ef2c7131bb4268448e2224bff31eb3"
1748
+ },
1749
+ {
1750
+ "path": "app/cloud/connect-service.js",
1751
+ "size": 44057,
1752
+ "sha256": "sha256:9e16025b6b09b87b37dbe20c41bba233e520d5d03e12415ba062bedaca1d0f26"
1753
+ },
1754
+ {
1755
+ "path": "app/cloud/connect-service.js.map",
1756
+ "size": 29520,
1757
+ "sha256": "sha256:483704e173e9dc4572be57c0ab4d2c3eaccfec8bf9346d81e86a812edbb00cce"
1758
+ },
1759
+ {
1760
+ "path": "app/cloud/file-listing-publication.d.ts",
1761
+ "size": 4198,
1762
+ "sha256": "sha256:41a57d5e89f7453a4f06a396a298885abe5e72329e1b6df8913adc4ec732adad"
1763
+ },
1764
+ {
1765
+ "path": "app/cloud/file-listing-publication.js",
1766
+ "size": 22463,
1767
+ "sha256": "sha256:c3cb17f48d5a8afae7ff73287d187fc66d6a7f186fce7890b698488a44efadcd"
1768
+ },
1769
+ {
1770
+ "path": "app/cloud/file-listing-publication.js.map",
1771
+ "size": 16532,
1772
+ "sha256": "sha256:d6af07d5a55fd556faf02681d719a64b9d7b0fc3cb6d1d24f2a69729f5843315"
1773
+ },
1744
1774
  {
1745
1775
  "path": "app/cloud/http-router.d.ts",
1746
1776
  "size": 3509,
@@ -1788,18 +1818,18 @@
1788
1818
  },
1789
1819
  {
1790
1820
  "path": "app/cloud/merchant-connect.d.ts",
1791
- "size": 1987,
1792
- "sha256": "sha256:a29dd1e391eaedb5a5da9a42349f23b379c9feb4515a174f5b52625eb42e32c5"
1821
+ "size": 2474,
1822
+ "sha256": "sha256:eb63b6636308f69318ce18d89de617b09d7c04deb3f4912a91022599cdce2b71"
1793
1823
  },
1794
1824
  {
1795
1825
  "path": "app/cloud/merchant-connect.js",
1796
- "size": 21372,
1797
- "sha256": "sha256:98bb01241ab9813e4d21997fa6af64b0560c1bae01e4f53b19e30dbe886067ff"
1826
+ "size": 5288,
1827
+ "sha256": "sha256:f0f9a84fe8074bb052754079cbcf010747759e0cd4db8a21549a297b8878f175"
1798
1828
  },
1799
1829
  {
1800
1830
  "path": "app/cloud/merchant-connect.js.map",
1801
- "size": 16954,
1802
- "sha256": "sha256:a3a56db1cea0cf201bf066acc09a80f295500dd8b8891f83edfb80ede725c495"
1831
+ "size": 3628,
1832
+ "sha256": "sha256:2801e6c5f3dc090cfb37e4b5dff0f88d64603e746227d2044552808a9952ac19"
1803
1833
  },
1804
1834
  {
1805
1835
  "path": "app/cloud/merchant-identity.d.ts",
@@ -3288,18 +3318,18 @@
3288
3318
  },
3289
3319
  {
3290
3320
  "path": "app/http/merchant-management/api.d.ts",
3291
- "size": 11704,
3292
- "sha256": "sha256:d272f17ad0dd5e915d69d06e45ac9b9b5e494270dd57caee5cce5a63b2a945b9"
3321
+ "size": 12561,
3322
+ "sha256": "sha256:7928f79c270c96759f652e9fc06980db7b053ad1bc50baf616341da5ff540295"
3293
3323
  },
3294
3324
  {
3295
3325
  "path": "app/http/merchant-management/api.js",
3296
- "size": 143717,
3297
- "sha256": "sha256:15e73ee9d9ab6f5789dc2cce9fe65b568e8d0655f4b2a74ca3f8e1e9333900dd"
3326
+ "size": 151998,
3327
+ "sha256": "sha256:6aa8ee0e6f483f1d2259171988581417d0549eae38840927e889ef61346a3c22"
3298
3328
  },
3299
3329
  {
3300
3330
  "path": "app/http/merchant-management/api.js.map",
3301
- "size": 111661,
3302
- "sha256": "sha256:95a58813044722c1f8acb22d43dca32250685f30dbdb3bd8907a57aa1b1db326"
3331
+ "size": 117749,
3332
+ "sha256": "sha256:69377758128930278e26ba5989f47049bbd2254b0d5b1fced41b37a8ac5780af"
3303
3333
  },
3304
3334
  {
3305
3335
  "path": "app/http/merchant-management/draft-store.d.ts",
@@ -3348,18 +3378,18 @@
3348
3378
  },
3349
3379
  {
3350
3380
  "path": "app/http/merchant-management/page.d.ts",
3351
- "size": 1505,
3352
- "sha256": "sha256:d191d4e4b37c78c7119081e4b0aa1408cac32b8fd1b29b9009c88406d22ada47"
3381
+ "size": 1592,
3382
+ "sha256": "sha256:dbec8fcee9a5b12f3952abf23d0598a658bcda8f8bff64817736458dd91b906e"
3353
3383
  },
3354
3384
  {
3355
3385
  "path": "app/http/merchant-management/page.js",
3356
- "size": 37815,
3357
- "sha256": "sha256:6e99127b303af56746e0ae4973aa76a12b107e4df768716de20d92042ebf2cf4"
3386
+ "size": 45094,
3387
+ "sha256": "sha256:3aeac965bc579120f0df19df08a2769057786d89d304f96b7cbbe1f52e13e074"
3358
3388
  },
3359
3389
  {
3360
3390
  "path": "app/http/merchant-management/page.js.map",
3361
- "size": 849,
3362
- "sha256": "sha256:841446d3b9c5d6d0c993402486fff1d6b1cb6afb2f16838f9e21cd248be70c87"
3391
+ "size": 1037,
3392
+ "sha256": "sha256:e7a81a2d13816138f6b131601a286bf7d2a0d107e2be5fcac3319342c3c11a79"
3363
3393
  },
3364
3394
  {
3365
3395
  "path": "app/http/merchant-management/problem-client.d.ts",
@@ -6478,8 +6508,8 @@
6478
6508
  },
6479
6509
  {
6480
6510
  "path": "node_modules/@hono/node-server/dist/early-hints.cjs",
6481
- "size": 1195,
6482
- "sha256": "sha256:ccb9117e1971087461370b010f734be6d018d228772ab83fb2a5758d03770260"
6511
+ "size": 1200,
6512
+ "sha256": "sha256:ee1afd85b0d0d0cd27be3973a61500ec440b4ec2a592a8b7443338e4aefb49d0"
6483
6513
  },
6484
6514
  {
6485
6515
  "path": "node_modules/@hono/node-server/dist/early-hints.d.cts",
@@ -6493,13 +6523,13 @@
6493
6523
  },
6494
6524
  {
6495
6525
  "path": "node_modules/@hono/node-server/dist/early-hints.mjs",
6496
- "size": 1111,
6497
- "sha256": "sha256:5c47dba0b73cc5907d36d904f6374ab53a1027e864f414ef9f07ead5ef0ffa4a"
6526
+ "size": 1116,
6527
+ "sha256": "sha256:c317c2e08ce197407a19dd9cb91e41e9cac74d647148e45c4052a15e1fd5ac7a"
6498
6528
  },
6499
6529
  {
6500
6530
  "path": "node_modules/@hono/node-server/dist/index.cjs",
6501
- "size": 44968,
6502
- "sha256": "sha256:9f3797f22317bf06f7cceddbbd803724ca186372f14f5cfc95b53615e053bead"
6531
+ "size": 46030,
6532
+ "sha256": "sha256:e5855e906309cc6b05b8ae36556c2b40be7d1b2dc40bf8640d0b7d19692e7967"
6503
6533
  },
6504
6534
  {
6505
6535
  "path": "node_modules/@hono/node-server/dist/index.d.cts",
@@ -6513,28 +6543,28 @@
6513
6543
  },
6514
6544
  {
6515
6545
  "path": "node_modules/@hono/node-server/dist/index.mjs",
6516
- "size": 44659,
6517
- "sha256": "sha256:77075ab3ee0cea06341cddad66510d3f87f9d85993d5cde64005d21d16b22ef6"
6546
+ "size": 45727,
6547
+ "sha256": "sha256:0d173a2a7a590217e10b45bd4e4a579a5ec759d42b010338a03092040c428a32"
6518
6548
  },
6519
6549
  {
6520
6550
  "path": "node_modules/@hono/node-server/dist/serve-static.cjs",
6521
- "size": 5277,
6522
- "sha256": "sha256:36450460cbeb7d0c24bfaebfc625149bbe3bac0b1177ad7bc648fe51c8d97190"
6551
+ "size": 5360,
6552
+ "sha256": "sha256:e5c03b55aaa8d2d37c6d61aab5fa6ff2c485d51843b13e52531e7718a3084faa"
6523
6553
  },
6524
6554
  {
6525
6555
  "path": "node_modules/@hono/node-server/dist/serve-static.d.cts",
6526
- "size": 696,
6527
- "sha256": "sha256:f0122b42413b4b30a068b295adc8905f6a66d73f1df59018515324caf21c63c5"
6556
+ "size": 802,
6557
+ "sha256": "sha256:832bb2b1769485c8db7a3a3e1e7c3cb4fd7c6d11da15eb773927f1f4b4b1bc39"
6528
6558
  },
6529
6559
  {
6530
6560
  "path": "node_modules/@hono/node-server/dist/serve-static.d.mts",
6531
- "size": 696,
6532
- "sha256": "sha256:f0122b42413b4b30a068b295adc8905f6a66d73f1df59018515324caf21c63c5"
6561
+ "size": 802,
6562
+ "sha256": "sha256:832bb2b1769485c8db7a3a3e1e7c3cb4fd7c6d11da15eb773927f1f4b4b1bc39"
6533
6563
  },
6534
6564
  {
6535
6565
  "path": "node_modules/@hono/node-server/dist/serve-static.mjs",
6536
- "size": 5068,
6537
- "sha256": "sha256:0a09a0f437d42706392a7a7f2b6fb38e4e11043ee90a50cc9380db8820d03b5e"
6566
+ "size": 5151,
6567
+ "sha256": "sha256:f6de7081c81e606667d8d81809c78deb132898dd924a928bdbdf941d4f828a3a"
6538
6568
  },
6539
6569
  {
6540
6570
  "path": "node_modules/@hono/node-server/dist/utils/response.cjs",
@@ -6578,8 +6608,8 @@
6578
6608
  },
6579
6609
  {
6580
6610
  "path": "node_modules/@hono/node-server/package.json",
6581
- "size": 3121,
6582
- "sha256": "sha256:66f3aa3ddef3a6b54c5b99ec22e76cc85b1f5bcabe9bb7849675edd0f7221553"
6611
+ "size": 3154,
6612
+ "sha256": "sha256:691e145574aa58bf7457dcd5d94a9176b101f91d922c8c672dc469989bf757f0"
6583
6613
  },
6584
6614
  {
6585
6615
  "path": "node_modules/@levischuck/tiny-cbor/esm/cbor/cbor_internal.js",
@@ -12429,7 +12459,7 @@
12429
12459
  {
12430
12460
  "path": "node_modules/hono/dist/cjs/adapter/bun/websocket.js",
12431
12461
  "size": 2468,
12432
- "sha256": "sha256:1ea2bcda29ad9762f7e7465dc1e61c4811d16571eecbadefd65a218c4039e1f9"
12462
+ "sha256": "sha256:a5860637d9afacfe523d8199e83c93771e511b58a4ac0d2438e927084883c1ae"
12433
12463
  },
12434
12464
  {
12435
12465
  "path": "node_modules/hono/dist/cjs/adapter/cloudflare-pages/conninfo.js",
@@ -12979,7 +13009,7 @@
12979
13009
  {
12980
13010
  "path": "node_modules/hono/dist/cjs/middleware/language/language.js",
12981
13011
  "size": 6384,
12982
- "sha256": "sha256:b2f1bbdc466360486cac02e23d4cb60f3e44f01377d31febb9391285e0ce6141"
13012
+ "sha256": "sha256:8c73faf62b1364c54004e248cf9fcc0e03c501cc6618001ef74a91d3abdf2247"
12983
13013
  },
12984
13014
  {
12985
13015
  "path": "node_modules/hono/dist/cjs/middleware/logger/index.js",
@@ -13033,8 +13063,8 @@
13033
13063
  },
13034
13064
  {
13035
13065
  "path": "node_modules/hono/dist/cjs/middleware/serve-static/index.js",
13036
- "size": 2618,
13037
- "sha256": "sha256:32a5185188b6ffe0e9777be43cbf1300bc6be0cb50bcf7d20a2c12bdb25f09d9"
13066
+ "size": 2701,
13067
+ "sha256": "sha256:8fc85110a32a6323934e2e346ed8d0d002c92b9e7f56606d46853da3770559b2"
13038
13068
  },
13039
13069
  {
13040
13070
  "path": "node_modules/hono/dist/cjs/middleware/serve-static/path.js",
@@ -13734,7 +13764,7 @@
13734
13764
  {
13735
13765
  "path": "node_modules/hono/dist/middleware/language/language.js",
13736
13766
  "size": 5965,
13737
- "sha256": "sha256:a7a67f26c2e8b9300fc1b3ad471ac09851b26d5f95b79af7874136ad4374250c"
13767
+ "sha256": "sha256:a61f274d1d8fe259e8eedba2ff65d1bc57893de4a39539574406d828209482e8"
13738
13768
  },
13739
13769
  {
13740
13770
  "path": "node_modules/hono/dist/middleware/logger/index.js",
@@ -13788,8 +13818,8 @@
13788
13818
  },
13789
13819
  {
13790
13820
  "path": "node_modules/hono/dist/middleware/serve-static/index.js",
13791
- "size": 2386,
13792
- "sha256": "sha256:595f80cc76b259567568db21d7bf0525b337ea12f8dab56bcaf935605f17115a"
13821
+ "size": 2469,
13822
+ "sha256": "sha256:367ab6e405018eb56c8d730910e3c9facb1f6b5973804f9b35cd5816559bb4b9"
13793
13823
  },
13794
13824
  {
13795
13825
  "path": "node_modules/hono/dist/middleware/serve-static/path.js",
@@ -14084,7 +14114,7 @@
14084
14114
  {
14085
14115
  "path": "node_modules/hono/package.json",
14086
14116
  "size": 23679,
14087
- "sha256": "sha256:8f3b80a460bae7d116acac6e2baa4eaf39c5b17df0ad1cb847c5154727bd664d"
14117
+ "sha256": "sha256:2988bf74d25c4434c75dbb4e59036431b33d2a2d6acfa5e8dd313a1f3c052604"
14088
14118
  },
14089
14119
  {
14090
14120
  "path": "node_modules/http-errors/index.js",
@@ -16208,8 +16238,8 @@
16208
16238
  },
16209
16239
  {
16210
16240
  "path": "node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js",
16211
- "size": 7324,
16212
- "sha256": "sha256:133cf55793444359e187514746cfabcf3cab0880a9c5f24a8b3824b28a9c12ed"
16241
+ "size": 7355,
16242
+ "sha256": "sha256:5516b92d61fedb6dbfb4523a7aa6c44c12b627e18da5178eafa28324aef4ff7d"
16213
16243
  },
16214
16244
  {
16215
16245
  "path": "node_modules/yaml/browser/dist/compose/resolve-props.js",
@@ -16283,8 +16313,8 @@
16283
16313
  },
16284
16314
  {
16285
16315
  "path": "node_modules/yaml/browser/dist/nodes/Alias.js",
16286
- "size": 3857,
16287
- "sha256": "sha256:79e032d3d6d4fda1881030c5cee45b31b8fdc0fa2de5ec1b847cc4275e74000f"
16316
+ "size": 3998,
16317
+ "sha256": "sha256:0aaa9956d9f965e29f391c268baca1e7f9c50649b900128a9e5e669450d76411"
16288
16318
  },
16289
16319
  {
16290
16320
  "path": "node_modules/yaml/browser/dist/nodes/Collection.js",
@@ -16588,8 +16618,8 @@
16588
16618
  },
16589
16619
  {
16590
16620
  "path": "node_modules/yaml/dist/compose/resolve-flow-scalar.js",
16591
- "size": 7386,
16592
- "sha256": "sha256:167fa296e6fb75618bb7b315acaa926d4e88b2b63a9ff139f1a7de9c78db4610"
16621
+ "size": 7417,
16622
+ "sha256": "sha256:13bcd9d37afd4ffec4b1b3bc9ae1ecc2cff97e7f7c91b5f58b71c99ddd526b05"
16593
16623
  },
16594
16624
  {
16595
16625
  "path": "node_modules/yaml/dist/compose/resolve-props.js",
@@ -16663,8 +16693,8 @@
16663
16693
  },
16664
16694
  {
16665
16695
  "path": "node_modules/yaml/dist/nodes/Alias.js",
16666
- "size": 3901,
16667
- "sha256": "sha256:80a8109b7cb1d0d73eee18463fdd3095d120fa21f49b282444d90d867e291ea1"
16696
+ "size": 4042,
16697
+ "sha256": "sha256:139f5fbb3e7727a9cea89e16b2518f9ffe2e3a37cfb46717e60d23da7d6e739e"
16668
16698
  },
16669
16699
  {
16670
16700
  "path": "node_modules/yaml/dist/nodes/Collection.js",
@@ -16909,7 +16939,7 @@
16909
16939
  {
16910
16940
  "path": "node_modules/yaml/package.json",
16911
16941
  "size": 3254,
16912
- "sha256": "sha256:20b8b197cbd10dad245d45e463dfe58e4c8c25a47e24bc4256ad9ab58bf35683"
16942
+ "sha256": "sha256:1c6441703d8204a23ded0d37ddf57c3b69d821dc392f20852d1f605bb9b8861c"
16913
16943
  },
16914
16944
  {
16915
16945
  "path": "node_modules/yaml/util.js",
@@ -19889,7 +19919,7 @@
19889
19919
  {
19890
19920
  "path": "package.json",
19891
19921
  "size": 958,
19892
- "sha256": "sha256:b99b204f3abea8416dfb23a11d9e09190c55f4554b7911db372422d1e9baae0a"
19922
+ "sha256": "sha256:11106da6b1fefa6409e4f56ef65ed166444029e48e1a8f3a2d5743a69f6f8eca"
19893
19923
  },
19894
19924
  {
19895
19925
  "path": "prepare.mjs",
@@ -19899,11 +19929,11 @@
19899
19929
  {
19900
19930
  "path": "runtime-package.json",
19901
19931
  "size": 536,
19902
- "sha256": "sha256:e1878a0b9fbb8d50540de5ce67a301eb482fd300a1a183002634bb9c76c9efe6"
19932
+ "sha256": "sha256:2202b4dd817be9cab353ca31d656e74347caf95c26abfde8042dab057dd61c96"
19903
19933
  }
19904
19934
  ],
19905
- "file_count": 3979,
19906
- "total_bytes": 20333789,
19935
+ "file_count": 3985,
19936
+ "total_bytes": 20463107,
19907
19937
  "notes": [
19908
19938
  "artifact_sha256 covers every npm package file except build-manifest.json itself; source_artifact_sha256 binds the original cloud artifact."
19909
19939
  ]
@@ -15,7 +15,7 @@ const earlyHints = (options) => {
15
15
  const dest = c.req.header("Sec-Fetch-Dest");
16
16
  if (mode && mode !== "navigate" || dest && dest !== "document") return next();
17
17
  const env = c.env || {};
18
- const outgoing = (env.server ? env.server : env)?.outgoing;
18
+ const outgoing = ("server" in env ? env.server : env)?.outgoing;
19
19
  if (typeof outgoing?.writeEarlyHints !== "function") {
20
20
  if (!warned) {
21
21
  console.warn("Early Hints Middleware is not supported because writeEarlyHints is not defined.");
@@ -13,7 +13,7 @@ const earlyHints = (options) => {
13
13
  const dest = c.req.header("Sec-Fetch-Dest");
14
14
  if (mode && mode !== "navigate" || dest && dest !== "document") return next();
15
15
  const env = c.env || {};
16
- const outgoing = (env.server ? env.server : env)?.outgoing;
16
+ const outgoing = ("server" in env ? env.server : env)?.outgoing;
17
17
  if (typeof outgoing?.writeEarlyHints !== "function") {
18
18
  if (!warned) {
19
19
  console.warn("Early Hints Middleware is not supported because writeEarlyHints is not defined.");