@vercel/board 0.24.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.
- package/dist/{a2-BxfKZFvJ.mjs → a2-CQ3WcqMv.mjs} +6 -6
- package/dist/access.mjs +3 -3
- package/dist/{actors-rPnEQLZu.mjs → actors-CDDhhFNY.mjs} +2 -2
- package/dist/{auth-5nLsx9qB.mjs → auth-BwWH3Twu.mjs} +1 -1
- package/dist/{backend-D0GDYiFr.d.mts → backend-DmXjVnil.d.mts} +6 -2
- package/dist/backend-a2.d.mts +2 -2
- package/dist/backend-a2.mjs +1 -1
- package/dist/{backend-http-rfiG-AKP.mjs → backend-http-BJ7AdK0c.mjs} +6 -6
- package/dist/{backend-http-Dvq2p__1.d.mts → backend-http-BsP0Xq9e.d.mts} +2 -2
- package/dist/{backend-http-tGUo0e8j.mjs → backend-http-Cs-UKpYp.mjs} +2 -2
- package/dist/backend-http.d.mts +1 -1
- package/dist/backend-http.mjs +1 -1
- package/dist/backend-http.node.d.mts +1 -1
- package/dist/backend-http.node.mjs +1 -1
- package/dist/{backend-vercel-C3zuxmcD.mjs → backend-vercel-B0Q0K0O5.mjs} +3 -3
- package/dist/{backend-vercel-01QKDobk.d.mts → backend-vercel-CED673bx.d.mts} +2 -2
- package/dist/{backend-vercel-DM5PyMc2.mjs → backend-vercel-CG2SYa03.mjs} +3 -3
- package/dist/backend-vercel.d.mts +1 -1
- package/dist/backend-vercel.mjs +1 -1
- package/dist/backend-vercel.node.d.mts +1 -1
- package/dist/backend-vercel.node.mjs +1 -1
- package/dist/{chat-provider-D0k3y8zY.d.mts → chat-provider-6eYkL2ef.d.mts} +1 -1
- package/dist/cli-embedded.d.mts +55 -4
- package/dist/cli-embedded.mjs +38 -18
- package/dist/cli.mjs +4 -4
- package/dist/{client-ClznIBMg.mjs → client-BY-BCggB.mjs} +13 -7
- package/dist/{conformance-DQ9qVzWP.mjs → conformance-BZ53bxrG.mjs} +1 -1
- package/dist/conformance.d.mts +1 -1
- package/dist/conformance.mjs +1 -1
- package/dist/{engine-kHfSOXnQ.mjs → engine-SeaJ_CIY.mjs} +2 -2
- package/dist/{errors-CQ-fwxM3.mjs → errors-Bven0k29.mjs} +7 -3
- package/dist/{exports-Bw81oDDl.mjs → exports-ByvYtxFT.mjs} +6 -6
- package/dist/exports-CPrIkpz3.d.mts +4 -0
- package/dist/{index-B_hWanKF.d.mts → index-k2LfZxl-.d.mts} +2 -2
- package/dist/index.d.mts +3 -3
- package/dist/{index.default-B6oPlvEa.mjs → index.default-DmfhBZZi.mjs} +1 -1
- package/dist/index.mjs +6 -6
- package/dist/index.node.d.mts +3 -3
- package/dist/index.node.mjs +4 -4
- package/dist/inspect/app.js +1 -1
- package/dist/{main-CzWvRy91.mjs → main-BNkywL2P.mjs} +706 -141
- package/dist/{middleware-DUjyQP_a.mjs → middleware-B0J7QBq7.mjs} +1 -1
- package/dist/{node-CirFYqw0.mjs → node-C51_xzCb.mjs} +23 -23
- package/dist/{provider-D11Dfda0.d.mts → provider-C_sj4-GL.d.mts} +10 -1
- package/dist/{serve-DHyA-6FR.mjs → serve-DYQ64Q5R.mjs} +6 -5
- package/dist/{server-Cp2oIQOj.mjs → server-BgK1sgj7.mjs} +4 -4
- package/dist/{serving-B307gppu.mjs → serving-rXQcEgTO.mjs} +1 -1
- package/dist/sync-github.d.mts +2 -2
- package/dist/sync-kapso.d.mts +2 -2
- package/dist/sync-linear.d.mts +2 -2
- package/dist/sync-slack.d.mts +2 -2
- package/dist/sync.chat.d.mts +1 -1
- package/dist/sync.d.mts +1 -1
- package/dist/{tokens-DUXaXwOj.mjs → tokens-U-XRlEfq.mjs} +2 -2
- package/dist/{watchers-hash-C_1jGA53.mjs → watchers-hash-C4CJg7K1.mjs} +2 -2
- package/docs/01-board/03-identity.md +16 -7
- package/docs/01-board/04-messages.md +2 -2
- package/docs/01-board/05-reading.md +16 -8
- package/docs/01-board/07-schedules.md +2 -2
- package/docs/01-board/09-access.md +5 -4
- package/docs/03-guides/01-coding-agents.md +4 -2
- package/docs/03-guides/03-ci.md +2 -2
- package/docs/04-reference/01-cli.md +78 -19
- package/docs/04-reference/02-board.md +2 -1
- package/docs/04-reference/03-http.md +4 -0
- package/package.json +1 -1
- package/dist/exports-87_yESpp.d.mts +0 -4
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { n as DIRECT_UPLOAD_BYTES_MAX, r as IMPORT_BYTES_MAX, t as ATTACHMENT_BYTES_MAX } from "./files-SniSmeEr.mjs";
|
|
2
2
|
import { _ as RemoteWatcherId, b as actorKind, i as Attachment, x as platformAvatar } from "./schemas-Be08nyfW.mjs";
|
|
3
3
|
import "./external-BV_cUncs.mjs";
|
|
4
|
-
import { a as METHODS, d as VERSION, f as SYNC, n as compileWatcher, r as hasCriteria, t as canonicalWatchers } from "./watchers-hash-
|
|
5
|
-
import { r as duration, t as BoardError } from "./client-
|
|
4
|
+
import { a as METHODS, d as VERSION, f as SYNC, n as compileWatcher, r as hasCriteria, t as canonicalWatchers } from "./watchers-hash-C4CJg7K1.mjs";
|
|
5
|
+
import { r as duration, t as BoardError } from "./client-BY-BCggB.mjs";
|
|
6
6
|
import { n as derivedId, r as isKeyIdOf } from "./ids-C6AYo1bu.mjs";
|
|
7
|
-
import { a as forbidden, c as toErrorResponse, i as duplicateId, r as badRequest, s as notFound, t as HttpError } from "./errors-
|
|
7
|
+
import { a as forbidden, c as toErrorResponse, i as duplicateId, r as badRequest, s as notFound, t as HttpError } from "./errors-Bven0k29.mjs";
|
|
8
8
|
import { t as own } from "./own-OwgPWdmh.mjs";
|
|
9
9
|
import { n as replaceMentions } from "./mentions-CB6ShY4R.mjs";
|
|
10
|
-
import { _ as FULL_ACCESS, i as authenticates, v as authorize } from "./auth-
|
|
11
|
-
import { a as resolveMentions, n as actorSeen } from "./actors-
|
|
12
|
-
import { n as MIDDLEWARE_ACTOR, t as DroppedError } from "./middleware-
|
|
10
|
+
import { _ as FULL_ACCESS, i as authenticates, v as authorize } from "./auth-BwWH3Twu.mjs";
|
|
11
|
+
import { a as resolveMentions, n as actorSeen } from "./actors-CDDhhFNY.mjs";
|
|
12
|
+
import { n as MIDDLEWARE_ACTOR, t as DroppedError } from "./middleware-B0J7QBq7.mjs";
|
|
13
13
|
import { n as syncTarget, r as withEmailMentions } from "./targets-C-wdR5wP.mjs";
|
|
14
14
|
import { t as A2Error } from "./session-clear-wHd5GCpZ-BnKSxReK.mjs";
|
|
15
15
|
import { a as reducer } from "./reducer-CjmvZSAb-D_OSISmj.mjs";
|
package/dist/access.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as compileRules, c as githubActions, h as vercelProject, p as oidc } from "./auth-
|
|
2
|
-
import { i as resolveActor } from "./actors-
|
|
3
|
-
import { t as oidcTokens } from "./tokens-
|
|
1
|
+
import { a as compileRules, c as githubActions, h as vercelProject, p as oidc } from "./auth-BwWH3Twu.mjs";
|
|
2
|
+
import { i as resolveActor } from "./actors-CDDhhFNY.mjs";
|
|
3
|
+
import { t as oidcTokens } from "./tokens-U-XRlEfq.mjs";
|
|
4
4
|
export { compileRules, githubActions, oidc, oidcTokens, resolveActor, vercelProject };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { C as toStorable } from "./schemas-Be08nyfW.mjs";
|
|
2
|
-
import { r as badRequest } from "./errors-
|
|
2
|
+
import { r as badRequest } from "./errors-Bven0k29.mjs";
|
|
3
3
|
import { t as own } from "./own-OwgPWdmh.mjs";
|
|
4
4
|
import { t as extractMentions } from "./mentions-CB6ShY4R.mjs";
|
|
5
|
-
import { y as parseScope } from "./auth-
|
|
5
|
+
import { y as parseScope } from "./auth-BwWH3Twu.mjs";
|
|
6
6
|
//#region src/server/actors.ts
|
|
7
7
|
/** Agents whose avatars the board serves itself. */
|
|
8
8
|
const KNOWN_AGENTS = [
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { c as ChannelPath, v as SCOPE_MAX } from "./schemas-Be08nyfW.mjs";
|
|
2
|
-
import { a as forbidden, l as unauthorized } from "./errors-
|
|
2
|
+
import { a as forbidden, l as unauthorized } from "./errors-Bven0k29.mjs";
|
|
3
3
|
//#region src/server/access.ts
|
|
4
4
|
/**
|
|
5
5
|
* What a principal may do in a channel. `read` covers messages, threads,
|
|
@@ -2,7 +2,7 @@ import { t as Access } from "./access-CV96SYgr.mjs";
|
|
|
2
2
|
import { m as RuleFunction, n as AccessRule, r as Authenticate, s as Granted, t as AccessFunction, u as Known } from "./auth-CU56Q2Xh.mjs";
|
|
3
3
|
import { i as Attachment, o as Author, p as Labels } from "./schemas-CWxs3ECJ.mjs";
|
|
4
4
|
import { t as Actor, u as ExternalEvent } from "./folds-CRYY14kc.mjs";
|
|
5
|
-
import { $ as Discovery, $t as SyncCodeView, Bt as SchedulesQuery, Et as PostBody, F as BoardClient, Gt as SourceJoinBody, It as ScheduleBody, Jt as SourceReadQuery, Nt as RegistrationView, Qt as SyncCodeBody, St as MessagesQuery, Tt as PersonView, Wt as SourceJoin, X as BoardEventView, Yt as SyncAccountBody, Z as ChannelView, _t as MatchView, an as SyncImportBody, bn as UploadStartBody, bt as MessageView, 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, jt as RegisterBody, kt as ReactBody, ln as SyncRootsQuery, lt as InboxItem, mn as ThreadView, nt as EventsQuery, ot as IdentityView, p as SyncProvider, pt as LabelBody, q as AckBody, qt as SourceRead, rn as SyncFindQuery, sn as SyncReceiptBody, st as InboxAckBody, tn as SyncCopiesView, tt as EventsPage, un as SyncThreadView, ut as InboxNextQuery, vn as TypingBody, vt as MatchesQuery, xn as UploadTicket, xt as MessagesPage, yt as Me, z as ProfileOption, zt as ScheduleView } from "./provider-
|
|
5
|
+
import { $ as Discovery, $t as SyncCodeView, Bt as SchedulesQuery, Et as PostBody, F as BoardClient, Gt as SourceJoinBody, It as ScheduleBody, Jt as SourceReadQuery, Nt as RegistrationView, Qt as SyncCodeBody, St as MessagesQuery, Tt as PersonView, Wt as SourceJoin, X as BoardEventView, Yt as SyncAccountBody, Z as ChannelView, _t as MatchView, an as SyncImportBody, bn as UploadStartBody, bt as MessageView, 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, jt as RegisterBody, kt as ReactBody, ln as SyncRootsQuery, lt as InboxItem, mn as ThreadView, nt as EventsQuery, ot as IdentityView, p as SyncProvider, pt as LabelBody, q as AckBody, qt as SourceRead, rn as SyncFindQuery, sn as SyncReceiptBody, st as InboxAckBody, tn as SyncCopiesView, tt as EventsPage, un as SyncThreadView, ut as InboxNextQuery, vn as TypingBody, vt as MatchesQuery, xn as UploadTicket, xt as MessagesPage, yt as Me, z as ProfileOption, zt as ScheduleView } from "./provider-C_sj4-GL.mjs";
|
|
6
6
|
import { z } from "zod";
|
|
7
7
|
//#region src/api/protocol.d.ts
|
|
8
8
|
type Input<S extends z.ZodType> = NonNullable<z.output<S>>;
|
|
@@ -298,7 +298,11 @@ type Method = keyof Protocol;
|
|
|
298
298
|
declare class HttpError extends Error {
|
|
299
299
|
readonly status: number;
|
|
300
300
|
readonly code: string;
|
|
301
|
-
|
|
301
|
+
/** What fixes it, when the handle that raised it knows (`BoardError`'s `hint`). */
|
|
302
|
+
readonly hint: string | undefined;
|
|
303
|
+
constructor(status: number, code: string, message: string, options?: {
|
|
304
|
+
hint?: string;
|
|
305
|
+
});
|
|
302
306
|
}
|
|
303
307
|
//#endregion
|
|
304
308
|
//#region src/server/middleware.d.ts
|
package/dist/backend-a2.d.mts
CHANGED
|
@@ -2,8 +2,8 @@ import { i as Attachment } from "./schemas-CWxs3ECJ.mjs";
|
|
|
2
2
|
import { t as Actor } from "./folds-CRYY14kc.mjs";
|
|
3
3
|
import { l as Reducer, r as ContractEvent } from "./reducer-CYPHsSmd-BQIfozGi.mjs";
|
|
4
4
|
import { a as SessionAppend, c as SessionConsumeOptions, d as SessionSchedule, f as StateOptions, l as SessionConsumeResult, n as A2Server, o as SessionClearOptions, p as SessionCleared, r as Consumer, s as SessionClearResult, t as A2Scheduler, u as SessionDeadLetters } from "./server-qgez0Xny-D5mLfqFQ.mjs";
|
|
5
|
-
import { $ as Discovery, $t as SyncCodeView, Nt as RegistrationView, Tt as PersonView, Wt as SourceJoin, Z as ChannelView, _t as MatchView, bt as MessageView, ct as InboxEntry, fn as SyncedView, hn as ThreadsPage, ht as LinkedAccount, in as SyncFindView, lt as InboxItem, mn as ThreadView, ot as IdentityView, qt as SourceRead, tn as SyncCopiesView, tt as EventsPage, un as SyncThreadView, xn as UploadTicket, xt as MessagesPage, yt as Me, zt as ScheduleView } from "./provider-
|
|
6
|
-
import { i as Caller, n as BackendRoute, r as BoardBinding } from "./backend-
|
|
5
|
+
import { $ as Discovery, $t as SyncCodeView, Nt as RegistrationView, Tt as PersonView, Wt as SourceJoin, Z as ChannelView, _t as MatchView, bt as MessageView, ct as InboxEntry, fn as SyncedView, hn as ThreadsPage, ht as LinkedAccount, in as SyncFindView, lt as InboxItem, mn as ThreadView, ot as IdentityView, qt as SourceRead, tn as SyncCopiesView, tt as EventsPage, un as SyncThreadView, xn as UploadTicket, xt as MessagesPage, yt as Me, zt as ScheduleView } from "./provider-C_sj4-GL.mjs";
|
|
6
|
+
import { i as Caller, n as BackendRoute, r as BoardBinding } from "./backend-DmXjVnil.mjs";
|
|
7
7
|
import { n as fsBlob, r as memoryBlob, t as BlobStore } from "./blob-C0J3wbGv.mjs";
|
|
8
8
|
import { t as BoardStore } from "./types-8yq2VnKI.mjs";
|
|
9
9
|
import { z } from "zod";
|
package/dist/backend-a2.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as fsBlob, r as memoryBlob, t as a2 } from "./a2-
|
|
1
|
+
import { n as fsBlob, r as memoryBlob, t as a2 } from "./a2-CQ3WcqMv.mjs";
|
|
2
2
|
export { a2, fsBlob, memoryBlob };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import "./files-SniSmeEr.mjs";
|
|
2
2
|
import "./schemas-Be08nyfW.mjs";
|
|
3
|
-
import { K as routes, O as RegisterBody, a as METHODS, n as compileWatcher, t as canonicalWatchers } from "./watchers-hash-
|
|
4
|
-
import { n as createBoardClient, t as BoardError } from "./client-
|
|
3
|
+
import { K as routes, O as RegisterBody, a as METHODS, n as compileWatcher, t as canonicalWatchers } from "./watchers-hash-C4CJg7K1.mjs";
|
|
4
|
+
import { n as createBoardClient, t as BoardError } from "./client-BY-BCggB.mjs";
|
|
5
5
|
import { a as sha256, i as keyId, n as derivedId, t as DERIVED_ID } from "./ids-C6AYo1bu.mjs";
|
|
6
|
-
import { a as forbidden, o as json, t as HttpError } from "./errors-
|
|
6
|
+
import { a as forbidden, o as json, t as HttpError } from "./errors-Bven0k29.mjs";
|
|
7
7
|
//#region src/server/registrant.ts
|
|
8
8
|
/** Registering again this soon after the same registration only repeats it. */
|
|
9
9
|
const REGISTER_EVERY_MS = 1e4;
|
|
@@ -239,7 +239,7 @@ function scopeOf(identity) {
|
|
|
239
239
|
const describe = (error) => ((error instanceof Error ? error.message : String(error)) || "unknown error").slice(0, 500);
|
|
240
240
|
/** The SDK's error, as the board answers it: the remote's own status and code, or 502 when it never answered. */
|
|
241
241
|
const rethrow = (error) => {
|
|
242
|
-
if (error instanceof BoardError) throw new HttpError(error.status >= 400 ? error.status : 502, error.code, error.message);
|
|
242
|
+
if (error instanceof BoardError) throw new HttpError(error.status >= 400 ? error.status : 502, error.code, error.message, error.hint !== void 0 ? { hint: error.hint } : {});
|
|
243
243
|
if (error instanceof HttpError || error instanceof Error && error.name === "AbortError") throw error;
|
|
244
244
|
throw new HttpError(502, "unreachable", `the board didn't answer: ${describe(error)}`);
|
|
245
245
|
};
|
|
@@ -339,7 +339,7 @@ function createHttp(url, options, environment) {
|
|
|
339
339
|
let discovered = null;
|
|
340
340
|
/** The board it uses' discovery, for a handle here: who it is, and the sync entries it lists. */
|
|
341
341
|
const discovery = () => (discovered ??= doFetch(remote).then(async (response) => {
|
|
342
|
-
if (!response.ok) throw new HttpError(response.status >= 400 ? response.status : 502, "no_board", `no board at ${remote}
|
|
342
|
+
if (!response.ok) throw new HttpError(response.status >= 400 ? response.status : 502, "no_board", `There's no board at ${remote}: it answered ${response.status}.`);
|
|
343
343
|
return await response.json();
|
|
344
344
|
}, rethrow)).catch((error) => {
|
|
345
345
|
discovered = null;
|
|
@@ -395,7 +395,7 @@ function createHttp(url, options, environment) {
|
|
|
395
395
|
if (response.ok) return response;
|
|
396
396
|
try {
|
|
397
397
|
const body = await response.json();
|
|
398
|
-
if (body.error?.message) throw new HttpError(response.status, body.error.code ?? "error", body.error.message);
|
|
398
|
+
if (body.error?.message) throw new HttpError(response.status, body.error.code ?? "error", body.error.message, typeof body.error.hint === "string" ? { hint: body.error.hint } : {});
|
|
399
399
|
} catch (error) {
|
|
400
400
|
if (error instanceof HttpError) throw error;
|
|
401
401
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { i as Attachment } from "./schemas-CWxs3ECJ.mjs";
|
|
2
2
|
import { t as Actor } from "./folds-CRYY14kc.mjs";
|
|
3
|
-
import { $ as Discovery, $t as SyncCodeView, Nt as RegistrationView, Tt as PersonView, Wt as SourceJoin, Z as ChannelView, _t as MatchView, bt as MessageView, ct as InboxEntry, fn as SyncedView, hn as ThreadsPage, ht as LinkedAccount, in as SyncFindView, lt as InboxItem, mn as ThreadView, ot as IdentityView, qt as SourceRead, tn as SyncCopiesView, tt as EventsPage, un as SyncThreadView, xn as UploadTicket, xt as MessagesPage, yt as Me, z as ProfileOption, zt as ScheduleView } from "./provider-
|
|
4
|
-
import { i as Caller, n as BackendRoute, r as BoardBinding } from "./backend-
|
|
3
|
+
import { $ as Discovery, $t as SyncCodeView, Nt as RegistrationView, Tt as PersonView, Wt as SourceJoin, Z as ChannelView, _t as MatchView, bt as MessageView, ct as InboxEntry, fn as SyncedView, hn as ThreadsPage, ht as LinkedAccount, in as SyncFindView, lt as InboxItem, mn as ThreadView, ot as IdentityView, qt as SourceRead, tn as SyncCopiesView, tt as EventsPage, un as SyncThreadView, xn as UploadTicket, xt as MessagesPage, yt as Me, z as ProfileOption, zt as ScheduleView } from "./provider-C_sj4-GL.mjs";
|
|
4
|
+
import { i as Caller, n as BackendRoute, r as BoardBinding } from "./backend-DmXjVnil.mjs";
|
|
5
5
|
//#region src/server/backend-http.d.ts
|
|
6
6
|
type HttpOptions = {
|
|
7
7
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as createHttp } from "./backend-http-
|
|
2
|
-
import { n as connect, r as environmentProfile, t as boardUrl } from "./node-
|
|
1
|
+
import { r as createHttp } from "./backend-http-BJ7AdK0c.mjs";
|
|
2
|
+
import { n as connect, r as environmentProfile, t as boardUrl } from "./node-C51_xzCb.mjs";
|
|
3
3
|
//#region src/backend-http/index.ts
|
|
4
4
|
const environment = {
|
|
5
5
|
url: boardUrl,
|
package/dist/backend-http.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as HttpOptions, t as HttpBackend } from "./backend-http-
|
|
1
|
+
import { n as HttpOptions, t as HttpBackend } from "./backend-http-BsP0Xq9e.mjs";
|
|
2
2
|
//#region src/backend-http/index.default.d.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/backend-http.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as http } from "./index.default-
|
|
1
|
+
import { t as http } from "./index.default-DmfhBZZi.mjs";
|
|
2
2
|
export { http };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as HttpOptions, t as HttpBackend } from "./backend-http-
|
|
1
|
+
import { n as HttpOptions, t as HttpBackend } from "./backend-http-BsP0Xq9e.mjs";
|
|
2
2
|
//#region src/backend-http/index.d.ts
|
|
3
3
|
/**
|
|
4
4
|
* The board at `url`, which keeps the log: this board uses it as this deployment. Without a
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as http } from "./backend-http-
|
|
1
|
+
import { t as http } from "./backend-http-Cs-UKpYp.mjs";
|
|
2
2
|
export { http };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { t as HttpError } from "./errors-
|
|
2
|
-
import { o as vercelLogin, r as environmentProfile, s as vercelProjectFile } from "./node-
|
|
3
|
-
import { t as createVercel } from "./backend-vercel-
|
|
1
|
+
import { t as HttpError } from "./errors-Bven0k29.mjs";
|
|
2
|
+
import { o as vercelLogin, r as environmentProfile, s as vercelProjectFile } from "./node-C51_xzCb.mjs";
|
|
3
|
+
import { t as createVercel } from "./backend-vercel-CG2SYa03.mjs";
|
|
4
4
|
import { readFile } from "node:fs/promises";
|
|
5
5
|
import { decodeJwt } from "jose";
|
|
6
6
|
import { getVercelOidcToken } from "@vercel/oidc";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { i as Attachment } from "./schemas-CWxs3ECJ.mjs";
|
|
2
2
|
import { t as Actor } from "./folds-CRYY14kc.mjs";
|
|
3
|
-
import { $ as Discovery, $t as SyncCodeView, Nt as RegistrationView, Tt as PersonView, Wt as SourceJoin, Z as ChannelView, _t as MatchView, bt as MessageView, ct as InboxEntry, fn as SyncedView, hn as ThreadsPage, ht as LinkedAccount, in as SyncFindView, lt as InboxItem, mn as ThreadView, ot as IdentityView, qt as SourceRead, tn as SyncCopiesView, tt as EventsPage, un as SyncThreadView, xn as UploadTicket, xt as MessagesPage, yt as Me, z as ProfileOption, zt as ScheduleView } from "./provider-
|
|
4
|
-
import { i as Caller, n as BackendRoute, r as BoardBinding } from "./backend-
|
|
3
|
+
import { $ as Discovery, $t as SyncCodeView, Nt as RegistrationView, Tt as PersonView, Wt as SourceJoin, Z as ChannelView, _t as MatchView, bt as MessageView, ct as InboxEntry, fn as SyncedView, hn as ThreadsPage, ht as LinkedAccount, in as SyncFindView, lt as InboxItem, mn as ThreadView, ot as IdentityView, qt as SourceRead, tn as SyncCopiesView, tt as EventsPage, un as SyncThreadView, xn as UploadTicket, xt as MessagesPage, yt as Me, z as ProfileOption, zt as ScheduleView } from "./provider-C_sj4-GL.mjs";
|
|
4
|
+
import { i as Caller, n as BackendRoute, r as BoardBinding } from "./backend-DmXjVnil.mjs";
|
|
5
5
|
//#region src/server/backend-vercel.d.ts
|
|
6
6
|
type VercelOptions = {
|
|
7
7
|
/** The team whose board it is: its ID (`team_…`) or its slug. In Node, by default your deployment's, or `VERCEL_ORG_ID`. */
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { _ as RemoteWatcherId } from "./schemas-Be08nyfW.mjs";
|
|
2
|
-
import { O as RegisterBody, a as METHODS, d as VERSION, n as compileWatcher, t as canonicalWatchers } from "./watchers-hash-
|
|
2
|
+
import { O as RegisterBody, a as METHODS, d as VERSION, n as compileWatcher, t as canonicalWatchers } from "./watchers-hash-C4CJg7K1.mjs";
|
|
3
3
|
import { a as sha256, n as derivedId } from "./ids-C6AYo1bu.mjs";
|
|
4
|
-
import { a as forbidden, o as json, s as notFound, t as HttpError } from "./errors-
|
|
5
|
-
import { a as wakePath, i as registrant, n as callerProfile, t as PROJECTS_OWN } from "./backend-http-
|
|
4
|
+
import { a as forbidden, o as json, s as notFound, t as HttpError } from "./errors-Bven0k29.mjs";
|
|
5
|
+
import { a as wakePath, i as registrant, n as callerProfile, t as PROJECTS_OWN } from "./backend-http-BJ7AdK0c.mjs";
|
|
6
6
|
//#region src/server/backend-vercel.ts
|
|
7
7
|
const PROFILE = /^[A-Za-z][A-Za-z0-9-]{0,31}$/;
|
|
8
8
|
const SESSION = /^[A-Za-z0-9_.:-]{1,128}$/;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as VercelOptions, t as VercelBackend } from "./backend-vercel-
|
|
1
|
+
import { n as VercelOptions, t as VercelBackend } from "./backend-vercel-CED673bx.mjs";
|
|
2
2
|
//#region src/backend-vercel/index.default.d.ts
|
|
3
3
|
/**
|
|
4
4
|
* Your team's board, in Vercel's API. Outside Node there's no environment to find credentials or
|
package/dist/backend-vercel.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as createVercel } from "./backend-vercel-
|
|
1
|
+
import { t as createVercel } from "./backend-vercel-CG2SYa03.mjs";
|
|
2
2
|
//#region src/backend-vercel/index.default.ts
|
|
3
3
|
/**
|
|
4
4
|
* Your team's board, in Vercel's API. Outside Node there's no environment to find credentials or
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as VercelOptions, t as VercelBackend } from "./backend-vercel-
|
|
1
|
+
import { n as VercelOptions, t as VercelBackend } from "./backend-vercel-CED673bx.mjs";
|
|
2
2
|
//#region src/backend-vercel/index.d.ts
|
|
3
3
|
/** Where `token` comes from, in words: what `vb whoami` says. */
|
|
4
4
|
export declare function credentialSource(): string;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as vercel, t as credentialSource } from "./backend-vercel-
|
|
1
|
+
import { n as vercel, t as credentialSource } from "./backend-vercel-B0Q0K0O5.mjs";
|
|
2
2
|
export { credentialSource, vercel };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { d as ExternalFile, f as ExternalLink, l as ExternalAuthor, t as Actor } from "./folds-CRYY14kc.mjs";
|
|
2
|
-
import { M as SyncRoot, O as ProviderEvent, Wt as SourceJoin, a as ProviderOptions, c as ReceivedEvent, d as ResolvedTarget, i as ProviderFile, n as FileDelivery, o as ProviderPost, p as SyncProvider, qt as SourceRead, r as ProviderDelivery, s as Receive, t as FetchedLink, y as SyncFn } from "./provider-
|
|
2
|
+
import { M as SyncRoot, O as ProviderEvent, Wt as SourceJoin, a as ProviderOptions, c as ReceivedEvent, d as ResolvedTarget, i as ProviderFile, n as FileDelivery, o as ProviderPost, p as SyncProvider, qt as SourceRead, r as ProviderDelivery, s as Receive, t as FetchedLink, y as SyncFn } from "./provider-C_sj4-GL.mjs";
|
|
3
3
|
import { Adapter, Author, FileUpload, Message, ReactionEvent } from "chat";
|
|
4
4
|
//#region src/sync/types.d.ts
|
|
5
5
|
declare function externalAuthor(platform: string, author: Author): ExternalAuthor;
|
package/dist/cli-embedded.d.mts
CHANGED
|
@@ -1,5 +1,47 @@
|
|
|
1
|
-
import { d as Board } from "./backend-
|
|
2
|
-
import "./index-
|
|
1
|
+
import { d as Board } from "./backend-DmXjVnil.mjs";
|
|
2
|
+
import "./index-k2LfZxl-.mjs";
|
|
3
|
+
//#region src/cli/failure.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* What kind of failure it is, which fixes the exit code: 2 for `usage` and `missing_input`, 124
|
|
6
|
+
* for `timeout`, 130 for `canceled`, and 1 for the rest.
|
|
7
|
+
*/
|
|
8
|
+
type FailureClass = 'usage' | 'missing_input' | 'auth' | 'permission' | 'not_found' | 'conflict' | 'limit' | 'rate_limit' | 'network' | 'platform' | 'timeout' | 'canceled' | 'unknown';
|
|
9
|
+
/** One way out: what to do, and the command that does it, whole (`['vb', 'read', 'dev', '--scope', '<TEAM>']`). */
|
|
10
|
+
type Recovery = {
|
|
11
|
+
instruction: string;
|
|
12
|
+
argv?: string[];
|
|
13
|
+
};
|
|
14
|
+
type Failure = {
|
|
15
|
+
class: FailureClass;
|
|
16
|
+
/** Stable and snake_case: what a program branches on. */
|
|
17
|
+
reason: string;
|
|
18
|
+
/** The headline: what failed, then the known cause, as sentences. */
|
|
19
|
+
message: string;
|
|
20
|
+
/** What the headline can't hold, a line each: the board's own message, say. */
|
|
21
|
+
details?: string[];
|
|
22
|
+
/** Facts needed to act on it, as rows: `['Board', 'https://…']`. */
|
|
23
|
+
context?: [string, string][];
|
|
24
|
+
/** At most two, likeliest first. */
|
|
25
|
+
next?: Recovery[];
|
|
26
|
+
/** Blocked before anything happened, until someone gives it what it needs (a team, say). */
|
|
27
|
+
actionRequired?: boolean;
|
|
28
|
+
/** For programs: what the CLI resolved, and the board's own error (`{ code, message }`) when it answered with one. */
|
|
29
|
+
data?: Record<string, unknown>;
|
|
30
|
+
};
|
|
31
|
+
/** A write went through, with something to say about it. */
|
|
32
|
+
type Warning = {
|
|
33
|
+
reason: string;
|
|
34
|
+
message: string;
|
|
35
|
+
};
|
|
36
|
+
/** A recovery's command, as a person types it. */
|
|
37
|
+
export declare const commandLine: (argv: readonly string[]) => string;
|
|
38
|
+
/**
|
|
39
|
+
* The failure as lines, the headline first and the rest as they sit under it, before the indent a
|
|
40
|
+
* CLI adds under its own mark (`error: `, `✗ `): details, context rows, then each way out after a
|
|
41
|
+
* blank line, its command two spaces in.
|
|
42
|
+
*/
|
|
43
|
+
export declare function failureLines(failure: Failure): string[];
|
|
44
|
+
//#endregion
|
|
3
45
|
//#region src/cli/main.d.ts
|
|
4
46
|
/**
|
|
5
47
|
* The command `argv` runs, by its own name (`delete` for `rm`), as the parser reads it: the
|
|
@@ -13,11 +55,19 @@ export declare function commandWord(argv: string[]): string | undefined;
|
|
|
13
55
|
* Board's CLI as `appName` names it in help, usage, and errors (`vercel board`). With no board
|
|
14
56
|
* URL anywhere, it talks to the team's board in Vercel's API: `VERCEL_ORG_ID`'s, the nearest linked
|
|
15
57
|
* project's team's (`.vercel`), your login's, or `--scope`'s. `run` takes what follows the name, and answers the exit code:
|
|
16
|
-
* 0 success, 1 error, 2 misuse, 124 when `wait` times out. It never exits the process itself. One `run`
|
|
58
|
+
* 0 success, 1 error, 2 misuse, 124 when `wait` times out, 130 when Ctrl-C stops it. It never exits the process itself. One `run`
|
|
17
59
|
* at a time: a run's flags are the CLI's while it runs.
|
|
60
|
+
*
|
|
61
|
+
* A failure goes to `onError`, with whether the run asked for `--json`, to show as the app shows
|
|
62
|
+
* its own, and a warning to `onWarning` (with `--json`, it's in the result). Without them, the CLI
|
|
63
|
+
* prints its own on stderr.
|
|
18
64
|
*/
|
|
19
65
|
export declare function createApp(options: {
|
|
20
66
|
appName: string;
|
|
67
|
+
onError?: (failure: Failure, mode: {
|
|
68
|
+
json: boolean;
|
|
69
|
+
}) => void;
|
|
70
|
+
onWarning?: (warning: Warning) => void;
|
|
21
71
|
}): {
|
|
22
72
|
run(args: string[]): Promise<number>;
|
|
23
73
|
};
|
|
@@ -48,4 +98,5 @@ export type VbResult = {
|
|
|
48
98
|
* `tail` and `wait`, which hold the rest until they end, need `options.signal`.
|
|
49
99
|
*/
|
|
50
100
|
export declare function vb(board: Board, argv: string[], options?: VbOptions): Promise<VbResult>;
|
|
51
|
-
//#endregion
|
|
101
|
+
//#endregion
|
|
102
|
+
export type { Failure, FailureClass, Recovery, Warning };
|
package/dist/cli-embedded.mjs
CHANGED
|
@@ -1,22 +1,42 @@
|
|
|
1
|
-
import { n as
|
|
1
|
+
import { a as commandLine, c as failureLines, i as mainWith, l as formatFailure, n as commandWord, o as exitCode, r as main, s as failureDocument, t as Failed } from "./main-BNkywL2P.mjs";
|
|
2
2
|
//#region src/cli/embedded.ts
|
|
3
3
|
/**
|
|
4
4
|
* Board's CLI as `appName` names it in help, usage, and errors (`vercel board`). With no board
|
|
5
5
|
* URL anywhere, it talks to the team's board in Vercel's API: `VERCEL_ORG_ID`'s, the nearest linked
|
|
6
6
|
* project's team's (`.vercel`), your login's, or `--scope`'s. `run` takes what follows the name, and answers the exit code:
|
|
7
|
-
* 0 success, 1 error, 2 misuse, 124 when `wait` times out. It never exits the process itself. One `run`
|
|
7
|
+
* 0 success, 1 error, 2 misuse, 124 when `wait` times out, 130 when Ctrl-C stops it. It never exits the process itself. One `run`
|
|
8
8
|
* at a time: a run's flags are the CLI's while it runs.
|
|
9
|
+
*
|
|
10
|
+
* A failure goes to `onError`, with whether the run asked for `--json`, to show as the app shows
|
|
11
|
+
* its own, and a warning to `onWarning` (with `--json`, it's in the result). Without them, the CLI
|
|
12
|
+
* prints its own on stderr.
|
|
9
13
|
*/
|
|
10
14
|
function createApp(options) {
|
|
15
|
+
const { appName, onError, onWarning } = options;
|
|
11
16
|
return { run: (args) => main(args, {
|
|
12
|
-
name:
|
|
17
|
+
name: appName,
|
|
13
18
|
commands: {},
|
|
14
|
-
teamBoard: true
|
|
19
|
+
teamBoard: true,
|
|
20
|
+
...onError ? { onError } : {},
|
|
21
|
+
...onWarning ? { onWarning } : {}
|
|
15
22
|
}) };
|
|
16
23
|
}
|
|
17
|
-
const lacking = (what) => async () => {
|
|
18
|
-
throw new
|
|
24
|
+
const lacking = (what, option) => async () => {
|
|
25
|
+
throw new Failed({
|
|
26
|
+
class: "usage",
|
|
27
|
+
reason: "not_available",
|
|
28
|
+
message: `${what} here: pass ${option} in vb()'s options.`
|
|
29
|
+
});
|
|
19
30
|
};
|
|
31
|
+
/** A call `vb()` answers itself, printed as the CLI would print it. */
|
|
32
|
+
function refused(argv, failure) {
|
|
33
|
+
const stderr = argv.slice(0, argv.includes("--") ? argv.indexOf("--") : void 0).includes("--json") ? JSON.stringify(failureDocument(failure)) : formatFailure(failure);
|
|
34
|
+
return Promise.resolve({
|
|
35
|
+
code: exitCode(failure),
|
|
36
|
+
stdout: "",
|
|
37
|
+
stderr: `${stderr}\n`
|
|
38
|
+
});
|
|
39
|
+
}
|
|
20
40
|
let queue = Promise.resolve();
|
|
21
41
|
/**
|
|
22
42
|
* Runs the vb command `argv` (`['read', '42']`, `['reply', '42', 'on it']`) on `board`, in this
|
|
@@ -27,15 +47,15 @@ let queue = Promise.resolve();
|
|
|
27
47
|
*/
|
|
28
48
|
function vb(board, argv, options = {}) {
|
|
29
49
|
const word = commandWord(argv);
|
|
30
|
-
if (word !== void 0 && options.refuse?.includes(word)) return
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
50
|
+
if (word !== void 0 && options.refuse?.includes(word)) return refused(argv, {
|
|
51
|
+
class: "usage",
|
|
52
|
+
reason: "not_available",
|
|
53
|
+
message: `${word} isn't available here.`
|
|
34
54
|
});
|
|
35
|
-
if ((word === "tail" || word === "wait") && !options.signal) return
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
55
|
+
if ((word === "tail" || word === "wait") && !options.signal) return refused(argv, {
|
|
56
|
+
class: "usage",
|
|
57
|
+
reason: "not_available",
|
|
58
|
+
message: `${word} runs until it's stopped, and vb() runs one call at a time: pass a signal.`
|
|
39
59
|
});
|
|
40
60
|
const result = queue.then(async () => {
|
|
41
61
|
let stdout = "";
|
|
@@ -49,9 +69,9 @@ function vb(board, argv, options = {}) {
|
|
|
49
69
|
board,
|
|
50
70
|
write: (chunk) => void (stdout += typeof chunk === "string" ? chunk : decoder.decode(chunk, { stream: true })),
|
|
51
71
|
error: (chunk) => void (stderr += chunk),
|
|
52
|
-
readFile: options.readFile ? async (path) => options.readFile(path) : lacking("--attach
|
|
53
|
-
writeFile: options.writeFile ? async (path, data) => options.writeFile(path, data) : lacking("download
|
|
54
|
-
stdin: options.stdin !== void 0 ? async () => options.stdin : lacking("-
|
|
72
|
+
readFile: options.readFile ? async (path) => options.readFile(path) : lacking("--attach can't read files", "readFile"),
|
|
73
|
+
writeFile: options.writeFile ? async (path, data) => options.writeFile(path, data) : lacking("download can't save files", "writeFile"),
|
|
74
|
+
stdin: options.stdin !== void 0 ? async () => options.stdin : lacking("- can't read stdin", "stdin"),
|
|
55
75
|
...options.signal ? { signal: options.signal } : {}
|
|
56
76
|
}),
|
|
57
77
|
stdout,
|
|
@@ -62,4 +82,4 @@ function vb(board, argv, options = {}) {
|
|
|
62
82
|
return result;
|
|
63
83
|
}
|
|
64
84
|
//#endregion
|
|
65
|
-
export { commandWord, createApp, vb };
|
|
85
|
+
export { commandLine, commandWord, createApp, failureLines, vb };
|
package/dist/cli.mjs
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import { t as ATTACHMENT_BYTES_MAX } from "./files-SniSmeEr.mjs";
|
|
3
3
|
import "./schemas-Be08nyfW.mjs";
|
|
4
4
|
import { a as option } from "./commands-BtL4jFq8.mjs";
|
|
5
|
-
import { a as projectDir } from "./node-
|
|
6
|
-
import {
|
|
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
8
|
import { appendFile, readFile } from "node:fs/promises";
|
|
9
9
|
import { join } from "node:path";
|
|
@@ -658,10 +658,10 @@ const local = {
|
|
|
658
658
|
}]
|
|
659
659
|
},
|
|
660
660
|
async run(args, { flags, out, usage, portFlag, connection, openBrowser }) {
|
|
661
|
-
if (args.length > 0) throw usage("
|
|
661
|
+
if (args.length > 0) throw usage("serve takes no arguments: pass its port with --port, and its directory with --dir.");
|
|
662
662
|
const port = portFlag();
|
|
663
663
|
const root = projectDir();
|
|
664
|
-
const { localHandle, serveLocal } = await import("./serve-
|
|
664
|
+
const { localHandle, serveLocal } = await import("./serve-DYQ64Q5R.mjs");
|
|
665
665
|
const handle = flags.handle ?? process.env.BOARD_HANDLE;
|
|
666
666
|
const local = await serveLocal({
|
|
667
667
|
dir: flags.dir ?? join(root, ".board"),
|
|
@@ -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
|
-
|
|
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",
|
|
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", `
|
|
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", `
|
|
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", `
|
|
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}
|
|
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 };
|
package/dist/conformance.d.mts
CHANGED
package/dist/conformance.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as conformance } from "./conformance-
|
|
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-
|
|
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-
|
|
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
|
-
|
|
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-
|
|
4
|
-
import { n as createBoardClient, t as BoardError } from "./client-
|
|
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-
|
|
7
|
-
import { d as issuersOf, g as verifiesTokens, l as hostPrincipal, o as createAuthority, s as fromTokens } from "./auth-
|
|
8
|
-
import { i as resolveActor, r as claimsOf, t as KNOWN_AGENTS } from "./actors-
|
|
9
|
-
import { r as runMiddleware, t as DroppedError } from "./middleware-
|
|
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
|
/**
|