@synoikia/core 0.14.2 → 0.16.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/app.d.ts +8 -0
- package/dist/app.js +7 -5
- package/dist/app.js.map +1 -1
- package/dist/approvals/grants.d.ts +4 -1
- package/dist/approvals/grants.js +4 -4
- package/dist/approvals/grants.js.map +1 -1
- package/dist/approvals/service.d.ts +28 -10
- package/dist/approvals/service.js +5 -2
- package/dist/approvals/service.js.map +1 -1
- package/dist/auth/external-cloudflare.js +5 -3
- package/dist/auth/external-cloudflare.js.map +1 -1
- package/dist/auth/external.d.ts +6 -2
- package/dist/auth/external.js.map +1 -1
- package/dist/auth/mcp-auth.js +1 -1
- package/dist/auth/mcp-auth.js.map +1 -1
- package/dist/auth/oidc.d.ts +4 -3
- package/dist/auth/oidc.js +18 -6
- package/dist/auth/oidc.js.map +1 -1
- package/dist/auth/sessions.d.ts +2 -2
- package/dist/auth/sessions.js +2 -2
- package/dist/auth/sessions.js.map +1 -1
- package/dist/auth/throttle.d.ts +2 -1
- package/dist/auth/throttle.js +16 -6
- package/dist/auth/throttle.js.map +1 -1
- package/dist/auth/users.d.ts +19 -1
- package/dist/auth/users.js +45 -11
- package/dist/auth/users.js.map +1 -1
- package/dist/catalog/role-levels.d.ts +1 -1
- package/dist/catalog/role-levels.js +5 -3
- package/dist/catalog/role-levels.js.map +1 -1
- package/dist/db/schema.d.ts +24 -0
- package/dist/db/schema.js +2 -0
- package/dist/db/schema.js.map +1 -1
- package/dist/errors.d.ts +10 -2
- package/dist/errors.js +12 -0
- package/dist/errors.js.map +1 -1
- package/dist/gate/pipeline.d.ts +2 -2
- package/dist/gate/pipeline.js +53 -18
- package/dist/gate/pipeline.js.map +1 -1
- package/dist/http/admin/auth.js +64 -28
- package/dist/http/admin/auth.js.map +1 -1
- package/dist/http/admin/system.js +27 -3
- package/dist/http/admin/system.js.map +1 -1
- package/dist/http/common.d.ts +1 -1
- package/dist/http/mcp/approval-routes.js +2 -1
- package/dist/http/mcp/approval-routes.js.map +1 -1
- package/dist/http/mcp/endpoint.js +5 -5
- package/dist/http/mcp/endpoint.js.map +1 -1
- package/dist/http/mcp/oauth-routes.js +16 -7
- package/dist/http/mcp/oauth-routes.js.map +1 -1
- package/dist/instances/manager.d.ts +4 -0
- package/dist/instances/manager.js +30 -13
- package/dist/instances/manager.js.map +1 -1
- package/dist/notify/service.d.ts +32 -2
- package/dist/notify/service.js +40 -12
- package/dist/notify/service.js.map +1 -1
- package/dist/plugins/repos.d.ts +70 -1
- package/dist/plugins/repos.js +234 -61
- package/dist/plugins/repos.js.map +1 -1
- package/drizzle/0018_plugin_manual.sql +1 -0
- package/drizzle/meta/0018_snapshot.json +2862 -0
- package/drizzle/meta/_journal.json +7 -0
- package/package.json +5 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/notify/service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/notify/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAGtF;6CAC6C;AAE7C,MAAM,aAAa,GAAG;IACpB,gBAAgB;IAChB,oBAAoB;IACpB,gBAAgB;IAChB,aAAa;IACb,qBAAqB;IACrB,cAAc;CACN,CAAC;AAGX,6FAA6F;AAC7F,MAAM,WAAW,GAAG,CAAC,MAAgB,EAAE,EAAE,CACvC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAoB,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAgB,CAAC,CAAC,CAAC;AAEnF,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC;IAC1C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,uBAAuB,EAAE,0BAA0B,CAAC;CAC7E,CAAC,CAAC;AACH,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAEjD,MAAM,kBAAkB,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IACtD,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QACvB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QACvC,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1E,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7C,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAC5D,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;KACnC,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QACvC,MAAM,EAAE,aAAa;QACrB,OAAO,EAAE,CAAC;aACP,MAAM,CAAC;YACN,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;YAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;SAChE,CAAC;aACD,OAAO,CAAC,EAAE,CAAC;QACd,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7C,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAC5D,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;KACnC,CAAC;CACH,CAAC,CAAC;AAIH,MAAM,aAAa,GAAG,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,EAAW,CAAC;AAevF,MAAM,OAAO,eAAe;IAMP;IACA;IACA;IAPF,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxD,oHAAoH;IACnG,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE1C,YACmB,EAAM,EACN,GAAc,EACd,OAIb,EAAE;QANW,OAAE,GAAF,EAAE,CAAI;QACN,QAAG,GAAH,GAAG,CAAW;QACd,SAAI,GAAJ,IAAI,CAIf;IACL,CAAC;IAEJ,+EAA+E;IACvE,SAAS,CAAC,GAAe;QAC/B,IAAI,CAAC,GAAG,CAAC,UAAU;YAAE,OAAO,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAU,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,mBAAmB,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACxG,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,eAAe;gBAAE,OAAO,SAAS,CAAC;YACrD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,SAAS,CAAC,GAAe;QAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;QAChF,IAAI,CAAC,CAAC;YAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;QACjE,OAAO;YACL,GAAG,IAAI;YACP,OAAO,EAAE;gBACP,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7D,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS;oBACxB,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE;oBAC7G,CAAC,CAAC,EAAE,CAAC;aACR;SACF,CAAC;IACJ,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,EAAE;aACX,MAAM,EAAE;aACR,IAAI,CAAC,gBAAgB,CAAC;aACtB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;aACnC,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IAEO,YAAY,CAAC,OAAgB,EAAE,KAA8B;QACnE,MAAM,IAAI,GAAY,EAAE,GAAG,OAAO,EAAE,CAAC;QACrC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,KAAK,SAAS;gBAAE,SAAS;YAC9B,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;gBAAE,OAAO,IAAI,CAAC,CAAkB,CAAC,CAAC;;gBACtD,IAAgC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,GAAY,EAAE,OAAqD,EAAE;QACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE;YACtB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;YACvF,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,aAAa,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;QAC1F,MAAM,MAAM,GAAG,QAAQ;YACrB,CAAC,CAAC;gBACE,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACpC,cAAc,EAAE,QAAQ,CAAC,cAAc;gBACvC,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,GAAI,GAAc;aACnB;YACH,CAAC,CAAC,GAAG,CAAC;QACR,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,OAAO;YACjB,MAAM,IAAI,eAAe,CACvB,iBAAiB,EACjB,iBAAiB,EACjB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CACpE,CAAC;QACJ,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;QAC1B,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;YAC1C,MAAM,IAAI,eAAe,CAAC,gBAAgB,EAAE,gCAAgC,CAAC,CAAC;QAChF,MAAM,EAAE,GAAG,QAAQ,EAAE,EAAE,IAAI,UAAU,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAkC,CAAC;QACvD,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,qGAAqG;QACrG,IAAI,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;YAAE,MAAM,IAAI,sBAAsB,EAAE,CAAC;QACpH,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG;YACb,EAAE;YACF,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM;gBACrC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,mBAAmB,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;gBAC5E,CAAC,CAAC,IAAI;YACR,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC;QACF,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE;YACzB,IAAI,QAAQ;gBAAE,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;;gBAC1F,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;YACtD,UAAU,CAAC,EAAE,EAAE;gBACb,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,kBAAkB;gBAC5D,SAAS,EAAE,MAAM;gBACjB,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM;gBAC3B,MAAM,EAAE;oBACN,EAAE;oBACF,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;iBAC3C;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAG,CAAC,CAAC;IAC3G,CAAC;IAED,MAAM,CAAC,EAAU,EAAE,QAA6B,EAAE;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7F,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,aAAa,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;QAC1E,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE;YACzB,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YACrE,UAAU,CAAC,EAAE,EAAE;gBACb,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,kBAAkB;gBAC5B,SAAS,EAAE,MAAM;gBACjB,OAAO,EAAE,KAAK,CAAC,MAAM;gBACrB,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;aAC/B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,uEAAuE;IACvE,KAAK,CAAC,IAAI,CAAC,EAAU;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7F,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,aAAa,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;QAC1E,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,sBAAsB,EAAE,CAAC;QAC7D,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YACvB,KAAK,EAAE,aAAa;YACpB,KAAK,EAAE,mBAAmB;YAC1B,OAAO,EAAE,0CAA0C;YACnD,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;SACrB,CAAC,CAAC;IACL,CAAC;IAED,wEAAwE;IACxE,SAAS,CAAC,MAAkB;QAC1B,MAAM,IAAI,GAAmB,EAAE,CAAC;QAChC,MAAM,EAAE,GAAG,CAA0B,IAAO,EAAE,CAAqC,EAAE,EAAE;YACrF,MAAM,QAAQ,GAAG,CAAU,CAAC;YAC5B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC;QACF,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YAC/C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC7C,KAAK,IAAI,CAAC,QAAQ,CAAC;oBACjB,KAAK,EAAE,gBAAgB;oBACvB,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;oBAC5C,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,UAAU;oBAC3B,OAAO,EAAE,CAAC,CAAC,KAAK,IAAI,cAAc;oBAClC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE;iBACjC,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO;gBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;iBACjD,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;gBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;iBAC3D,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;gBAChE,KAAK,IAAI,CAAC,QAAQ,CAAC;oBACjB,KAAK,EAAE,oBAAoB;oBAC3B,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;oBAC5C,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,YAAY;oBAC7B,OAAO,EAAE,8BAA8B;oBACvC,IAAI,EAAE,EAAE;iBACT,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QACH,EAAE,CACA,gBAAgB,EAChB,CAAC,CAAC,EAAE,EAAE,CACJ,KAAK,IAAI,CAAC,QAAQ,CAAC;YACjB,KAAK,EAAE,gBAAgB;YACvB,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YAC5C,KAAK,EAAE,eAAe,CAAC,CAAC,IAAI,UAAU;YACtC,OAAO,EAAE,CAAC,CAAC,KAAK;YAChB,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;SACzB,CAAC,CACL,CAAC;QACF,EAAE,CACA,aAAa,EACb,CAAC,CAAC,EAAE,EAAE,CACJ,KAAK,IAAI,CAAC,QAAQ,CAAC;YACjB,KAAK,EAAE,aAAa;YACpB,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YAC5C,KAAK,EAAE,4BAA4B,CAAC,CAAC,IAAI,EAAE;YAC3C,OAAO,EAAE,CAAC,CAAC,KAAK;YAChB,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE;SACzB,CAAC,CACL,CAAC;QACF,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE;YACzB,MAAM,aAAa,GAAG,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC;YAC3C,IAAI,CAAC,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,KAAK,CAAC;gBAAE,OAAO;YAChE,MAAM,KAAK,GAAG,EAAE,CAAC;YACjB,IAAI,CAAC,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;gBAC5B,KAAK,CAAC,IAAI,CACR,0FAA0F,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/K,CAAC;YACJ,IAAI,aAAa,GAAG,CAAC;gBACnB,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,wEAAwE,CAAC,CAAC;YACvG,KAAK,IAAI,CAAC,QAAQ,CAAC;gBACjB,KAAK,EAAE,qBAAqB;gBAC5B,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;gBAC5C,KAAK,EACH,CAAC,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;oBACxB,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,MAAM,qCAAqC,CAAC,CAAC,IAAI,EAAE;oBACxE,CAAC,CAAC,mCAAmC,CAAC,CAAC,IAAI,EAAE;gBACjD,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;gBACzB,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,aAAa,EAAE,aAAa,EAAE;aACrD,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,EAAE,CACA,cAAc,EACd,CAAC,CAAC,EAAE,EAAE,CACJ,KAAK,IAAI,CAAC,QAAQ,CAAC;YACjB,KAAK,EAAE,cAAc;YACrB,KAAK,EAAE,gBAAgB;YACvB,OAAO,EAAE,iCAAiC,CAAC,CAAC,QAAQ,YAAY,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG;YACrK,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,OAAO,EAAE;SAChF,CAAC,CACL,CAAC;QACF,OAAO,GAAG,EAAE;YACV,KAAK,MAAM,GAAG,IAAI,IAAI;gBAAE,GAAG,EAAE,CAAC;QAChC,CAAC,CAAC;IACJ,CAAC;IAED,+FAA+F;IAC/F,KAAK,CAAC,QAAQ,CAAC,CAAe;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE;aACrB,MAAM,EAAE;aACR,IAAI,CAAC,gBAAgB,CAAC;aACtB,GAAG,EAAE;aACL,MAAM,CACL,CAAC,EAAE,EAAE,EAAE,CACL,EAAE,CAAC,OAAO;YACV,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;YAC3B,CAAC,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAC5F,CAAC;QACJ,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,GAAe,EAAE,CAAe;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,sBAAsB,EAAE,CAAC,OAAO,CAAC,CAAC;QAC5E,IAAI,OAAuE,CAAC;QAC5E,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACzC,OAAO,GAAG;gBACR,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;gBACnC,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACvE;gBACD,+DAA+D;gBAC/D,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAChF,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;iBAClC,CAAC;aACH,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC5F,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC1B,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,EAAE,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;gBACpD,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI;gBAC5B,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,IAAI,EAAE,CAAC,CAAC,IAAI;aACb,CAAC,CAAC;YACH,OAAO,GAAG;gBACR,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,OAAO,EAAE;oBACP,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;oBAC1B,cAAc,EAAE,kBAAkB;oBAClC,kBAAkB,EAAE,CAAC,CAAC,KAAK;oBAC3B,sBAAsB,EAAE,SAAS;oBACjC,GAAG,CAAC,OAAO,CAAC,UAAU;wBACpB,CAAC,CAAC;4BACE,sBAAsB,EAAE,UAAU,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;yBAC1H;wBACH,CAAC,CAAC,EAAE,CAAC;iBACR;gBACD,IAAI;aACL,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAc,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;QAChF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvD,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;YAC1D,IAAI,OAAO,GAAG,CAAC;gBAAE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9E,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;oBACrC,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;iBACpC,CAAC,CAAC;gBACH,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;oBACX,IAAI,CAAC,EAAE;yBACJ,MAAM,CAAC,gBAAgB,CAAC;yBACxB,GAAG,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;yBACrE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;yBACtC,GAAG,EAAE,CAAC;oBACT,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;gBACtB,CAAC;gBACD,SAAS,GAAG,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;gBACjC,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;oBAAE,MAAM,CAAC,yBAAyB;YACnG,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,SAAS,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACrC,CAAC;IAEO,MAAM,CAAC,GAAe,EAAE,KAAa;QAC3C,IAAI,CAAC,EAAE;aACJ,MAAM,CAAC,gBAAgB,CAAC;aACxB,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;aACvC,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;aACtC,GAAG,EAAE,CAAC;QACT,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;CACF"}
|
package/dist/plugins/repos.d.ts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import type { Db } from '../db/index.js';
|
|
3
|
+
/** Plugin repositories and installs (design §4.2–4.3): explicit installs of pinned versions, verified by
|
|
4
|
+
* sha256 and, for signed repos, a minisign signature from the admin-pinned key. */
|
|
5
|
+
export declare const LIMITS: {
|
|
6
|
+
indexBytes: number;
|
|
7
|
+
tarballBytes: number;
|
|
8
|
+
extractedBytes: number;
|
|
9
|
+
entries: number;
|
|
10
|
+
};
|
|
3
11
|
export declare const IndexSchema: z.ZodObject<{
|
|
4
12
|
schema: z.ZodLiteral<1>;
|
|
5
13
|
name: z.ZodString;
|
|
@@ -24,7 +32,6 @@ export declare const InstallSchema: z.ZodObject<{
|
|
|
24
32
|
repoId: z.ZodString;
|
|
25
33
|
pluginId: z.ZodString;
|
|
26
34
|
version: z.ZodString;
|
|
27
|
-
confirm: z.ZodOptional<z.ZodString>;
|
|
28
35
|
}, z.core.$strip>;
|
|
29
36
|
export type FetchBytes = (url: string, init?: {
|
|
30
37
|
signal?: AbortSignal;
|
|
@@ -52,6 +59,8 @@ export declare function swapDirectory(next: string, target: string, backup: stri
|
|
|
52
59
|
export declare class PluginRepoService {
|
|
53
60
|
private readonly opts;
|
|
54
61
|
private readonly installing;
|
|
62
|
+
private upload;
|
|
63
|
+
private staging;
|
|
55
64
|
constructor(opts: RepoServiceOptions);
|
|
56
65
|
private get db();
|
|
57
66
|
private now;
|
|
@@ -174,6 +183,7 @@ export declare class PluginRepoService {
|
|
|
174
183
|
version: string;
|
|
175
184
|
fromThisRepo: boolean;
|
|
176
185
|
managed: boolean;
|
|
186
|
+
manual: boolean;
|
|
177
187
|
} | null;
|
|
178
188
|
updateAvailable: boolean;
|
|
179
189
|
blocked: string | null;
|
|
@@ -195,9 +205,68 @@ export declare class PluginRepoService {
|
|
|
195
205
|
statusError: string | null;
|
|
196
206
|
instructions: string | null;
|
|
197
207
|
enabled: boolean;
|
|
208
|
+
manual: import("../db/schema.js").ManualInstall | null;
|
|
198
209
|
installedAt: Date;
|
|
199
210
|
}>;
|
|
211
|
+
private locked;
|
|
212
|
+
private pluginByPluginId;
|
|
213
|
+
private pluginRow;
|
|
200
214
|
private installLocked;
|
|
215
|
+
/** The step every install shares: stop, swap the files in, rediscover, record, start again. */
|
|
216
|
+
private swapIn;
|
|
217
|
+
private dropUpload;
|
|
218
|
+
/** Extracts and inspects an uploaded tarball, and describes what installing it would change. */
|
|
219
|
+
stageUpload(bytes: Buffer, rawFileName: unknown): Promise<{
|
|
220
|
+
uploadId: `${string}-${string}-${string}-${string}-${string}`;
|
|
221
|
+
pluginId: string;
|
|
222
|
+
version: string;
|
|
223
|
+
sdk: string;
|
|
224
|
+
sha256: string;
|
|
225
|
+
fileName: string;
|
|
226
|
+
sdkCompatible: boolean;
|
|
227
|
+
expiresAt: Date;
|
|
228
|
+
replaces: {
|
|
229
|
+
version: string;
|
|
230
|
+
repoName: string | null;
|
|
231
|
+
manual: boolean;
|
|
232
|
+
enabled: boolean;
|
|
233
|
+
} | null;
|
|
234
|
+
permissionChanges: string[];
|
|
235
|
+
}>;
|
|
236
|
+
/** Installs the staged upload over the plugin with its id, keeping the row, its repository and endpoints. */
|
|
237
|
+
installUpload(uploadId: string, actor?: Actor): Promise<{
|
|
238
|
+
id: string;
|
|
239
|
+
pluginId: string;
|
|
240
|
+
version: string;
|
|
241
|
+
repoId: string | null;
|
|
242
|
+
path: string;
|
|
243
|
+
sha256: string | null;
|
|
244
|
+
signatureVerified: boolean;
|
|
245
|
+
manifest: unknown;
|
|
246
|
+
status: "ok" | "invalid" | "incompatible";
|
|
247
|
+
statusError: string | null;
|
|
248
|
+
instructions: string | null;
|
|
249
|
+
enabled: boolean;
|
|
250
|
+
manual: import("../db/schema.js").ManualInstall | null;
|
|
251
|
+
installedAt: Date;
|
|
252
|
+
}>;
|
|
253
|
+
/** Reinstalls the repository version a manual install replaced, through the normal install. */
|
|
254
|
+
revert(rowOrPluginId: string, actor?: Actor): Promise<{
|
|
255
|
+
id: string;
|
|
256
|
+
pluginId: string;
|
|
257
|
+
version: string;
|
|
258
|
+
repoId: string | null;
|
|
259
|
+
path: string;
|
|
260
|
+
sha256: string | null;
|
|
261
|
+
signatureVerified: boolean;
|
|
262
|
+
manifest: unknown;
|
|
263
|
+
status: "ok" | "invalid" | "incompatible";
|
|
264
|
+
statusError: string | null;
|
|
265
|
+
instructions: string | null;
|
|
266
|
+
enabled: boolean;
|
|
267
|
+
manual: import("../db/schema.js").ManualInstall | null;
|
|
268
|
+
installedAt: Date;
|
|
269
|
+
}>;
|
|
201
270
|
/** Removes an installed plugin. Blocked while any instance uses it. */
|
|
202
271
|
uninstall(pluginRowOrId: string, actor?: Actor): void;
|
|
203
272
|
}
|
package/dist/plugins/repos.js
CHANGED
|
@@ -16,7 +16,7 @@ import { inspectPluginDir } from './discovery.js';
|
|
|
16
16
|
import { MinisignError, parsePublicKey, verifySignature } from './minisign.js';
|
|
17
17
|
/** Plugin repositories and installs (design §4.2–4.3): explicit installs of pinned versions, verified by
|
|
18
18
|
* sha256 and, for signed repos, a minisign signature from the admin-pinned key. */
|
|
19
|
-
const LIMITS = {
|
|
19
|
+
export const LIMITS = {
|
|
20
20
|
indexBytes: 2 * 1024 * 1024,
|
|
21
21
|
tarballBytes: 50 * 1024 * 1024,
|
|
22
22
|
extractedBytes: 200 * 1024 * 1024,
|
|
@@ -54,9 +54,17 @@ export const InstallSchema = z.object({
|
|
|
54
54
|
repoId: z.string(),
|
|
55
55
|
pluginId: z.string(),
|
|
56
56
|
version: z.string(),
|
|
57
|
-
/** Unsigned repos: must equal the plugin id. */
|
|
58
|
-
confirm: z.string().optional(),
|
|
59
57
|
});
|
|
58
|
+
const FileNameSchema = z
|
|
59
|
+
.string()
|
|
60
|
+
.trim()
|
|
61
|
+
.min(1)
|
|
62
|
+
.max(255)
|
|
63
|
+
.regex(/^[^/\\\0]+$/, 'must be a file name');
|
|
64
|
+
// Control characters and bidi overrides would make the name display as another name in the portal and audit.
|
|
65
|
+
const UNSAFE_NAME_CHARS = /[\p{Cc}\u202A-\u202E\u2066-\u2069]/u;
|
|
66
|
+
const UPLOAD_PREFIX = 'upload-';
|
|
67
|
+
const UPLOAD_TTL_MS = 15 * 60_000;
|
|
60
68
|
const MAX_REDIRECTS = 5;
|
|
61
69
|
/** `settings` row recording that the pre-configured repository was added once. */
|
|
62
70
|
const DEFAULT_REPO_MARKER = 'plugin_repos.preconfigured';
|
|
@@ -95,8 +103,16 @@ export function swapDirectory(next, target, backup, rename = renameSync) {
|
|
|
95
103
|
export class PluginRepoService {
|
|
96
104
|
opts;
|
|
97
105
|
installing = new Set();
|
|
106
|
+
upload = null;
|
|
107
|
+
staging = false;
|
|
98
108
|
constructor(opts) {
|
|
99
109
|
this.opts = opts;
|
|
110
|
+
// Staged uploads do not survive a restart.
|
|
111
|
+
if (existsSync(this.stagingDir)) {
|
|
112
|
+
for (const name of readdirSync(this.stagingDir))
|
|
113
|
+
if (name.startsWith(UPLOAD_PREFIX))
|
|
114
|
+
rmSync(path.join(this.stagingDir, name), { recursive: true, force: true });
|
|
115
|
+
}
|
|
100
116
|
}
|
|
101
117
|
get db() {
|
|
102
118
|
return this.opts.db;
|
|
@@ -412,7 +428,9 @@ export class PluginRepoService {
|
|
|
412
428
|
description: p.description ?? null,
|
|
413
429
|
versions: p.versions.map((v) => ({ version: v.version, compatible: compatible.includes(v.version) })),
|
|
414
430
|
latest,
|
|
415
|
-
installed: current
|
|
431
|
+
installed: current
|
|
432
|
+
? { version: current.version, fromThisRepo: fromHere, managed: !!current.repoId, manual: !!current.manual }
|
|
433
|
+
: null,
|
|
416
434
|
updateAvailable: !!(fromHere && latest && semver.gt(latest, current.version)),
|
|
417
435
|
blocked: current?.repoId && !fromHere
|
|
418
436
|
? 'installed_from_elsewhere'
|
|
@@ -475,18 +493,30 @@ export class PluginRepoService {
|
|
|
475
493
|
}
|
|
476
494
|
async install(raw, actor = {}) {
|
|
477
495
|
const input = InstallSchema.parse(raw);
|
|
478
|
-
|
|
479
|
-
|
|
496
|
+
return this.locked(input.pluginId, () => this.installLocked(input, actor));
|
|
497
|
+
}
|
|
498
|
+
async locked(pluginId, fn) {
|
|
499
|
+
if (this.installing.has(pluginId)) {
|
|
500
|
+
throw new ConflictError('install_in_progress', `"${pluginId}" is already being installed`);
|
|
480
501
|
}
|
|
481
|
-
this.installing.add(
|
|
502
|
+
this.installing.add(pluginId);
|
|
482
503
|
try {
|
|
483
|
-
return await
|
|
504
|
+
return await fn();
|
|
484
505
|
}
|
|
485
506
|
finally {
|
|
486
|
-
this.installing.delete(
|
|
507
|
+
this.installing.delete(pluginId);
|
|
487
508
|
}
|
|
488
509
|
}
|
|
489
|
-
|
|
510
|
+
pluginByPluginId(pluginId) {
|
|
511
|
+
return this.db.select().from(plugins).where(eq(plugins.pluginId, pluginId)).get();
|
|
512
|
+
}
|
|
513
|
+
pluginRow(rowOrPluginId) {
|
|
514
|
+
const row = this.db.select().from(plugins).where(eq(plugins.id, rowOrPluginId)).get() ?? this.pluginByPluginId(rowOrPluginId);
|
|
515
|
+
if (!row)
|
|
516
|
+
throw new NotFoundError('plugin_not_found', 'No such plugin');
|
|
517
|
+
return row;
|
|
518
|
+
}
|
|
519
|
+
async installLocked(input, actor, reverting = false) {
|
|
490
520
|
const repo = this.repoRow(input.repoId);
|
|
491
521
|
if (repo.keyStatus === 'key_changed') {
|
|
492
522
|
throw new ConflictError('key_changed', 'The repository signing key changed; confirm the new key before installing');
|
|
@@ -502,16 +532,13 @@ export class PluginRepoService {
|
|
|
502
532
|
if (version.minCoreVersion && !semver.gte(CORE_VERSION, version.minCoreVersion)) {
|
|
503
533
|
throw new ConflictError('incompatible', `${input.pluginId}@${input.version} needs core ${version.minCoreVersion} or newer`);
|
|
504
534
|
}
|
|
505
|
-
const current = this.
|
|
535
|
+
const current = this.pluginByPluginId(input.pluginId);
|
|
506
536
|
if (current?.repoId && current.repoId !== repo.id) {
|
|
507
537
|
throw new ConflictError('installed_from_elsewhere', `"${input.pluginId}" is installed from another repository; uninstall it first`);
|
|
508
538
|
}
|
|
509
539
|
// A plugin no repository manages (a built-in plugin from before 0.3.0, or one copied in by hand) is
|
|
510
540
|
// adopted: this install replaces its files and keeps its row, so its endpoints carry over.
|
|
511
541
|
const adopting = !!current && !current.repoId;
|
|
512
|
-
if (repo.signingMode === 'unsigned' && input.confirm !== input.pluginId) {
|
|
513
|
-
throw new ConflictError('confirm_required', `This repository is unsigned. Type "${input.pluginId}" to install anyway`);
|
|
514
|
-
}
|
|
515
542
|
const tarballUrl = this.checkUrl(version.url, repo.url);
|
|
516
543
|
const tarball = await this.download(tarballUrl, LIMITS.tarballBytes);
|
|
517
544
|
const sha256 = createHash('sha256').update(tarball).digest('hex');
|
|
@@ -541,63 +568,209 @@ export class PluginRepoService {
|
|
|
541
568
|
if (inspected.manifest.id !== input.pluginId || inspected.manifest.version !== input.version) {
|
|
542
569
|
throw new ValidationError('manifest_mismatch', `The archive contains ${inspected.manifest.id}@${inspected.manifest.version}, not ${input.pluginId}@${input.version}`);
|
|
543
570
|
}
|
|
544
|
-
|
|
571
|
+
return await this.swapIn({
|
|
572
|
+
root,
|
|
573
|
+
manifest: inspected.manifest,
|
|
574
|
+
current,
|
|
575
|
+
// Adopted code comes from a new source, so it waits for the admin's review like a new install.
|
|
576
|
+
keepEnabled: !adopting,
|
|
577
|
+
set: { repoId: repo.id, sha256, signatureVerified, manual: null },
|
|
578
|
+
decision: reverting
|
|
579
|
+
? 'plugin_manual_reverted'
|
|
580
|
+
: adopting
|
|
581
|
+
? 'plugin_adopted'
|
|
582
|
+
: current
|
|
583
|
+
? 'plugin_updated'
|
|
584
|
+
: 'plugin_installed',
|
|
585
|
+
detail: {
|
|
586
|
+
pluginId: input.pluginId,
|
|
587
|
+
version: input.version,
|
|
588
|
+
previousVersion: current?.version ?? null,
|
|
589
|
+
repo: repo.url,
|
|
590
|
+
sha256,
|
|
591
|
+
signatureVerified,
|
|
592
|
+
...(current?.manual ? { replacedFile: current.manual.fileName, replacedSha256: current.sha256 } : {}),
|
|
593
|
+
},
|
|
594
|
+
actor,
|
|
595
|
+
});
|
|
596
|
+
}
|
|
597
|
+
finally {
|
|
598
|
+
rmSync(work, { recursive: true, force: true });
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
/** The step every install shares: stop, swap the files in, rediscover, record, start again. */
|
|
602
|
+
async swapIn(a) {
|
|
603
|
+
const { current } = a;
|
|
604
|
+
if (current)
|
|
605
|
+
await this.opts.stopPlugin(current.id);
|
|
606
|
+
mkdirSync(this.pluginsDir, { recursive: true });
|
|
607
|
+
try {
|
|
608
|
+
swapDirectory(a.root, path.join(this.pluginsDir, a.manifest.id), path.join(this.stagingDir, `${randomUUID()}-old`));
|
|
609
|
+
}
|
|
610
|
+
catch (err) {
|
|
611
|
+
// The old version is back in place: bring its instances back up before reporting the failure.
|
|
545
612
|
if (current)
|
|
546
|
-
await this.opts.
|
|
547
|
-
|
|
548
|
-
|
|
613
|
+
await this.opts.startPlugin(current.id);
|
|
614
|
+
throw err;
|
|
615
|
+
}
|
|
616
|
+
this.opts.discover();
|
|
617
|
+
const row = this.pluginByPluginId(a.manifest.id);
|
|
618
|
+
// New installs start disabled, and an update that changes what the plugin may do is disabled
|
|
619
|
+
// again: enabling it is the admin's review of its binding, capabilities and hosts (design §4.2).
|
|
620
|
+
const review = current ? permissionChanges(current.manifest, a.manifest) : [];
|
|
621
|
+
const enabled = current && a.keepEnabled ? current.enabled && review.length === 0 : false;
|
|
622
|
+
this.db.transaction((tx) => {
|
|
623
|
+
tx.update(plugins)
|
|
624
|
+
.set({ ...a.set, enabled })
|
|
625
|
+
.where(eq(plugins.id, row.id))
|
|
626
|
+
.run();
|
|
627
|
+
writeAudit(tx, {
|
|
628
|
+
kind: 'config',
|
|
629
|
+
decision: a.decision,
|
|
630
|
+
actorKind: 'user',
|
|
631
|
+
actorId: a.actor.userId,
|
|
632
|
+
detail: { ...a.detail, enabled, ...(review.length ? { needsReview: review } : {}) },
|
|
633
|
+
});
|
|
634
|
+
});
|
|
635
|
+
if (enabled)
|
|
636
|
+
await this.opts.startPlugin(row.id);
|
|
637
|
+
return this.db.select().from(plugins).where(eq(plugins.id, row.id)).get();
|
|
638
|
+
}
|
|
639
|
+
// ── manual plugins (design §4.6) ──
|
|
640
|
+
dropUpload() {
|
|
641
|
+
if (this.upload)
|
|
642
|
+
rmSync(this.upload.work, { recursive: true, force: true });
|
|
643
|
+
this.upload = null;
|
|
644
|
+
}
|
|
645
|
+
/** Extracts and inspects an uploaded tarball, and describes what installing it would change. */
|
|
646
|
+
async stageUpload(bytes, rawFileName) {
|
|
647
|
+
const fileName = FileNameSchema.parse(rawFileName);
|
|
648
|
+
if (UNSAFE_NAME_CHARS.test(fileName)) {
|
|
649
|
+
throw new ValidationError('invalid_file_name', 'The file name contains control or bidi characters');
|
|
650
|
+
}
|
|
651
|
+
if (bytes.length > LIMITS.tarballBytes)
|
|
652
|
+
throw new ValidationError('too_large', 'The file is too large');
|
|
653
|
+
// One extraction at a time, so overlapping uploads cannot fill the disk.
|
|
654
|
+
if (this.staging)
|
|
655
|
+
throw new ConflictError('upload_in_progress', 'Another upload is being processed');
|
|
656
|
+
this.staging = true;
|
|
657
|
+
const sha256 = createHash('sha256').update(bytes).digest('hex');
|
|
658
|
+
const id = randomUUID();
|
|
659
|
+
const work = path.join(this.stagingDir, `${UPLOAD_PREFIX}${id}`);
|
|
660
|
+
let root;
|
|
661
|
+
let manifest;
|
|
662
|
+
let sdkCompatible;
|
|
663
|
+
try {
|
|
664
|
+
root = await this.extract(bytes, work);
|
|
665
|
+
const inspected = inspectPluginDir(root);
|
|
666
|
+
if (inspected.status === 'invalid')
|
|
667
|
+
throw new ValidationError('invalid_plugin', inspected.error);
|
|
668
|
+
if (!inspected.manifest)
|
|
669
|
+
throw new ValidationError('invalid_plugin', 'manifest.json is missing');
|
|
670
|
+
manifest = inspected.manifest;
|
|
671
|
+
sdkCompatible = inspected.status === 'ok';
|
|
672
|
+
}
|
|
673
|
+
catch (err) {
|
|
674
|
+
rmSync(work, { recursive: true, force: true });
|
|
675
|
+
throw err;
|
|
676
|
+
}
|
|
677
|
+
finally {
|
|
678
|
+
this.staging = false;
|
|
679
|
+
}
|
|
680
|
+
// One staged upload at a time: a new one replaces the last, which bounds the disk they use.
|
|
681
|
+
this.dropUpload();
|
|
682
|
+
const expiresAt = new Date(this.now().getTime() + UPLOAD_TTL_MS);
|
|
683
|
+
this.upload = { id, work, root, fileName, sha256, manifest, sdkCompatible, expiresAt };
|
|
684
|
+
setTimeout(() => {
|
|
685
|
+
if (this.upload?.id === id)
|
|
686
|
+
this.dropUpload();
|
|
687
|
+
}, UPLOAD_TTL_MS).unref();
|
|
688
|
+
const current = this.pluginByPluginId(manifest.id);
|
|
689
|
+
return {
|
|
690
|
+
uploadId: id,
|
|
691
|
+
pluginId: manifest.id,
|
|
692
|
+
version: manifest.version,
|
|
693
|
+
sdk: manifest.sdk,
|
|
694
|
+
sha256,
|
|
695
|
+
fileName,
|
|
696
|
+
sdkCompatible,
|
|
697
|
+
expiresAt,
|
|
698
|
+
replaces: current
|
|
699
|
+
? {
|
|
700
|
+
version: current.version,
|
|
701
|
+
repoName: current.repoId ? this.repoRow(current.repoId).name : null,
|
|
702
|
+
manual: !!current.manual,
|
|
703
|
+
enabled: current.enabled,
|
|
704
|
+
}
|
|
705
|
+
: null,
|
|
706
|
+
permissionChanges: current ? permissionChanges(current.manifest, manifest) : [],
|
|
707
|
+
};
|
|
708
|
+
}
|
|
709
|
+
/** Installs the staged upload over the plugin with its id, keeping the row, its repository and endpoints. */
|
|
710
|
+
async installUpload(uploadId, actor = {}) {
|
|
711
|
+
const upload = this.upload;
|
|
712
|
+
if (!upload || upload.id !== uploadId)
|
|
713
|
+
throw new NotFoundError('upload_not_found', 'No such upload');
|
|
714
|
+
if (this.now() >= upload.expiresAt) {
|
|
715
|
+
this.dropUpload();
|
|
716
|
+
throw new ConflictError('upload_expired', 'This upload expired; upload the file again');
|
|
717
|
+
}
|
|
718
|
+
const { id: pluginId, version, sdk } = upload.manifest;
|
|
719
|
+
if (!upload.sdkCompatible)
|
|
720
|
+
throw new ConflictError('incompatible', `${pluginId}@${version} needs plugin SDK ${sdk}`);
|
|
721
|
+
return this.locked(pluginId, async () => {
|
|
722
|
+
this.upload = null;
|
|
549
723
|
try {
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
this.db.transaction((tx) => {
|
|
566
|
-
tx.update(plugins)
|
|
567
|
-
.set({ repoId: repo.id, sha256, signatureVerified, enabled })
|
|
568
|
-
.where(eq(plugins.id, row.id))
|
|
569
|
-
.run();
|
|
570
|
-
writeAudit(tx, {
|
|
571
|
-
kind: 'config',
|
|
572
|
-
decision: adopting ? 'plugin_adopted' : current ? 'plugin_updated' : 'plugin_installed',
|
|
573
|
-
actorKind: 'user',
|
|
574
|
-
actorId: actor.userId,
|
|
724
|
+
const current = this.pluginByPluginId(pluginId);
|
|
725
|
+
const releasedVersion = current?.manual
|
|
726
|
+
? current.manual.releasedVersion
|
|
727
|
+
: current?.repoId
|
|
728
|
+
? current.version
|
|
729
|
+
: null;
|
|
730
|
+
const manual = { fileName: upload.fileName, uploadedAt: this.now().toISOString(), releasedVersion };
|
|
731
|
+
return await this.swapIn({
|
|
732
|
+
root: upload.root,
|
|
733
|
+
manifest: upload.manifest,
|
|
734
|
+
current,
|
|
735
|
+
// Installing after the unsigned warning is the admin's review of the code; permission changes still disable it.
|
|
736
|
+
keepEnabled: true,
|
|
737
|
+
set: { sha256: upload.sha256, signatureVerified: false, manual },
|
|
738
|
+
decision: 'plugin_manual_installed',
|
|
575
739
|
detail: {
|
|
576
|
-
pluginId
|
|
577
|
-
version
|
|
740
|
+
pluginId,
|
|
741
|
+
version,
|
|
578
742
|
previousVersion: current?.version ?? null,
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
enabled,
|
|
583
|
-
...(review.length ? { needsReview: review } : {}),
|
|
743
|
+
sha256: upload.sha256,
|
|
744
|
+
fileName: upload.fileName,
|
|
745
|
+
releasedVersion,
|
|
584
746
|
},
|
|
747
|
+
actor,
|
|
585
748
|
});
|
|
586
|
-
}
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
}
|
|
591
|
-
|
|
592
|
-
|
|
749
|
+
}
|
|
750
|
+
finally {
|
|
751
|
+
rmSync(upload.work, { recursive: true, force: true });
|
|
752
|
+
}
|
|
753
|
+
});
|
|
754
|
+
}
|
|
755
|
+
/** Reinstalls the repository version a manual install replaced, through the normal install. */
|
|
756
|
+
async revert(rowOrPluginId, actor = {}) {
|
|
757
|
+
const row = this.pluginRow(rowOrPluginId);
|
|
758
|
+
const released = row.manual?.releasedVersion;
|
|
759
|
+
if (!released || !row.repoId) {
|
|
760
|
+
throw new ConflictError('not_manual', 'This plugin has no released version to revert to');
|
|
761
|
+
}
|
|
762
|
+
const repo = this.repoRow(row.repoId);
|
|
763
|
+
const index = repo.indexCache;
|
|
764
|
+
const entry = index?.plugins.find((p) => p.id === row.pluginId);
|
|
765
|
+
if (!entry?.versions.some((v) => v.version === released)) {
|
|
766
|
+
throw new ConflictError('released_version_gone', `${row.pluginId}@${released} is no longer in ${repo.name}`);
|
|
593
767
|
}
|
|
768
|
+
const input = { repoId: repo.id, pluginId: row.pluginId, version: released };
|
|
769
|
+
return this.locked(row.pluginId, () => this.installLocked(input, actor, true));
|
|
594
770
|
}
|
|
595
771
|
/** Removes an installed plugin. Blocked while any instance uses it. */
|
|
596
772
|
uninstall(pluginRowOrId, actor = {}) {
|
|
597
|
-
const row = this.
|
|
598
|
-
this.db.select().from(plugins).where(eq(plugins.pluginId, pluginRowOrId)).get();
|
|
599
|
-
if (!row)
|
|
600
|
-
throw new NotFoundError('plugin_not_found', 'No such plugin');
|
|
773
|
+
const row = this.pluginRow(pluginRowOrId);
|
|
601
774
|
const instances = this.db.select().from(pluginInstances).where(eq(pluginInstances.pluginId, row.id)).all();
|
|
602
775
|
if (instances.length) {
|
|
603
776
|
throw new ConflictError('plugin_has_instances', 'Delete this plugin’s endpoints first', {
|