@argentic/chest-sdk 0.4.1 → 0.5.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.
Files changed (76) hide show
  1. package/README.md +500 -73
  2. package/client/index.ts +11 -7
  3. package/client/src/api.ts +15 -8
  4. package/client/src/errors.ts +50 -0
  5. package/client/src/eventrules.ts +117 -0
  6. package/client/src/events.ts +181 -39
  7. package/client/src/files.ts +37 -7
  8. package/client/src/member.ts +15 -9
  9. package/client/src/members.ts +34 -16
  10. package/client/src/notifications.ts +84 -27
  11. package/client/src/realtime-client.ts +516 -0
  12. package/client/src/realtime.ts +118 -0
  13. package/client/src/sealed.ts +158 -0
  14. package/client/src/signed.ts +8 -4
  15. package/client/src/testing-realtime.ts +361 -0
  16. package/client/src/testing.ts +388 -89
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +11 -7
  20. package/dist/index.js.map +1 -1
  21. package/dist/src/api.d.ts +2 -0
  22. package/dist/src/api.d.ts.map +1 -1
  23. package/dist/src/api.js +14 -7
  24. package/dist/src/api.js.map +1 -1
  25. package/dist/src/errors.d.ts +18 -0
  26. package/dist/src/errors.d.ts.map +1 -1
  27. package/dist/src/errors.js +44 -0
  28. package/dist/src/errors.js.map +1 -1
  29. package/dist/src/eventrules.d.ts +23 -0
  30. package/dist/src/eventrules.d.ts.map +1 -0
  31. package/dist/src/eventrules.js +107 -0
  32. package/dist/src/eventrules.js.map +1 -0
  33. package/dist/src/events.d.ts +31 -6
  34. package/dist/src/events.d.ts.map +1 -1
  35. package/dist/src/events.js +130 -26
  36. package/dist/src/events.js.map +1 -1
  37. package/dist/src/files.d.ts +1 -0
  38. package/dist/src/files.d.ts.map +1 -1
  39. package/dist/src/files.js +34 -3
  40. package/dist/src/files.js.map +1 -1
  41. package/dist/src/member.d.ts +1 -1
  42. package/dist/src/member.d.ts.map +1 -1
  43. package/dist/src/member.js +9 -6
  44. package/dist/src/member.js.map +1 -1
  45. package/dist/src/members.d.ts +9 -2
  46. package/dist/src/members.d.ts.map +1 -1
  47. package/dist/src/members.js +29 -13
  48. package/dist/src/members.js.map +1 -1
  49. package/dist/src/notifications.d.ts +12 -1
  50. package/dist/src/notifications.d.ts.map +1 -1
  51. package/dist/src/notifications.js +60 -19
  52. package/dist/src/notifications.js.map +1 -1
  53. package/dist/src/realtime-client.d.ts +45 -0
  54. package/dist/src/realtime-client.d.ts.map +1 -0
  55. package/dist/src/realtime-client.js +453 -0
  56. package/dist/src/realtime-client.js.map +1 -0
  57. package/dist/src/realtime.d.ts +22 -0
  58. package/dist/src/realtime.d.ts.map +1 -0
  59. package/dist/src/realtime.js +99 -0
  60. package/dist/src/realtime.js.map +1 -0
  61. package/dist/src/sealed.d.ts +20 -0
  62. package/dist/src/sealed.d.ts.map +1 -0
  63. package/dist/src/sealed.js +121 -0
  64. package/dist/src/sealed.js.map +1 -0
  65. package/dist/src/signed.d.ts.map +1 -1
  66. package/dist/src/signed.js +6 -2
  67. package/dist/src/signed.js.map +1 -1
  68. package/dist/src/testing-realtime.d.ts +54 -0
  69. package/dist/src/testing-realtime.d.ts.map +1 -0
  70. package/dist/src/testing-realtime.js +376 -0
  71. package/dist/src/testing-realtime.js.map +1 -0
  72. package/dist/src/testing.d.ts +40 -3
  73. package/dist/src/testing.d.ts.map +1 -1
  74. package/dist/src/testing.js +365 -76
  75. package/dist/src/testing.js.map +1 -1
  76. package/package.json +23 -4
package/dist/index.d.ts CHANGED
@@ -2,10 +2,12 @@ export * from "./src/errors.js";
2
2
  export * from "./src/member.js";
3
3
  export * from "./src/chest.js";
4
4
  export * from "./src/database.js";
5
+ export * as sealed from "./src/sealed.js";
5
6
  export * as files from "./src/files.js";
6
7
  export * as members from "./src/members.js";
7
8
  export * as notifications from "./src/notifications.js";
8
9
  export * as events from "./src/events.js";
9
10
  export * as schedules from "./src/schedules.js";
10
11
  export * as ai from "./src/ai.js";
12
+ export * as realtime from "./src/realtime.js";
11
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../client/index.ts"],"names":[],"mappings":"AAOA,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,aAAa,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../client/index.ts"],"names":[],"mappings":"AASA,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,aAAa,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -1,18 +1,22 @@
1
- // The package root: every published module a tool's code uses (tool contract
2
- // 0.4). Each one is also its own subpath (@argentic/chest-sdk/member, /chest,
3
- // /database, /files, /members, /notifications, /events, /schedules, /ai, /errors), which
4
- // pulls in nothing else. The files, members, notifications, events, schedules and ai
5
- // APIs are namespaces here, as their names (get, list, stat, move, notify,
6
- // verify, chat…) are too plain to stand alone. @argentic/chest-sdk/testing is for a tool's tests only, and
7
- // is not here.
1
+ // The package root: every published module a tool's server code uses (tool
2
+ // contract 0.5). Each one is also its own subpath (@argentic/chest-sdk/member,
3
+ // /chest, /database, /sealed, /files, /members, /notifications, /events,
4
+ // /schedules, /ai, /realtime, /errors), which pulls in nothing else. The
5
+ // sealed, files, members, notifications, events, schedules, ai and realtime
6
+ // APIs are namespaces here, as their names (seal, open, get, list, stat, move,
7
+ // notify, verify, chat, publish…) are too plain to stand alone.
8
+ // @argentic/chest-sdk/realtime/client runs in the browser, and
9
+ // @argentic/chest-sdk/testing in a tool's tests only: neither is here.
8
10
  export * from "./src/errors.js";
9
11
  export * from "./src/member.js";
10
12
  export * from "./src/chest.js";
11
13
  export * from "./src/database.js";
14
+ export * as sealed from "./src/sealed.js";
12
15
  export * as files from "./src/files.js";
13
16
  export * as members from "./src/members.js";
14
17
  export * as notifications from "./src/notifications.js";
15
18
  export * as events from "./src/events.js";
16
19
  export * as schedules from "./src/schedules.js";
17
20
  export * as ai from "./src/ai.js";
21
+ export * as realtime from "./src/realtime.js";
18
22
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../client/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,8EAA8E;AAC9E,yFAAyF;AACzF,qFAAqF;AACrF,2EAA2E;AAC3E,2GAA2G;AAC3G,eAAe;AACf,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,aAAa,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../client/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,+EAA+E;AAC/E,yEAAyE;AACzE,yEAAyE;AACzE,4EAA4E;AAC5E,+EAA+E;AAC/E,gEAAgE;AAChE,+DAA+D;AAC/D,uEAAuE;AACvE,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,aAAa,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAC"}
package/dist/src/api.d.ts CHANGED
@@ -3,10 +3,12 @@ export declare function chestLink(url: unknown, path: string): string | undefine
3
3
  export declare function ask(capability: string, method: string, path: string, init?: {
4
4
  body?: Uint8Array<ArrayBuffer> | string;
5
5
  type?: string;
6
+ headers?: Record<string, string>;
6
7
  deadline?: number;
7
8
  signal?: AbortSignal;
8
9
  }): Promise<Response>;
9
10
  export declare function read(response: Response, limit: number): Promise<Uint8Array>;
10
11
  export declare function json(response: Response): Promise<unknown>;
12
+ export declare function errorCode(response: Response): Promise<string>;
11
13
  export declare function refusal(response: Response, capability: string): Promise<ChestError>;
12
14
  //# sourceMappingURL=api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../client/src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,UAAU,EAAqD,MAAM,aAAa,CAAC;AAgBlH,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKxE;AAcD,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAW7M;AAID,wBAAsB,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAqBjF;AAGD,wBAAsB,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAM/D;AAGD,wBAAsB,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAazF"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../client/src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,UAAU,EAAkE,MAAM,aAAa,CAAC;AAgB/H,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKxE;AAcD,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAW/O;AAID,wBAAsB,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAqBjF;AAGD,wBAAsB,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAM/D;AAID,wBAAsB,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAQnE;AAGD,wBAAsB,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAQzF"}
package/dist/src/api.js CHANGED
@@ -1,4 +1,4 @@
1
- import { CapabilityNotGranted, ChestError, QuotaExceeded, RateLimited, TooLarge, Unavailable } from "./errors.js";
1
+ import { CapabilityNotGranted, ChestError, QuotaExceeded, RateLimited, StorageFull, TooLarge, Unavailable } from "./errors.js";
2
2
  // The Chest's API as a server tool reaches it, shared by the modules that
3
3
  // call it (files, members): CHEST_API is http://127.0.0.1:<port>, the tool's
4
4
  // launcher, which relays each request to the Chest — the container has no
@@ -32,7 +32,7 @@ function base(capability) {
32
32
  // deadline milliseconds (120 seconds unless said), or when the caller's
33
33
  // signal aborts: its reason is then thrown.
34
34
  export async function ask(capability, method, path, init = {}) {
35
- const headers = {};
35
+ const headers = { ...init.headers };
36
36
  if (init.type !== undefined)
37
37
  headers["Content-Type"] = init.type;
38
38
  const url = base(capability) + path;
@@ -82,23 +82,30 @@ export async function json(response) {
82
82
  throw new Unavailable();
83
83
  }
84
84
  }
85
- // refusal turns an answer that is not a success into what the tool tests.
86
- export async function refusal(response, capability) {
87
- let code = "refused";
85
+ // errorCode is the code of a refusal of the Chest ({"error": code}), or
86
+ // "refused" for an answer that says none.
87
+ export async function errorCode(response) {
88
88
  try {
89
89
  const given = (await json(response))?.error;
90
90
  if (typeof given === "string" && /^[a-z_]{1,40}$/u.test(given))
91
- code = given;
91
+ return given;
92
92
  }
93
93
  catch {
94
- // The code stays "refused".
94
+ // No code of the Chest's.
95
95
  }
96
+ return "refused";
97
+ }
98
+ // refusal turns an answer that is not a success into what the tool tests.
99
+ export async function refusal(response, capability) {
100
+ const code = await errorCode(response);
96
101
  if (response.status === 403)
97
102
  return new CapabilityNotGranted(capability);
98
103
  if (response.status === 413)
99
104
  return new TooLarge();
100
105
  if (response.status === 429)
101
106
  return code === "rate_limited" ? new RateLimited() : new QuotaExceeded();
107
+ if (response.status === 507 && code === "storage_full")
108
+ return new StorageFull();
102
109
  if (response.status >= 500)
103
110
  return new Unavailable();
104
111
  return new ChestError(code, response.status, `the Chest refused: ${code}`);
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../client/src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../client/src/api.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,9 @@ export declare class RateLimited extends ChestError {
15
15
  export declare class TooLarge extends ChestError {
16
16
  constructor();
17
17
  }
18
+ export declare class StorageFull extends ChestError {
19
+ constructor();
20
+ }
18
21
  export declare class Unavailable extends ChestError {
19
22
  constructor();
20
23
  }
@@ -34,4 +37,19 @@ export declare class AiModelNotAllowed extends ChestError {
34
37
  export declare class AiRefused extends ChestError {
35
38
  constructor();
36
39
  }
40
+ export declare class MemberRequired extends ChestError {
41
+ constructor();
42
+ }
43
+ export declare class NotAllowed extends ChestError {
44
+ constructor();
45
+ }
46
+ export declare class SealedInvalid extends ChestError {
47
+ constructor();
48
+ }
49
+ export declare class SealedLocked extends ChestError {
50
+ constructor();
51
+ }
52
+ export declare class SealedLost extends ChestError {
53
+ constructor();
54
+ }
37
55
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../client/src/errors.ts"],"names":[],"mappings":"AAEA,qBAAa,UAAW,SAAQ,KAAK;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,YAAY,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAKxD;CACF;AAKD,qBAAa,oBAAqB,SAAQ,UAAU;IAClD,YAAY,UAAU,EAAE,MAAM,EAE7B;CACF;AAMD,qBAAa,aAAc,SAAQ,UAAU;IAC3C,cAEC;CACF;AAID,qBAAa,WAAY,SAAQ,UAAU;IACzC,cAEC;CACF;AAID,qBAAa,QAAS,SAAQ,UAAU;IACtC,cAEC;CACF;AAID,qBAAa,WAAY,SAAQ,UAAU;IACzC,cAEC;CACF;AAMD,qBAAa,YAAa,SAAQ,UAAU;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,YAAY,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,QAAQ,EAAE,IAAI,EAIlD;CACF;AAID,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG,sBAAsB,GAAG,sBAAsB,CAAC;AAKnG,qBAAa,aAAc,SAAQ,UAAU;IAC3C,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,YAAY,MAAM,EAAE,mBAAmB,EAGtC;CACF;AAID,qBAAa,iBAAkB,SAAQ,UAAU;IAC/C,cAEC;CACF;AAGD,qBAAa,SAAU,SAAQ,UAAU;IACvC,cAEC;CACF"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../client/src/errors.ts"],"names":[],"mappings":"AAEA,qBAAa,UAAW,SAAQ,KAAK;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,YAAY,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAKxD;CACF;AAKD,qBAAa,oBAAqB,SAAQ,UAAU;IAClD,YAAY,UAAU,EAAE,MAAM,EAE7B;CACF;AAMD,qBAAa,aAAc,SAAQ,UAAU;IAC3C,cAEC;CACF;AAID,qBAAa,WAAY,SAAQ,UAAU;IACzC,cAEC;CACF;AAID,qBAAa,QAAS,SAAQ,UAAU;IACtC,cAEC;CACF;AAKD,qBAAa,WAAY,SAAQ,UAAU;IACzC,cAEC;CACF;AAID,qBAAa,WAAY,SAAQ,UAAU;IACzC,cAEC;CACF;AAMD,qBAAa,YAAa,SAAQ,UAAU;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,YAAY,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,QAAQ,EAAE,IAAI,EAIlD;CACF;AAID,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG,sBAAsB,GAAG,sBAAsB,CAAC;AAKnG,qBAAa,aAAc,SAAQ,UAAU;IAC3C,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,YAAY,MAAM,EAAE,mBAAmB,EAGtC;CACF;AAID,qBAAa,iBAAkB,SAAQ,UAAU;IAC/C,cAEC;CACF;AAGD,qBAAa,SAAU,SAAQ,UAAU;IACvC,cAEC;CACF;AAKD,qBAAa,cAAe,SAAQ,UAAU;IAC5C,cAEC;CACF;AAID,qBAAa,UAAW,SAAQ,UAAU;IACxC,cAEC;CACF;AAID,qBAAa,aAAc,SAAQ,UAAU;IAC3C,cAEC;CACF;AAID,qBAAa,YAAa,SAAQ,UAAU;IAC1C,cAEC;CACF;AAID,qBAAa,UAAW,SAAQ,UAAU;IACxC,cAEC;CACF"}
@@ -41,6 +41,14 @@ export class TooLarge extends ChestError {
41
41
  super("too_large", 413, "the Chest refused: the object is too large");
42
42
  }
43
43
  }
44
+ // The server of the Chest has no more disk for files, whatever the tool's
45
+ // quota: nothing was kept. Its owner frees space or takes a larger server;
46
+ // the tool says the file could not be kept, and may try again later.
47
+ export class StorageFull extends ChestError {
48
+ constructor() {
49
+ super("storage_full", 507, "the Chest refused: its server's disk is full");
50
+ }
51
+ }
44
52
  // The Chest did not answer, or not as it does: nothing is known of what was
45
53
  // asked — a write may or may not have happened.
46
54
  export class Unavailable extends ChestError {
@@ -84,4 +92,40 @@ export class AiRefused extends ChestError {
84
92
  super("content_refused", 422, "the AI provider refused the content of the request");
85
93
  }
86
94
  }
95
+ // Opening a sealed value needs a member on the request: none came with it,
96
+ // or their ticket expired (a request lasts 60 seconds). A public page, a
97
+ // schedule or an event opens nothing.
98
+ export class MemberRequired extends ChestError {
99
+ constructor() {
100
+ super("member_required", 401, "the Chest refused: sealed values open only on the request of a member");
101
+ }
102
+ }
103
+ // The member may not open this: they lost the tool since the request
104
+ // began, or the value was sealed for roles they do not hold.
105
+ export class NotAllowed extends ChestError {
106
+ constructor() {
107
+ super("not_allowed", 403, "the Chest refused: this member may not open this value");
108
+ }
109
+ }
110
+ // The sealed value does not open: it was altered, it is another tool's, or
111
+ // it was sealed in another context.
112
+ export class SealedInvalid extends ChestError {
113
+ constructor() {
114
+ super("sealed_invalid", 400, "the sealed value does not open: altered, another tool's or of another context");
115
+ }
116
+ }
117
+ // The Chest was restored and its sealed data waits for the owner's recovery
118
+ // code: nothing is sealed or opened until they enter it (Settings).
119
+ export class SealedLocked extends ChestError {
120
+ constructor() {
121
+ super("sealed_locked", 503, "the Chest's sealed data is locked until its owner enters the recovery code");
122
+ }
123
+ }
124
+ // The key of this tool's sealed values is lost for good (the Chest key and
125
+ // its recovery code both): its sealed values never open again.
126
+ export class SealedLost extends ChestError {
127
+ constructor() {
128
+ super("sealed_lost", 503, "the key of this tool's sealed values is lost");
129
+ }
130
+ }
87
131
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../client/src/errors.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,mEAAmE;AACnE,MAAM,OAAO,UAAW,SAAQ,KAAK;IAC1B,IAAI,CAAS;IACb,MAAM,CAAS;IACxB,YAAY,IAAY,EAAE,MAAc,EAAE,OAAe;QACvD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,4EAA4E;AAC5E,0EAA0E;AAC1E,WAAW;AACX,MAAM,OAAO,oBAAqB,SAAQ,UAAU;IAClD,YAAY,UAAkB;QAC5B,KAAK,CAAC,wBAAwB,EAAE,GAAG,EAAE,2CAA2C,UAAU,+BAA+B,CAAC,CAAC;IAC7H,CAAC;CACF;AAED,0EAA0E;AAC1E,2EAA2E;AAC3E,8EAA8E;AAC9E,sEAAsE;AACtE,MAAM,OAAO,aAAc,SAAQ,UAAU;IAC3C;QACE,KAAK,CAAC,gBAAgB,EAAE,GAAG,EAAE,uDAAuD,CAAC,CAAC;IACxF,CAAC;CACF;AAED,yEAAyE;AACzE,0DAA0D;AAC1D,MAAM,OAAO,WAAY,SAAQ,UAAU;IACzC;QACE,KAAK,CAAC,cAAc,EAAE,GAAG,EAAE,kDAAkD,CAAC,CAAC;IACjF,CAAC;CACF;AAED,wEAAwE;AACxE,kEAAkE;AAClE,MAAM,OAAO,QAAS,SAAQ,UAAU;IACtC;QACE,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,4CAA4C,CAAC,CAAC;IACxE,CAAC;CACF;AAED,4EAA4E;AAC5E,gDAAgD;AAChD,MAAM,OAAO,WAAY,SAAQ,UAAU;IACzC;QACE,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,0BAA0B,CAAC,CAAC;IACxD,CAAC;CACF;AAED,uEAAuE;AACvE,4EAA4E;AAC5E,4EAA4E;AAC5E,UAAU;AACV,MAAM,OAAO,YAAa,SAAQ,UAAU;IACjC,KAAK,CAAmB;IACxB,QAAQ,CAAO;IACxB,YAAY,KAAuB,EAAE,QAAc;QACjD,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,0BAA0B,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,2CAA2C,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAChK,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAMD,4EAA4E;AAC5E,6EAA6E;AAC7E,iCAAiC;AACjC,MAAM,OAAO,aAAc,SAAQ,UAAU;IAClC,MAAM,CAAsB;IACrC,YAAY,MAA2B;QACrC,KAAK,CAAC,MAAM,EAAE,MAAM,KAAK,sBAAsB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,+DAA+D,CAAC,CAAC,CAAC,MAAM,KAAK,sBAAsB,CAAC,CAAC,CAAC,yCAAyC,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC;QACvR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,0EAA0E;AAC1E,uDAAuD;AACvD,MAAM,OAAO,iBAAkB,SAAQ,UAAU;IAC/C;QACE,KAAK,CAAC,mBAAmB,EAAE,GAAG,EAAE,6GAA6G,CAAC,CAAC;IACjJ,CAAC;CACF;AAED,gEAAgE;AAChE,MAAM,OAAO,SAAU,SAAQ,UAAU;IACvC;QACE,KAAK,CAAC,iBAAiB,EAAE,GAAG,EAAE,oDAAoD,CAAC,CAAC;IACtF,CAAC;CACF"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../client/src/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export declare const isToolEventType: (value: unknown) => value is string;
2
+ export declare const itemIdPattern: RegExp;
3
+ export declare const toolNamePattern: RegExp;
4
+ export declare const rolePattern: RegExp;
5
+ export declare const fieldNamePattern: RegExp;
6
+ export declare const maxData: number;
7
+ export declare const eventWindow: number;
8
+ export declare const clockSkew = 5000;
9
+ export declare function instantOf(value: unknown): number | null;
10
+ export declare function isDate(value: unknown): boolean;
11
+ export type FieldKind = "id" | "text" | "number" | "boolean" | "time" | "date" | "member" | "members";
12
+ export declare function fieldOf(declared: unknown): {
13
+ kind: FieldKind;
14
+ optional: boolean;
15
+ } | null;
16
+ export declare function isDeclaredData(data: unknown, declared: Record<string, string>, known: (id: string) => boolean): boolean;
17
+ export type Audience = {
18
+ members?: string[];
19
+ groups?: string[];
20
+ roles?: string[];
21
+ };
22
+ export declare function isAudience(value: unknown): value is Audience;
23
+ //# sourceMappingURL=eventrules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventrules.d.ts","sourceRoot":"","sources":["../../client/src/eventrules.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,eAAe,UAAW,OAAO,KAAG,KAAK,IAAI,MACkF,CAAC;AAI7I,eAAO,MAAM,aAAa,QAAyC,CAAC;AAEpE,eAAO,MAAM,eAAe,QAA4B,CAAC;AAGzD,eAAO,MAAM,WAAW,QAA4B,CAAC;AAErD,eAAO,MAAM,gBAAgB,QAA8B,CAAC;AAG5D,eAAO,MAAM,OAAO,QAAW,CAAC;AAIhC,eAAO,MAAM,WAAW,QAAgB,CAAC;AACzC,eAAO,MAAM,SAAS,OAAO,CAAC;AAS9B,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAMvD;AAGD,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAK9C;AASD,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAetG,wBAAgB,OAAO,CAAC,QAAQ,EAAE,OAAO,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAIxF;AAQD,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAUvH;AAID,MAAM,MAAM,QAAQ,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAMnF,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAK5D"}
@@ -0,0 +1,107 @@
1
+ import { groupIdPattern, memberIdPattern } from "./member.js";
2
+ // The rules of events between tools, as the Chest applies them
3
+ // (chest/toolevents): what a type, an identifier, an instant, an audience
4
+ // and a declared field are. events reads a delivery and checks an emit with
5
+ // them before sending it; testing's fake Chest refuses what the Chest
6
+ // refuses with them. Not a published module.
7
+ // A type: two to four dotted segments of lowercase letters, digits and
8
+ // dashes, each starting with a letter, 64 characters at most; member.* and
9
+ // access.* are the Chest's own (the members' lifecycle).
10
+ const typePattern = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*(?:\.[a-z][a-z0-9]*(?:-[a-z0-9]+)*){1,3}$/u;
11
+ export const isToolEventType = (value) => typeof value === "string" && value.length <= 64 && typePattern.test(value) && !value.startsWith("member.") && !value.startsWith("access.");
12
+ // An identifier of the publisher's own: the "id" kind of a field, an
13
+ // event's subject and its idempotency key.
14
+ export const itemIdPattern = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/u;
15
+ // The name of a tool, as an event's source.
16
+ export const toolNamePattern = /^[a-z][a-z0-9-]{0,47}$/u;
17
+ // A role of a tool's own (chest.json "roles"), as an audience or a
18
+ // broadcast names it.
19
+ export const rolePattern = /^[a-z][a-z0-9-]{0,47}$/u;
20
+ // A field of an event's data: a camelCase name.
21
+ export const fieldNamePattern = /^[a-z][A-Za-z0-9]{0,39}$/u;
22
+ // The largest data of one event, in bytes of its JSON (UTF-8).
23
+ export const maxData = 16 << 10;
24
+ // How far back an event's occurredAt may go — the Chest's 72 hours of
25
+ // retries — and how far ahead the clocks of the Chest and of the container
26
+ // may differ, in milliseconds.
27
+ export const eventWindow = 72 * 3600_000;
28
+ export const clockSkew = 5000;
29
+ const daysIn = (year, month) => month === 2 ? (year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) ? 29 : 28) : [4, 6, 9, 11].includes(month) ? 30 : 31;
30
+ const instantPattern = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.\d{1,9})?(?:Z|[+-](\d{2}):(\d{2}))$/u;
31
+ const datePattern = /^(\d{4})-(\d{2})-(\d{2})$/u;
32
+ // instantOf is the time of an RFC 3339 instant (a date, a time to the
33
+ // second or finer, Z or an offset) in milliseconds, or null for anything
34
+ // else — a day or an hour that does not exist included.
35
+ export function instantOf(value) {
36
+ const parts = typeof value === "string" ? instantPattern.exec(value) : null;
37
+ if (!parts)
38
+ return null;
39
+ const [year, month, day, hour, minute, second, offsetHour, offsetMinute] = parts.slice(1).map(v => Number(v ?? "0"));
40
+ if (month < 1 || month > 12 || day < 1 || day > daysIn(year, month) || hour > 23 || minute > 59 || second > 59 || offsetHour > 23 || offsetMinute > 59)
41
+ return null;
42
+ return Date.parse(value);
43
+ }
44
+ // isDate says a value is a day that exists, YYYY-MM-DD.
45
+ export function isDate(value) {
46
+ const parts = typeof value === "string" ? datePattern.exec(value) : null;
47
+ if (!parts)
48
+ return false;
49
+ const [year, month, day] = parts.slice(1).map(Number);
50
+ return month >= 1 && month <= 12 && day >= 1 && day <= daysIn(year, month);
51
+ }
52
+ // Text: no control character (C0, C1) but line feeds and tabs, no format
53
+ // character (Cf: U+200B, U+202E…) and no unpaired surrogate; no length of
54
+ // its own (the data's 16 KiB bound it).
55
+ const isText = (value) => typeof value === "string" && !/[^\P{Cc}\n\t]|[\p{Cf}\p{Cs}]/u.test(value);
56
+ const kinds = {
57
+ id: value => typeof value === "string" && itemIdPattern.test(value),
58
+ text: isText,
59
+ number: value => typeof value === "number" && Number.isFinite(value),
60
+ boolean: value => typeof value === "boolean",
61
+ time: value => instantOf(value) !== null,
62
+ date: isDate,
63
+ member: (value, known) => typeof value === "string" && memberIdPattern.test(value) && known(value),
64
+ // A list, empty or not, of distinct members.
65
+ members: (value, known) => Array.isArray(value) && value.every(v => typeof v === "string" && memberIdPattern.test(v) && known(v)) && new Set(value).size === value.length,
66
+ };
67
+ // fieldOf reads a field's declaration in "emits" ("number", "text?"): its
68
+ // kind and whether it may be left out; null for one the Chest refuses.
69
+ export function fieldOf(declared) {
70
+ if (typeof declared !== "string")
71
+ return null;
72
+ const optional = declared.endsWith("?"), kind = optional ? declared.slice(0, -1) : declared;
73
+ return Object.hasOwn(kinds, kind) ? { kind: kind, optional } : null;
74
+ }
75
+ // isDeclaredData says data is what its type declares: an object with every
76
+ // required field, no field not declared, each value of its kind — null is
77
+ // a field left out. declared
78
+ // maps each field to its kind ("text?"), as "emits" names them; known says
79
+ // a member is one the publisher has or had. Its size (maxData) is checked
80
+ // apart.
81
+ export function isDeclaredData(data, declared, known) {
82
+ if (data === null || typeof data !== "object" || Array.isArray(data))
83
+ return false;
84
+ const given = data;
85
+ for (const name of Object.keys(given))
86
+ if (!Object.hasOwn(declared, name))
87
+ return false;
88
+ return Object.entries(declared).every(([name, spec]) => {
89
+ const field = fieldOf(spec);
90
+ if (!field)
91
+ return false;
92
+ if (!Object.hasOwn(given, name) || given[name] === null)
93
+ return field.optional;
94
+ return kinds[field.kind](given[name], known);
95
+ });
96
+ }
97
+ const audienceLists = { members: memberIdPattern, groups: groupIdPattern, roles: rolePattern };
98
+ // isAudience says a value is an audience the Chest takes: an object of
99
+ // members, groups and roles only, each a list of distinct identifiers of
100
+ // its grammar, one list at least not empty.
101
+ export function isAudience(value) {
102
+ if (value === null || typeof value !== "object" || Array.isArray(value))
103
+ return false;
104
+ const lists = Object.entries(value);
105
+ return lists.some(([, list]) => Array.isArray(list) && list.length > 0) && lists.every(([name, list]) => Object.hasOwn(audienceLists, name) && Array.isArray(list) && list.every(v => typeof v === "string" && audienceLists[name].test(v)) && new Set(list).size === list.length);
106
+ }
107
+ //# sourceMappingURL=eventrules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventrules.js","sourceRoot":"","sources":["../../client/src/eventrules.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { IncomingMessage } from "node:http";
2
+ import { type Audience } from "./eventrules.js";
2
3
  import { type Seen } from "./signed.js";
3
4
  export type MemberChange = "name" | "photo" | "role" | "groups" | "email" | "language" | "timeZone";
4
5
  export type MemberUpdated = {
@@ -38,16 +39,40 @@ export type MemberErased = {
38
39
  };
39
40
  export type ChestEvent = MemberUpdated | AccessRevoked | MemberRemoved | MemberErased;
40
41
  export type ChestEventType = ChestEvent["type"];
41
- export type Handlers = {
42
- [K in ChestEventType]?: (event: Extract<ChestEvent, {
43
- type: K;
44
- }>) => void | Promise<void>;
42
+ export type ToolEvent = {
43
+ id: string;
44
+ type: string;
45
+ source: string;
46
+ occurredAt: string;
47
+ subject?: string;
48
+ audience: "all" | string[];
49
+ data: Record<string, unknown>;
50
+ };
51
+ export type ReceivedEvent = ChestEvent | ToolEvent;
52
+ export type ToolEventType = `${string}.${string}`;
53
+ export type Handler<K extends string> = (event: K extends ChestEventType ? Extract<ChestEvent, {
54
+ type: K;
55
+ }> : ToolEvent) => void | Promise<void>;
56
+ export type Handlers<K extends ToolEventType = ChestEventType | ToolEventType> = {
57
+ [P in K]?: Handler<P>;
45
58
  };
46
59
  export { memorySeen, type Seen } from "./signed.js";
47
60
  export declare const erasureIdPattern: RegExp;
48
- export declare function verify(request: IncomingMessage | Request): Promise<ChestEvent | null>;
49
- export declare function handle(request: IncomingMessage | Request, handlers: Handlers, options?: {
61
+ export declare function verify(request: IncomingMessage | Request): Promise<ReceivedEvent | null>;
62
+ export declare function handle<K extends ToolEventType>(request: IncomingMessage | Request, handlers: Handlers<K>, options?: {
50
63
  seen?: Seen;
51
64
  }): Promise<number>;
65
+ export type EmitAudience = Audience;
66
+ export type EmitOptions = {
67
+ subject?: string;
68
+ key?: string;
69
+ occurredAt?: Date | string;
70
+ audience?: EmitAudience;
71
+ };
72
+ export type Emitted = {
73
+ id: string;
74
+ receivers: number;
75
+ };
76
+ export declare function emit(type: string, data: Record<string, unknown>, options?: EmitOptions): Promise<Emitted>;
52
77
  export declare function acknowledgeErasure(erasure: string): Promise<void>;
53
78
  //# sourceMappingURL=events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../client/src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAKjD,OAAO,EAA6D,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AA0BnG,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC;AAEpG,MAAM,MAAM,aAAa,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,YAAY,EAAE,CAAA;KAAE,CAAA;CAAE,CAAC;AAEtI,MAAM,MAAM,aAAa,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAE7G,MAAM,MAAM,aAAa,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAG7G,MAAM,MAAM,YAAY,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,eAAe,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAE9I,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,aAAa,GAAG,aAAa,GAAG,YAAY,CAAC;AACtF,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;AAGhD,MAAM,MAAM,QAAQ,GAAG;KAAG,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,EAAE;QAAE,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAAE,CAAC;AAIrH,OAAO,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAGpD,eAAO,MAAM,gBAAgB,QAAwB,CAAC;AAsCtD,wBAAsB,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAG3F;AAWD,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,CAanI;AAQD,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASvE"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../client/src/events.ts"],"names":[],"mappings":"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"}