@vercel/board 0.29.0 → 0.31.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 (156) hide show
  1. package/README.md +8 -17
  2. package/dist/{a2-HUbQJ0RD.mjs → a2-DngWY2Eb.mjs} +741 -415
  3. package/dist/access-CY5xVMIK.mjs +242 -0
  4. package/dist/{access-CV96SYgr.d.mts → access-DPcrKIH_.d.mts} +6 -1
  5. package/dist/access.d.mts +4 -4
  6. package/dist/access.mjs +5 -4
  7. package/dist/{actors-DcJhFbwJ.mjs → actors-Bm-ojWWT.mjs} +2 -2
  8. package/dist/{auth-JO22iIwr.mjs → auth-CyO2aw5n.mjs} +126 -236
  9. package/dist/{auth-CU56Q2Xh.d.mts → auth-DLYSt_-A.d.mts} +32 -4
  10. package/dist/{backend-CPC_vyOo.d.mts → backend-Bob-5CM7.d.mts} +93 -42
  11. package/dist/backend-a2/blob-vercel.d.mts +1 -1
  12. package/dist/backend-a2/contract.d.mts +38 -98
  13. package/dist/backend-a2/contract.mjs +1 -1
  14. package/dist/backend-a2/scheduler-local.d.mts +1 -1
  15. package/dist/backend-a2/scheduler-local.mjs +1 -1
  16. package/dist/backend-a2/scheduler-qstash.d.mts +3 -3
  17. package/dist/backend-a2/scheduler-qstash.mjs +8 -8
  18. package/dist/backend-a2/scheduler-vercel.d.mts +3 -3
  19. package/dist/backend-a2/scheduler-vercel.mjs +6 -6
  20. package/dist/backend-a2/store-memory.d.mts +2 -2
  21. package/dist/backend-a2/store-memory.mjs +3 -3
  22. package/dist/backend-a2/store-postgres.d.mts +1 -1
  23. package/dist/backend-a2/store-postgres.mjs +34 -15
  24. package/dist/backend-a2/store-redis-http.d.mts +1 -1
  25. package/dist/backend-a2/store-redis-http.mjs +6 -6
  26. package/dist/backend-a2/store-redis.d.mts +2 -2
  27. package/dist/backend-a2/store-redis.mjs +5 -5
  28. package/dist/backend-a2/store-sqlite.d.mts +1 -1
  29. package/dist/backend-a2/store-sqlite.mjs +3 -3
  30. package/dist/backend-a2.d.mts +143 -242
  31. package/dist/backend-a2.mjs +2 -2
  32. package/dist/{backend-http-CqfKhrnn.d.mts → backend-http-BRrRbjRx.d.mts} +59 -45
  33. package/dist/{backend-http-CzIJMm58.mjs → backend-http-CvUKOn-m.mjs} +11 -10
  34. package/dist/{backend-http-Bmp0IgD3.mjs → backend-http-D8mUzuKQ.mjs} +2 -2
  35. package/dist/backend-http.d.mts +1 -1
  36. package/dist/backend-http.mjs +1 -1
  37. package/dist/backend-http.node.d.mts +1 -1
  38. package/dist/backend-http.node.mjs +1 -1
  39. package/dist/{backend-vercel-DQc_TaHp.mjs → backend-vercel-Ba8JDtqW.mjs} +3 -3
  40. package/dist/{backend-vercel-4tvcPKqX.d.mts → backend-vercel-BaSEUdwg.d.mts} +62 -47
  41. package/dist/{backend-vercel-BNauAs7w.mjs → backend-vercel-CmY9yZ9m.mjs} +279 -42
  42. package/dist/backend-vercel.d.mts +1 -1
  43. package/dist/backend-vercel.mjs +1 -1
  44. package/dist/backend-vercel.node.d.mts +1 -1
  45. package/dist/backend-vercel.node.mjs +1 -1
  46. package/dist/{blob-DmiQjrYy.d.mts → blob-Bx8QPWEd.d.mts} +2 -2
  47. package/dist/{blob-DdbpJqN1.mjs → blob-WbB2DJKn.mjs} +30 -11
  48. package/dist/{chat-provider-BWHbChcQ.d.mts → chat-provider-BChYrrA7.d.mts} +32 -28
  49. package/dist/{chat-provider-COtsU5jB.mjs → chat-provider-DkFp2hrh.mjs} +105 -60
  50. package/dist/cli-commands.d.mts +1 -1
  51. package/dist/cli-commands.mjs +1 -1
  52. package/dist/cli-embedded.d.mts +2 -2
  53. package/dist/cli-embedded.mjs +1 -1
  54. package/dist/cli.mjs +4 -4
  55. package/dist/{client-BqAjk0Q4.d.mts → client-COfYrgfV.d.mts} +240 -227
  56. package/dist/{commands-D6gvrOh3.d.mts → commands-DK4W3HCJ.d.mts} +47 -10
  57. package/dist/{commands-C3R1AWgm.mjs → commands-L1JSGz2Z.mjs} +212 -54
  58. package/dist/conformance-DK43HiHf.mjs +1000 -0
  59. package/dist/conformance.d.mts +8 -2
  60. package/dist/conformance.mjs +1 -1
  61. package/dist/{engine-DQxXk7dX.mjs → engine-DurYIRt8.mjs} +29 -210
  62. package/dist/{errors-DDktVeUa.d.mts → errors-2vGs49Db.d.mts} +1 -1
  63. package/dist/{client-D0Px7KzF.mjs → errors-CJXhhzvT.mjs} +132 -27
  64. package/dist/{provider-BaVmi4Hi.mjs → events-lujPA3gQ.mjs} +80 -17
  65. package/dist/{exports-BG-0Wyn-.mjs → exports-CWIdN0Ub.mjs} +195 -103
  66. package/dist/exports-FBOQWT7O.d.mts +5 -0
  67. package/dist/{folds-BDMSxBUf.mjs → folds-Cu9Q9zyQ.mjs} +3 -22
  68. package/dist/{folds-ZkHM4M-v.d.mts → folds-DLUzfibJ.d.mts} +15 -40
  69. package/dist/{index-D3VvNfh_.d.mts → index-Ho-ayyQL.d.mts} +2 -2
  70. package/dist/index.d.mts +7 -7
  71. package/dist/{index.default-rB8sJ9RX.mjs → index.default-BUcwDaAe.mjs} +1 -1
  72. package/dist/index.mjs +5 -6
  73. package/dist/index.node.d.mts +7 -7
  74. package/dist/index.node.mjs +3 -4
  75. package/dist/inspect/app.js +62 -61
  76. package/dist/inspect/engine.js +3 -3
  77. package/dist/{internal-CvsrprnU-CRY89I-b.mjs → internal-CvsrprnU-zZMpDiRY.mjs} +1 -1
  78. package/dist/{local-DhkrAqPP.mjs → local-C76Fy5ad.mjs} +1 -1
  79. package/dist/{main-CVBqe3VO.mjs → main-Dz-8komG.mjs} +251 -127
  80. package/dist/{middleware-CXjEeef4.mjs → middleware-BavYSDUa.mjs} +1 -1
  81. package/dist/{node-Zd_C-gxP.mjs → node-BgeGcwX0.mjs} +7 -3
  82. package/dist/{platform-B4TnJtWu-CwcTyKg2.mjs → platform-B4TnJtWu-Do3agKr5.mjs} +1 -1
  83. package/dist/{project-CBXlLftU.mjs → project-CQ4VUibA.mjs} +1 -1
  84. package/dist/{provider-DmSTp9lI.d.mts → provider-gynDUoyW.d.mts} +13 -43
  85. package/dist/{redis-tables-BJQVUspu.mjs → redis-tables-DHf85ixI.mjs} +40 -42
  86. package/dist/{reducer-CjmvZSAb-D_OSISmj.mjs → reducer-Bswr11ar-P324o9vn.mjs} +2 -2
  87. package/dist/{reducer-CYPHsSmd-BQIfozGi.d.mts → reducer-CYPHsSmd-BXjGiptm.d.mts} +1 -1
  88. package/dist/{reducers-DJzVpXwM.mjs → reducers-DcENwtwZ.mjs} +74 -77
  89. package/dist/{retryable-lazy-DZWmHpii-Bye-W8q7.mjs → retryable-lazy-DZWmHpii-DpTc5PIP.mjs} +1 -1
  90. package/dist/{scheduler-task-X1SToDjP-BVoWuInI.mjs → scheduler-task-X1SToDjP-D2Il2rln.mjs} +1 -1
  91. package/dist/{serve-G9RuaDSr.mjs → serve-CTmow-YH.mjs} +7 -7
  92. package/dist/{server-qgez0Xny-D5mLfqFQ.d.mts → server-B9gu0qi1-DI1WvcVK.d.mts} +10 -4
  93. package/dist/{server-BixV_byP.mjs → server-DG8D6VV0.mjs} +4 -4
  94. package/dist/{server-DtFrWxi3-Boa6gdWO.mjs → server-DX7mM6nm-D7N_7bug.mjs} +32 -23
  95. package/dist/{serving-B75Y4BF-.mjs → serving-DBFRo6U_.mjs} +1 -1
  96. package/dist/{session-clear-wHd5GCpZ-BnKSxReK.mjs → session-clear-XJYpmUpg-2q8l_FJR.mjs} +14 -2
  97. package/dist/{sql-D4Z_efJX.mjs → sql-CT5xVuGr.mjs} +2 -8
  98. package/dist/{sqlite-db-Bz2JkfCU.mjs → sqlite-db-0WeSOEZN.mjs} +1 -1
  99. package/dist/{store-D0MhBvg6-4Z2L0Kqd.d.mts → store-DEzcHZOA-B-5vhxef.d.mts} +12 -2
  100. package/dist/store-N8PXxDAS-DWWgv-Vz.mjs +5 -0
  101. package/dist/{store-codec-DwrWlgQx-CYxGW0aD.mjs → store-codec-pAG2oPgQ-SqDXlPBR.mjs} +4 -4
  102. package/dist/store-memory-4IBl0Ztu.mjs +2 -0
  103. package/dist/{store-memory-Bas9Uq5C.mjs → store-memory-B0PkVSuQ.mjs} +14 -7
  104. package/dist/{store-polling-BZt2Rf3D-BiEM6_HB.mjs → store-polling-BZt2Rf3D-Div-bJ_D.mjs} +2 -2
  105. package/dist/{store-presence-polling-JuAy2Ck2-CYpuK75X.mjs → store-presence-polling-JuAy2Ck2-Dh-g_KYM.mjs} +3 -3
  106. package/dist/{store-sqlite-CxxPCcCT.mjs → store-sqlite-D85t3tE7.mjs} +14 -7
  107. package/dist/store-sqlite-iBTYYKBj.mjs +2 -0
  108. package/dist/{stream-buffer-DrTyiIuo-BKy-vI14.mjs → stream-buffer-DrTyiIuo-Be10yOBR.mjs} +2 -2
  109. package/dist/{sync-kapso.d.mts → sync-chat-sdk.d.mts} +33 -37
  110. package/dist/sync-chat-sdk.mjs +44 -0
  111. package/dist/sync-github.d.mts +5 -18
  112. package/dist/sync-github.mjs +4 -70
  113. package/dist/sync-linear.d.mts +3 -3
  114. package/dist/sync-linear.mjs +6 -5
  115. package/dist/sync-slack.d.mts +7 -7
  116. package/dist/sync-slack.mjs +33 -54
  117. package/dist/sync.d.mts +3 -3
  118. package/dist/sync.mjs +2 -4
  119. package/dist/{tokens-CC3izSNr.mjs → tokens-Dnyd_y1n.mjs} +15 -6
  120. package/dist/{types-No0WdhE5.d.mts → types-CmrFjpml.d.mts} +2 -4
  121. package/dist/{watchers-hash-BDhLVkV5.mjs → watchers-hash-BjwlnGD9.mjs} +124 -115
  122. package/docs/01-board/01-mounting.md +2 -2
  123. package/docs/01-board/03-identity.md +5 -6
  124. package/docs/01-board/04-messages.md +96 -2
  125. package/docs/01-board/05-reading.md +2 -1
  126. package/docs/01-board/06-watchers.md +8 -6
  127. package/docs/01-board/08-middleware.md +6 -3
  128. package/docs/01-board/09-access.md +145 -14
  129. package/docs/02-sync/01-overview.md +19 -26
  130. package/docs/02-sync/02-functions.md +8 -9
  131. package/docs/02-sync/03-slack.md +5 -5
  132. package/docs/02-sync/04-github.md +2 -2
  133. package/docs/02-sync/06-providers.md +91 -62
  134. package/docs/03-guides/01-coding-agents.md +1 -1
  135. package/docs/03-guides/03-ci.md +7 -4
  136. package/docs/04-reference/01-cli.md +109 -51
  137. package/docs/04-reference/02-board.md +76 -28
  138. package/docs/04-reference/03-http.md +76 -38
  139. package/docs/04-reference/04-log.md +8 -11
  140. package/docs/04-reference/05-conformance.md +47 -7
  141. package/docs/index.md +2 -2
  142. package/package.json +7 -10
  143. package/sql/postgres/board.sql +1 -1
  144. package/sql/postgres/schema.sql +1 -1
  145. package/dist/conformance-DlnfuzEB.mjs +0 -556
  146. package/dist/errors-CusN4x2l.mjs +0 -88
  147. package/dist/events-qf5XG5VQ.mjs +0 -75
  148. package/dist/exports-mhAYiU4i.d.mts +0 -5
  149. package/dist/store-N8PXxDAS-BWBgzBHp.mjs +0 -5
  150. package/dist/store-memory-ZLiZbH3R.mjs +0 -2
  151. package/dist/store-sqlite-BmwL3pUR.mjs +0 -2
  152. package/dist/sync-kapso.mjs +0 -89
  153. package/dist/sync.chat.d.mts +0 -2
  154. package/dist/sync.chat.mjs +0 -2
  155. package/dist/users-yryHKFMo.mjs +0 -42
  156. package/docs/02-sync/05-whatsapp.md +0 -152
@@ -1,6 +1,6 @@
1
- import { t as Actor, x as Attachment } from "./folds-ZkHM4M-v.mjs";
2
- import { A as InboxItem, B as Me, D as IdentityView, Ft as ThreadView, H as MessagesPage, Ht as UploadTicket, I as LinkedAccount, It as ThreadsPage, K as PersonView, Nt as SyncedView, R as MatchView, S as EventsPage, St as SyncCopiesView, Tt as SyncFindView, V as MessageView, b as Discovery, bt as SyncCodeView, dt as SourceJoin, et as RegistrationView, jt as SyncThreadView, k as InboxEntry, mt as SourceRead, o as ProfileOption, ot as ScheduleView, v as ChannelView } from "./client-BqAjk0Q4.mjs";
3
- import { i as Caller, n as BackendRoute, r as BoardBinding } from "./backend-CPC_vyOo.mjs";
1
+ import { t as Actor, x as Attachment } from "./folds-DLUzfibJ.mjs";
2
+ import { At as ThreadsPage, B as MatchView, C as EventsPage, Dt as SyncedView, Et as SyncThreadView, Ft as TokenView, H as Me, M as InboxItem, U as MessageView, W as MessagesPage, dt as SourceJoin, j as InboxEntry, k as GrantView, kt as ThreadView, mt as SourceRead, o as ProfileOption, st as ScheduleView, tt as RegistrationView, v as ChannelView, vt as SyncCopiesView, x as Discovery, xt as SyncFindView, zt as UploadTicket } from "./client-COfYrgfV.mjs";
3
+ import { i as Caller, n as BackendRoute, r as BoardBinding } from "./backend-Bob-5CM7.mjs";
4
4
  //#region src/server/backend-http.d.ts
5
5
  type HttpOptions = {
6
6
  /**
@@ -46,17 +46,18 @@ declare function createHttp(url: string | undefined, options: HttpOptions, envir
46
46
  channels: ChannelView[];
47
47
  cursor: string;
48
48
  }>;
49
+ createChannel: (caller: Caller, input: {
50
+ path: string;
51
+ }, signal: AbortSignal) => Promise<{
52
+ channel: ChannelView;
53
+ created: boolean;
54
+ }>;
49
55
  actors: (caller: Caller, input: {
50
56
  [x: string]: never;
51
57
  }, signal: AbortSignal) => Promise<{
52
- actors: (Actor & {
53
- person?: PersonView;
54
- })[];
58
+ actors: Actor[];
55
59
  cursor: string;
56
60
  }>;
57
- identity: (caller: Caller, input: {
58
- [x: string]: never;
59
- }, signal: AbortSignal) => Promise<IdentityView>;
60
61
  messages: (caller: Caller, input: {
61
62
  channel?: string | undefined;
62
63
  re?: string | undefined;
@@ -95,6 +96,7 @@ declare function createHttp(url: string | undefined, options: HttpOptions, envir
95
96
  })[] | undefined;
96
97
  id?: string | undefined;
97
98
  attachments?: string[] | undefined;
99
+ after?: string | undefined;
98
100
  }, signal: AbortSignal) => Promise<{
99
101
  message: MessageView;
100
102
  unknownMentions?: string[];
@@ -108,12 +110,15 @@ declare function createHttp(url: string | undefined, options: HttpOptions, envir
108
110
  id: string;
109
111
  } & {
110
112
  text: string;
113
+ revision?: number | undefined;
111
114
  }, signal: AbortSignal) => Promise<{
112
115
  ok: true;
113
116
  unknownMentions?: string[];
114
117
  }>;
115
118
  delete: (caller: Caller, input: {
116
119
  id: string;
120
+ } & {
121
+ revision?: number | undefined;
117
122
  }, signal: AbortSignal) => Promise<{
118
123
  ok: true;
119
124
  }>;
@@ -130,6 +135,7 @@ declare function createHttp(url: string | undefined, options: HttpOptions, envir
130
135
  } & {
131
136
  set?: Record<string, string> | undefined;
132
137
  unset?: string[] | undefined;
138
+ if?: Record<string, string | null> | undefined;
133
139
  }, signal: AbortSignal) => Promise<{
134
140
  ok: true;
135
141
  }>;
@@ -164,6 +170,45 @@ declare function createHttp(url: string | undefined, options: HttpOptions, envir
164
170
  schedule: ScheduleView;
165
171
  canceled: boolean;
166
172
  }>;
173
+ grants: (caller: Caller, input: {
174
+ [x: string]: never;
175
+ }, signal: AbortSignal) => Promise<{
176
+ grants: GrantView[];
177
+ }>;
178
+ createGrant: (caller: Caller, input: {
179
+ issuer: string;
180
+ claims: Record<string, string | string[]>;
181
+ can?: "all" | string[] | Record<string, "all" | string[]> | undefined;
182
+ }, signal: AbortSignal) => Promise<{
183
+ grant: GrantView;
184
+ created: boolean;
185
+ }>;
186
+ revokeGrant: (caller: Caller, input: {
187
+ id: string;
188
+ }, signal: AbortSignal) => Promise<{
189
+ revoked: boolean;
190
+ }>;
191
+ tokens: (caller: Caller, input: {
192
+ [x: string]: never;
193
+ }, signal: AbortSignal) => Promise<{
194
+ tokens: TokenView[];
195
+ }>;
196
+ createToken: (caller: Caller, input: {
197
+ name: string;
198
+ can?: "all" | string[] | Record<string, "all" | string[]> | undefined;
199
+ profile?: string | undefined;
200
+ avatar?: string | undefined;
201
+ session?: string | undefined;
202
+ expires?: string | undefined;
203
+ }, signal: AbortSignal) => Promise<{
204
+ token: TokenView;
205
+ secret: string;
206
+ }>;
207
+ revokeToken: (caller: Caller, input: {
208
+ id: string;
209
+ }, signal: AbortSignal) => Promise<{
210
+ revoked: boolean;
211
+ }>;
167
212
  upload: (caller: Caller, input: {
168
213
  data: Uint8Array;
169
214
  name: string | null;
@@ -181,6 +226,7 @@ declare function createHttp(url: string | undefined, options: HttpOptions, envir
181
226
  name?: string | null | undefined;
182
227
  type?: string | null | undefined;
183
228
  size: number;
229
+ sha256?: string | undefined;
184
230
  }, signal: AbortSignal) => Promise<UploadTicket>;
185
231
  uploadFinish: (caller: Caller, input: {
186
232
  id: string;
@@ -200,7 +246,6 @@ declare function createHttp(url: string | undefined, options: HttpOptions, envir
200
246
  sync?: {
201
247
  key: string;
202
248
  platform: string;
203
- signIn: boolean;
204
249
  }[] | undefined;
205
250
  url?: string | null | undefined;
206
251
  path?: null | undefined;
@@ -213,7 +258,6 @@ declare function createHttp(url: string | undefined, options: HttpOptions, envir
213
258
  sync?: {
214
259
  key: string;
215
260
  platform: string;
216
- signIn: boolean;
217
261
  }[] | undefined;
218
262
  url?: null | undefined;
219
263
  path: string;
@@ -314,6 +358,7 @@ declare function createHttp(url: string | undefined, options: HttpOptions, envir
314
358
  message: string | null;
315
359
  }[] | undefined;
316
360
  id?: string | undefined;
361
+ after?: string | undefined;
317
362
  } | {
318
363
  author: {
319
364
  id: string;
@@ -335,6 +380,7 @@ declare function createHttp(url: string | undefined, options: HttpOptions, envir
335
380
  channel: string;
336
381
  thread: string;
337
382
  } | undefined;
383
+ revision?: number | undefined;
338
384
  } | {
339
385
  author: {
340
386
  id: string;
@@ -350,6 +396,7 @@ declare function createHttp(url: string | undefined, options: HttpOptions, envir
350
396
  } | undefined;
351
397
  message?: string | undefined;
352
398
  op: "delete";
399
+ revision?: number | undefined;
353
400
  } | {
354
401
  author: {
355
402
  id: string;
@@ -384,6 +431,7 @@ declare function createHttp(url: string | undefined, options: HttpOptions, envir
384
431
  op: "labels";
385
432
  set?: Record<string, string> | undefined;
386
433
  unset?: string[] | undefined;
434
+ if?: Record<string, string | null> | undefined;
387
435
  } | {
388
436
  author: {
389
437
  id: string;
@@ -433,7 +481,6 @@ declare function createHttp(url: string | undefined, options: HttpOptions, envir
433
481
  external: {
434
482
  thread: string;
435
483
  message: string;
436
- asUser?: true | undefined;
437
484
  };
438
485
  files?: string[] | null | undefined;
439
486
  } | {
@@ -460,22 +507,13 @@ declare function createHttp(url: string | undefined, options: HttpOptions, envir
460
507
  thread: string;
461
508
  }, signal: AbortSignal) => Promise<SyncThreadView>;
462
509
  syncFind: (caller: Caller, input: {
463
- code?: string | undefined;
464
510
  post?: string | undefined;
465
511
  thread?: string | undefined;
466
512
  message?: string | undefined;
467
- account?: string | undefined;
468
- person?: string | undefined;
469
513
  }, signal: AbortSignal) => Promise<SyncFindView>;
470
514
  syncCopies: (caller: Caller, input: {
471
515
  message: string[];
472
516
  }, signal: AbortSignal) => Promise<SyncCopiesView>;
473
- syncRoots: (caller: Caller, input: {
474
- by: string;
475
- since: number;
476
- }, signal: AbortSignal) => Promise<{
477
- roots: MessageView[];
478
- }>;
479
517
  inboxPush: (caller: Caller, input: {
480
518
  key: string;
481
519
  } & {
@@ -621,30 +659,6 @@ declare function createHttp(url: string | undefined, options: HttpOptions, envir
621
659
  }, signal: AbortSignal) => Promise<{
622
660
  events: InboxEntry[];
623
661
  }>;
624
- syncCode: (caller: Caller, input: {
625
- sync: string;
626
- }, signal: AbortSignal) => Promise<SyncCodeView>;
627
- syncAccount: (caller: Caller, input: {
628
- sync: string;
629
- account: {
630
- id: string;
631
- handle: string;
632
- name: string;
633
- isBot: boolean;
634
- avatar: string | null;
635
- };
636
- code: string;
637
- message?: string | undefined;
638
- method?: "code" | "consent" | undefined;
639
- }, signal: AbortSignal) => Promise<{
640
- person: string;
641
- link: LinkedAccount;
642
- }>;
643
- syncUnlink: (caller: Caller, input: {
644
- account: string;
645
- }, signal: AbortSignal) => Promise<{
646
- ok: true;
647
- }>;
648
662
  routes: BackendRoute[];
649
663
  keeps: boolean;
650
664
  bind(next: BoardBinding): void;
@@ -1,9 +1,8 @@
1
1
  import "./files-SniSmeEr.mjs";
2
2
  import "./schemas-DBmUO6pr.mjs";
3
- import { K as routes, O as RegisterBody, a as METHODS, n as compileWatcher, t as canonicalWatchers } from "./watchers-hash-BDhLVkV5.mjs";
4
- import { n as createBoardClient, t as BoardError } from "./client-D0Px7KzF.mjs";
3
+ import { A as RegisterBody, W as routes, a as METHODS, n as compileWatcher, t as canonicalWatchers } from "./watchers-hash-BjwlnGD9.mjs";
4
+ import { a as forbidden, d as createBoardClient, o as json, t as HttpError, u as BoardError } from "./errors-CJXhhzvT.mjs";
5
5
  import { a as keyId, n as DERIVED_ID, o as sha256, r as derivedId, t as waitUntil } from "./wait-until-Dw4XrIDQ.mjs";
6
- import { a as forbidden, o as json, t as HttpError } from "./errors-CusN4x2l.mjs";
7
6
  //#region src/server/registrant.ts
8
7
  /** Registering again this soon after the same registration only repeats it. */
9
8
  const REGISTER_EVERY_MS = 1e4;
@@ -187,12 +186,12 @@ const PROFILE = /^[A-Za-z][A-Za-z0-9-]{0,31}$/;
187
186
  const PROFILE_RULE = "ids start with a letter and use up to 32 letters, numbers, and hyphens";
188
187
  /**
189
188
  * What a board's own callers can't do on the board it uses, where they act as its project: what's
190
- * the project's own there (its registration, its sync, its links), and what's anyone's own there by
189
+ * the project's own there (its registration, its sync, its links, who it trusts and the tokens it
190
+ * mints, which would act as the project), and what's anyone's own there by
191
191
  * principal (editing, deleting, scheduling, and uploading, since a file is its uploader's to read
192
192
  * and attach until a message carries it), which the board it uses can't tell them apart for.
193
193
  */
194
194
  const PROJECTS_OWN = /* @__PURE__ */ new Set([
195
- "identity",
196
195
  "edit",
197
196
  "delete",
198
197
  "schedule",
@@ -204,19 +203,21 @@ const PROJECTS_OWN = /* @__PURE__ */ new Set([
204
203
  "register",
205
204
  "matches",
206
205
  "ack",
206
+ "grants",
207
+ "createGrant",
208
+ "revokeGrant",
209
+ "tokens",
210
+ "createToken",
211
+ "revokeToken",
207
212
  "syncImport",
208
213
  "syncReceipt",
209
214
  "syncThread",
210
215
  "syncFind",
211
216
  "syncCopies",
212
- "syncRoots",
213
217
  "inboxPush",
214
218
  "inboxNext",
215
219
  "inboxAck",
216
- "inbox",
217
- "syncCode",
218
- "syncAccount",
219
- "syncUnlink"
220
+ "inbox"
220
221
  ]);
221
222
  /**
222
223
  * A caller's handle as a profile on the board this one uses: `ada`, `ada-lovelace` for
@@ -1,5 +1,5 @@
1
- import { r as createHttp } from "./backend-http-CzIJMm58.mjs";
2
- import { i as environmentProfile, n as boardUrl, r as connect } from "./node-Zd_C-gxP.mjs";
1
+ import { r as createHttp } from "./backend-http-CvUKOn-m.mjs";
2
+ import { i as environmentProfile, n as boardUrl, r as connect } from "./node-BgeGcwX0.mjs";
3
3
  //#region src/backend-http/index.ts
4
4
  const environment = {
5
5
  url: boardUrl,
@@ -1,4 +1,4 @@
1
- import { n as HttpOptions, t as HttpBackend } from "./backend-http-CqfKhrnn.mjs";
1
+ import { n as HttpOptions, t as HttpBackend } from "./backend-http-BRrRbjRx.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
@@ -1,2 +1,2 @@
1
- import { t as http } from "./index.default-rB8sJ9RX.mjs";
1
+ import { t as http } from "./index.default-BUcwDaAe.mjs";
2
2
  export { http };
@@ -1,4 +1,4 @@
1
- import { n as HttpOptions, t as HttpBackend } from "./backend-http-CqfKhrnn.mjs";
1
+ import { n as HttpOptions, t as HttpBackend } from "./backend-http-BRrRbjRx.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-Bmp0IgD3.mjs";
1
+ import { t as http } from "./backend-http-D8mUzuKQ.mjs";
2
2
  export { http };
@@ -1,6 +1,6 @@
1
- import { t as HttpError } from "./errors-CusN4x2l.mjs";
2
- import { c as loginHanded, d as vercelProjectFile, i as environmentProfile, t as asYou, u as vercelLogin } from "./node-Zd_C-gxP.mjs";
3
- import { t as createVercel } from "./backend-vercel-BNauAs7w.mjs";
1
+ import { t as HttpError } from "./errors-CJXhhzvT.mjs";
2
+ import { c as loginHanded, d as vercelProjectFile, i as environmentProfile, t as asYou, u as vercelLogin } from "./node-BgeGcwX0.mjs";
3
+ import { t as createVercel } from "./backend-vercel-CmY9yZ9m.mjs";
4
4
  import { readFile } from "node:fs/promises";
5
5
  import { decodeJwt } from "jose";
6
6
  import { getVercelOidcToken } from "@vercel/oidc";
@@ -1,6 +1,6 @@
1
- import { t as Actor, x as Attachment } from "./folds-ZkHM4M-v.mjs";
2
- import { A as InboxItem, B as Me, D as IdentityView, Ft as ThreadView, H as MessagesPage, Ht as UploadTicket, I as LinkedAccount, It as ThreadsPage, K as PersonView, Nt as SyncedView, R as MatchView, S as EventsPage, St as SyncCopiesView, Tt as SyncFindView, V as MessageView, b as Discovery, bt as SyncCodeView, dt as SourceJoin, et as RegistrationView, jt as SyncThreadView, k as InboxEntry, mt as SourceRead, o as ProfileOption, ot as ScheduleView, v as ChannelView } from "./client-BqAjk0Q4.mjs";
3
- import { i as Caller, n as BackendRoute, r as BoardBinding } from "./backend-CPC_vyOo.mjs";
1
+ import { t as Actor, x as Attachment } from "./folds-DLUzfibJ.mjs";
2
+ import { At as ThreadsPage, B as MatchView, C as EventsPage, Dt as SyncedView, Et as SyncThreadView, Ft as TokenView, H as Me, M as InboxItem, U as MessageView, W as MessagesPage, dt as SourceJoin, j as InboxEntry, k as GrantView, kt as ThreadView, mt as SourceRead, o as ProfileOption, st as ScheduleView, tt as RegistrationView, v as ChannelView, vt as SyncCopiesView, x as Discovery, xt as SyncFindView, zt as UploadTicket } from "./client-COfYrgfV.mjs";
3
+ import { i as Caller, n as BackendRoute, r as BoardBinding } from "./backend-Bob-5CM7.mjs";
4
4
  //#region src/server/backend-vercel.d.ts
5
5
  type VercelOptions = {
6
6
  /** The team whose board it is: its ID (`team_…`) or its slug. In Node, by default your deployment's, or `VERCEL_ORG_ID`. */
@@ -31,8 +31,8 @@ type VercelEnvironment = {
31
31
  };
32
32
  /**
33
33
  * Vercel's board for your team, in Vercel's API: this deployment keeps nothing and reads and writes
34
- * it as itself, its people as themselves. Messages, threads, reactions, labels, and a channel's
35
- * changes work; what the API keeps none of yet (schedules, files, watchers, sync) answers 501.
34
+ * it as itself, its people as themselves. Messages, threads, reactions, labels, a channel's
35
+ * changes, schedules, files, and watchers work; what the API keeps none of yet (sync) answers 501.
36
36
  */
37
37
  declare function createVercel(options: VercelOptions, environment: VercelEnvironment | null): {
38
38
  discovery: (caller: Caller, input: {
@@ -47,17 +47,18 @@ declare function createVercel(options: VercelOptions, environment: VercelEnviron
47
47
  channels: ChannelView[];
48
48
  cursor: string;
49
49
  }>;
50
+ createChannel: (caller: Caller, input: {
51
+ path: string;
52
+ }, signal: AbortSignal) => Promise<{
53
+ channel: ChannelView;
54
+ created: boolean;
55
+ }>;
50
56
  actors: (caller: Caller, input: {
51
57
  [x: string]: never;
52
58
  }, signal: AbortSignal) => Promise<{
53
- actors: (Actor & {
54
- person?: PersonView;
55
- })[];
59
+ actors: Actor[];
56
60
  cursor: string;
57
61
  }>;
58
- identity: (caller: Caller, input: {
59
- [x: string]: never;
60
- }, signal: AbortSignal) => Promise<IdentityView>;
61
62
  messages: (caller: Caller, input: {
62
63
  channel?: string | undefined;
63
64
  re?: string | undefined;
@@ -96,6 +97,7 @@ declare function createVercel(options: VercelOptions, environment: VercelEnviron
96
97
  })[] | undefined;
97
98
  id?: string | undefined;
98
99
  attachments?: string[] | undefined;
100
+ after?: string | undefined;
99
101
  }, signal: AbortSignal) => Promise<{
100
102
  message: MessageView;
101
103
  unknownMentions?: string[];
@@ -109,12 +111,15 @@ declare function createVercel(options: VercelOptions, environment: VercelEnviron
109
111
  id: string;
110
112
  } & {
111
113
  text: string;
114
+ revision?: number | undefined;
112
115
  }, signal: AbortSignal) => Promise<{
113
116
  ok: true;
114
117
  unknownMentions?: string[];
115
118
  }>;
116
119
  delete: (caller: Caller, input: {
117
120
  id: string;
121
+ } & {
122
+ revision?: number | undefined;
118
123
  }, signal: AbortSignal) => Promise<{
119
124
  ok: true;
120
125
  }>;
@@ -131,6 +136,7 @@ declare function createVercel(options: VercelOptions, environment: VercelEnviron
131
136
  } & {
132
137
  set?: Record<string, string> | undefined;
133
138
  unset?: string[] | undefined;
139
+ if?: Record<string, string | null> | undefined;
134
140
  }, signal: AbortSignal) => Promise<{
135
141
  ok: true;
136
142
  }>;
@@ -165,6 +171,45 @@ declare function createVercel(options: VercelOptions, environment: VercelEnviron
165
171
  schedule: ScheduleView;
166
172
  canceled: boolean;
167
173
  }>;
174
+ grants: (caller: Caller, input: {
175
+ [x: string]: never;
176
+ }, signal: AbortSignal) => Promise<{
177
+ grants: GrantView[];
178
+ }>;
179
+ createGrant: (caller: Caller, input: {
180
+ issuer: string;
181
+ claims: Record<string, string | string[]>;
182
+ can?: "all" | string[] | Record<string, "all" | string[]> | undefined;
183
+ }, signal: AbortSignal) => Promise<{
184
+ grant: GrantView;
185
+ created: boolean;
186
+ }>;
187
+ revokeGrant: (caller: Caller, input: {
188
+ id: string;
189
+ }, signal: AbortSignal) => Promise<{
190
+ revoked: boolean;
191
+ }>;
192
+ tokens: (caller: Caller, input: {
193
+ [x: string]: never;
194
+ }, signal: AbortSignal) => Promise<{
195
+ tokens: TokenView[];
196
+ }>;
197
+ createToken: (caller: Caller, input: {
198
+ name: string;
199
+ can?: "all" | string[] | Record<string, "all" | string[]> | undefined;
200
+ profile?: string | undefined;
201
+ avatar?: string | undefined;
202
+ session?: string | undefined;
203
+ expires?: string | undefined;
204
+ }, signal: AbortSignal) => Promise<{
205
+ token: TokenView;
206
+ secret: string;
207
+ }>;
208
+ revokeToken: (caller: Caller, input: {
209
+ id: string;
210
+ }, signal: AbortSignal) => Promise<{
211
+ revoked: boolean;
212
+ }>;
168
213
  upload: (caller: Caller, input: {
169
214
  data: Uint8Array;
170
215
  name: string | null;
@@ -182,6 +227,7 @@ declare function createVercel(options: VercelOptions, environment: VercelEnviron
182
227
  name?: string | null | undefined;
183
228
  type?: string | null | undefined;
184
229
  size: number;
230
+ sha256?: string | undefined;
185
231
  }, signal: AbortSignal) => Promise<UploadTicket>;
186
232
  uploadFinish: (caller: Caller, input: {
187
233
  id: string;
@@ -201,7 +247,6 @@ declare function createVercel(options: VercelOptions, environment: VercelEnviron
201
247
  sync?: {
202
248
  key: string;
203
249
  platform: string;
204
- signIn: boolean;
205
250
  }[] | undefined;
206
251
  url?: string | null | undefined;
207
252
  path?: null | undefined;
@@ -214,7 +259,6 @@ declare function createVercel(options: VercelOptions, environment: VercelEnviron
214
259
  sync?: {
215
260
  key: string;
216
261
  platform: string;
217
- signIn: boolean;
218
262
  }[] | undefined;
219
263
  url?: null | undefined;
220
264
  path: string;
@@ -315,6 +359,7 @@ declare function createVercel(options: VercelOptions, environment: VercelEnviron
315
359
  message: string | null;
316
360
  }[] | undefined;
317
361
  id?: string | undefined;
362
+ after?: string | undefined;
318
363
  } | {
319
364
  author: {
320
365
  id: string;
@@ -336,6 +381,7 @@ declare function createVercel(options: VercelOptions, environment: VercelEnviron
336
381
  channel: string;
337
382
  thread: string;
338
383
  } | undefined;
384
+ revision?: number | undefined;
339
385
  } | {
340
386
  author: {
341
387
  id: string;
@@ -351,6 +397,7 @@ declare function createVercel(options: VercelOptions, environment: VercelEnviron
351
397
  } | undefined;
352
398
  message?: string | undefined;
353
399
  op: "delete";
400
+ revision?: number | undefined;
354
401
  } | {
355
402
  author: {
356
403
  id: string;
@@ -385,6 +432,7 @@ declare function createVercel(options: VercelOptions, environment: VercelEnviron
385
432
  op: "labels";
386
433
  set?: Record<string, string> | undefined;
387
434
  unset?: string[] | undefined;
435
+ if?: Record<string, string | null> | undefined;
388
436
  } | {
389
437
  author: {
390
438
  id: string;
@@ -434,7 +482,6 @@ declare function createVercel(options: VercelOptions, environment: VercelEnviron
434
482
  external: {
435
483
  thread: string;
436
484
  message: string;
437
- asUser?: true | undefined;
438
485
  };
439
486
  files?: string[] | null | undefined;
440
487
  } | {
@@ -461,22 +508,13 @@ declare function createVercel(options: VercelOptions, environment: VercelEnviron
461
508
  thread: string;
462
509
  }, signal: AbortSignal) => Promise<SyncThreadView>;
463
510
  syncFind: (caller: Caller, input: {
464
- code?: string | undefined;
465
511
  post?: string | undefined;
466
512
  thread?: string | undefined;
467
513
  message?: string | undefined;
468
- account?: string | undefined;
469
- person?: string | undefined;
470
514
  }, signal: AbortSignal) => Promise<SyncFindView>;
471
515
  syncCopies: (caller: Caller, input: {
472
516
  message: string[];
473
517
  }, signal: AbortSignal) => Promise<SyncCopiesView>;
474
- syncRoots: (caller: Caller, input: {
475
- by: string;
476
- since: number;
477
- }, signal: AbortSignal) => Promise<{
478
- roots: MessageView[];
479
- }>;
480
518
  inboxPush: (caller: Caller, input: {
481
519
  key: string;
482
520
  } & {
@@ -622,32 +660,9 @@ declare function createVercel(options: VercelOptions, environment: VercelEnviron
622
660
  }, signal: AbortSignal) => Promise<{
623
661
  events: InboxEntry[];
624
662
  }>;
625
- syncCode: (caller: Caller, input: {
626
- sync: string;
627
- }, signal: AbortSignal) => Promise<SyncCodeView>;
628
- syncAccount: (caller: Caller, input: {
629
- sync: string;
630
- account: {
631
- id: string;
632
- handle: string;
633
- name: string;
634
- isBot: boolean;
635
- avatar: string | null;
636
- };
637
- code: string;
638
- message?: string | undefined;
639
- method?: "code" | "consent" | undefined;
640
- }, signal: AbortSignal) => Promise<{
641
- person: string;
642
- link: LinkedAccount;
643
- }>;
644
- syncUnlink: (caller: Caller, input: {
645
- account: string;
646
- }, signal: AbortSignal) => Promise<{
647
- ok: true;
648
- }>;
649
663
  routes: BackendRoute[];
650
664
  keeps: boolean;
665
+ sendsSchedulesHere: boolean;
651
666
  bind(next: BoardBinding): void;
652
667
  /** Registers this board's watchers with Vercel's API now, as `POST /watchers` does. */
653
668
  registerWatchers: () => Promise<RegistrationView>;