@lunora/agent 1.0.0-alpha.83 → 1.0.0-alpha.84
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/channels.mjs +1 -1
- package/package.json +3 -3
package/dist/channels.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{LunoraError as m}from"@lunora/errors";import{isDuplicateInstanceError as b}from"@lunora/workflow";import{h as E,B as A}from"./packem_shared/branch-marker-boZ00zmk.mjs";const
|
|
1
|
+
import{LunoraError as m}from"@lunora/errors";import{isDuplicateInstanceError as b}from"@lunora/workflow";import{h as E,B as A}from"./packem_shared/branch-marker-boZ00zmk.mjs";const g=t=>t.toString(16).padStart(4,"0"),x=t=>{let e=8997,n=33826,r=40164,s=52210;for(let a=0;a<t.length;a+=1){e^=t.charCodeAt(a);const o=e*435,f=n*435,i=r*435+e*256,l=s*435+n*256,c=f+(o>>>16),u=i+(c>>>16),d=l+(u>>>16);e=o&65535,n=c&65535,r=u&65535,s=d&65535}return g(s)+g(r)+g(n)+g(e)},R=300,k=/[^0-9a-f]/iu,N=new TextEncoder,y=t=>new Uint8Array(N.encode(t)),v=t=>{if(t.length%2!==0||k.test(t))throw new m("BAD_REQUEST","@lunora/agent: malformed hex signature");const e=new Uint8Array(t.length/2);for(let n=0;n<e.length;n+=1)e[n]=Number.parseInt(t.slice(n*2,n*2+2),16);return e},w=async(t,e,n)=>{try{const r=await crypto.subtle.importKey("raw",y(t),{hash:"SHA-256",name:"HMAC"},!1,["verify"]);return await crypto.subtle.verify("HMAC",r,v(n),y(e))}catch{return!1}},S=(t,e,n)=>Number.isFinite(t)&&Math.abs(e-t)<=n,T=async t=>{const{body:e,now:n=Date.now()/1e3,signature:r,signingSecret:s,timestamp:a,tolerance:o=R}=t;return!r||!a||!r.startsWith("v0=")||!S(Number(a),n,o)?!1:w(s,`v0:${a}:${e}`,r.slice(3))},C=async t=>{const{body:e,secret:n,signature:r}=t;return r?.startsWith("sha256=")?w(n,e,r.slice(7)):!1},I=async t=>{const{body:e,publicKey:n,signature:r,timestamp:s}=t;if(!r||!s)return!1;try{const a=await crypto.subtle.importKey("raw",v(n),{name:"Ed25519"},!1,["verify"]);return await crypto.subtle.verify({name:"Ed25519"},a,v(r),y(s+e))}catch{return!1}},_=t=>{if(t.has("x-slack-signature"))return"slack";if(t.has("x-hub-signature-256"))return"github";if(t.has("x-signature-ed25519"))return"discord"},B=(t,e)=>{if(typeof t=="function")return t(e);const n=e[t];return typeof n=="string"?n:void 0},H=async(t,e,n,r)=>{switch(t){case"discord":return I({body:r,publicKey:e,signature:n.get("x-signature-ed25519")??void 0,timestamp:n.get("x-signature-timestamp")??void 0});case"github":return C({body:r,secret:e,signature:n.get("x-hub-signature-256")??void 0});case"slack":return T({body:r,signature:n.get("x-slack-signature")??void 0,signingSecret:e,timestamp:n.get("x-slack-request-timestamp")??void 0});default:return!1}},M=(t,e)=>{if(t==="discord")try{if(JSON.parse(e).type===1)return Response.json({type:1})}catch{}},p=()=>new Response(void 0,{status:200}),D=(t,e,n)=>{if(t==="github")return e.get("x-github-delivery")??void 0;try{const r=JSON.parse(n),s=t==="slack"?r.event_id:r.id;return typeof s=="string"?s:void 0}catch{return}},O=async(t,e,n,r)=>{if(E(e))throw new m("BAD_REQUEST",`@lunora/agent: inbound channel run params ${A}`);if(r===void 0||r==="")return await t.create({params:e}),p();try{await t.create({id:`${n}-${x(r)}`,params:e})}catch(s){if(b(s))return p();throw s}return p()},J=t=>async(e,n)=>{const r=await e.text(),s=_(e.headers);if(s===void 0)return new Response("Unrecognized webhook",{status:400});const a=t.map(i=>({config:i.agent.onInbound,target:i})).filter(i=>i.config?.channel===s),o={channel:s,headers:e.headers,json:()=>JSON.parse(r),rawBody:r};let f=!1;for(const{config:i,target:l}of a){const c=B(i.secret,n);if(c===void 0||!await H(s,c,e.headers,r))continue;f=!0;const u=M(s,r);if(u)return u;const d=await i.map(o);if(!d)continue;const h=n[l.binding];if(!h||typeof h.create!="function")throw new m("INTERNAL",`@lunora/agent: no Workflow binding "${l.binding}" on env for an inbound-channel agent — run codegen/dev so wrangler.jsonc declares it`);return await O(h,d,s,D(s,e.headers,r))}return f?new Response(void 0,{status:204}):new Response("Invalid signature",{status:401})};export{J as dispatchAgentChannel,I as verifyDiscord,C as verifyGithub,T as verifySlack};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lunora/agent",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.84",
|
|
4
4
|
"description": "Durable AI agents for Lunora: defineAgent compiles a replay-safe tool-loop onto Cloudflare Workflows, with DO SQLite threads and live message subscriptions",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent",
|
|
@@ -84,10 +84,10 @@
|
|
|
84
84
|
"access": "public"
|
|
85
85
|
},
|
|
86
86
|
"dependencies": {
|
|
87
|
-
"@lunora/ai": "1.0.0-alpha.
|
|
87
|
+
"@lunora/ai": "1.0.0-alpha.71",
|
|
88
88
|
"@lunora/errors": "1.0.0-alpha.30",
|
|
89
89
|
"@lunora/mail": "1.0.0-alpha.61",
|
|
90
|
-
"@lunora/server": "1.0.0-alpha.
|
|
90
|
+
"@lunora/server": "1.0.0-alpha.101",
|
|
91
91
|
"@lunora/values": "1.0.0-alpha.38",
|
|
92
92
|
"@lunora/workflow": "1.0.0-alpha.43",
|
|
93
93
|
"@modelcontextprotocol/sdk": "^1.30.0",
|