@vercel/board 0.15.0 → 0.17.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 (130) hide show
  1. package/README.md +27 -27
  2. package/dist/{a2-DYGYankn.mjs → a2-Bck5x1Kh.mjs} +969 -25
  3. package/dist/access.d.mts +5 -4
  4. package/dist/access.mjs +3 -3
  5. package/dist/{actors-rdN4dDTU.mjs → actors-BOamkEuz.mjs} +7 -76
  6. package/dist/attempts-CLG840Oj.mjs +20 -0
  7. package/dist/{auth-wHFcAte3.d.mts → auth-CU56Q2Xh.d.mts} +2 -1
  8. package/dist/{auth-COzc09sn.mjs → auth-Drg9FiC2.mjs} +225 -2
  9. package/dist/backend-B-SJ7p6p.d.mts +680 -0
  10. package/dist/backend-a2/contract.d.mts +873 -2
  11. package/dist/backend-a2/contract.mjs +2 -2
  12. package/dist/backend-a2/scheduler-local.d.mts +1 -1
  13. package/dist/backend-a2/scheduler-local.mjs +1 -1
  14. package/dist/backend-a2/scheduler-qstash.d.mts +78 -1
  15. package/dist/backend-a2/scheduler-qstash.mjs +521 -1
  16. package/dist/backend-a2/scheduler-vercel.d.mts +37 -1
  17. package/dist/backend-a2/scheduler-vercel.mjs +203 -1
  18. package/dist/backend-a2/store-memory.d.mts +2 -2
  19. package/dist/backend-a2/store-memory.mjs +3 -3
  20. package/dist/backend-a2/store-postgres.d.mts +1 -1
  21. package/dist/backend-a2/store-postgres.mjs +2850 -2
  22. package/dist/backend-a2/store-redis-http.d.mts +1 -1
  23. package/dist/backend-a2/store-redis-http.mjs +490 -2
  24. package/dist/backend-a2/store-redis.d.mts +10 -2
  25. package/dist/backend-a2/store-redis.mjs +51 -2
  26. package/dist/backend-a2/store-sqlite.d.mts +1 -1
  27. package/dist/backend-a2/store-sqlite.mjs +3 -3
  28. package/dist/backend-a2.d.mts +2706 -3
  29. package/dist/backend-a2.mjs +1 -1
  30. package/dist/{backend-http-8ex5g7Wv.d.mts → backend-http-7cNb8nJI.d.mts} +10 -3
  31. package/dist/{backend-http-BsDSgmeo.mjs → backend-http-C5I7Wfdw.mjs} +2 -2
  32. package/dist/{backend-http-Cv6xbEy9.mjs → backend-http-CuUIACCs.mjs} +32 -3
  33. package/dist/backend-http.d.mts +1 -1
  34. package/dist/backend-http.mjs +1 -1
  35. package/dist/backend-http.node.d.mts +1 -1
  36. package/dist/backend-http.node.mjs +1 -1
  37. package/dist/{chat-provider-XCnQlxq6.d.mts → chat-provider-DNJQyajS.d.mts} +16 -4
  38. package/dist/{chat-provider-jFSeyNmB.mjs → chat-provider-YHy-WbrB.mjs} +15 -9
  39. package/dist/cli.mjs +30 -10
  40. package/dist/{client-DGDPaN7U.mjs → client-BA-J7usH.mjs} +10 -2
  41. package/dist/{conformance-DRR23YNy.mjs → conformance-CT5EeHeC.mjs} +5 -2
  42. package/dist/conformance.d.mts +1 -1
  43. package/dist/conformance.mjs +1 -1
  44. package/dist/{engine-3EvQ8idk.mjs → engine-D0oBUBEK.mjs} +249 -163
  45. package/dist/events-CewD4kw7.mjs +75 -0
  46. package/dist/{exports-CyY3_FjZ.mjs → exports-DOdA7KhF.mjs} +35 -32
  47. package/dist/exports-ZsgjzEnM.d.mts +4 -0
  48. package/dist/external-BV_cUncs.mjs +151 -0
  49. package/dist/folds-CRYY14kc.d.mts +534 -0
  50. package/dist/{reducers-mUPFuFJV.mjs → folds-Dyjput8M.mjs} +6 -73
  51. package/dist/ids-C6AYo1bu.mjs +31 -0
  52. package/dist/index.d.mts +5 -5
  53. package/dist/{index.default-BZ3lItjH.mjs → index.default-n4qKN7EL.mjs} +1 -1
  54. package/dist/index.mjs +5 -5
  55. package/dist/index.node.d.mts +5 -5
  56. package/dist/index.node.mjs +3 -3
  57. package/dist/inspect/app.js +31 -31
  58. package/dist/inspect/engine.js +5 -5
  59. package/dist/internal-CvsrprnU-CRY89I-b.mjs +203 -0
  60. package/dist/{local-Cr_dSjvs.mjs → local-DhkrAqPP.mjs} +1 -1
  61. package/dist/mentions-CB6ShY4R.mjs +72 -0
  62. package/dist/{targets-ojFEXEyN.mjs → middleware-CqaCwucP.mjs} +1 -33
  63. package/dist/platform-B4TnJtWu-CwcTyKg2.mjs +32 -0
  64. package/dist/{project-CFiArraX.mjs → project-DMDST9kl.mjs} +1 -1
  65. package/dist/{provider-BGjz-mDa.d.mts → provider-B0b9Qxw4.d.mts} +170 -40
  66. package/dist/provider-B3DpYSDq.mjs +220 -0
  67. package/dist/redis-tables-DN9PfIDi.mjs +3897 -0
  68. package/dist/reducer-CYPHsSmd-BQIfozGi.d.mts +170 -0
  69. package/dist/reducer-CjmvZSAb-D_OSISmj.mjs +74 -0
  70. package/dist/{contract-CuJmlrhw.mjs → reducers-BFmIXilu.mjs} +260 -287
  71. package/dist/retryable-lazy-DZWmHpii-Bye-W8q7.mjs +19 -0
  72. package/dist/scheduler-task-X1SToDjP-BVoWuInI.mjs +69 -0
  73. package/dist/{serve-Ccbb2LSb.mjs → serve-CNYvA4pT.mjs} +5 -5
  74. package/dist/server-DtFrWxi3-Boa6gdWO.mjs +3602 -0
  75. package/dist/server-qgez0Xny-D5mLfqFQ.d.mts +385 -0
  76. package/dist/{server-Cxey38B-.mjs → server-snYFkITb.mjs} +4 -4
  77. package/dist/{serving-BNbzc96L.mjs → serving-CNkgUPW1.mjs} +1 -1
  78. package/dist/session-clear-wHd5GCpZ-BnKSxReK.mjs +51 -0
  79. package/dist/{sql-DbiEnqM0.mjs → sql-U9WTxrwJ.mjs} +2 -2
  80. package/dist/{sqlite-db-Cbj03vmp.mjs → sqlite-db-Ds4majtT.mjs} +1 -1
  81. package/dist/store-D0MhBvg6-4Z2L0Kqd.d.mts +530 -0
  82. package/dist/store-N8PXxDAS-BWBgzBHp.mjs +5 -0
  83. package/dist/store-codec-DwrWlgQx-CYxGW0aD.mjs +61 -0
  84. package/dist/store-memory-Bas9Uq5C.mjs +872 -0
  85. package/dist/store-memory-ZLiZbH3R.mjs +2 -0
  86. package/dist/store-polling-BZt2Rf3D-BiEM6_HB.mjs +148 -0
  87. package/dist/store-presence-polling-JuAy2Ck2-CYpuK75X.mjs +109 -0
  88. package/dist/store-sqlite-BmwL3pUR.mjs +2 -0
  89. package/dist/store-sqlite-CxxPCcCT.mjs +1053 -0
  90. package/dist/stream-buffer-DrTyiIuo-BKy-vI14.mjs +53 -0
  91. package/dist/sync-github.d.mts +24 -17
  92. package/dist/sync-github.mjs +89 -22
  93. package/dist/sync-kapso.d.mts +15 -13
  94. package/dist/sync-kapso.mjs +17 -14
  95. package/dist/sync-slack.d.mts +12 -17
  96. package/dist/sync-slack.mjs +54 -42
  97. package/dist/sync.chat.d.mts +1 -1
  98. package/dist/sync.chat.mjs +1 -1
  99. package/dist/sync.d.mts +3 -3
  100. package/dist/sync.mjs +5 -4
  101. package/dist/targets-C-wdR5wP.mjs +33 -0
  102. package/dist/{tokens-DKLn5P9B.mjs → tokens-DhuzKzAl.mjs} +1 -1
  103. package/dist/{types-BHCjTZdB.d.mts → types-8yq2VnKI.d.mts} +2 -2
  104. package/dist/{users-Dls7_ANV.mjs → users-yryHKFMo.mjs} +2 -2
  105. package/dist/{watch-spec-W0c7ypHJ.mjs → watchers-hash-DojIuoFg.mjs} +233 -28
  106. package/docs/01-board/01-mounting.md +1 -1
  107. package/docs/01-board/03-identity.md +3 -1
  108. package/docs/01-board/09-access.md +4 -2
  109. package/docs/02-sync/01-overview.md +69 -47
  110. package/docs/02-sync/02-functions.md +395 -0
  111. package/docs/02-sync/03-slack.md +30 -25
  112. package/docs/02-sync/04-github.md +62 -26
  113. package/docs/02-sync/05-whatsapp.md +23 -19
  114. package/docs/02-sync/06-providers.md +58 -26
  115. package/docs/03-guides/04-triage.md +1 -1
  116. package/docs/04-reference/01-cli.md +26 -6
  117. package/docs/04-reference/02-board.md +18 -5
  118. package/docs/04-reference/03-http.md +6 -3
  119. package/docs/04-reference/05-conformance.md +1 -1
  120. package/docs/index.md +5 -10
  121. package/package.json +22 -6
  122. package/dist/a2-5EG8FkZ8.d.mts +0 -3359
  123. package/dist/access-CJU2-vaa.mjs +0 -226
  124. package/dist/attempts-BQUp9MKO.mjs +0 -919
  125. package/dist/exports-BpgyEdh6.d.mts +0 -4
  126. package/dist/provider-CuewcDNZ.mjs +0 -205
  127. package/dist/redis-tables-B35vv4CZ.mjs +0 -842
  128. package/dist/reducers-B_vUGQRp.d.mts +0 -1172
  129. package/dist/watchers-hash-D9hbHLKB.mjs +0 -225
  130. package/docs/02-sync/02-callbacks.md +0 -265
package/README.md CHANGED
@@ -120,13 +120,13 @@ cursors are next.
120
120
 
121
121
  ## Connect, and post as yourself
122
122
 
123
- With Vercel Connect, a sync entry's `adapter` is just the connector's name;
124
- board builds the Chat SDK adapter, so the app installs no `chat` packages:
123
+ With Vercel Connect, a sync entry's app is just the connector's name; board
124
+ builds the Chat SDK adapter, so the app installs no `chat` packages:
125
125
 
126
126
  ```ts
127
127
  sync: {
128
- slack: slack({ adapter: 'slack/acme', channels: { '#prs': 'prs' } }),
129
- github: github({ adapter: 'github/acme', repos: { 'acme/www': 'prs' } }),
128
+ slack: slack('slack/acme', channels({ '#prs': 'prs' })),
129
+ github: github('github/acme', repos({ 'acme/www': 'prs' })),
130
130
  }
131
131
  ```
132
132
 
@@ -148,33 +148,33 @@ to post as people through your own OAuth. See
148
148
 
149
149
  ## Customize sync
150
150
 
151
- String mappings keep the automatic mirror. Function mappings receive every
152
- incoming event, and delegate what you want to keep:
151
+ Each platform takes one sync function, called for every event in both
152
+ directions. `channels`, `repos`, and `numbers` build it from a map; a value can
153
+ be a function of your own:
153
154
 
154
155
  ```ts
155
- import { github } from '@vercel/board/sync-github'
156
-
157
- github({
158
- adapter: 'github/acme',
159
- repos: {
160
- 'acme/www': async ({ event, board }) => {
161
- const channel = event.subject.type === 'pull_request' ? 'prs' : 'issues'
162
- await board.sync(channel, event, { labels: { area: 'www' } })
163
- },
156
+ import { github, repos } from '@vercel/board/sync-github'
157
+
158
+ github('github/acme', repos({
159
+ 'acme/www': async (sync) => {
160
+ if (sync.direction !== 'in') return
161
+ const channel = sync.event.subject.type === 'pull_request' ? 'prs' : 'issues'
162
+ await sync.import(channel, { labels: { area: 'www' } })
164
163
  },
165
- })
164
+ }))
166
165
  ```
167
166
 
168
- The callback client imports the current verified event with normal provenance,
167
+ `sync.import` brings the current verified event in with normal provenance,
169
168
  media, state reconciliation, and retries. `text` overrides generated text;
170
169
  `root` customizes root creation, including recovery from early comments. A
171
- callback that does not delegate skips that event. `board.sync(messageId, target)`
172
- still attaches a thread; the event-taking overload exists only in a callback.
173
-
174
- Providers also accept `render: ({ message }) => message.text` to omit outbound
175
- attribution while retaining the board's author, media, and copy receipts.
176
- `@vercel/board/sync` exports shared event schemas and the native `SyncProvider`
177
- contract. `@vercel/board/sync/chat` adds `ChatSyncProvider` for Chat SDK integrations.
178
- Providers own stable native event identity; callbacks receive a durable `event.id`
179
- for their own idempotency. See the [sync contract](../../SPEC.md#event-callbacks-and-default-imports)
180
- for callback lifecycle, required SDK client operations, and extension examples.
170
+ function that doesn't import skips that event. Going out, `sync.deliver()`
171
+ sends a board event to the platform thread, and `sync.start(channel)` starts a
172
+ new root's thread; a function that calls neither sends nothing.
173
+
174
+ `render(renderer, fn)` from `@vercel/board/sync` changes outbound attribution for what
175
+ `fn` delivers, while retaining the board's author, media, and copy receipts.
176
+ `@vercel/board/sync` exports shared event schemas, the helpers, and the native
177
+ `SyncProvider` contract. `@vercel/board/sync/chat` adds `ChatSyncProvider` for Chat SDK
178
+ integrations. Providers own stable native event identity; functions receive a
179
+ durable `event.id` for their own idempotency. See the [sync contract](../../SPEC.md#sync-functions-and-default-imports)
180
+ for the function lifecycle, required SDK client operations, and extension examples.