@vercel/board 0.23.0 → 0.25.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 (74) hide show
  1. package/README.md +14 -19
  2. package/dist/{a2-NMEbIKNZ.mjs → a2-CQ3WcqMv.mjs} +6 -6
  3. package/dist/access.mjs +3 -3
  4. package/dist/{actors-rPnEQLZu.mjs → actors-CDDhhFNY.mjs} +2 -2
  5. package/dist/{auth-5nLsx9qB.mjs → auth-BwWH3Twu.mjs} +1 -1
  6. package/dist/{backend-CWmd4UH-.d.mts → backend-DmXjVnil.d.mts} +7 -3
  7. package/dist/backend-a2.d.mts +2 -2
  8. package/dist/backend-a2.mjs +1 -1
  9. package/dist/{backend-http-DQUsVgML.mjs → backend-http-BJ7AdK0c.mjs} +6 -6
  10. package/dist/{backend-http-BfWQfvqB.d.mts → backend-http-BsP0Xq9e.d.mts} +2 -2
  11. package/dist/{backend-http-D_rjJVmW.mjs → backend-http-Cs-UKpYp.mjs} +3 -3
  12. package/dist/backend-http.d.mts +1 -1
  13. package/dist/backend-http.mjs +1 -1
  14. package/dist/backend-http.node.d.mts +2 -2
  15. package/dist/backend-http.node.mjs +1 -1
  16. package/dist/{backend-vercel-BSuIfOyF.mjs → backend-vercel-B0Q0K0O5.mjs} +3 -3
  17. package/dist/{backend-vercel-CYOqtLPc.d.mts → backend-vercel-CED673bx.d.mts} +2 -2
  18. package/dist/{backend-vercel-BWVAihZC.mjs → backend-vercel-CG2SYa03.mjs} +3 -3
  19. package/dist/backend-vercel.d.mts +1 -1
  20. package/dist/backend-vercel.mjs +1 -1
  21. package/dist/backend-vercel.node.d.mts +1 -1
  22. package/dist/backend-vercel.node.mjs +1 -1
  23. package/dist/{chat-provider-D0k3y8zY.d.mts → chat-provider-6eYkL2ef.d.mts} +1 -1
  24. package/dist/cli-commands.mjs +1 -1
  25. package/dist/cli-embedded.d.mts +57 -6
  26. package/dist/cli-embedded.mjs +40 -20
  27. package/dist/cli.mjs +44 -37
  28. package/dist/{client-ClznIBMg.mjs → client-BY-BCggB.mjs} +13 -7
  29. package/dist/{commands-D_ODblQY.mjs → commands-BtL4jFq8.mjs} +0 -30
  30. package/dist/{conformance-DQ9qVzWP.mjs → conformance-BZ53bxrG.mjs} +1 -1
  31. package/dist/conformance.d.mts +1 -1
  32. package/dist/conformance.mjs +1 -1
  33. package/dist/{engine-kHfSOXnQ.mjs → engine-SeaJ_CIY.mjs} +2 -2
  34. package/dist/{errors-CQ-fwxM3.mjs → errors-Bven0k29.mjs} +7 -3
  35. package/dist/{exports-DAVHon9y.mjs → exports-ByvYtxFT.mjs} +6 -6
  36. package/dist/exports-CPrIkpz3.d.mts +4 -0
  37. package/dist/{index-DsMPCv_K.d.mts → index-k2LfZxl-.d.mts} +3 -3
  38. package/dist/index.d.mts +3 -3
  39. package/dist/{index.default-TBybqjGV.mjs → index.default-DmfhBZZi.mjs} +1 -1
  40. package/dist/index.mjs +6 -6
  41. package/dist/index.node.d.mts +3 -3
  42. package/dist/index.node.mjs +4 -4
  43. package/dist/inspect/app.js +1 -1
  44. package/dist/{main-B5BCEQ0l.mjs → main-BNkywL2P.mjs} +713 -189
  45. package/dist/{middleware-DUjyQP_a.mjs → middleware-B0J7QBq7.mjs} +1 -1
  46. package/dist/{node-BeKPcokJ.mjs → node-C51_xzCb.mjs} +29 -52
  47. package/dist/{provider-D11Dfda0.d.mts → provider-C_sj4-GL.d.mts} +10 -1
  48. package/dist/{serve-BC218-NQ.mjs → serve-DYQ64Q5R.mjs} +6 -5
  49. package/dist/{server-BxUruJxv.mjs → server-BgK1sgj7.mjs} +5 -5
  50. package/dist/{serving-B307gppu.mjs → serving-rXQcEgTO.mjs} +1 -1
  51. package/dist/sync-github.d.mts +2 -2
  52. package/dist/sync-kapso.d.mts +2 -2
  53. package/dist/sync-linear.d.mts +2 -2
  54. package/dist/sync-slack.d.mts +2 -2
  55. package/dist/sync.chat.d.mts +1 -1
  56. package/dist/sync.d.mts +1 -1
  57. package/dist/{tokens-DUXaXwOj.mjs → tokens-U-XRlEfq.mjs} +2 -2
  58. package/dist/{watchers-hash-DYu8WWXj.mjs → watchers-hash-C4CJg7K1.mjs} +3 -3
  59. package/docs/01-board/01-mounting.md +4 -5
  60. package/docs/01-board/03-identity.md +16 -7
  61. package/docs/01-board/04-messages.md +2 -2
  62. package/docs/01-board/05-reading.md +16 -8
  63. package/docs/01-board/07-schedules.md +2 -2
  64. package/docs/01-board/09-access.md +5 -4
  65. package/docs/01-quickstart.md +8 -8
  66. package/docs/03-guides/01-coding-agents.md +21 -22
  67. package/docs/03-guides/02-inspector.md +1 -1
  68. package/docs/03-guides/03-ci.md +2 -2
  69. package/docs/04-reference/01-cli.md +95 -58
  70. package/docs/04-reference/02-board.md +4 -5
  71. package/docs/04-reference/03-http.md +4 -0
  72. package/docs/index.md +2 -3
  73. package/package.json +1 -1
  74. package/dist/exports-ggfE9jNv.d.mts +0 -4
package/dist/cli.mjs CHANGED
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { t as ATTACHMENT_BYTES_MAX } from "./files-SniSmeEr.mjs";
3
3
  import "./schemas-Be08nyfW.mjs";
4
- import { a as option } from "./commands-D_ODblQY.mjs";
5
- import { o as projectDir, s as projectUrl } from "./node-BeKPcokJ.mjs";
6
- import { i as who, n as main } from "./main-B5BCEQ0l.mjs";
4
+ import { a as option } from "./commands-BtL4jFq8.mjs";
5
+ import { a as projectDir } from "./node-C51_xzCb.mjs";
6
+ import { r as main, u as who } from "./main-BNkywL2P.mjs";
7
7
  import { randomBytes, timingSafeEqual } from "node:crypto";
8
- import { readFile } from "node:fs/promises";
8
+ import { appendFile, readFile } from "node:fs/promises";
9
9
  import { join } from "node:path";
10
10
  import { createServer } from "node:http";
11
11
  //#region src/inspect/style.ts
@@ -605,36 +605,46 @@ const stopped = () => new Promise((resolve) => {
605
605
  process.once("SIGINT", done);
606
606
  process.once("SIGTERM", done);
607
607
  });
608
+ const inspect = {
609
+ spec: {
610
+ name: "inspect",
611
+ description: "the board in your browser, as you: read, post, react (local only)",
612
+ arguments: [],
613
+ options: [option("port", "the port to listen on (default: a free one)"), option("no-open")],
614
+ examples: [{
615
+ name: "open the board in your browser",
616
+ value: "inspect"
617
+ }]
618
+ },
619
+ async run(_args, { flags, out, portFlag, client, openBrowser }) {
620
+ const port = portFlag();
621
+ const inspector = await startInspector({
622
+ client: client(),
623
+ ...port !== void 0 ? { port } : {}
624
+ });
625
+ out(`inspecting ${inspector.board} as ${who(inspector.me)} at ${inspector.url} (Ctrl-C to stop)`);
626
+ if (!flags["no-open"]) openBrowser(inspector.url);
627
+ await stopped();
628
+ await inspector.close();
629
+ return 0;
630
+ }
631
+ };
632
+ /** Keeps the local board's log (`.board/`) out of the project's Git. */
633
+ async function ignoreLog(root) {
634
+ const path = join(root, ".gitignore");
635
+ const ignore = await readFile(path, "utf8").catch((error) => {
636
+ if (error.code === "ENOENT") return "";
637
+ throw error;
638
+ });
639
+ if (!ignore.split(/\r?\n/).some((line) => /^\/?\.board\/?$/.test(line))) await appendFile(path, `${ignore && !ignore.endsWith("\n") ? "\n" : ""}.board/\n`);
640
+ }
608
641
  /** The commands only the standalone `board` has, in the order its help lists them. */
609
642
  const local = {
610
- inspect: {
611
- spec: {
612
- name: "inspect",
613
- description: "the board in your browser, as you: read, post, react (local only)",
614
- arguments: [],
615
- options: [option("port", "the port to listen on (default: a free one)"), option("no-open")],
616
- examples: [{
617
- name: "open the board in your browser",
618
- value: "inspect"
619
- }]
620
- },
621
- async run(_args, { flags, out, portFlag, client, openBrowser }) {
622
- const port = portFlag();
623
- const inspector = await startInspector({
624
- client: client(),
625
- ...port !== void 0 ? { port } : {}
626
- });
627
- out(`inspecting ${inspector.board} as ${who(inspector.me)} at ${inspector.url} (Ctrl-C to stop)`);
628
- if (!flags["no-open"]) openBrowser(inspector.url);
629
- await stopped();
630
- await inspector.close();
631
- return 0;
632
- }
633
- },
643
+ inspect,
634
644
  serve: {
635
645
  spec: {
636
646
  name: "serve",
637
- description: "run a board on this machine (127.0.0.1:4100, no sync), link this project to it, and open the inspector; its log lives in .board/, and you're local:user:<your OS user> (or --handle)",
647
+ description: "run a board on this machine (127.0.0.1:4100, no sync) and open the inspector: other commands reach it with --url or BOARD_URL. Its log lives in .board/, and you're local:user:<your OS user> (or --handle)",
638
648
  arguments: [],
639
649
  options: [
640
650
  option("port", "the port to listen on (default: 4100)"),
@@ -647,11 +657,11 @@ const local = {
647
657
  value: "serve"
648
658
  }]
649
659
  },
650
- async run(args, { flags, out, usage, portFlag, connection, openBrowser, saveLink, linkedByServe }) {
651
- if (args.length > 0) throw usage("usage: board serve [--port N] [--dir <dir>] [--no-inspect] [--no-open]");
660
+ async run(args, { flags, out, usage, portFlag, connection, openBrowser }) {
661
+ if (args.length > 0) throw usage("serve takes no arguments: pass its port with --port, and its directory with --dir.");
652
662
  const port = portFlag();
653
663
  const root = projectDir();
654
- const { localHandle, serveLocal } = await import("./serve-BC218-NQ.mjs");
664
+ const { localHandle, serveLocal } = await import("./serve-DYQ64Q5R.mjs");
655
665
  const handle = flags.handle ?? process.env.BOARD_HANDLE;
656
666
  const local = await serveLocal({
657
667
  dir: flags.dir ?? join(root, ".board"),
@@ -660,12 +670,9 @@ const local = {
660
670
  });
661
671
  let inspector = null;
662
672
  try {
663
- const linked = projectUrl();
664
- if (linked === void 0 || linked === local.url || linkedByServe(root)) {
665
- await saveLink(root, local.url, { serve: true });
666
- if (linked !== local.url) out(`linked ${root} to ${local.url}`);
667
- } else out(`${root} stays linked to ${linked}; reach this board with BOARD_URL=${local.url}`);
673
+ if (!flags.dir) await ignoreLog(root);
668
674
  out(`serving a local board at ${local.url} as ${local.principal}, its log in ${local.dir} (Ctrl-C to stop)`);
675
+ out(`reach it with --url ${local.url}, or BOARD_URL=${local.url}`);
669
676
  if (!flags["no-inspect"]) {
670
677
  const { board } = connection(local.url, {
671
678
  token: local.token,
@@ -39,14 +39,20 @@ async function* parseSse(body, signal) {
39
39
  }
40
40
  //#endregion
41
41
  //#region src/client/client.ts
42
+ /**
43
+ * What went wrong: `message` says what and why, `code` is what to branch on, and `hint`, when the
44
+ * handle knows one, says what fixes it (`Set VERCEL_AUTOMATION_BYPASS_SECRET…`).
45
+ */
42
46
  var BoardError = class extends Error {
43
47
  code;
44
48
  status;
45
- constructor(code, message, status) {
49
+ hint;
50
+ constructor(code, message, status, options = {}) {
46
51
  super(message);
47
52
  this.name = "BoardError";
48
53
  this.code = code;
49
54
  this.status = status;
55
+ this.hint = options.hint;
50
56
  }
51
57
  };
52
58
  const resolve = async (value) => typeof value === "function" ? await value() : value;
@@ -76,7 +82,7 @@ const UNITS = {
76
82
  function duration(value) {
77
83
  if (typeof value === "number") return value;
78
84
  const match = value.trim().match(/^(\d+(?:\.\d+)?)(ms|s|m|h|d)?$/);
79
- if (!match) throw new BoardError("invalid_duration", `invalid duration: ${value}`, 0);
85
+ if (!match) throw new BoardError("invalid_duration", `${value} isn't a duration like 30s, 10m, or 1h.`, 0);
80
86
  return Number(match[1]) * UNITS[match[2] ?? "ms"];
81
87
  }
82
88
  /** A ref as a path segment: opaque, so it's encoded as it is. */
@@ -214,13 +220,13 @@ function createBoardClient(options) {
214
220
  const type = input.type || (input.data instanceof Blob ? input.data.type : "") || typeOf(input.name);
215
221
  const size = input.data instanceof Blob ? input.data.size : input.data.byteLength;
216
222
  if (size > 4194304) {
217
- if (size > 104857600) throw new BoardError("too_large", `attachments are at most ${DIRECT_UPLOAD_BYTES_MAX / 1024 / 1024} MB`, 413);
223
+ if (size > 104857600) throw new BoardError("too_large", `Attachments are at most ${DIRECT_UPLOAD_BYTES_MAX / 1024 / 1024} MB.`, 413);
218
224
  const ticket = await call("POST", "/attachments/uploads", { body: {
219
225
  name: input.name,
220
226
  type,
221
227
  size
222
228
  } }).catch((error) => {
223
- if (error instanceof BoardError && error.status === 404 && error.code === "not_found") throw new BoardError("too_large", `this board takes files of at most ${ATTACHMENT_BYTES_MAX / 1024 / 1024} MB`, 413);
229
+ if (error instanceof BoardError && error.status === 404 && error.code === "not_found") throw new BoardError("too_large", `This board takes files of at most ${ATTACHMENT_BYTES_MAX / 1024 / 1024} MB.`, 413);
224
230
  throw error;
225
231
  });
226
232
  const put = await storeFetch(ticket.url, {
@@ -228,7 +234,7 @@ function createBoardClient(options) {
228
234
  headers: ticket.headers,
229
235
  body: input.data
230
236
  });
231
- if (!put.ok) throw new BoardError("upload_failed", `the blob store refused the file: ${put.status} ${(await put.text().catch(() => "")).slice(0, 300) || put.statusText}`, put.status);
237
+ if (!put.ok) throw new BoardError("upload_failed", `The blob store refused the file: ${put.status} ${(await put.text().catch(() => "")).slice(0, 300) || put.statusText}`, put.status);
232
238
  return (await call("POST", `/attachments/uploads/${encodeURIComponent(ticket.id)}`, { body: {} })).attachment;
233
239
  }
234
240
  const response = await doFetch(`${base}/attachments`, {
@@ -382,9 +388,9 @@ function createBoardClient(options) {
382
388
  async function toError(response) {
383
389
  try {
384
390
  const body = await response.json();
385
- if (body.error?.message) return new BoardError(body.error.code ?? "error", body.error.message, response.status);
391
+ if (body.error?.message) return new BoardError(body.error.code ?? "error", body.error.message, response.status, typeof body.error.hint === "string" ? { hint: body.error.hint } : {});
386
392
  } catch {}
387
- return new BoardError("http_error", `${response.status} ${response.statusText}`, response.status);
393
+ return new BoardError("http_error", `The board answered ${`${response.status} ${response.statusText}`.trim()}.`, response.status);
388
394
  }
389
395
  //#endregion
390
396
  export { createBoardClient as n, duration as r, BoardError as t };
@@ -264,36 +264,6 @@ const commands = [
264
264
  value: "whoami"
265
265
  }]
266
266
  },
267
- {
268
- group: "you",
269
- name: "link",
270
- description: "link this project to a board (.board/config.json)",
271
- arguments: [{
272
- name: "url",
273
- required: true,
274
- description: "the board's URL"
275
- }],
276
- options: [],
277
- examples: [{
278
- name: "link this project to a team's board",
279
- value: "link https://www.example.com/api/board"
280
- }]
281
- },
282
- {
283
- group: "you",
284
- name: "use",
285
- description: "save the default board",
286
- arguments: [{
287
- name: "url",
288
- required: true,
289
- description: "the board's URL"
290
- }],
291
- options: [],
292
- examples: [{
293
- name: "use a board everywhere nothing else is linked",
294
- value: "use https://www.example.com/api/board"
295
- }]
296
- },
297
267
  {
298
268
  group: "the board",
299
269
  name: "channels",
@@ -1,4 +1,4 @@
1
- import { t as BoardError } from "./client-ClznIBMg.mjs";
1
+ import { t as BoardError } from "./client-BY-BCggB.mjs";
2
2
  //#region src/conformance/index.ts
3
3
  var Mismatch = class extends Error {};
4
4
  const show = (value) => JSON.stringify(value) ?? String(value);
@@ -1,4 +1,4 @@
1
- import { d as Board } from "./backend-CWmd4UH-.mjs";
1
+ import { d as Board } from "./backend-DmXjVnil.mjs";
2
2
  //#region src/conformance/index.d.ts
3
3
  /**
4
4
  * Checks that a board speaks the protocol, through a handle on it (`conformance(board())`), as
@@ -1,2 +1,2 @@
1
- import { t as conformance } from "./conformance-DQ9qVzWP.mjs";
1
+ import { t as conformance } from "./conformance-BZ53bxrG.mjs";
2
2
  export { conformance };
@@ -3,9 +3,9 @@ import { C as toStorable, c as ChannelPath, m as MESSAGE_TEXT_MAX } from "./sche
3
3
  import { c as externalMessageKey, l as isThreadTarget, s as channelOf } from "./external-BV_cUncs.mjs";
4
4
  import { t as canonicalEmoji } from "./emoji-CTLpvH-A.mjs";
5
5
  import { n as derivedId } from "./ids-C6AYo1bu.mjs";
6
- import { r as badRequest, s as notFound, t as HttpError } from "./errors-CQ-fwxM3.mjs";
6
+ import { r as badRequest, s as notFound, t as HttpError } from "./errors-Bven0k29.mjs";
7
7
  import { n as replaceMentions } from "./mentions-CB6ShY4R.mjs";
8
- import { t as DroppedError } from "./middleware-DUjyQP_a.mjs";
8
+ import { t as DroppedError } from "./middleware-B0J7QBq7.mjs";
9
9
  import { n as waitUntil, t as afterRetry } from "./attempts-CLG840Oj.mjs";
10
10
  import { a as channelMissing, i as UnreadableError, n as ResolvedTarget, o as routesFor, t as ReceivedEvent } from "./provider-poIkXapd.mjs";
11
11
  import { a as immutable, n as SyncOverrides } from "./events-CewD4kw7.mjs";
@@ -3,10 +3,13 @@ import { ZodError } from "zod";
3
3
  var HttpError = class extends Error {
4
4
  status;
5
5
  code;
6
- constructor(status, code, message) {
6
+ /** What fixes it, when the handle that raised it knows (`BoardError`'s `hint`). */
7
+ hint;
8
+ constructor(status, code, message, options = {}) {
7
9
  super(message);
8
10
  this.status = status;
9
11
  this.code = code;
12
+ this.hint = options.hint;
10
13
  }
11
14
  };
12
15
  /** A request a host's own verifier rejected with `response`, which the board answers with as it is. */
@@ -41,12 +44,13 @@ function reported(issue) {
41
44
  path: [...issue.path, ...first.path]
42
45
  }) : issue;
43
46
  }
44
- /** Every failure becomes `{ error: { code, message } }` with a matching status. */
47
+ /** Every failure becomes `{ error: { code, message, hint? } }` with a matching status. */
45
48
  function toErrorResponse(error) {
46
49
  if (error instanceof RejectedError) return error.response;
47
50
  if (error instanceof HttpError) return json({ error: {
48
51
  code: error.code,
49
- message: error.message
52
+ message: error.message,
53
+ ...error.hint !== void 0 ? { hint: error.hint } : {}
50
54
  } }, error.status);
51
55
  if (error instanceof ZodError) {
52
56
  const issue = error.issues[0] && reported(error.issues[0]);
@@ -1,12 +1,12 @@
1
1
  import { t as ATTACHMENT_BYTES_MAX } from "./files-SniSmeEr.mjs";
2
2
  import "./schemas-Be08nyfW.mjs";
3
- import { A as SchedulesQuery, B as SyncReceiptBody, C as MatchesQuery, D as Ref, E as ReactBody, F as SyncBody, G as UploadStartBody, H as SyncUnlinkBody, I as SyncCodeBody, L as SyncCopiesQuery, M as SourceJoinBody, N as SourceReadQuery, O as RegisterBody, P as SyncAccountBody, R as SyncFindQuery, S as LinkedQuery, T as PostBody, U as ThreadsQuery, V as SyncRootsQuery, W as TypingBody, _ as InboxAckBody, a as METHODS, b as InboxQuery, c as queryObject, d as VERSION, f as SYNC, g as IdentityUnlinkBody, h as EventsQuery, j as SignInQuery, k as ScheduleBody, l as readCapped, m as EditBody, o as createRouter, p as AckBody, s as openapi, u as readJson, v as InboxNextQuery, w as MessagesQuery, x as LabelBody, y as InboxPushBody, z as SyncImportBody } from "./watchers-hash-DYu8WWXj.mjs";
4
- import { n as createBoardClient, t as BoardError } from "./client-ClznIBMg.mjs";
3
+ import { A as SchedulesQuery, B as SyncReceiptBody, C as MatchesQuery, D as Ref, E as ReactBody, F as SyncBody, G as UploadStartBody, H as SyncUnlinkBody, I as SyncCodeBody, L as SyncCopiesQuery, M as SourceJoinBody, N as SourceReadQuery, O as RegisterBody, P as SyncAccountBody, R as SyncFindQuery, S as LinkedQuery, T as PostBody, U as ThreadsQuery, V as SyncRootsQuery, W as TypingBody, _ as InboxAckBody, a as METHODS, b as InboxQuery, c as queryObject, d as VERSION, f as SYNC, g as IdentityUnlinkBody, h as EventsQuery, j as SignInQuery, k as ScheduleBody, l as readCapped, m as EditBody, o as createRouter, p as AckBody, s as openapi, u as readJson, v as InboxNextQuery, w as MessagesQuery, x as LabelBody, y as InboxPushBody, z as SyncImportBody } from "./watchers-hash-C4CJg7K1.mjs";
4
+ import { n as createBoardClient, t as BoardError } from "./client-BY-BCggB.mjs";
5
5
  import { n as derivedId } from "./ids-C6AYo1bu.mjs";
6
- import { a as forbidden, c as toErrorResponse, l as unauthorized, n as RejectedError, o as json, r as badRequest, s as notFound, t as HttpError } from "./errors-CQ-fwxM3.mjs";
7
- import { d as issuersOf, g as verifiesTokens, l as hostPrincipal, o as createAuthority, s as fromTokens } from "./auth-5nLsx9qB.mjs";
8
- import { i as resolveActor, r as claimsOf, t as KNOWN_AGENTS } from "./actors-rPnEQLZu.mjs";
9
- import { r as runMiddleware, t as DroppedError } from "./middleware-DUjyQP_a.mjs";
6
+ import { a as forbidden, c as toErrorResponse, l as unauthorized, n as RejectedError, o as json, r as badRequest, s as notFound, t as HttpError } from "./errors-Bven0k29.mjs";
7
+ import { d as issuersOf, g as verifiesTokens, l as hostPrincipal, o as createAuthority, s as fromTokens } from "./auth-BwWH3Twu.mjs";
8
+ import { i as resolveActor, r as claimsOf, t as KNOWN_AGENTS } from "./actors-CDDhhFNY.mjs";
9
+ import { r as runMiddleware, t as DroppedError } from "./middleware-B0J7QBq7.mjs";
10
10
  import { n as syncTarget, r as withEmailMentions, t as mentionsEmails } from "./targets-C-wdR5wP.mjs";
11
11
  //#region src/server/policy.ts
12
12
  /**
@@ -0,0 +1,4 @@
1
+ import "./auth-CU56Q2Xh.mjs";
2
+ import "./schemas-CWxs3ECJ.mjs";
3
+ import "./provider-C_sj4-GL.mjs";
4
+ import "./backend-DmXjVnil.mjs";
@@ -1,10 +1,10 @@
1
- import { d as Board, f as BoardOptions } from "./backend-CWmd4UH-.mjs";
2
- import "./exports-ggfE9jNv.mjs";
1
+ import { d as Board, f as BoardOptions } from "./backend-DmXjVnil.mjs";
2
+ import "./exports-CPrIkpz3.mjs";
3
3
  //#region src/server/index.d.ts
4
4
  /**
5
5
  * The handle on a board. With a `backend`, the board lives there: `a2()` keeps it in this
6
6
  * deployment, `http(url)` uses another. Without one, it's `http()` to the board the environment
7
- * points at: `BOARD_URL`, then the repo's link (`vb link`, `vb serve`), then `vb use`'s.
7
+ * points at: `BOARD_URL`.
8
8
  */
9
9
  declare function board(options?: BoardOptions): Board;
10
10
  //#endregion
package/dist/index.d.mts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { a as CallerRequest, o as Claims } from "./auth-CU56Q2Xh.mjs";
2
2
  import { i as Attachment } from "./schemas-CWxs3ECJ.mjs";
3
- import { $ as Discovery, $t as SyncCodeView, At as Ref, B as ReplyOptions, Bt as SchedulesQuery, Ct as MessagesQueryInput, Dt as PostInput, Et as PostBody, Ft as RouteName, G as Written, Gt as SourceJoinBody, H as ScheduleTiming, Ht as SchedulesQueryOutput, I as BoardError, It as ScheduleBody, J as ActorView, Jt as SourceReadQuery, K as duration, Kt as SourceMessage, L as Filters, Lt as ScheduleBodyOutput, Mt as RegisterInput, Nt as RegistrationView, Ot as REGISTERED_WATCHERS_MAX, Pt as ResolvedSyncTarget, Q as DeleteBody, Qt as SyncCodeBody, R as PostOptions, Rt as ScheduleInput, Sn as routes, St as MessagesQuery, Tt as PersonView, U as UploadInput, Ut as SignInQuery, V as ScheduleOptions, Vt as SchedulesQueryInput, W as WaitOptions, Wt as SourceJoin, X as BoardEventView, Xt as SyncAccountInput, Y as ApiError, Yt as SyncAccountBody, Z as ChannelView, Zt as SyncBody, _n as ThreadsQueryInput, _t as MatchView, an as SyncImportBody, at as IdentityUnlinkBody, bn as UploadStartBody, bt as MessageView, cn as SyncReceiptInput, ct as InboxEntry, dn as SyncUnlinkBody, dt as InboxPushBody, en as SyncCopiesQuery, et as EditBody, fn as SyncedView, ft as InboxQuery, gn as ThreadsQuery, gt as LinkedQuery, hn as ThreadsPage, ht as LinkedAccount, in as SyncFindView, it as FiltersInput, jt as RegisterBody, kt as ReactBody, ln as SyncRootsQuery, lt as InboxItem, mn as ThreadView, mt as LinkView, nn as SyncFindInput, nt as EventsQuery, on as SyncImportInput, ot as IdentityView, pn as ThreadSummaryView, pt as LabelBody, q as AckBody, qt as SourceRead, rn as SyncFindQuery, rt as EventsQueryInput, sn as SyncReceiptBody, st as InboxAckBody, tn as SyncCopiesView, tt as EventsPage, un as SyncThreadView, ut as InboxNextQuery, vn as TypingBody, vt as MatchesQuery, wt as ParsedFilters, xn as UploadTicket, xt as MessagesPage, yn as TypingResult, yt as Me, z as ProfileOption, zt as ScheduleView } from "./provider-D11Dfda0.mjs";
4
- import { C as Protocol, S as Method, _ as MiddlewareContext, a as Identity, b as WriteSource, c as SelfCaller, d as Board, f as BoardOptions, g as Middleware, h as DroppedError, i as Caller, l as Subscription, m as WatcherContext, n as BackendRoute, o as InboxDelivery, p as Watcher, r as BoardBinding, s as ProtocolMethods, t as Backend, u as VerifiedCaller, v as Write, x as HttpError, y as WritePatch } from "./backend-CWmd4UH-.mjs";
5
- import "./exports-ggfE9jNv.mjs";
3
+ import { $ as Discovery, $t as SyncCodeView, At as Ref, B as ReplyOptions, Bt as SchedulesQuery, Ct as MessagesQueryInput, Dt as PostInput, Et as PostBody, Ft as RouteName, G as Written, Gt as SourceJoinBody, H as ScheduleTiming, Ht as SchedulesQueryOutput, I as BoardError, It as ScheduleBody, J as ActorView, Jt as SourceReadQuery, K as duration, Kt as SourceMessage, L as Filters, Lt as ScheduleBodyOutput, Mt as RegisterInput, Nt as RegistrationView, Ot as REGISTERED_WATCHERS_MAX, Pt as ResolvedSyncTarget, Q as DeleteBody, Qt as SyncCodeBody, R as PostOptions, Rt as ScheduleInput, Sn as routes, St as MessagesQuery, Tt as PersonView, U as UploadInput, Ut as SignInQuery, V as ScheduleOptions, Vt as SchedulesQueryInput, W as WaitOptions, Wt as SourceJoin, X as BoardEventView, Xt as SyncAccountInput, Y as ApiError, Yt as SyncAccountBody, Z as ChannelView, Zt as SyncBody, _n as ThreadsQueryInput, _t as MatchView, an as SyncImportBody, at as IdentityUnlinkBody, bn as UploadStartBody, bt as MessageView, cn as SyncReceiptInput, ct as InboxEntry, dn as SyncUnlinkBody, dt as InboxPushBody, en as SyncCopiesQuery, et as EditBody, fn as SyncedView, ft as InboxQuery, gn as ThreadsQuery, gt as LinkedQuery, hn as ThreadsPage, ht as LinkedAccount, in as SyncFindView, it as FiltersInput, jt as RegisterBody, kt as ReactBody, ln as SyncRootsQuery, lt as InboxItem, mn as ThreadView, mt as LinkView, nn as SyncFindInput, nt as EventsQuery, on as SyncImportInput, ot as IdentityView, pn as ThreadSummaryView, pt as LabelBody, q as AckBody, qt as SourceRead, rn as SyncFindQuery, rt as EventsQueryInput, sn as SyncReceiptBody, st as InboxAckBody, tn as SyncCopiesView, tt as EventsPage, un as SyncThreadView, ut as InboxNextQuery, vn as TypingBody, vt as MatchesQuery, wt as ParsedFilters, xn as UploadTicket, xt as MessagesPage, yn as TypingResult, yt as Me, z as ProfileOption, zt as ScheduleView } from "./provider-C_sj4-GL.mjs";
4
+ import { C as Protocol, S as Method, _ as MiddlewareContext, a as Identity, b as WriteSource, c as SelfCaller, d as Board, f as BoardOptions, g as Middleware, h as DroppedError, i as Caller, l as Subscription, m as WatcherContext, n as BackendRoute, o as InboxDelivery, p as Watcher, r as BoardBinding, s as ProtocolMethods, t as Backend, u as VerifiedCaller, v as Write, x as HttpError, y as WritePatch } from "./backend-DmXjVnil.mjs";
5
+ import "./exports-CPrIkpz3.mjs";
6
6
  //#region src/server/index.default.d.ts
7
7
  /**
8
8
  * The handle on a board. Outside Node there's no environment to find one in, so pass its
@@ -1,4 +1,4 @@
1
- import { r as createHttp } from "./backend-http-DQUsVgML.mjs";
1
+ import { r as createHttp } from "./backend-http-BJ7AdK0c.mjs";
2
2
  //#region src/backend-http/index.default.ts
3
3
  /**
4
4
  * The board at `url`, which keeps the log. Outside Node there's no environment to find it or a
package/dist/index.mjs CHANGED
@@ -1,8 +1,8 @@
1
- import { r as duration, t as BoardError } from "./client-ClznIBMg.mjs";
2
- import { t as HttpError } from "./errors-CQ-fwxM3.mjs";
3
- import { t as http } from "./index.default-TBybqjGV.mjs";
4
- import { t as createBoard } from "./exports-DAVHon9y.mjs";
5
- import { t as DroppedError } from "./middleware-DUjyQP_a.mjs";
1
+ import { r as duration, t as BoardError } from "./client-BY-BCggB.mjs";
2
+ import { t as HttpError } from "./errors-Bven0k29.mjs";
3
+ import { t as http } from "./index.default-DmfhBZZi.mjs";
4
+ import { t as createBoard } from "./exports-ByvYtxFT.mjs";
5
+ import { t as DroppedError } from "./middleware-B0J7QBq7.mjs";
6
6
  //#region src/server/index.default.ts
7
7
  /**
8
8
  * The handle on a board. Outside Node there's no environment to find one in, so pass its
@@ -11,7 +11,7 @@ import { t as DroppedError } from "./middleware-DUjyQP_a.mjs";
11
11
  function board(options = {}) {
12
12
  return createBoard(options, {
13
13
  http: () => http(),
14
- sync: () => import("./engine-kHfSOXnQ.mjs"),
14
+ sync: () => import("./engine-SeaJ_CIY.mjs"),
15
15
  serving: null
16
16
  });
17
17
  }
@@ -1,6 +1,6 @@
1
1
  import { a as CallerRequest, o as Claims } from "./auth-CU56Q2Xh.mjs";
2
2
  import { i as Attachment } from "./schemas-CWxs3ECJ.mjs";
3
- import { $ as Discovery, $t as SyncCodeView, At as Ref, B as ReplyOptions, Bt as SchedulesQuery, Ct as MessagesQueryInput, Dt as PostInput, Et as PostBody, Ft as RouteName, G as Written, Gt as SourceJoinBody, H as ScheduleTiming, Ht as SchedulesQueryOutput, I as BoardError, It as ScheduleBody, J as ActorView, Jt as SourceReadQuery, K as duration, Kt as SourceMessage, L as Filters, Lt as ScheduleBodyOutput, Mt as RegisterInput, Nt as RegistrationView, Ot as REGISTERED_WATCHERS_MAX, Pt as ResolvedSyncTarget, Q as DeleteBody, Qt as SyncCodeBody, R as PostOptions, Rt as ScheduleInput, Sn as routes, St as MessagesQuery, Tt as PersonView, U as UploadInput, Ut as SignInQuery, V as ScheduleOptions, Vt as SchedulesQueryInput, W as WaitOptions, Wt as SourceJoin, X as BoardEventView, Xt as SyncAccountInput, Y as ApiError, Yt as SyncAccountBody, Z as ChannelView, Zt as SyncBody, _n as ThreadsQueryInput, _t as MatchView, an as SyncImportBody, at as IdentityUnlinkBody, bn as UploadStartBody, bt as MessageView, cn as SyncReceiptInput, ct as InboxEntry, dn as SyncUnlinkBody, dt as InboxPushBody, en as SyncCopiesQuery, et as EditBody, fn as SyncedView, ft as InboxQuery, gn as ThreadsQuery, gt as LinkedQuery, hn as ThreadsPage, ht as LinkedAccount, in as SyncFindView, it as FiltersInput, jt as RegisterBody, kt as ReactBody, ln as SyncRootsQuery, lt as InboxItem, mn as ThreadView, mt as LinkView, nn as SyncFindInput, nt as EventsQuery, on as SyncImportInput, ot as IdentityView, pn as ThreadSummaryView, pt as LabelBody, q as AckBody, qt as SourceRead, rn as SyncFindQuery, rt as EventsQueryInput, sn as SyncReceiptBody, st as InboxAckBody, tn as SyncCopiesView, tt as EventsPage, un as SyncThreadView, ut as InboxNextQuery, vn as TypingBody, vt as MatchesQuery, wt as ParsedFilters, xn as UploadTicket, xt as MessagesPage, yn as TypingResult, yt as Me, z as ProfileOption, zt as ScheduleView } from "./provider-D11Dfda0.mjs";
4
- import { C as Protocol, S as Method, _ as MiddlewareContext, a as Identity, b as WriteSource, c as SelfCaller, d as Board, f as BoardOptions, g as Middleware, h as DroppedError, i as Caller, l as Subscription, m as WatcherContext, n as BackendRoute, o as InboxDelivery, p as Watcher, r as BoardBinding, s as ProtocolMethods, t as Backend, u as VerifiedCaller, v as Write, x as HttpError, y as WritePatch } from "./backend-CWmd4UH-.mjs";
5
- import { t as board } from "./index-DsMPCv_K.mjs";
3
+ import { $ as Discovery, $t as SyncCodeView, At as Ref, B as ReplyOptions, Bt as SchedulesQuery, Ct as MessagesQueryInput, Dt as PostInput, Et as PostBody, Ft as RouteName, G as Written, Gt as SourceJoinBody, H as ScheduleTiming, Ht as SchedulesQueryOutput, I as BoardError, It as ScheduleBody, J as ActorView, Jt as SourceReadQuery, K as duration, Kt as SourceMessage, L as Filters, Lt as ScheduleBodyOutput, Mt as RegisterInput, Nt as RegistrationView, Ot as REGISTERED_WATCHERS_MAX, Pt as ResolvedSyncTarget, Q as DeleteBody, Qt as SyncCodeBody, R as PostOptions, Rt as ScheduleInput, Sn as routes, St as MessagesQuery, Tt as PersonView, U as UploadInput, Ut as SignInQuery, V as ScheduleOptions, Vt as SchedulesQueryInput, W as WaitOptions, Wt as SourceJoin, X as BoardEventView, Xt as SyncAccountInput, Y as ApiError, Yt as SyncAccountBody, Z as ChannelView, Zt as SyncBody, _n as ThreadsQueryInput, _t as MatchView, an as SyncImportBody, at as IdentityUnlinkBody, bn as UploadStartBody, bt as MessageView, cn as SyncReceiptInput, ct as InboxEntry, dn as SyncUnlinkBody, dt as InboxPushBody, en as SyncCopiesQuery, et as EditBody, fn as SyncedView, ft as InboxQuery, gn as ThreadsQuery, gt as LinkedQuery, hn as ThreadsPage, ht as LinkedAccount, in as SyncFindView, it as FiltersInput, jt as RegisterBody, kt as ReactBody, ln as SyncRootsQuery, lt as InboxItem, mn as ThreadView, mt as LinkView, nn as SyncFindInput, nt as EventsQuery, on as SyncImportInput, ot as IdentityView, pn as ThreadSummaryView, pt as LabelBody, q as AckBody, qt as SourceRead, rn as SyncFindQuery, rt as EventsQueryInput, sn as SyncReceiptBody, st as InboxAckBody, tn as SyncCopiesView, tt as EventsPage, un as SyncThreadView, ut as InboxNextQuery, vn as TypingBody, vt as MatchesQuery, wt as ParsedFilters, xn as UploadTicket, xt as MessagesPage, yn as TypingResult, yt as Me, z as ProfileOption, zt as ScheduleView } from "./provider-C_sj4-GL.mjs";
4
+ import { C as Protocol, S as Method, _ as MiddlewareContext, a as Identity, b as WriteSource, c as SelfCaller, d as Board, f as BoardOptions, g as Middleware, h as DroppedError, i as Caller, l as Subscription, m as WatcherContext, n as BackendRoute, o as InboxDelivery, p as Watcher, r as BoardBinding, s as ProtocolMethods, t as Backend, u as VerifiedCaller, v as Write, x as HttpError, y as WritePatch } from "./backend-DmXjVnil.mjs";
5
+ import { t as board } from "./index-k2LfZxl-.mjs";
6
6
  export { type AckBody, type ActorView, type ApiError, type Attachment, type Backend, type BackendRoute, type Board, type BoardBinding, BoardError, type BoardEventView, type BoardOptions, type Caller, type CallerRequest, type ChannelView, type Claims, type DeleteBody, type Discovery, DroppedError, type EditBody, type EventsPage, type EventsQuery, type EventsQueryInput, type Filters, type FiltersInput, HttpError, type Identity, type IdentityUnlinkBody, type IdentityView, type InboxAckBody, type InboxDelivery, type InboxEntry, type InboxItem, type InboxNextQuery, type InboxPushBody, type InboxQuery, type LabelBody, type LinkView, type LinkedAccount, type LinkedQuery, type MatchView, type MatchesQuery, type Me, type MessageView, type MessagesPage, type MessagesQuery, type MessagesQueryInput, type Method, type Middleware, type MiddlewareContext, type ParsedFilters, type PersonView, type PostBody, type PostInput, type PostOptions, type ProfileOption, type Protocol, type ProtocolMethods, type REGISTERED_WATCHERS_MAX, type ReactBody, type Ref, type RegisterBody, type RegisterInput, type RegistrationView, type ReplyOptions, type ResolvedSyncTarget, type RouteName, type ScheduleBody, type ScheduleBodyOutput, type ScheduleInput, type ScheduleOptions, type ScheduleTiming, type ScheduleView, type SchedulesQuery, type SchedulesQueryInput, type SchedulesQueryOutput, type SelfCaller, type SignInQuery, type SourceJoin, type SourceJoinBody, type SourceMessage, type SourceRead, type SourceReadQuery, type Subscription, type SyncAccountBody, type SyncAccountInput, type SyncBody, type SyncCodeBody, type SyncCodeView, type SyncCopiesQuery, type SyncCopiesView, type SyncFindInput, type SyncFindQuery, type SyncFindView, type SyncImportBody, type SyncImportInput, type SyncReceiptBody, type SyncReceiptInput, type SyncRootsQuery, type SyncThreadView, type SyncUnlinkBody, type SyncedView, type ThreadSummaryView, type ThreadView, type ThreadsPage, type ThreadsQuery, type ThreadsQueryInput, type TypingBody, type TypingResult, type UploadInput, type UploadStartBody, type UploadTicket, type VerifiedCaller, type WaitOptions, type Watcher, type WatcherContext, type Write, type WritePatch, type WriteSource, type Written, board, duration, type routes };
@@ -1,5 +1,5 @@
1
- import { r as duration, t as BoardError } from "./client-ClznIBMg.mjs";
2
- import { t as HttpError } from "./errors-CQ-fwxM3.mjs";
3
- import { t as DroppedError } from "./middleware-DUjyQP_a.mjs";
4
- import { t as board } from "./server-BxUruJxv.mjs";
1
+ import { r as duration, t as BoardError } from "./client-BY-BCggB.mjs";
2
+ import { t as HttpError } from "./errors-Bven0k29.mjs";
3
+ import { t as DroppedError } from "./middleware-B0J7QBq7.mjs";
4
+ import { t as board } from "./server-BgK1sgj7.mjs";
5
5
  export { BoardError, DroppedError, HttpError, board, duration };