@penclipai/server 2026.602.2 → 2026.602.3-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/routes/issues.d.ts.map +1 -1
- package/dist/routes/issues.js +26 -1
- package/dist/routes/issues.js.map +1 -1
- package/package.json +17 -17
- package/ui-dist/assets/{_basePickBy-CeTFxbQW.js → _basePickBy-BYxlHKKN.js} +1 -1
- package/ui-dist/assets/{_baseUniq-D0ujdjSD.js → _baseUniq-B26yarIc.js} +1 -1
- package/ui-dist/assets/{arc-BO6fFqoX.js → arc-BDauvvDc.js} +1 -1
- package/ui-dist/assets/{architectureDiagram-VXUJARFQ-D2UpP8cQ.js → architectureDiagram-VXUJARFQ-BKDhI01I.js} +1 -1
- package/ui-dist/assets/{blockDiagram-VD42YOAC-BR95g_Bq.js → blockDiagram-VD42YOAC-D0usrWE7.js} +1 -1
- package/ui-dist/assets/{browser-ponyfill-f87cfQ5P.js → browser-ponyfill-ebpW4-qy.js} +1 -1
- package/ui-dist/assets/{c4Diagram-YG6GDRKO-DI5tPMqa.js → c4Diagram-YG6GDRKO-y9PV6qun.js} +1 -1
- package/ui-dist/assets/channel-CBWRFI7_.js +1 -0
- package/ui-dist/assets/{chunk-4BX2VUAB-DYVTUDCW.js → chunk-4BX2VUAB-BOw0TFbH.js} +1 -1
- package/ui-dist/assets/{chunk-55IACEB6-D0QGIKOI.js → chunk-55IACEB6-DHk7xA0k.js} +1 -1
- package/ui-dist/assets/{chunk-B4BG7PRW-DMGouDbX.js → chunk-B4BG7PRW-DAXyHAAS.js} +1 -1
- package/ui-dist/assets/{chunk-DI55MBZ5-CDoOezvn.js → chunk-DI55MBZ5-wyKz_I6_.js} +1 -1
- package/ui-dist/assets/{chunk-FMBD7UC4-BsnMSmde.js → chunk-FMBD7UC4-BgkGSsnk.js} +1 -1
- package/ui-dist/assets/{chunk-QN33PNHL-DakMd-Np.js → chunk-QN33PNHL-yedqG5PM.js} +1 -1
- package/ui-dist/assets/{chunk-QZHKN3VN-DqQUmo7x.js → chunk-QZHKN3VN-CpGfFp9R.js} +1 -1
- package/ui-dist/assets/{chunk-TZMSLE5B-BhHr3bYf.js → chunk-TZMSLE5B-DfY2ZBKD.js} +1 -1
- package/ui-dist/assets/classDiagram-2ON5EDUG-BBWLyelg.js +1 -0
- package/ui-dist/assets/classDiagram-v2-WZHVMYZB-BBWLyelg.js +1 -0
- package/ui-dist/assets/clone-BpiELgqW.js +1 -0
- package/ui-dist/assets/{cose-bilkent-S5V4N54A-Cu5Xt36m.js → cose-bilkent-S5V4N54A-BvjsWHQj.js} +1 -1
- package/ui-dist/assets/{dagre-6UL2VRFP-oB6IWi02.js → dagre-6UL2VRFP-Dh1PluzR.js} +1 -1
- package/ui-dist/assets/{diagram-PSM6KHXK-CvrdSiPO.js → diagram-PSM6KHXK-CAz3sT0T.js} +1 -1
- package/ui-dist/assets/{diagram-QEK2KX5R-DQSpEaL6.js → diagram-QEK2KX5R-B6WaPPrb.js} +1 -1
- package/ui-dist/assets/{diagram-S2PKOQOG-Ckv-tSzv.js → diagram-S2PKOQOG-fkF5os8X.js} +1 -1
- package/ui-dist/assets/{erDiagram-Q2GNP2WA-B_hA9waW.js → erDiagram-Q2GNP2WA-tK6MhzrJ.js} +1 -1
- package/ui-dist/assets/{flowDiagram-NV44I4VS-Bb0ZY-IZ.js → flowDiagram-NV44I4VS-CaNFUnRl.js} +1 -1
- package/ui-dist/assets/{ganttDiagram-JELNMOA3-DKwCKDGB.js → ganttDiagram-JELNMOA3-CeG0sDmd.js} +1 -1
- package/ui-dist/assets/{gitGraphDiagram-V2S2FVAM-DAzn2J50.js → gitGraphDiagram-V2S2FVAM-TLvK324z.js} +1 -1
- package/ui-dist/assets/{graph-Cl-tjvPX.js → graph-Bqo7M0Vd.js} +1 -1
- package/ui-dist/assets/{index-DzltSrZq.js → index-94t6F9ti.js} +1 -1
- package/ui-dist/assets/{index-km6491jM.js → index-BDBeR_Ms.js} +1 -1
- package/ui-dist/assets/{index-DlxftVuv.js → index-BOwEJNiM.js} +1 -1
- package/ui-dist/assets/{index-CQo-Yt-A.js → index-BaZON7l-.js} +1 -1
- package/ui-dist/assets/{index-u71Xs_3k.js → index-Bcj8kPOw.js} +1 -1
- package/ui-dist/assets/{index-CbYaoEKW.js → index-Bg1l5Rb-.js} +1 -1
- package/ui-dist/assets/{index-C-t56Owg.js → index-Btz0iQUD.js} +1 -1
- package/ui-dist/assets/{index-DL1vj0uy.js → index-BxZkEvQt.js} +1 -1
- package/ui-dist/assets/{index-DNDIa7NC.js → index-BySmbMst.js} +1 -1
- package/ui-dist/assets/{index-CfPehaOb.js → index-CF55bUu0.js} +1 -1
- package/ui-dist/assets/{index-DF7nqDl_.js → index-CYbzoPxp.js} +1 -1
- package/ui-dist/assets/{index-8GC1rVe0.js → index-ColgDk6f.js} +1 -1
- package/ui-dist/assets/{index-ChV-aw4S.js → index-Cw_JDhgf.js} +1 -1
- package/ui-dist/assets/{index-BsoFGxYP.js → index-Cymc8BwS.js} +1 -1
- package/ui-dist/assets/{index-LLPT1gK0.js → index-D8kLtV6y.js} +1 -1
- package/ui-dist/assets/{index-CwlKP6-n.js → index-DS5mbkob.js} +164 -164
- package/ui-dist/assets/{index-BtF-hm9b.js → index-DWUw2jaA.js} +1 -1
- package/ui-dist/assets/{index-B4Zx0-UV.js → index-DXJLiZGe.js} +1 -1
- package/ui-dist/assets/{index-DxJJ3F_W.js → index-DYP1MjhS.js} +1 -1
- package/ui-dist/assets/{index-DG38TZml.js → index-DfswLslQ.js} +1 -1
- package/ui-dist/assets/{index-Dl6o6n5E.js → index-DsRbE9l_.js} +1 -1
- package/ui-dist/assets/{index-Do6HXiXB.js → index-UtXv_ECo.js} +1 -1
- package/ui-dist/assets/{index-BPtAEykT.js → index-rvgEgE3e.js} +1 -1
- package/ui-dist/assets/{infoDiagram-HS3SLOUP-DEL8kyRP.js → infoDiagram-HS3SLOUP-3Rv7QaIb.js} +1 -1
- package/ui-dist/assets/{journeyDiagram-XKPGCS4Q-CRSQwCYB.js → journeyDiagram-XKPGCS4Q-BAtPBBtl.js} +1 -1
- package/ui-dist/assets/{kanban-definition-3W4ZIXB7-B4y2cOh8.js → kanban-definition-3W4ZIXB7-BkOtXBkh.js} +1 -1
- package/ui-dist/assets/{layout-BpvTQ45G.js → layout-Gwcoi7Xv.js} +1 -1
- package/ui-dist/assets/{linear-CYavthmK.js → linear-DHbYmiWq.js} +1 -1
- package/ui-dist/assets/{mermaid.core-CYlgTsL-.js → mermaid.core-aP1deKhG.js} +4 -4
- package/ui-dist/assets/{mindmap-definition-VGOIOE7T-D5EKPjo-.js → mindmap-definition-VGOIOE7T-8SJJRsUG.js} +1 -1
- package/ui-dist/assets/{pieDiagram-ADFJNKIX-C2JvyqX-.js → pieDiagram-ADFJNKIX-p2ACVxJ8.js} +1 -1
- package/ui-dist/assets/{quadrantDiagram-AYHSOK5B--5eHpwLO.js → quadrantDiagram-AYHSOK5B-ChUyFUsT.js} +1 -1
- package/ui-dist/assets/{requirementDiagram-UZGBJVZJ-DWl0VcDt.js → requirementDiagram-UZGBJVZJ-C3Q-59mi.js} +1 -1
- package/ui-dist/assets/{sankeyDiagram-TZEHDZUN-DTVD0t60.js → sankeyDiagram-TZEHDZUN-BGYmIL4H.js} +1 -1
- package/ui-dist/assets/{sequenceDiagram-WL72ISMW-DqRlRIie.js → sequenceDiagram-WL72ISMW-smCwAbus.js} +1 -1
- package/ui-dist/assets/{stateDiagram-FKZM4ZOC-pmJVfUSI.js → stateDiagram-FKZM4ZOC-hzZiJVWR.js} +1 -1
- package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-CKxY16nW.js +1 -0
- package/ui-dist/assets/{timeline-definition-IT6M3QCI-D4a7yShw.js → timeline-definition-IT6M3QCI-C9Bpauwv.js} +1 -1
- package/ui-dist/assets/{treemap-GDKQZRPO-B99Tnc1-.js → treemap-GDKQZRPO-BB3Cb_8q.js} +1 -1
- package/ui-dist/assets/{xychartDiagram-PRI3JC2R-DtVbo4uj.js → xychartDiagram-PRI3JC2R-BR4l4kRx.js} +1 -1
- package/ui-dist/index.html +1 -1
- package/ui-dist/locales/en/common.json +5 -0
- package/ui-dist/locales/zh-CN/common.json +5 -0
- package/ui-dist/assets/channel-CET4O6ry.js +0 -1
- package/ui-dist/assets/classDiagram-2ON5EDUG-D0t_5_AY.js +0 -1
- package/ui-dist/assets/classDiagram-v2-WZHVMYZB-D0t_5_AY.js +0 -1
- package/ui-dist/assets/clone-CsJH_z-2.js +0 -1
- package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-tJvkm5fW.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/routes/issues.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAUxC,OAAO,EAmCL,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAI3B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAkD1D,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,0CAA0C,CAAC;AASlD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AA8BhF,KAAK,oBAAoB,GAAG;IAC1B,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACtF,CAAC;
|
|
1
|
+
{"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/routes/issues.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAUxC,OAAO,EAmCL,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAI3B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAkD1D,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,0CAA0C,CAAC;AASlD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AA8BhF,KAAK,oBAAoB,GAAG;IAC1B,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACtF,CAAC;AAyuBF,wBAAgB,WAAW,CACzB,EAAE,EAAE,EAAE,EACN,OAAO,EAAE,cAAc,EACvB,IAAI,GAAE;IACJ,qBAAqB,CAAC,EAAE;QACtB,0BAA0B,CAAC,KAAK,CAAC,EAAE;YACjC,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,GAAG,CAAC,EAAE,IAAI,CAAC;SACZ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KACtB,CAAC;IACF,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAC7C,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CACtC,8CA03KP"}
|
package/dist/routes/issues.js
CHANGED
|
@@ -63,6 +63,27 @@ function applyCreateIssueStatusDefault(req, res, next) {
|
|
|
63
63
|
function buildAttachmentContentPath(attachmentId) {
|
|
64
64
|
return `/api/attachments/${attachmentId}/content`;
|
|
65
65
|
}
|
|
66
|
+
const GENERIC_ATTACHMENT_CONTENT_TYPES = new Set([
|
|
67
|
+
"application/octet-stream",
|
|
68
|
+
"binary/octet-stream",
|
|
69
|
+
"application/x-binary",
|
|
70
|
+
]);
|
|
71
|
+
function inferVideoContentTypeFromFilename(filename) {
|
|
72
|
+
const lower = (filename ?? "").toLowerCase();
|
|
73
|
+
if (lower.endsWith(".mp4") || lower.endsWith(".m4v"))
|
|
74
|
+
return "video/mp4";
|
|
75
|
+
if (lower.endsWith(".webm"))
|
|
76
|
+
return "video/webm";
|
|
77
|
+
if (lower.endsWith(".mov") || lower.endsWith(".qt") || lower.endsWith(".quicktime"))
|
|
78
|
+
return "video/quicktime";
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
function resolveAttachmentResponseContentType(input) {
|
|
82
|
+
const storedContentType = normalizeContentType(input.storedContentType || input.objectContentType);
|
|
83
|
+
if (!GENERIC_ATTACHMENT_CONTENT_TYPES.has(storedContentType))
|
|
84
|
+
return storedContentType;
|
|
85
|
+
return inferVideoContentTypeFromFilename(input.originalFilename) ?? storedContentType;
|
|
86
|
+
}
|
|
66
87
|
function requiresPaperclipAttachmentMetadata(input, fallback) {
|
|
67
88
|
const type = typeof input.type === "string" ? input.type : fallback?.type ?? null;
|
|
68
89
|
const provider = typeof input.provider === "string" ? input.provider : fallback?.provider ?? null;
|
|
@@ -5314,7 +5335,11 @@ export function issueRoutes(db, storage, opts = {}) {
|
|
|
5314
5335
|
return;
|
|
5315
5336
|
}
|
|
5316
5337
|
const object = await storage.getObject(attachment.companyId, attachment.objectKey, range.kind === "range" ? { range: { start: range.start, end: range.end } } : undefined);
|
|
5317
|
-
const responseContentType =
|
|
5338
|
+
const responseContentType = resolveAttachmentResponseContentType({
|
|
5339
|
+
storedContentType: attachment.contentType,
|
|
5340
|
+
objectContentType: object.contentType,
|
|
5341
|
+
originalFilename: attachment.originalFilename,
|
|
5342
|
+
});
|
|
5318
5343
|
res.setHeader("Content-Type", responseContentType);
|
|
5319
5344
|
res.setHeader("Cache-Control", "private, max-age=60");
|
|
5320
5345
|
res.setHeader("X-Content-Type-Options", "nosniff");
|