@hasna/machines 0.0.21 → 0.0.22

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 CHANGED
@@ -111,11 +111,19 @@ workspace inference second; consumers can still pass manual overrides.
111
111
 
112
112
  ```bash
113
113
  machines workspace resolve --machine spark01 --project open-knowledge --repo open-knowledge --json
114
+ machines workspace doctor --machine spark01 --project open-knowledge --repo open-knowledge --json
114
115
  ```
115
116
 
116
- If a resolver result reports inferred project or open-files roots, repair the
117
- manifest metadata explicitly. The command previews changes by default and only
118
- writes when `--apply` is passed:
117
+ `workspace resolve` and `workspace doctor` include JSON-friendly
118
+ `diagnostics` and `repair_hints`. Diagnostics classify missing manifests,
119
+ unresolved roots, inferred roots, local stale paths, untrusted machines, and
120
+ unknown auth. Repair hints include the dry-run command plus the matching
121
+ `--apply` command so downstream apps can surface the next step without
122
+ depending on open-machines internals.
123
+
124
+ If a resolver result reports inferred or unresolved project/open-files roots,
125
+ repair the manifest metadata explicitly. The command previews changes by
126
+ default and only writes when `--apply` is passed:
119
127
 
120
128
  ```bash
121
129
  machines workspace repair --machine spark01 --project open-knowledge --repo open-knowledge --json
package/dist/cli/index.js CHANGED
@@ -7633,7 +7633,8 @@ var MACHINES_CONSUMER_CAPABILITIES = {
7633
7633
  compatibility: true,
7634
7634
  route_resolution: true,
7635
7635
  cli_json_fallback: true,
7636
- workspace_path_mapping: true
7636
+ workspace_path_mapping: true,
7637
+ workspace_diagnostics: true
7637
7638
  };
7638
7639
  function getMachinesConsumerCapabilities() {
7639
7640
  return { ...MACHINES_CONSUMER_CAPABILITIES };
@@ -8024,6 +8025,170 @@ function inferRepoRoot(workspaceRoot, repoName) {
8024
8025
  }
8025
8026
  return joinPath(root, repoName);
8026
8027
  }
8028
+ function shellQuote(value) {
8029
+ return `'${value.replace(/'/g, "'\\''")}'`;
8030
+ }
8031
+ function shellCommand(command) {
8032
+ return command.map(shellQuote).join(" ");
8033
+ }
8034
+ function canCheckPathForMachine(machine, localMachineId) {
8035
+ if (!machine)
8036
+ return false;
8037
+ if (machine.machine_id === localMachineId)
8038
+ return true;
8039
+ return machine.route_hints.some((hint) => hint.kind === "local");
8040
+ }
8041
+ function checkedPathExists(path, check) {
8042
+ if (!path || !check)
8043
+ return null;
8044
+ return existsSync5(path);
8045
+ }
8046
+ function repairHint(input) {
8047
+ const command = [
8048
+ "machines",
8049
+ "workspace",
8050
+ "repair",
8051
+ "--machine",
8052
+ input.machineId,
8053
+ "--project",
8054
+ input.projectId
8055
+ ];
8056
+ if (input.repoName)
8057
+ command.push("--repo", input.repoName);
8058
+ if (input.openFilesRepoName)
8059
+ command.push("--open-files-repo", input.openFilesRepoName);
8060
+ command.push("--json");
8061
+ const applyCommand = [...command.slice(0, -1), "--apply", "--json"];
8062
+ return {
8063
+ id: `repair:${input.machineId}:${input.projectId}`,
8064
+ reason: input.reason,
8065
+ command,
8066
+ shell_command: shellCommand(command),
8067
+ apply_command: applyCommand,
8068
+ apply_shell_command: shellCommand(applyCommand)
8069
+ };
8070
+ }
8071
+ function pathDiagnostic(input) {
8072
+ if (!input.path.path) {
8073
+ return {
8074
+ id: input.id,
8075
+ status: "missing",
8076
+ severity: input.required ? "fail" : "warn",
8077
+ message: `${input.label} is unresolved.`,
8078
+ path: null,
8079
+ source: input.path.source,
8080
+ path_exists: null
8081
+ };
8082
+ }
8083
+ if (input.pathExists === false) {
8084
+ return {
8085
+ id: input.id,
8086
+ status: "stale",
8087
+ severity: "fail",
8088
+ message: `${input.label} points to a path that does not exist on this machine.`,
8089
+ path: input.path.path,
8090
+ source: input.path.source,
8091
+ path_exists: false
8092
+ };
8093
+ }
8094
+ if (input.path.source === "inferred") {
8095
+ return {
8096
+ id: input.id,
8097
+ status: "inferred",
8098
+ severity: "warn",
8099
+ message: `${input.label} was inferred from the workspace root; write an explicit manifest mapping for repeatable downstream sync.`,
8100
+ path: input.path.path,
8101
+ source: input.path.source,
8102
+ path_exists: input.pathExists
8103
+ };
8104
+ }
8105
+ return {
8106
+ id: input.id,
8107
+ status: "ok",
8108
+ severity: "ok",
8109
+ message: `${input.label} is explicit enough for downstream sync.`,
8110
+ path: input.path.path,
8111
+ source: input.path.source,
8112
+ path_exists: input.pathExists
8113
+ };
8114
+ }
8115
+ function workspaceDiagnostics(input) {
8116
+ const checkPaths = canCheckPathForMachine(input.machine, input.localMachineId);
8117
+ const diagnostics = [];
8118
+ if (!input.machine) {
8119
+ diagnostics.push({
8120
+ id: "manifest",
8121
+ status: "missing_manifest",
8122
+ severity: "fail",
8123
+ message: "Machine is not present in topology or manifest.",
8124
+ path: null,
8125
+ source: "manifest",
8126
+ path_exists: null
8127
+ });
8128
+ } else if (!input.resolution.evidence.manifest_declared) {
8129
+ diagnostics.push({
8130
+ id: "manifest",
8131
+ status: "missing_manifest",
8132
+ severity: "warn",
8133
+ message: "Machine came from live topology but is not declared in the manifest.",
8134
+ path: null,
8135
+ source: "manifest",
8136
+ path_exists: null
8137
+ });
8138
+ }
8139
+ diagnostics.push(pathDiagnostic({
8140
+ id: "workspace_root",
8141
+ label: "Workspace root",
8142
+ path: input.resolution.paths.workspace_root,
8143
+ pathExists: checkedPathExists(input.resolution.paths.workspace_root.path, checkPaths),
8144
+ required: false
8145
+ }));
8146
+ diagnostics.push(pathDiagnostic({
8147
+ id: "project_root",
8148
+ label: "Project root",
8149
+ path: input.resolution.paths.project_root,
8150
+ pathExists: checkedPathExists(input.resolution.paths.project_root.path, checkPaths),
8151
+ required: true
8152
+ }));
8153
+ diagnostics.push(pathDiagnostic({
8154
+ id: "open_files_root",
8155
+ label: "Open-files root",
8156
+ path: input.resolution.paths.open_files_root,
8157
+ pathExists: checkedPathExists(input.resolution.paths.open_files_root.path, checkPaths),
8158
+ required: false
8159
+ }));
8160
+ if (input.resolution.machine.trust_status !== "trusted") {
8161
+ diagnostics.push({
8162
+ id: "trust",
8163
+ status: "untrusted",
8164
+ severity: "warn",
8165
+ message: `Machine trust status is ${input.resolution.machine.trust_status}; manifest repair apply requires trust or --allow-untrusted.`,
8166
+ path: null,
8167
+ source: "trust",
8168
+ path_exists: null
8169
+ });
8170
+ }
8171
+ if (input.resolution.machine.auth_status !== "authenticated") {
8172
+ diagnostics.push({
8173
+ id: "auth",
8174
+ status: "unknown_auth",
8175
+ severity: "warn",
8176
+ message: `Machine auth status is ${input.resolution.machine.auth_status}; remote sync may still fail if SSH is unavailable.`,
8177
+ path: null,
8178
+ source: "auth",
8179
+ path_exists: null
8180
+ });
8181
+ }
8182
+ const needsRepair = diagnostics.some((entry) => (entry.id === "project_root" || entry.id === "open_files_root") && (entry.status === "missing" || entry.status === "inferred" || entry.status === "stale"));
8183
+ const repairHints = needsRepair ? [repairHint({
8184
+ machineId: input.resolution.machine_id ?? input.resolution.requested_machine_id,
8185
+ projectId: input.resolution.project.project_id,
8186
+ repoName: input.resolution.project.repo_name,
8187
+ openFilesRepoName: input.openFilesRepoName,
8188
+ reason: "Write explicit workspace_paths and open_files_roots manifest metadata."
8189
+ })] : [];
8190
+ return { diagnostics, repairHints };
8191
+ }
8027
8192
  function projectPathFromMetadata(metadata, projectId, repoName) {
8028
8193
  const keys = [projectId, repoName].filter((value) => Boolean(value));
8029
8194
  return readMappedPath({
@@ -8099,7 +8264,7 @@ function resolveMachineWorkspace(options) {
8099
8264
  const openFilesRepoName = options.openFilesRepoName ?? "open-files";
8100
8265
  if (!machine) {
8101
8266
  warnings.push(`machine_not_found:${options.machineId}`);
8102
- return {
8267
+ const resolution2 = {
8103
8268
  schema_version: MACHINES_CONSUMER_CONTRACT_VERSION,
8104
8269
  package: topology.package,
8105
8270
  ok: false,
@@ -8113,6 +8278,8 @@ function resolveMachineWorkspace(options) {
8113
8278
  project_root: { path: null, source: "unresolved" },
8114
8279
  open_files_root: { path: null, source: "unresolved" }
8115
8280
  },
8281
+ diagnostics: [],
8282
+ repair_hints: [],
8116
8283
  evidence: {
8117
8284
  topology: true,
8118
8285
  matched_by: matchedBy,
@@ -8121,6 +8288,17 @@ function resolveMachineWorkspace(options) {
8121
8288
  },
8122
8289
  warnings
8123
8290
  };
8291
+ const diagnostics2 = workspaceDiagnostics({
8292
+ machine,
8293
+ localMachineId: topology.local_machine_id,
8294
+ resolution: resolution2,
8295
+ openFilesRepoName
8296
+ });
8297
+ return {
8298
+ ...resolution2,
8299
+ diagnostics: diagnostics2.diagnostics,
8300
+ repair_hints: diagnostics2.repairHints
8301
+ };
8124
8302
  }
8125
8303
  const metadata = machine.metadata;
8126
8304
  const workspaceRootPath = options.workspaceRoot ?? machine.workspace_path;
@@ -8139,7 +8317,7 @@ function resolveMachineWorkspace(options) {
8139
8317
  warnings.push(`open_files_root_inferred:${options.projectId}`);
8140
8318
  if (!projectRootPath)
8141
8319
  warnings.push(`project_root_unresolved:${options.projectId}`);
8142
- return {
8320
+ const resolution = {
8143
8321
  schema_version: MACHINES_CONSUMER_CONTRACT_VERSION,
8144
8322
  package: topology.package,
8145
8323
  ok: Boolean(projectRootPath),
@@ -8162,6 +8340,8 @@ function resolveMachineWorkspace(options) {
8162
8340
  project_root: { path: projectRootPath, source: projectRootSource },
8163
8341
  open_files_root: { path: openFilesRootPath, source: openFilesRootSource }
8164
8342
  },
8343
+ diagnostics: [],
8344
+ repair_hints: [],
8165
8345
  evidence: {
8166
8346
  topology: true,
8167
8347
  matched_by: matchedBy,
@@ -8170,10 +8350,21 @@ function resolveMachineWorkspace(options) {
8170
8350
  },
8171
8351
  warnings
8172
8352
  };
8353
+ const diagnostics = workspaceDiagnostics({
8354
+ machine,
8355
+ localMachineId: topology.local_machine_id,
8356
+ resolution,
8357
+ openFilesRepoName
8358
+ });
8359
+ return {
8360
+ ...resolution,
8361
+ diagnostics: diagnostics.diagnostics,
8362
+ repair_hints: diagnostics.repairHints
8363
+ };
8173
8364
  }
8174
8365
 
8175
8366
  // src/commands/ssh.ts
8176
- function shellQuote(value) {
8367
+ function shellQuote2(value) {
8177
8368
  return `'${value.replace(/'/g, "'\\''")}'`;
8178
8369
  }
8179
8370
  function resolveSshTarget(machineId, options = {}) {
@@ -8194,11 +8385,11 @@ function resolveSshTarget(machineId, options = {}) {
8194
8385
  }
8195
8386
  function buildSshCommand(machineId, remoteCommand, options = {}) {
8196
8387
  const resolved = resolveSshTarget(machineId, options);
8197
- return remoteCommand ? `ssh ${resolved.target} ${shellQuote(remoteCommand)}` : `ssh ${resolved.target}`;
8388
+ return remoteCommand ? `ssh ${resolved.target} ${shellQuote2(remoteCommand)}` : `ssh ${resolved.target}`;
8198
8389
  }
8199
8390
 
8200
8391
  // src/remote.ts
8201
- function shellQuote2(value) {
8392
+ function shellQuote3(value) {
8202
8393
  return `'${value.replace(/'/g, "'\\''")}'`;
8203
8394
  }
8204
8395
  function machineIsLocal(machineId, localMachineId) {
@@ -8216,7 +8407,7 @@ function resolveMachineCommand(machineId, command, localMachineId = getLocalMach
8216
8407
  } catch (error) {
8217
8408
  const message = String(error.message ?? error);
8218
8409
  if (message.includes("Machine route not found") || message.includes("Machine not found in manifest")) {
8219
- return { source: "ssh", shellCommand: `ssh ${shellQuote2(machineId)} ${shellQuote2(command)}` };
8410
+ return { source: "ssh", shellCommand: `ssh ${shellQuote3(machineId)} ${shellQuote3(command)}` };
8220
8411
  }
8221
8412
  throw error;
8222
8413
  }
@@ -8249,7 +8440,7 @@ function getAppManager(machine, app) {
8249
8440
  return "winget";
8250
8441
  return "apt";
8251
8442
  }
8252
- function shellQuote3(value) {
8443
+ function shellQuote4(value) {
8253
8444
  return `'${value.replace(/'/g, `'\\''`)}'`;
8254
8445
  }
8255
8446
  function buildAppCommand(machine, app) {
@@ -8270,7 +8461,7 @@ function buildAppCommand(machine, app) {
8270
8461
  return `sudo apt-get install -y ${packageName}`;
8271
8462
  }
8272
8463
  function buildAppProbeCommand(machine, app) {
8273
- const packageName = shellQuote3(getPackageName(app));
8464
+ const packageName = shellQuote4(getPackageName(app));
8274
8465
  const manager = getAppManager(machine, app);
8275
8466
  if (manager === "custom") {
8276
8467
  return `if command -v ${packageName} >/dev/null 2>&1; then printf 'installed=1\\nversion=custom\\n'; else printf 'installed=0\\n'; fi`;
@@ -8565,7 +8756,7 @@ var notificationConfigSchema = exports_external.object({
8565
8756
  function sortChannels(channels) {
8566
8757
  return [...channels].sort((left, right) => left.id.localeCompare(right.id));
8567
8758
  }
8568
- function shellQuote4(value) {
8759
+ function shellQuote5(value) {
8569
8760
  return `'${value.replace(/'/g, `'\\''`)}'`;
8570
8761
  }
8571
8762
  function hasCommand2(binary) {
@@ -8612,7 +8803,7 @@ ${message}
8612
8803
  };
8613
8804
  }
8614
8805
  if (hasCommand2("mail")) {
8615
- const command = `printf %s ${shellQuote4(message)} | mail -s ${shellQuote4(subject)} ${shellQuote4(channel.target)}`;
8806
+ const command = `printf %s ${shellQuote5(message)} | mail -s ${shellQuote5(subject)} ${shellQuote5(channel.target)}`;
8616
8807
  const result = Bun.spawnSync(["bash", "-lc", command], {
8617
8808
  stdout: "pipe",
8618
8809
  stderr: "pipe",
@@ -9197,7 +9388,7 @@ var DEFAULT_COMMANDS = [
9197
9388
  function defaultPackages() {
9198
9389
  return [{ name: "@hasna/machines", command: "machines", expectedVersion: getPackageVersion(), required: true }];
9199
9390
  }
9200
- function shellQuote5(value) {
9391
+ function shellQuote6(value) {
9201
9392
  return `'${value.replace(/'/g, "'\\''")}'`;
9202
9393
  }
9203
9394
  function commandId(value) {
@@ -9248,7 +9439,7 @@ function defaultRunner2(machineId, command) {
9248
9439
  return runMachineCommand(machineId, command);
9249
9440
  }
9250
9441
  function inspectCommand(machineId, spec, runner) {
9251
- const command = shellQuote5(spec.command);
9442
+ const command = shellQuote6(spec.command);
9252
9443
  const versionArgs = spec.versionArgs ?? "--version";
9253
9444
  const script = [
9254
9445
  `cmd=${command}`,
@@ -9277,7 +9468,7 @@ function fieldCommand(field) {
9277
9468
  }
9278
9469
  function inspectWorkspace(machineId, spec, runner) {
9279
9470
  const script = [
9280
- `path=${shellQuote5(spec.path)}`,
9471
+ `path=${shellQuote6(spec.path)}`,
9281
9472
  'printf "exists=%s\\n" "$(test -d "$path" && printf yes || printf no)"',
9282
9473
  'pkg="$path/package.json"',
9283
9474
  'printf "package_json=%s\\n" "$(test -f "$pkg" && printf yes || printf no)"',
@@ -10919,6 +11110,12 @@ function renderCompatibilityResult(result) {
10919
11110
  `);
10920
11111
  }
10921
11112
  function renderWorkspaceResolution(result) {
11113
+ const diagnosticSummary = result.diagnostics.reduce((summary, entry) => {
11114
+ summary[entry.severity] += 1;
11115
+ return summary;
11116
+ }, { ok: 0, warn: 0, fail: 0 });
11117
+ const diagnosticLines = result.diagnostics.filter((entry) => entry.severity !== "ok").map((entry) => `${entry.id}: ${entry.status} ${entry.message}`);
11118
+ const repairLines = result.repair_hints.map((hint) => `${hint.reason}: ${hint.shell_command}`);
10922
11119
  return renderKeyValueTable([
10923
11120
  ["machine", result.machine_id ?? result.requested_machine_id],
10924
11121
  ["ok", String(result.ok)],
@@ -10931,8 +11128,11 @@ function renderWorkspaceResolution(result) {
10931
11128
  ["workspace root", `${result.paths.workspace_root.path ?? "unresolved"} (${result.paths.workspace_root.source})`],
10932
11129
  ["project root", `${result.paths.project_root.path ?? "unresolved"} (${result.paths.project_root.source})`],
10933
11130
  ["open-files root", `${result.paths.open_files_root.path ?? "unresolved"} (${result.paths.open_files_root.source})`],
11131
+ ["diagnostics", `${diagnosticSummary.ok} ok, ${diagnosticSummary.warn} warn, ${diagnosticSummary.fail} fail`],
10934
11132
  ["warnings", result.warnings.join(", ") || "none"]
10935
- ]);
11133
+ ]) + `
11134
+ ` + renderList("issues", diagnosticLines) + `
11135
+ ` + renderList("repair hints", repairLines);
10936
11136
  }
10937
11137
  function renderWorkspaceRepairResult(result) {
10938
11138
  const patchLines = result.patches.map((patch) => {
@@ -11120,6 +11320,22 @@ workspaceCommand.command("resolve").description("Resolve repo and open-files roo
11120
11320
  if (!result.ok && !options.json)
11121
11321
  process.exitCode = 1;
11122
11322
  });
11323
+ workspaceCommand.command("doctor").description("Diagnose repo and open-files workspace mappings and print repair hints").requiredOption("--machine <id>", "Machine identifier").requiredOption("--project <id>", "Canonical project id").option("--repo <name>", "Repository name; defaults to project id").option("--open-files-repo <name>", "Open-files repository name", "open-files").option("--primary-machine <id>", "Primary machine id for the project").option("--workspace-root <path>", "Override the machine workspace root").option("--project-root <path>", "Override the resolved project root").option("--open-files-root <path>", "Override the resolved open-files root").option("--no-tailscale", "Skip tailscale status probing").option("-j, --json", "Print JSON output", false).action((options) => {
11324
+ const result = resolveMachineWorkspace({
11325
+ machineId: options.machine,
11326
+ projectId: options.project,
11327
+ repoName: options.repo,
11328
+ openFilesRepoName: options.openFilesRepo,
11329
+ primaryMachineId: options.primaryMachine,
11330
+ workspaceRoot: options.workspaceRoot,
11331
+ projectRoot: options.projectRoot,
11332
+ openFilesRoot: options.openFilesRoot,
11333
+ includeTailscale: options.tailscale !== false
11334
+ });
11335
+ printJsonOrText(result, renderWorkspaceResolution(result), options.json);
11336
+ if (result.diagnostics.some((entry) => entry.severity === "fail") && !options.json)
11337
+ process.exitCode = 1;
11338
+ });
11123
11339
  workspaceCommand.command("repair").description("Preview or write explicit manifest path mappings for inferred workspace roots").requiredOption("--machine <id>", "Machine identifier").requiredOption("--project <id>", "Canonical project id").option("--repo <name>", "Repository name; defaults to project id").option("--open-files-repo <name>", "Open-files repository name", "open-files").option("--workspace-root <path>", "Override the machine workspace root for resolution").option("--project-root <path>", "Explicit project root to write").option("--open-files-root <path>", "Explicit open-files root to write").option("--apply", "Write the mappings into the manifest", false).option("--allow-untrusted", "Allow writing mappings for machines not marked trusted", false).option("--no-tailscale", "Skip tailscale status probing").option("-j, --json", "Print JSON output", false).action((options) => {
11124
11340
  const result = repairWorkspaceManifestMappings({
11125
11341
  machineId: options.machine,
@@ -1,5 +1,5 @@
1
1
  export { MACHINES_CONSUMER_CAPABILITIES, MACHINES_CONSUMER_CONTRACT, MACHINES_CONSUMER_ENTRYPOINT, MACHINES_CONSUMER_CONTRACT_VERSION, MACHINES_PACKAGE_NAME, discoverMachineTopology, getMachinesConsumerCapabilities, getLocalMachineTopology, resolveMachineRoute, resolveMachineWorkspace, } from "./topology.js";
2
- export type { MachineRouteConfidence, MachineRouteHint, MachineRouteKind, MachineRouteOptions, MachineRouteResolution, MachineTopology, MachineTopologyEntry, MachineTopologyOptions, MachineWorkspaceAuthStatus, MachineWorkspaceOptions, MachineWorkspacePath, MachineWorkspacePathSource, MachineWorkspaceProject, MachineWorkspaceResolution, MachineWorkspaceTrustStatus, MachinesConsumerContract, MachinesConsumerEnvelope, MachinesConsumerCapabilities, MachinesContractPackage, TopologyCommandResult, TopologyCommandRunner, } from "./topology.js";
2
+ export type { MachineRouteConfidence, MachineRouteHint, MachineRouteKind, MachineRouteOptions, MachineRouteResolution, MachineTopology, MachineTopologyEntry, MachineTopologyOptions, MachineWorkspaceAuthStatus, MachineWorkspaceDiagnostic, MachineWorkspaceDiagnosticStatus, MachineWorkspaceOptions, MachineWorkspacePath, MachineWorkspacePathSource, MachineWorkspaceProject, MachineWorkspaceRepairHint, MachineWorkspaceResolution, MachineWorkspaceTrustStatus, MachinesConsumerContract, MachinesConsumerEnvelope, MachinesConsumerCapabilities, MachinesContractPackage, TopologyCommandResult, TopologyCommandRunner, } from "./topology.js";
3
3
  export { checkMachineCompatibility, } from "./compatibility.js";
4
4
  export type { CompatibilityCheck, CompatibilityCommandRunner, CompatibilityCommandSpec, CompatibilityPackageSpec, CompatibilitySource, CompatibilityStatus, CompatibilityWorkspaceSpec, MachineCompatibilityOptions, MachineCompatibilityReport, } from "./compatibility.js";
5
5
  export { resolveMachineCommand, runMachineCommand, } from "./remote.js";
@@ -1 +1 @@
1
- {"version":3,"file":"consumer.d.ts","sourceRoot":"","sources":["../src/consumer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,EAC9B,0BAA0B,EAC1B,4BAA4B,EAC5B,kCAAkC,EAClC,qBAAqB,EACrB,uBAAuB,EACvB,+BAA+B,EAC/B,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,EACf,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,uBAAuB,EACvB,oBAAoB,EACpB,0BAA0B,EAC1B,uBAAuB,EACvB,0BAA0B,EAC1B,2BAA2B,EAC3B,wBAAwB,EACxB,wBAAwB,EACxB,4BAA4B,EAC5B,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,kBAAkB,EAClB,0BAA0B,EAC1B,wBAAwB,EACxB,wBAAwB,EACxB,mBAAmB,EACnB,mBAAmB,EACnB,0BAA0B,EAC1B,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,eAAe,EACf,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,iBAAiB,GAClB,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"consumer.d.ts","sourceRoot":"","sources":["../src/consumer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,EAC9B,0BAA0B,EAC1B,4BAA4B,EAC5B,kCAAkC,EAClC,qBAAqB,EACrB,uBAAuB,EACvB,+BAA+B,EAC/B,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,EACf,oBAAoB,EACpB,sBAAsB,EACtB,0BAA0B,EAC1B,0BAA0B,EAC1B,gCAAgC,EAChC,uBAAuB,EACvB,oBAAoB,EACpB,0BAA0B,EAC1B,uBAAuB,EACvB,0BAA0B,EAC1B,0BAA0B,EAC1B,2BAA2B,EAC3B,wBAAwB,EACxB,wBAAwB,EACxB,4BAA4B,EAC5B,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,kBAAkB,EAClB,0BAA0B,EAC1B,wBAAwB,EACxB,wBAAwB,EACxB,mBAAmB,EACnB,mBAAmB,EACnB,0BAA0B,EAC1B,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,eAAe,EACf,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,iBAAiB,GAClB,MAAM,cAAc,CAAC"}