@formigio/fazemos-cli 0.10.17 → 0.10.19

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.
@@ -2,15 +2,17 @@
2
2
  * `fazemos dispatch` — write an inbox file for a role and notify any
3
3
  * configured human-filled recipient via the API.
4
4
  *
5
- * Data flow:
5
+ * F26 data flow (API write-through, Dex S-B):
6
6
  *
7
7
  * CLI invocation
8
8
  * ↓ resolve recipient via .fazemos/roles.json
9
- * ↓ generate frontmatter + body markdown
10
- * ↓ write file at <recipient.inbox>/<timestamp>-<from>-<slug>.md
11
- * ↓ POST /api/notifications/dispatch (summary + notification config)
12
- * ↓ API gates on filler.type === 'human' + notification configured
13
- * API fans out (Slack today)
9
+ * ↓ POST /api/dispatches (API writes DB row + fires fan-out + returns file_path)
10
+ * ↓ CLI writes inbox file at the returned file_path
11
+ * ↓ --commit git-adds the file (same as before)
12
+ *
13
+ * Legacy / degraded mode (--file-only):
14
+ * Skips the API call and writes only the local file (original behavior).
15
+ * Used by not-yet-migrated playbooks and offline work.
14
16
  *
15
17
  * Workspaces have `.fazemos/roles.json` registries. The CLI walks up from
16
18
  * cwd to find the local registry, then can hop to other workspaces via
@@ -24,6 +26,11 @@ export interface RoleEntry {
24
26
  filler: {
25
27
  type: 'human' | 'agent';
26
28
  identity: string;
29
+ /** F26 (Dex M2): REQUIRED for human fillers; the Cognito sub that maps
30
+ * to the user's inbox. Used by `fazemos roles sync` to seed
31
+ * role_registrations.user_id. */
32
+ cognito_sub?: string;
33
+ email?: string;
27
34
  };
28
35
  subagent: string | null;
29
36
  inbox: string;
@@ -81,6 +88,17 @@ export declare function buildInboxFile(input: DispatchInput): {
81
88
  summary: string;
82
89
  };
83
90
  export declare function writeInboxFile(workspaceRoot: string, role: RoleEntry, fileName: string, content: string): string;
91
+ /**
92
+ * Write an inbox file at an explicit path returned by the API (Dex S-B).
93
+ * The API computes file_path; the CLI writes the actual file at that path.
94
+ * Creates parent directories as needed.
95
+ *
96
+ * Security: the API-returned `file_path` is untrusted input. We resolve it
97
+ * against the workspace root and reject any path that escapes the workspace
98
+ * (via `../` traversal or an absolute path such as `/etc/cron.d/payload`)
99
+ * before writing. Ported from the F26 CLI-step fix (0628d39).
100
+ */
101
+ export declare function writeInboxFileAtPath(workspaceRoot: string, relativePath: string, content: string): string;
84
102
  export interface NotificationPayload {
85
103
  to_role: string;
86
104
  to_filler_type: 'human' | 'agent';
@@ -93,4 +111,88 @@ export interface NotificationPayload {
93
111
  source: 'cli';
94
112
  }
95
113
  export declare function buildNotificationPayload(input: DispatchInput, role: RoleEntry, fileRef: string, summary: string): NotificationPayload;
114
+ export interface CreateDispatchRequest {
115
+ to: string;
116
+ from: string;
117
+ type: string;
118
+ priority?: string;
119
+ body: string;
120
+ thread_id?: string | null;
121
+ re?: string[] | null;
122
+ expires_at?: string | null;
123
+ no_notify?: boolean;
124
+ source: 'cli' | 'agent' | 'api' | 'migration';
125
+ }
126
+ export interface CreateDispatchResponse {
127
+ id: string;
128
+ thread_id: string;
129
+ org_id: string;
130
+ project_id: string | null;
131
+ from_role: string;
132
+ to_role: string;
133
+ type: string;
134
+ priority: string;
135
+ status: string;
136
+ body: string;
137
+ summary: string;
138
+ refs: Array<{
139
+ token: string;
140
+ kind: string;
141
+ url: string | null;
142
+ resolved: boolean;
143
+ unverified?: boolean;
144
+ }>;
145
+ escalated_from: string | null;
146
+ source: string;
147
+ file_path: string | null;
148
+ created_at: string;
149
+ updated_at: string;
150
+ read_at: string | null;
151
+ actioned_at: string | null;
152
+ deferred_until: string | null;
153
+ expires_at: string | null;
154
+ }
155
+ export interface RoleSyncEntry {
156
+ role_slug: string;
157
+ filler_type: 'human' | 'agent';
158
+ filler_identity: string;
159
+ cognito_sub?: string | null;
160
+ scope: 'org' | 'project';
161
+ org_id?: string | null;
162
+ project_id?: string | null;
163
+ notification?: RoleNotification | null;
164
+ }
165
+ export interface RoleSyncPayload {
166
+ workspace: string;
167
+ roles: RoleSyncEntry[];
168
+ }
169
+ /**
170
+ * Build the roles sync payload from a registry (and optionally from cross-
171
+ * workspace refs for human roles like founder).
172
+ *
173
+ * Validates that human fillers have cognito_sub set (Dex M2 — fail loud).
174
+ * Throws with a clear message if any human filler is missing it.
175
+ */
176
+ export declare function buildRolesSyncPayload(registry: RolesRegistry, orgId: string | null, projectId?: string | null): RoleSyncPayload;
177
+ export interface BackfillResult {
178
+ imported: number;
179
+ skipped_already_imported: number;
180
+ skipped_processed: number;
181
+ errors: string[];
182
+ }
183
+ /**
184
+ * Compute a stable content hash for a dispatch file (for idempotency).
185
+ */
186
+ export declare function computeFileHash(content: string): string;
187
+ /**
188
+ * Find all unprocessed inbox files in a role's inbox directory.
189
+ * Returns files in roles/{role}/inbox/ that are NOT in roles/{role}/processed/.
190
+ * Skips subdirectories named 'processed'.
191
+ */
192
+ export declare function findUnprocessedInboxFiles(workspaceRoot: string, rolesDir?: string): Array<{
193
+ rolePath: string;
194
+ filePath: string;
195
+ relativePath: string;
196
+ content: string;
197
+ }>;
96
198
  export declare function gitCommitInboxFile(workspaceRoot: string, relativePath: string, message: string): void;
package/dist/dispatch.js CHANGED
@@ -2,24 +2,27 @@
2
2
  * `fazemos dispatch` — write an inbox file for a role and notify any
3
3
  * configured human-filled recipient via the API.
4
4
  *
5
- * Data flow:
5
+ * F26 data flow (API write-through, Dex S-B):
6
6
  *
7
7
  * CLI invocation
8
8
  * ↓ resolve recipient via .fazemos/roles.json
9
- * ↓ generate frontmatter + body markdown
10
- * ↓ write file at <recipient.inbox>/<timestamp>-<from>-<slug>.md
11
- * ↓ POST /api/notifications/dispatch (summary + notification config)
12
- * ↓ API gates on filler.type === 'human' + notification configured
13
- * API fans out (Slack today)
9
+ * ↓ POST /api/dispatches (API writes DB row + fires fan-out + returns file_path)
10
+ * ↓ CLI writes inbox file at the returned file_path
11
+ * ↓ --commit git-adds the file (same as before)
12
+ *
13
+ * Legacy / degraded mode (--file-only):
14
+ * Skips the API call and writes only the local file (original behavior).
15
+ * Used by not-yet-migrated playbooks and offline work.
14
16
  *
15
17
  * Workspaces have `.fazemos/roles.json` registries. The CLI walks up from
16
18
  * cwd to find the local registry, then can hop to other workspaces via
17
19
  * the `cross_workspace_roles` block.
18
20
  */
19
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
20
- import { dirname, join, resolve as resolvePath } from 'path';
21
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, statSync } from 'fs';
22
+ import { dirname, join, resolve as resolvePath, relative } from 'path';
21
23
  import { homedir } from 'os';
22
24
  import { execSync } from 'child_process';
25
+ import crypto from 'crypto';
23
26
  // ── Registry loading ────────────────────────────────────────────
24
27
  /**
25
28
  * Walk up from `startDir` looking for a `.fazemos/roles.json`. Returns the
@@ -142,6 +145,30 @@ export function writeInboxFile(workspaceRoot, role, fileName, content) {
142
145
  writeFileSync(fullPath, content, 'utf-8');
143
146
  return fullPath;
144
147
  }
148
+ /**
149
+ * Write an inbox file at an explicit path returned by the API (Dex S-B).
150
+ * The API computes file_path; the CLI writes the actual file at that path.
151
+ * Creates parent directories as needed.
152
+ *
153
+ * Security: the API-returned `file_path` is untrusted input. We resolve it
154
+ * against the workspace root and reject any path that escapes the workspace
155
+ * (via `../` traversal or an absolute path such as `/etc/cron.d/payload`)
156
+ * before writing. Ported from the F26 CLI-step fix (0628d39).
157
+ */
158
+ export function writeInboxFileAtPath(workspaceRoot, relativePath, content) {
159
+ const resolvedRoot = resolvePath(workspaceRoot);
160
+ const fullPath = resolvePath(relativePath.startsWith('/') ? relativePath : join(resolvedRoot, relativePath));
161
+ // Guard against path traversal: the final path must be inside workspaceRoot.
162
+ if (!fullPath.startsWith(resolvedRoot + '/') && fullPath !== resolvedRoot) {
163
+ throw new Error(`Security: resolved path "${fullPath}" is outside workspace root "${resolvedRoot}"`);
164
+ }
165
+ const dir = dirname(fullPath);
166
+ if (!existsSync(dir)) {
167
+ mkdirSync(dir, { recursive: true });
168
+ }
169
+ writeFileSync(fullPath, content, 'utf-8');
170
+ return fullPath;
171
+ }
145
172
  export function buildNotificationPayload(input, role, fileRef, summary) {
146
173
  return {
147
174
  to_role: input.to,
@@ -155,6 +182,106 @@ export function buildNotificationPayload(input, role, fileRef, summary) {
155
182
  source: 'cli',
156
183
  };
157
184
  }
185
+ /**
186
+ * Build the roles sync payload from a registry (and optionally from cross-
187
+ * workspace refs for human roles like founder).
188
+ *
189
+ * Validates that human fillers have cognito_sub set (Dex M2 — fail loud).
190
+ * Throws with a clear message if any human filler is missing it.
191
+ */
192
+ export function buildRolesSyncPayload(registry, orgId, projectId) {
193
+ const roles = [];
194
+ const missingSubErrors = [];
195
+ for (const [slug, role] of Object.entries(registry.roles)) {
196
+ if (role.filler.type === 'human' && !role.filler.cognito_sub) {
197
+ missingSubErrors.push(slug);
198
+ }
199
+ roles.push({
200
+ role_slug: slug,
201
+ filler_type: role.filler.type,
202
+ filler_identity: role.filler.identity,
203
+ cognito_sub: role.filler.type === 'human' ? (role.filler.cognito_sub ?? null) : null,
204
+ scope: role.scope,
205
+ org_id: orgId,
206
+ project_id: projectId ?? null,
207
+ notification: role.notification ?? null,
208
+ });
209
+ }
210
+ // Also handle cross-workspace roles (e.g., founder in JJ workspace)
211
+ if (registry.cross_workspace_roles) {
212
+ for (const [slug, xref] of Object.entries(registry.cross_workspace_roles)) {
213
+ const remote = loadRegistryAt(xref.workspace_path);
214
+ if (remote && remote.roles[slug]) {
215
+ const role = remote.roles[slug];
216
+ if (role.filler.type === 'human' && !role.filler.cognito_sub) {
217
+ missingSubErrors.push(`${slug} (from ${xref.workspace_path})`);
218
+ }
219
+ roles.push({
220
+ role_slug: slug,
221
+ filler_type: role.filler.type,
222
+ filler_identity: role.filler.identity,
223
+ cognito_sub: role.filler.type === 'human' ? (role.filler.cognito_sub ?? null) : null,
224
+ scope: role.scope,
225
+ org_id: orgId,
226
+ project_id: projectId ?? null,
227
+ notification: role.notification ?? null,
228
+ });
229
+ }
230
+ }
231
+ }
232
+ if (missingSubErrors.length > 0) {
233
+ throw new Error(`Human filler(s) missing cognito_sub in roles.json — cannot sync inbox mapping:\n` +
234
+ missingSubErrors.map(s => ` - ${s}`).join('\n') + '\n' +
235
+ `Add cognito_sub to each human filler block in roles.json and re-run fazemos roles sync.\n` +
236
+ `(Tip: find your Cognito sub at /auth/me → user.id)`);
237
+ }
238
+ return { workspace: registry.workspace, roles };
239
+ }
240
+ /**
241
+ * Compute a stable content hash for a dispatch file (for idempotency).
242
+ */
243
+ export function computeFileHash(content) {
244
+ return crypto.createHash('sha256').update(content, 'utf-8').digest('hex').slice(0, 16);
245
+ }
246
+ /**
247
+ * Find all unprocessed inbox files in a role's inbox directory.
248
+ * Returns files in roles/{role}/inbox/ that are NOT in roles/{role}/processed/.
249
+ * Skips subdirectories named 'processed'.
250
+ */
251
+ export function findUnprocessedInboxFiles(workspaceRoot, rolesDir = 'roles') {
252
+ const results = [];
253
+ const rolesAbsDir = join(workspaceRoot, rolesDir);
254
+ if (!existsSync(rolesAbsDir))
255
+ return results;
256
+ for (const roleName of readdirSync(rolesAbsDir)) {
257
+ const roleDir = join(rolesAbsDir, roleName);
258
+ if (!statSync(roleDir).isDirectory())
259
+ continue;
260
+ const inboxDir = join(roleDir, 'inbox');
261
+ if (!existsSync(inboxDir))
262
+ continue;
263
+ for (const fileName of readdirSync(inboxDir)) {
264
+ if (!fileName.endsWith('.md'))
265
+ continue;
266
+ const filePath = join(inboxDir, fileName);
267
+ if (!statSync(filePath).isFile())
268
+ continue;
269
+ // Skip if in processed/ subdirectory (already actioned)
270
+ const processedDir = join(roleDir, 'processed');
271
+ const processedPath = join(processedDir, fileName);
272
+ if (existsSync(processedPath))
273
+ continue;
274
+ const content = readFileSync(filePath, 'utf-8');
275
+ results.push({
276
+ rolePath: roleName,
277
+ filePath,
278
+ relativePath: relative(workspaceRoot, filePath),
279
+ content,
280
+ });
281
+ }
282
+ }
283
+ return results;
284
+ }
158
285
  // ── Optional git add + commit ───────────────────────────────────
159
286
  export function gitCommitInboxFile(workspaceRoot, relativePath, message) {
160
287
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../src/dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,MAAM,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAmCzC,mEAAmE;AAEnE;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,IAAI,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;QACtD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;YACzD,OAAO;gBACL,GAAG,GAAG;gBACN,cAAc,EAAE,GAAG;gBACnB,aAAa,EAAE,SAAS;aACR,CAAC;QACrB,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,aAAqB;IAClD,MAAM,QAAQ,GAAG,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC;QAC5C,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC7D,CAAC,CAAC,aAAa,CAAC;IAClB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IAC3D,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IACzD,OAAO;QACL,GAAG,GAAG;QACN,cAAc,EAAE,QAAQ;QACxB,aAAa,EAAE,SAAS;KACR,CAAC;AACrB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,IAAY,EACZ,aAA4B;IAE5B,oBAAoB;IACpB,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;IACtE,CAAC;IACD,yBAAyB;IACzB,MAAM,IAAI,GAAG,aAAa,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACnD,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QACxD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAeD,SAAS,OAAO,CAAC,CAAS;IACxB,OAAO,CAAC;SACL,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,QAAQ;IACf,+DAA+D;IAC/D,kEAAkE;IAClE,mEAAmE;IACnE,oEAAoE;IACpE,gEAAgE;IAChE,sCAAsC;IACtC,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;IACrB,MAAM,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC;IAChC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnD,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,OAAO;QACL,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE;QACpB,QAAQ,EAAE,GAAG,IAAI,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QAC1C,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,IAAI,EAAE,EAAE;KAC5B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAoB;IACjD,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9D,MAAM,EAAE,GAAG,GAAG,QAAQ,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAG,GAAG,EAAE,KAAK,CAAC;IAE5B,MAAM,EAAE,GAAa,CAAC,KAAK,CAAC,CAAC;IAC7B,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACrB,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/B,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/B,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3B,EAAE,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,QAAQ,IAAI,QAAQ,EAAE,CAAC,CAAC;IACnD,EAAE,CAAC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC;IAC9B,IAAI,KAAK,CAAC,EAAE;QAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,KAAK,CAAC,MAAM;QAAE,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACrD,IAAI,KAAK,CAAC,SAAS;QAAE,EAAE,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IAC/D,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACvB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEf,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC;IACtD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAExD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,aAAqB,EACrB,IAAe,EACf,QAAgB,EAChB,OAAe;IAEf,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC1C,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAgBD,MAAM,UAAU,wBAAwB,CACtC,KAAoB,EACpB,IAAe,EACf,OAAe,EACf,OAAe;IAEf,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,EAAE;QACjB,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;QAChC,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,QAAQ;QACpC,OAAO;QACP,GAAG,EAAE,OAAO;QACZ,MAAM,EAAE,KAAK;KACd,CAAC;AACJ,CAAC;AAED,mEAAmE;AAEnE,MAAM,UAAU,kBAAkB,CAAC,aAAqB,EAAE,YAAoB,EAAE,OAAe;IAC7F,IAAI,CAAC;QACH,QAAQ,CAAC,YAAY,YAAY,GAAG,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7E,QAAQ,CAAC,kBAAkB,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACrG,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,8DAA8D;QAC9D,MAAM,IAAI,KAAK,CACb,wBAAwB,aAAa,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC7F,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../src/dispatch.ts"],"names":[],"mappings":"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"}