@argentic/chest-sdk 0.2.0 → 0.4.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/README.md +406 -51
- package/client/index.ts +8 -5
- package/client/src/ai.ts +374 -0
- package/client/src/api.ts +25 -3
- package/client/src/chest.ts +104 -0
- package/client/src/errors.ts +44 -0
- package/client/src/events.ts +12 -104
- package/client/src/files.ts +9 -9
- package/client/src/member.ts +26 -5
- package/client/src/members.ts +21 -16
- package/client/src/schedules.ts +87 -0
- package/client/src/signed.ts +166 -0
- package/client/src/testing.ts +290 -65
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -5
- package/dist/index.js.map +1 -1
- package/dist/src/ai.d.ts +131 -0
- package/dist/src/ai.d.ts.map +1 -0
- package/dist/src/ai.js +290 -0
- package/dist/src/ai.js.map +1 -0
- package/dist/src/api.d.ts +4 -0
- package/dist/src/api.d.ts.map +1 -1
- package/dist/src/api.js +25 -2
- package/dist/src/api.js.map +1 -1
- package/dist/src/chest.d.ts +15 -0
- package/dist/src/chest.d.ts.map +1 -0
- package/dist/src/chest.js +61 -0
- package/dist/src/chest.js.map +1 -0
- package/dist/src/errors.d.ts +16 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +36 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/events.d.ts +3 -6
- package/dist/src/events.d.ts.map +1 -1
- package/dist/src/events.js +8 -102
- package/dist/src/events.js.map +1 -1
- package/dist/src/files.d.ts +1 -0
- package/dist/src/files.d.ts.map +1 -1
- package/dist/src/files.js +6 -7
- package/dist/src/files.js.map +1 -1
- package/dist/src/member.d.ts +4 -0
- package/dist/src/member.d.ts.map +1 -1
- package/dist/src/member.js +17 -5
- package/dist/src/member.js.map +1 -1
- package/dist/src/members.d.ts +1 -1
- package/dist/src/members.d.ts.map +1 -1
- package/dist/src/members.js +9 -8
- package/dist/src/members.js.map +1 -1
- package/dist/src/schedules.d.ts +15 -0
- package/dist/src/schedules.d.ts.map +1 -0
- package/dist/src/schedules.js +45 -0
- package/dist/src/schedules.js.map +1 -0
- package/dist/src/signed.d.ts +29 -0
- package/dist/src/signed.d.ts.map +1 -0
- package/dist/src/signed.js +139 -0
- package/dist/src/signed.js.map +1 -0
- package/dist/src/testing.d.ts +53 -12
- package/dist/src/testing.d.ts.map +1 -1
- package/dist/src/testing.js +265 -60
- package/dist/src/testing.js.map +1 -1
- package/package.json +27 -4
package/dist/src/members.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"members.js","sourceRoot":"","sources":["../../client/src/members.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAe,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"members.js","sourceRoot":"","sources":["../../client/src/members.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAe,MAAM,aAAa,CAAC;AAmC7G,MAAM,QAAQ,GAAG,GAAG,CAAC;AACrB,MAAM,WAAW,GAAG,GAAG,CAAC;AACxB,MAAM,SAAS,GAAG,MAAM,CAAC;AACzB,MAAM,SAAS,GAAG,IAAI,CAAC;AAEvB,SAAS,OAAO,CAAC,EAAW;IAC1B,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,YAAY,EAAE,GAAG,EAAE,2BAA2B,CAAC,CAAC;IAC9H,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,KAAc,EAAE,GAAW,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC;AAEhH,yEAAyE;AACzE,kBAAkB;AAClB,SAAS,KAAK,CAAC,KAAc;IAC3B,MAAM,CAAC,GAAG,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAgC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzH,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,SAAS,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,UAAU,CAAC,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,WAAW,CAAC,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;QAAE,MAAM,IAAI,WAAW,EAAE,CAAC;IAC5rB,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAa,EAAE,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;AACvU,CAAC;AAED,0EAA0E;AAC1E,4EAA4E;AAC5E,4EAA4E;AAC5E,6EAA6E;AAC7E,mDAAmD;AACnD,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAO,GAAkF,EAAE;IACpH,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;IACpC,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACnE,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,GAAG,QAAQ;YAAE,MAAM,IAAI,UAAU,CAAC,eAAe,EAAE,GAAG,EAAE,mBAAmB,CAAC,CAAC;QACvJ,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,OAAO,CAAC,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,KAAK,EAAE;QAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3E,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAAE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,UAAU,CAAC,eAAe,EAAE,GAAG,EAAE,0BAA0B,CAAC,CAAC;QAChH,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;QAAE,MAAM,MAAM,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACtE,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAiD,CAAC;IACpF,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,WAAW,EAAE,CAAC;IACvJ,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AAC/D,CAAC;AAED,0EAA0E;AAC1E,0EAA0E;AAC1E,iBAAiB;AACjB,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,EAAU;IAClC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IACxE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QAC5B,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;QAAE,MAAM,MAAM,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACtE,OAAO,KAAK,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACrC,CAAC;AAMD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAiB,CAAC;AAEvC,0EAA0E;AAC1E,MAAM,UAAU,MAAM;IACpB,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC;AAED,SAAS,IAAI,CAAC,EAAU,EAAE,MAAyB;IACjD,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACjB,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAW,CAAC,CAAC;IACtD,OAAO,KAAK,CAAC,IAAI,GAAG,SAAS;QAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAe,CAAC,CAAC;AACnF,CAAC;AAED,0EAA0E;AAC1E,6EAA6E;AAC7E,8EAA8E;AAC9E,wBAAwB;AACxB,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,GAAqB;IAChD,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;QACjC,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxB,OAAO,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,SAAS,CAAC;IACvC,CAAC,CAAC,CAAC;IACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC;QACrD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACrI,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;YAAE,MAAM,MAAM,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAsE,CAAC;QAC3G,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,WAAW,EAAE,CAAC;QAC1I,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,MAAM,CAAC,GAAG,KAAkE,CAAC;YAC7E,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC;gBAAE,MAAM,IAAI,WAAW,EAAE,CAAC;YAClQ,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAG,CAAC,CAAC,IAA2B,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAgC,EAAE,EAAE,CAAC,CAAC;YAC/H,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QACD,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAChC,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE,MAAM,IAAI,WAAW,EAAE,CAAC;YACjF,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACf,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAAE,MAAM,IAAI,WAAW,EAAE,CAAC;IAC/D,CAAC;IACD,MAAM,MAAM,GAAW,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAChE,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC;YAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;aACjD,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC;YAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;;YACrD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,uEAAuE;AACvE,qDAAqD;AACrD,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK,CAAC,IAAI;QACR,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QACxD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;YAAE,MAAM,MAAM,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAgC,CAAC;QACrE,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE;YAAE,MAAM,IAAI,WAAW,EAAE,CAAC;QACnG,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAC/B,MAAM,CAAC,GAAG,KAAmE,CAAC;YAC9E,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAE,MAAM,IAAI,WAAW,EAAE,CAAC;YAClP,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAa,EAAE,CAAC;QACzE,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { IncomingMessage } from "node:http";
|
|
2
|
+
import { type Seen } from "./signed.js";
|
|
3
|
+
export type Run = {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
scheduledAt: string;
|
|
7
|
+
attempt: number;
|
|
8
|
+
};
|
|
9
|
+
export type Handlers = Record<string, (run: Run) => void | Promise<void>>;
|
|
10
|
+
export type { Seen };
|
|
11
|
+
export declare function verify(request: IncomingMessage | Request): Promise<Run | null>;
|
|
12
|
+
export declare function handle(request: IncomingMessage | Request, handlers: Handlers, options?: {
|
|
13
|
+
seen?: Seen;
|
|
14
|
+
}): Promise<number>;
|
|
15
|
+
//# sourceMappingURL=schedules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedules.d.ts","sourceRoot":"","sources":["../../client/src/schedules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAgE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAuCtG,MAAM,MAAM,GAAG,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAGrF,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAE1E,YAAY,EAAE,IAAI,EAAE,CAAC;AAUrB,wBAAsB,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAQpF;AAaD,wBAAsB,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,IAAI,CAAA;CAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAUnI"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { delivery, instant, json, memorySeen, object, scheduleChannel } from "./signed.js";
|
|
2
|
+
// The grammar of a schedule's name, as the Chest keeps it.
|
|
3
|
+
const scheduleNamePattern = /^[a-z][a-z0-9-]{0,31}$/u;
|
|
4
|
+
// verify returns the run a delivery carries, or null when it is not one the
|
|
5
|
+
// Chest made for this tool: not a POST, no or another signature, another
|
|
6
|
+
// tool, expired, a body other than the one signed or not of a run's shape.
|
|
7
|
+
// It reads the body (1 KiB at most): call it before anything else reads it.
|
|
8
|
+
// It never throws for what a request carries.
|
|
9
|
+
export async function verify(request) {
|
|
10
|
+
const signed = await delivery(request, scheduleChannel);
|
|
11
|
+
if (!signed)
|
|
12
|
+
return null;
|
|
13
|
+
const r = object(json(signed.body.toString("utf8")));
|
|
14
|
+
if (!r || Object.keys(r).sort().join(",") !== "attempt,id,name,scheduledAt" || r["id"] !== signed.id)
|
|
15
|
+
return null;
|
|
16
|
+
const { name, scheduledAt, attempt } = r;
|
|
17
|
+
if (typeof name !== "string" || !scheduleNamePattern.test(name) || !instant(scheduledAt) || typeof attempt !== "number" || !Number.isInteger(attempt) || attempt < 1 || attempt > 4)
|
|
18
|
+
return null;
|
|
19
|
+
return { id: signed.id, name, scheduledAt, attempt };
|
|
20
|
+
}
|
|
21
|
+
const remembered = memorySeen();
|
|
22
|
+
// handle verifies one delivery and runs the handler of its schedule, once:
|
|
23
|
+
// the status to answer the Chest. 401 for a delivery that is not the
|
|
24
|
+
// Chest's; 404 for a schedule without a handler (the Chest does not try
|
|
25
|
+
// again: the version in service does not do it); 204 once the handler
|
|
26
|
+
// returned, or for a run already handled (seen.has). A handler that throws
|
|
27
|
+
// leaves the run unseen and handle throws: answer 500, the Chest delivers
|
|
28
|
+
// it again. seen is the store of the runs handled (memorySeen by default,
|
|
29
|
+
// lost at a restart: give a durable one — events' store serves both, the
|
|
30
|
+
// ids never meet).
|
|
31
|
+
export async function handle(request, handlers, options = {}) {
|
|
32
|
+
const run = await verify(request);
|
|
33
|
+
if (!run)
|
|
34
|
+
return 401;
|
|
35
|
+
const handler = Object.hasOwn(handlers, run.name) ? handlers[run.name] : undefined;
|
|
36
|
+
if (!handler)
|
|
37
|
+
return 404;
|
|
38
|
+
const seen = options.seen ?? remembered;
|
|
39
|
+
if (await seen.has(run.id))
|
|
40
|
+
return 204;
|
|
41
|
+
await handler(run);
|
|
42
|
+
await seen.add(run.id);
|
|
43
|
+
return 204;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=schedules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schedules.js","sourceRoot":"","sources":["../../client/src/schedules.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAa,MAAM,aAAa,CAAC;AA8CtG,2DAA2D;AAC3D,MAAM,mBAAmB,GAAG,yBAAyB,CAAC;AAEtD,4EAA4E;AAC5E,yEAAyE;AACzE,2EAA2E;AAC3E,4EAA4E;AAC5E,8CAA8C;AAC9C,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAkC;IAC7D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IACxD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACrD,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,6BAA6B,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAClH,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACzC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACjM,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC;AAEhC,2EAA2E;AAC3E,qEAAqE;AACrE,wEAAwE;AACxE,sEAAsE;AACtE,2EAA2E;AAC3E,0EAA0E;AAC1E,0EAA0E;AAC1E,yEAAyE;AACzE,mBAAmB;AACnB,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAkC,EAAE,QAAkB,EAAE,OAAO,GAAoB,EAAE;IAChH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,GAAG;QAAE,OAAO,GAAG,CAAC;IACrB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnF,IAAI,CAAC,OAAO;QAAE,OAAO,GAAG,CAAC;IACzB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,UAAU,CAAC;IACxC,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAAE,OAAO,GAAG,CAAC;IACvC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IACnB,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACvB,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { IncomingMessage } from "node:http";
|
|
2
|
+
export type Channel = {
|
|
3
|
+
header: string;
|
|
4
|
+
label: string;
|
|
5
|
+
id: RegExp;
|
|
6
|
+
maxBody: number;
|
|
7
|
+
};
|
|
8
|
+
export declare const eventChannel: Channel;
|
|
9
|
+
export declare const scheduleChannel: Channel;
|
|
10
|
+
export declare function object(value: unknown): Record<string, unknown> | null;
|
|
11
|
+
export declare function json(raw: string): unknown;
|
|
12
|
+
export declare const instant: (v: unknown) => v is string;
|
|
13
|
+
export declare function headerValue(request: IncomingMessage | Request, name: string, maxLength: number): string | null;
|
|
14
|
+
export declare function signedClaims(value: string | null, label: string): Record<string, unknown> | null;
|
|
15
|
+
export declare function signClaims(label: string, claims: Record<string, unknown>, token: string): string;
|
|
16
|
+
export declare function delivery(request: IncomingMessage | Request, channel: Channel): Promise<{
|
|
17
|
+
id: string;
|
|
18
|
+
body: Buffer;
|
|
19
|
+
} | null>;
|
|
20
|
+
export declare function sign(channel: Channel, id: string, body: string, options: {
|
|
21
|
+
token: string;
|
|
22
|
+
tool: string;
|
|
23
|
+
}): string;
|
|
24
|
+
export type Seen = {
|
|
25
|
+
has(id: string): boolean | Promise<boolean>;
|
|
26
|
+
add(id: string): void | Promise<void>;
|
|
27
|
+
};
|
|
28
|
+
export declare function memorySeen(limit?: number): Seen;
|
|
29
|
+
//# sourceMappingURL=signed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signed.d.ts","sourceRoot":"","sources":["../../client/src/signed.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAqBjD,MAAM,MAAM,OAAO,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAGrF,eAAO,MAAM,YAAY,EAAE,OAA0G,CAAC;AAEtI,eAAO,MAAM,eAAe,EAAE,OAA4G,CAAC;AAQ3I,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAErE;AACD,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAMzC;AAED,eAAO,MAAM,OAAO,MAAO,OAAO,KAAG,CAAC,IAAI,MAAiF,CAAC;AAK5H,wBAAgB,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI9G;AAOD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAmBhG;AAKD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAKhG;AA6BD,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAYjI;AAID,wBAAgB,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAGjH;AAYD,MAAM,MAAM,IAAI,GAAG;IAAE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAAC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC;AAI1G,wBAAgB,UAAU,CAAC,KAAK,SAAQ,GAAG,IAAI,CAU9C"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { createHash, createHmac, timingSafeEqual } from "node:crypto";
|
|
2
|
+
// The events of the members (events): POST /chest-events.
|
|
3
|
+
export const eventChannel = { header: "Chest-Event", label: "Chest-Event v1", id: /^evt_[a-z2-7]{26}$/u, maxBody: 64 << 10 };
|
|
4
|
+
// The runs of the schedules (schedules): POST /chest-schedules.
|
|
5
|
+
export const scheduleChannel = { header: "Chest-Schedule", label: "Chest-Schedule v1", id: /^run_[a-z2-7]{26}$/u, maxBody: 1024 };
|
|
6
|
+
const claims = ["aud", "iat", "exp", "jti", "digest"];
|
|
7
|
+
// Clocks of the Chest and of the container may differ by this much, in seconds.
|
|
8
|
+
const skew = 5;
|
|
9
|
+
const maxSignature = 2048;
|
|
10
|
+
const compact = /^([A-Za-z0-9_-]+)\.([A-Za-z0-9_-]+)\.([A-Za-z0-9_-]+)$/u;
|
|
11
|
+
export function object(value) {
|
|
12
|
+
return value !== null && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
13
|
+
}
|
|
14
|
+
export function json(raw) {
|
|
15
|
+
try {
|
|
16
|
+
return JSON.parse(raw);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
// An instant as the Chest writes it (RFC 3339).
|
|
23
|
+
export const instant = (v) => typeof v === "string" && v.length <= 40 && !Number.isNaN(Date.parse(v));
|
|
24
|
+
// headerValue is the value of a header, maxLength at most; null for none,
|
|
25
|
+
// longer, or repeated (a Web Request joins repeated values with ", ", which
|
|
26
|
+
// no signature contains; a Node request keeps them as an array).
|
|
27
|
+
export function headerValue(request, name, maxLength) {
|
|
28
|
+
const headers = request.headers;
|
|
29
|
+
const value = typeof headers.get === "function" ? headers.get(name) : headers[name];
|
|
30
|
+
return typeof value === "string" && value.length <= maxLength ? value : null;
|
|
31
|
+
}
|
|
32
|
+
// signedClaims reads what the Chest signed for this tool under a label: the
|
|
33
|
+
// claims of a compact JWS, HS256, typ JWT, under HMAC-SHA256 of the label
|
|
34
|
+
// keyed by the text of CHEST_TOKEN, when the signature holds, its audience
|
|
35
|
+
// is CHEST_TOOL and now is within iat and exp (5 s of skew each way); null
|
|
36
|
+
// otherwise, or outside a Chest. It never throws for what it is given.
|
|
37
|
+
export function signedClaims(value, label) {
|
|
38
|
+
const token = process.env["CHEST_TOKEN"];
|
|
39
|
+
const tool = process.env["CHEST_TOOL"];
|
|
40
|
+
if (!token || !/^[A-Za-z0-9_-]{43,512}$/u.test(token) || !tool)
|
|
41
|
+
return null;
|
|
42
|
+
const parts = value === null ? null : compact.exec(value);
|
|
43
|
+
if (!parts)
|
|
44
|
+
return null;
|
|
45
|
+
const [, encodedHeader = "", encodedPayload = "", encodedSignature = ""] = parts;
|
|
46
|
+
const header = object(json(Buffer.from(encodedHeader, "base64url").toString("utf8")));
|
|
47
|
+
if (!header || Object.keys(header).length !== 2 || header["alg"] !== "HS256" || header["typ"] !== "JWT")
|
|
48
|
+
return null;
|
|
49
|
+
const key = createHmac("sha256", Buffer.from(token, "utf8")).update(label).digest();
|
|
50
|
+
const expected = createHmac("sha256", key).update(encodedHeader + "." + encodedPayload).digest();
|
|
51
|
+
const given = Buffer.from(encodedSignature, "base64url");
|
|
52
|
+
if (given.length !== expected.length || !timingSafeEqual(given, expected))
|
|
53
|
+
return null;
|
|
54
|
+
const payload = object(json(Buffer.from(encodedPayload, "base64url").toString("utf8")));
|
|
55
|
+
if (!payload || payload["aud"] !== tool)
|
|
56
|
+
return null;
|
|
57
|
+
const { iat, exp } = payload;
|
|
58
|
+
if (typeof iat !== "number" || !Number.isSafeInteger(iat) || typeof exp !== "number" || !Number.isSafeInteger(exp) || exp <= iat)
|
|
59
|
+
return null;
|
|
60
|
+
const now = Math.floor(Date.now() / 1000);
|
|
61
|
+
return iat > now + skew || exp <= now - skew ? null : payload;
|
|
62
|
+
}
|
|
63
|
+
// signClaims is what the Chest would sign under a label for these claims
|
|
64
|
+
// (their aud, iat and exp included), with that token: for the fake Chest of
|
|
65
|
+
// a tool's tests (testing).
|
|
66
|
+
export function signClaims(label, claims, token) {
|
|
67
|
+
const encode = (value) => Buffer.from(JSON.stringify(value)).toString("base64url");
|
|
68
|
+
const signed = encode({ alg: "HS256", typ: "JWT" }) + "." + encode(claims);
|
|
69
|
+
const key = createHmac("sha256", Buffer.from(token, "utf8")).update(label).digest();
|
|
70
|
+
return signed + "." + createHmac("sha256", key).update(signed).digest("base64url");
|
|
71
|
+
}
|
|
72
|
+
// bodyOf reads the body, limit bytes at most; null beyond, or when it was
|
|
73
|
+
// read already.
|
|
74
|
+
async function bodyOf(request, limit) {
|
|
75
|
+
try {
|
|
76
|
+
if (request instanceof Request) {
|
|
77
|
+
if (request.bodyUsed || Number(request.headers.get("content-length") ?? "0") > limit)
|
|
78
|
+
return null;
|
|
79
|
+
const raw = Buffer.from(await request.arrayBuffer());
|
|
80
|
+
return raw.length <= limit ? raw : null;
|
|
81
|
+
}
|
|
82
|
+
const chunks = [];
|
|
83
|
+
let size = 0;
|
|
84
|
+
for await (const chunk of request) {
|
|
85
|
+
size += chunk.length;
|
|
86
|
+
if (size > limit)
|
|
87
|
+
return null;
|
|
88
|
+
chunks.push(chunk);
|
|
89
|
+
}
|
|
90
|
+
return Buffer.concat(chunks);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// delivery reads a request of a channel: the identifier it was signed for
|
|
97
|
+
// and its body, when the signature, the tool, the time and the digest of
|
|
98
|
+
// the body hold; null otherwise — not a POST, no or another signature,
|
|
99
|
+
// another tool, expired, a body other than the one signed. It reads the
|
|
100
|
+
// body. It never throws for what a request carries.
|
|
101
|
+
export async function delivery(request, channel) {
|
|
102
|
+
if (request.method !== "POST")
|
|
103
|
+
return null;
|
|
104
|
+
const payload = signedClaims(headerValue(request, channel.header.toLowerCase(), maxSignature), channel.label);
|
|
105
|
+
if (!payload || Object.keys(payload).length !== claims.length || !claims.every(name => Object.hasOwn(payload, name)))
|
|
106
|
+
return null;
|
|
107
|
+
const { jti, digest } = payload;
|
|
108
|
+
if (typeof jti !== "string" || !channel.id.test(jti) || typeof digest !== "string")
|
|
109
|
+
return null;
|
|
110
|
+
const body = await bodyOf(request, channel.maxBody);
|
|
111
|
+
if (body === null)
|
|
112
|
+
return null;
|
|
113
|
+
const sum = createHash("sha256").update(body).digest();
|
|
114
|
+
const told = Buffer.from(digest, "base64url");
|
|
115
|
+
if (told.length !== sum.length || !timingSafeEqual(told, sum))
|
|
116
|
+
return null;
|
|
117
|
+
return { id: jti, body };
|
|
118
|
+
}
|
|
119
|
+
// sign is the value of a channel's header the Chest would send with that
|
|
120
|
+
// body: for the fake Chest of a tool's tests (testing).
|
|
121
|
+
export function sign(channel, id, body, options) {
|
|
122
|
+
const iat = Math.floor(Date.now() / 1000);
|
|
123
|
+
return signClaims(channel.label, { aud: options.tool, iat, exp: iat + 60, jti: id, digest: createHash("sha256").update(body).digest("base64url") }, options.token);
|
|
124
|
+
}
|
|
125
|
+
// memorySeen keeps the last limit ids in this process: lost at a restart,
|
|
126
|
+
// enough for a tool whose handlers are idempotent anyway.
|
|
127
|
+
export function memorySeen(limit = 10000) {
|
|
128
|
+
const ids = new Set();
|
|
129
|
+
return {
|
|
130
|
+
has: id => ids.has(id),
|
|
131
|
+
add: id => {
|
|
132
|
+
ids.delete(id);
|
|
133
|
+
ids.add(id);
|
|
134
|
+
while (ids.size > limit)
|
|
135
|
+
ids.delete(ids.values().next().value);
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=signed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signed.js","sourceRoot":"","sources":["../../client/src/signed.ts"],"names":[],"mappings":"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"}
|
package/dist/src/testing.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { type IncomingMessage } from "node:http";
|
|
2
|
+
import type { Alias, Provider } from "./ai.js";
|
|
3
|
+
import type { AiUnavailableReason } from "./errors.js";
|
|
2
4
|
import type { ChestEvent } from "./events.js";
|
|
3
5
|
import { type Member } from "./member.js";
|
|
4
6
|
export type FakeGroup = {
|
|
@@ -11,6 +13,11 @@ export type FakeFile = {
|
|
|
11
13
|
type: string;
|
|
12
14
|
updated: string;
|
|
13
15
|
};
|
|
16
|
+
export type FakeFormer = {
|
|
17
|
+
id: string;
|
|
18
|
+
name?: string;
|
|
19
|
+
status?: "no_access" | "former" | "erased";
|
|
20
|
+
};
|
|
14
21
|
export type FakeNotification = {
|
|
15
22
|
member: string;
|
|
16
23
|
title: string;
|
|
@@ -18,13 +25,34 @@ export type FakeNotification = {
|
|
|
18
25
|
path: string;
|
|
19
26
|
key?: string;
|
|
20
27
|
};
|
|
28
|
+
export type FakeAiModel = {
|
|
29
|
+
alias: Alias;
|
|
30
|
+
model: string;
|
|
31
|
+
provider?: Provider;
|
|
32
|
+
input?: number;
|
|
33
|
+
output?: number;
|
|
34
|
+
};
|
|
35
|
+
export type FakeAiReply = string | {
|
|
36
|
+
text?: string;
|
|
37
|
+
toolCalls?: {
|
|
38
|
+
name: string;
|
|
39
|
+
arguments: string;
|
|
40
|
+
id?: string;
|
|
41
|
+
}[];
|
|
42
|
+
};
|
|
43
|
+
export type FakeAi = {
|
|
44
|
+
models?: FakeAiModel[];
|
|
45
|
+
reply?: (request: Record<string, unknown>) => FakeAiReply;
|
|
46
|
+
cap?: number;
|
|
47
|
+
unavailable?: AiUnavailableReason;
|
|
48
|
+
};
|
|
49
|
+
export type FakeAiCall = {
|
|
50
|
+
path: string;
|
|
51
|
+
body: unknown;
|
|
52
|
+
};
|
|
21
53
|
export type FakeChestOptions = {
|
|
22
54
|
members?: Member[];
|
|
23
|
-
former?:
|
|
24
|
-
id: string;
|
|
25
|
-
name?: string;
|
|
26
|
-
erased?: boolean;
|
|
27
|
-
}[];
|
|
55
|
+
former?: FakeFormer[];
|
|
28
56
|
groups?: FakeGroup[];
|
|
29
57
|
capabilities?: string[];
|
|
30
58
|
receives?: string[];
|
|
@@ -32,6 +60,15 @@ export type FakeChestOptions = {
|
|
|
32
60
|
data: Uint8Array | string;
|
|
33
61
|
type?: string;
|
|
34
62
|
}>;
|
|
63
|
+
ai?: FakeAi;
|
|
64
|
+
chest?: {
|
|
65
|
+
organization?: string;
|
|
66
|
+
timeZone?: string;
|
|
67
|
+
language?: string;
|
|
68
|
+
currency?: string;
|
|
69
|
+
teamUrl?: string;
|
|
70
|
+
publicUrl?: string | null;
|
|
71
|
+
};
|
|
35
72
|
};
|
|
36
73
|
export type FakeEvent = {
|
|
37
74
|
[K in ChestEvent["type"]]: {
|
|
@@ -43,6 +80,11 @@ export type FakeEvent = {
|
|
|
43
80
|
occurredAt?: string;
|
|
44
81
|
};
|
|
45
82
|
}[ChestEvent["type"]];
|
|
83
|
+
export type FakeRun = {
|
|
84
|
+
id?: string;
|
|
85
|
+
scheduledAt?: string;
|
|
86
|
+
attempt?: number;
|
|
87
|
+
};
|
|
46
88
|
export type FakeChest = {
|
|
47
89
|
api: string;
|
|
48
90
|
token: string;
|
|
@@ -53,18 +95,17 @@ export type FakeChest = {
|
|
|
53
95
|
notifications: FakeNotification[];
|
|
54
96
|
badges: Map<string, number>;
|
|
55
97
|
acknowledged: string[];
|
|
98
|
+
ai: FakeAiCall[];
|
|
56
99
|
emit(event: FakeEvent, to: string | ((request: Request) => Response | Promise<Response>)): Promise<number>;
|
|
100
|
+
run(name: string, to: string | ((request: Request) => Response | Promise<Response>), run?: FakeRun): Promise<number>;
|
|
57
101
|
close(): Promise<void>;
|
|
58
102
|
};
|
|
59
|
-
export
|
|
103
|
+
export type AssertionOptions = {
|
|
60
104
|
token?: string;
|
|
61
105
|
tool?: string;
|
|
62
106
|
now?: Date;
|
|
63
|
-
}
|
|
64
|
-
export declare function
|
|
65
|
-
|
|
66
|
-
tool?: string;
|
|
67
|
-
now?: Date;
|
|
68
|
-
}): R;
|
|
107
|
+
};
|
|
108
|
+
export declare function signAssertion(member: Member, options?: AssertionOptions): string;
|
|
109
|
+
export declare function withMember<R extends Request | IncomingMessage>(request: R, member: Member, options?: AssertionOptions): R;
|
|
69
110
|
export declare function fakeChest(options?: FakeChestOptions): Promise<FakeChest>;
|
|
70
111
|
//# sourceMappingURL=testing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../client/src/testing.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,eAAe,EAAuB,MAAM,WAAW,CAAC;AAEpF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAmC,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../client/src/testing.ts"],"names":[],"mappings":"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"}
|