@suveren/gateway 0.17.0 → 0.18.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.
- package/bin/suveren-gateway.js +26 -1
- package/content/guides/1-interview.md +31 -0
- package/content/guides/2-package.md +30 -0
- package/content/guides/3-mandates.md +35 -0
- package/content/guides/4-brief.md +30 -0
- package/content/guides/5-agent-process.md +39 -0
- package/content/guides/6-risks.md +14 -0
- package/dist/control-plane/index.mjs +132 -12
- package/dist/mcp-server/chunk-JUFH4SKS.mjs +639 -0
- package/dist/mcp-server/http.mjs +1733 -205
- package/dist/mcp-server/report-verify-cli.mjs +171 -0
- package/dist/ui/assets/index-78vuGrVE.js +111 -0
- package/dist/ui/assets/{index-y1OFeYnS.css → index-Dfh38n-b.css} +1 -1
- package/dist/ui/index.html +2 -2
- package/node_modules/dayjs/.editorconfig +7 -0
- package/node_modules/dayjs/CHANGELOG.md +1022 -0
- package/node_modules/dayjs/LICENSE +21 -0
- package/node_modules/dayjs/README.md +186 -0
- package/node_modules/dayjs/dayjs.min.js +1 -0
- package/node_modules/dayjs/esm/constant.js +25 -0
- package/node_modules/dayjs/esm/index.d.ts +429 -0
- package/node_modules/dayjs/esm/index.js +541 -0
- package/node_modules/dayjs/esm/locale/af.js +39 -0
- package/node_modules/dayjs/esm/locale/am.js +40 -0
- package/node_modules/dayjs/esm/locale/ar-dz.js +41 -0
- package/node_modules/dayjs/esm/locale/ar-iq.js +42 -0
- package/node_modules/dayjs/esm/locale/ar-kw.js +41 -0
- package/node_modules/dayjs/esm/locale/ar-ly.js +27 -0
- package/node_modules/dayjs/esm/locale/ar-ma.js +42 -0
- package/node_modules/dayjs/esm/locale/ar-sa.js +41 -0
- package/node_modules/dayjs/esm/locale/ar-tn.js +42 -0
- package/node_modules/dayjs/esm/locale/ar.js +81 -0
- package/node_modules/dayjs/esm/locale/az.js +39 -0
- package/node_modules/dayjs/esm/locale/be.js +102 -0
- package/node_modules/dayjs/esm/locale/bg.js +55 -0
- package/node_modules/dayjs/esm/locale/bi.js +39 -0
- package/node_modules/dayjs/esm/locale/bm.js +39 -0
- package/node_modules/dayjs/esm/locale/bn-bd.js +81 -0
- package/node_modules/dayjs/esm/locale/bn.js +72 -0
- package/node_modules/dayjs/esm/locale/bo.js +38 -0
- package/node_modules/dayjs/esm/locale/br.js +93 -0
- package/node_modules/dayjs/esm/locale/bs.js +24 -0
- package/node_modules/dayjs/esm/locale/ca.js +44 -0
- package/node_modules/dayjs/esm/locale/cs.js +120 -0
- package/node_modules/dayjs/esm/locale/cv.js +24 -0
- package/node_modules/dayjs/esm/locale/cy.js +39 -0
- package/node_modules/dayjs/esm/locale/da.js +40 -0
- package/node_modules/dayjs/esm/locale/de-at.js +63 -0
- package/node_modules/dayjs/esm/locale/de-ch.js +63 -0
- package/node_modules/dayjs/esm/locale/de.js +64 -0
- package/node_modules/dayjs/esm/locale/dv.js +39 -0
- package/node_modules/dayjs/esm/locale/el.js +39 -0
- package/node_modules/dayjs/esm/locale/en-au.js +41 -0
- package/node_modules/dayjs/esm/locale/en-ca.js +38 -0
- package/node_modules/dayjs/esm/locale/en-gb.js +42 -0
- package/node_modules/dayjs/esm/locale/en-ie.js +39 -0
- package/node_modules/dayjs/esm/locale/en-il.js +38 -0
- package/node_modules/dayjs/esm/locale/en-in.js +42 -0
- package/node_modules/dayjs/esm/locale/en-nz.js +41 -0
- package/node_modules/dayjs/esm/locale/en-sg.js +39 -0
- package/node_modules/dayjs/esm/locale/en-tt.js +42 -0
- package/node_modules/dayjs/esm/locale/en.js +12 -0
- package/node_modules/dayjs/esm/locale/eo.js +39 -0
- package/node_modules/dayjs/esm/locale/es-do.js +39 -0
- package/node_modules/dayjs/esm/locale/es-mx.js +38 -0
- package/node_modules/dayjs/esm/locale/es-pr.js +39 -0
- package/node_modules/dayjs/esm/locale/es-us.js +38 -0
- package/node_modules/dayjs/esm/locale/es.js +39 -0
- package/node_modules/dayjs/esm/locale/et.js +65 -0
- package/node_modules/dayjs/esm/locale/eu.js +43 -0
- package/node_modules/dayjs/esm/locale/fa.js +39 -0
- package/node_modules/dayjs/esm/locale/fi.js +88 -0
- package/node_modules/dayjs/esm/locale/fo.js +39 -0
- package/node_modules/dayjs/esm/locale/fr-ca.js +38 -0
- package/node_modules/dayjs/esm/locale/fr-ch.js +39 -0
- package/node_modules/dayjs/esm/locale/fr.js +41 -0
- package/node_modules/dayjs/esm/locale/fy.js +39 -0
- package/node_modules/dayjs/esm/locale/ga.js +39 -0
- package/node_modules/dayjs/esm/locale/gd.js +39 -0
- package/node_modules/dayjs/esm/locale/gl.js +39 -0
- package/node_modules/dayjs/esm/locale/gom-latn.js +25 -0
- package/node_modules/dayjs/esm/locale/gu.js +38 -0
- package/node_modules/dayjs/esm/locale/he.js +78 -0
- package/node_modules/dayjs/esm/locale/hi.js +38 -0
- package/node_modules/dayjs/esm/locale/hr.js +53 -0
- package/node_modules/dayjs/esm/locale/ht.js +38 -0
- package/node_modules/dayjs/esm/locale/hu.js +61 -0
- package/node_modules/dayjs/esm/locale/hy-am.js +39 -0
- package/node_modules/dayjs/esm/locale/id.js +39 -0
- package/node_modules/dayjs/esm/locale/index.d.ts +11 -0
- package/node_modules/dayjs/esm/locale/is.js +68 -0
- package/node_modules/dayjs/esm/locale/it-ch.js +39 -0
- package/node_modules/dayjs/esm/locale/it.js +39 -0
- package/node_modules/dayjs/esm/locale/ja.js +45 -0
- package/node_modules/dayjs/esm/locale/jv.js +39 -0
- package/node_modules/dayjs/esm/locale/ka.js +39 -0
- package/node_modules/dayjs/esm/locale/kk.js +39 -0
- package/node_modules/dayjs/esm/locale/km.js +42 -0
- package/node_modules/dayjs/esm/locale/kn.js +38 -0
- package/node_modules/dayjs/esm/locale/ko.js +45 -0
- package/node_modules/dayjs/esm/locale/ku.js +77 -0
- package/node_modules/dayjs/esm/locale/ky.js +39 -0
- package/node_modules/dayjs/esm/locale/lb.js +24 -0
- package/node_modules/dayjs/esm/locale/lo.js +38 -0
- package/node_modules/dayjs/esm/locale/lt.js +70 -0
- package/node_modules/dayjs/esm/locale/lv.js +39 -0
- package/node_modules/dayjs/esm/locale/me.js +24 -0
- package/node_modules/dayjs/esm/locale/mi.js +39 -0
- package/node_modules/dayjs/esm/locale/mk.js +39 -0
- package/node_modules/dayjs/esm/locale/ml.js +38 -0
- package/node_modules/dayjs/esm/locale/mn.js +38 -0
- package/node_modules/dayjs/esm/locale/mr.js +23 -0
- package/node_modules/dayjs/esm/locale/ms-my.js +39 -0
- package/node_modules/dayjs/esm/locale/ms.js +39 -0
- package/node_modules/dayjs/esm/locale/mt.js +39 -0
- package/node_modules/dayjs/esm/locale/my.js +39 -0
- package/node_modules/dayjs/esm/locale/nb.js +40 -0
- package/node_modules/dayjs/esm/locale/ne.js +40 -0
- package/node_modules/dayjs/esm/locale/nl-be.js +39 -0
- package/node_modules/dayjs/esm/locale/nl.js +40 -0
- package/node_modules/dayjs/esm/locale/nn.js +39 -0
- package/node_modules/dayjs/esm/locale/oc-lnc.js +39 -0
- package/node_modules/dayjs/esm/locale/pa-in.js +38 -0
- package/node_modules/dayjs/esm/locale/pl.js +87 -0
- package/node_modules/dayjs/esm/locale/pt-br.js +38 -0
- package/node_modules/dayjs/esm/locale/pt.js +40 -0
- package/node_modules/dayjs/esm/locale/rn.js +39 -0
- package/node_modules/dayjs/esm/locale/ro.js +39 -0
- package/node_modules/dayjs/esm/locale/ru.js +99 -0
- package/node_modules/dayjs/esm/locale/rw.js +35 -0
- package/node_modules/dayjs/esm/locale/sd.js +39 -0
- package/node_modules/dayjs/esm/locale/se.js +39 -0
- package/node_modules/dayjs/esm/locale/si.js +38 -0
- package/node_modules/dayjs/esm/locale/sk.js +121 -0
- package/node_modules/dayjs/esm/locale/sl.js +141 -0
- package/node_modules/dayjs/esm/locale/sq.js +39 -0
- package/node_modules/dayjs/esm/locale/sr-cyrl.js +74 -0
- package/node_modules/dayjs/esm/locale/sr.js +74 -0
- package/node_modules/dayjs/esm/locale/ss.js +39 -0
- package/node_modules/dayjs/esm/locale/sv-fi.js +46 -0
- package/node_modules/dayjs/esm/locale/sv.js +44 -0
- package/node_modules/dayjs/esm/locale/sw.js +39 -0
- package/node_modules/dayjs/esm/locale/ta.js +38 -0
- package/node_modules/dayjs/esm/locale/te.js +38 -0
- package/node_modules/dayjs/esm/locale/tet.js +39 -0
- package/node_modules/dayjs/esm/locale/tg.js +39 -0
- package/node_modules/dayjs/esm/locale/th.js +38 -0
- package/node_modules/dayjs/esm/locale/tk.js +39 -0
- package/node_modules/dayjs/esm/locale/tl-ph.js +39 -0
- package/node_modules/dayjs/esm/locale/tlh.js +24 -0
- package/node_modules/dayjs/esm/locale/tr.js +39 -0
- package/node_modules/dayjs/esm/locale/types.d.ts +33 -0
- package/node_modules/dayjs/esm/locale/tzl.js +24 -0
- package/node_modules/dayjs/esm/locale/tzm-latn.js +39 -0
- package/node_modules/dayjs/esm/locale/tzm.js +39 -0
- package/node_modules/dayjs/esm/locale/ug-cn.js +39 -0
- package/node_modules/dayjs/esm/locale/uk.js +77 -0
- package/node_modules/dayjs/esm/locale/ur.js +39 -0
- package/node_modules/dayjs/esm/locale/uz-latn.js +39 -0
- package/node_modules/dayjs/esm/locale/uz.js +39 -0
- package/node_modules/dayjs/esm/locale/vi.js +43 -0
- package/node_modules/dayjs/esm/locale/x-pseudo.js +39 -0
- package/node_modules/dayjs/esm/locale/yo.js +39 -0
- package/node_modules/dayjs/esm/locale/zh-cn.js +67 -0
- package/node_modules/dayjs/esm/locale/zh-hk.js +65 -0
- package/node_modules/dayjs/esm/locale/zh-tw.js +65 -0
- package/node_modules/dayjs/esm/locale/zh.js +67 -0
- package/node_modules/dayjs/esm/plugin/advancedFormat/index.d.ts +4 -0
- package/node_modules/dayjs/esm/plugin/advancedFormat/index.js +66 -0
- package/node_modules/dayjs/esm/plugin/arraySupport/index.d.ts +10 -0
- package/node_modules/dayjs/esm/plugin/arraySupport/index.js +33 -0
- package/node_modules/dayjs/esm/plugin/badMutable/index.d.ts +4 -0
- package/node_modules/dayjs/esm/plugin/badMutable/index.js +61 -0
- package/node_modules/dayjs/esm/plugin/bigIntSupport/index.d.ts +11 -0
- package/node_modules/dayjs/esm/plugin/bigIntSupport/index.js +32 -0
- package/node_modules/dayjs/esm/plugin/buddhistEra/index.d.ts +4 -0
- package/node_modules/dayjs/esm/plugin/buddhistEra/index.js +21 -0
- package/node_modules/dayjs/esm/plugin/calendar/index.d.ts +10 -0
- package/node_modules/dayjs/esm/plugin/calendar/index.js +32 -0
- package/node_modules/dayjs/esm/plugin/customParseFormat/index.d.ts +8 -0
- package/node_modules/dayjs/esm/plugin/customParseFormat/index.js +333 -0
- package/node_modules/dayjs/esm/plugin/dayOfYear/index.d.ts +11 -0
- package/node_modules/dayjs/esm/plugin/dayOfYear/index.js +9 -0
- package/node_modules/dayjs/esm/plugin/devHelper/index.d.ts +4 -0
- package/node_modules/dayjs/esm/plugin/devHelper/index.js +50 -0
- package/node_modules/dayjs/esm/plugin/duration/index.d.ts +88 -0
- package/node_modules/dayjs/esm/plugin/duration/index.js +357 -0
- package/node_modules/dayjs/esm/plugin/isBetween/index.d.ts +10 -0
- package/node_modules/dayjs/esm/plugin/isBetween/index.js +10 -0
- package/node_modules/dayjs/esm/plugin/isLeapYear/index.d.ts +10 -0
- package/node_modules/dayjs/esm/plugin/isLeapYear/index.js +7 -0
- package/node_modules/dayjs/esm/plugin/isMoment/index.d.ts +10 -0
- package/node_modules/dayjs/esm/plugin/isMoment/index.js +5 -0
- package/node_modules/dayjs/esm/plugin/isSameOrAfter/index.d.ts +10 -0
- package/node_modules/dayjs/esm/plugin/isSameOrAfter/index.js +5 -0
- package/node_modules/dayjs/esm/plugin/isSameOrBefore/index.d.ts +10 -0
- package/node_modules/dayjs/esm/plugin/isSameOrBefore/index.js +5 -0
- package/node_modules/dayjs/esm/plugin/isToday/index.d.ts +10 -0
- package/node_modules/dayjs/esm/plugin/isToday/index.js +9 -0
- package/node_modules/dayjs/esm/plugin/isTomorrow/index.d.ts +10 -0
- package/node_modules/dayjs/esm/plugin/isTomorrow/index.js +9 -0
- package/node_modules/dayjs/esm/plugin/isYesterday/index.d.ts +10 -0
- package/node_modules/dayjs/esm/plugin/isYesterday/index.js +9 -0
- package/node_modules/dayjs/esm/plugin/isoWeek/index.d.ts +27 -0
- package/node_modules/dayjs/esm/plugin/isoWeek/index.js +57 -0
- package/node_modules/dayjs/esm/plugin/isoWeeksInYear/index.d.ts +10 -0
- package/node_modules/dayjs/esm/plugin/isoWeeksInYear/index.js +15 -0
- package/node_modules/dayjs/esm/plugin/localeData/index.d.ts +44 -0
- package/node_modules/dayjs/esm/plugin/localeData/index.js +114 -0
- package/node_modules/dayjs/esm/plugin/localizedFormat/index.d.ts +4 -0
- package/node_modules/dayjs/esm/plugin/localizedFormat/index.js +20 -0
- package/node_modules/dayjs/esm/plugin/localizedFormat/utils.js +20 -0
- package/node_modules/dayjs/esm/plugin/minMax/index.d.ts +22 -0
- package/node_modules/dayjs/esm/plugin/minMax/index.js +39 -0
- package/node_modules/dayjs/esm/plugin/negativeYear/index.d.ts +4 -0
- package/node_modules/dayjs/esm/plugin/negativeYear/index.js +36 -0
- package/node_modules/dayjs/esm/plugin/objectSupport/index.d.ts +48 -0
- package/node_modules/dayjs/esm/plugin/objectSupport/index.js +97 -0
- package/node_modules/dayjs/esm/plugin/pluralGetSet/index.d.ts +44 -0
- package/node_modules/dayjs/esm/plugin/pluralGetSet/index.js +7 -0
- package/node_modules/dayjs/esm/plugin/preParsePostFormat/index.d.ts +4 -0
- package/node_modules/dayjs/esm/plugin/preParsePostFormat/index.js +40 -0
- package/node_modules/dayjs/esm/plugin/quarterOfYear/index.d.ts +26 -0
- package/node_modules/dayjs/esm/plugin/quarterOfYear/index.js +41 -0
- package/node_modules/dayjs/esm/plugin/relativeTime/index.d.ts +24 -0
- package/node_modules/dayjs/esm/plugin/relativeTime/index.js +130 -0
- package/node_modules/dayjs/esm/plugin/timezone/index.d.ts +20 -0
- package/node_modules/dayjs/esm/plugin/timezone/index.js +205 -0
- package/node_modules/dayjs/esm/plugin/toArray/index.d.ts +10 -0
- package/node_modules/dayjs/esm/plugin/toArray/index.js +7 -0
- package/node_modules/dayjs/esm/plugin/toObject/index.d.ts +20 -0
- package/node_modules/dayjs/esm/plugin/toObject/index.js +15 -0
- package/node_modules/dayjs/esm/plugin/updateLocale/index.d.ts +8 -0
- package/node_modules/dayjs/esm/plugin/updateLocale/index.js +18 -0
- package/node_modules/dayjs/esm/plugin/utc/index.d.ts +19 -0
- package/node_modules/dayjs/esm/plugin/utc/index.js +188 -0
- package/node_modules/dayjs/esm/plugin/weekOfYear/index.d.ts +12 -0
- package/node_modules/dayjs/esm/plugin/weekOfYear/index.js +44 -0
- package/node_modules/dayjs/esm/plugin/weekYear/index.d.ts +10 -0
- package/node_modules/dayjs/esm/plugin/weekYear/index.js +19 -0
- package/node_modules/dayjs/esm/plugin/weekday/index.d.ts +12 -0
- package/node_modules/dayjs/esm/plugin/weekday/index.js +15 -0
- package/node_modules/dayjs/esm/utils.js +58 -0
- package/node_modules/dayjs/index.d.ts +429 -0
- package/node_modules/dayjs/locale/af.js +1 -0
- package/node_modules/dayjs/locale/am.js +1 -0
- package/node_modules/dayjs/locale/ar-dz.js +1 -0
- package/node_modules/dayjs/locale/ar-iq.js +1 -0
- package/node_modules/dayjs/locale/ar-kw.js +1 -0
- package/node_modules/dayjs/locale/ar-ly.js +1 -0
- package/node_modules/dayjs/locale/ar-ma.js +1 -0
- package/node_modules/dayjs/locale/ar-sa.js +1 -0
- package/node_modules/dayjs/locale/ar-tn.js +1 -0
- package/node_modules/dayjs/locale/ar.js +1 -0
- package/node_modules/dayjs/locale/az.js +1 -0
- package/node_modules/dayjs/locale/be.js +1 -0
- package/node_modules/dayjs/locale/bg.js +1 -0
- package/node_modules/dayjs/locale/bi.js +1 -0
- package/node_modules/dayjs/locale/bm.js +1 -0
- package/node_modules/dayjs/locale/bn-bd.js +1 -0
- package/node_modules/dayjs/locale/bn.js +1 -0
- package/node_modules/dayjs/locale/bo.js +1 -0
- package/node_modules/dayjs/locale/br.js +1 -0
- package/node_modules/dayjs/locale/bs.js +1 -0
- package/node_modules/dayjs/locale/ca.js +1 -0
- package/node_modules/dayjs/locale/cs.js +1 -0
- package/node_modules/dayjs/locale/cv.js +1 -0
- package/node_modules/dayjs/locale/cy.js +1 -0
- package/node_modules/dayjs/locale/da.js +1 -0
- package/node_modules/dayjs/locale/de-at.js +1 -0
- package/node_modules/dayjs/locale/de-ch.js +1 -0
- package/node_modules/dayjs/locale/de.js +1 -0
- package/node_modules/dayjs/locale/dv.js +1 -0
- package/node_modules/dayjs/locale/el.js +1 -0
- package/node_modules/dayjs/locale/en-au.js +1 -0
- package/node_modules/dayjs/locale/en-ca.js +1 -0
- package/node_modules/dayjs/locale/en-gb.js +1 -0
- package/node_modules/dayjs/locale/en-ie.js +1 -0
- package/node_modules/dayjs/locale/en-il.js +1 -0
- package/node_modules/dayjs/locale/en-in.js +1 -0
- package/node_modules/dayjs/locale/en-nz.js +1 -0
- package/node_modules/dayjs/locale/en-sg.js +1 -0
- package/node_modules/dayjs/locale/en-tt.js +1 -0
- package/node_modules/dayjs/locale/en.js +1 -0
- package/node_modules/dayjs/locale/eo.js +1 -0
- package/node_modules/dayjs/locale/es-do.js +1 -0
- package/node_modules/dayjs/locale/es-mx.js +1 -0
- package/node_modules/dayjs/locale/es-pr.js +1 -0
- package/node_modules/dayjs/locale/es-us.js +1 -0
- package/node_modules/dayjs/locale/es.js +1 -0
- package/node_modules/dayjs/locale/et.js +1 -0
- package/node_modules/dayjs/locale/eu.js +1 -0
- package/node_modules/dayjs/locale/fa.js +1 -0
- package/node_modules/dayjs/locale/fi.js +1 -0
- package/node_modules/dayjs/locale/fo.js +1 -0
- package/node_modules/dayjs/locale/fr-ca.js +1 -0
- package/node_modules/dayjs/locale/fr-ch.js +1 -0
- package/node_modules/dayjs/locale/fr.js +1 -0
- package/node_modules/dayjs/locale/fy.js +1 -0
- package/node_modules/dayjs/locale/ga.js +1 -0
- package/node_modules/dayjs/locale/gd.js +1 -0
- package/node_modules/dayjs/locale/gl.js +1 -0
- package/node_modules/dayjs/locale/gom-latn.js +1 -0
- package/node_modules/dayjs/locale/gu.js +1 -0
- package/node_modules/dayjs/locale/he.js +1 -0
- package/node_modules/dayjs/locale/hi.js +1 -0
- package/node_modules/dayjs/locale/hr.js +1 -0
- package/node_modules/dayjs/locale/ht.js +1 -0
- package/node_modules/dayjs/locale/hu.js +1 -0
- package/node_modules/dayjs/locale/hy-am.js +1 -0
- package/node_modules/dayjs/locale/id.js +1 -0
- package/node_modules/dayjs/locale/index.d.ts +11 -0
- package/node_modules/dayjs/locale/is.js +1 -0
- package/node_modules/dayjs/locale/it-ch.js +1 -0
- package/node_modules/dayjs/locale/it.js +1 -0
- package/node_modules/dayjs/locale/ja.js +1 -0
- package/node_modules/dayjs/locale/jv.js +1 -0
- package/node_modules/dayjs/locale/ka.js +1 -0
- package/node_modules/dayjs/locale/kk.js +1 -0
- package/node_modules/dayjs/locale/km.js +1 -0
- package/node_modules/dayjs/locale/kn.js +1 -0
- package/node_modules/dayjs/locale/ko.js +1 -0
- package/node_modules/dayjs/locale/ku.js +1 -0
- package/node_modules/dayjs/locale/ky.js +1 -0
- package/node_modules/dayjs/locale/lb.js +1 -0
- package/node_modules/dayjs/locale/lo.js +1 -0
- package/node_modules/dayjs/locale/lt.js +1 -0
- package/node_modules/dayjs/locale/lv.js +1 -0
- package/node_modules/dayjs/locale/me.js +1 -0
- package/node_modules/dayjs/locale/mi.js +1 -0
- package/node_modules/dayjs/locale/mk.js +1 -0
- package/node_modules/dayjs/locale/ml.js +1 -0
- package/node_modules/dayjs/locale/mn.js +1 -0
- package/node_modules/dayjs/locale/mr.js +1 -0
- package/node_modules/dayjs/locale/ms-my.js +1 -0
- package/node_modules/dayjs/locale/ms.js +1 -0
- package/node_modules/dayjs/locale/mt.js +1 -0
- package/node_modules/dayjs/locale/my.js +1 -0
- package/node_modules/dayjs/locale/nb.js +1 -0
- package/node_modules/dayjs/locale/ne.js +1 -0
- package/node_modules/dayjs/locale/nl-be.js +1 -0
- package/node_modules/dayjs/locale/nl.js +1 -0
- package/node_modules/dayjs/locale/nn.js +1 -0
- package/node_modules/dayjs/locale/oc-lnc.js +1 -0
- package/node_modules/dayjs/locale/pa-in.js +1 -0
- package/node_modules/dayjs/locale/pl.js +1 -0
- package/node_modules/dayjs/locale/pt-br.js +1 -0
- package/node_modules/dayjs/locale/pt.js +1 -0
- package/node_modules/dayjs/locale/rn.js +1 -0
- package/node_modules/dayjs/locale/ro.js +1 -0
- package/node_modules/dayjs/locale/ru.js +1 -0
- package/node_modules/dayjs/locale/rw.js +1 -0
- package/node_modules/dayjs/locale/sd.js +1 -0
- package/node_modules/dayjs/locale/se.js +1 -0
- package/node_modules/dayjs/locale/si.js +1 -0
- package/node_modules/dayjs/locale/sk.js +1 -0
- package/node_modules/dayjs/locale/sl.js +1 -0
- package/node_modules/dayjs/locale/sq.js +1 -0
- package/node_modules/dayjs/locale/sr-cyrl.js +1 -0
- package/node_modules/dayjs/locale/sr.js +1 -0
- package/node_modules/dayjs/locale/ss.js +1 -0
- package/node_modules/dayjs/locale/sv-fi.js +1 -0
- package/node_modules/dayjs/locale/sv.js +1 -0
- package/node_modules/dayjs/locale/sw.js +1 -0
- package/node_modules/dayjs/locale/ta.js +1 -0
- package/node_modules/dayjs/locale/te.js +1 -0
- package/node_modules/dayjs/locale/tet.js +1 -0
- package/node_modules/dayjs/locale/tg.js +1 -0
- package/node_modules/dayjs/locale/th.js +1 -0
- package/node_modules/dayjs/locale/tk.js +1 -0
- package/node_modules/dayjs/locale/tl-ph.js +1 -0
- package/node_modules/dayjs/locale/tlh.js +1 -0
- package/node_modules/dayjs/locale/tr.js +1 -0
- package/node_modules/dayjs/locale/types.d.ts +33 -0
- package/node_modules/dayjs/locale/tzl.js +1 -0
- package/node_modules/dayjs/locale/tzm-latn.js +1 -0
- package/node_modules/dayjs/locale/tzm.js +1 -0
- package/node_modules/dayjs/locale/ug-cn.js +1 -0
- package/node_modules/dayjs/locale/uk.js +1 -0
- package/node_modules/dayjs/locale/ur.js +1 -0
- package/node_modules/dayjs/locale/uz-latn.js +1 -0
- package/node_modules/dayjs/locale/uz.js +1 -0
- package/node_modules/dayjs/locale/vi.js +1 -0
- package/node_modules/dayjs/locale/x-pseudo.js +1 -0
- package/node_modules/dayjs/locale/yo.js +1 -0
- package/node_modules/dayjs/locale/zh-cn.js +1 -0
- package/node_modules/dayjs/locale/zh-hk.js +1 -0
- package/node_modules/dayjs/locale/zh-tw.js +1 -0
- package/node_modules/dayjs/locale/zh.js +1 -0
- package/node_modules/dayjs/locale.json +1 -0
- package/node_modules/dayjs/package.json +86 -0
- package/node_modules/dayjs/plugin/advancedFormat.d.ts +4 -0
- package/node_modules/dayjs/plugin/advancedFormat.js +1 -0
- package/node_modules/dayjs/plugin/arraySupport.d.ts +10 -0
- package/node_modules/dayjs/plugin/arraySupport.js +1 -0
- package/node_modules/dayjs/plugin/badMutable.d.ts +4 -0
- package/node_modules/dayjs/plugin/badMutable.js +1 -0
- package/node_modules/dayjs/plugin/bigIntSupport.d.ts +11 -0
- package/node_modules/dayjs/plugin/bigIntSupport.js +1 -0
- package/node_modules/dayjs/plugin/buddhistEra.d.ts +4 -0
- package/node_modules/dayjs/plugin/buddhistEra.js +1 -0
- package/node_modules/dayjs/plugin/calendar.d.ts +10 -0
- package/node_modules/dayjs/plugin/calendar.js +1 -0
- package/node_modules/dayjs/plugin/customParseFormat.d.ts +8 -0
- package/node_modules/dayjs/plugin/customParseFormat.js +1 -0
- package/node_modules/dayjs/plugin/dayOfYear.d.ts +11 -0
- package/node_modules/dayjs/plugin/dayOfYear.js +1 -0
- package/node_modules/dayjs/plugin/devHelper.d.ts +4 -0
- package/node_modules/dayjs/plugin/devHelper.js +1 -0
- package/node_modules/dayjs/plugin/duration.d.ts +88 -0
- package/node_modules/dayjs/plugin/duration.js +1 -0
- package/node_modules/dayjs/plugin/isBetween.d.ts +10 -0
- package/node_modules/dayjs/plugin/isBetween.js +1 -0
- package/node_modules/dayjs/plugin/isLeapYear.d.ts +10 -0
- package/node_modules/dayjs/plugin/isLeapYear.js +1 -0
- package/node_modules/dayjs/plugin/isMoment.d.ts +10 -0
- package/node_modules/dayjs/plugin/isMoment.js +1 -0
- package/node_modules/dayjs/plugin/isSameOrAfter.d.ts +10 -0
- package/node_modules/dayjs/plugin/isSameOrAfter.js +1 -0
- package/node_modules/dayjs/plugin/isSameOrBefore.d.ts +10 -0
- package/node_modules/dayjs/plugin/isSameOrBefore.js +1 -0
- package/node_modules/dayjs/plugin/isToday.d.ts +10 -0
- package/node_modules/dayjs/plugin/isToday.js +1 -0
- package/node_modules/dayjs/plugin/isTomorrow.d.ts +10 -0
- package/node_modules/dayjs/plugin/isTomorrow.js +1 -0
- package/node_modules/dayjs/plugin/isYesterday.d.ts +10 -0
- package/node_modules/dayjs/plugin/isYesterday.js +1 -0
- package/node_modules/dayjs/plugin/isoWeek.d.ts +27 -0
- package/node_modules/dayjs/plugin/isoWeek.js +1 -0
- package/node_modules/dayjs/plugin/isoWeeksInYear.d.ts +10 -0
- package/node_modules/dayjs/plugin/isoWeeksInYear.js +1 -0
- package/node_modules/dayjs/plugin/localeData.d.ts +44 -0
- package/node_modules/dayjs/plugin/localeData.js +1 -0
- package/node_modules/dayjs/plugin/localizedFormat.d.ts +4 -0
- package/node_modules/dayjs/plugin/localizedFormat.js +1 -0
- package/node_modules/dayjs/plugin/minMax.d.ts +22 -0
- package/node_modules/dayjs/plugin/minMax.js +1 -0
- package/node_modules/dayjs/plugin/negativeYear.d.ts +4 -0
- package/node_modules/dayjs/plugin/negativeYear.js +1 -0
- package/node_modules/dayjs/plugin/objectSupport.d.ts +48 -0
- package/node_modules/dayjs/plugin/objectSupport.js +1 -0
- package/node_modules/dayjs/plugin/pluralGetSet.d.ts +44 -0
- package/node_modules/dayjs/plugin/pluralGetSet.js +1 -0
- package/node_modules/dayjs/plugin/preParsePostFormat.d.ts +4 -0
- package/node_modules/dayjs/plugin/preParsePostFormat.js +1 -0
- package/node_modules/dayjs/plugin/quarterOfYear.d.ts +26 -0
- package/node_modules/dayjs/plugin/quarterOfYear.js +1 -0
- package/node_modules/dayjs/plugin/relativeTime.d.ts +24 -0
- package/node_modules/dayjs/plugin/relativeTime.js +1 -0
- package/node_modules/dayjs/plugin/timezone.d.ts +20 -0
- package/node_modules/dayjs/plugin/timezone.js +1 -0
- package/node_modules/dayjs/plugin/toArray.d.ts +10 -0
- package/node_modules/dayjs/plugin/toArray.js +1 -0
- package/node_modules/dayjs/plugin/toObject.d.ts +20 -0
- package/node_modules/dayjs/plugin/toObject.js +1 -0
- package/node_modules/dayjs/plugin/updateLocale.d.ts +8 -0
- package/node_modules/dayjs/plugin/updateLocale.js +1 -0
- package/node_modules/dayjs/plugin/utc.d.ts +19 -0
- package/node_modules/dayjs/plugin/utc.js +1 -0
- package/node_modules/dayjs/plugin/weekOfYear.d.ts +12 -0
- package/node_modules/dayjs/plugin/weekOfYear.js +1 -0
- package/node_modules/dayjs/plugin/weekYear.d.ts +10 -0
- package/node_modules/dayjs/plugin/weekYear.js +1 -0
- package/node_modules/dayjs/plugin/weekday.d.ts +12 -0
- package/node_modules/dayjs/plugin/weekday.js +1 -0
- package/node_modules/deepmerge/.editorconfig +7 -0
- package/node_modules/deepmerge/.eslintcache +1 -0
- package/node_modules/deepmerge/changelog.md +167 -0
- package/node_modules/deepmerge/dist/cjs.js +133 -0
- package/node_modules/deepmerge/dist/umd.js +139 -0
- package/node_modules/deepmerge/index.d.ts +20 -0
- package/node_modules/deepmerge/index.js +106 -0
- package/node_modules/deepmerge/license.txt +21 -0
- package/node_modules/deepmerge/package.json +42 -0
- package/node_modules/deepmerge/readme.md +264 -0
- package/node_modules/deepmerge/rollup.config.js +22 -0
- package/node_modules/dom-serializer/LICENSE +7 -0
- package/node_modules/dom-serializer/README.md +115 -0
- package/node_modules/dom-serializer/dist/foreign-names.d.ts +11 -0
- package/node_modules/dom-serializer/dist/foreign-names.d.ts.map +1 -0
- package/node_modules/dom-serializer/dist/foreign-names.js +15 -0
- package/node_modules/dom-serializer/dist/foreign-names.js.map +1 -0
- package/node_modules/dom-serializer/dist/index.d.ts +72 -0
- package/node_modules/dom-serializer/dist/index.d.ts.map +1 -0
- package/node_modules/dom-serializer/dist/index.js +173 -0
- package/node_modules/dom-serializer/dist/index.js.map +1 -0
- package/node_modules/dom-serializer/package.json +69 -0
- package/node_modules/dom-serializer/src/foreign-names.ts +19 -0
- package/node_modules/dom-serializer/src/index.ts +315 -0
- package/node_modules/domelementtype/LICENSE +11 -0
- package/node_modules/domelementtype/dist/index.d.ts +48 -0
- package/node_modules/domelementtype/dist/index.d.ts.map +1 -0
- package/node_modules/domelementtype/dist/index.js +60 -0
- package/node_modules/domelementtype/package.json +59 -0
- package/node_modules/domelementtype/readme.md +1 -0
- package/node_modules/domhandler/LICENSE +11 -0
- package/node_modules/domhandler/dist/index.d.ts +79 -0
- package/node_modules/domhandler/dist/index.d.ts.map +1 -0
- package/node_modules/domhandler/dist/index.js +155 -0
- package/node_modules/domhandler/dist/node.d.ts +264 -0
- package/node_modules/domhandler/dist/node.d.ts.map +1 -0
- package/node_modules/domhandler/dist/node.js +359 -0
- package/node_modules/domhandler/package.json +65 -0
- package/node_modules/domhandler/readme.md +86 -0
- package/node_modules/domutils/LICENSE +11 -0
- package/node_modules/domutils/dist/feeds.d.ts +71 -0
- package/node_modules/domutils/dist/feeds.d.ts.map +1 -0
- package/node_modules/domutils/dist/feeds.js +180 -0
- package/node_modules/domutils/dist/feeds.js.map +1 -0
- package/node_modules/domutils/dist/helpers.d.ts +59 -0
- package/node_modules/domutils/dist/helpers.d.ts.map +1 -0
- package/node_modules/domutils/dist/helpers.js +136 -0
- package/node_modules/domutils/dist/helpers.js.map +1 -0
- package/node_modules/domutils/dist/index.d.ts +8 -0
- package/node_modules/domutils/dist/index.d.ts.map +1 -0
- package/node_modules/domutils/dist/index.js +8 -0
- package/node_modules/domutils/dist/index.js.map +1 -0
- package/node_modules/domutils/dist/legacy.d.ts +79 -0
- package/node_modules/domutils/dist/legacy.d.ts.map +1 -0
- package/node_modules/domutils/dist/legacy.js +152 -0
- package/node_modules/domutils/dist/legacy.js.map +1 -0
- package/node_modules/domutils/dist/manipulation.d.ts +49 -0
- package/node_modules/domutils/dist/manipulation.d.ts.map +1 -0
- package/node_modules/domutils/dist/manipulation.js +138 -0
- package/node_modules/domutils/dist/manipulation.js.map +1 -0
- package/node_modules/domutils/dist/querying.d.ts +54 -0
- package/node_modules/domutils/dist/querying.d.ts.map +1 -0
- package/node_modules/domutils/dist/querying.js +129 -0
- package/node_modules/domutils/dist/querying.js.map +1 -0
- package/node_modules/domutils/dist/stringify.d.ts +46 -0
- package/node_modules/domutils/dist/stringify.d.ts.map +1 -0
- package/node_modules/domutils/dist/stringify.js +81 -0
- package/node_modules/domutils/dist/stringify.js.map +1 -0
- package/node_modules/domutils/dist/traversal.d.ts +74 -0
- package/node_modules/domutils/dist/traversal.d.ts.map +1 -0
- package/node_modules/domutils/dist/traversal.js +105 -0
- package/node_modules/domutils/dist/traversal.js.map +1 -0
- package/node_modules/domutils/package.json +69 -0
- package/node_modules/domutils/readme.md +25 -0
- package/node_modules/domutils/src/__snapshots__/feeds.spec.ts.snap +103 -0
- package/node_modules/domutils/src/feeds.ts +301 -0
- package/node_modules/domutils/src/helpers.ts +154 -0
- package/node_modules/domutils/src/index.ts +7 -0
- package/node_modules/domutils/src/legacy.ts +224 -0
- package/node_modules/domutils/src/manipulation.ts +156 -0
- package/node_modules/domutils/src/querying.ts +172 -0
- package/node_modules/domutils/src/stringify.ts +90 -0
- package/node_modules/domutils/src/traversal.ts +132 -0
- package/node_modules/entities/LICENSE +11 -0
- package/node_modules/entities/dist/decode-codepoint.d.ts +28 -0
- package/node_modules/entities/dist/decode-codepoint.d.ts.map +1 -0
- package/node_modules/entities/dist/decode-codepoint.js +61 -0
- package/node_modules/entities/dist/decode-codepoint.js.map +1 -0
- package/node_modules/entities/dist/decode.d.ts +227 -0
- package/node_modules/entities/dist/decode.d.ts.map +1 -0
- package/node_modules/entities/dist/decode.js +1132 -0
- package/node_modules/entities/dist/decode.js.map +1 -0
- package/node_modules/entities/dist/encode.d.ts +26 -0
- package/node_modules/entities/dist/encode.d.ts.map +1 -0
- package/node_modules/entities/dist/encode.js +295 -0
- package/node_modules/entities/dist/encode.js.map +1 -0
- package/node_modules/entities/dist/escape.d.ts +60 -0
- package/node_modules/entities/dist/escape.d.ts.map +1 -0
- package/node_modules/entities/dist/escape.js +172 -0
- package/node_modules/entities/dist/escape.js.map +1 -0
- package/node_modules/entities/dist/generated/decode-data-html.d.ts +3 -0
- package/node_modules/entities/dist/generated/decode-data-html.d.ts.map +1 -0
- package/node_modules/entities/dist/generated/decode-data-html.js +5 -0
- package/node_modules/entities/dist/generated/decode-data-html.js.map +1 -0
- package/node_modules/entities/dist/generated/decode-data-xml.d.ts +3 -0
- package/node_modules/entities/dist/generated/decode-data-xml.d.ts.map +1 -0
- package/node_modules/entities/dist/generated/decode-data-xml.js +7 -0
- package/node_modules/entities/dist/generated/decode-data-xml.js.map +1 -0
- package/node_modules/entities/dist/generated/encode-html.d.ts +3 -0
- package/node_modules/entities/dist/generated/encode-html.d.ts.map +1 -0
- package/node_modules/entities/dist/generated/encode-html.js +3 -0
- package/node_modules/entities/dist/generated/encode-html.js.map +1 -0
- package/node_modules/entities/dist/index.d.ts +89 -0
- package/node_modules/entities/dist/index.d.ts.map +1 -0
- package/node_modules/entities/dist/index.js +87 -0
- package/node_modules/entities/dist/index.js.map +1 -0
- package/node_modules/entities/dist/internal/bin-trie-flags.d.ts +48 -0
- package/node_modules/entities/dist/internal/bin-trie-flags.d.ts.map +1 -0
- package/node_modules/entities/dist/internal/bin-trie-flags.js +49 -0
- package/node_modules/entities/dist/internal/bin-trie-flags.js.map +1 -0
- package/node_modules/entities/dist/internal/decode-shared.d.ts +38 -0
- package/node_modules/entities/dist/internal/decode-shared.d.ts.map +1 -0
- package/node_modules/entities/dist/internal/decode-shared.js +195 -0
- package/node_modules/entities/dist/internal/decode-shared.js.map +1 -0
- package/node_modules/entities/package.json +83 -0
- package/node_modules/entities/readme.md +131 -0
- package/node_modules/entities/src/decode-codepoint.ts +69 -0
- package/node_modules/entities/src/decode.ts +1368 -0
- package/node_modules/entities/src/encode.ts +337 -0
- package/node_modules/entities/src/escape.ts +187 -0
- package/node_modules/entities/src/generated/decode-data-html.ts +12 -0
- package/node_modules/entities/src/generated/decode-data-xml.ts +7 -0
- package/node_modules/entities/src/generated/encode-html.ts +3 -0
- package/node_modules/entities/src/index.ts +160 -0
- package/node_modules/entities/src/internal/bin-trie-flags.ts +47 -0
- package/node_modules/entities/src/internal/decode-shared.ts +209 -0
- package/node_modules/escape-string-regexp/index.d.ts +18 -0
- package/node_modules/escape-string-regexp/index.js +13 -0
- package/node_modules/escape-string-regexp/license +9 -0
- package/node_modules/escape-string-regexp/package.json +38 -0
- package/node_modules/escape-string-regexp/readme.md +34 -0
- package/node_modules/express-rate-limit/dist/index.cjs +9 -7
- package/node_modules/express-rate-limit/dist/index.mjs +9 -7
- package/node_modules/express-rate-limit/package.json +9 -9
- package/node_modules/htmlparser2/LICENSE +18 -0
- package/node_modules/htmlparser2/README.md +257 -0
- package/node_modules/htmlparser2/dist/Parser.d.ts +257 -0
- package/node_modules/htmlparser2/dist/Parser.d.ts.map +1 -0
- package/node_modules/htmlparser2/dist/Parser.js +644 -0
- package/node_modules/htmlparser2/dist/Parser.js.map +1 -0
- package/node_modules/htmlparser2/dist/Tokenizer.d.ts +194 -0
- package/node_modules/htmlparser2/dist/Tokenizer.d.ts.map +1 -0
- package/node_modules/htmlparser2/dist/Tokenizer.js +1056 -0
- package/node_modules/htmlparser2/dist/Tokenizer.js.map +1 -0
- package/node_modules/htmlparser2/dist/WebWritableStream.d.ts +24 -0
- package/node_modules/htmlparser2/dist/WebWritableStream.d.ts.map +1 -0
- package/node_modules/htmlparser2/dist/WebWritableStream.js +44 -0
- package/node_modules/htmlparser2/dist/WebWritableStream.js.map +1 -0
- package/node_modules/htmlparser2/dist/WritableStream.d.ts +14 -0
- package/node_modules/htmlparser2/dist/WritableStream.d.ts.map +1 -0
- package/node_modules/htmlparser2/dist/WritableStream.js +32 -0
- package/node_modules/htmlparser2/dist/WritableStream.js.map +1 -0
- package/node_modules/htmlparser2/dist/index.d.ts +34 -0
- package/node_modules/htmlparser2/dist/index.d.ts.map +1 -0
- package/node_modules/htmlparser2/dist/index.js +46 -0
- package/node_modules/htmlparser2/dist/index.js.map +1 -0
- package/node_modules/htmlparser2/package.json +86 -0
- package/node_modules/htmlparser2/src/Parser.ts +823 -0
- package/node_modules/htmlparser2/src/Tokenizer.ts +1150 -0
- package/node_modules/htmlparser2/src/WebWritableStream.ts +47 -0
- package/node_modules/htmlparser2/src/WritableStream.ts +42 -0
- package/node_modules/htmlparser2/src/index.ts +86 -0
- package/node_modules/launder/.travis.yml +4 -0
- package/node_modules/launder/CHANGELOG.md +80 -0
- package/node_modules/launder/LICENSE.md +7 -0
- package/node_modules/launder/README.md +177 -0
- package/node_modules/launder/eslint.config.js +6 -0
- package/node_modules/launder/index.js +538 -0
- package/node_modules/launder/logos/logo-box-madefor.png +0 -0
- package/node_modules/launder/package.json +38 -0
- package/node_modules/launder/test/test.js +775 -0
- package/node_modules/nanoid/LICENSE +20 -0
- package/node_modules/nanoid/README.md +39 -0
- package/node_modules/nanoid/async/index.browser.cjs +43 -0
- package/node_modules/nanoid/async/index.browser.js +43 -0
- package/node_modules/nanoid/async/index.cjs +47 -0
- package/node_modules/nanoid/async/index.d.cts +56 -0
- package/node_modules/nanoid/async/index.d.ts +56 -0
- package/node_modules/nanoid/async/index.js +47 -0
- package/node_modules/nanoid/async/index.native.js +38 -0
- package/node_modules/nanoid/async/package.json +12 -0
- package/node_modules/nanoid/bin/nanoid.cjs +55 -0
- package/node_modules/nanoid/index.browser.cjs +45 -0
- package/node_modules/nanoid/index.browser.js +45 -0
- package/node_modules/nanoid/index.cjs +63 -0
- package/node_modules/nanoid/index.d.cts +91 -0
- package/node_modules/nanoid/index.d.ts +91 -0
- package/node_modules/nanoid/index.js +63 -0
- package/node_modules/nanoid/nanoid.js +1 -0
- package/node_modules/nanoid/non-secure/index.cjs +24 -0
- package/node_modules/nanoid/non-secure/index.d.ts +33 -0
- package/node_modules/nanoid/non-secure/index.js +24 -0
- package/node_modules/nanoid/non-secure/package.json +6 -0
- package/node_modules/nanoid/package.json +89 -0
- package/node_modules/nanoid/url-alphabet/index.cjs +4 -0
- package/node_modules/nanoid/url-alphabet/index.js +4 -0
- package/node_modules/nanoid/url-alphabet/package.json +6 -0
- package/node_modules/parse-srcset/.jscs.json +83 -0
- package/node_modules/parse-srcset/.jshintrc +15 -0
- package/node_modules/parse-srcset/.npmignore +8 -0
- package/node_modules/parse-srcset/LICENSE +22 -0
- package/node_modules/parse-srcset/README.md +19 -0
- package/node_modules/parse-srcset/package.json +25 -0
- package/node_modules/parse-srcset/src/parse-srcset.js +330 -0
- package/node_modules/parse-srcset/tests/he.js +329 -0
- package/node_modules/parse-srcset/tests/intern.js +74 -0
- package/node_modules/parse-srcset/tests/unit/ps.js +345 -0
- package/node_modules/picocolors/LICENSE +15 -0
- package/node_modules/picocolors/README.md +21 -0
- package/node_modules/picocolors/package.json +25 -0
- package/node_modules/picocolors/picocolors.browser.js +4 -0
- package/node_modules/picocolors/picocolors.d.ts +5 -0
- package/node_modules/picocolors/picocolors.js +75 -0
- package/node_modules/picocolors/types.d.ts +51 -0
- package/node_modules/postcss/LICENSE +20 -0
- package/node_modules/postcss/README.md +27 -0
- package/node_modules/postcss/lib/at-rule.d.ts +139 -0
- package/node_modules/postcss/lib/at-rule.js +25 -0
- package/node_modules/postcss/lib/comment.d.ts +67 -0
- package/node_modules/postcss/lib/comment.js +13 -0
- package/node_modules/postcss/lib/container.d.ts +474 -0
- package/node_modules/postcss/lib/container.js +494 -0
- package/node_modules/postcss/lib/css-syntax-error.d.ts +247 -0
- package/node_modules/postcss/lib/css-syntax-error.js +133 -0
- package/node_modules/postcss/lib/declaration.d.ts +150 -0
- package/node_modules/postcss/lib/declaration.js +24 -0
- package/node_modules/postcss/lib/document.d.ts +68 -0
- package/node_modules/postcss/lib/document.js +33 -0
- package/node_modules/postcss/lib/fromJSON.d.ts +9 -0
- package/node_modules/postcss/lib/fromJSON.js +107 -0
- package/node_modules/postcss/lib/input.d.ts +226 -0
- package/node_modules/postcss/lib/input.js +282 -0
- package/node_modules/postcss/lib/lazy-result.d.ts +189 -0
- package/node_modules/postcss/lib/lazy-result.js +626 -0
- package/node_modules/postcss/lib/list.d.ts +60 -0
- package/node_modules/postcss/lib/list.js +79 -0
- package/node_modules/postcss/lib/map-generator.js +383 -0
- package/node_modules/postcss/lib/no-work-result.d.ts +45 -0
- package/node_modules/postcss/lib/no-work-result.js +137 -0
- package/node_modules/postcss/lib/node.d.ts +555 -0
- package/node_modules/postcss/lib/node.js +494 -0
- package/node_modules/postcss/lib/parse.d.ts +9 -0
- package/node_modules/postcss/lib/parse.js +42 -0
- package/node_modules/postcss/lib/parser.js +626 -0
- package/node_modules/postcss/lib/postcss.d.mts +66 -0
- package/node_modules/postcss/lib/postcss.d.ts +464 -0
- package/node_modules/postcss/lib/postcss.js +101 -0
- package/node_modules/postcss/lib/postcss.mjs +30 -0
- package/node_modules/postcss/lib/previous-map.d.ts +80 -0
- package/node_modules/postcss/lib/previous-map.js +176 -0
- package/node_modules/postcss/lib/processor.d.ts +114 -0
- package/node_modules/postcss/lib/processor.js +67 -0
- package/node_modules/postcss/lib/result.d.ts +204 -0
- package/node_modules/postcss/lib/result.js +42 -0
- package/node_modules/postcss/lib/root.d.ts +86 -0
- package/node_modules/postcss/lib/root.js +76 -0
- package/node_modules/postcss/lib/rule.d.ts +126 -0
- package/node_modules/postcss/lib/rule.js +27 -0
- package/node_modules/postcss/lib/stringifier.d.ts +45 -0
- package/node_modules/postcss/lib/stringifier.js +457 -0
- package/node_modules/postcss/lib/stringify.d.ts +9 -0
- package/node_modules/postcss/lib/stringify.js +69 -0
- package/node_modules/postcss/lib/symbols.js +5 -0
- package/node_modules/postcss/lib/terminal-highlight.js +70 -0
- package/node_modules/postcss/lib/tokenize.js +270 -0
- package/node_modules/postcss/lib/warn-once.js +13 -0
- package/node_modules/postcss/lib/warning.d.ts +146 -0
- package/node_modules/postcss/lib/warning.js +47 -0
- package/node_modules/postcss/package.json +88 -0
- package/node_modules/sanitize-html/LICENSE +7 -0
- package/node_modules/sanitize-html/README.md +877 -0
- package/node_modules/sanitize-html/index.js +1255 -0
- package/node_modules/sanitize-html/package.json +49 -0
- package/node_modules/source-map-js/LICENSE +28 -0
- package/node_modules/source-map-js/README.md +765 -0
- package/node_modules/source-map-js/lib/array-set.js +121 -0
- package/node_modules/source-map-js/lib/base64-vlq.js +140 -0
- package/node_modules/source-map-js/lib/base64.js +67 -0
- package/node_modules/source-map-js/lib/binary-search.js +111 -0
- package/node_modules/source-map-js/lib/mapping-list.js +79 -0
- package/node_modules/source-map-js/lib/quick-sort.js +141 -0
- package/node_modules/source-map-js/lib/source-map-consumer.d.ts +1 -0
- package/node_modules/source-map-js/lib/source-map-consumer.js +1236 -0
- package/node_modules/source-map-js/lib/source-map-generator.d.ts +1 -0
- package/node_modules/source-map-js/lib/source-map-generator.js +446 -0
- package/node_modules/source-map-js/lib/source-node.d.ts +1 -0
- package/node_modules/source-map-js/lib/source-node.js +420 -0
- package/node_modules/source-map-js/lib/util.js +594 -0
- package/node_modules/source-map-js/package.json +71 -0
- package/node_modules/source-map-js/source-map.d.ts +104 -0
- package/node_modules/source-map-js/source-map.js +8 -0
- package/package.json +5 -1
- package/server.js +3 -0
- package/dist/ui/assets/index-BKgX8_Zh.js +0 -111
|
@@ -0,0 +1,639 @@
|
|
|
1
|
+
// src/lib/as-pairing.ts
|
|
2
|
+
import { createHash } from "crypto";
|
|
3
|
+
import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from "fs";
|
|
4
|
+
import { dirname, join } from "path";
|
|
5
|
+
function pairingPath(dataDir) {
|
|
6
|
+
return join(dataDir, "as-pairing.json");
|
|
7
|
+
}
|
|
8
|
+
function readPairing(dataDir) {
|
|
9
|
+
const path = pairingPath(dataDir);
|
|
10
|
+
if (!existsSync(path)) return null;
|
|
11
|
+
try {
|
|
12
|
+
const data = JSON.parse(readFileSync(path, "utf-8"));
|
|
13
|
+
if (typeof data.asUrl !== "string" || typeof data.publicKeyHex !== "string") return null;
|
|
14
|
+
return {
|
|
15
|
+
asUrl: data.asUrl,
|
|
16
|
+
publicKeyHex: data.publicKeyHex,
|
|
17
|
+
pairedAt: data.pairedAt ?? "",
|
|
18
|
+
...typeof data.tlsSpkiPinHex === "string" ? { tlsSpkiPinHex: data.tlsSpkiPinHex } : {}
|
|
19
|
+
};
|
|
20
|
+
} catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function fingerprintOf(publicKeyHex) {
|
|
25
|
+
const raw = Buffer.from(publicKeyHex, "hex");
|
|
26
|
+
const digest = createHash("sha256").update(raw).digest("hex").toUpperCase();
|
|
27
|
+
return digest.match(/.{1,4}/g)?.join(":") ?? digest;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// src/lib/report/export-types.ts
|
|
31
|
+
function isExportBundle(v) {
|
|
32
|
+
if (!v || typeof v !== "object") return false;
|
|
33
|
+
const o = v;
|
|
34
|
+
if (o.format !== "suveren-report-export" || o.version !== 1) return false;
|
|
35
|
+
if (!o.report || typeof o.report !== "object") return false;
|
|
36
|
+
if (!Array.isArray(o.tickets)) return false;
|
|
37
|
+
if (!o.authorizations || typeof o.authorizations !== "object") return false;
|
|
38
|
+
if (!o.authorityServer || typeof o.authorityServer !== "object") return false;
|
|
39
|
+
const as = o.authorityServer;
|
|
40
|
+
return typeof as.url === "string" && typeof as.publicKeyHex === "string";
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// src/lib/report/verify-export.ts
|
|
44
|
+
import { Parser as Parser2 } from "htmlparser2";
|
|
45
|
+
import { verifyReceiptSignature as verifyReceiptSignature2, verifyAttestationSignature as verifyAttestationSignature2, decodeAttestationBlob as decodeAttestationBlob2 } from "@hap/core";
|
|
46
|
+
|
|
47
|
+
// src/lib/report/parse-elements.ts
|
|
48
|
+
import { Parser } from "htmlparser2";
|
|
49
|
+
function parseElements(html) {
|
|
50
|
+
const found = [];
|
|
51
|
+
const seenCount = /* @__PURE__ */ new Map();
|
|
52
|
+
const parser = new Parser(
|
|
53
|
+
{
|
|
54
|
+
onopentag(name, attribs) {
|
|
55
|
+
if (!name.startsWith("sv-")) return;
|
|
56
|
+
const n = seenCount.get(name) ?? 0;
|
|
57
|
+
seenCount.set(name, n + 1);
|
|
58
|
+
found.push({ id: `${name}-${n}`, kind: name, attrs: { ...attribs } });
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
{ decodeEntities: true }
|
|
62
|
+
);
|
|
63
|
+
parser.write(html);
|
|
64
|
+
parser.end();
|
|
65
|
+
return found;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// src/lib/report/ticket-resolvers.ts
|
|
69
|
+
import { verifyReceiptSignature, verifyAttestationSignature, decodeAttestationBlob } from "@hap/core";
|
|
70
|
+
|
|
71
|
+
// src/lib/report/format.ts
|
|
72
|
+
import { getProfile } from "@hap/core";
|
|
73
|
+
var MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
|
|
74
|
+
function formatDateTime(value) {
|
|
75
|
+
const n = typeof value === "number" ? value : Number(value);
|
|
76
|
+
if (!Number.isFinite(n)) return "unknown time";
|
|
77
|
+
const d = new Date(n * 1e3);
|
|
78
|
+
const day = d.getDate();
|
|
79
|
+
const month = MONTHS[d.getMonth()];
|
|
80
|
+
const hh = String(d.getHours()).padStart(2, "0");
|
|
81
|
+
const mm = String(d.getMinutes()).padStart(2, "0");
|
|
82
|
+
return `${day} ${month}, ${hh}:${mm}`;
|
|
83
|
+
}
|
|
84
|
+
function formatDuration(value) {
|
|
85
|
+
const n = typeof value === "number" ? value : Number(value);
|
|
86
|
+
if (!Number.isFinite(n) || n < 0) return "unknown duration";
|
|
87
|
+
const mins = Math.round(n / 60);
|
|
88
|
+
if (mins < 60) return `${mins} min`;
|
|
89
|
+
const hrs = Math.floor(mins / 60);
|
|
90
|
+
const rem = mins % 60;
|
|
91
|
+
return `${hrs} h ${String(rem).padStart(2, "0")} min`;
|
|
92
|
+
}
|
|
93
|
+
function groupThousands(n) {
|
|
94
|
+
const sign = n < 0 ? "-" : "";
|
|
95
|
+
const [intPart, frac] = Math.abs(n).toString().split(".");
|
|
96
|
+
const grouped = intPart.replace(/\B(?=(\d{3})+(?!\d))/g, " ");
|
|
97
|
+
return sign + grouped + (frac ? `.${frac}` : "");
|
|
98
|
+
}
|
|
99
|
+
var CURRENCY_SYMBOLS = { EUR: "\u20AC", USD: "$", GBP: "\xA3" };
|
|
100
|
+
function formatCurrency(amount, currencyCode) {
|
|
101
|
+
const n = typeof amount === "number" ? amount : Number(amount);
|
|
102
|
+
if (!Number.isFinite(n)) return String(amount ?? "");
|
|
103
|
+
if (!currencyCode) return groupThousands(n);
|
|
104
|
+
const code = currencyCode.toUpperCase();
|
|
105
|
+
const symbol = CURRENCY_SYMBOLS[code];
|
|
106
|
+
return symbol ? `${symbol} ${groupThousands(n)}` : `${code} ${groupThousands(n)}`;
|
|
107
|
+
}
|
|
108
|
+
function formatBoundValue(unit, value, fallbackCurrency) {
|
|
109
|
+
const n = typeof value === "number" ? value : Number(value);
|
|
110
|
+
if (!Number.isFinite(n)) return String(value ?? "");
|
|
111
|
+
if (!unit || unit === "count") {
|
|
112
|
+
return fallbackCurrency ? formatCurrency(n, fallbackCurrency) : groupThousands(n);
|
|
113
|
+
}
|
|
114
|
+
if (unit === "minutes") return `${groupThousands(n)} min`;
|
|
115
|
+
if (unit === "hours") return `${groupThousands(n)} h`;
|
|
116
|
+
if (unit === "days") return `${groupThousands(n)} d`;
|
|
117
|
+
if (unit === "percent") return `${groupThousands(n)}%`;
|
|
118
|
+
if (unit.startsWith("currency:")) return formatCurrency(n, unit.slice("currency:".length));
|
|
119
|
+
return `${groupThousands(n)} ${unit}`;
|
|
120
|
+
}
|
|
121
|
+
function humanizeKey(key) {
|
|
122
|
+
return key.replace(/_/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
|
|
123
|
+
}
|
|
124
|
+
function formatBoundLabel(profileId, key, value, fallbackCurrency) {
|
|
125
|
+
const profile = profileId ? getProfile(profileId) : void 0;
|
|
126
|
+
const field = profile?.boundsSchema?.fields?.[key];
|
|
127
|
+
const displayName = field?.displayName ?? humanizeKey(key);
|
|
128
|
+
return `${displayName}: ${formatBoundValue(field?.unit, value, fallbackCurrency)}`;
|
|
129
|
+
}
|
|
130
|
+
function formatOwnerLabel(did) {
|
|
131
|
+
if (!did) return "Unknown owner";
|
|
132
|
+
const tail = did.length > 6 ? did.slice(-6) : did;
|
|
133
|
+
return `Owner (key \u2026${tail})`;
|
|
134
|
+
}
|
|
135
|
+
function profileShortLabel(profileId) {
|
|
136
|
+
if (!profileId) return "Unknown profile";
|
|
137
|
+
const name = profileId.split("@")[0].split("/").pop();
|
|
138
|
+
if (!name) return profileId;
|
|
139
|
+
return name.charAt(0).toUpperCase() + name.slice(1);
|
|
140
|
+
}
|
|
141
|
+
var ACTION_LABELS = {
|
|
142
|
+
create_quote: "Quote created",
|
|
143
|
+
update_quote: "Quote updated",
|
|
144
|
+
send_quote: "Quote sent",
|
|
145
|
+
convert_quote_to_order: "Order placed",
|
|
146
|
+
create_order: "Order created",
|
|
147
|
+
update_order: "Order updated",
|
|
148
|
+
send_message: "Reply sent",
|
|
149
|
+
send_email: "Reply sent",
|
|
150
|
+
create_contact: "Contact created",
|
|
151
|
+
update_contact: "Contact updated",
|
|
152
|
+
create_deal: "Deal created",
|
|
153
|
+
update_deal: "Deal updated",
|
|
154
|
+
create_task: "Task created",
|
|
155
|
+
update_task: "Task updated",
|
|
156
|
+
log_activity: "Activity logged",
|
|
157
|
+
create_record: "Record created",
|
|
158
|
+
update_record: "Record updated",
|
|
159
|
+
delete_record: "Record deleted",
|
|
160
|
+
create_event: "Event created",
|
|
161
|
+
update_event: "Event updated",
|
|
162
|
+
delete_event: "Event deleted",
|
|
163
|
+
publish_post: "Post published"
|
|
164
|
+
};
|
|
165
|
+
function pastTense(verb) {
|
|
166
|
+
if (!verb) return verb;
|
|
167
|
+
if (/e$/.test(verb)) return `${verb}d`;
|
|
168
|
+
return `${verb}ed`;
|
|
169
|
+
}
|
|
170
|
+
function capitalize(s) {
|
|
171
|
+
return s.length > 0 ? s.charAt(0).toUpperCase() + s.slice(1) : s;
|
|
172
|
+
}
|
|
173
|
+
function formatActionLabel(action) {
|
|
174
|
+
const raw = String(action ?? "").trim();
|
|
175
|
+
if (!raw) return "Action";
|
|
176
|
+
const withoutSystem = raw.includes("__") ? raw.slice(raw.indexOf("__") + 2) : raw;
|
|
177
|
+
const known = ACTION_LABELS[withoutSystem];
|
|
178
|
+
if (known) return known;
|
|
179
|
+
const parts = withoutSystem.split("_").filter(Boolean);
|
|
180
|
+
if (parts.length === 0) return capitalize(raw);
|
|
181
|
+
const [verb, ...rest] = parts;
|
|
182
|
+
if (rest.length === 0) return capitalize(pastTense(verb));
|
|
183
|
+
return `${capitalize(rest.join(" "))} ${pastTense(verb)}`;
|
|
184
|
+
}
|
|
185
|
+
var METRIC_LABELS = {
|
|
186
|
+
completed: "cases completed",
|
|
187
|
+
"median-time": "median time, start \u2192 goal",
|
|
188
|
+
"average-time": "average time, start \u2192 goal",
|
|
189
|
+
"without-approval": "share without approval",
|
|
190
|
+
approvals: "approvals",
|
|
191
|
+
"median-approval-wait": "median approval wait",
|
|
192
|
+
tickets: "tickets",
|
|
193
|
+
refusals: "system refusals"
|
|
194
|
+
};
|
|
195
|
+
function formatMetricValue(kind, value) {
|
|
196
|
+
const n = typeof value === "number" ? value : Number(value);
|
|
197
|
+
if (kind === "without-approval" && Number.isFinite(n)) return `${Math.round(n * 100)}%`;
|
|
198
|
+
if ((kind === "median-time" || kind === "average-time" || kind === "median-approval-wait") && Number.isFinite(n)) {
|
|
199
|
+
return formatDuration(n);
|
|
200
|
+
}
|
|
201
|
+
return String(value);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// src/lib/report/ticket-resolvers.ts
|
|
205
|
+
function findReceiptEntry(archive, ticketId2) {
|
|
206
|
+
return archive.getReceipts().find((r) => r.receipt.id === ticketId2);
|
|
207
|
+
}
|
|
208
|
+
function findAuthorization(archive, authorizationId) {
|
|
209
|
+
return archive.getAuthorizations().find((a) => a.authorizationId === authorizationId);
|
|
210
|
+
}
|
|
211
|
+
async function checkTicket(archive, ticketId2) {
|
|
212
|
+
const entry = findReceiptEntry(archive, ticketId2);
|
|
213
|
+
if (!entry) {
|
|
214
|
+
return { ok: false, reason: `No ticket "${ticketId2}" in the local archive.` };
|
|
215
|
+
}
|
|
216
|
+
if (!entry.asPublicKey) {
|
|
217
|
+
return { ok: false, reason: `Ticket "${ticketId2}" has no archived Authority Server key to verify it against.`, entry };
|
|
218
|
+
}
|
|
219
|
+
try {
|
|
220
|
+
await verifyReceiptSignature(entry.receipt, entry.asPublicKey);
|
|
221
|
+
} catch (err) {
|
|
222
|
+
return {
|
|
223
|
+
ok: false,
|
|
224
|
+
reason: `Ticket "${ticketId2}" signature does not verify: ${err instanceof Error ? err.message : String(err)}`,
|
|
225
|
+
entry
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
return { ok: true, entry };
|
|
229
|
+
}
|
|
230
|
+
function checkUrlFor(entry) {
|
|
231
|
+
const id = String(entry.receipt.id ?? "");
|
|
232
|
+
return `${entry.asUrl.replace(/\/+$/, "")}/r/${id}`;
|
|
233
|
+
}
|
|
234
|
+
async function resolveTicketElement(archive, ref) {
|
|
235
|
+
const check = await checkTicket(archive, ref);
|
|
236
|
+
if (!check.ok) return { status: "unverifiable", reason: check.reason };
|
|
237
|
+
const r = check.entry.receipt;
|
|
238
|
+
return {
|
|
239
|
+
status: "verified",
|
|
240
|
+
data: {
|
|
241
|
+
ticketId: ref,
|
|
242
|
+
action: r.action,
|
|
243
|
+
actionLabel: formatActionLabel(r.action),
|
|
244
|
+
time: r.timestamp,
|
|
245
|
+
timeLabel: formatDateTime(r.timestamp),
|
|
246
|
+
profile: r.profileId,
|
|
247
|
+
profileLabel: profileShortLabel(typeof r.profileId === "string" ? r.profileId : void 0),
|
|
248
|
+
authorizationId: r.authorizationId,
|
|
249
|
+
limitsUsed: r.limits ?? r.executionContext ?? {},
|
|
250
|
+
checkUrl: checkUrlFor(check.entry)
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
async function resolveApprovalElement(archive, ticketRef) {
|
|
255
|
+
const check = await checkTicket(archive, ticketRef);
|
|
256
|
+
if (!check.ok) return { status: "unverifiable", reason: check.reason };
|
|
257
|
+
const proposal = check.entry.proposal;
|
|
258
|
+
if (!proposal) {
|
|
259
|
+
return {
|
|
260
|
+
status: "unverifiable",
|
|
261
|
+
reason: `Ticket "${ticketRef}" has no archived approval (it ran without review).`
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
const committedBy = proposal.committedBy ?? {};
|
|
265
|
+
const approvers = Object.values(committedBy);
|
|
266
|
+
const createdAt = typeof proposal.createdAt === "number" ? proposal.createdAt : void 0;
|
|
267
|
+
const decidedAt = approvers.length > 0 ? Math.max(...approvers.map((a) => a.at)) : void 0;
|
|
268
|
+
const waitSeconds = createdAt !== void 0 && decidedAt !== void 0 ? decidedAt - createdAt : void 0;
|
|
269
|
+
const who = approvers.map((a) => a.userId);
|
|
270
|
+
return {
|
|
271
|
+
status: "verified",
|
|
272
|
+
data: {
|
|
273
|
+
ticketId: ticketRef,
|
|
274
|
+
who,
|
|
275
|
+
whoLabel: who.length > 0 ? who.join(", ") : "unknown",
|
|
276
|
+
createdAt,
|
|
277
|
+
createdAtLabel: createdAt !== void 0 ? formatDateTime(createdAt) : "unknown",
|
|
278
|
+
decidedAt,
|
|
279
|
+
decidedAtLabel: decidedAt !== void 0 ? formatDateTime(decidedAt) : "unknown",
|
|
280
|
+
waitSeconds,
|
|
281
|
+
waitLabel: waitSeconds !== void 0 ? formatDuration(waitSeconds) : "unknown",
|
|
282
|
+
status: proposal.status
|
|
283
|
+
}
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
async function resolveMandateElement(archive, ticketRef) {
|
|
287
|
+
const check = await checkTicket(archive, ticketRef);
|
|
288
|
+
if (!check.ok) return { status: "unverifiable", reason: check.reason };
|
|
289
|
+
const r = check.entry.receipt;
|
|
290
|
+
const authorizationId = typeof r.authorizationId === "string" ? r.authorizationId : void 0;
|
|
291
|
+
if (!authorizationId) {
|
|
292
|
+
return { status: "unverifiable", reason: `Ticket "${ticketRef}" carries no authorizationId.` };
|
|
293
|
+
}
|
|
294
|
+
const auth = findAuthorization(archive, authorizationId);
|
|
295
|
+
if (!auth) {
|
|
296
|
+
return { status: "unverifiable", reason: `No archived mandate "${authorizationId}" for ticket "${ticketRef}".` };
|
|
297
|
+
}
|
|
298
|
+
if (auth.boundsHash && typeof r.boundsHash === "string" && auth.boundsHash !== r.boundsHash) {
|
|
299
|
+
return {
|
|
300
|
+
status: "unverifiable",
|
|
301
|
+
reason: `Mandate "${authorizationId}" boundsHash does not match ticket "${ticketRef}".`
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
let mode;
|
|
305
|
+
let owners = [];
|
|
306
|
+
let ownersRaw = [];
|
|
307
|
+
const firstBlob = auth.attestations[0]?.blob;
|
|
308
|
+
if (firstBlob && check.entry.asPublicKey) {
|
|
309
|
+
try {
|
|
310
|
+
const attestation = decodeAttestationBlob(firstBlob);
|
|
311
|
+
await verifyAttestationSignature(attestation, check.entry.asPublicKey);
|
|
312
|
+
mode = attestation.payload.commitment_mode;
|
|
313
|
+
const dids = attestation.payload.resolved_owners ?? [];
|
|
314
|
+
const subjects = attestation.payload.subjects ?? [];
|
|
315
|
+
ownersRaw = dids;
|
|
316
|
+
owners = dids.map((did) => {
|
|
317
|
+
const subject = subjects.find((s) => s.did === did);
|
|
318
|
+
return subject?.assurance === "high" && subject.disclose?.name ? subject.disclose.name : formatOwnerLabel(did);
|
|
319
|
+
});
|
|
320
|
+
} catch {
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
const fallbackCurrency = typeof auth.context?.currency === "string" ? auth.context.currency : void 0;
|
|
324
|
+
const rawLimits = auth.bounds ?? {};
|
|
325
|
+
const limits = Object.entries(rawLimits).map(([key, value]) => formatBoundLabel(auth.profileId, key, value, fallbackCurrency));
|
|
326
|
+
return {
|
|
327
|
+
status: "verified",
|
|
328
|
+
data: {
|
|
329
|
+
authorizationId,
|
|
330
|
+
profile: auth.profileId,
|
|
331
|
+
profileLabel: profileShortLabel(auth.profileId),
|
|
332
|
+
limits,
|
|
333
|
+
rawLimits,
|
|
334
|
+
intent: auth.intent,
|
|
335
|
+
mode,
|
|
336
|
+
owners,
|
|
337
|
+
ownersRaw
|
|
338
|
+
}
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// src/lib/report/time.ts
|
|
343
|
+
function parseTimestampSeconds(value) {
|
|
344
|
+
if (typeof value !== "string" || !value.trim()) return void 0;
|
|
345
|
+
const iso = /^\d{4}-\d{2}-\d{2}[ T]\d{2}:\d{2}:\d{2}/.test(value) && !/[zZ]|[+-]\d{2}:?\d{2}$/.test(value) ? `${value.replace(" ", "T")}Z` : value;
|
|
346
|
+
const ms = Date.parse(iso);
|
|
347
|
+
return Number.isFinite(ms) ? Math.floor(ms / 1e3) : void 0;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
// src/lib/report/case-resolvers.ts
|
|
351
|
+
function parseRef(value) {
|
|
352
|
+
if (!value) return { id: "" };
|
|
353
|
+
const i = value.indexOf(":");
|
|
354
|
+
if (i === -1) return { id: value.trim() };
|
|
355
|
+
return { type: value.slice(0, i).trim(), id: value.slice(i + 1).trim() };
|
|
356
|
+
}
|
|
357
|
+
function parseStepRefs(value) {
|
|
358
|
+
if (!value) return [];
|
|
359
|
+
return value.split(/\s+/).filter(Boolean).map((s) => parseRef(s).id || s);
|
|
360
|
+
}
|
|
361
|
+
function parseRecipients(toJson, ccJson) {
|
|
362
|
+
const out = [];
|
|
363
|
+
for (const raw of [toJson, ccJson]) {
|
|
364
|
+
if (!raw) continue;
|
|
365
|
+
try {
|
|
366
|
+
const arr = JSON.parse(raw);
|
|
367
|
+
if (Array.isArray(arr)) out.push(...arr.filter((x) => typeof x === "string"));
|
|
368
|
+
} catch {
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
return out.map((s) => s.toLowerCase());
|
|
372
|
+
}
|
|
373
|
+
function parseCaseAttrs(attrs) {
|
|
374
|
+
return {
|
|
375
|
+
startId: parseRef(attrs.start).id,
|
|
376
|
+
goalId: parseRef(attrs.goal).id,
|
|
377
|
+
stepIds: parseStepRefs(attrs.steps)
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
async function resolveCaseElement(archive, emailExport, attrs) {
|
|
381
|
+
const start = parseRef(attrs.start);
|
|
382
|
+
const startMessage = emailExport.inbox.find((m) => m.id === start.id);
|
|
383
|
+
if (!startMessage || !startMessage.case_id) {
|
|
384
|
+
return { status: "unverifiable", reason: `start "${attrs.start ?? ""}" is not a loaded case email with a case_id.` };
|
|
385
|
+
}
|
|
386
|
+
const startCaseId = startMessage.case_id;
|
|
387
|
+
const startTime = parseTimestampSeconds(startMessage.received_at);
|
|
388
|
+
if (startTime === void 0) {
|
|
389
|
+
return { status: "unverifiable", reason: `start message "${start.id}" has an unparseable received_at.`, startCaseId };
|
|
390
|
+
}
|
|
391
|
+
const goal = parseRef(attrs.goal);
|
|
392
|
+
const goalCheck = await checkTicket(archive, goal.id);
|
|
393
|
+
if (!goalCheck.ok) {
|
|
394
|
+
return { status: "unverifiable", reason: `goal: ${goalCheck.reason}`, startCaseId };
|
|
395
|
+
}
|
|
396
|
+
const goalReceipt = goalCheck.entry.receipt;
|
|
397
|
+
const goalTime = typeof goalReceipt.timestamp === "number" ? goalReceipt.timestamp : void 0;
|
|
398
|
+
if (goalTime === void 0) {
|
|
399
|
+
return { status: "unverifiable", reason: `goal ticket "${goal.id}" has no numeric timestamp.`, startCaseId };
|
|
400
|
+
}
|
|
401
|
+
if (goalTime < startTime) {
|
|
402
|
+
return { status: "unverifiable", reason: `goal ticket "${goal.id}" is timestamped before start "${start.id}".`, startCaseId };
|
|
403
|
+
}
|
|
404
|
+
const stepIds = parseStepRefs(attrs.steps);
|
|
405
|
+
const steps = [];
|
|
406
|
+
for (const stepId of stepIds) {
|
|
407
|
+
const stepCheck = await checkTicket(archive, stepId);
|
|
408
|
+
if (!stepCheck.ok) {
|
|
409
|
+
return { status: "unverifiable", reason: `step: ${stepCheck.reason}`, startCaseId };
|
|
410
|
+
}
|
|
411
|
+
const stepReceipt = stepCheck.entry.receipt;
|
|
412
|
+
const stepTime = typeof stepReceipt.timestamp === "number" ? stepReceipt.timestamp : void 0;
|
|
413
|
+
if (stepTime === void 0 || stepTime < startTime || stepTime > goalTime) {
|
|
414
|
+
return { status: "unverifiable", reason: `step ticket "${stepId}" is outside the case window [${startTime}, ${goalTime}].`, startCaseId };
|
|
415
|
+
}
|
|
416
|
+
steps.push({ ticketId: stepId, time: stepTime, action: stepReceipt.action });
|
|
417
|
+
}
|
|
418
|
+
let warningReason;
|
|
419
|
+
const sentForGoal = emailExport.sent.find((m) => m.receipt_id === goal.id);
|
|
420
|
+
if (sentForGoal) {
|
|
421
|
+
const isReply = sentForGoal.in_reply_to === start.id;
|
|
422
|
+
const recipients = parseRecipients(sentForGoal.to_json, sentForGoal.cc_json);
|
|
423
|
+
const addressedToSender = recipients.includes(startMessage.from_email.toLowerCase());
|
|
424
|
+
if (!isReply && !addressedToSender) {
|
|
425
|
+
warningReason = "goal link not confirmed";
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
const approvals = [];
|
|
429
|
+
for (const ticketId2 of [goal.id, ...stepIds]) {
|
|
430
|
+
const approval = await resolveApprovalElement(archive, ticketId2);
|
|
431
|
+
if (approval.status === "verified") {
|
|
432
|
+
approvals.push({ ticketId: ticketId2, ...approval.data });
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
const timeline = [
|
|
436
|
+
{ type: "start", time: startTime, label: start.id },
|
|
437
|
+
...steps.map((s) => ({ type: "step", time: s.time, label: s.ticketId })),
|
|
438
|
+
...approvals.map((a) => ({ type: "approval", time: a.decidedAt ?? a.createdAt ?? 0, label: a.ticketId })),
|
|
439
|
+
{ type: "goal", time: goalTime, label: goal.id }
|
|
440
|
+
].sort((a, b) => a.time - b.time);
|
|
441
|
+
return {
|
|
442
|
+
status: warningReason ? "warning" : "verified",
|
|
443
|
+
reason: warningReason,
|
|
444
|
+
startCaseId,
|
|
445
|
+
data: {
|
|
446
|
+
caseId: startCaseId,
|
|
447
|
+
start: { id: start.id, time: startTime, sender: startMessage.from_email },
|
|
448
|
+
goal: { ticketId: goal.id, time: goalTime, action: goalReceipt.action },
|
|
449
|
+
steps,
|
|
450
|
+
approvals,
|
|
451
|
+
timeline,
|
|
452
|
+
totalDurationSeconds: goalTime - startTime
|
|
453
|
+
}
|
|
454
|
+
};
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
// src/lib/report/verify-export.ts
|
|
458
|
+
function collectReferencedTicketIds(html) {
|
|
459
|
+
const ids = /* @__PURE__ */ new Set();
|
|
460
|
+
for (const el of parseElements(html)) {
|
|
461
|
+
if (el.kind === "sv-ticket" && el.attrs.ref) ids.add(el.attrs.ref);
|
|
462
|
+
if ((el.kind === "sv-approval" || el.kind === "sv-mandate") && el.attrs.ticket) ids.add(el.attrs.ticket);
|
|
463
|
+
if (el.kind === "sv-case") {
|
|
464
|
+
const { goalId, stepIds } = parseCaseAttrs(el.attrs);
|
|
465
|
+
if (goalId) ids.add(goalId);
|
|
466
|
+
for (const s of stepIds) ids.add(s);
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
return ids;
|
|
470
|
+
}
|
|
471
|
+
function ticketIdsOf(el) {
|
|
472
|
+
if (el.kind === "sv-ticket") return el.attrs.ref ? [el.attrs.ref] : [];
|
|
473
|
+
if (el.kind === "sv-approval" || el.kind === "sv-mandate") return el.attrs.ticket ? [el.attrs.ticket] : [];
|
|
474
|
+
if (el.kind === "sv-case") {
|
|
475
|
+
const { goalId, stepIds } = parseCaseAttrs(el.attrs);
|
|
476
|
+
return [...goalId ? [goalId] : [], ...stepIds];
|
|
477
|
+
}
|
|
478
|
+
return [];
|
|
479
|
+
}
|
|
480
|
+
var TICKET_BACKED_KINDS = /* @__PURE__ */ new Set(["sv-ticket", "sv-approval", "sv-mandate", "sv-case"]);
|
|
481
|
+
var PROOF_SCRIPT_BLOCK_RE = /<script[^>]*id="suveren-proof"[^>]*>[\s\S]*?<\/script>/gi;
|
|
482
|
+
function collectPresentedStates(documentHtml) {
|
|
483
|
+
const html = documentHtml.replace(PROOF_SCRIPT_BLOCK_RE, "");
|
|
484
|
+
const open = [];
|
|
485
|
+
const flaggedById = /* @__PURE__ */ new Map();
|
|
486
|
+
let depth = 0;
|
|
487
|
+
const classesOf = (attribs) => new Set((attribs.class ?? "").split(/\s+/).filter(Boolean));
|
|
488
|
+
const settle = (f) => {
|
|
489
|
+
const flagged = f.classes.has("sv-el-unverifiable") && !f.classes.has("sv-el-verified") && !f.classes.has("sv-el-warning") && f.badges.length > 0 && f.badges.every((b) => b.has("sv-badge-bad") && !b.has("sv-badge-ok") && !b.has("sv-badge-warn"));
|
|
490
|
+
flaggedById.set(f.id, (flaggedById.get(f.id) ?? true) && flagged);
|
|
491
|
+
};
|
|
492
|
+
const parser = new Parser2(
|
|
493
|
+
{
|
|
494
|
+
onopentag(_name, attribs) {
|
|
495
|
+
depth++;
|
|
496
|
+
const classes = classesOf(attribs);
|
|
497
|
+
if ([...classes].some((c) => c.startsWith("sv-badge"))) {
|
|
498
|
+
for (const f of open) f.badges.push(classes);
|
|
499
|
+
}
|
|
500
|
+
const id = attribs["data-sv-id"];
|
|
501
|
+
if (typeof id === "string" && id) open.push({ id, depth, classes, badges: [] });
|
|
502
|
+
},
|
|
503
|
+
onclosetag() {
|
|
504
|
+
while (open.length > 0 && open[open.length - 1].depth >= depth) settle(open.pop());
|
|
505
|
+
depth--;
|
|
506
|
+
}
|
|
507
|
+
},
|
|
508
|
+
{ decodeEntities: true }
|
|
509
|
+
);
|
|
510
|
+
parser.write(html);
|
|
511
|
+
parser.end();
|
|
512
|
+
while (open.length > 0) settle(open.pop());
|
|
513
|
+
const states = /* @__PURE__ */ new Map();
|
|
514
|
+
for (const [id, flagged] of flaggedById) states.set(id, flagged ? "not-verifiable" : "verified");
|
|
515
|
+
return states;
|
|
516
|
+
}
|
|
517
|
+
function ticketId(receipt) {
|
|
518
|
+
return typeof receipt.id === "string" ? receipt.id : "";
|
|
519
|
+
}
|
|
520
|
+
async function checkAttestations(auth, publicKeyHex) {
|
|
521
|
+
if (auth.attestations.length === 0) {
|
|
522
|
+
return { valid: false, error: "No archived mandate attestation for this authorization." };
|
|
523
|
+
}
|
|
524
|
+
for (const att of auth.attestations) {
|
|
525
|
+
try {
|
|
526
|
+
const attestation = decodeAttestationBlob2(att.blob);
|
|
527
|
+
await verifyAttestationSignature2(attestation, publicKeyHex);
|
|
528
|
+
} catch (err) {
|
|
529
|
+
return { valid: false, error: err instanceof Error ? err.message : String(err) };
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
return { valid: true };
|
|
533
|
+
}
|
|
534
|
+
async function verifyExportBundle(bundle, opts = {}) {
|
|
535
|
+
const byId = new Map(bundle.tickets.map((t) => [ticketId(t), t]));
|
|
536
|
+
const referencedIds = collectReferencedTicketIds(bundle.report.html);
|
|
537
|
+
const allIds = /* @__PURE__ */ new Set([...referencedIds, ...byId.keys()]);
|
|
538
|
+
const tickets = [];
|
|
539
|
+
for (const id of allIds) {
|
|
540
|
+
const receipt = byId.get(id);
|
|
541
|
+
if (!receipt) {
|
|
542
|
+
tickets.push({ ticketId: id, referenced: referencedIds.has(id), present: false, signatureValid: false, error: "Not present in the bundle." });
|
|
543
|
+
continue;
|
|
544
|
+
}
|
|
545
|
+
try {
|
|
546
|
+
await verifyReceiptSignature2(receipt, bundle.authorityServer.publicKeyHex);
|
|
547
|
+
tickets.push({ ticketId: id, referenced: referencedIds.has(id), present: true, signatureValid: true });
|
|
548
|
+
} catch (err) {
|
|
549
|
+
tickets.push({
|
|
550
|
+
ticketId: id,
|
|
551
|
+
referenced: referencedIds.has(id),
|
|
552
|
+
present: true,
|
|
553
|
+
signatureValid: false,
|
|
554
|
+
error: err instanceof Error ? err.message : String(err)
|
|
555
|
+
});
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
const authorizations = [];
|
|
559
|
+
for (const [authorizationId, auth] of Object.entries(bundle.authorizations)) {
|
|
560
|
+
const { valid: attestationValid, error: attestationError } = await checkAttestations(auth, bundle.authorityServer.publicKeyHex);
|
|
561
|
+
let boundsHashMatches = "n/a";
|
|
562
|
+
const representative = [...byId.values()].find((r) => r.authorizationId === authorizationId);
|
|
563
|
+
if (auth.boundsHash && representative && typeof representative.boundsHash === "string") {
|
|
564
|
+
boundsHashMatches = auth.boundsHash === representative.boundsHash;
|
|
565
|
+
}
|
|
566
|
+
authorizations.push({
|
|
567
|
+
authorizationId,
|
|
568
|
+
attestationValid,
|
|
569
|
+
boundsHashMatches,
|
|
570
|
+
...attestationError ? { error: attestationError } : boundsHashMatches === false ? { error: `boundsHash does not match ticket ${representative?.id ?? "unknown"}.` } : {}
|
|
571
|
+
});
|
|
572
|
+
}
|
|
573
|
+
const ticketById = new Map(tickets.map((t) => [t.ticketId, t]));
|
|
574
|
+
const authById = new Map(authorizations.map((a) => [a.authorizationId, a]));
|
|
575
|
+
const presentedStates = opts.documentHtml !== void 0 ? collectPresentedStates(opts.documentHtml) : /* @__PURE__ */ new Map();
|
|
576
|
+
const elements = [];
|
|
577
|
+
for (const el of parseElements(bundle.report.html)) {
|
|
578
|
+
if (!TICKET_BACKED_KINDS.has(el.kind)) continue;
|
|
579
|
+
const ticketIds = ticketIdsOf(el);
|
|
580
|
+
const presented = presentedStates.get(el.id) ?? "verified";
|
|
581
|
+
let error;
|
|
582
|
+
if (ticketIds.length === 0) error = "Names no ticket.";
|
|
583
|
+
for (const id of ticketIds) {
|
|
584
|
+
if (error) break;
|
|
585
|
+
const t = ticketById.get(id);
|
|
586
|
+
if (!t || !t.present) error = `Ticket ${id} is not in the bundle.`;
|
|
587
|
+
else if (!t.signatureValid) error = `Ticket ${id} has an invalid signature.`;
|
|
588
|
+
}
|
|
589
|
+
if (!error && el.kind === "sv-mandate") {
|
|
590
|
+
const receipt = byId.get(ticketIds[0]);
|
|
591
|
+
const authorizationId = typeof receipt.authorizationId === "string" ? receipt.authorizationId : void 0;
|
|
592
|
+
const auth = authorizationId ? bundle.authorizations[authorizationId] : void 0;
|
|
593
|
+
const authCheck = authorizationId ? authById.get(authorizationId) : void 0;
|
|
594
|
+
if (!auth || !authCheck) error = `The mandate for ticket ${ticketIds[0]} is not in the bundle.`;
|
|
595
|
+
else if (!authCheck.attestationValid) error = `The mandate for ticket ${ticketIds[0]} has an invalid attestation.`;
|
|
596
|
+
else if (auth.boundsHash && typeof receipt.boundsHash === "string" && auth.boundsHash !== receipt.boundsHash) {
|
|
597
|
+
error = `The mandate's boundsHash does not match ticket ${ticketIds[0]}.`;
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
elements.push({ elementId: el.id, kind: el.kind, ticketIds, presented, backed: !error, ...error ? { error } : {} });
|
|
601
|
+
}
|
|
602
|
+
const keyFingerprint = fingerprintOf(bundle.authorityServer.publicKeyHex);
|
|
603
|
+
const keyConfirmation = resolveKeyConfirmation(bundle.authorityServer.publicKeyHex, opts);
|
|
604
|
+
const allValid = tickets.filter((t) => t.present).every((t) => t.signatureValid) && authorizations.every((a) => a.attestationValid && a.boundsHashMatches !== false) && elements.every((e) => e.presented === "not-verifiable" || e.backed);
|
|
605
|
+
return { tickets, elements, authorizations, keyFingerprint, keyConfirmation, allValid };
|
|
606
|
+
}
|
|
607
|
+
function resolveKeyConfirmation(actualKeyHex, opts) {
|
|
608
|
+
const normalize = (h) => h.trim().toLowerCase();
|
|
609
|
+
if (opts.expectedKeyHex !== void 0) {
|
|
610
|
+
if (normalize(opts.expectedKeyHex) === normalize(actualKeyHex)) return { state: "confirmed", source: "provided" };
|
|
611
|
+
return { state: "mismatch", source: "provided", expectedFingerprint: fingerprintOf(opts.expectedKeyHex) };
|
|
612
|
+
}
|
|
613
|
+
if (opts.onlineKeyHex !== void 0) {
|
|
614
|
+
if (normalize(opts.onlineKeyHex) === normalize(actualKeyHex)) return { state: "confirmed", source: "online" };
|
|
615
|
+
return { state: "mismatch", source: "online", expectedFingerprint: fingerprintOf(opts.onlineKeyHex) };
|
|
616
|
+
}
|
|
617
|
+
return { state: "unconfirmed" };
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
export {
|
|
621
|
+
readPairing,
|
|
622
|
+
fingerprintOf,
|
|
623
|
+
parseElements,
|
|
624
|
+
formatDateTime,
|
|
625
|
+
formatDuration,
|
|
626
|
+
formatCurrency,
|
|
627
|
+
profileShortLabel,
|
|
628
|
+
formatActionLabel,
|
|
629
|
+
METRIC_LABELS,
|
|
630
|
+
formatMetricValue,
|
|
631
|
+
resolveTicketElement,
|
|
632
|
+
resolveApprovalElement,
|
|
633
|
+
resolveMandateElement,
|
|
634
|
+
parseTimestampSeconds,
|
|
635
|
+
parseCaseAttrs,
|
|
636
|
+
resolveCaseElement,
|
|
637
|
+
isExportBundle,
|
|
638
|
+
verifyExportBundle
|
|
639
|
+
};
|