@vercel/board 0.22.0 → 0.24.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/README.md +14 -19
- package/dist/{a2--b1bfuDd.mjs → a2-BxfKZFvJ.mjs} +1 -1
- package/dist/{backend-CWmd4UH-.d.mts → backend-D0GDYiFr.d.mts} +1 -1
- package/dist/backend-a2.d.mts +1 -1
- package/dist/backend-a2.mjs +1 -1
- package/dist/{backend-http-BfWQfvqB.d.mts → backend-http-Dvq2p__1.d.mts} +1 -1
- package/dist/{backend-http-C8Qyk3vj.mjs → backend-http-rfiG-AKP.mjs} +1 -1
- package/dist/{backend-http-DM1T_CP6.mjs → backend-http-tGUo0e8j.mjs} +3 -3
- package/dist/backend-http.d.mts +1 -1
- package/dist/backend-http.mjs +1 -1
- package/dist/backend-http.node.d.mts +2 -2
- package/dist/backend-http.node.mjs +1 -1
- package/dist/{backend-vercel-CYOqtLPc.d.mts → backend-vercel-01QKDobk.d.mts} +1 -1
- package/dist/{backend-vercel-IEtvtvuH.mjs → backend-vercel-C3zuxmcD.mjs} +2 -2
- package/dist/{backend-vercel-zo3wg4nM.mjs → backend-vercel-DM5PyMc2.mjs} +2 -2
- 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/cli-commands.mjs +1 -1
- package/dist/cli-embedded.d.mts +4 -4
- package/dist/cli-embedded.mjs +3 -3
- package/dist/cli.mjs +43 -36
- package/dist/{commands-D_ODblQY.mjs → commands-BtL4jFq8.mjs} +0 -30
- package/dist/conformance.d.mts +1 -1
- package/dist/{exports-ggfE9jNv.d.mts → exports-87_yESpp.d.mts} +1 -1
- package/dist/{exports-C46T5hyQ.mjs → exports-Bw81oDDl.mjs} +1 -1
- package/dist/{index-DsMPCv_K.d.mts → index-B_hWanKF.d.mts} +3 -3
- package/dist/index.d.mts +2 -2
- package/dist/{index.default-B8R696fX.mjs → index.default-B6oPlvEa.mjs} +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.node.d.mts +2 -2
- package/dist/index.node.mjs +1 -1
- package/dist/inspect/app.js +1 -1
- package/dist/{main-CI5fjlpN.mjs → main-CzWvRy91.mjs} +21 -62
- package/dist/{node-BeKPcokJ.mjs → node-CirFYqw0.mjs} +7 -30
- package/dist/{serve-DjnbMvu9.mjs → serve-DHyA-6FR.mjs} +3 -3
- package/dist/{server-B8nEnlMa.mjs → server-Cp2oIQOj.mjs} +3 -3
- package/dist/sync-github.d.mts +1 -1
- package/dist/sync-github.mjs +20 -1
- package/dist/{watchers-hash-D_VYDwvu.mjs → watchers-hash-C_1jGA53.mjs} +2 -2
- package/docs/01-board/01-mounting.md +4 -5
- package/docs/01-quickstart.md +8 -8
- package/docs/02-sync/04-github.md +2 -1
- package/docs/03-guides/01-coding-agents.md +17 -20
- package/docs/03-guides/02-inspector.md +1 -1
- package/docs/04-reference/01-cli.md +17 -39
- package/docs/04-reference/02-board.md +2 -4
- package/docs/index.md +2 -3
- package/package.json +1 -1
package/dist/inspect/app.js
CHANGED
|
@@ -342,7 +342,7 @@ function Mo(e,t){let n=/* @__PURE__ */ No(t=>(t.addIssue=e=>{if(typeof e==`strin
|
|
|
342
342
|
function No(e,t){let n=new cr({check:`custom`,...H(t)});return n._zod.check=e,n}function Po(e,...t){for(let n of t)for(let t of Reflect.ownKeys(n))Object.prototype.propertyIsEnumerable.call(n,t)&&Ke(e,t,n[t]);return e}function Fo(e){let t=e?.target??`draft-2020-12`;return t===`draft-4`&&(t=`draft-04`),t===`draft-7`&&(t=`draft-07`),{processors:e.processors??{},metadataRegistry:e?.metadata??Ta,target:t,unrepresentable:e?.unrepresentable??`throw`,override:e?.override??(()=>{}),io:e?.io??`output`,counter:0,seen:/* @__PURE__ */ new Map,sharedDefsExtractedFor:void 0,sharedEmitDoneFor:void 0,cycles:e?.cycles??`ref`,reused:e?.reused??`inline`,intersections:[],deferred:[],external:e?.external??void 0}}function Io(e,t,n,r,i){let a=typeof t.unrepresentable==`function`?t.unrepresentable({zodSchema:e,path:r.path,message:i}):t.unrepresentable;if(a===`any`)return!1;if(a===void 0||a===`throw`)throw Error(i);return Object.assign(n,a),!0}function Lo(e,t,n={path:[],schemaPath:[]}){var r;let i=e._zod.def,a=t.seen.get(e);if(a)return a.count++,n.schemaPath.includes(e)&&(a.cycle=n.path),a.schema;let o={schema:{},count:1,cycle:void 0,path:n.path};t.seen.set(e,o),t.sharedDefsExtractedFor=void 0,t.sharedEmitDoneFor=void 0;let s=e._zod.toJSONSchema?.();if(s)o.schema=s;else{let r={...n,schemaPath:[...n.schemaPath,e],path:n.path};if(e._zod.processJSONSchema)e._zod.processJSONSchema(t,o.schema,r);else{let n=o.schema,a=t.processors[i.type];if(!a)throw Error(`[toJSONSchema]: Non-representable type encountered: ${i.type}`);a(e,t,n,r)}let a=e._zod.parent;a&&(o.ref||=a,Lo(a,t,r),t.seen.get(a).isParent=!0)}let c=t.metadataRegistry.get(e);return c&&Po(o.schema,c),t.io===`input`&&qo(e)&&(delete o.schema.examples,delete o.schema.default),t.io===`input`&&`_prefault`in o.schema&&((r=o.schema).default??(r.default=o.schema._prefault)),delete o.schema._prefault,t.seen.get(e).schema}function Ro(e){return e.replace(/~/g,`~0`).replace(/\//g,`~1`)}function zo(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);if(e.external&&e.sharedDefsExtractedFor===e.external)return;let r=/* @__PURE__ */ new Map;for(let t of e.seen.entries()){let n=e.metadataRegistry.get(t[0])?.id;if(n){let e=r.get(n);if(e&&e!==t[0])throw Error(`Duplicate schema id "${n}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);r.set(n,t[0])}}let i=t=>{let r=e.target===`draft-2020-12`?`$defs`:`definitions`;if(e.external){let n=e.external.registry.get(t[0])?.id,i=e.external.uri??(e=>e);if(n)return{ref:i(n)};let a=t[1].defId??t[1].schema.id??`schema${e.counter++}`;return t[1].defId=a,{defId:a,ref:`${i(`__shared`)}#/${r}/${Ro(a)}`}}let i=`#/${r}/`;if(t[1]===n&&!t[1].schema.id)return{ref:`#`};let a=t[1].schema.id??`__schema${e.counter++}`;return{defId:a,ref:i+Ro(a)}},a=e=>{if(e[1].schema.$ref)return;let t=e[1],{ref:n,defId:r}=i(e);t.def={...t.schema},r&&(t.defId=r);let a=t.schema;for(let e in a)delete a[e];a.$ref=n};if(e.cycles===`throw`)for(let t of e.seen.entries()){let e=t[1];if(e.cycle)throw Error(`Cycle detected: #/${e.cycle?.join(`/`)}/<root>
|
|
343
343
|
|
|
344
344
|
Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let n of e.seen.entries()){let r=n[1];if(t===n[0]){a(n);continue}if(e.external){let r=e.external.registry.get(n[0])?.id;if(t!==n[0]&&r){a(n);continue}}if(e.metadataRegistry.get(n[0])?.id){a(n);continue}if(r.cycle){a(n);continue}r.count>1&&e.reused===`ref`&&a(n)}e.external&&(e.sharedDefsExtractedFor=e.external)}function Bo(e){let t=e.anyOf;if(!Array.isArray(t)||t.length===0||e.type!==void 0)return;let n=[];for(let e of t){if(!e||typeof e!=`object`)return;Bo(e);let t=Object.keys(e);if(t.length!==1||t[0]!==`type`)return;let r=e.type;for(let e of Array.isArray(r)?r:[r]){if(typeof e!=`string`)return;n.includes(e)||n.push(e)}}delete e.anyOf,e.type=n.length===1?n[0]:n}const Vo=/* @__PURE__ */ new Set([`type`,`properties`,`required`,`additionalProperties`]),Ho=[`oneOf`,`anyOf`];function Uo(e){let t=e.additionalProperties;return t===void 0||t===!1||typeof t!=`object`||!t?null:Object.keys(t).length?t:null}function Wo(e){let t=[];for(let n of e){if(typeof n!=`object`||n.type!==`object`)return null;for(let e in n)if(!Vo.has(e))return null;t.push(n)}let n={},r=/* @__PURE__ */ new Set;for(let e of t){for(let r in e.properties){if(Object.prototype.hasOwnProperty.call(n,r))continue;let e=[];for(let n of t){let t=n.properties?.[r]??Uo(n);t!=null&&(e.some(e=>JSON.stringify(e)===JSON.stringify(t))||e.push(t))}Ke(n,r,e.length===1?e[0]:Wo(e)??{allOf:e})}for(let t of e.required??[])r.add(t)}let i={type:`object`,properties:n};if(r.size&&(i.required=[...r]),t.every(e=>e.additionalProperties===!1))i.additionalProperties=!1;else{let e=[];for(let n of t){let t=Uo(n);t&&!e.some(e=>JSON.stringify(e)===JSON.stringify(t))&&e.push(t)}e.length===1?i.additionalProperties=e[0]:e.length>1&&(i.additionalProperties={allOf:e})}return i}function Go(e){let t=e.allOf;if(!Array.isArray(t)||t.length<2)return;for(let t of Vo)if(t in e)return;let n=t.filter(e=>Ho.some(t=>Array.isArray(e[t]))),r=null;if(!n.length)r=Wo(t);else{let e=n[0],i=Ho.find(t=>Array.isArray(e[t]));if(Object.keys(e).length!==1)return;let a=t.filter(t=>t!==e),o=e[i].map(e=>Wo([...a,e]));if(o.some(e=>!e))return;r={[i]:o}}r&&(delete e.allOf,Po(e,r))}function Ko(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=t=>{let n=e.seen.get(t);if(n.ref===null)return;let i=n.def??n.schema,a={...i},o=n.ref;if(n.ref=null,o){r(o);let n=e.seen.get(o),s=n.schema;if(s.$ref&&(e.target===`draft-07`||e.target===`draft-04`||e.target===`openapi-3.0`)?(i.allOf=i.allOf??[],i.allOf.push(s)):Po(i,s),Po(i,a),t._zod.parent===o)for(let e in i)e!==`$ref`&&e!==`allOf`&&(e in a||delete i[e]);if(s.$ref&&n.def)for(let e in i)e!==`$ref`&&e!==`allOf`&&e in n.def&&JSON.stringify(i[e])===JSON.stringify(n.def[e])&&delete i[e]}let s=t._zod.parent;if(s&&s!==o){r(s);let t=e.seen.get(s);if(t?.schema.$ref&&(i.$ref=t.schema.$ref,t.def))for(let e in i)e!==`$ref`&&e!==`allOf`&&e in t.def&&JSON.stringify(i[e])===JSON.stringify(t.def[e])&&delete i[e]}e.override({zodSchema:t,jsonSchema:i,path:n.path??[]})};if(!e.external||e.sharedEmitDoneFor!==e.external){for(let t of[...e.seen.entries()].reverse())r(t[0]);if(e.target!==`openapi-3.0`)for(let t of e.seen.entries())Bo(t[1].def??t[1].schema);for(let t of e.deferred)t();if(e.intersections.length){let t=/* @__PURE__ */ new Map;for(let n of e.seen.values())for(let e of[n.schema,n.def]){let n=e?.allOf;if(!Array.isArray(n))continue;let r=t.get(n);r?r.push(e):t.set(n,[e])}for(let n of e.intersections)for(let e of t.get(n)??[])Go(e)}}let i={};if(e.target===`draft-2020-12`?i.$schema=`https://json-schema.org/draft/2020-12/schema`:e.target===`draft-07`?i.$schema=`http://json-schema.org/draft-07/schema#`:e.target===`draft-04`?i.$schema=`http://json-schema.org/draft-04/schema#`:e.target,e.external?.uri){let n=e.external.registry.get(t)?.id;if(!n)throw Error("Schema is missing an `id` property");i.$id=e.external.uri(n)}Po(i,n.defId?n.schema:n.def??n.schema);let a=e.metadataRegistry.get(t)?.id;a!==void 0&&i.id===a&&delete i.id;let o=e.external?.defs??{};if(!e.external||e.sharedEmitDoneFor!==e.external)for(let t of e.seen.entries()){let e=t[1];e.def&&e.defId&&(e.def.id===e.defId&&delete e.def.id,Ke(o,e.defId,e.def))}e.external&&(e.sharedEmitDoneFor=e.external),e.external||Object.keys(o).length>0&&(e.target===`draft-2020-12`?i.$defs=o:i.definitions=o);try{let n=JSON.parse(JSON.stringify(i));return Object.defineProperty(n,"~standard",{value:{...t[`~standard`],jsonSchema:{input:Yo(t,`input`,e.processors),output:Yo(t,`output`,e.processors)}},enumerable:!1,writable:!1}),n}catch{throw Error(`Error converting schema to JSON.`)}}function qo(e,t){let n=t??{seen:/* @__PURE__ */ new Set};if(n.seen.has(e))return!1;n.seen.add(e);let r=e._zod.def;if(r.type===`transform`)return!0;if(r.type===`array`)return qo(r.element,n);if(r.type===`set`)return qo(r.valueType,n);if(r.type===`lazy`)return qo(r.getter(),n);if(r.type===`promise`||r.type===`optional`||r.type===`nonoptional`||r.type===`nullable`||r.type===`readonly`||r.type==="default"||r.type===`prefault`||r.type===`catch`)return qo(r.innerType,n);if(r.type===`intersection`)return qo(r.left,n)||qo(r.right,n);if(r.type===`record`||r.type===`map`)return qo(r.keyType,n)||qo(r.valueType,n);if(r.type===`pipe`)return e._zod.traits.has(`$ZodCodec`)?!0:qo(r.in,n)||qo(r.out,n);if(r.type===`object`){for(let e in r.shape)if(qo(r.shape[e],n))return!0;return!1}if(r.type===`union`){for(let e of r.options)if(qo(e,n))return!0;return!1}if(r.type===`tuple`){for(let e of r.items)if(qo(e,n))return!0;return!!(r.rest&&qo(r.rest,n))}return!1}const Jo=(e,t={})=>n=>{let r=Fo({...n,processors:t});return Lo(e,r),zo(r,e),Ko(r,e)},Yo=(e,t,n={})=>r=>{let{libraryOptions:i,target:a}=r??{},o=Fo({...i??{},target:a,io:t,processors:n});return Lo(e,o),zo(o,e),Ko(o,e)},Xo=(e,t,n)=>{(e[t]===void 0||n>e[t])&&(e[t]=n)},Zo=(e,t,n)=>{(e[t]===void 0||n<e[t])&&(e[t]=n)},Qo=(e,t)=>{Xo(e,`minimum`,t),Zo(e,`maximum`,t)},$o=(e,t)=>{e.multipleOf??=[],e.multipleOf.includes(t)||e.multipleOf.push(t)},es=(e,t)=>{e.patterns??=/* @__PURE__ */ new Set,e.patterns.add(t)},ts=(e,t)=>{e.mime=e.mime?e.mime.filter(e=>t.includes(e)):[...t]},ns=(e,t)=>{e.format=t,t.includes(`int`)&&(e.isInt=!0)},rs=(e,t)=>Xo(e,`minimum`,t.minimum),is=(e,t)=>Zo(e,`maximum`,t.maximum),as=e=>(t,n)=>{ns(t,n.format);let[r,i]=e[n.format];Xo(t,`minimum`,r),Zo(t,`maximum`,i)},os={greater_than:(e,t)=>Xo(e,t.inclusive?`minimum`:`exclusiveMinimum`,t.value),less_than:(e,t)=>Zo(e,t.inclusive?`maximum`:`exclusiveMaximum`,t.value),multiple_of:(e,t)=>$o(e,t.value),number_format:as(dt),bigint_format:as(ft),min_length:rs,max_length:is,length_equals:(e,t)=>Qo(e,t.length),min_size:rs,max_size:is,size_equals:(e,t)=>Qo(e,t.size),string_format:(e,t)=>{ns(e,t.format),t.pattern&&es(e,t.pattern),(t.format===`base64`||t.format===`base64url`)&&(e.contentEncoding=t.format),(t.local||t.precision===-1)&&(e.laxFormat=!0)},mime_type:(e,t)=>ts(e,t.mime)};function ss(e){let t={},n=e._zod.def,r=e._zod.traits.has(`$ZodCheck`)?[e,...n.checks??[]]:n.checks??[];for(let e of r)os[e._zod.def.check]?.(t,e._zod.def);let i=e._zod.bag;i.minimum!==void 0&&Xo(t,`minimum`,i.minimum),i.exclusiveMinimum!==void 0&&Xo(t,`exclusiveMinimum`,i.exclusiveMinimum),i.maximum!==void 0&&Zo(t,`maximum`,i.maximum),i.exclusiveMaximum!==void 0&&Zo(t,`exclusiveMaximum`,i.exclusiveMaximum),i.multipleOf!==void 0&&$o(t,i.multipleOf),i.format!==void 0&&(t.format??=i.format,i.format.includes(`int`)&&(t.isInt=!0)),i.mime&&ts(t,i.mime);for(let e of i.patterns??[])es(t,e);return t}const cs={guid:`uuid`,url:`uri`,datetime:`date-time`,json_string:`json-string`,regex:``},ls=/* @__PURE__ */ new Map([[ui,Gn],[fi,Kn]]),us=e=>ls.get(e)??e,ds=(e,t,n,r)=>{let i=n;i.type=`string`;let{minimum:a,maximum:o,format:s,patterns:c,contentEncoding:l,laxFormat:u}=ss(e);if(typeof a==`number`&&(i.minLength=a),typeof o==`number`&&(i.maxLength=o),s&&(i.format=cs[s]??s,i.format===``&&delete i.format,(s===`time`||u)&&delete i.format),l&&(i.contentEncoding=l),c&&c.size>0){let e=[...c].map(us);e.length===1?i.pattern=e[0].source:e.length>1&&(i.allOf=[...e.map(e=>({...t.target===`draft-07`||t.target===`draft-04`||t.target===`openapi-3.0`?{type:`string`}:{},pattern:e.source}))])}},fs=(e,t,n,r)=>{let i=n,{minimum:a,maximum:o,multipleOf:s,exclusiveMaximum:c,exclusiveMinimum:l,isInt:u}=ss(e);i.type=u?`integer`:`number`;let d=typeof l==`number`&&l>=(a??-1/0),f=typeof c==`number`&&c<=(o??1/0),p=t.target===`draft-04`||t.target===`openapi-3.0`;if(d?p?(i.minimum=l,i.exclusiveMinimum=!0):i.exclusiveMinimum=l:typeof a==`number`&&(i.minimum=a),f?p?(i.maximum=c,i.exclusiveMaximum=!0):i.exclusiveMaximum=c:typeof o==`number`&&(i.maximum=o),s){let n=/* @__PURE__ */ new Set;for(let a of s)Number.isFinite(a)&&a!==0?n.add(Math.abs(a)):Io(e,t,i,r,`A multipleOf divisor of ${a} cannot be represented in JSON Schema`);let[a,...o]=n;a!==void 0&&(i.multipleOf=a),o.length&&(i.allOf=[...i.allOf??[],...o.map(e=>({multipleOf:e}))])}},ps=(e,t,n,r)=>{n.type=`boolean`},ms=(e,t,n,r)=>{Io(e,t,n,r,`BigInt cannot be represented in JSON Schema`)},hs=(e,t,n,r)=>{Io(e,t,n,r,`Symbols cannot be represented in JSON Schema`)},gs=(e,t,n,r)=>{t.target===`openapi-3.0`?(n.type=`string`,n.nullable=!0,n.enum=[null]):n.type=`null`},_s=(e,t,n,r)=>{Io(e,t,n,r,`Undefined cannot be represented in JSON Schema`)},vs=(e,t,n,r)=>{Io(e,t,n,r,`Void cannot be represented in JSON Schema`)},ys=(e,t,n,r)=>{n.not={}},bs=(e,t,n,r)=>{},xs=(e,t,n,r)=>{},Ss=(e,t,n,r)=>{Io(e,t,n,r,`Date cannot be represented in JSON Schema`)},Cs=(e,t,n,r)=>{let i=e._zod.def,a=Re(i.entries);if(a.length===0){n.not={};return}a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),n.enum=a},ws=(e,t,n,r)=>{let i=e._zod.def;if(i.values.length===0){n.not={};return}let a=[];for(let o of i.values)if(o===void 0){if(Io(e,t,n,r,"Literal `undefined` cannot be represented in JSON Schema"))return}else if(typeof o==`bigint`){if(Io(e,t,n,r,`BigInt literals cannot be represented in JSON Schema`))return;a.push(Number(o))}else a.push(o);if(a.length!==0){if(a.length===1){let e=a[0];n.type=e===null?`null`:typeof e,t.target===`draft-04`||t.target===`openapi-3.0`?n.enum=[e]:n.const=e}else a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),a.every(e=>typeof e==`boolean`)&&(n.type=`boolean`),a.every(e=>e===null)&&(n.type=`null`),n.enum=a}},Ts=(e,t,n,r)=>{Io(e,t,n,r,`NaN cannot be represented in JSON Schema`)},Es=(e,t,n,r)=>{let i=n,a=e._zod.pattern;if(!a)throw Error(`Pattern not found in template literal`);i.type=`string`,i.pattern=a.source},Ds=(e,t,n,r)=>{let i=n;i.type=`string`,i.format=`binary`,i.contentEncoding=`binary`;let{minimum:a,maximum:o,mime:s}=ss(e);a!==void 0&&(i.minLength=a),o!==void 0&&(i.maxLength=o),s&&(s.length===0?i.not={}:s.length===1?i.contentMediaType=s[0]:i.anyOf=s.map(e=>({contentMediaType:e})))},Os=(e,t,n,r)=>{n.type=`boolean`},ks=(e,t,n,r)=>{Io(e,t,n,r,`Custom types cannot be represented in JSON Schema`)},As=(e,t,n,r)=>{Io(e,t,n,r,`Function types cannot be represented in JSON Schema`)},js=(e,t,n,r)=>{Io(e,t,n,r,`Transforms cannot be represented in JSON Schema`)},Ms=(e,t,n,r)=>{Io(e,t,n,r,`Map cannot be represented in JSON Schema`)},Ns=(e,t,n,r)=>{Io(e,t,n,r,`Set cannot be represented in JSON Schema`)},Ps=(e,t,n,r)=>{let i=n,a=e._zod.def,{minimum:o,maximum:s}=ss(e);typeof o==`number`&&(i.minItems=o),typeof s==`number`&&(i.maxItems=s),i.type=`array`,i.items=Lo(a.element,t,{...r,path:[...r.path,`items`]})};function Fs(e){let t=e._zod.def;return t.type===`pipe`&&t.in._zod.traits.has(`$ZodTransform`)?Fs(t.out):t.type===`catch`?Fs(t.innerType):e._zod.optin}const Is=(e,t,n,r)=>{let i=n,a=e._zod.def,o=a.shape;if(Object.getOwnPropertySymbols(o).length&&Io(e,t,i,r,`Symbol keys cannot be represented in JSON Schema`))return;i.type=`object`,i.properties={};for(let e in o)Ke(i.properties,e,Lo(o[e],t,{...r,path:[...r.path,`properties`,e]}));let s=[];for(let e of Object.keys(o)){let n=a.shape[e];(t.io===`input`?Fs(n)===void 0:n._zod.optout===void 0)&&s.push(e)}s.length>0&&(i.required=s),a.catchall?._zod.def.type===`never`?i.additionalProperties=!1:a.catchall?a.catchall&&(i.additionalProperties=Lo(a.catchall,t,{...r,path:[...r.path,`additionalProperties`]})):t.io===`output`&&(i.additionalProperties=!1)},Ls=(e,t,n,r)=>{let i=e._zod.def,a=i.inclusive===!1,o=i.options.map((e,n)=>Lo(e,t,{...r,path:[...r.path,a?`oneOf`:`anyOf`,n]}));a?n.oneOf=o:n.anyOf=o},Rs=(e,t,n,r)=>{let i=e._zod.def,a=Lo(i.left,t,{...r,path:[...r.path,`allOf`,0]}),o=Lo(i.right,t,{...r,path:[...r.path,`allOf`,1]}),s=e=>`allOf`in e&&Object.keys(e).length===1,c=[...s(a)?a.allOf:[a],...s(o)?o.allOf:[o]];n.allOf=c,t.intersections.push(c)},zs=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`array`;let o=t.target===`draft-2020-12`?`prefixItems`:`items`,s=t.target===`draft-2020-12`||t.target===`openapi-3.0`?`items`:`additionalItems`,c=a.items.map((e,n)=>Lo(e,t,{...r,path:[...r.path,o,n]})),l=a.rest?Lo(a.rest,t,{...r,path:[...r.path,s,...t.target===`openapi-3.0`?[a.items.length]:[]]}):null,u=a.items.length;for(;u>0;){let e=a.items[u-1];if(!(t.io===`input`?Fs(e)!==void 0:e._zod.optout===`optional`))break;u--}let d=a.items.length,f=!a.rest;t.target===`draft-2020-12`?(i.prefixItems=c,f?i.items=!1:l&&(i.items=l),u>0&&(i.minItems=u),f&&(i.maxItems=d)):t.target===`openapi-3.0`?(i.items={anyOf:c},l&&i.items.anyOf.push(l),u>0&&(i.minItems=u),f&&(i.maxItems=d)):(i.items=c,f?i.additionalItems=!1:l&&(i.additionalItems=l),u>0&&(i.minItems=u),f&&(i.maxItems=d));let{minimum:p,maximum:m}=ss(e);typeof p==`number`&&(i.minItems=p),typeof m==`number`&&(i.maxItems=m)};function Bs(e,t,n){if(t.$ref){if(n.has(t))return t;n.add(t);let r=e.get(t)?.def;if(!r)return t;let i=Bs(e,r,n);return i===r?t:i}for(let r of[`anyOf`,`oneOf`]){let i=t[r];if(!Array.isArray(i))continue;let a=i.map(t=>Bs(e,t,n));a.some((e,t)=>e!==i[t])&&(t={...t,[r]:a})}let r=Array.isArray(t.type)?t.type:[t.type],i=!r.includes(`string`)&&r.some(e=>e===`number`||e===`integer`),a=t.enum??(t.const===void 0?void 0:[t.const]);if(!i&&!a?.some(e=>typeof e==`number`))return t;let{minimum:o,maximum:s,exclusiveMinimum:c,exclusiveMaximum:l,multipleOf:u,format:d,id:f,...p}=t;return p.enum?p.enum=p.enum.map(e=>typeof e==`number`?String(e):e):typeof p.const==`number`&&(p.const=String(p.const)),i?(p.type=`string`,a||(p.pattern=(r.includes(`number`)?rr:nr).source),p):p}const Vs=/* @__PURE__ */ new WeakMap;function Hs(e){let t=/* @__PURE__ */ new Map;for(let n of e.seen.values())n.def&&!t.has(n.schema)&&t.set(n.schema,n);let n=/* @__PURE__ */ new Map;for(let r of Vs.get(e)??[]){let i=e.seen.get(r),a=(i?.def??i?.schema)?.propertyNames;if(!a||a===!0||n.has(a))continue;let o=Bs(t,a,/* @__PURE__ */ new Set);o!==a&&n.set(a,o)}if(n.size)for(let t of e.seen.values())for(let e of[t.schema,t.def]){let t=e&&n.get(e.propertyNames);t&&(e.propertyNames=t)}}const Us=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`;let o=a.keyType,s=ss(o).patterns;if(a.mode===`loose`&&s&&s.size>0){let e=Lo(a.valueType,t,{...r,path:[...r.path,`patternProperties`,`*`]});i.patternProperties={};for(let t of s)Ke(i.patternProperties,us(t).source,e)}else{if(t.target===`draft-07`||t.target===`draft-2020-12`){i.propertyNames=Lo(a.keyType,t,{...r,path:[...r.path,`propertyNames`]});let n=Vs.get(t);n||(n=[],Vs.set(t,n),t.deferred.push(()=>Hs(t))),n.push(e)}i.additionalProperties=Lo(a.valueType,t,{...r,path:[...r.path,`additionalProperties`]})}let c=o._zod.values,l=t.io===`input`&&Fs(a.valueType)!==void 0;if(c&&!a.partial&&!l){let e=[...c].filter(e=>typeof e==`string`||typeof e==`number`);e.length>0&&(i.required=e.map(String))}},Ws=(e,t,n,r)=>{let i=e._zod.def,a=Lo(i.innerType,t,r),o=t.seen.get(e);t.target===`openapi-3.0`?(o.ref=i.innerType,n.nullable=!0):n.anyOf=[a,{type:`null`}]},Gs=(e,t,n,r)=>{let i=e._zod.def;Lo(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},Ks=Symbol();function qs(e,t,n,r,i){let a=!1,o=JSON.stringify(e,(e,t)=>typeof t==`bigint`?(a=!0,null):t);return a?(Io(t,n,r,i,`BigInt defaults cannot be represented in JSON Schema`),Ks):JSON.parse(o)}const Js=(e,t,n,r)=>{let i=e._zod.def;Lo(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o=qs(i.defaultValue,e,t,n,r);o!==Ks&&(n.default=o)},Ys=(e,t,n,r)=>{let i=e._zod.def;Lo(i.innerType,t,r);let a=t.seen.get(e);if(a.ref=i.innerType,t.io!==`input`)return;let o=qs(i.defaultValue,e,t,n,r);o!==Ks&&(n._prefault=o)},Xs=(e,t,n,r)=>{let i=e._zod.def;Lo(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o;try{o=i.catchValue(void 0)}catch{Io(e,t,n,r,`Dynamic catch values are not supported in JSON Schema`);return}n.default=o},Zs=(e,t,n,r)=>{let i=e._zod.def,a=i.in._zod.traits.has(`$ZodTransform`),o=t.io===`input`?a?i.out:i.in:i.out;Lo(o,t,r);let s=t.seen.get(e);s.ref=o},Qs=(e,t,n,r)=>{let i=e._zod.def;Lo(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.readOnly=!0},$s=(e,t,n,r)=>{let i=e._zod.def;Lo(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},ec=(e,t,n,r)=>{let i=e._zod.def;Lo(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},tc={string:ds,number:fs,boolean:ps,bigint:ms,symbol:hs,null:gs,undefined:_s,void:vs,never:ys,any:bs,unknown:xs,date:Ss,enum:Cs,literal:ws,nan:Ts,template_literal:Es,file:Ds,success:Os,custom:ks,function:As,transform:js,map:Ms,set:Ns,array:Ps,object:Is,union:Ls,intersection:Rs,tuple:zs,record:Us,nullable:Ws,nonoptional:Gs,default:Js,prefault:Ys,catch:Xs,pipe:Zs,readonly:Qs,promise:$s,optional:ec,lazy:(e,t,n,r)=>{let i=e._zod.innerType;Lo(i,t,r);let a=t.seen.get(e);a.ref=i}};function nc(e,t){if(`_idmap`in e){let n=e,r=Fo({...t,processors:tc}),i={};for(let e of n._idmap.entries()){let[t,n]=e;Lo(n,r)}let a={};r.external={registry:n,uri:t?.uri,defs:i};for(let e of n._idmap.entries()){let[t,n]=e;zo(r,n),Ke(a,t,Ko(r,n))}return Object.keys(i).length>0&&(a.__shared={[r.target===`draft-2020-12`?`$defs`:`definitions`]:i}),{schemas:a}}let n=Fo({...t,processors:tc});return Lo(e,n),zo(n,e),Ko(n,e)}const rc=/* @__PURE__ */ new WeakSet([Object.prototype,Error.prototype]);function ic(e,t,n){Object.defineProperty(e,t,{configurable:!0,enumerable:!1,get(){let e=n(this);return Object.defineProperty(this,t,{value:e,configurable:!0,writable:!0}),e},set(e){Object.defineProperty(this,t,{value:e,configurable:!0,writable:!0})}})}const ac=(e,t)=>{on.init(e,t),e.name=`ZodError`;let n=Object.getPrototypeOf(e);rc.has(n)||(rc.add(n),ic(n,`format`,e=>t=>ln(e,t)),ic(n,`flatten`,e=>t=>cn(e,t)),ic(n,`addIssue`,e=>t=>{e.issues.push(t),e.message=JSON.stringify(e.issues,Be,2)}),ic(n,`addIssues`,e=>t=>{e.issues.push(...t),e.message=JSON.stringify(e.issues,Be,2)}),Object.defineProperty(n,"isEmpty",{configurable:!0,enumerable:!1,get(){return this.issues.length===0}}))},oc=/*@__PURE__*/ W(`ZodError`,ac),sc=/*@__PURE__*/ W(`ZodError`,ac,void 0,{Parent:Error}),cc=/* @__PURE__ */ dn(sc),lc=/* @__PURE__ */ fn(sc),uc=/* @__PURE__ */ pn(sc),dc=/* @__PURE__ */ hn(sc),fc=/* @__PURE__ */ xn(sc),pc=/* @__PURE__ */ Sn(sc),mc=/* @__PURE__ */ Cn(sc),hc=/* @__PURE__ */ wn(sc),gc=/* @__PURE__ */ Tn(sc),_c=/* @__PURE__ */ En(sc),vc=/* @__PURE__ */ Dn(sc),yc=/* @__PURE__ */ On(sc);function bc(){Zt.localeError||Qt(xa())}function xc(){Zt.memoizer||Qt({memoizer:va()})}const Sc=/*@__PURE__*/ W(`ZodType`,(e,t)=>(bc(),Or.init(e,t),e.def=t,e.type=t.type,e),{check(...e){let t=this.def;return this.clone($e(t,{checks:[...t.checks??[],...e.map(e=>typeof e==`function`?{_zod:{check:e,def:{check:`custom`},onattach:[]}}:e)]}),{parent:!0})},with(...e){return this.check(...e)},clone(e,t){return lt(this,e,t)},brand(){return this},register(e,t){return e.add(this,t),this},refine(e,t){return this.check(Wl(e,t))},superRefine(e,t){return this.check(Gl(e,t))},overwrite(e){return this.check(/* @__PURE__ */ Co(e))},optional(){return Tl(this)},exactOptional(){return Dl(this)},nullable(){return kl(this)},nullish(){return Tl(kl(this))},nonoptional(e){return Fl(this,e)},array(){return cl(this)},or(e){return dl([this,e])},and(e){return hl(this,e)},transform(e){return zl(this,Cl(e))},default(e){return jl(this,e)},prefault(e){return Nl(this,e)},catch(e){return Ll(this,e)},pipe(e){return zl(this,e)},readonly(){return Vl(this)},describe(e){let t=this.clone();return Ta.add(t,{description:e}),t},meta(...e){if(e.length===0)return Ta.get(this);let t=this.clone();return Ta.add(t,e[0]),t},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(e,...t){return t.length===0?e(this):e(this,...t)},get"~standard"(){return Ft(this,`~standard`,{...jr(this),jsonSchema:{input:Yo(this,`input`),output:Yo(this,`output`)}})},set"~standard"(e){Pt(this,`~standard`,e)},parse:function e(t,n){return cc(this,t,n,{callee:e})},parseAsync:async function e(t,n){return await lc(this,t,n,{callee:e})},safeParse(e,t){return uc(this,e,t)},async safeParseAsync(e,t){return dc(this,e,t)},get spa(){return this?.safeParseAsync},set spa(e){Pt(this,`spa`,e)},validate(e,t){return vn(this,e,t)},validateAsync(e,t){return bn(this,e,t)},encode:function e(t,n){return fc(this,t,n,{callee:e})},decode:function e(t,n){return pc(this,t,n,{callee:e})},encodeAsync:async function e(t,n){return await mc(this,t,n,{callee:e})},decodeAsync:async function e(t,n){return await hc(this,t,n,{callee:e})},safeEncode(e,t){return gc(this,e,t)},safeDecode(e,t){return _c(this,e,t)},async safeEncodeAsync(e,t){return vc(this,e,t)},async safeDecodeAsync(e,t){return yc(this,e,t)},toJSONSchema(e){return Jo(this,{})(e)},get description(){return Ta.get(this)?.description},get _def(){return this._zod.def}}),Cc=/*@__PURE__*/ W(`_ZodString`,(e,t)=>{Mr.init(e,t),Sc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ds(e,t,n,r)},/*@__PURE__*/ It({format:e=>ss(e).format??null,minLength:e=>ss(e).minimum??null,maxLength:e=>ss(e).maximum??null},{regex(...e){return this.check(/* @__PURE__ */ _o(...e))},includes(...e){return this.check(/* @__PURE__ */ bo(...e))},startsWith(...e){return this.check(/* @__PURE__ */ xo(...e))},endsWith(...e){return this.check(/* @__PURE__ */ So(...e))},min(...e){return this.check(/* @__PURE__ */ ho(...e))},max(...e){return this.check(/* @__PURE__ */ mo(...e))},length(...e){return this.check(/* @__PURE__ */ go(...e))},nonempty(...e){return this.check(/* @__PURE__ */ ho(1,...e))},lowercase(e){return this.check(/* @__PURE__ */ vo(e))},uppercase(e){return this.check(/* @__PURE__ */ yo(e))},trim(){return this.check(/* @__PURE__ */ To())},normalize(...e){return this.check(/* @__PURE__ */ wo(...e))},toLowerCase(){return this.check(/* @__PURE__ */ Eo())},toUpperCase(){return this.check(/* @__PURE__ */ Do())},slugify(){return this.check(/* @__PURE__ */ Oo())}})),wc=/*@__PURE__*/ W(`ZodString`,(e,t)=>{Mr.init(e,t),Cc.init(e,t)},{email(e){return this.check(/* @__PURE__ */ Oa(Ac,e))},url(e){return this.check(/* @__PURE__ */ Pa(Nc,e))},jwt(e){return this.check(/* @__PURE__ */ Ya(Jc,e))},emoji(e){return this.check(/* @__PURE__ */ Fa(Pc,e))},guid(e){return this.check(/* @__PURE__ */ ka(jc,e))},uuid(e){return this.check(/* @__PURE__ */ Aa(Mc,e))},uuidv4(e){return this.check(/* @__PURE__ */ ja(Mc,e))},uuidv6(e){return this.check(/* @__PURE__ */ Ma(Mc,e))},uuidv7(e){return this.check(/* @__PURE__ */ Na(Mc,e))},nanoid(e){return this.check(/* @__PURE__ */ Ia(Fc,e))},cuid(e){return this.check(/* @__PURE__ */ La(Ic,e))},cuid2(e){return this.check(/* @__PURE__ */ Ra(Lc,e))},ulid(e){return this.check(/* @__PURE__ */ za(Rc,e))},base64(e){return this.check(/* @__PURE__ */ Ka(Gc,e))},base64url(e){return this.check(/* @__PURE__ */ qa(Kc,e))},xid(e){return this.check(/* @__PURE__ */ Ba(zc,e))},ksuid(e){return this.check(/* @__PURE__ */ Va(Bc,e))},ipv4(e){return this.check(/* @__PURE__ */ Ha(Vc,e))},ipv6(e){return this.check(/* @__PURE__ */ Ua(Hc,e))},cidrv4(e){return this.check(/* @__PURE__ */ Wa(Uc,e))},cidrv6(e){return this.check(/* @__PURE__ */ Ga(Wc,e))},e164(e){return this.check(/* @__PURE__ */ Ja(qc,e))},datetime(e){return this.check(/* @__PURE__ */ Xa(Ec,e))},date(e){return this.check(/* @__PURE__ */ Za(Dc,e))},time(e){return this.check(/* @__PURE__ */ Qa(Oc,e))},duration(e){return this.check(/* @__PURE__ */ $a(kc,e))}});function G(e){return/* @__PURE__ */ Da(wc,e)}const Tc=/*@__PURE__*/ W(`ZodStringFormat`,(e,t)=>{Nr.init(e,t),Cc.init(e,t)}),Ec=/*@__PURE__*/ W(`ZodISODateTime`,(e,t)=>{Qr.init(e,t),Tc.init(e,t)}),Dc=/*@__PURE__*/ W(`ZodISODate`,(e,t)=>{$r.init(e,t),Tc.init(e,t)}),Oc=/*@__PURE__*/ W(`ZodISOTime`,(e,t)=>{ei.init(e,t),Tc.init(e,t)}),kc=/*@__PURE__*/ W(`ZodISODuration`,(e,t)=>{ti.init(e,t),Tc.init(e,t)}),Ac=/*@__PURE__*/ W(`ZodEmail`,(e,t)=>{Ir.init(e,t),Tc.init(e,t)}),jc=/*@__PURE__*/ W(`ZodGUID`,(e,t)=>{Pr.init(e,t),Tc.init(e,t)}),Mc=/*@__PURE__*/ W(`ZodUUID`,(e,t)=>{Fr.init(e,t),Tc.init(e,t)}),Nc=/*@__PURE__*/ W(`ZodURL`,(e,t)=>{Wr.init(e,t),Tc.init(e,t)}),Pc=/*@__PURE__*/ W(`ZodEmoji`,(e,t)=>{Gr.init(e,t),Tc.init(e,t)}),Fc=/*@__PURE__*/ W(`ZodNanoID`,(e,t)=>{Kr.init(e,t),Tc.init(e,t)}),Ic=/*@__PURE__*/ W(`ZodCUID`,(e,t)=>{qr.init(e,t),Tc.init(e,t)}),Lc=/*@__PURE__*/ W(`ZodCUID2`,(e,t)=>{Jr.init(e,t),Tc.init(e,t)}),Rc=/*@__PURE__*/ W(`ZodULID`,(e,t)=>{Yr.init(e,t),Tc.init(e,t)}),zc=/*@__PURE__*/ W(`ZodXID`,(e,t)=>{Xr.init(e,t),Tc.init(e,t)}),Bc=/*@__PURE__*/ W(`ZodKSUID`,(e,t)=>{Zr.init(e,t),Tc.init(e,t)}),Vc=/*@__PURE__*/ W(`ZodIPv4`,(e,t)=>{ni.init(e,t),Tc.init(e,t)}),Hc=/*@__PURE__*/ W(`ZodIPv6`,(e,t)=>{ai.init(e,t),Tc.init(e,t)}),Uc=/*@__PURE__*/ W(`ZodCIDRv4`,(e,t)=>{oi.init(e,t),Tc.init(e,t)}),Wc=/*@__PURE__*/ W(`ZodCIDRv6`,(e,t)=>{ci.init(e,t),Tc.init(e,t)}),Gc=/*@__PURE__*/ W(`ZodBase64`,(e,t)=>{di.init(e,t),Tc.init(e,t)}),Kc=/*@__PURE__*/ W(`ZodBase64URL`,(e,t)=>{mi.init(e,t),Tc.init(e,t)}),qc=/*@__PURE__*/ W(`ZodE164`,(e,t)=>{hi.init(e,t),Tc.init(e,t)}),Jc=/*@__PURE__*/ W(`ZodJWT`,(e,t)=>{_i.init(e,t),Tc.init(e,t)}),Yc=/*@__PURE__*/ W(`ZodNumber`,(e,t)=>{vi.init(e,t),Sc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>fs(e,t,n,r),e.isFinite=!0},/*@__PURE__*/ It({minValue:e=>{let{minimum:t,exclusiveMinimum:n}=ss(e);return Math.max(t??-1/0,n??-1/0)},maxValue:e=>{let{maximum:t,exclusiveMaximum:n}=ss(e);return Math.min(t??1/0,n??1/0)},isInt:e=>{let{isInt:t,multipleOf:n}=ss(e);return!!t||!!n?.some(Number.isSafeInteger)},format:e=>ss(e).format??null},{gt(e,t){return this.check(/* @__PURE__ */ uo(e,t))},gte(e,t){return this.check(/* @__PURE__ */ fo(e,t))},min(e,t){return this.check(/* @__PURE__ */ fo(e,t))},lt(e,t){return this.check(/* @__PURE__ */ co(e,t))},lte(e,t){return this.check(/* @__PURE__ */ lo(e,t))},max(e,t){return this.check(/* @__PURE__ */ lo(e,t))},int(e){return this.check(Qc(e))},safe(e){return this.check(Qc(e))},positive(e){return this.check(/* @__PURE__ */ uo(0,e))},nonnegative(e){return this.check(/* @__PURE__ */ fo(0,e))},negative(e){return this.check(/* @__PURE__ */ co(0,e))},nonpositive(e){return this.check(/* @__PURE__ */ lo(0,e))},multipleOf(e,t){return this.check(/* @__PURE__ */ po(e,t))},step(e,t){return this.check(/* @__PURE__ */ po(e,t))},finite(){return this}}));function Xc(e){return/* @__PURE__ */ eo(Yc,e)}const Zc=/*@__PURE__*/ W(`ZodNumberFormat`,(e,t)=>{yi.init(e,t),Yc.init(e,t)});function Qc(e){return/* @__PURE__ */ no(Zc,e)}const $c=/*@__PURE__*/ W(`ZodBoolean`,(e,t)=>{bi.init(e,t),Sc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ps(e,t,n,r)});function el(e){return/* @__PURE__ */ ro($c,e)}const tl=/*@__PURE__*/ W(`ZodNull`,(e,t)=>{xi.init(e,t),Sc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>gs(e,t,n,r)});function nl(e){return/* @__PURE__ */ ao(tl,e)}const rl=/*@__PURE__*/ W(`ZodUnknown`,(e,t)=>{Si.init(e,t),Sc.init(e,t),e._zod.processJSONSchema=(e,t,n)=>void 0});function il(){return/* @__PURE__ */ oo(rl)}const al=/*@__PURE__*/ W(`ZodNever`,(e,t)=>{Ci.init(e,t),Sc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ys(e,t,n,r)});function ol(e){return/* @__PURE__ */ so(al,e)}const sl=/*@__PURE__*/ W(`ZodArray`,(e,t)=>{xc(),Ti.init(e,t),Sc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ps(e,t,n,r),e.element=t.element},{min(e,t){return this.check(/* @__PURE__ */ ho(e,t))},nonempty(e){return this.check(/* @__PURE__ */ ho(1,e))},max(e,t){return this.check(/* @__PURE__ */ mo(e,t))},length(e,t){return this.check(/* @__PURE__ */ go(e,t))},unwrap(){return this.element}});function cl(e,t){return/* @__PURE__ */ ko(sl,e,t)}const ll=/*@__PURE__*/ W(`ZodObject`,(e,t)=>{xc(),ji.init(e,t),Sc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Is(e,t,n,r),Ut(e,`shape`,e=>e._zod.def.shape,!1)},{keyof(){return yl(Object.keys(this._zod.def.shape))},catchall(e){return this.clone($e(this._zod.def,{catchall:e}))},passthrough(){return this.clone($e(this._zod.def,{catchall:il()}))},loose(){return this.clone($e(this._zod.def,{catchall:il()}))},strict(){return this.clone($e(this._zod.def,{catchall:ol()}))},strip(){return this.clone($e(this._zod.def,{catchall:void 0}))},extend(e){return gt(this,e)},safeExtend(e){return vt(this,e)},merge(e){return yt(this,e)},pick(e){return pt(this,e)},omit(e){return ht(this,e)},partial(...e){return bt(wl,this,e[0])},exactPartial(...e){return bt(El,this,e[0],`exactPartial`)},required(...e){return xt(Pl,this,e[0])}});function K(e,t){let n={type:`object`,shape:e??{},...H(t)};return new ll(n)}const ul=/*@__PURE__*/ W(`ZodUnion`,(e,t)=>{Ni.init(e,t),Sc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ls(e,t,n,r),e.options=t.options});function dl(e,t){return new ul({type:`union`,options:e,...H(t)})}const fl=/*@__PURE__*/ W(`ZodDiscriminatedUnion`,(e,t)=>{ul.init(e,t),Fi.init(e,t)});function pl(e,t,n){return new fl({type:`union`,options:t,discriminator:e,...H(n)})}const ml=/*@__PURE__*/ W(`ZodIntersection`,(e,t)=>{Ii.init(e,t),Sc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Rs(e,t,n,r)});function hl(e,t){return new ml({type:`intersection`,left:e,right:t})}const gl=/*@__PURE__*/ W(`ZodRecord`,(e,t)=>{xc(),zi.init(e,t),Sc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Us(e,t,n,r),e.keyType=t.keyType,e.valueType=t.valueType});function _l(e,t,n){return!t||!t._zod?new gl({type:`record`,keyType:G(),valueType:e,...H(t)}):new gl({type:`record`,keyType:e,valueType:t,...H(n)})}const vl=/*@__PURE__*/ W(`ZodEnum`,(e,t)=>{Bi.init(e,t),Sc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Cs(e,t,n,r),e.enum=t.entries,e.options=[...e._zod.values];let n=new Set(Object.keys(t.entries));e.extract=(e,r)=>{let i={};for(let r of e)if(n.has(r))i[r]=t.entries[r];else throw Error(`Key ${r} not found in enum`);return new vl({...t,checks:[],...H(r),entries:i})},e.exclude=(e,r)=>{let i={...t.entries};for(let t of e)if(n.has(t))delete i[t];else throw Error(`Key ${t} not found in enum`);return new vl({...t,checks:[],...H(r),entries:i})}});function yl(e,t){let n=Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e;return new vl({type:`enum`,entries:n,...H(t)})}const bl=/*@__PURE__*/ W(`ZodLiteral`,(e,t)=>{Vi.init(e,t),Sc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ws(e,t,n,r),e.values=new Set(t.values),Object.defineProperty(e,"value",{get(){if(t.values.length>1)throw Error("This schema contains multiple valid literal values. Use `.values` instead.");return t.values[0]}})});function xl(e,t){return new bl({type:`literal`,values:Array.isArray(e)?e:[e],...H(t)})}const Sl=/*@__PURE__*/ W(`ZodTransform`,(e,t)=>{xc(),Hi.init(e,t),Sc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>js(e,t,n,r),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new Xt(e.constructor.name);n.addIssue=r=>{if(typeof r==`string`)n.issues.push(Mt(r,n.value,t));else{let t=r;t.fatal&&(t.continue=!1),t.code??=`custom`,`input`in t||(t.input=n.value),t.inst??=e,n.issues.push(Mt(t))}};let i=t.transform(n.value,n);return i instanceof Promise?i.then(e=>(n.value=e,n)):(n.value=i,n)}});function Cl(e){return new Sl({type:`transform`,transform:e})}const wl=/*@__PURE__*/ W(`ZodOptional`,(e,t)=>{Wi.init(e,t),Sc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ec(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Tl(e){return new wl({type:`optional`,innerType:e})}const El=/*@__PURE__*/ W(`ZodExactOptional`,(e,t)=>{Gi.init(e,t),Sc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ec(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Dl(e){return new El({type:`optional`,innerType:e})}const Ol=/*@__PURE__*/ W(`ZodNullable`,(e,t)=>{Ki.init(e,t),Sc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ws(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function kl(e){return new Ol({type:`nullable`,innerType:e})}const Al=/*@__PURE__*/ W(`ZodDefault`,(e,t)=>{qi.init(e,t),Sc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Js(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function jl(e,t){return new Al({type:`default`,innerType:e,get defaultValue(){return typeof t==`function`?t():ot(t)}})}const Ml=/*@__PURE__*/ W(`ZodPrefault`,(e,t)=>{Yi.init(e,t),Sc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ys(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Nl(e,t){return new Ml({type:`prefault`,innerType:e,get defaultValue(){return typeof t==`function`?t():ot(t)}})}const Pl=/*@__PURE__*/ W(`ZodNonOptional`,(e,t)=>{Xi.init(e,t),Sc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Gs(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Fl(e,t){return new Pl({type:`nonoptional`,innerType:e,...H(t)})}const Il=/*@__PURE__*/ W(`ZodCatch`,(e,t)=>{$i.init(e,t),Sc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Xs(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function Ll(e,t){return new Il({type:`catch`,innerType:e,catchValue:typeof t==`function`?t:Wt(t)})}const Rl=/*@__PURE__*/ W(`ZodPipe`,(e,t)=>{ea.init(e,t),Sc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Zs(e,t,n,r),e.in=t.in,e.out=t.out});function zl(e,t){return new Rl({type:`pipe`,in:e,out:t})}const Bl=/*@__PURE__*/ W(`ZodReadonly`,(e,t)=>{na.init(e,t),Sc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Qs(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Vl(e){return new Bl({type:`readonly`,innerType:e})}const Hl=/*@__PURE__*/ W(`ZodCustom`,(e,t)=>{ia.init(e,t),Sc.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ks(e,t,n,r)});function Ul(e,t){return/* @__PURE__ */ Ao(Hl,e??(()=>!0),t)}function Wl(e,t={}){return/* @__PURE__ */ jo(Hl,e,t)}function Gl(e,t){return/* @__PURE__ */ Mo(e,t)}function Kl(e){return/* @__PURE__ */ to(Yc,e)}function ql(e){return/* @__PURE__ */ io($c,e)}const Jl=1e4,Yl=`[a-z0-9][a-z0-9_-]*`,Xl=G().max(80).regex(RegExp(`^${Yl}(?:/${Yl})*$`),`invalid channel path`),Zl=e=>!e.includes(`\0`)&&e.isWellFormed(),Ql=e=>e.replaceAll(`\0`,``).toWellFormed(),$l=G().max(Jl).refine(e=>e.trim().length>0,`message text is empty`).refine(Zl,`message text has a NUL character or a lone surrogate`),eu=Xc().int().positive(),tu=/* @__PURE__ */ new Set([...Object.getOwnPropertyNames(Object.prototype),`prototype`]),nu=e=>!tu.has(e),ru=G().max(64).regex(/^[a-z0-9][a-z0-9_.-]*$/,`invalid label key`).refine(nu,`label key is a reserved name`),iu=_l(ru,G().max(256).refine(Zl,`label value has a NUL character or a lone surrogate`)),au=G().max(64).regex(/^[a-z0-9_+-]+$/,`invalid emoji name`).refine(nu,`emoji name is a reserved name`),ou=G().min(1).max(256);dl([yl([`person`,`agent`,`deployment`,`workflow`,`external`]),xl(`profile`)]);const su=e=>e===`profile`?`agent`:e;G().min(1).max(128).refine(Zl,`handle has a NUL character or a lone surrogate`);function cu(e){if(e===null)return null;try{return new URL(e).protocol===`https:`?e:null}catch{return null}}K({actor:ou,principal:G().min(1),profile:G().nullable(),session:G().nullable()});const lu=G().regex(/^[A-Za-z0-9_-]{22}$/,`invalid attachment id`);K({id:lu,name:G().min(1).max(255),type:G().min(1).max(255),size:Xc().int().nonnegative()}),G().regex(/^[A-Za-z][A-Za-z0-9-]{0,31}$/,`ids start with a letter and use up to 32 letters, numbers, and hyphens`);const uu=G().min(3).max(300),du=K({channel:uu.optional(),thread:uu,subthread:uu.nullable(),message:G().min(1).max(300),context:G().max(300).nullable()}),fu=K({author:G().min(1).max(256),text:G().max(Jl),createdAt:G().max(64).nullable(),files:cl(K({name:G().min(1).max(1e3),url:G().max(4e3).nullable()})).max(20)}),pu=K({url:G().min(1).max(4e3),message:eu.nullable(),snapshot:fu.nullable(),unavailable:G().max(300).nullable()}),mu=K({id:G().min(1),handle:G().min(1),name:G().min(1),avatar:G().nullable(),isBot:el()}),hu=K({type:yl([`image`,`file`,`video`,`audio`]),name:G().max(1e3).optional(),mimeType:G().max(255).optional(),size:Xc().int().nonnegative().optional(),url:G().max(4e3).optional(),fetchMetadata:_l(G(),G().max(4e3)).optional()}),gu=K({url:G().min(1).max(4e3),thread:uu,message:G().min(1).max(300),snapshot:fu.nullable()}),_u=K({channel:uu,thread:uu,subthread:uu.nullable()}),vu=pl(`kind`,[K({kind:xl(`message`),..._u.shape,message:G(),isRoot:el(),text:G(),context:G().nullable(),author:mu,files:cl(hu).max(20).optional(),links:cl(gu).max(10).optional()}),K({kind:xl(`edited`),..._u.shape,message:G(),text:G(),author:mu,links:cl(gu).max(10).optional(),linksOnly:el().optional()}),K({kind:xl(`deleted`),..._u.shape,message:G()}),K({kind:xl(`reaction`),..._u.shape,message:G(),emoji:G(),added:el(),author:mu}),K({kind:xl(`lifecycle`),..._u.omit({subthread:!0}).shape,type:G(),title:G(),url:G().nullable(),labels:_l(G(),G()),unset:cl(G()),owns:cl(G()).optional(),reply:G().nullable(),createRoot:el(),retitled:el().optional(),author:mu})]),yu=e=>e.slice(e.indexOf(`:`)+1).includes(`:`),bu=e=>{let t=e.indexOf(`:`),n=e.slice(t+1).indexOf(`:`);return n===-1?e:e.slice(0,t+1+n)},xu=(e,t)=>`${e}|${t}`,Su=G().min(1).max(128),Cu=Su,wu=dl([G(),cl(G())]).transform(e=>Array.isArray(e)?e:[e]),Tu=G().regex(/^[a-z0-9][a-z0-9_.-]*(=.*)?$/,`label filters look like key, key=value, or key=a|b`).transform(e=>{let t=e.indexOf(`=`);return t===-1?[e,null]:[e.slice(0,t),e.slice(t+1).split(`|`)]}),Eu=K({target:uu,kind:yl([`channel`,`thread`])}),Du=K({channel:G().optional(),re:Cu.optional(),by:G().optional(),mentions:G().optional(),label:wu.pipe(cl(Tu)).optional(),from:G().min(1).max(64).optional(),text:G().min(1).max(200).optional()}),Ou=Du.extend({after:Su.optional(),before:Cu.optional(),limit:Kl().int().min(1).max(500).optional()}),ku=Du.extend({after:Su.optional(),limit:Kl().int().min(1).max(500).optional()}),Au=Du.extend({after:Su.optional(),wait:Kl().min(0).max(300).optional(),all:ql().optional()}),ju=K({channel:Xl.optional(),re:Su.optional(),text:G().max(Jl).default(``),labels:iu.optional(),noSync:el().optional(),sync:cl(dl([G().min(3).max(300),Eu])).max(10).optional(),id:G().min(1).max(200).refine(Zl,`id has a NUL character or a lone surrogate`).optional(),attachments:cl(lu).max(10).optional()}).refine(e=>e.text.trim().length>0||(e.attachments?.length??0)>0,{message:`message text is empty`,path:[`text`]}).refine(e=>e.channel===void 0!=(e.re===void 0),{message:"a post needs `channel`; a reply needs `re`"}).refine(e=>!(e.noSync&&e.sync?.length),{message:"`noSync` and `sync` contradict each other"}),Mu=G().regex(/^\d+(\.\d+)?(s|m|h|d)$/,`durations look like 30s, 30m, 12h, or 1d`),Nu=G().datetime({offset:!0}),Pu=K({channel:Xl.optional(),re:Su.optional(),text:G().max(Jl).default(``),labels:iu.optional(),noSync:el().optional(),attachments:cl(lu).max(10).optional(),in:Mu.optional(),at:Nu.optional(),every:Mu.optional(),until:Nu.optional(),for:Mu.optional(),times:Xc().int().positive().optional()}).refine(e=>e.text.trim().length>0||(e.attachments?.length??0)>0,{message:`message text is empty`,path:[`text`]}).refine(e=>e.channel===void 0!=(e.re===void 0),{message:"a schedule needs `channel` for a new thread, or `re` for a reply"}).refine(e=>e.in!==void 0||e.at!==void 0||e.every!==void 0,{message:"say when: `in`, `at`, or `every`"}).refine(e=>e.in===void 0||e.at===void 0,{message:"`in` and `at` contradict each other"}).refine(e=>[e.until,e.for,e.times].filter(e=>e!==void 0).length<=1,{message:"pick one stop: `until`, `for`, or `times`"}).refine(e=>e.every!==void 0||e.until===void 0&&e.for===void 0&&e.times===void 0,{message:"`until`, `for`, and `times` stop a repeat: add `every`"}),Fu=K({re:Cu.optional(),channel:G().optional(),by:G().optional(),all:ql().optional()}),Iu=K({target:G().min(3).max(300)}),Lu=K({channel:G().optional(),limit:Kl().int().min(1).max(500).optional()}),Ru=K({watch:_l(G().max(100),K({tail:G().max(1e3),when:yl([`matches`,`enters`]).default(`matches`)})).refine(e=>Object.keys(e).length<=32,`a board registers at most 32 watchers`),sync:cl(K({key:G().min(1).max(64),platform:G().min(1).max(64),signIn:el().default(!1)})).max(32).optional()}),zu=dl([Ru.extend({url:G().url().max(500).refine(e=>/^https:\/\//.test(e),`wake-ups go over https`).transform(e=>e.replace(/\/+$/,``)).nullable().optional(),path:nl({error:`register a url or a path, not both`}).optional(),branch:nl({error:`a branch goes with a path`}).optional()}),Ru.extend({url:nl({error:`register a url or a path, not both`}).optional(),path:G().max(300).regex(/^\/[^?#]*$/,`a path starts with / and has no query or fragment`).transform(e=>e.replace(/(.)\/+$/,`$1`)),branch:G().min(1).max(255).nullable().optional()})]),Bu=K({limit:Kl().int().min(1).max(50).optional(),wait:Kl().min(0).max(25).optional()}),Vu=K({lease:G().min(1).max(64),error:G().min(1).max(500).optional(),skip:el().optional()}),Hu=K({target:G().min(1).max(4e3),limit:Kl().int().min(1).max(200).optional()}),Uu=K({target:G().min(1).max(4e3)}),Wu=K({url:G().url().max(4e3)}),Gu=K({actor:G().min(1).max(256)}),Ku=G().min(1).max(64),qu=K({thread:uu,message:G().min(1).max(300).optional()}),Ju=pu.extend({message:Su.nullable()}),Yu=mu.extend({avatar:G().nullable().transform(cu)}),Xu={author:Yu,from:Ku.nullable()},Zu=K({key:Ku,channel:uu,thread:uu}),Qu={origin:qu.optional(),message:Su.optional()},$u=pl(`op`,[K({op:xl(`post`),...Xu,origin:du.nullable().default(null),source:Zu.optional(),channel:Xl.optional(),re:Su.optional(),text:G().max(Jl).default(``),labels:iu.optional(),noSync:el().optional(),attachments:cl(lu).max(10).optional(),links:cl(Ju).max(10).optional(),id:G().min(1).max(200).refine(Zl,`id has a NUL character or a lone surrogate`).optional()}),K({op:xl(`edit`),...Xu,...Qu,text:$l,source:Zu.optional()}),K({op:xl(`delete`),...Xu,...Qu}),K({op:xl(`react`),...Xu,...Qu,emoji:au,remove:el().optional()}),K({op:xl(`labels`),...Xu,...Qu,set:iu.optional(),unset:cl(ru).optional()}),K({op:xl(`links`),...Xu,...Qu,links:cl(Ju).max(10)}),K({op:xl(`seen`),author:Yu})]),ed=cl(G().min(1).max(300)).max(10).nullable(),td=pl(`kind`,[K({kind:xl(`message`),message:Su,target:uu,external:K({thread:uu,message:G().min(1).max(300),asUser:xl(!0).optional()}),files:ed.optional()}),K({kind:xl(`files`),message:Su,target:uu,files:ed}),K({kind:xl(`failed`),message:Su,target:uu,error:G().min(1).max(500)}),K({kind:xl(`thread`),message:Su,target:uu,targetKind:yl([`channel`,`thread`]),cause:yl([`config`,`request`])})]),nd=K({code:G().min(1).max(64).optional(),post:G().min(1).max(200).optional(),thread:uu.optional(),message:G().min(1).max(300).optional(),account:ou.optional(),person:ou.optional()}),rd=K({message:wu.pipe(cl(Su).min(1).max(100))}),id=K({by:ou,since:Kl().int().nonnegative()}),ad=K({events:cl(K({id:G().min(1).max(300),event:vu,raw:il()})).min(1).max(50)}),od=K({limit:Kl().int().min(1).max(50).optional()}),sd=K({lease:G().min(1).max(64),error:G().min(1).max(500).optional()}),cd=K({sync:Ku}),ld=K({sync:Ku,account:Yu,code:G().min(1).max(64),message:G().max(1024).optional(),method:yl([`code`,`consent`]).optional()}),ud=K({sync:Ku,code:G().min(1).max(64)}),dd=K({account:ou}),fd=K({name:G().max(1024).nullable().optional(),type:G().max(1024).nullable().optional(),size:Xc().int().positive().max(je,`direct uploads are at most ${je/1024/1024} MB`)}),pd=K({text:$l}),md=K({}).optional(),hd=K({status:G().trim().min(1).max(100).optional()}).optional(),gd=K({emoji:au,remove:el().optional()}),_d=K({set:iu.optional(),unset:cl(ru).optional()}).refine(e=>e.set!==void 0||e.unset!==void 0,{message:"nothing to change: pass `set` or `unset`"}),vd={discovery:{method:`GET`,path:`/`},me:{method:`GET`,path:`/me`},channels:{method:`GET`,path:`/channels`},actors:{method:`GET`,path:`/actors`},messages:{method:`GET`,path:`/messages`,query:Ou},message:{method:`GET`,path:`/messages/:id`},threads:{method:`GET`,path:`/threads`,query:ku},post:{method:`POST`,path:`/messages`,body:ju},edit:{method:`POST`,path:`/messages/:id/edit`,body:pd},delete:{method:`POST`,path:`/messages/:id/delete`,body:md},react:{method:`POST`,path:`/messages/:id/reactions`,body:gd},label:{method:`POST`,path:`/messages/:id/labels`,body:_d},sync:{method:`POST`,path:`/messages/:id/sync`,body:Iu},synced:{method:`GET`,path:`/messages/:id/sync`},linked:{method:`GET`,path:`/links`,query:Wu},typing:{method:`POST`,path:`/messages/:id/typing`,body:hd},schedule:{method:`POST`,path:`/schedules`,body:Pu},schedules:{method:`GET`,path:`/schedules`,query:Fu},cancelSchedule:{method:`POST`,path:`/schedules/:id/cancel`},posted:{method:`GET`,path:`/posts/:id`},inbox:{method:`GET`,path:`/inbox/:key`,query:Lu},inboxPush:{method:`POST`,path:`/inbox/:key`,body:ad},inboxNext:{method:`GET`,path:`/inbox/:key/next`,query:od},inboxAck:{method:`POST`,path:`/inbox/:key/:id/ack`,body:sd},syncImport:{method:`POST`,path:`/sync/imports`,body:$u},syncReceipt:{method:`POST`,path:`/sync/receipts`,body:td},syncThread:{method:`GET`,path:`/sync/threads/:thread`},syncFind:{method:`GET`,path:`/sync/find`,query:nd},syncCopies:{method:`GET`,path:`/sync/copies`,query:rd},syncRoots:{method:`GET`,path:`/sync/roots`,query:id},syncCode:{method:`POST`,path:`/sync/codes`,body:cd},syncAccount:{method:`POST`,path:`/sync/accounts`,body:ld},syncUnlink:{method:`POST`,path:`/sync/accounts/unlink`,body:dd},readSource:{method:`GET`,path:`/sources/:key/read`,query:Hu},joinSource:{method:`POST`,path:`/sources/:key/join`,body:Uu},webhook:{method:`POST`,path:`/webhooks/:key`},events:{method:`GET`,path:`/events`,query:Au},avatar:{method:`GET`,path:`/avatars/:name`},upload:{method:`POST`,path:`/attachments`},attachment:{method:`GET`,path:`/attachments/:id`},uploadStart:{method:`POST`,path:`/attachments/uploads`,body:fd},uploadFinish:{method:`POST`,path:`/attachments/uploads/:id`},openapi:{method:`GET`,path:`/openapi.json`},identity:{method:`GET`,path:`/identity`},signIn:{method:`GET`,path:`/identity/sign-in`,query:ud},signedIn:{method:`GET`,path:`/identity/signed-in`,query:ud},identityUnlink:{method:`POST`,path:`/identity/unlink`,body:Gu},watchers:{method:`GET`,path:`/watchers`},register:{method:`POST`,path:`/watchers`,body:zu},matches:{method:`GET`,path:`/watchers/matches`,query:Bu},ack:{method:`POST`,path:`/watchers/matches/:id/ack`,body:Vu},wake:{method:`POST`,path:`/wake`}};async function*yd(e,t){let n=e.getReader(),r=new TextDecoder,i=``,a=()=>void n.cancel().catch(()=>{});t?.addEventListener(`abort`,a,{once:!0});try{for(;;){let{value:e,done:t}=await n.read();if(t)return;i+=r.decode(e,{stream:!0});let a;for(;(a=i.search(/\r?\n\r?\n/))!==-1;){let e=i.slice(0,a);i=i.slice(a).replace(/^\r?\n\r?\n/,``);let t={},n=[];for(let r of e.split(/\r?\n/)){if(r===``||r.startsWith(`:`))continue;let e=r.indexOf(`:`),i=e===-1?r:r.slice(0,e),a=e===-1?``:r.slice(e+1).replace(/^ /,``);i===`data`?n.push(a):i===`id`?t.id=a:i===`event`&&(t.event=a)}n.length>0&&(t.data=n.join(`
|
|
345
|
-
`)),(t.id!==void 0||t.data!==void 0)&&(yield t)}}}finally{t?.removeEventListener(`abort`,a),n.releaseLock()}}var bd=class extends Error{code;status;constructor(e,t,n){super(t),this.name=`BoardError`,this.code=e,this.status=n}};const xd=async e=>typeof e==`function`?await e():e,Sd=e=>{let{at:t,until:n,...r}=Cd(e);return{...r,...t===void 0?{}:{at:t instanceof Date?t.toISOString():t},...n===void 0?{}:{until:n instanceof Date?n.toISOString():n}}},Cd=e=>{if(typeof e==`string`)return{text:e};let{attachments:t,...n}=e;return t?.length?{...n,attachments:t.map(e=>typeof e==`string`?e:e.id)}:n},wd={ms:1,s:1e3,m:6e4,h:36e5,d:864e5};function Td(e){if(typeof e==`number`)return e;let t=e.trim().match(/^(\d+(?:\.\d+)?)(ms|s|m|h|d)?$/);if(!t)throw new bd(`invalid_duration`,`invalid duration: ${e}`,0);return Number(t[1])*wd[t[2]??`ms`]}const Ed=e=>encodeURIComponent(e);function Dd(e){let t=new URLSearchParams;for(let[n,r]of Object.entries(e))if(r!=null){if(n===`label`){let e=Array.isArray(r)?r:typeof r==`object`?Object.entries(r).map(([e,t])=>`${e}=${String(t)}`):[r];for(let n of e)t.append(`label`,String(n))}else t.set(n,String(r))}let n=t.toString();return n?`?${n}`:``}const Od=(e,t)=>t?.length?{...e,unknownMentions:t}:e;function kd(e){let t=e.url.replace(/\/+$/,``),n=e.fetch??((e,t)=>globalThis.fetch(e,t)),r=e.storeFetch??((e,t)=>globalThis.fetch(e,t));async function i(t,n){let r={...e.headers?await xd(e.headers):{}};if(!t)return r;e.token!==void 0&&(r.authorization=`Bearer ${await xd(e.token)}`);let i=n===void 0?e.profile===void 0?null:await xd(e.profile):n;if(i!==null){let{name:e,avatar:t}=typeof i==`string`?{name:i,avatar:void 0}:i;r[`x-board-profile`]=e,t&&(r[`x-board-avatar`]=t)}else{let t=e.person===void 0?null:await xd(e.person);t?.name&&(r[`x-board-name`]=encodeURIComponent(t.name)),t?.avatar&&(r[`x-board-avatar`]=t.avatar)}let a=n===void 0?e.session===void 0?null:await xd(e.session):null;a&&(r[`x-board-session`]=a);let o=e.handle===void 0?null:await xd(e.handle);return o&&(r[`x-board-handle`]=o),r}async function a(e,r,a={}){let o=await n(`${t}${r}`,{method:e,headers:{...await i(a.auth??!0),...a.body===void 0?{}:{"content-type":`application/json`},...a.headers},...a.body===void 0?{}:{body:JSON.stringify(a.body)},...a.signal?{signal:a.signal}:{}});if(!o.ok)throw await Ad(o);return o}async function o(e,t,n){return await(await a(e,t,n)).json()}let s=(e={})=>e;async function c(e={},t){return o(`GET`,`/events${Dd(e)}`,t?{signal:t}:{})}return{url:t,request:async(e,r={})=>n(`${t}${e}`,{method:r.method??`GET`,headers:{...r.headers,...await i(!0,r.as)},...r.body?{body:r.body}:{},...r.signal?{signal:r.signal}:{}}),discovery:()=>o(`GET`,`/`,{auth:!1}),me:()=>o(`GET`,`/me`),channels:async()=>(await o(`GET`,`/channels`)).channels,actors:async()=>(await o(`GET`,`/actors`)).actors,identity:()=>o(`GET`,`/identity`),unlinkAccount:e=>o(`POST`,`/identity/unlink`,{body:{actor:e}}),messages:(e={})=>o(`GET`,`/messages${Dd(e)}`),thread:e=>o(`GET`,`/messages/${Ed(e)}`),posted:async e=>(await o(`GET`,`/posts/${Ed(e)}`)).message,threads:(e={})=>o(`GET`,`/threads${Dd(e)}`),async post(e,t){let{message:n,unknownMentions:r}=await o(`POST`,`/messages`,{body:{channel:e,...Cd(t)}});return Od(n,r)},async reply(e,t){let{message:n,unknownMentions:r}=await o(`POST`,`/messages`,{body:{re:e,...Cd(t)}});return Od(n,r)},async schedule(e,t){let{schedule:n,unknownMentions:r}=await o(`POST`,`/schedules`,{body:{...typeof e==`string`?{channel:e}:{re:e.re},...Sd(t)}});return Od(n,r)},schedules:async(e={})=>(await o(`GET`,`/schedules${Dd(e)}`)).schedules,cancelSchedule:e=>o(`POST`,`/schedules/${Ed(e)}/cancel`,{body:{}}),async upload(e){let a=e.type||(e.data instanceof Blob?e.data.type:``)||Pe(e.name),s=e.data instanceof Blob?e.data.size:e.data.byteLength;if(s>4194304){if(s>104857600)throw new bd(`too_large`,`attachments are at most ${je/1024/1024} MB`,413);let t=await o(`POST`,`/attachments/uploads`,{body:{name:e.name,type:a,size:s}}).catch(e=>{throw e instanceof bd&&e.status===404&&e.code===`not_found`?new bd(`too_large`,`this board takes files of at most ${ke/1024/1024} MB`,413):e}),n=await r(t.url,{method:`PUT`,headers:t.headers,body:e.data});if(!n.ok)throw new bd(`upload_failed`,`the blob store refused the file: ${n.status} ${(await n.text().catch(()=>``)).slice(0,300)||n.statusText}`,n.status);return(await o(`POST`,`/attachments/uploads/${encodeURIComponent(t.id)}`,{body:{}})).attachment}let c=await n(`${t}/attachments`,{method:`POST`,headers:{...await i(!0),"content-type":a,"x-board-filename":encodeURIComponent(e.name)},body:e.data});if(!c.ok)throw await Ad(c);return(await c.json()).attachment},download:(e,t={})=>a(`GET`,`/attachments/${encodeURIComponent(e)}`,t.signal?{signal:t.signal}:{}),edit:(e,t)=>o(`POST`,`/messages/${Ed(e)}/edit`,{body:{text:t}}),delete:e=>o(`POST`,`/messages/${Ed(e)}/delete`,{body:{}}),react:(e,t,n={})=>o(`POST`,`/messages/${Ed(e)}/reactions`,{body:{emoji:De(t),...n}}),label:(e,t)=>o(`POST`,`/messages/${Ed(e)}/labels`,{body:t}),typing:async(e,t)=>(await o(`POST`,`/messages/${Ed(e)}/typing`,{body:t?{status:t}:{}})).targets,sync:((e,t)=>t===void 0?o(`GET`,`/messages/${Ed(e)}/sync`):o(`POST`,`/messages/${Ed(e)}/sync`,{body:{target:t}})),linked:e=>o(`GET`,`/links${Dd({url:e})}`),inbox:async(e,t={})=>(await o(`GET`,`/inbox/${e}${Dd(t)}`)).events,register:e=>o(`POST`,`/watchers`,{body:e}),watchers:async()=>(await o(`GET`,`/watchers`)).watchers,matches:async(e={})=>{let{signal:t,...n}=e;return(await o(`GET`,`/watchers/matches${Dd(n)}`,t?{signal:t}:{})).matches},ack:(e,t)=>o(`POST`,`/watchers/matches/${encodeURIComponent(e)}/ack`,{body:t}),readSource:(e,t,n={})=>o(`GET`,`/sources/${e}/read${Dd({target:t,...n})}`),joinSource:(e,t)=>o(`POST`,`/sources/${e}/join`,{body:{target:t}}),poll:c,syncImport:e=>o(`POST`,`/sync/imports`,{body:e}),syncReceipt:e=>o(`POST`,`/sync/receipts`,{body:e}),syncThread:e=>o(`GET`,`/sync/threads/${Ed(e)}`),syncFind:(e,t={})=>o(`GET`,`/sync/find${Dd(e)}`,t.signal?{signal:t.signal}:{}),syncCopies:async e=>(await o(`GET`,`/sync/copies?${e.map(e=>`message=${encodeURIComponent(e)}`).join(`&`)}`)).copies,syncRoots:async(e,t)=>(await o(`GET`,`/sync/roots${Dd({by:e,since:t instanceof Date?t.getTime():t})}`)).roots,inboxPush:(e,t)=>o(`POST`,`/inbox/${Ed(e)}`,{body:{events:t}}),inboxNext:async(e,t={})=>(await o(`GET`,`/inbox/${Ed(e)}/next${Dd(t)}`)).items,inboxAck:(e,t,n)=>o(`POST`,`/inbox/${Ed(e)}/${Ed(t)}/ack`,{body:n}),syncCode:e=>o(`POST`,`/sync/codes`,{body:{sync:e}}),syncAccount:e=>o(`POST`,`/sync/accounts`,{body:e}),syncUnlink:e=>o(`POST`,`/sync/accounts/unlink`,{body:{account:e}}),async*events(e={},t={}){let n=e.after,r=0;for(;!t.signal?.aborted;){let i;try{i=await a(`GET`,`/events${Dd({...s(e),after:n})}`,{headers:{accept:`text/event-stream`},...t.signal?{signal:t.signal}:{}})}catch(e){if(t.signal?.aborted)return;if(e instanceof bd&&e.status>=400&&e.status<500)throw e;await new Promise(e=>setTimeout(e,Math.min(3e4,500*2**r++)));continue}r=0;try{for await(let e of yd(i.body,t.signal))e.id!==void 0&&(n=e.id),e.event===`board`&&e.data&&(yield JSON.parse(e.data))}catch{if(t.signal?.aborted)return;await new Promise(e=>setTimeout(e,Math.min(3e4,500*2**r++)))}}},async wait(e={},t={}){let n=Date.now()+Td(t.timeout??`30m`),r=e.after??(await c({...e,after:void 0,wait:0},t.signal)).cursor;for(;Date.now()<n&&!t.signal?.aborted;){let i=Math.max(0,Math.min(25,Math.ceil((n-Date.now())/1e3))),a=await c({...e,after:r,wait:i},t.signal);if(a.events.length>0)return a.events[0];r=a.cursor}return null}}}async function Ad(e){try{let t=await e.json();if(t.error?.message)return new bd(t.error.code??`error`,t.error.message,e.status)}catch{}return new bd(`http_error`,`${e.status} ${e.statusText}`,e.status)}const jd=e=>Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``);async function Md(e){return jd(new Uint8Array(await crypto.subtle.digest(`SHA-256`,new TextEncoder().encode(e))))}async function Nd(...e){let t=new Uint8Array(await crypto.subtle.digest(`SHA-256`,new TextEncoder().encode(JSON.stringify(e)))).slice(0,16);t[6]=t[6]&15|128,t[8]=t[8]&63|128;let n=jd(t);return`${n.slice(0,8)}-${n.slice(8,12)}-${n.slice(12,16)}-${n.slice(16,20)}-${n.slice(20,32)}`}const Pd=/^[0-9a-f]{8}-[0-9a-f]{4}-8[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/,Fd=async(e,t)=>`key:${e}:${(await Md(`board-key\u001f${t}`)).slice(0,32)}`;var Id=class extends Error{status;code;constructor(e,t,n){super(n),this.status=e,this.code=t}},Ld=class extends Id{response;constructor(e){super(e.status,`rejected`,`rejected with ${e.status}`),this.response=e}};const Rd=(e,t=`invalid_request`)=>new Id(400,t,e),zd=e=>new Id(401,`unauthorized`,e),Bd=e=>new Id(403,`forbidden`,e),Vd=(e,t=`not_found`)=>new Id(404,t,e),Hd=()=>new Id(409,`duplicate_id`,`that id was already used for a different write`),Ud=(e,t=200,n)=>new Response(JSON.stringify(e),{status:t,headers:{"content-type":`application/json`,...n}});function Wd(e){if(e.code!==`invalid_union`||e.errors.length===0)return e;let t=e.errors.reduce((e,t)=>t.length<e.length?t:e)[0];return t?Wd({...t,path:[...e.path,...t.path]}):e}function Gd(e){if(e instanceof Ld)return e.response;if(e instanceof Id)return Ud({error:{code:e.code,message:e.message}},e.status);if(e instanceof oc){let t=e.issues[0]&&Wd(e.issues[0]),n=t?.path.length?`${t.path.join(`.`)}: `:``;return Ud({error:{code:`invalid_request`,message:`${n}${t?.message??`invalid request`}`}},400)}let t=e?.code;return t===`INVALID_PAYLOAD`?Ud({error:{code:`invalid_request`,message:e.message}},400):t===`PARTIAL_DUPLICATE_BATCH`||t===`DUPLICATE_EVENT_ID`?Gd(Hd()):t===`STORE_UNAVAILABLE`||t===`STORE_NOT_CONFIGURED`?Ud({error:{code:`unavailable`,message:e.message}},503):(console.error(`[board]`,e),Ud({error:{code:`internal`,message:`internal error`}},500))}const Kd=`0.22.0`,qd=[`avatar`,`openapi`,`webhook`,`signIn`,`signedIn`,`identityUnlink`,`sync`],Jd=/* @__PURE__ */ `discovery.me.channels.actors.identity.messages.threads.message.post.posted.edit.delete.react.label.schedule.schedules.cancelSchedule.upload.attachment.uploadStart.uploadFinish.watchers.register.matches.ack.events.syncImport.syncReceipt.syncThread.syncFind.syncCopies.syncRoots.inboxPush.inboxNext.inboxAck.inbox.syncCode.syncAccount.syncUnlink.typing.readSource.joinSource.synced.linked`.split(`.`),Yd=e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);function Xd(e,t,n,r){let i=t.split(`/`).filter(Boolean),a=i.map(e=>e.startsWith(`:`)?`/([^/]+)`:`/${Yd(e)}`).join(``);return{method:e,pattern:RegExp(`${a}$`),names:i.filter(e=>e.startsWith(`:`)).map(e=>e.slice(1)),target:n,segments:i.length,literals:i.filter(e=>!e.startsWith(`:`)).length,own:r}}function Zd(e,t){let n=[...qd.map(e=>Xd(vd[e].method,vd[e].path,{kind:`board`,name:e},!1)),...Jd.filter(e=>e!==`discovery`).map(e=>Xd(vd[e].method,vd[e].path,{kind:`protocol`,name:e},!1)),...e.map(e=>Xd(e.method,e.path,{kind:`backend`,route:e},!0))].sort((e,t)=>t.segments-e.segments||t.literals-e.literals||Number(t.own)-Number(e.own)),r=(e,t,n)=>{let r={};try{e.names.forEach((e,t)=>r[e]=decodeURIComponent(n[t]))}catch{return null}let i=e.names[0];return{target:e.target,base:t,param:i===void 0?null:r[i],params:r}},i=e=>({target:{kind:`protocol`,name:`discovery`},base:e,param:null,params:{},root:!0});return function(e,a){let o=a.length>1?a.replace(/\/+$/,``):a;if(t!==void 0){let a=t.replace(/\/+$/,``);if(o!==a&&!o.startsWith(`${a}/`))return null;let s=o.slice(a.length)||`/`;if(s===`/`)return e===`GET`?i(a):null;for(let t of n){let n=t.method===e?s.match(RegExp(`^${t.pattern.source}`)):null;if(n)return r(t,a,n.slice(1))}return null}for(let t of n){if(t.method!==e)continue;let n=o.match(t.pattern);if(n)return r(t,o.slice(0,n.index),n.slice(1))}return e===`GET`?i(o===`/`?``:o):null}}function Qd(e){let t={};for(let n of new Set(e.searchParams.keys())){let r=e.searchParams.getAll(n);t[n]=r.length>1?r:r[0]}return t}async function $d(e){let t=await e.text();if(t.trim()!==``)try{return JSON.parse(t)}catch{throw Rd(`request body is not valid JSON`)}}const ef=()=>new Id(413,`too_large`,`attachments are at most ${ke/1024/1024} MB`);async function tf(e,t){if(Number(e.headers.get(`content-length`)??0)>t)throw ef();let n=[],r=0;for await(let i of e.body??[]){if(r+=i.byteLength,r>t)throw ef();n.push(i)}let i=new Uint8Array(r),a=0;for(let e of n)i.set(e,a),a+=e.byteLength;return i}function nf(){let e={};for(let[t,n]of Object.entries(vd)){let r=n.path.replace(/:(\w+)/g,`{$1}`),i={operationId:t};`query`in n&&(i[`x-query-schema`]=nc(n.query,{io:`input`})),`body`in n&&(i.requestBody={content:{"application/json":{schema:nc(n.body,{io:`input`})}}}),(e[r]??={})[n.method.toLowerCase()]=i}return{openapi:`3.1.0`,info:{title:`board`,version:Kd},paths:e}}const rf={re:{type:`string`,value:`id`,description:`in a thread: its root's ID`},by:{type:`string`,value:`handle`,description:`by an author: a handle, me, or an actor ID`},mentions:{type:`string`,value:`@handle`,optionalValue:!0,description:`mentioning a handle, or you without one`},label:{type:`string`,multiple:!0,value:`k[=v|w]`,description:`with a label on the message or its thread's root`},from:{type:`string`,value:`source`,description:`from a source: a sync key such as slack, or board`},text:{type:`string`,value:`words`,description:`containing these words`},after:{type:`string`,value:`id`,description:`after a message or a cursor`},url:{type:`string`,value:`url`,description:`the board at this URL, not the one the environment points at`},scope:{type:`string`,value:`team`,description:`a team's board in Vercel's API, by its slug or ID`},team:{type:`string`,value:`team`,description:`the same as --scope`,hidden:!0},as:{type:`string`,value:`profile`,description:`write as a profile, such as an agent's name`},avatar:{type:`string`,value:`url`,description:`the profile's avatar, with --as`},human:{type:`boolean`,description:`write as yourself, with no profile or session`},handle:{type:`string`,value:`h`,description:`your handle (default: your Vercel username)`},json:{type:`boolean`,description:`one JSON object per line, for programs`},help:{type:`boolean`,short:`h`,description:`this help, or a command's`},version:{type:`boolean`,short:`v`,description:`the CLI's version`},limit:{type:`string`,short:`n`,value:`N`,description:`how many`},id:{type:`string`,value:`key`,description:`a client ID: sending the same one again posts once`},sync:{type:`string`,multiple:!0,value:`target`,description:`sync the new thread to a target too, e.g. slack:#incidents`},"no-sync":{type:`boolean`,description:`keep it on the board: sync it nowhere`},attach:{type:`string`,multiple:!0,value:`file`,description:`attach a file`},unset:{type:`string`,multiple:!0,value:`k`,description:`remove a label`},channel:{type:`string`,value:`c`,description:`in a channel`},remove:{type:`boolean`,description:`take the reaction back`},all:{type:`boolean`,short:`a`,description:`everything, not only what most want`},timeout:{type:`string`,value:`duration`,description:`how long to wait (default: 30m)`},code:{type:`boolean`,description:`post a code from your account instead of signing in`},"no-wait":{type:`boolean`,description:`start linking, and don't wait for it to finish`},"no-open":{type:`boolean`,description:`don't open the browser`},in:{type:`string`,value:`duration`,description:`once, this long from now, e.g. 1d`},at:{type:`string`,value:`time`,description:`at a time: once, or with --every, the first`},every:{type:`string`,value:`duration`,description:`repeating at this interval, e.g. 30m`},until:{type:`string`,short:`u`,value:`time`,description:`repeating until a time`},for:{type:`string`,value:`duration`,description:`repeating for this long, e.g. 24h`},times:{type:`string`,value:`N`,description:`repeating this many times`},port:{type:`string`,value:`N`,description:`the port to listen on`},dir:{type:`string`,value:`dir`,description:`where the board keeps its log (default: .board/)`},"no-inspect":{type:`boolean`,description:`don't start the inspector`},agent:{type:`string`,value:`name`,description:`the agent whose turn ended`,hidden:!0}},af=(e,t,n)=>({name:e,...rf[e],...t?{description:t}:{},...n?{value:n}:{}});[`re`,`by`,`from`,`label`,`text`,`mentions`,`after`].map(e=>af(e)),[`url`,`scope`,`team`,`as`,`avatar`,`human`,`handle`,`json`,`help`,`version`].map(e=>af(e)),af(`code`),af(`no-wait`),af(`no-open`),af(`limit`,`threads to list (default: 50)`),af(`label`,`label it`,`k=v`),af(`attach`),af(`sync`),af(`no-sync`),af(`id`),af(`attach`),af(`id`),af(`no-sync`),af(`in`),af(`at`),af(`every`),af(`until`),af(`for`),af(`times`),af(`label`,`label it`,`k=v`),af(`attach`),af(`no-sync`),af(`by`,`scheduled by a handle`),af(`channel`,`posting in a channel`),af(`all`,`done and canceled ones too`),af(`remove`),af(`unset`),af(`limit`,`events to list`),af(`limit`,`messages to read`),af(`channel`,`the channel to check in (default: conformance)`),af(`agent`),af(`all`,`delivery receipts too`),af(`timeout`);const of={re:rf.re,by:rf.by,mentions:rf.mentions,label:rf.label,from:rf.from,text:rf.text};function sf(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n];r===`--mentions`?e[n+1]?.startsWith(`@`)?t.push(`--mentions=${e[++n]}`):t.push(`--mentions=me`):t.push(r)}return t}function cf(e){let t=[],n=null,r=null;for(let i=0;i<e.length;i++){let a=e[i];r?a===r?r=null:a===`\\`&&r===`"`&&i+1<e.length?n+=e[++i]:n+=a:/\s/.test(a)?(n!==null&&t.push(n),n=null):a===`"`||a===`'`?(r=a,n??=``):n=a===`\\`&&i+1<e.length?(n??``)+e[++i]:(n??``)+a}if(r)throw Error(`unterminated ${r}`);return n!==null&&t.push(n),t}const lf={...of,all:{type:`boolean`}};function uf(e){let t={},n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i===`--`){n.push(...e.slice(r+1));break}if(!i.startsWith(`-`)||i===`-`){n.push(i);continue}let a=i.indexOf(`=`),o=i.startsWith(`--`)?i.slice(2,a===-1?void 0:a):null,s=o!==null&&Object.hasOwn(lf,o)?lf[o]:null;if(!s)throw Error(`${o===null?i.slice(0,2):`--${o}`} isn't a filter`);if(s.type===`boolean`){if(a!==-1)throw Error(`--${o} takes no value`);t[o]=!0;continue}let c;if(a!==-1)c=i.slice(a+1);else{let t=e[r+1];if(t===void 0||t.length>1&&t.startsWith(`-`))throw Error(`--${o} needs a value`);c=t,r++}t[o]=`multiple`in s?[...t[o]??[],c]:c}return{values:t,positionals:n}}function df(e){let{values:t,positionals:n}=uf(sf(cf(e)));if(n.length>1)throw Error(`expected one channel, got: ${n.join(` `)}`);let r=n[0],i=Du.safeParse({...r?{channel:r}:{},...t.re?{re:t.re.replace(/^#/,``)}:{},...t.by?{by:t.by.replace(/^@/,``)}:{},...t.mentions?{mentions:t.mentions.replace(/^@/,``)}:{},...t.label?.length?{label:t.label}:{},...t.from?{from:t.from}:{},...t.text?{text:t.text}:{}});if(!i.success){let e=i.error.issues[0];throw Error(`${e?.path.length?`--${String(e.path[0])}: `:``}${e?.message??`invalid filters`}`)}return{filters:i.data,all:t.all===!0}}const ff=e=>e.channel!==void 0||e.re!==void 0||e.by!==void 0||e.mentions!==void 0||e.from!==void 0||e.text!==void 0||(e.label?.length??0)>0;function pf(e,t){let n,r;try{({filters:n,all:r}=df(t.tail))}catch(t){throw Error(`watch ${e}: ${t.message}`)}if(n.mentions===`me`)throw Error(`watch ${e}: a watcher has no "me": use --mentions @handle`);let i=ff(n);if(t.when===`enters`&&!i)throw Error(`watch ${e}: \`when: enters\` needs a filter to enter`);return{filters:n,criteria:i,enters:t.when===`enters`,all:r}}const mf=1e4,hf=e=>((e instanceof Error?e.message:String(e))||`unknown error`).slice(0,500),gf=e=>e?.startsWith(`https://`)?e:null;function _f(e){let t=typeof process<`u`&&process.env.VERCEL===`1`?process.env:null,n=t?.VERCEL_TARGET_ENV||t?.VERCEL_ENV,r=n===`preview`&&t?.VERCEL_GIT_COMMIT_REF||null;return!e||n!==`production`&&!r?null:{path:new URL(e).pathname,...r?{branch:r}:{}}}function vf(e){let{registry:t,rethrow:n}=e,r=e.binding,i=null,a=null;async function o(n){let r=await e.hash();return i&&i.url===n&&i.result.hash===r&&Date.now()-i.at<mf?i.result:(a??=e.wakeAt(n).then(e=>t.register(e)).then(e=>(i={url:n,at:Date.now(),result:e},e)).finally(()=>{a=null}),a)}async function s(e){let n={};if(!r().subscriptions[e.watcher])n={skip:!0};else try{await r().run(e.watcher,e.event,{trigger:`watch:${e.watcher}:${e.id}`,attempt:e.attempt+1})}catch(t){console.error(`[board] watcher ${e.watcher} failed:`,t),n={error:hf(t)}}await t.ack(e.id,{lease:e.lease,...n}).catch(e=>console.error(`[board] couldn't ack a match:`,hf(e)))}async function c(){let e=0,n=Date.now()+24e4;for(;Date.now()<n;){let n=await t.matches({limit:10});if(n.length===0)break;await Promise.all(n.map(s)),e+=n.length}return e+await r().pull()}let l=null;function u(){if(l)return;let n=l=new AbortController;(async()=>{for(let i=1e3;!n.signal.aborted;)try{await o(null);let e=await t.matches({limit:10,wait:25,signal:n.signal});await Promise.all(e.map(s)),await r().pull(),i=1e3}catch(t){if(n.signal.aborted)break;console.error(`[board] couldn't pull matches from ${e.remote}:`,hf(t)),await new Promise(e=>setTimeout(e,i)),i=Math.min(i*2,6e4)}})()}let d=null,f=0;function p(){if(d)return d;if(!e.hasWork()||Date.now()-f<mf)return Promise.resolve();let t=gf(r().url());return!t&&typeof process<`u`&&process.env.VERCEL===`1`?Promise.resolve():(d=o(t).then(()=>{},t=>{d=null,f=Date.now(),console.error(`[board] couldn't register with ${e.remote}:`,hf(t))}),t||u(),d)}return{start:p,routes:[{method:`POST`,path:`/wake`,async handle(t){return d??=Promise.resolve(),t.headers.get(`x-board-watchers`)!==await e.hash()&&await o(gf(r().url())).catch(n),Ud({ran:await c().catch(n)})}},{method:`POST`,path:`/watchers`,async handle(t,{caller:i}){if(i)return e.registerFor(i,t);d??=Promise.resolve();let a=gf(r().url()),s=await o(a).catch(n);return a||u(),Ud(s)}}],registerNow:()=>o(gf(r().url())),close:()=>{l?.abort(),l=null}}}const yf=(e,t)=>e<t?-1:+(e>t);function bf(e,t=[]){let n=Object.keys(e).sort(yf).map(t=>[t,e[t].tail,e[t].when]);return t.length>0&&n.push([`sync`,[...t].sort((e,t)=>yf(e.key,t.key)).map(e=>[e.key,e.platform,e.signIn])]),JSON.stringify(n)}const xf=/^[A-Za-z][A-Za-z0-9-]{0,31}$/,Sf=/* @__PURE__ */ new Set([`identity`,`edit`,`delete`,`schedule`,`cancelSchedule`,`upload`,`uploadStart`,`uploadFinish`,`watchers`,`register`,`matches`,`ack`,`syncImport`,`syncReceipt`,`syncThread`,`syncFind`,`syncCopies`,`syncRoots`,`inboxPush`,`inboxNext`,`inboxAck`,`inbox`,`syncCode`,`syncAccount`,`syncUnlink`]);function Cf(e){let t=e.replace(/[^A-Za-z0-9-]+/g,`-`).replace(/^-+|-+$/g,``);return/^[A-Za-z]/.test(t)||(t=`u-${t}`),t.slice(0,32).replace(/-+$/,``)}function wf(e,t){let n=new Set([...t,`middleware`,`client`].map(e=>e.toLowerCase())),r=Cf(e),i=r;for(let e=2;n.has(i.toLowerCase());e++)i=`${r.slice(0,31-String(e).length)}-${e}`;return i}function Tf(e){let{access:t}=e.principal;if(t.everywhere(`manage`))return null;let n=Object.entries(t.summary()).map(([e,t])=>`${e}=${t.join(`,`)}`);return n.length>0?n.join(`;`):`*=`}const Ef=e=>((e instanceof Error?e.message:String(e))||`unknown error`).slice(0,500),Df=e=>{throw e instanceof bd?new Id(e.status>=400?e.status:502,e.code,e.message):e instanceof Id||e instanceof Error&&e.name===`AbortError`?e:new Id(502,`unreachable`,`the board didn't answer: ${Ef(e)}`)};function Of(e){let t=new URLSearchParams;for(let[n,r]of Object.entries(e))if(r!=null&&r!==!1){if(n===`label`&&Array.isArray(r))for(let[e,n]of r)t.append(`label`,n===null?e:`${e}=${n.join(`|`)}`);else if(Array.isArray(r))for(let e of r)t.append(n,String(e));else t.set(n,String(r))}let n=t.toString();return n?`?${n}`:``}function kf(e,t){let n=(t.headers.get(`content-disposition`)??``).match(/filename\*=UTF-8''([^;]+)/)?.[1],r=`file`;try{n&&(r=decodeURIComponent(n))}catch{}return{attachment:{id:e,name:r,type:t.headers.get(`content-type`)??`application/octet-stream`,size:Number(t.headers.get(`content-length`)??0)},data:t.body??/* @__PURE__ */ new Uint8Array}}function Af(e,t,n){if(e!==void 0&&!/^https?:\/\/[^/]/.test(e))throw Error(`http: ${e} isn't a URL: pass the board's, like https://board.example.com/api/board`);if(e===void 0&&!n)throw Error(`http: pass the board's URL: outside Node there's no environment to find it in`);let r=(e??n.url()).replace(/\/+$/,``),i=t.fetch??n?.fetch(r)??((e,t)=>globalThis.fetch(e,t)),a=null,o={},s=[],c=null,l=()=>c??=Md(bf(o,s)).then(e=>e.slice(0,32)),u=()=>{if(!a)throw Error(`http: this backend isn't serving a board yet: pass it to board({ backend })`);return a},d=(e,t)=>kd({url:r,fetch:i,profile:e===void 0?()=>n?.profile().profile??null:e,session:t||e===null?null:()=>n?.profile().session??null}),f=d(null,!0),p=/* @__PURE__ */ new Map;function m(e){if(!xf.test(e))throw new Id(400,`invalid_request`,`as: ${e}: profiles start with a letter and use up to 32 letters, numbers, and hyphens`);let t=p.get(e);return t||p.set(e,t=d(e,!0)),t}let h=/* @__PURE__ */ new Map;function g(e){let t=JSON.stringify(e??(e===null?null:`\0`)),n=h.get(t);return n||h.set(t,n=d(e,!1)),n}function _(e){return e.origin.via?.kind===`engine`?f:e.origin.via?.kind===`client`?(e.self!==null&&m(e.self),g(`profile`in e?e.profile:e.self??void 0)):m(e.self??`client`)}let v=null,y=()=>(v??=i(r).then(async e=>{if(!e.ok)throw new Id(e.status>=400?e.status:502,`no_board`,`no board at ${r} (${e.status})`);return await e.json()},Df)).catch(e=>{throw v=null,e}),b=null,x=()=>b??=f.me().then(e=>e.principal).catch(e=>{throw b=null,e}),S=async e=>Fd(await x(),e);async function C(e,t,n,i){let a=vd[t],o={...n},s=a.path.replace(/:(\w+)/g,(e,t)=>{let n=o[t];return delete o[t],encodeURIComponent(String(n))}),c;if(t===`upload`){let{data:t,name:r,type:a}=n;if(t.byteLength>4194304){let n=await e.upload({data:t,name:r??`file`,...a?{type:a}:{}}).catch(Df);return Response.json({attachment:n})}c=await e.request(s,{method:`POST`,body:t,headers:{...a?{"content-type":a}:{},...r===null?{}:{"x-board-filename":encodeURIComponent(r)}},signal:i}).catch(Df)}else c=a.method===`GET`?await e.request(`${s}${Of(o)}`,{signal:i}).catch(Df):await e.request(s,{method:`POST`,body:new TextEncoder().encode(JSON.stringify(o)),headers:{"content-type":`application/json`},signal:i}).catch(Df);if(c.ok)return c;try{let e=await c.json();if(e.error?.message)throw new Id(c.status,e.error.code??`error`,e.error.message)}catch(e){if(e instanceof Id)throw e}throw new Id(502,`remote_error`,`${r} answered ${c.status}`)}async function w(e,t,n,a){if(e===`me`){let{principal:e,author:n,actor:r}=t;return{actor:r.id,principal:e.id,kind:r.kind,handle:r.handle,name:r.name,avatar:r.avatar,profile:n.profile,session:n.session,expiresAt:e.expiresAt?.toISOString()??null,can:e.access.summary()}}if(Sf.has(e))throw Bd(`this board's callers act as its project on ${r}, which can't tell them apart: ${e} is the project's own to do there`);let s=Tf(t),c=t.actor.avatar?.startsWith(`https://`)?t.actor.avatar:void 0,l=kd({url:r,fetch:i,profile:{name:wf(t.actor.handle,Object.keys(o)),...c?{avatar:c}:{}},session:null,...s===null?{}:{headers:{"x-board-scope":s}}});(e===`post`||e===`posted`)&&typeof n.id==`string`&&(n={...n,id:await S(await Nd(`board-gateway`,t.principal.id,n.id)).catch(Df)});let u=await C(l,e,n,a);return e===`attachment`?kf(String(n.id),u):u.json()}async function T(e,t,n,r){let i=k();if(`identity`in t)return w(e,t.identity,n,r);let a=_(t);`self`in t&&t.origin.via?.kind===`engine`&&await i,(e===`post`||e===`posted`)&&`self`in t&&typeof n.id==`string`&&Pd.test(n.id)&&(n={...n,id:await S(n.id).catch(Df)});let o=await C(a,e,n,r);return e===`attachment`?kf(String(n.id),o):o.json()}let E={...Object.fromEntries(Jd.map(e=>[e,(t,n,r)=>T(e,t,n,r)])),async discovery(){return y()},async readSource(e,t,n){return`self`in e&&u().sync.some(e=>e.key===t.key)?u().readSource(t.key,t.target,t.limit??50):T(`readSource`,e,t,n)},async joinSource(e,t,n){return`self`in e&&u().sync.some(e=>e.key===t.key)?u().joinSource(t.key,t.target):T(`joinSource`,e,t,n)},async synced(e,t,n){let{targets:r}=await T(`synced`,e,t,n);return{targets:await Promise.all(r.map(async e=>({...e,url:e.url??(e.thread!==null&&e.message!==null?await u().linkOf(e.key,e.thread,e.message):null)})))}},async linked(e,t,n){let r=()=>new Id(404,`message_not_found`,`no message on this board for that link`),i=await(async()=>{for(let{platform:e,thread:r,message:i}of u().locate(t.url))for(let t of u().sync.filter(t=>t.platform===e)){let e=await f.syncFind({thread:`${t.key}:${r}`,...i===null?{}:{message:i}},{signal:n}).catch(Df),a=i===null?e.thread===null?null:(await f.syncThread(e.thread).catch(Df)).root:e.message;if(a!==null)return a}return null})();if(i===null)return T(`linked`,e,t,n);try{return await E.message(e,{id:i},n)}catch(e){throw e instanceof Id&&e.status===404?r():e}},async typing(e,t,n){let{targets:r}=await T(`typing`,e,t,n);if(!(`self`in e)||u().sync.length===0)return{targets:r};let{message:i,replies:a}=await E.message(e,{id:t.id},n),o=await u().typing([i,...a],t.status).catch(e=>(console.warn(`[board] skipped typing where this board syncs:`,Ef(e)),[]));return{targets:[...r,...o]}}};async function D(e){let t=_f(e);return t&&(await y()).wake_by_path?t:{url:e}}let O=vf({remote:r,registry:{register:e=>f.register({...e,watch:o,...s.length>0?{sync:s}:{}}),matches:e=>f.matches(e),ack:(e,t)=>f.ack(e,t)},wakeAt:D,binding:u,hash:l,hasWork:()=>Object.keys(o).length>0||s.length>0,rethrow:Df,registerFor:async(e,t)=>Ud(await E.register(e,zu.parse(await t.json()),t.signal))}),k=O.start;return{...E,routes:O.routes,keeps:!1,bind(e){if(a)throw Error(`http: this backend already serves a board: create one http() per board()`);for(let[t,n]of Object.entries(e.subscriptions)){if(n.kind===`sync`){t===`@sync`&&(s=e.sync.map(e=>({...e})));continue}if(!xf.test(t))throw Error(`watch ${t}: ids start with a letter and use up to 32 letters, numbers, and hyphens`);pf(t,n),o[t]={tail:n.tail,when:n.when}}c=null,a=e},registerWatchers:O.registerNow,close:O.close}}function jf(e,t={}){return Af(e,t,null)}const Mf=/```[\s\S]*?```/g,Nf=/`[^`\n]*`/g,Pf=`[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?`,Ff=RegExp(`(?<![\\w@.-])@(${Pf}(?:/${Pf})?)(?!:|[a-z0-9_/-]|\\.(?=[a-z0-9]))`,`gi`),If=/(?<![\w@.-])@\[([^\]\s]+)\]/g,Lf=e=>e.replace(Mf,e=>` `.repeat(e.length)).replace(Nf,e=>` `.repeat(e.length));function Rf(e){let t=Lf(e),n=[];for(let e of t.matchAll(If)){let t=e[1];t!==void 0&&n.push({index:e.index,token:{kind:`actor`,actor:t},key:`actor:${t}`})}for(let e of t.replace(If,e=>` `.repeat(e.length)).matchAll(Ff)){let t=e[1]?.toLowerCase();t!==void 0&&n.push({index:e.index,token:{kind:`handle`,handle:t},key:`handle:${t}`})}let r=/* @__PURE__ */ new Set;return n.sort((e,t)=>e.index-t.index).filter(({key:e})=>!r.has(e)&&r.add(e)).map(({token:e})=>e)}function zf(e,t){let n=Lf(e),r=[];for(let e of n.matchAll(If))r.push({index:e.index,length:e[0].length,token:{kind:`actor`,actor:e[1]}});for(let e of n.replace(If,e=>` `.repeat(e.length)).matchAll(Ff))r.push({index:e.index,length:e[0].length,token:{kind:`handle`,handle:e[1].toLowerCase()}});let i=``,a=0;for(let{index:n,length:o,token:s}of r.sort((e,t)=>e.index-t.index)){let r=e.slice(n,n+o);i+=e.slice(a,n)+(t(s,r)??r),a=n+o}return i+e.slice(a)}const Bf=[`read`,`post`,`react`,`label`,`sync`,`manage`],Vf={read:[],post:[],react:[`read`],label:[`read`],sync:[`read`],manage:[`read`,`post`,`react`,`label`,`sync`]},Hf=new Map(Bf.map((e,t)=>[e,t])),Uf=`write *, a channel, or a channel and its subtree (feedback/)`;function Wf(e){if(e===`*`)return{kind:`all`};if(e.includes(`*`)){let t=e.slice(0,e.indexOf(`*`)).replace(/\/+$/,``),n=t===``?`write * for every channel`:Xl.safeParse(t).success?`write ${t}/ for ${t} and its subtree`:Uf;throw Error(`invalid channel pattern ${e}: ${n}`)}let t=e.endsWith(`/`),n=t?e.slice(0,-1):e;if(!Xl.safeParse(n).success)throw Error(`invalid channel pattern ${e||`(empty)`}: ${Uf}`);return t?{kind:`subtree`,path:n}:{kind:`exact`,path:n}}const Gf=e=>e.kind===`all`?`*`:e.kind===`subtree`?`${e.path}/`:e.path;function Kf(e){let t=/* @__PURE__ */ new Set,n=e=>{if(!Hf.has(e))throw Error(`unknown permission ${String(e)}: use ${Bf.join(`, `)}`);if(!t.has(e)){t.add(e);for(let t of Vf[e])n(t)}};for(let t of e===`all`?Bf:e)n(t);return t}const qf=/* @__PURE__ */ new Set;function Jf(e){let t=null,n=/* @__PURE__ */ new Map,r=[];for(let[i,a]of e)i.kind===`all`?t=a:i.kind===`exact`?n.set(i.path,a):r.push([i.path,a]);return r.sort((e,t)=>t[0].length-e[0].length),{all:t,exact:n,subtrees:r}}const Yf=(e,t)=>e===t||e.startsWith(`${t}/`);function Xf(e,t,n=!1){if(!n){let n=e.exact.get(t);if(n)return n}for(let[n,r]of e.subtrees)if(Yf(t,n))return r;return e.all??qf}const Zf=(e,t)=>t.kind===`all`?e.all??qf:Xf(e,t.path,t.kind===`subtree`),Qf=(e,t)=>e.size===t.size&&[...e].every(e=>t.has(e));function $f(e,t){if(t.kind===`exact`)return Xf(e,t.path,!0);if(t.kind===`subtree`){for(let[n,r]of e.subtrees)if(n!==t.path&&Yf(t.path,n))return r}return e.all??qf}function ep(e){let t=Jf(e);return Jf(e.filter(([e,n])=>e.kind===`all`?n.size>0:!Qf(n,$f(t,e))))}function tp(e){return e===`all`||Array.isArray(e)?[[{kind:`all`},Kf(e)]]:Object.entries(e).map(([e,t])=>[Wf(e),Kf(t)])}const np=e=>[...e.all?[[{kind:`all`},e.all]]:[],...e.subtrees.map(([e,t])=>[{kind:`subtree`,path:e},t]),...[...e.exact].map(([e,t])=>[{kind:`exact`,path:e},t])],rp=Symbol(`board.access`),ip=e=>typeof e==`object`&&rp in e;function ap(e){let t=np(e),n=n=>(e.all?.has(n)??!1)&&t.every(([,e])=>e.has(n)),r=/* @__PURE__ */ new Map;return{[rp]:e,can:(t,n)=>Xf(e,n).has(t),readable(t){let n=r.get(t);return n===void 0&&r.set(t,n=Xf(e,t).has(`read`)),n},readsAll:n(`read`),everywhere:n,anywhere:e=>t.some(([,t])=>t.has(e)),narrow(n){let r=ip(n)?n[rp]:ep(tp(n)),i=/* @__PURE__ */ new Map([[`*`,{kind:`all`}]]);for(let[e]of[...t,...np(r)])i.set(Gf(e),e);return ap(ep([...i.values()].map(t=>{let n=Zf(r,t);return[t,new Set([...Zf(e,t)].filter(e=>n.has(e)))]})))},summary(){let e=t.map(([e,t])=>[Gf(e),t]);e.sort(([e],[t])=>e===`*`?-1:t===`*`?1:e.localeCompare(t));let n={};for(let[t,r]of e)n[t]=[...r].sort((e,t)=>Hf.get(e)-Hf.get(t));return n}}}function op(e){return ap(ep(tp(e)))}const sp=op(`all`);function cp(e){if(e.length>4e3)throw Error(`x-board-scope is longer than 4000 characters`);let t={},n=e.split(`;`).map(e=>e.trim());if(n.every(e=>e===``))throw Error(`x-board-scope is empty: write pattern=permissions, like dev/=read,post`);for(let e of n){if(e===``)continue;let n=e.indexOf(`=`);if(n<0)throw Error(`x-board-scope entry ${e} needs =: write pattern=permissions, like dev/=read,post`);let r=e.slice(0,n).trim(),i=e.slice(n+1).trim();if(Object.hasOwn(t,r))throw Error(`x-board-scope lists ${r} twice`);Wf(r);let a=i===``?[]:i.split(`,`).map(e=>e.trim());if(a.length===1&&a[0]===`all`){t[r]=`all`;continue}for(let e of a)if(!Hf.has(e))throw Error(`x-board-scope: unknown permission ${e||`(empty)`}: use ${Bf.join(`, `)}, or all`);t[r]=a}return t}const lp=[`claude`,`codex`,`grok`,`pi`],up=/^[A-Za-z][A-Za-z0-9-]{0,31}$/,dp=/^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/;function fp(e){let t=e.get(`x-board-profile`)?.trim()||null;if(t!==null&&!up.test(t))throw Rd(`profile names start with a letter and use up to 32 letters, numbers, and hyphens`);let n=e.get(`x-board-avatar`)?.trim()||null;if(n!==null&&!mp(n))throw Rd(`avatars must be https URLs (http only on localhost)`);let r=e.get(`x-board-session`)?.trim().slice(0,200)||null,i=e.get(`x-board-handle`)?.trim().toLowerCase()||null;if(i!==null&&!dp.test(i))throw Rd(`invalid handle: ${i}`);let a=e.get(`x-board-name`),o=null;if(a)try{o=decodeURIComponent(a).replace(/[\u0000-\u001f\u007f]/g,``).trim().slice(0,128)||null}catch{throw Rd(`x-board-name must be URI-encoded`)}let s=e.get(`x-board-scope`);if(s!==null)try{cp(s)}catch(e){throw Rd(e.message,`invalid_scope`)}return{profile:t,avatar:n,session:r,handle:i,name:o,scope:s}}function pp(e,t,n){let r=e.kind===`person`&&e.facts?.issuer!==`host`&&t.handle?t.handle:e.handle,i=e.kind===`person`?t.name:null,a=t.profile?.toLowerCase()??null,o=a===null?e.id:`${e.id}+${a}`,s=a!==null&&lp.includes(a),c={id:o,kind:a===null?e.kind:`agent`,handle:a===null?r:`${r}/${a}`,name:t.profile??i??r,avatar:t.avatar??(s?`${n}/avatars/${a}`:null)};return{author:{actor:o,principal:e.id,profile:a,session:t.session},actor:c}}function mp(e){try{let t=new URL(e);return t.protocol===`https:`||t.protocol===`http:`&&[`localhost`,`127.0.0.1`].includes(t.hostname)}catch{return!1}}const hp=e=>Bd(`this token can't use this board: add ${e} to access`),gp=e=>{let t=new URL(e);return`${t.host}${t.pathname.replace(/\/+$/,``)}`.replace(/[%:]/g,e=>e===`%`?`%25`:`%3A`)};function _p(e){let t=/* @__PURE__ */ new Map;for(let n of e){let e=gp(n),r=t.get(e);if(r!==void 0&&r!==n)throw Error(`access: oidc issuers ${r} and ${n} name the same principals, oidc:${e}:<sub>: pin one of them`);t.set(e,n)}return new Set(e)}const vp=e=>[...new Set(e.flatMap(e=>typeof e!=`function`&&e.issuer===`oidc`?[e.url]:[]))];function yp(e){let t=typeof e.access==`function`?[]:e.access,n=typeof e.access==`function`?e.access:null,r=_p(vp(t));async function i(n,i){if(i?.issuer===`host`)throw Bd(`this token can't use this board: its board no longer takes a host's principals`);if(i?.issuer===`oidc`&&!r.has(i.iss))throw zd(`untrusted issuer: ${i.iss}`);let a=i?.claims??{},o=i?.issuer===`vercel`?await e.project():null,s=o?{teamId:i.team??o.teamId,projectId:o.id}:{teamId:null,projectId:null},c=String(a.environment??``),l=bp(),u=o!==null&&o.id!==null&&a.project_id===o.id,d=u&&l!==null&&c===l;for(let e of t){if(typeof e==`function`){if(d)continue;let t=await e(n);if(t===void 0)continue;if(t===null)throw Bd(`this token can't use this board`);return op(t)}if(i&&e.issuer===i.issuer&&(e.issuer!==`oidc`||e.url===i.iss)&&e.matches(a,s))return e.access}if(d)return sp;throw i?i.issuer===`oidc`?hp(`oidc({ issuer: '${i.iss}', claims, can })`):i.issuer===`github`?hp(`githubActions({ repository: '${String(a.repository)}', can })`):u?Bd(`this token can't use this board: it runs in ${l??`no Vercel environment`}, so its ${c||`unnamed`} deployments need vercelProject({ project: 'self', environments: ['${c}'], can })`):hp(`vercelProject({ project: '${String(a.project??``)||String(a.project_id)}', can })`):Bd(`this token can't use this board`)}async function a(t){let r=sp,a=t.facts?.issuer===`host`;if(t.id.startsWith(`board:`)||t.kind===`external`&&!a)r=sp;else{if(a){if(!e.hosts)throw Bd(`this token can't use this board: its board no longer takes a host's principals`);let{exp:n}=t.facts.claims;if(typeof n==`number`&&n*1e3<=Date.now())throw zd(`token expired`)}if(n){let e=await n(t);if(e==null)throw Bd(`this token can't use this board`);r=op(e)}else t.kind!==`person`&&(r=await i(t,(a?void 0:t.facts)??xp(t.id)))}return t.scope===void 0?r:r.narrow(cp(t.scope))}async function o(e){try{return await a(e)}catch(e){let t=e.status;if(t===401||t===403)return null;throw e}}return{grant:a,accessNow:o}}const bp=()=>process.env.VERCEL_TARGET_ENV||process.env.VERCEL_ENV||null;function xp(e){let t=e.match(/^vercel:project:([^:]+):([^:]+)$/);return t?{issuer:`vercel`,iss:``,claims:{project_id:t[1],environment:t[2]}}:null}const Sp=Symbol(`board.oidcTokens`),Cp=/* @__PURE__ */ new WeakSet,wp=e=>Sp in e,Tp=e=>Cp.has(e),Ep=/^[a-z][a-z0-9-]*:[a-z][a-z0-9-]*:[^\s+\]]{1,200}$/,Dp=[`person`,`deployment`,`workflow`,`external`];function Op(e){let t=e=>{throw TypeError(`authenticate returned an invalid principal: ${e}`)};(typeof e!=`object`||!e)&&t(`not an object`),(typeof e.id!=`string`||!Ep.test(e.id)||e.id.startsWith(`board:`))&&t(`id must look like \`vercel:user:<id>\`, got ${JSON.stringify(e.id)}`),Dp.includes(e.kind)||t(`kind must be one of ${Dp.join(`, `)}`),(typeof e.handle!=`string`||!/^\S{1,64}$/.test(e.handle))&&t(`handle must be 1-64 characters, no spaces`);let n=e.expiresAt??null;if(n!==null&&(!(n instanceof Date)||Number.isNaN(n.getTime()))&&t(`expiresAt must be a Date or null`),n!==null&&n.getTime()<=Date.now())throw zd(`token expired`);let r=n===null?{}:{exp:Math.floor(n.getTime()/1e3)};return{id:e.id,kind:e.kind,handle:e.handle,expiresAt:n,facts:{issuer:`host`,iss:``,claims:r}}}function kp(e,t,n){let r=t||e.access!==void 0,i=e.access??[],a=null,o=()=>(a??=(async()=>{if(!n)return{id:e.project?.id??null,teamId:e.project?.teamId??null};let t=await n(),[r,i]=await Promise.all([t.ownProjectId(e.project),t.ownTeamId(e.project)]);return{id:r,teamId:i}})()).catch(e=>{throw a=null,e});async function s(t){return n?(await n()).discoveryIdentity(t,e.project):{projectId:e.project?.id??null,teamId:e.project?.teamId??null}}let c=null,l=()=>e.authenticate?Promise.resolve(e.authenticate):c??=n?n().then(e=>e.oidcTokens()):Promise.reject(new Id(501,`no_verifier`,`this build of board verifies no tokens: pass board({ authenticate })`)),u=yp({access:i,project:o,hosts:e.authenticate!==void 0&&!wp(e.authenticate)}),d={project:o,issuers:typeof i==`function`?[]:vp(i)},f=/* @__PURE__ */ new Map,p=/* @__PURE__ */ new WeakMap;async function m(e){let t=e=>e.expiresAt===null||e.expiresAt.getTime()>Date.now(),n=p.get(e);if(n){let e=await n;if(t(e))return e}let r=e.credential===null?null:[e.audience,e.credential,e.headers.get(`x-vercel-oidc-token`)??``].join(``),i=r===null?void 0:f.get(r);if(i&&i.until>Date.now())return p.set(e,i.principal),i.principal;let a=h(e);return p.set(e,a),r!==null&&a.then(e=>{e.facts?.issuer!==`host`&&e.expiresAt!==null&&(f.size>=1e3&&f.delete(f.keys().next().value),f.set(r,{principal:a,until:e.expiresAt.getTime()}))},()=>p.delete(e)),a}async function h(e){let t=await l(),n;try{n=await t({...e,board:d})}catch(e){throw e instanceof Response?new Ld(e):e}if(n instanceof Response)throw new Ld(n);if(n==null)throw zd(`missing bearer token`);return Tp(n)?n:Op(n)}return{open:r,project:o,discoveryIdentity:s,async identify(e){let t=await m(e),n=e.claims.scope===null?t:{...t,scope:e.claims.scope},{author:r,actor:i}=pp(n,e.claims,e.audience);return{principal:{...n,access:await u.grant(n)},author:r,actor:i}},accessNow:e=>u.accessNow(e)}}const Ap={claude:`m4.7144 15.9555 4.7174-2.6471.079-.2307-.079-.1275h-.2307l-.7893-.0486-2.6956-.0729-2.3375-.0971-2.2646-.1214-.5707-.1215-.5343-.7042.0546-.3522.4797-.3218.686.0608 1.5179.1032 2.2767.1578 1.6514.0972 2.4468.255h.3886l.0546-.1579-.1336-.0971-.1032-.0972L6.973 9.8356l-2.55-1.6879-1.3356-.9714-.7225-.4918-.3643-.4614-.1578-1.0078.6557-.7225.8803.0607.2246.0607.8925.686 1.9064 1.4754 2.4893 1.8336.3643.3035.1457-.1032.0182-.0728-.164-.2733-1.3539-2.4467-1.445-2.4893-.6435-1.032-.17-.6194c-.0607-.255-.1032-.4674-.1032-.7285L6.287.1335 6.6997 0l.9957.1336.419.3642.6192 1.4147 1.0018 2.2282 1.5543 3.0296.4553.8985.2429.8318.091.255h.1579v-.1457l.1275-1.706.2368-2.0947.2307-2.6957.0789-.7589.3764-.9107.7468-.4918.5828.2793.4797.686-.0668.4433-.2853 1.8517-.5586 2.9021-.3643 1.9429h.2125l.2429-.2429.9835-1.3053 1.6514-2.0643.7286-.8196.85-.9046.5464-.4311h1.0321l.759 1.1293-.34 1.1657-1.0625 1.3478-.8804 1.1414-1.2628 1.7-.7893 1.36.0729.1093.1882-.0183 2.8535-.607 1.5421-.2794 1.8396-.3157.8318.3886.091.3946-.3278.8075-1.967.4857-2.3072.4614-3.4364.8136-.0425.0304.0486.0607 1.5482.1457.6618.0364h1.621l3.0175.2247.7892.522.4736.6376-.079.4857-1.2142.6193-1.6393-.3886-3.825-.9107-1.3113-.3279h-.1822v.1093l1.0929 1.0686 2.0035 1.8092 2.5075 2.3314.1275.5768-.3218.4554-.34-.0486-2.2039-1.6575-.85-.7468-1.9246-1.621h-.1275v.17l.4432.6496 2.3436 3.5214.1214 1.0807-.17.3521-.6071.2125-.6679-.1214-1.3721-1.9246L14.38 17.959l-1.1414-1.9428-.1397.079-.674 7.2552-.3156.3703-.7286.2793-.6071-.4614-.3218-.7468.3218-1.4753.3886-1.9246.3157-1.53.2853-1.9004.17-.6314-.0121-.0425-.1397.0182-1.4328 1.9672-2.1796 2.9446-1.7243 1.8456-.4128.164-.7164-.3704.0667-.6618.4008-.5889 2.386-3.0357 1.4389-1.882.929-1.0868-.0062-.1579h-.0546l-6.3385 4.1164-1.1293.1457-.4857-.4554.0608-.7467.2307-.2429 1.9064-1.3114Z`,openai:`M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z`,x:`M14.234 10.162 22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299-.929-1.329L3.076 1.56h3.182l5.965 8.532.929 1.329 7.754 11.09h-3.182z`,slack:`M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zM6.313 15.165a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zM8.834 6.313a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zM18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zM17.688 8.834a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zM15.165 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zM15.165 17.688a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z`,github:`M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12`,whatsapp:`M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413Z`},jp={claude:{background:`#D97757`,mark:{path:Ap.claude}},codex:{background:`#000000`,mark:{path:Ap.openai}},grok:{background:`#000000`,mark:{path:Ap.x}},pi:{background:`#1f1f1f`,mark:{glyph:`π`}}};function Mp(e){let t=jp[e]??{background:`#666666`,mark:{glyph:e.slice(0,1).toUpperCase()}},n=`path`in t.mark?`<path transform="translate(30 30) scale(2.8333)" fill="#ffffff" d="${t.mark.path}"/>`:`<text x="64" y="86" font-family="ui-sans-serif,system-ui,sans-serif" font-size="66" font-weight="600" text-anchor="middle" fill="#ffffff">${t.mark.glyph}</text>`;return`<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128"><rect width="128" height="128" rx="28" fill="${t.background}"/>${n}</svg>`}var Np=class extends Id{responses;constructor(e){super(422,`dropped`,e.join(`
|
|
345
|
+
`)),(t.id!==void 0||t.data!==void 0)&&(yield t)}}}finally{t?.removeEventListener(`abort`,a),n.releaseLock()}}var bd=class extends Error{code;status;constructor(e,t,n){super(t),this.name=`BoardError`,this.code=e,this.status=n}};const xd=async e=>typeof e==`function`?await e():e,Sd=e=>{let{at:t,until:n,...r}=Cd(e);return{...r,...t===void 0?{}:{at:t instanceof Date?t.toISOString():t},...n===void 0?{}:{until:n instanceof Date?n.toISOString():n}}},Cd=e=>{if(typeof e==`string`)return{text:e};let{attachments:t,...n}=e;return t?.length?{...n,attachments:t.map(e=>typeof e==`string`?e:e.id)}:n},wd={ms:1,s:1e3,m:6e4,h:36e5,d:864e5};function Td(e){if(typeof e==`number`)return e;let t=e.trim().match(/^(\d+(?:\.\d+)?)(ms|s|m|h|d)?$/);if(!t)throw new bd(`invalid_duration`,`invalid duration: ${e}`,0);return Number(t[1])*wd[t[2]??`ms`]}const Ed=e=>encodeURIComponent(e);function Dd(e){let t=new URLSearchParams;for(let[n,r]of Object.entries(e))if(r!=null){if(n===`label`){let e=Array.isArray(r)?r:typeof r==`object`?Object.entries(r).map(([e,t])=>`${e}=${String(t)}`):[r];for(let n of e)t.append(`label`,String(n))}else t.set(n,String(r))}let n=t.toString();return n?`?${n}`:``}const Od=(e,t)=>t?.length?{...e,unknownMentions:t}:e;function kd(e){let t=e.url.replace(/\/+$/,``),n=e.fetch??((e,t)=>globalThis.fetch(e,t)),r=e.storeFetch??((e,t)=>globalThis.fetch(e,t));async function i(t,n){let r={...e.headers?await xd(e.headers):{}};if(!t)return r;e.token!==void 0&&(r.authorization=`Bearer ${await xd(e.token)}`);let i=n===void 0?e.profile===void 0?null:await xd(e.profile):n;if(i!==null){let{name:e,avatar:t}=typeof i==`string`?{name:i,avatar:void 0}:i;r[`x-board-profile`]=e,t&&(r[`x-board-avatar`]=t)}else{let t=e.person===void 0?null:await xd(e.person);t?.name&&(r[`x-board-name`]=encodeURIComponent(t.name)),t?.avatar&&(r[`x-board-avatar`]=t.avatar)}let a=n===void 0?e.session===void 0?null:await xd(e.session):null;a&&(r[`x-board-session`]=a);let o=e.handle===void 0?null:await xd(e.handle);return o&&(r[`x-board-handle`]=o),r}async function a(e,r,a={}){let o=await n(`${t}${r}`,{method:e,headers:{...await i(a.auth??!0),...a.body===void 0?{}:{"content-type":`application/json`},...a.headers},...a.body===void 0?{}:{body:JSON.stringify(a.body)},...a.signal?{signal:a.signal}:{}});if(!o.ok)throw await Ad(o);return o}async function o(e,t,n){return await(await a(e,t,n)).json()}let s=(e={})=>e;async function c(e={},t){return o(`GET`,`/events${Dd(e)}`,t?{signal:t}:{})}return{url:t,request:async(e,r={})=>n(`${t}${e}`,{method:r.method??`GET`,headers:{...r.headers,...await i(!0,r.as)},...r.body?{body:r.body}:{},...r.signal?{signal:r.signal}:{}}),discovery:()=>o(`GET`,`/`,{auth:!1}),me:()=>o(`GET`,`/me`),channels:async()=>(await o(`GET`,`/channels`)).channels,actors:async()=>(await o(`GET`,`/actors`)).actors,identity:()=>o(`GET`,`/identity`),unlinkAccount:e=>o(`POST`,`/identity/unlink`,{body:{actor:e}}),messages:(e={})=>o(`GET`,`/messages${Dd(e)}`),thread:e=>o(`GET`,`/messages/${Ed(e)}`),posted:async e=>(await o(`GET`,`/posts/${Ed(e)}`)).message,threads:(e={})=>o(`GET`,`/threads${Dd(e)}`),async post(e,t){let{message:n,unknownMentions:r}=await o(`POST`,`/messages`,{body:{channel:e,...Cd(t)}});return Od(n,r)},async reply(e,t){let{message:n,unknownMentions:r}=await o(`POST`,`/messages`,{body:{re:e,...Cd(t)}});return Od(n,r)},async schedule(e,t){let{schedule:n,unknownMentions:r}=await o(`POST`,`/schedules`,{body:{...typeof e==`string`?{channel:e}:{re:e.re},...Sd(t)}});return Od(n,r)},schedules:async(e={})=>(await o(`GET`,`/schedules${Dd(e)}`)).schedules,cancelSchedule:e=>o(`POST`,`/schedules/${Ed(e)}/cancel`,{body:{}}),async upload(e){let a=e.type||(e.data instanceof Blob?e.data.type:``)||Pe(e.name),s=e.data instanceof Blob?e.data.size:e.data.byteLength;if(s>4194304){if(s>104857600)throw new bd(`too_large`,`attachments are at most ${je/1024/1024} MB`,413);let t=await o(`POST`,`/attachments/uploads`,{body:{name:e.name,type:a,size:s}}).catch(e=>{throw e instanceof bd&&e.status===404&&e.code===`not_found`?new bd(`too_large`,`this board takes files of at most ${ke/1024/1024} MB`,413):e}),n=await r(t.url,{method:`PUT`,headers:t.headers,body:e.data});if(!n.ok)throw new bd(`upload_failed`,`the blob store refused the file: ${n.status} ${(await n.text().catch(()=>``)).slice(0,300)||n.statusText}`,n.status);return(await o(`POST`,`/attachments/uploads/${encodeURIComponent(t.id)}`,{body:{}})).attachment}let c=await n(`${t}/attachments`,{method:`POST`,headers:{...await i(!0),"content-type":a,"x-board-filename":encodeURIComponent(e.name)},body:e.data});if(!c.ok)throw await Ad(c);return(await c.json()).attachment},download:(e,t={})=>a(`GET`,`/attachments/${encodeURIComponent(e)}`,t.signal?{signal:t.signal}:{}),edit:(e,t)=>o(`POST`,`/messages/${Ed(e)}/edit`,{body:{text:t}}),delete:e=>o(`POST`,`/messages/${Ed(e)}/delete`,{body:{}}),react:(e,t,n={})=>o(`POST`,`/messages/${Ed(e)}/reactions`,{body:{emoji:De(t),...n}}),label:(e,t)=>o(`POST`,`/messages/${Ed(e)}/labels`,{body:t}),typing:async(e,t)=>(await o(`POST`,`/messages/${Ed(e)}/typing`,{body:t?{status:t}:{}})).targets,sync:((e,t)=>t===void 0?o(`GET`,`/messages/${Ed(e)}/sync`):o(`POST`,`/messages/${Ed(e)}/sync`,{body:{target:t}})),linked:e=>o(`GET`,`/links${Dd({url:e})}`),inbox:async(e,t={})=>(await o(`GET`,`/inbox/${e}${Dd(t)}`)).events,register:e=>o(`POST`,`/watchers`,{body:e}),watchers:async()=>(await o(`GET`,`/watchers`)).watchers,matches:async(e={})=>{let{signal:t,...n}=e;return(await o(`GET`,`/watchers/matches${Dd(n)}`,t?{signal:t}:{})).matches},ack:(e,t)=>o(`POST`,`/watchers/matches/${encodeURIComponent(e)}/ack`,{body:t}),readSource:(e,t,n={})=>o(`GET`,`/sources/${e}/read${Dd({target:t,...n})}`),joinSource:(e,t)=>o(`POST`,`/sources/${e}/join`,{body:{target:t}}),poll:c,syncImport:e=>o(`POST`,`/sync/imports`,{body:e}),syncReceipt:e=>o(`POST`,`/sync/receipts`,{body:e}),syncThread:e=>o(`GET`,`/sync/threads/${Ed(e)}`),syncFind:(e,t={})=>o(`GET`,`/sync/find${Dd(e)}`,t.signal?{signal:t.signal}:{}),syncCopies:async e=>(await o(`GET`,`/sync/copies?${e.map(e=>`message=${encodeURIComponent(e)}`).join(`&`)}`)).copies,syncRoots:async(e,t)=>(await o(`GET`,`/sync/roots${Dd({by:e,since:t instanceof Date?t.getTime():t})}`)).roots,inboxPush:(e,t)=>o(`POST`,`/inbox/${Ed(e)}`,{body:{events:t}}),inboxNext:async(e,t={})=>(await o(`GET`,`/inbox/${Ed(e)}/next${Dd(t)}`)).items,inboxAck:(e,t,n)=>o(`POST`,`/inbox/${Ed(e)}/${Ed(t)}/ack`,{body:n}),syncCode:e=>o(`POST`,`/sync/codes`,{body:{sync:e}}),syncAccount:e=>o(`POST`,`/sync/accounts`,{body:e}),syncUnlink:e=>o(`POST`,`/sync/accounts/unlink`,{body:{account:e}}),async*events(e={},t={}){let n=e.after,r=0;for(;!t.signal?.aborted;){let i;try{i=await a(`GET`,`/events${Dd({...s(e),after:n})}`,{headers:{accept:`text/event-stream`},...t.signal?{signal:t.signal}:{}})}catch(e){if(t.signal?.aborted)return;if(e instanceof bd&&e.status>=400&&e.status<500)throw e;await new Promise(e=>setTimeout(e,Math.min(3e4,500*2**r++)));continue}r=0;try{for await(let e of yd(i.body,t.signal))e.id!==void 0&&(n=e.id),e.event===`board`&&e.data&&(yield JSON.parse(e.data))}catch{if(t.signal?.aborted)return;await new Promise(e=>setTimeout(e,Math.min(3e4,500*2**r++)))}}},async wait(e={},t={}){let n=Date.now()+Td(t.timeout??`30m`),r=e.after??(await c({...e,after:void 0,wait:0},t.signal)).cursor;for(;Date.now()<n&&!t.signal?.aborted;){let i=Math.max(0,Math.min(25,Math.ceil((n-Date.now())/1e3))),a=await c({...e,after:r,wait:i},t.signal);if(a.events.length>0)return a.events[0];r=a.cursor}return null}}}async function Ad(e){try{let t=await e.json();if(t.error?.message)return new bd(t.error.code??`error`,t.error.message,e.status)}catch{}return new bd(`http_error`,`${e.status} ${e.statusText}`,e.status)}const jd=e=>Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``);async function Md(e){return jd(new Uint8Array(await crypto.subtle.digest(`SHA-256`,new TextEncoder().encode(e))))}async function Nd(...e){let t=new Uint8Array(await crypto.subtle.digest(`SHA-256`,new TextEncoder().encode(JSON.stringify(e)))).slice(0,16);t[6]=t[6]&15|128,t[8]=t[8]&63|128;let n=jd(t);return`${n.slice(0,8)}-${n.slice(8,12)}-${n.slice(12,16)}-${n.slice(16,20)}-${n.slice(20,32)}`}const Pd=/^[0-9a-f]{8}-[0-9a-f]{4}-8[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/,Fd=async(e,t)=>`key:${e}:${(await Md(`board-key\u001f${t}`)).slice(0,32)}`;var Id=class extends Error{status;code;constructor(e,t,n){super(n),this.status=e,this.code=t}},Ld=class extends Id{response;constructor(e){super(e.status,`rejected`,`rejected with ${e.status}`),this.response=e}};const Rd=(e,t=`invalid_request`)=>new Id(400,t,e),zd=e=>new Id(401,`unauthorized`,e),Bd=e=>new Id(403,`forbidden`,e),Vd=(e,t=`not_found`)=>new Id(404,t,e),Hd=()=>new Id(409,`duplicate_id`,`that id was already used for a different write`),Ud=(e,t=200,n)=>new Response(JSON.stringify(e),{status:t,headers:{"content-type":`application/json`,...n}});function Wd(e){if(e.code!==`invalid_union`||e.errors.length===0)return e;let t=e.errors.reduce((e,t)=>t.length<e.length?t:e)[0];return t?Wd({...t,path:[...e.path,...t.path]}):e}function Gd(e){if(e instanceof Ld)return e.response;if(e instanceof Id)return Ud({error:{code:e.code,message:e.message}},e.status);if(e instanceof oc){let t=e.issues[0]&&Wd(e.issues[0]),n=t?.path.length?`${t.path.join(`.`)}: `:``;return Ud({error:{code:`invalid_request`,message:`${n}${t?.message??`invalid request`}`}},400)}let t=e?.code;return t===`INVALID_PAYLOAD`?Ud({error:{code:`invalid_request`,message:e.message}},400):t===`PARTIAL_DUPLICATE_BATCH`||t===`DUPLICATE_EVENT_ID`?Gd(Hd()):t===`STORE_UNAVAILABLE`||t===`STORE_NOT_CONFIGURED`?Ud({error:{code:`unavailable`,message:e.message}},503):(console.error(`[board]`,e),Ud({error:{code:`internal`,message:`internal error`}},500))}const Kd=`0.24.0`,qd=[`avatar`,`openapi`,`webhook`,`signIn`,`signedIn`,`identityUnlink`,`sync`],Jd=/* @__PURE__ */ `discovery.me.channels.actors.identity.messages.threads.message.post.posted.edit.delete.react.label.schedule.schedules.cancelSchedule.upload.attachment.uploadStart.uploadFinish.watchers.register.matches.ack.events.syncImport.syncReceipt.syncThread.syncFind.syncCopies.syncRoots.inboxPush.inboxNext.inboxAck.inbox.syncCode.syncAccount.syncUnlink.typing.readSource.joinSource.synced.linked`.split(`.`),Yd=e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);function Xd(e,t,n,r){let i=t.split(`/`).filter(Boolean),a=i.map(e=>e.startsWith(`:`)?`/([^/]+)`:`/${Yd(e)}`).join(``);return{method:e,pattern:RegExp(`${a}$`),names:i.filter(e=>e.startsWith(`:`)).map(e=>e.slice(1)),target:n,segments:i.length,literals:i.filter(e=>!e.startsWith(`:`)).length,own:r}}function Zd(e,t){let n=[...qd.map(e=>Xd(vd[e].method,vd[e].path,{kind:`board`,name:e},!1)),...Jd.filter(e=>e!==`discovery`).map(e=>Xd(vd[e].method,vd[e].path,{kind:`protocol`,name:e},!1)),...e.map(e=>Xd(e.method,e.path,{kind:`backend`,route:e},!0))].sort((e,t)=>t.segments-e.segments||t.literals-e.literals||Number(t.own)-Number(e.own)),r=(e,t,n)=>{let r={};try{e.names.forEach((e,t)=>r[e]=decodeURIComponent(n[t]))}catch{return null}let i=e.names[0];return{target:e.target,base:t,param:i===void 0?null:r[i],params:r}},i=e=>({target:{kind:`protocol`,name:`discovery`},base:e,param:null,params:{},root:!0});return function(e,a){let o=a.length>1?a.replace(/\/+$/,``):a;if(t!==void 0){let a=t.replace(/\/+$/,``);if(o!==a&&!o.startsWith(`${a}/`))return null;let s=o.slice(a.length)||`/`;if(s===`/`)return e===`GET`?i(a):null;for(let t of n){let n=t.method===e?s.match(RegExp(`^${t.pattern.source}`)):null;if(n)return r(t,a,n.slice(1))}return null}for(let t of n){if(t.method!==e)continue;let n=o.match(t.pattern);if(n)return r(t,o.slice(0,n.index),n.slice(1))}return e===`GET`?i(o===`/`?``:o):null}}function Qd(e){let t={};for(let n of new Set(e.searchParams.keys())){let r=e.searchParams.getAll(n);t[n]=r.length>1?r:r[0]}return t}async function $d(e){let t=await e.text();if(t.trim()!==``)try{return JSON.parse(t)}catch{throw Rd(`request body is not valid JSON`)}}const ef=()=>new Id(413,`too_large`,`attachments are at most ${ke/1024/1024} MB`);async function tf(e,t){if(Number(e.headers.get(`content-length`)??0)>t)throw ef();let n=[],r=0;for await(let i of e.body??[]){if(r+=i.byteLength,r>t)throw ef();n.push(i)}let i=new Uint8Array(r),a=0;for(let e of n)i.set(e,a),a+=e.byteLength;return i}function nf(){let e={};for(let[t,n]of Object.entries(vd)){let r=n.path.replace(/:(\w+)/g,`{$1}`),i={operationId:t};`query`in n&&(i[`x-query-schema`]=nc(n.query,{io:`input`})),`body`in n&&(i.requestBody={content:{"application/json":{schema:nc(n.body,{io:`input`})}}}),(e[r]??={})[n.method.toLowerCase()]=i}return{openapi:`3.1.0`,info:{title:`board`,version:Kd},paths:e}}const rf={re:{type:`string`,value:`id`,description:`in a thread: its root's ID`},by:{type:`string`,value:`handle`,description:`by an author: a handle, me, or an actor ID`},mentions:{type:`string`,value:`@handle`,optionalValue:!0,description:`mentioning a handle, or you without one`},label:{type:`string`,multiple:!0,value:`k[=v|w]`,description:`with a label on the message or its thread's root`},from:{type:`string`,value:`source`,description:`from a source: a sync key such as slack, or board`},text:{type:`string`,value:`words`,description:`containing these words`},after:{type:`string`,value:`id`,description:`after a message or a cursor`},url:{type:`string`,value:`url`,description:`the board at this URL, not the one the environment points at`},scope:{type:`string`,value:`team`,description:`a team's board in Vercel's API, by its slug or ID`},team:{type:`string`,value:`team`,description:`the same as --scope`,hidden:!0},as:{type:`string`,value:`profile`,description:`write as a profile, such as an agent's name`},avatar:{type:`string`,value:`url`,description:`the profile's avatar, with --as`},human:{type:`boolean`,description:`write as yourself, with no profile or session`},handle:{type:`string`,value:`h`,description:`your handle (default: your Vercel username)`},json:{type:`boolean`,description:`one JSON object per line, for programs`},help:{type:`boolean`,short:`h`,description:`this help, or a command's`},version:{type:`boolean`,short:`v`,description:`the CLI's version`},limit:{type:`string`,short:`n`,value:`N`,description:`how many`},id:{type:`string`,value:`key`,description:`a client ID: sending the same one again posts once`},sync:{type:`string`,multiple:!0,value:`target`,description:`sync the new thread to a target too, e.g. slack:#incidents`},"no-sync":{type:`boolean`,description:`keep it on the board: sync it nowhere`},attach:{type:`string`,multiple:!0,value:`file`,description:`attach a file`},unset:{type:`string`,multiple:!0,value:`k`,description:`remove a label`},channel:{type:`string`,value:`c`,description:`in a channel`},remove:{type:`boolean`,description:`take the reaction back`},all:{type:`boolean`,short:`a`,description:`everything, not only what most want`},timeout:{type:`string`,value:`duration`,description:`how long to wait (default: 30m)`},code:{type:`boolean`,description:`post a code from your account instead of signing in`},"no-wait":{type:`boolean`,description:`start linking, and don't wait for it to finish`},"no-open":{type:`boolean`,description:`don't open the browser`},in:{type:`string`,value:`duration`,description:`once, this long from now, e.g. 1d`},at:{type:`string`,value:`time`,description:`at a time: once, or with --every, the first`},every:{type:`string`,value:`duration`,description:`repeating at this interval, e.g. 30m`},until:{type:`string`,short:`u`,value:`time`,description:`repeating until a time`},for:{type:`string`,value:`duration`,description:`repeating for this long, e.g. 24h`},times:{type:`string`,value:`N`,description:`repeating this many times`},port:{type:`string`,value:`N`,description:`the port to listen on`},dir:{type:`string`,value:`dir`,description:`where the board keeps its log (default: .board/)`},"no-inspect":{type:`boolean`,description:`don't start the inspector`},agent:{type:`string`,value:`name`,description:`the agent whose turn ended`,hidden:!0}},af=(e,t,n)=>({name:e,...rf[e],...t?{description:t}:{},...n?{value:n}:{}});[`re`,`by`,`from`,`label`,`text`,`mentions`,`after`].map(e=>af(e)),[`url`,`scope`,`team`,`as`,`avatar`,`human`,`handle`,`json`,`help`,`version`].map(e=>af(e)),af(`code`),af(`no-wait`),af(`no-open`),af(`limit`,`threads to list (default: 50)`),af(`label`,`label it`,`k=v`),af(`attach`),af(`sync`),af(`no-sync`),af(`id`),af(`attach`),af(`id`),af(`no-sync`),af(`in`),af(`at`),af(`every`),af(`until`),af(`for`),af(`times`),af(`label`,`label it`,`k=v`),af(`attach`),af(`no-sync`),af(`by`,`scheduled by a handle`),af(`channel`,`posting in a channel`),af(`all`,`done and canceled ones too`),af(`remove`),af(`unset`),af(`limit`,`events to list`),af(`limit`,`messages to read`),af(`channel`,`the channel to check in (default: conformance)`),af(`agent`),af(`all`,`delivery receipts too`),af(`timeout`);const of={re:rf.re,by:rf.by,mentions:rf.mentions,label:rf.label,from:rf.from,text:rf.text};function sf(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n];r===`--mentions`?e[n+1]?.startsWith(`@`)?t.push(`--mentions=${e[++n]}`):t.push(`--mentions=me`):t.push(r)}return t}function cf(e){let t=[],n=null,r=null;for(let i=0;i<e.length;i++){let a=e[i];r?a===r?r=null:a===`\\`&&r===`"`&&i+1<e.length?n+=e[++i]:n+=a:/\s/.test(a)?(n!==null&&t.push(n),n=null):a===`"`||a===`'`?(r=a,n??=``):n=a===`\\`&&i+1<e.length?(n??``)+e[++i]:(n??``)+a}if(r)throw Error(`unterminated ${r}`);return n!==null&&t.push(n),t}const lf={...of,all:{type:`boolean`}};function uf(e){let t={},n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i===`--`){n.push(...e.slice(r+1));break}if(!i.startsWith(`-`)||i===`-`){n.push(i);continue}let a=i.indexOf(`=`),o=i.startsWith(`--`)?i.slice(2,a===-1?void 0:a):null,s=o!==null&&Object.hasOwn(lf,o)?lf[o]:null;if(!s)throw Error(`${o===null?i.slice(0,2):`--${o}`} isn't a filter`);if(s.type===`boolean`){if(a!==-1)throw Error(`--${o} takes no value`);t[o]=!0;continue}let c;if(a!==-1)c=i.slice(a+1);else{let t=e[r+1];if(t===void 0||t.length>1&&t.startsWith(`-`))throw Error(`--${o} needs a value`);c=t,r++}t[o]=`multiple`in s?[...t[o]??[],c]:c}return{values:t,positionals:n}}function df(e){let{values:t,positionals:n}=uf(sf(cf(e)));if(n.length>1)throw Error(`expected one channel, got: ${n.join(` `)}`);let r=n[0],i=Du.safeParse({...r?{channel:r}:{},...t.re?{re:t.re.replace(/^#/,``)}:{},...t.by?{by:t.by.replace(/^@/,``)}:{},...t.mentions?{mentions:t.mentions.replace(/^@/,``)}:{},...t.label?.length?{label:t.label}:{},...t.from?{from:t.from}:{},...t.text?{text:t.text}:{}});if(!i.success){let e=i.error.issues[0];throw Error(`${e?.path.length?`--${String(e.path[0])}: `:``}${e?.message??`invalid filters`}`)}return{filters:i.data,all:t.all===!0}}const ff=e=>e.channel!==void 0||e.re!==void 0||e.by!==void 0||e.mentions!==void 0||e.from!==void 0||e.text!==void 0||(e.label?.length??0)>0;function pf(e,t){let n,r;try{({filters:n,all:r}=df(t.tail))}catch(t){throw Error(`watch ${e}: ${t.message}`)}if(n.mentions===`me`)throw Error(`watch ${e}: a watcher has no "me": use --mentions @handle`);let i=ff(n);if(t.when===`enters`&&!i)throw Error(`watch ${e}: \`when: enters\` needs a filter to enter`);return{filters:n,criteria:i,enters:t.when===`enters`,all:r}}const mf=1e4,hf=e=>((e instanceof Error?e.message:String(e))||`unknown error`).slice(0,500),gf=e=>e?.startsWith(`https://`)?e:null;function _f(e){let t=typeof process<`u`&&process.env.VERCEL===`1`?process.env:null,n=t?.VERCEL_TARGET_ENV||t?.VERCEL_ENV,r=n===`preview`&&t?.VERCEL_GIT_COMMIT_REF||null;return!e||n!==`production`&&!r?null:{path:new URL(e).pathname,...r?{branch:r}:{}}}function vf(e){let{registry:t,rethrow:n}=e,r=e.binding,i=null,a=null;async function o(n){let r=await e.hash();return i&&i.url===n&&i.result.hash===r&&Date.now()-i.at<mf?i.result:(a??=e.wakeAt(n).then(e=>t.register(e)).then(e=>(i={url:n,at:Date.now(),result:e},e)).finally(()=>{a=null}),a)}async function s(e){let n={};if(!r().subscriptions[e.watcher])n={skip:!0};else try{await r().run(e.watcher,e.event,{trigger:`watch:${e.watcher}:${e.id}`,attempt:e.attempt+1})}catch(t){console.error(`[board] watcher ${e.watcher} failed:`,t),n={error:hf(t)}}await t.ack(e.id,{lease:e.lease,...n}).catch(e=>console.error(`[board] couldn't ack a match:`,hf(e)))}async function c(){let e=0,n=Date.now()+24e4;for(;Date.now()<n;){let n=await t.matches({limit:10});if(n.length===0)break;await Promise.all(n.map(s)),e+=n.length}return e+await r().pull()}let l=null;function u(){if(l)return;let n=l=new AbortController;(async()=>{for(let i=1e3;!n.signal.aborted;)try{await o(null);let e=await t.matches({limit:10,wait:25,signal:n.signal});await Promise.all(e.map(s)),await r().pull(),i=1e3}catch(t){if(n.signal.aborted)break;console.error(`[board] couldn't pull matches from ${e.remote}:`,hf(t)),await new Promise(e=>setTimeout(e,i)),i=Math.min(i*2,6e4)}})()}let d=null,f=0;function p(){if(d)return d;if(!e.hasWork()||Date.now()-f<mf)return Promise.resolve();let t=gf(r().url());return!t&&typeof process<`u`&&process.env.VERCEL===`1`?Promise.resolve():(d=o(t).then(()=>{},t=>{d=null,f=Date.now(),console.error(`[board] couldn't register with ${e.remote}:`,hf(t))}),t||u(),d)}return{start:p,routes:[{method:`POST`,path:`/wake`,async handle(t){return d??=Promise.resolve(),t.headers.get(`x-board-watchers`)!==await e.hash()&&await o(gf(r().url())).catch(n),Ud({ran:await c().catch(n)})}},{method:`POST`,path:`/watchers`,async handle(t,{caller:i}){if(i)return e.registerFor(i,t);d??=Promise.resolve();let a=gf(r().url()),s=await o(a).catch(n);return a||u(),Ud(s)}}],registerNow:()=>o(gf(r().url())),close:()=>{l?.abort(),l=null}}}const yf=(e,t)=>e<t?-1:+(e>t);function bf(e,t=[]){let n=Object.keys(e).sort(yf).map(t=>[t,e[t].tail,e[t].when]);return t.length>0&&n.push([`sync`,[...t].sort((e,t)=>yf(e.key,t.key)).map(e=>[e.key,e.platform,e.signIn])]),JSON.stringify(n)}const xf=/^[A-Za-z][A-Za-z0-9-]{0,31}$/,Sf=/* @__PURE__ */ new Set([`identity`,`edit`,`delete`,`schedule`,`cancelSchedule`,`upload`,`uploadStart`,`uploadFinish`,`watchers`,`register`,`matches`,`ack`,`syncImport`,`syncReceipt`,`syncThread`,`syncFind`,`syncCopies`,`syncRoots`,`inboxPush`,`inboxNext`,`inboxAck`,`inbox`,`syncCode`,`syncAccount`,`syncUnlink`]);function Cf(e){let t=e.replace(/[^A-Za-z0-9-]+/g,`-`).replace(/^-+|-+$/g,``);return/^[A-Za-z]/.test(t)||(t=`u-${t}`),t.slice(0,32).replace(/-+$/,``)}function wf(e,t){let n=new Set([...t,`middleware`,`client`].map(e=>e.toLowerCase())),r=Cf(e),i=r;for(let e=2;n.has(i.toLowerCase());e++)i=`${r.slice(0,31-String(e).length)}-${e}`;return i}function Tf(e){let{access:t}=e.principal;if(t.everywhere(`manage`))return null;let n=Object.entries(t.summary()).map(([e,t])=>`${e}=${t.join(`,`)}`);return n.length>0?n.join(`;`):`*=`}const Ef=e=>((e instanceof Error?e.message:String(e))||`unknown error`).slice(0,500),Df=e=>{throw e instanceof bd?new Id(e.status>=400?e.status:502,e.code,e.message):e instanceof Id||e instanceof Error&&e.name===`AbortError`?e:new Id(502,`unreachable`,`the board didn't answer: ${Ef(e)}`)};function Of(e){let t=new URLSearchParams;for(let[n,r]of Object.entries(e))if(r!=null&&r!==!1){if(n===`label`&&Array.isArray(r))for(let[e,n]of r)t.append(`label`,n===null?e:`${e}=${n.join(`|`)}`);else if(Array.isArray(r))for(let e of r)t.append(n,String(e));else t.set(n,String(r))}let n=t.toString();return n?`?${n}`:``}function kf(e,t){let n=(t.headers.get(`content-disposition`)??``).match(/filename\*=UTF-8''([^;]+)/)?.[1],r=`file`;try{n&&(r=decodeURIComponent(n))}catch{}return{attachment:{id:e,name:r,type:t.headers.get(`content-type`)??`application/octet-stream`,size:Number(t.headers.get(`content-length`)??0)},data:t.body??/* @__PURE__ */ new Uint8Array}}function Af(e,t,n){if(e!==void 0&&!/^https?:\/\/[^/]/.test(e))throw Error(`http: ${e} isn't a URL: pass the board's, like https://board.example.com/api/board`);if(e===void 0&&!n)throw Error(`http: pass the board's URL: outside Node there's no environment to find it in`);let r=(e??n.url()).replace(/\/+$/,``),i=t.fetch??n?.fetch(r)??((e,t)=>globalThis.fetch(e,t)),a=null,o={},s=[],c=null,l=()=>c??=Md(bf(o,s)).then(e=>e.slice(0,32)),u=()=>{if(!a)throw Error(`http: this backend isn't serving a board yet: pass it to board({ backend })`);return a},d=(e,t)=>kd({url:r,fetch:i,profile:e===void 0?()=>n?.profile().profile??null:e,session:t||e===null?null:()=>n?.profile().session??null}),f=d(null,!0),p=/* @__PURE__ */ new Map;function m(e){if(!xf.test(e))throw new Id(400,`invalid_request`,`as: ${e}: profiles start with a letter and use up to 32 letters, numbers, and hyphens`);let t=p.get(e);return t||p.set(e,t=d(e,!0)),t}let h=/* @__PURE__ */ new Map;function g(e){let t=JSON.stringify(e??(e===null?null:`\0`)),n=h.get(t);return n||h.set(t,n=d(e,!1)),n}function _(e){return e.origin.via?.kind===`engine`?f:e.origin.via?.kind===`client`?(e.self!==null&&m(e.self),g(`profile`in e?e.profile:e.self??void 0)):m(e.self??`client`)}let v=null,y=()=>(v??=i(r).then(async e=>{if(!e.ok)throw new Id(e.status>=400?e.status:502,`no_board`,`no board at ${r} (${e.status})`);return await e.json()},Df)).catch(e=>{throw v=null,e}),b=null,x=()=>b??=f.me().then(e=>e.principal).catch(e=>{throw b=null,e}),S=async e=>Fd(await x(),e);async function C(e,t,n,i){let a=vd[t],o={...n},s=a.path.replace(/:(\w+)/g,(e,t)=>{let n=o[t];return delete o[t],encodeURIComponent(String(n))}),c;if(t===`upload`){let{data:t,name:r,type:a}=n;if(t.byteLength>4194304){let n=await e.upload({data:t,name:r??`file`,...a?{type:a}:{}}).catch(Df);return Response.json({attachment:n})}c=await e.request(s,{method:`POST`,body:t,headers:{...a?{"content-type":a}:{},...r===null?{}:{"x-board-filename":encodeURIComponent(r)}},signal:i}).catch(Df)}else c=a.method===`GET`?await e.request(`${s}${Of(o)}`,{signal:i}).catch(Df):await e.request(s,{method:`POST`,body:new TextEncoder().encode(JSON.stringify(o)),headers:{"content-type":`application/json`},signal:i}).catch(Df);if(c.ok)return c;try{let e=await c.json();if(e.error?.message)throw new Id(c.status,e.error.code??`error`,e.error.message)}catch(e){if(e instanceof Id)throw e}throw new Id(502,`remote_error`,`${r} answered ${c.status}`)}async function w(e,t,n,a){if(e===`me`){let{principal:e,author:n,actor:r}=t;return{actor:r.id,principal:e.id,kind:r.kind,handle:r.handle,name:r.name,avatar:r.avatar,profile:n.profile,session:n.session,expiresAt:e.expiresAt?.toISOString()??null,can:e.access.summary()}}if(Sf.has(e))throw Bd(`this board's callers act as its project on ${r}, which can't tell them apart: ${e} is the project's own to do there`);let s=Tf(t),c=t.actor.avatar?.startsWith(`https://`)?t.actor.avatar:void 0,l=kd({url:r,fetch:i,profile:{name:wf(t.actor.handle,Object.keys(o)),...c?{avatar:c}:{}},session:null,...s===null?{}:{headers:{"x-board-scope":s}}});(e===`post`||e===`posted`)&&typeof n.id==`string`&&(n={...n,id:await S(await Nd(`board-gateway`,t.principal.id,n.id)).catch(Df)});let u=await C(l,e,n,a);return e===`attachment`?kf(String(n.id),u):u.json()}async function T(e,t,n,r){let i=k();if(`identity`in t)return w(e,t.identity,n,r);let a=_(t);`self`in t&&t.origin.via?.kind===`engine`&&await i,(e===`post`||e===`posted`)&&`self`in t&&typeof n.id==`string`&&Pd.test(n.id)&&(n={...n,id:await S(n.id).catch(Df)});let o=await C(a,e,n,r);return e===`attachment`?kf(String(n.id),o):o.json()}let E={...Object.fromEntries(Jd.map(e=>[e,(t,n,r)=>T(e,t,n,r)])),async discovery(){return y()},async readSource(e,t,n){return`self`in e&&u().sync.some(e=>e.key===t.key)?u().readSource(t.key,t.target,t.limit??50):T(`readSource`,e,t,n)},async joinSource(e,t,n){return`self`in e&&u().sync.some(e=>e.key===t.key)?u().joinSource(t.key,t.target):T(`joinSource`,e,t,n)},async synced(e,t,n){let{targets:r}=await T(`synced`,e,t,n);return{targets:await Promise.all(r.map(async e=>({...e,url:e.url??(e.thread!==null&&e.message!==null?await u().linkOf(e.key,e.thread,e.message):null)})))}},async linked(e,t,n){let r=()=>new Id(404,`message_not_found`,`no message on this board for that link`),i=await(async()=>{for(let{platform:e,thread:r,message:i}of u().locate(t.url))for(let t of u().sync.filter(t=>t.platform===e)){let e=await f.syncFind({thread:`${t.key}:${r}`,...i===null?{}:{message:i}},{signal:n}).catch(Df),a=i===null?e.thread===null?null:(await f.syncThread(e.thread).catch(Df)).root:e.message;if(a!==null)return a}return null})();if(i===null)return T(`linked`,e,t,n);try{return await E.message(e,{id:i},n)}catch(e){throw e instanceof Id&&e.status===404?r():e}},async typing(e,t,n){let{targets:r}=await T(`typing`,e,t,n);if(!(`self`in e)||u().sync.length===0)return{targets:r};let{message:i,replies:a}=await E.message(e,{id:t.id},n),o=await u().typing([i,...a],t.status).catch(e=>(console.warn(`[board] skipped typing where this board syncs:`,Ef(e)),[]));return{targets:[...r,...o]}}};async function D(e){let t=_f(e);return t&&(await y()).wake_by_path?t:{url:e}}let O=vf({remote:r,registry:{register:e=>f.register({...e,watch:o,...s.length>0?{sync:s}:{}}),matches:e=>f.matches(e),ack:(e,t)=>f.ack(e,t)},wakeAt:D,binding:u,hash:l,hasWork:()=>Object.keys(o).length>0||s.length>0,rethrow:Df,registerFor:async(e,t)=>Ud(await E.register(e,zu.parse(await t.json()),t.signal))}),k=O.start;return{...E,routes:O.routes,keeps:!1,bind(e){if(a)throw Error(`http: this backend already serves a board: create one http() per board()`);for(let[t,n]of Object.entries(e.subscriptions)){if(n.kind===`sync`){t===`@sync`&&(s=e.sync.map(e=>({...e})));continue}if(!xf.test(t))throw Error(`watch ${t}: ids start with a letter and use up to 32 letters, numbers, and hyphens`);pf(t,n),o[t]={tail:n.tail,when:n.when}}c=null,a=e},registerWatchers:O.registerNow,close:O.close}}function jf(e,t={}){return Af(e,t,null)}const Mf=/```[\s\S]*?```/g,Nf=/`[^`\n]*`/g,Pf=`[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?`,Ff=RegExp(`(?<![\\w@.-])@(${Pf}(?:/${Pf})?)(?!:|[a-z0-9_/-]|\\.(?=[a-z0-9]))`,`gi`),If=/(?<![\w@.-])@\[([^\]\s]+)\]/g,Lf=e=>e.replace(Mf,e=>` `.repeat(e.length)).replace(Nf,e=>` `.repeat(e.length));function Rf(e){let t=Lf(e),n=[];for(let e of t.matchAll(If)){let t=e[1];t!==void 0&&n.push({index:e.index,token:{kind:`actor`,actor:t},key:`actor:${t}`})}for(let e of t.replace(If,e=>` `.repeat(e.length)).matchAll(Ff)){let t=e[1]?.toLowerCase();t!==void 0&&n.push({index:e.index,token:{kind:`handle`,handle:t},key:`handle:${t}`})}let r=/* @__PURE__ */ new Set;return n.sort((e,t)=>e.index-t.index).filter(({key:e})=>!r.has(e)&&r.add(e)).map(({token:e})=>e)}function zf(e,t){let n=Lf(e),r=[];for(let e of n.matchAll(If))r.push({index:e.index,length:e[0].length,token:{kind:`actor`,actor:e[1]}});for(let e of n.replace(If,e=>` `.repeat(e.length)).matchAll(Ff))r.push({index:e.index,length:e[0].length,token:{kind:`handle`,handle:e[1].toLowerCase()}});let i=``,a=0;for(let{index:n,length:o,token:s}of r.sort((e,t)=>e.index-t.index)){let r=e.slice(n,n+o);i+=e.slice(a,n)+(t(s,r)??r),a=n+o}return i+e.slice(a)}const Bf=[`read`,`post`,`react`,`label`,`sync`,`manage`],Vf={read:[],post:[],react:[`read`],label:[`read`],sync:[`read`],manage:[`read`,`post`,`react`,`label`,`sync`]},Hf=new Map(Bf.map((e,t)=>[e,t])),Uf=`write *, a channel, or a channel and its subtree (feedback/)`;function Wf(e){if(e===`*`)return{kind:`all`};if(e.includes(`*`)){let t=e.slice(0,e.indexOf(`*`)).replace(/\/+$/,``),n=t===``?`write * for every channel`:Xl.safeParse(t).success?`write ${t}/ for ${t} and its subtree`:Uf;throw Error(`invalid channel pattern ${e}: ${n}`)}let t=e.endsWith(`/`),n=t?e.slice(0,-1):e;if(!Xl.safeParse(n).success)throw Error(`invalid channel pattern ${e||`(empty)`}: ${Uf}`);return t?{kind:`subtree`,path:n}:{kind:`exact`,path:n}}const Gf=e=>e.kind===`all`?`*`:e.kind===`subtree`?`${e.path}/`:e.path;function Kf(e){let t=/* @__PURE__ */ new Set,n=e=>{if(!Hf.has(e))throw Error(`unknown permission ${String(e)}: use ${Bf.join(`, `)}`);if(!t.has(e)){t.add(e);for(let t of Vf[e])n(t)}};for(let t of e===`all`?Bf:e)n(t);return t}const qf=/* @__PURE__ */ new Set;function Jf(e){let t=null,n=/* @__PURE__ */ new Map,r=[];for(let[i,a]of e)i.kind===`all`?t=a:i.kind===`exact`?n.set(i.path,a):r.push([i.path,a]);return r.sort((e,t)=>t[0].length-e[0].length),{all:t,exact:n,subtrees:r}}const Yf=(e,t)=>e===t||e.startsWith(`${t}/`);function Xf(e,t,n=!1){if(!n){let n=e.exact.get(t);if(n)return n}for(let[n,r]of e.subtrees)if(Yf(t,n))return r;return e.all??qf}const Zf=(e,t)=>t.kind===`all`?e.all??qf:Xf(e,t.path,t.kind===`subtree`),Qf=(e,t)=>e.size===t.size&&[...e].every(e=>t.has(e));function $f(e,t){if(t.kind===`exact`)return Xf(e,t.path,!0);if(t.kind===`subtree`){for(let[n,r]of e.subtrees)if(n!==t.path&&Yf(t.path,n))return r}return e.all??qf}function ep(e){let t=Jf(e);return Jf(e.filter(([e,n])=>e.kind===`all`?n.size>0:!Qf(n,$f(t,e))))}function tp(e){return e===`all`||Array.isArray(e)?[[{kind:`all`},Kf(e)]]:Object.entries(e).map(([e,t])=>[Wf(e),Kf(t)])}const np=e=>[...e.all?[[{kind:`all`},e.all]]:[],...e.subtrees.map(([e,t])=>[{kind:`subtree`,path:e},t]),...[...e.exact].map(([e,t])=>[{kind:`exact`,path:e},t])],rp=Symbol(`board.access`),ip=e=>typeof e==`object`&&rp in e;function ap(e){let t=np(e),n=n=>(e.all?.has(n)??!1)&&t.every(([,e])=>e.has(n)),r=/* @__PURE__ */ new Map;return{[rp]:e,can:(t,n)=>Xf(e,n).has(t),readable(t){let n=r.get(t);return n===void 0&&r.set(t,n=Xf(e,t).has(`read`)),n},readsAll:n(`read`),everywhere:n,anywhere:e=>t.some(([,t])=>t.has(e)),narrow(n){let r=ip(n)?n[rp]:ep(tp(n)),i=/* @__PURE__ */ new Map([[`*`,{kind:`all`}]]);for(let[e]of[...t,...np(r)])i.set(Gf(e),e);return ap(ep([...i.values()].map(t=>{let n=Zf(r,t);return[t,new Set([...Zf(e,t)].filter(e=>n.has(e)))]})))},summary(){let e=t.map(([e,t])=>[Gf(e),t]);e.sort(([e],[t])=>e===`*`?-1:t===`*`?1:e.localeCompare(t));let n={};for(let[t,r]of e)n[t]=[...r].sort((e,t)=>Hf.get(e)-Hf.get(t));return n}}}function op(e){return ap(ep(tp(e)))}const sp=op(`all`);function cp(e){if(e.length>4e3)throw Error(`x-board-scope is longer than 4000 characters`);let t={},n=e.split(`;`).map(e=>e.trim());if(n.every(e=>e===``))throw Error(`x-board-scope is empty: write pattern=permissions, like dev/=read,post`);for(let e of n){if(e===``)continue;let n=e.indexOf(`=`);if(n<0)throw Error(`x-board-scope entry ${e} needs =: write pattern=permissions, like dev/=read,post`);let r=e.slice(0,n).trim(),i=e.slice(n+1).trim();if(Object.hasOwn(t,r))throw Error(`x-board-scope lists ${r} twice`);Wf(r);let a=i===``?[]:i.split(`,`).map(e=>e.trim());if(a.length===1&&a[0]===`all`){t[r]=`all`;continue}for(let e of a)if(!Hf.has(e))throw Error(`x-board-scope: unknown permission ${e||`(empty)`}: use ${Bf.join(`, `)}, or all`);t[r]=a}return t}const lp=[`claude`,`codex`,`grok`,`pi`],up=/^[A-Za-z][A-Za-z0-9-]{0,31}$/,dp=/^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/;function fp(e){let t=e.get(`x-board-profile`)?.trim()||null;if(t!==null&&!up.test(t))throw Rd(`profile names start with a letter and use up to 32 letters, numbers, and hyphens`);let n=e.get(`x-board-avatar`)?.trim()||null;if(n!==null&&!mp(n))throw Rd(`avatars must be https URLs (http only on localhost)`);let r=e.get(`x-board-session`)?.trim().slice(0,200)||null,i=e.get(`x-board-handle`)?.trim().toLowerCase()||null;if(i!==null&&!dp.test(i))throw Rd(`invalid handle: ${i}`);let a=e.get(`x-board-name`),o=null;if(a)try{o=decodeURIComponent(a).replace(/[\u0000-\u001f\u007f]/g,``).trim().slice(0,128)||null}catch{throw Rd(`x-board-name must be URI-encoded`)}let s=e.get(`x-board-scope`);if(s!==null)try{cp(s)}catch(e){throw Rd(e.message,`invalid_scope`)}return{profile:t,avatar:n,session:r,handle:i,name:o,scope:s}}function pp(e,t,n){let r=e.kind===`person`&&e.facts?.issuer!==`host`&&t.handle?t.handle:e.handle,i=e.kind===`person`?t.name:null,a=t.profile?.toLowerCase()??null,o=a===null?e.id:`${e.id}+${a}`,s=a!==null&&lp.includes(a),c={id:o,kind:a===null?e.kind:`agent`,handle:a===null?r:`${r}/${a}`,name:t.profile??i??r,avatar:t.avatar??(s?`${n}/avatars/${a}`:null)};return{author:{actor:o,principal:e.id,profile:a,session:t.session},actor:c}}function mp(e){try{let t=new URL(e);return t.protocol===`https:`||t.protocol===`http:`&&[`localhost`,`127.0.0.1`].includes(t.hostname)}catch{return!1}}const hp=e=>Bd(`this token can't use this board: add ${e} to access`),gp=e=>{let t=new URL(e);return`${t.host}${t.pathname.replace(/\/+$/,``)}`.replace(/[%:]/g,e=>e===`%`?`%25`:`%3A`)};function _p(e){let t=/* @__PURE__ */ new Map;for(let n of e){let e=gp(n),r=t.get(e);if(r!==void 0&&r!==n)throw Error(`access: oidc issuers ${r} and ${n} name the same principals, oidc:${e}:<sub>: pin one of them`);t.set(e,n)}return new Set(e)}const vp=e=>[...new Set(e.flatMap(e=>typeof e!=`function`&&e.issuer===`oidc`?[e.url]:[]))];function yp(e){let t=typeof e.access==`function`?[]:e.access,n=typeof e.access==`function`?e.access:null,r=_p(vp(t));async function i(n,i){if(i?.issuer===`host`)throw Bd(`this token can't use this board: its board no longer takes a host's principals`);if(i?.issuer===`oidc`&&!r.has(i.iss))throw zd(`untrusted issuer: ${i.iss}`);let a=i?.claims??{},o=i?.issuer===`vercel`?await e.project():null,s=o?{teamId:i.team??o.teamId,projectId:o.id}:{teamId:null,projectId:null},c=String(a.environment??``),l=bp(),u=o!==null&&o.id!==null&&a.project_id===o.id,d=u&&l!==null&&c===l;for(let e of t){if(typeof e==`function`){if(d)continue;let t=await e(n);if(t===void 0)continue;if(t===null)throw Bd(`this token can't use this board`);return op(t)}if(i&&e.issuer===i.issuer&&(e.issuer!==`oidc`||e.url===i.iss)&&e.matches(a,s))return e.access}if(d)return sp;throw i?i.issuer===`oidc`?hp(`oidc({ issuer: '${i.iss}', claims, can })`):i.issuer===`github`?hp(`githubActions({ repository: '${String(a.repository)}', can })`):u?Bd(`this token can't use this board: it runs in ${l??`no Vercel environment`}, so its ${c||`unnamed`} deployments need vercelProject({ project: 'self', environments: ['${c}'], can })`):hp(`vercelProject({ project: '${String(a.project??``)||String(a.project_id)}', can })`):Bd(`this token can't use this board`)}async function a(t){let r=sp,a=t.facts?.issuer===`host`;if(t.id.startsWith(`board:`)||t.kind===`external`&&!a)r=sp;else{if(a){if(!e.hosts)throw Bd(`this token can't use this board: its board no longer takes a host's principals`);let{exp:n}=t.facts.claims;if(typeof n==`number`&&n*1e3<=Date.now())throw zd(`token expired`)}if(n){let e=await n(t);if(e==null)throw Bd(`this token can't use this board`);r=op(e)}else t.kind!==`person`&&(r=await i(t,(a?void 0:t.facts)??xp(t.id)))}return t.scope===void 0?r:r.narrow(cp(t.scope))}async function o(e){try{return await a(e)}catch(e){let t=e.status;if(t===401||t===403)return null;throw e}}return{grant:a,accessNow:o}}const bp=()=>process.env.VERCEL_TARGET_ENV||process.env.VERCEL_ENV||null;function xp(e){let t=e.match(/^vercel:project:([^:]+):([^:]+)$/);return t?{issuer:`vercel`,iss:``,claims:{project_id:t[1],environment:t[2]}}:null}const Sp=Symbol(`board.oidcTokens`),Cp=/* @__PURE__ */ new WeakSet,wp=e=>Sp in e,Tp=e=>Cp.has(e),Ep=/^[a-z][a-z0-9-]*:[a-z][a-z0-9-]*:[^\s+\]]{1,200}$/,Dp=[`person`,`deployment`,`workflow`,`external`];function Op(e){let t=e=>{throw TypeError(`authenticate returned an invalid principal: ${e}`)};(typeof e!=`object`||!e)&&t(`not an object`),(typeof e.id!=`string`||!Ep.test(e.id)||e.id.startsWith(`board:`))&&t(`id must look like \`vercel:user:<id>\`, got ${JSON.stringify(e.id)}`),Dp.includes(e.kind)||t(`kind must be one of ${Dp.join(`, `)}`),(typeof e.handle!=`string`||!/^\S{1,64}$/.test(e.handle))&&t(`handle must be 1-64 characters, no spaces`);let n=e.expiresAt??null;if(n!==null&&(!(n instanceof Date)||Number.isNaN(n.getTime()))&&t(`expiresAt must be a Date or null`),n!==null&&n.getTime()<=Date.now())throw zd(`token expired`);let r=n===null?{}:{exp:Math.floor(n.getTime()/1e3)};return{id:e.id,kind:e.kind,handle:e.handle,expiresAt:n,facts:{issuer:`host`,iss:``,claims:r}}}function kp(e,t,n){let r=t||e.access!==void 0,i=e.access??[],a=null,o=()=>(a??=(async()=>{if(!n)return{id:e.project?.id??null,teamId:e.project?.teamId??null};let t=await n(),[r,i]=await Promise.all([t.ownProjectId(e.project),t.ownTeamId(e.project)]);return{id:r,teamId:i}})()).catch(e=>{throw a=null,e});async function s(t){return n?(await n()).discoveryIdentity(t,e.project):{projectId:e.project?.id??null,teamId:e.project?.teamId??null}}let c=null,l=()=>e.authenticate?Promise.resolve(e.authenticate):c??=n?n().then(e=>e.oidcTokens()):Promise.reject(new Id(501,`no_verifier`,`this build of board verifies no tokens: pass board({ authenticate })`)),u=yp({access:i,project:o,hosts:e.authenticate!==void 0&&!wp(e.authenticate)}),d={project:o,issuers:typeof i==`function`?[]:vp(i)},f=/* @__PURE__ */ new Map,p=/* @__PURE__ */ new WeakMap;async function m(e){let t=e=>e.expiresAt===null||e.expiresAt.getTime()>Date.now(),n=p.get(e);if(n){let e=await n;if(t(e))return e}let r=e.credential===null?null:[e.audience,e.credential,e.headers.get(`x-vercel-oidc-token`)??``].join(``),i=r===null?void 0:f.get(r);if(i&&i.until>Date.now())return p.set(e,i.principal),i.principal;let a=h(e);return p.set(e,a),r!==null&&a.then(e=>{e.facts?.issuer!==`host`&&e.expiresAt!==null&&(f.size>=1e3&&f.delete(f.keys().next().value),f.set(r,{principal:a,until:e.expiresAt.getTime()}))},()=>p.delete(e)),a}async function h(e){let t=await l(),n;try{n=await t({...e,board:d})}catch(e){throw e instanceof Response?new Ld(e):e}if(n instanceof Response)throw new Ld(n);if(n==null)throw zd(`missing bearer token`);return Tp(n)?n:Op(n)}return{open:r,project:o,discoveryIdentity:s,async identify(e){let t=await m(e),n=e.claims.scope===null?t:{...t,scope:e.claims.scope},{author:r,actor:i}=pp(n,e.claims,e.audience);return{principal:{...n,access:await u.grant(n)},author:r,actor:i}},accessNow:e=>u.accessNow(e)}}const Ap={claude:`m4.7144 15.9555 4.7174-2.6471.079-.2307-.079-.1275h-.2307l-.7893-.0486-2.6956-.0729-2.3375-.0971-2.2646-.1214-.5707-.1215-.5343-.7042.0546-.3522.4797-.3218.686.0608 1.5179.1032 2.2767.1578 1.6514.0972 2.4468.255h.3886l.0546-.1579-.1336-.0971-.1032-.0972L6.973 9.8356l-2.55-1.6879-1.3356-.9714-.7225-.4918-.3643-.4614-.1578-1.0078.6557-.7225.8803.0607.2246.0607.8925.686 1.9064 1.4754 2.4893 1.8336.3643.3035.1457-.1032.0182-.0728-.164-.2733-1.3539-2.4467-1.445-2.4893-.6435-1.032-.17-.6194c-.0607-.255-.1032-.4674-.1032-.7285L6.287.1335 6.6997 0l.9957.1336.419.3642.6192 1.4147 1.0018 2.2282 1.5543 3.0296.4553.8985.2429.8318.091.255h.1579v-.1457l.1275-1.706.2368-2.0947.2307-2.6957.0789-.7589.3764-.9107.7468-.4918.5828.2793.4797.686-.0668.4433-.2853 1.8517-.5586 2.9021-.3643 1.9429h.2125l.2429-.2429.9835-1.3053 1.6514-2.0643.7286-.8196.85-.9046.5464-.4311h1.0321l.759 1.1293-.34 1.1657-1.0625 1.3478-.8804 1.1414-1.2628 1.7-.7893 1.36.0729.1093.1882-.0183 2.8535-.607 1.5421-.2794 1.8396-.3157.8318.3886.091.3946-.3278.8075-1.967.4857-2.3072.4614-3.4364.8136-.0425.0304.0486.0607 1.5482.1457.6618.0364h1.621l3.0175.2247.7892.522.4736.6376-.079.4857-1.2142.6193-1.6393-.3886-3.825-.9107-1.3113-.3279h-.1822v.1093l1.0929 1.0686 2.0035 1.8092 2.5075 2.3314.1275.5768-.3218.4554-.34-.0486-2.2039-1.6575-.85-.7468-1.9246-1.621h-.1275v.17l.4432.6496 2.3436 3.5214.1214 1.0807-.17.3521-.6071.2125-.6679-.1214-1.3721-1.9246L14.38 17.959l-1.1414-1.9428-.1397.079-.674 7.2552-.3156.3703-.7286.2793-.6071-.4614-.3218-.7468.3218-1.4753.3886-1.9246.3157-1.53.2853-1.9004.17-.6314-.0121-.0425-.1397.0182-1.4328 1.9672-2.1796 2.9446-1.7243 1.8456-.4128.164-.7164-.3704.0667-.6618.4008-.5889 2.386-3.0357 1.4389-1.882.929-1.0868-.0062-.1579h-.0546l-6.3385 4.1164-1.1293.1457-.4857-.4554.0608-.7467.2307-.2429 1.9064-1.3114Z`,openai:`M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z`,x:`M14.234 10.162 22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299-.929-1.329L3.076 1.56h3.182l5.965 8.532.929 1.329 7.754 11.09h-3.182z`,slack:`M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zM6.313 15.165a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zM8.834 6.313a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zM18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zM17.688 8.834a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zM15.165 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zM15.165 17.688a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z`,github:`M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12`,whatsapp:`M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413Z`},jp={claude:{background:`#D97757`,mark:{path:Ap.claude}},codex:{background:`#000000`,mark:{path:Ap.openai}},grok:{background:`#000000`,mark:{path:Ap.x}},pi:{background:`#1f1f1f`,mark:{glyph:`π`}}};function Mp(e){let t=jp[e]??{background:`#666666`,mark:{glyph:e.slice(0,1).toUpperCase()}},n=`path`in t.mark?`<path transform="translate(30 30) scale(2.8333)" fill="#ffffff" d="${t.mark.path}"/>`:`<text x="64" y="86" font-family="ui-sans-serif,system-ui,sans-serif" font-size="66" font-weight="600" text-anchor="middle" fill="#ffffff">${t.mark.glyph}</text>`;return`<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128"><rect width="128" height="128" rx="28" fill="${t.background}"/>${n}</svg>`}var Np=class extends Id{responses;constructor(e){super(422,`dropped`,e.join(`
|
|
346
346
|
`)||`the board dropped this message`),this.responses=e}};const Pp=K({text:G().max(Jl).optional(),labels:iu.optional()}).strict();async function Fp(e,t,n){let r=[],i=null,a=async(o,s)=>{if(o===e.length){if(s.text.trim()===``&&(s.kind===`edit`||s.attachments.length===0))return;i={value:await n(s)};return}let c=null;await e[o]({write:Object.freeze({...s}),author:Object.freeze({...t.author}),source:Object.freeze({...t.source}),board:t.board(),respond:async e=>{r.push(e)},next:(e={})=>{if(c)throw Error(`next() was already called`);let{text:t,labels:n}=Pp.parse(e);return c=a(o+1,{...s,...t===void 0?{}:{text:t},...s.kind===`post`&&n?{labels:{...s.labels,...n}}:{}}),c}}),c&&await c};if(await a(0,t.write),!i)throw new Np(r);return i.value}const Ip=e=>typeof e==`string`?{target:e,kind:yu(e)?`thread`:`channel`}:e,Lp=e=>Rf(e).some(e=>e.kind===`actor`&&e.actor.includes(`@`));async function Rp(e,t){let n=Rf(e).flatMap(e=>e.kind===`actor`&&e.actor.includes(`@`)?[e.actor]:[]);if(n.length===0)return{text:e,found:[]};let r=/* @__PURE__ */ new Map;for(let e of n)r.set(e,await t?.(e).catch(()=>null)??null);return{text:zf(e,e=>{if(e.kind!==`actor`||!r.has(e.actor))return null;let t=r.get(e.actor);return t?`@[${t.id}]`:e.actor}),found:[...r.values()].filter(e=>e!==null)}}const zp=/* @__PURE__ */ new Set([`post`,`schedule`,`upload`,`uploadFinish`]),Bp=/^(image\/(png|jpeg|gif|webp|avif)|video\/(mp4|webm)|text\/plain)$/;function Vp({attachment:e,data:t}){let n=Bp.test(e.type)?`inline`:`attachment`,r=t instanceof Uint8Array?new Blob([t]):t;return new Response(r,{headers:{"content-type":e.type,"content-length":String(e.size),"content-disposition":`${n}; filename*=UTF-8''${encodeURIComponent(e.name)}`,"content-security-policy":`sandbox; default-src 'none'`,"x-content-type-options":`nosniff`,"cache-control":`private, max-age=31536000, immutable`}})}async function Hp(e,t,n,r){let i=r.id??``,a=r.key??``,o=()=>$d(t);switch(e){case`discovery`:case`me`:case`channels`:case`actors`:case`identity`:case`watchers`:return{};case`message`:case`posted`:case`synced`:case`delete`:case`cancelSchedule`:case`attachment`:case`uploadFinish`:return{id:i};case`messages`:return Ou.parse(Qd(n));case`threads`:return ku.parse(Qd(n));case`schedules`:return Fu.parse(Qd(n));case`matches`:return Bu.parse(Qd(n));case`events`:{let e=Au.parse(Qd(n)),r=t.headers.get(`last-event-id`);return e.after===void 0&&r&&Su.safeParse(r).success&&(e.after=r),e}case`post`:return ju.parse(await o());case`schedule`:return Pu.parse(await o());case`register`:return zu.parse(await o());case`edit`:return{id:i,...pd.parse(await o())};case`react`:return{id:i,...gd.parse(await o())};case`label`:return{id:i,..._d.parse(await o())};case`ack`:return{id:i,...Vu.parse(await o())};case`upload`:{let e=t.headers.get(`x-board-filename`),n=null;try{n=e===null?null:decodeURIComponent(e)}catch{throw Rd("`x-board-filename` is not URI-encoded")}return{data:await tf(t,ke),name:n,type:t.headers.get(`content-type`)}}case`uploadStart`:return fd.parse(await o());case`syncImport`:return $u.parse(await o());case`syncReceipt`:return td.parse(await o());case`syncThread`:return{thread:r.thread??``};case`syncFind`:return nd.parse(Qd(n));case`syncCopies`:return rd.parse(Qd(n));case`syncRoots`:return id.parse(Qd(n));case`inboxPush`:return{key:a,...ad.parse(await o())};case`inboxNext`:return{key:a,...od.parse(Qd(n))};case`inboxAck`:return{key:a,id:i,...sd.parse(await o())};case`inbox`:return{key:a,...Lu.parse(Qd(n))};case`syncCode`:return cd.parse(await o());case`syncAccount`:return ld.parse(await o());case`syncUnlink`:return dd.parse(await o());case`typing`:return{id:i,...hd.parse(await o())??{}};case`readSource`:return{key:a,...Hu.parse(Qd(n))};case`joinSource`:return{key:a,...Uu.parse(await o())};case`linked`:return Wu.parse(Qd(n))}}const Up=e=>({id:e.id,kind:`external`,handle:e.handle,name:e.name,avatar:e.avatar});function Wp(e){let t=e.origin.via;return t?.kind===`middleware`||t?.kind===`engine`?null:t??{kind:`api`}}const Gp={self:`middleware`,origin:{via:{kind:`middleware`}}},Kp={self:null,origin:{via:{kind:`client`,name:null}}};async function qp(e){let{options:t,backend:n,runtime:r,policy:i}=e,a=t.sync??{},o=Object.keys(a).length>0?(await r.sync()).createSyncEngine(a):null,s=t.streamMaxMs??28e4,c=Zd(n.routes,t.basePath),{state:l,ownUrl:u,clientAs:d,handleOf:f}=e,p=t.watch??{},m=t.middleware??[];function h(e,t){return{credential:(e.headers.get(`authorization`)??``).match(/^Bearer\s+(.+)$/i)?.[1]??null,claims:fp(e.headers),audience:t,headers:e.headers}}async function g(e){return{identity:await i.identify(e),origin:{via:{kind:`api`}}}}let _=()=>new Id(404,`not_found`,`${u()??`this board`} answers only wake-ups and webhooks`);async function v(e){return(await Rp(e,o?async e=>{let t=await o.findByEmail(e);return t&&await n.syncImport(o.caller,{op:`seen`,author:{...t,isBot:!1}},new AbortController().signal),t}:void 0)).text}async function y(e){if(typeof e!=`string`)return e;let t=e.indexOf(`:`);if(t<=0)throw Rd(`sync targets look like <key>:<channel or thread>, got: ${e}`);let n=e.slice(0,t);if(o&&a[n])return o.normalizeTarget(e);if(o)throw Rd(`no sync entry named ${n}`);return Ip(e)}let b=e=>`identity`in e?e.identity.principal.access:null;async function x(e,t,n){let r=b(e);if(r===null)return{access:null,channel:t.channel??``};let i=t.channel??(t.re===void 0?void 0:(await P(e,t.re,n))?.channel);return i===void 0?null:r.can(`post`,i)?{access:r,channel:i}:null}let S=/* @__PURE__ */ new Map;async function C(e,t){if(`identity`in e)return{principal:e.identity.principal.id,actor:e.identity.actor};let r=JSON.stringify([e.origin.via?.kind??``,e.self,e.profile??null]),i=S.get(r);return i||(S.set(r,i=n.me(e,{},t).then(e=>({principal:e.principal,actor:{id:e.actor,kind:e.kind,handle:e.handle,name:e.name,avatar:e.avatar}}))),i.catch(()=>S.delete(r))),i}let w=null,T=(e,t,n,r)=>Fp(m,{write:e,author:t,source:n,board:()=>w??=f(Gp,null)},r);async function E(e){try{return await e(),!0}catch(e){if(e instanceof Id&&e.status===404)return!1;throw e}}async function D(e,t,r){let i=[];for(let a of new Set(t??[])){let{attachment:t,data:o}=await n.attachment(e,{id:a},r);o instanceof ReadableStream&&await o.cancel().catch(()=>{}),i.push(t)}return i}async function O(e,t,r,i){let a=Wp(e);if(m.length===0||a===null||t.id!==void 0&&await E(()=>n.posted(e,{id:t.id},r)))return i(t);let o=t.channel,s=null;if(t.re!==void 0){let n=await P(e,t.re,r);if(!n)return i(t);o=n.channel,s=n.re??n.id}let c=b(e),l=Object.keys(t.labels??{}).length>0,u=t.re===void 0&&(t.sync?.length??0)>0;if(o===void 0||c&&(!c.can(`post`,o)||l&&!c.can(`label`,o)||u&&!c.can(`sync`,o)))return i(t);let d=await D(e,t.attachments,r),{actor:f}=await C(e,r);return T({kind:`post`,channel:o,re:s,text:t.text,labels:t.labels??{},attachments:d},f,a,e=>i({...t,text:e.text,labels:e.labels}))}async function k(e,t,n){let r=b(e),i=await P(e,t,n),a=i??(r===null?null:await P(Kp,t,n));return!a||a.deleted||r&&!r.can(`post`,a.channel)||!i&&!a.blind?null:a.by.principal===(await C(e,n)).principal?a:null}async function A(e,t,n,r){let i=Wp(e);if(m.length===0||i===null)return r(t);let a=await k(e,t.id,n);if(!a)return r(t);let{actor:o}=await C(e,n);return T({kind:`edit`,id:a.id,channel:a.channel,re:a.re,text:t.text},o,i,e=>r({...t,text:e.text}))}async function j(e,t,r,i){let o=t.source?.key??t.from;if(t.source&&!(`identity`in e?(await n.watchers(e,{},i)).watchers.some(t=>t.owner===e.identity.principal.id&&t.sync.some(e=>e.key===o)):a[t.source.key]!==void 0))return null;let s=(t.op===`post`?t.origin:null)??r?.origin??null;return{kind:`sync`,key:o??``,platform:t.author.id.slice(0,Math.max(0,t.author.id.indexOf(`:`))),channel:t.source?.channel??r?.origin?.channel??s?.channel??``,thread:t.source?.thread??(s?s.subthread??s.thread:``)}}async function M(e,t,r){let i=t.message??null;if(t.origin!==void 0){let{thread:a,message:o}=await n.syncFind(e,{thread:t.origin.thread,...t.origin.message===void 0?{}:{message:t.origin.message}},r);i=t.origin.message===void 0?a===null?null:(await n.syncThread(e,{thread:a},r)).root:o}return i===null?null:P(e,i,r)}async function N(e,t,r){let i=t=>n.syncImport(e,t,r);if(m.length===0||e.origin.via?.kind===`middleware`||t.op!==`post`&&t.op!==`edit`)return i(t);let a=b(e);if(a&&(!a.anywhere(`sync`)||`identity`in e&&e.identity.principal.scope!==void 0))return i(t);let o=async e=>{try{return await e()}catch(e){if(!(e instanceof Np))throw e;return{message:null,dropped:[...e.responses]}}};if(t.op===`post`){if(t.id!==void 0&&(await n.syncFind(e,{post:t.id},r)).message!==null)return i(t);let s=t.channel,c=null;if(t.re!==void 0){let n=await P(e,t.re,r);if(!n)return i(t);s=n.channel,c=n.re??n.id}if(s===void 0||a&&!a.can(`sync`,s))return i(t);let l=await j(e,t,null,r);if(!l)return i(t);let u=await D(e,t.attachments,r);return o(async()=>T({kind:`post`,channel:s,re:c,text:t.text,labels:t.labels??{},attachments:u},Up(t.author),l,async e=>i({...t,text:e.text,labels:e.labels})))}if(t.origin===void 0==(t.message===void 0))return i(t);let s=await M(e,t,r);if(!s||s.deleted||a&&!a.can(`sync`,s.channel)||t.message!==void 0&&s.by.principal!==t.author.id)return i(t);let c=await j(e,t,s,r);return c?o(async()=>T({kind:`edit`,id:s.id,channel:s.channel,re:s.re,text:t.text},Up(t.author),c,async e=>i({...t,text:e.text}))):i(t)}async function P(e,t,r){try{let{message:i,replies:a}=await n.message(e,{id:t},r);return[i,...a].find(e=>e.id===t)??null}catch(e){if(e instanceof Id&&e.status===404)return null;throw e}}async function F(e,t,r){let i=(e,t)=>O(e,t,r,t=>n.post(e,t,r));if(!o)return i(e,t.sync?.length?{...t,sync:await Promise.all(t.sync.map(y))}:t);let a=(t.sync?.length??0)>0||Lp(t.text)?await x(e,t,r):null;if(!a)return i(e,t);let{access:s,channel:c}=a,l=t.re===void 0&&(t.sync?.length??0)>0&&(s===null||s.can(`sync`,c))?{...t,sync:await Promise.all(t.sync.map(y))}:t,u=await v(l.text),d=await i(e,{...l,text:u});return u!==t.text&&s!==null&&!s.readable(d.message.channel)?{...d,message:{...d.message,text:t.text}}:d}async function I(e,t){if(!t.dropped)return t.message;for(let n of t.dropped)await e.platform.respond(n);throw new Np(t.dropped)}async function L(e,t,n,r){let i=o.caller,{author:a,key:s}=t.platform,{via:c}=t.origin,l={key:s,channel:c.channel,thread:c.thread},u=async e=>{if(await I(t,await N(i,e,r))===null)throw Vd(`message not found: #${e.message}`,`message_not_found`);return{ok:!0}};switch(e){case`post`:return ee(t,n,r);case`edit`:{let{id:e,text:t}=n;return u({op:`edit`,author:a,from:null,message:e,text:await v(t),source:l})}case`delete`:return u({op:`delete`,author:a,from:null,message:n.id});case`react`:{let{id:e,emoji:t,remove:r}=n;return u({op:`react`,author:a,from:null,message:e,emoji:t,...r===void 0?{}:{remove:r}})}case`label`:{let{id:e,set:t,unset:r}=n;return u({op:`labels`,author:a,from:null,message:e,...t?{set:t}:{},...r?{unset:r}:{}})}default:return R(e,i,n,r)}}async function ee(e,t,r){let i=o.caller,{author:a,key:s}=e.platform,{via:c}=e.origin,l=async e=>{let t=await P(i,e,r);if(!t)throw Vd(`message not found: #${e}`,`message_not_found`);return t};if(t.id!==void 0){let e=(await n.syncFind(i,{post:t.id},r)).message;if(e!==null)return{message:await l(e)}}let u=await Promise.all((t.sync??[]).map(y)),d=await I(e,await N(i,{op:`post`,author:a,from:null,origin:null,source:{key:s,channel:c.channel,thread:c.thread},...t.channel===void 0?{re:t.re}:{channel:t.channel},text:await v(t.text),...t.labels?{labels:t.labels}:{},...t.noSync?{noSync:!0}:{},...t.attachments?.length?{attachments:t.attachments}:{},...t.id===void 0?{}:{id:t.id}},r));for(let e of u)await n.syncReceipt(i,{kind:`thread`,message:d,target:e.target,targetKind:e.kind,cause:`request`},r);return{message:await l(d)}}async function R(e,t,r,i){switch(e){case`post`:return F(t,r,i);case`edit`:{let{id:e,text:a}=r,s=e=>A(t,e,i,e=>n.edit(t,e,i));return!o||!Lp(a)||!await x(t,{re:e},i)?s({id:e,text:a}):s({id:e,text:await v(a)})}case`syncImport`:return N(t,r,i);case`schedule`:{let e=r,a=o&&Lp(e.text)?await x(t,e,i):null;if(!a)return n.schedule(t,e,i);let s=await v(e.text),c=await n.schedule(t,{...e,text:s},i),{access:l}=a;return s!==e.text&&l!==null&&!l.readable(c.schedule.channel)?{...c,schedule:{...c.schedule,text:e.text}}:c}case`inbox`:{let e=r;if(o&&a[e.key]&&e.channel!==void 0){let r=b(t);if(r===null||r.anywhere(`sync`))return n.inbox(t,{...e,channel:await o.inboxChannel(e.key,e.channel)},i)}return n.inbox(t,e,i)}default:{let a=n[e];if(typeof a!=`function`)throw Vd(`no route: ${e}`);return a.call(n,t,r,i)}}}async function te(e,t,r){let{sync:i,code:s}=ud.parse(Qd(t));if(!o||!a[i])throw Vd(`no sync entry named ${i}`);let c=(e,t)=>new Response(`${t}\n`,{status:e,headers:{"content-type":`text/plain; charset=utf-8`}}),{holder:l}=await n.syncFind(o.caller,{code:s},r);if(l===null)return c(404,"That link has expired or been used. Run `vb identity link` again for a new one.");if(e===`signIn`){let e=u(),t=await o.signIn(i,l,e?`${e}/identity/signed-in?${new URLSearchParams({sync:i,code:s})}`:void 0);return new Response(null,{status:302,headers:{location:t}})}let d=await o.redeemSignIn(i,l,s);return d?c(200,`Linked ${d.handle?`@${d.handle}`:d.actor}. You can close this tab.`):c(409,`${a[i].platform} hasn't said you approved yet: finish signing in, then open this page again.`)}async function ne(e,t,r,i,a){let s=r.signal;switch(e){case`sync`:{let e=Iu.parse(await $d(r)),i=a.id??``,c=b(t);if(c&&o){let e=await P(t,i,s);if(!e)throw Vd(`message not found: #${i}`,`message_not_found`);if(!c.can(`sync`,e.channel))throw Bd(`this token can't sync in ${e.channel}`)}let l=await y(e.target),{attached:u}=await n.syncReceipt(t,{kind:`thread`,message:i,target:l.target,targetKind:l.kind,cause:`request`},s);return Ud({target:l.target,attached:u??!0})}case`identityUnlink`:{let e=Gu.parse(await $d(r)),{links:i}=await n.identity(t,{},s),a=e.actor.replace(/^@/,``).toLowerCase(),o=i.filter(t=>t.actor===e.actor||t.handle?.toLowerCase()===a).map(e=>e.actor);if(o.length===0)throw Vd(`${e.actor} isn't linked to you`,`not_linked`);if(o.length>1)throw Rd(`${e.actor} names several of your accounts: use ${o.join(` or `)}`,`ambiguous_actor`);return await n.syncUnlink(t,{account:o[0]},s),Ud({ok:!0,actor:o[0]})}default:throw Vd(`no route: ${r.method} ${i.pathname}`)}}let re=Object.fromEntries(Jd.map(e=>[e,e===`syncImport`?N:(t,r,i)=>n[e].call(n,t,r,i)]));o?.bind({backend:re,client:(e,t)=>d({platform:{author:e.author,key:e.key,respond:e.respond},origin:{via:e.via}},t)});async function ie(e,t,r,i){let a=await n.events(e,{...t,wait:0},r.signal),o=new TextEncoder,c=new AbortController,l=Date.now()+s,u=AbortSignal.any([r.signal,c.signal,AbortSignal.timeout(s)]),d=new ReadableStream({async start(r){let s=e=>{try{r.enqueue(o.encode(e))}catch{}},c=setInterval(()=>s(`: ping
|
|
347
347
|
|
|
348
348
|
`),15e3);try{s(`: connected
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { i as fileSize, n as DIRECT_UPLOAD_BYTES_MAX } from "./files-SniSmeEr.mjs";
|
|
2
2
|
import { a as AttachmentId } from "./schemas-Be08nyfW.mjs";
|
|
3
|
-
import { d as VERSION, i as withMentions } from "./watchers-hash-
|
|
3
|
+
import { d as VERSION, i as withMentions } from "./watchers-hash-C_1jGA53.mjs";
|
|
4
4
|
import { n as displayEmoji, r as normalizeEmoji } from "./emoji-CTLpvH-A.mjs";
|
|
5
5
|
import { t as BoardError } from "./client-ClznIBMg.mjs";
|
|
6
|
-
import { i as groups, n as filters$1, o as options, r as globalOptions, s as usage, t as commands } from "./commands-
|
|
7
|
-
import { n as
|
|
8
|
-
import { t as http } from "./backend-http-
|
|
9
|
-
import { t as board } from "./server-
|
|
6
|
+
import { i as groups, n as filters$1, o as options, r as globalOptions, s as usage, t as commands } from "./commands-BtL4jFq8.mjs";
|
|
7
|
+
import { n as connect, s as vercelProjectFile, t as boardUrl } from "./node-CirFYqw0.mjs";
|
|
8
|
+
import { t as http } from "./backend-http-tGUo0e8j.mjs";
|
|
9
|
+
import { t as board } from "./server-Cp2oIQOj.mjs";
|
|
10
10
|
import { t as conformance } from "./conformance-DQ9qVzWP.mjs";
|
|
11
|
-
import { n as vercel, t as credentialSource } from "./backend-vercel-
|
|
11
|
+
import { n as vercel, t as credentialSource } from "./backend-vercel-C3zuxmcD.mjs";
|
|
12
12
|
import { t as displayText } from "./bots-CGkO76qH.mjs";
|
|
13
13
|
import { spawn } from "node:child_process";
|
|
14
|
-
import {
|
|
14
|
+
import { readFile, stat, writeFile } from "node:fs/promises";
|
|
15
15
|
import { mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
|
|
16
16
|
import { homedir } from "node:os";
|
|
17
17
|
import { basename, dirname, join } from "node:path";
|
|
@@ -553,7 +553,9 @@ function removedCommand(word) {
|
|
|
553
553
|
const cli = named();
|
|
554
554
|
const removed = {
|
|
555
555
|
update: `\`${cli} update\` is gone: reply in the thread you're working in (${cli} reply <id>), or post where it fits (${cli} post <channel>)`,
|
|
556
|
-
stuck: `\`${cli} stuck\` is gone: a board on a2() keeps its dead letters in A2, on the backend's \`servers
|
|
556
|
+
stuck: `\`${cli} stuck\` is gone: a board on a2() keeps its dead letters in A2, on the backend's \`servers\``,
|
|
557
|
+
link: `\`${cli} link\` is gone: pass --url <url> (or set BOARD_URL), and in a Vercel project its team's board needs neither`,
|
|
558
|
+
use: `\`${cli} use\` is gone: pass --url <url> (or set BOARD_URL), and in a Vercel project its team's board needs neither`
|
|
557
559
|
};
|
|
558
560
|
return Object.hasOwn(removed, word) ? removed[word] : void 0;
|
|
559
561
|
}
|
|
@@ -700,15 +702,14 @@ function configuredUrl() {
|
|
|
700
702
|
return boardUrl();
|
|
701
703
|
} catch (error) {
|
|
702
704
|
if (!(error instanceof BoardError) || error.code !== "no_board") throw error;
|
|
703
|
-
if (app.teamBoard) return null;
|
|
705
|
+
if (app.teamBoard || process.env.VERCEL_ORG_ID || vercelProjectFile()) return null;
|
|
704
706
|
const ways = [
|
|
705
|
-
"pass --
|
|
706
|
-
|
|
707
|
-
"
|
|
708
|
-
|
|
709
|
-
...app.commands.serve ? [`\`${app.name} serve\` for a local one`] : []
|
|
707
|
+
"pass --url <url> (or set BOARD_URL)",
|
|
708
|
+
"--scope <team> for a team's board in Vercel's API",
|
|
709
|
+
"run it in a Vercel project (vercel link) for its team's",
|
|
710
|
+
...app.commands.serve ? [`\`${named()} serve\` for a local one`] : []
|
|
710
711
|
];
|
|
711
|
-
throw new BoardError("no_board", `no board
|
|
712
|
+
throw new BoardError("no_board", `no board: ${ways.slice(0, -1).join(", ")}, or ${ways.at(-1)}`, 0);
|
|
712
713
|
}
|
|
713
714
|
}
|
|
714
715
|
/**
|
|
@@ -742,8 +743,8 @@ function profileFlag() {
|
|
|
742
743
|
/**
|
|
743
744
|
* The board this command talks to, as `--as` says: a handle on it, where it is (null until its
|
|
744
745
|
* discovery says, for a team's board), and how it reaches it. It's `--url`'s; a team's board in
|
|
745
|
-
* Vercel's API for `--scope` or `--team`; the one the environment points at; or
|
|
746
|
-
*
|
|
746
|
+
* Vercel's API for `--scope` or `--team`; the one the environment points at; or the team's board
|
|
747
|
+
* of the Vercel project it runs in, or, for an app with a team board, your login's.
|
|
747
748
|
*/
|
|
748
749
|
function connection(url = flags.url, options = {}) {
|
|
749
750
|
const profile = profileFlag();
|
|
@@ -841,34 +842,6 @@ function openBrowser(url) {
|
|
|
841
842
|
child.on("error", () => {});
|
|
842
843
|
child.unref();
|
|
843
844
|
}
|
|
844
|
-
/** Writes the board link: the project's `.board/` (kept out of Git), or the saved default when `root` is null. */
|
|
845
|
-
async function saveLink(root, url, extra = {}) {
|
|
846
|
-
const directory = root === null ? configDir() : join(root, ".board");
|
|
847
|
-
if (root !== null) {
|
|
848
|
-
const path = join(root, ".gitignore");
|
|
849
|
-
const ignore = await readFile(path, "utf8").catch((error) => {
|
|
850
|
-
if (error.code === "ENOENT") return "";
|
|
851
|
-
throw error;
|
|
852
|
-
});
|
|
853
|
-
if (!ignore.split(/\r?\n/).some((line) => /^\/?\.board\/?$/.test(line))) await appendFile(path, `${ignore && !ignore.endsWith("\n") ? "\n" : ""}.board/\n`);
|
|
854
|
-
}
|
|
855
|
-
await mkdir(directory, {
|
|
856
|
-
recursive: true,
|
|
857
|
-
mode: 448
|
|
858
|
-
});
|
|
859
|
-
await writeFile(join(directory, "config.json"), `${JSON.stringify({
|
|
860
|
-
url,
|
|
861
|
-
...extra
|
|
862
|
-
}, null, 2)}\n`, { mode: 384 });
|
|
863
|
-
}
|
|
864
|
-
/** Whether the project's link was written by `vb serve` (`"serve": true`), so a new run may move it. */
|
|
865
|
-
function linkedByServe(root) {
|
|
866
|
-
try {
|
|
867
|
-
return JSON.parse(readFileSync(join(root, ".board", "config.json"), "utf8")).serve === true;
|
|
868
|
-
} catch {
|
|
869
|
-
return false;
|
|
870
|
-
}
|
|
871
|
-
}
|
|
872
845
|
function portFlag() {
|
|
873
846
|
const port = flags.port === void 0 ? void 0 : Number(flags.port);
|
|
874
847
|
if (port !== void 0 && !(Number.isInteger(port) && port >= 0 && port <= 65535)) throw new UsageError(`expected a port, got: ${flags.port}`);
|
|
@@ -940,20 +913,10 @@ async function run(command, args) {
|
|
|
940
913
|
case "help":
|
|
941
914
|
out(help(args));
|
|
942
915
|
return 0;
|
|
943
|
-
case "link":
|
|
944
|
-
case "use": {
|
|
945
|
-
const url = args[0];
|
|
946
|
-
if (!url || args.length !== 1) throw new UsageError(`usage: ${app.name} ${command} <url>`);
|
|
947
|
-
const discovery = await connection(url).board.discovery();
|
|
948
|
-
const root = command === "link" ? projectDir() : null;
|
|
949
|
-
await saveLink(root, discovery.url);
|
|
950
|
-
out(root === null ? `using ${discovery.url}` : `linked ${root} to ${discovery.url}`);
|
|
951
|
-
return 0;
|
|
952
|
-
}
|
|
953
916
|
case "whoami": {
|
|
954
917
|
const { board, url: given, transport } = connection();
|
|
955
|
-
const me = await board.me();
|
|
956
|
-
const url = given ??
|
|
918
|
+
const [me, discovered] = await Promise.all([board.me(), board.discovery()]);
|
|
919
|
+
const url = given ?? discovered.url;
|
|
957
920
|
const source = transport.source();
|
|
958
921
|
if (flags.json) {
|
|
959
922
|
printJson({
|
|
@@ -1302,9 +1265,7 @@ const context = () => ({
|
|
|
1302
1265
|
portFlag,
|
|
1303
1266
|
connection,
|
|
1304
1267
|
client,
|
|
1305
|
-
openBrowser
|
|
1306
|
-
saveLink,
|
|
1307
|
-
linkedByServe
|
|
1268
|
+
openBrowser
|
|
1308
1269
|
});
|
|
1309
1270
|
/**
|
|
1310
1271
|
* Runs board's CLI on `argv` (what follows the command name) as `app`, and answers its exit
|
|
@@ -1337,8 +1298,6 @@ async function main(argv, options) {
|
|
|
1337
1298
|
}
|
|
1338
1299
|
/** The commands about the machine the CLI runs on, not the board: none of them run in-process. */
|
|
1339
1300
|
const MACHINE = /* @__PURE__ */ new Set([
|
|
1340
|
-
"link",
|
|
1341
|
-
"use",
|
|
1342
1301
|
"whoami",
|
|
1343
1302
|
"identity",
|
|
1344
1303
|
"hooks",
|