corsair 0.1.149 → 0.1.151
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/{browser-delivery-D9B1ljAd.d.ts → browser-delivery-tqFM2jpE.d.ts} +1 -1
- package/dist/chunk-JAIV6R7Z.js +68 -0
- package/dist/chunk-WUEWJTDA.js +1 -0
- package/dist/client/react/index.js +2 -2
- package/dist/connect-3Q43KWY5.js +1 -0
- package/dist/core.d.ts +10 -7
- package/dist/core.js +1 -1
- package/dist/hub.d.ts +5 -5
- package/dist/hub.js +1 -1
- package/dist/{index-DTOhoTJX.d.ts → index-B7db41xb.d.ts} +2 -1
- package/dist/{index-cpdyBUZ9.d.ts → index-C4Q-Nj2c.d.ts} +2 -2
- package/dist/{index-BEutbXHG.d.ts → index-mt7HsVnu.d.ts} +81 -8
- package/dist/index.d.ts +6 -6
- package/dist/index.js +1 -1
- package/dist/{loop-3P3NJCBS.js → loop-M43UGVNM.js} +1 -1
- package/dist/oauth.d.ts +1 -1
- package/dist/oauth.js +1 -1
- package/dist/orm.d.ts +7 -0
- package/dist/orm.js +1 -1
- package/dist/{setup-7YGHRSSJ.js → setup-V3Y7452F.js} +1 -1
- package/dist/setup-introspect-3TLOP2YN.js +1 -0
- package/dist/setup.d.ts +2 -2
- package/dist/setup.js +1 -1
- package/dist/{tenant-match-utils-DBGMMPn-.d.ts → tenant-match-utils-6YEqXPZw.d.ts} +2 -2
- package/dist/tunnel.d.ts +4 -4
- package/dist/tunnel.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-BRUFMVTV.js +0 -1
- package/dist/chunk-RNYPB3YV.js +0 -67
- package/dist/connect-QQTLZ7DN.js +0 -1
- package/dist/setup-introspect-PL5GMPJZ.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as L,e as J,f as Q,g as z}from"./chunk-XPXWKPFZ.js";var me=Symbol.for("corsair:internal"),F=class extends Error{constructor(t="Invalid corsair instance"){super(t),this.name="InvalidCorsairInstanceError"}};function K(e){return typeof e=="object"&&e!==null}function H(e){if(!K(e)||!Array.isArray(e.plugins)||typeof e.kek!="string"||typeof e.multiTenancy!="boolean")return!1;if(e.database===void 0)return!0;if(!K(e.database))return!1;let t=e.database.db;return typeof t=="object"&&t!==null&&typeof t.selectFrom=="function"}function G(e){if(!e||typeof e!="object")return;let r=Object.getOwnPropertyDescriptor(e,me)?.value;return H(r)?r:void 0}function we(e,t){let r=G(e);if(!r)throw t?.()??new F;return r}function Y(e,t){return e.plugins.find(r=>r.id===t)}function he(e,t,r){let n=Y(e,t);if(!n)throw r(`Plugin '${t}' not found`);return n}function Te(e){return"withTenant"in e&&typeof e.withTenant=="function"}function be(e,t){if(!e||typeof e!="object")return;let r=e[t];return typeof r=="function"?(...n)=>Reflect.apply(r,e,n):void 0}var N={oauth_2:{integration:["client_id","client_secret","redirect_url"],account:["access_token","refresh_token","expires_at","scope","webhook_signature"]},api_key:{integration:[],account:["api_key","webhook_signature"]},bot_token:{integration:[],account:["bot_token","webhook_signature"]},managed:{integration:[],account:["access_token","refresh_token","expires_at","scope","webhook_signature"]},managed_pricing:{integration:[],account:[]}};function X(e){return e==="oauth_2"||e==="api_key"||e==="bot_token"||e==="managed"||e==="managed_pricing"}function Ce(e){let t=e.options?.authType;return X(t)?t:void 0}function tt(e){return e==="managed_pricing"}function ke(e,t){let r=e.authConfig,n=N[t].account,i=r?.[t]?.account??[];return[...n,...i]}function nt(e,t){let r=e.authConfig,n=N[t].integration,i=r?.[t]?.integration??[];return[...n,...i]}import{createCipheriv as q,createDecipheriv as V,randomBytes as P,scrypt as xe}from"crypto";import{promisify as Ae}from"util";var ee=Ae(xe),B="aes-256-gcm",te=12,R=16,Ee=16,j=32;function at(){return P(j).toString("base64")}async function ct(e,t){let r=P(Ee),n=await ee(t,r,j),i=P(te),s=q(B,n,i,{authTagLength:R}),d=Buffer.concat([s.update(e,"utf8"),s.final()]),y=s.getAuthTag();return[r.toString("base64"),i.toString("base64"),y.toString("base64"),d.toString("base64")].join(":")}async function S(e,t){let[r,n,i,s]=e.split(":");if(!r||!n||!i||!s)throw new Error("Invalid encrypted DEK format");let d=Buffer.from(r,"base64"),y=Buffer.from(n,"base64"),f=Buffer.from(i,"base64"),g=Buffer.from(s,"base64"),l=await ee(t,d,j),c=V(B,l,y,{authTagLength:R});return c.setAuthTag(f),Buffer.concat([c.update(g),c.final()]).toString("utf8")}function W(e,t){let r=Buffer.from(t,"base64"),n=P(te),i=q(B,r,n,{authTagLength:R}),s=Buffer.concat([i.update(e,"utf8"),i.final()]),d=i.getAuthTag();return[n.toString("base64"),d.toString("base64"),s.toString("base64")].join(":")}function U(e,t){let[r,n,i]=e.split(":");if(!r||!n||!i)throw new Error("Invalid encrypted data format");let s=Buffer.from(t,"base64"),d=Buffer.from(r,"base64"),y=Buffer.from(n,"base64"),f=Buffer.from(i,"base64"),g=V(B,s,d,{authTagLength:R});return g.setAuthTag(y),Buffer.concat([g.update(f),g.final()]).toString("utf8")}function _e(e,t){let r={};for(let[n,i]of Object.entries(e))r[n]=W(i,t);return r}function De(e,t){let r={};for(let[n,i]of Object.entries(e))r[n]=U(i,t);return r}function ut(e,t,r){let n=De(e,t);return _e(n,r)}import{v7 as Ie}from"uuid";function _(){return Ie()}import{z as E}from"zod";var $="_corsair_enc";function re(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e;return typeof t[$]=="string"&&Object.keys(t).length===1}function M(e,t){return{[$]:W(JSON.stringify(e),t)}}function Z(e,t){let r=ie(e);return re(r)?JSON.parse(U(r[$],t)):r}async function xt(e,t,r){let n=await e.selectFrom("corsair_accounts").select("dek").where("id","=",t).executeTakeFirst();if(!n?.dek)throw new Error(`No DEK found for account "${t}". Initialize the account first.`);return S(n.dek,r)}async function At(e,t,r,n){let i=await e.selectFrom("corsair_entities").select(["id","data"]).where("account_id","=",t).execute();for(let d of i){let y=ne(d.data,r,n);y&&await e.updateTable("corsair_entities").set({data:y,updated_at:new Date}).where("id","=",d.id).execute()}let s=await e.selectFrom("corsair_events").select(["id","payload"]).where("account_id","=",t).execute();for(let d of s){let y=ne(d.payload,r,n);y&&await e.updateTable("corsair_events").set({payload:y,updated_at:new Date}).where("id","=",d.id).execute()}}function ne(e,t,r){let n=ie(e);if(re(n))return M(Z(n,t),r)}function ie(e){if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}}import{sql as x}from"kysely";function O(e){return e.replace(/'/g,"''")}function oe(e){let t=O(e);return x`data->>'${x.raw(t)}'`}function se(e){let t=O(e);return x`(data->>'${x.raw(t)}')::numeric`}function ae(e){let t=O(e);return x`(data->>'${x.raw(t)}')::boolean`}function ce(e){let t=O(e);return x`(data->>'${x.raw(t)}')::timestamptz`}function Fe(e){if(typeof e=="string")try{return JSON.parse(e)}catch{return e}return e}function ue(e){let t=e;for(;t;){if(t instanceof E.ZodOptional||t instanceof E.ZodNullable){t=t._def.innerType;continue}if(t instanceof E.ZodDefault){t=t._def.innerType;continue}break}return t}function Pe(e){let t=ue(e);if(t instanceof E.ZodString)return"string";if(t instanceof E.ZodNumber)return"number";if(t instanceof E.ZodBoolean)return"boolean";if(t instanceof E.ZodDate)return"date"}function Be(e){let t=ue(e);if(!(t instanceof E.ZodObject))return{};let r=t.shape,n={};for(let[i,s]of Object.entries(r)){let d=Pe(s);d&&(n[i]=d)}return n}function Re(e,t,r){if(typeof r=="string")return e.where(t,"=",r);if(typeof r=="object"&&r!==null&&!Array.isArray(r)){let n=r;"equals"in n&&typeof n.equals=="string"&&(e=e.where(t,"=",n.equals)),"contains"in n&&typeof n.contains=="string"&&(e=e.where(t,"like",`%${n.contains}%`)),"startsWith"in n&&typeof n.startsWith=="string"&&(e=e.where(t,"like",`${n.startsWith}%`)),"endsWith"in n&&typeof n.endsWith=="string"&&(e=e.where(t,"like",`%${n.endsWith}`)),"in"in n&&Array.isArray(n.in)&&(e=e.where(t,"in",n.in))}return e}function Se(e,t,r){if(typeof r=="number")return e.where(t,"=",r);if(typeof r=="object"&&r!==null&&!Array.isArray(r)){let n=r;typeof n.equals=="number"&&(e=e.where(t,"=",n.equals)),typeof n.gt=="number"&&(e=e.where(t,">",n.gt)),typeof n.gte=="number"&&(e=e.where(t,">=",n.gte)),typeof n.lt=="number"&&(e=e.where(t,"<",n.lt)),typeof n.lte=="number"&&(e=e.where(t,"<=",n.lte)),Array.isArray(n.in)&&(e=e.where(t,"in",n.in))}return e}function Oe(e,t,r){if(typeof r=="boolean")return e.where(t,"=",r);if(typeof r=="object"&&r!==null&&!Array.isArray(r)){let n=r;typeof n.equals=="boolean"&&(e=e.where(t,"=",n.equals))}return e}function ve(e,t,r){if(r instanceof Date)return e.where(t,"=",r);if(typeof r=="object"&&r!==null&&!Array.isArray(r)){let n=r;if(n.equals instanceof Date&&(e=e.where(t,"=",n.equals)),n.before instanceof Date&&(e=e.where(t,"<",n.before)),n.after instanceof Date&&(e=e.where(t,">",n.after)),Array.isArray(n.between)&&n.between.length===2){let[i,s]=n.between;i instanceof Date&&(e=e.where(t,">=",i)),s instanceof Date&&(e=e.where(t,"<=",s))}}return e}function Ke(e,t,r,n){return r==="number"?Se(e,se(t),n):r==="boolean"?Oe(e,ae(t),n):r==="date"?ve(e,ce(t),n):Re(e,oe(t),n)}function Ne(e,t,r){if(typeof r=="object"&&r!==null&&!Array.isArray(r)){let n=r;return"equals"in n&&(e=e.where(t,"=",n.equals)),"contains"in n&&typeof n.contains=="string"&&(e=e.where(t,"like",`%${n.contains}%`)),"startsWith"in n&&typeof n.startsWith=="string"&&(e=e.where(t,"like",`${n.startsWith}%`)),"endsWith"in n&&typeof n.endsWith=="string"&&(e=e.where(t,"like",`%${n.endsWith}`)),"in"in n&&Array.isArray(n.in)&&(e=e.where(t,"in",n.in)),e}return e.where(t,"=",r)}function je(e){return typeof e=="number"?e:typeof e=="bigint"?Number(e):Number.parseInt(String(e??0),10)}function A(e,t,r){return e.selectFrom("corsair_entities").selectAll().where("account_id","=",t).where("entity_type","=",r)}function de(e,t,r,n,i,s){let d=Be(i),y=new Map,f=async o=>{if(!s?.kek)throw new Error("encryptDataAtRest requires kek");let a=await e.selectFrom("corsair_accounts").select("dek").where("id","=",o).executeTakeFirst();if(!a?.dek)throw new Error(`No DEK found for account "${o}". Initialize the account first.`);let u=y.get(o);if(u&&u.wrapped===a.dek)return u.dek;let m=await S(a.dek,s.kek);return y.set(o,{wrapped:a.dek,dek:m}),m};async function g(o,a){let u=Fe(o.data);return s&&(u=Z(u,a??await f(o.account_id))),{...o,data:i.parse(u)}}async function l(o,a){if(o.length===0)return[];let u=s?await f(a):void 0;return Promise.all(o.map(m=>g(m,u)))}async function c(o,a){return s?M(a,await f(o)):a}return{findByEntityId:async o=>{let a=await t(),u=await A(e,a,r).where("entity_id","=",o).executeTakeFirst();return u?g(u):null},existsByEntityId:async o=>{let a=await t();return await A(e,a,r).select("id").where("entity_id","=",o).executeTakeFirst()!==void 0},findIdByEntityId:async o=>{let a=await t();return(await A(e,a,r).select("id").where("entity_id","=",o).executeTakeFirst())?.id??null},findById:async o=>{let a=await t(),u=await A(e,a,r).where("id","=",o).executeTakeFirst();return u?g(u):null},findManyByEntityIds:async o=>{if(o.length===0)return[];let a=await t(),u=await A(e,a,r).where("entity_id","in",o).execute();return l(u,a)},list:async o=>{let a=await t(),u=A(e,a,r);typeof o?.limit=="number"&&(u=u.limit(o.limit)),typeof o?.offset=="number"&&(u=u.offset(o.offset));let m=await u.execute();return l(m,a)},search:async o=>{if(s&&o.data&&typeof o.data=="object"&&Object.keys(o.data).length>0)throw new Error("Entity JSON field search cannot run while encryptDataAtRest is enabled. The stored document is ciphertext.");let a=await t(),u=A(e,a,r),m=new Set(["data","limit","offset"]);for(let[T,b]of Object.entries(o))m.has(T)||b===void 0||(u=Ne(u,T,b));if(o.data&&typeof o.data=="object")for(let[T,b]of Object.entries(o.data)){if(b===void 0)continue;let I=d[T]??"string";u=Ke(u,T,I,b)}typeof o.limit=="number"&&(u=u.limit(o.limit)),typeof o.offset=="number"&&(u=u.offset(o.offset));let k=await u.execute();return l(k,a)},upsertByEntityId:async(o,a)=>{let u=await t(),m=i.parse(a),k=await c(u,m),T=new Date,b=await A(e,u,r).select("id").where("entity_id","=",o).executeTakeFirst();if(b?.id){await e.updateTable("corsair_entities").set({version:n,data:k,updated_at:T}).where("id","=",b.id).execute();let ge=await e.selectFrom("corsair_entities").selectAll().where("id","=",b.id).executeTakeFirst();return g(ge)}let I=_();await e.insertInto("corsair_entities").values({id:I,created_at:T,updated_at:T,account_id:u,entity_id:o,entity_type:r,version:n,data:k}).execute();let pe=await e.selectFrom("corsair_entities").selectAll().where("id","=",I).executeTakeFirst();return g(pe)},deleteById:async o=>{let a=await t(),u=await e.deleteFrom("corsair_entities").where("account_id","=",a).where("entity_type","=",r).where("id","=",o).executeTakeFirst();return Number(u.numDeletedRows)>0},deleteByEntityId:async o=>{let a=await t(),u=await e.deleteFrom("corsair_entities").where("account_id","=",a).where("entity_type","=",r).where("entity_id","=",o).executeTakeFirst();return Number(u.numDeletedRows)>0},count:async()=>{let o=await t(),a=await e.selectFrom("corsair_entities").select(u=>u.fn.countAll().as("count")).where("account_id","=",o).where("entity_type","=",r).executeTakeFirst();return je(a?.count)}}}var We={corsair_integrations:L,corsair_accounts:J,corsair_entities:Q,corsair_events:z};function Ue(e){return We[e]}function le(e){if(typeof e=="string")try{return JSON.parse(e)}catch{return e}return e}function p(e){if(!e)throw new Error("Corsair database is not configured. Pass `database` to createCorsair(...) to enable ORM.")}function D(e){if(!e)return[];let t=[];for(let r in e){let n=r,i=e[n];if(i!==void 0)if(typeof i=="object"&&i!==null&&!Array.isArray(i)&&!(i instanceof Date)){let s=i;"in"in s&&Array.isArray(s.in)?t.push({field:n,operator:"in",value:s.in}):"like"in s&&typeof s.like=="string"&&t.push({field:n,operator:"like",value:s.like})}else t.push({field:n,value:i})}return t}function C(e,t){if(!t?.length)return e;let r=e;for(let n of t){let i=n.operator??"=";r=r.where(n.field,i,n.value)}return r}function $e(e){return typeof e=="number"?e:typeof e=="bigint"?Number(e):Number.parseInt(String(e??0),10)}function v(e,t){let r=Ue(t),n=()=>(p(e),e),i=()=>n().db.selectFrom(t),s=()=>n().db.insertInto(t),d=()=>n().db.updateTable(t),y=()=>n().db.deleteFrom(t);function f(l){let c={};for(let[o,a]of Object.entries(l))c[o]=le(a);return r.parse(c)}function g(l){let c={};for(let[o,a]of Object.entries(l))c[o]=le(a);return r.parse(c)}return{findById:async l=>{p(e);let c=i().selectAll();c=C(c,[{field:"id",value:l}]);let o=await c.executeTakeFirst();return o?f(o):null},findOne:async l=>{p(e);let c=i().selectAll();c=C(c,D(l));let o=await c.executeTakeFirst();return o?f(o):null},findMany:async l=>{p(e);let c=i().selectAll();return c=C(c,D(l?.where)),typeof l?.limit=="number"&&(c=c.limit(l.limit)),typeof l?.offset=="number"&&(c=c.offset(l.offset)),(await c.execute()).map(a=>f(a))},create:async l=>{p(e);let c=new Date,o={id:l.id??_(),created_at:c,updated_at:c,...l},a=await s().values(o).returningAll().executeTakeFirst();return a?f(a):g(o)},update:async(l,c)=>{p(e);let o={...c,updated_at:new Date},a=d().set(o).returningAll();a=C(a,[{field:"id",value:l}]);let u=await a.executeTakeFirst();return u?f(u):null},updateMany:async(l,c)=>{p(e);let o={...c,updated_at:new Date},a=i().select("id");a=C(a,D(l));let u=await a.execute();for(let m of u){let k=d().set(o);k=C(k,[{field:"id",value:m.id}]),await k.execute()}return u.length},delete:async l=>{p(e);let c=y();c=C(c,[{field:"id",value:l}]);let o=await c.executeTakeFirst();return Number(o?.numDeletedRows??0)>0},deleteMany:async l=>{p(e);let c=y();c=C(c,D(l));let o=await c.executeTakeFirst();return Number(o?.numDeletedRows??0)},count:async l=>{p(e);let c=i().select(a=>a.fn.countAll().as("count"));c=C(c,D(l));let o=await c.executeTakeFirst();return $e(o?.count)}}}function Me(e){let t=v(e,"corsair_integrations");return{...t,findByName:r=>t.findOne({name:r}),upsertByName:async(r,n)=>{let i=await t.findOne({name:r});return i?await t.update(i.id,n):t.create({...n,name:r})}}}function Ze(e){let t=v(e,"corsair_accounts");return{...t,findByTenantAndIntegration:async(r,n)=>{p(e);let i=await e.db.selectFrom("corsair_integrations").selectAll().where("name","=",n).executeTakeFirst();return i?t.findOne({tenant_id:r,integration_id:i.id}):null},listByTenant:(r,n)=>t.findMany({where:{tenant_id:r},limit:n?.limit,offset:n?.offset}),upsertByTenantAndIntegration:async(r,n,i)=>{let s=await t.findOne({tenant_id:r,integration_id:n});return s?await t.update(s.id,i):t.create({...i,tenant_id:r,integration_id:n})}}}function Le(e){let t=v(e,"corsair_entities");return{...t,findByEntityId:({accountId:r,entityType:n,entityId:i})=>t.findOne({account_id:r,entity_type:n,entity_id:i}),findManyByEntityIds:async({accountId:r,entityType:n,entityIds:i})=>i.length===0?[]:(p(e),await e.db.selectFrom("corsair_entities").selectAll().where("account_id","=",r).where("entity_type","=",n).where("entity_id","in",i).execute()),listByScope:({accountId:r,entityType:n,limit:i,offset:s})=>t.findMany({where:{account_id:r,entity_type:n},limit:i,offset:s}),searchByEntityId:async({accountId:r,entityType:n,query:i,limit:s,offset:d})=>{p(e);let y=e.db.selectFrom("corsair_entities").selectAll().where("account_id","=",r).where("entity_type","=",n).where("entity_id","like",`%${i}%`);return typeof s=="number"&&(y=y.limit(s)),typeof d=="number"&&(y=y.offset(d)),await y.execute()},upsertByEntityId:async({accountId:r,entityType:n,entityId:i,version:s,data:d})=>{let y=await t.findOne({account_id:r,entity_type:n,entity_id:i});return y?await t.update(y.id,{version:s,data:d}):t.create({account_id:r,entity_type:n,entity_id:i,version:s,data:d})},deleteByEntityId:async({accountId:r,entityType:n,entityId:i})=>{p(e);let s=await e.db.deleteFrom("corsair_entities").where("account_id","=",r).where("entity_type","=",n).where("entity_id","=",i).executeTakeFirst();return Number(s.numDeletedRows)>0}}}function Je(e){let t=v(e,"corsair_events");return{...t,listByAccount:(r,n)=>t.findMany({where:{account_id:r},limit:n?.limit,offset:n?.offset}),listByStatus:(r,n)=>{let i={status:r};return n?.accountId&&(i.account_id=n.accountId),t.findMany({where:i,limit:n?.limit,offset:n?.offset})},listPending:r=>{let n={status:"pending"};return r?.accountId&&(n.account_id=r.accountId),t.findMany({where:n,limit:r?.limit??100})},updateStatus:(r,n)=>t.update(r,{status:n})}}function ye(e){return{integrations:Me(e),accounts:Ze(e),entities:Le(e),events:Je(e)}}function Qe(e){if(e.encryptDataAtRest===!0)return{encryptDataAtRest:!0,kek:e.kek??""}}function ze(e,t,r,n,i,s){let d=null;async function y(){if(d!==null)return d;p(e);let f=await e.db.selectFrom("corsair_integrations").selectAll().where("name","=",t.integrationName).executeTakeFirst();if(!f)throw new Error(`Integration "${t.integrationName}" not found. Make sure to create the integration first.`);let g=await e.db.selectFrom("corsair_accounts").selectAll().where("tenant_id","=",t.tenantId).where("integration_id","=",f.id).executeTakeFirst();if(!g)throw new Error(`Account not found for tenant "${t.tenantId}" and integration "${t.integrationName}". Make sure to create the account first.`);return d=g.id,d}return p(e),de(e.db,y,r,n,i,s)}function fe(e){let{database:t,integrationName:r,schema:n,tenantId:i}=e,s=Qe(e),d=ye(t),y={tenantId:i,integrationName:r},f=null;async function g(){if(f!==null)return f;p(t);let c=await t.db.selectFrom("corsair_integrations").selectAll().where("name","=",r).executeTakeFirst();if(!c)throw new Error(`Integration "${r}" not found. Make sure to create the integration first.`);let o=await t.db.selectFrom("corsair_accounts").selectAll().where("tenant_id","=",i).where("integration_id","=",c.id).executeTakeFirst();if(!o)throw new Error(`Account not found for tenant "${i}" and integration "${r}". Make sure to create the account first.`);return f=o.id,f}let l={};for(let[c,o]of Object.entries(n.entities))l[c]=ze(t,y,c,n.version,o,s);return{...l,$orm:d,$integrationName:r,$tenantId:i,$getAccountId:g}}function Ut(e,t){let r=ye(e);return{$tenantId:t,$orm:r,listAccounts:n=>r.accounts.listByTenant(t,n),findAccountByIntegration:n=>r.accounts.findByTenantAndIntegration(t,n),listEntities:async n=>{p(e);let i=await e.db.selectFrom("corsair_accounts").select("id").where("tenant_id","=",t).execute();if(i.length===0)return[];let s=i.map(y=>y.id),d=e.db.selectFrom("corsair_entities").selectAll().where("account_id","in",s);return n?.entityType&&(d=d.where("entity_type","=",n.entityType)),typeof n?.limit=="number"&&(d=d.limit(n.limit)),typeof n?.offset=="number"&&(d=d.offset(n.offset)),await d.execute()},listEvents:async n=>{p(e);let i=await e.db.selectFrom("corsair_accounts").select("id").where("tenant_id","=",t).execute();if(i.length===0)return[];let s=i.map(y=>y.id),d=e.db.selectFrom("corsair_events").selectAll().where("account_id","in",s);return n?.status&&(d=d.where("status","=",n.status)),typeof n?.limit=="number"&&(d=d.limit(n.limit)),typeof n?.offset=="number"&&(d=d.offset(n.offset)),await d.execute()},forIntegration:n=>fe({database:e,integrationName:n.integrationName,schema:n.schema,tenantId:t,encryptDataAtRest:n.encryptDataAtRest,kek:n.kek})}}function $t(e,t){return{forTenant:r=>fe({database:e,integrationName:t.integrationName,schema:t.schema,tenantId:r,encryptDataAtRest:t.encryptDataAtRest,kek:t.kek})}}export{F as a,K as b,G as c,we as d,he as e,Te as f,be as g,N as h,Ce as i,tt as j,ke as k,nt as l,j as m,at as n,ct as o,S as p,W as q,U as r,_e as s,De as t,ut as u,re as v,M as w,Z as x,xt as y,At as z,_ as A,de as B,We as C,ye as D,fe as E,Ut as F,$t as G};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import{useCallback as ve,useEffect as lt,useReducer as xe,useRef as Ae}from"react";var M=class extends Error{status;code;extra;constructor(o,a,n,s={}){super(n),this.name="CorsairClientError",this.status=o,this.code=a,this.extra=s}};function Le(t){return t.endsWith("/")?t.slice(0,-1):t}async function ne(t){let o={};try{o=await t.json()}catch{}let a=typeof o.error=="string"?o.error:"request_failed",n=typeof o.message=="string"?o.message:`Request failed (${t.status})`,{error:s,message:i,...e}=o;return new M(t.status,a,n,e)}function G(t){let o=Le(t.baseURL),a=t.fetch??((...e)=>globalThis.fetch(...e));async function n(e,r){let c=r&&Object.keys(r).length?`?${new URLSearchParams(r).toString()}`:"",p=await a(`${o}${e}${c}`,{method:"GET"});if(!p.ok)throw await ne(p);return await p.json()}async function s(e,r){let c=await a(`${o}${e}`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(r)});if(!c.ok)throw await ne(c);return await c.json()}let i=encodeURIComponent;return{ok:()=>n("/ok"),tenants:{list:()=>n("/tenants"),create:e=>s("/tenants",e),get:e=>n(`/tenants/${i(e)}`)},plugins:{list:()=>n("/plugins"),get:e=>n(`/plugins/${i(e)}`)},connectionStatus:{get:e=>{let r={};return e?.tenantId&&(r.tenantId=e.tenantId),n("/connection-status",r)}},permissions:{get:e=>"id"in e?n(`/permissions/${i(e.id)}`):s("/permissions/lookup-by-token",{token:e.token})},connect:{createLink:e=>s("/connect/links",e),resolve:e=>n("/connect/resolve",{state:e}),oauthCallback:e=>s("/connect/oauth/callback",e)},connectRequest:{get:e=>{let r={};return e?.tenantId&&(r.tenantId=e.tenantId),n("/connect/request",r)},clear:e=>s("/connect/request/clear",e??{})},call(e,r,c,p){return s(`/${i(c)}/${i(e)}/call/${i(r)}`,{args:p}).then(m=>m.data)}}}import{createContext as Xe,useCallback as v,useContext as Ze,useEffect as U,useMemo as Ke,useReducer as _e,useRef as R,useState as Ce}from"react";var V={phase:"idle",plugin:null,connectUrl:null,tenantId:null};function re(t,o){switch(o.type){case"OPEN":return{phase:"connecting",plugin:o.plugin,connectUrl:o.connectUrl,tenantId:o.tenantId};case"SUCCESS":return{...t,phase:"success"};case"CLOSE":return V}}function ae(t,o){return t?.[o]==="connected"}function ie(t){return t.capturedAttempt===t.currentAttempt&&ae(t.status,t.plugin)}var De=4,se=250;async function ce(t,o){let a=o?.retries??De,n=o?.backoffMs??se,s=o?.sleep??(e=>new Promise(r=>setTimeout(r,e))),i;for(let e=0;e<=a;e++)try{return await t()}catch(r){i=r,e<a&&await s(n*(e+1))}throw i}var ze=3;async function le(t,o,a){let n=a?.retries??ze,s=a?.backoffMs??se,i=a?.sleep??(e=>new Promise(r=>setTimeout(r,e)));for(let e=0;e<=n;e++){try{if(ae(await t(),o))return!0}catch{}e<n&&await i(s*(e+1))}return!1}function ue(t){if(t==null)return!1;let o=t;if(o.name==="AuthMissingError"||o.name==="ReconnectRequiredError")return!0;let a=typeof t=="string"?t:typeof o.message=="string"?o.message:"";return/\[auth-missing:/.test(a)||/\breconnect required\b/i.test(a)}function pe(t){switch(t){case"connected":return"retry";case"none":return"rethrow";case"cancelled":return"dismissed"}}function de(){let t=[];return{add:o=>{t.push(o)},settleAll:o=>{let a=t;t=[];for(let n of a)n(o)},size:()=>t.length}}function me(t,o,a,n){return!n||t.phase!=="connecting"||t.plugin!==o?!1:t.tenantId===a}import{useEffect as K,useState as X}from"react";var Me={ably:"Ably",abstract:"Abstract",abuseipdb:"AbuseIPDB",abyssale:"Abyssale",accrediblecertificates:"Accredible Certificates",activecampaign:"ActiveCampaign",activetrail:"Active Trail",addresszen:"Addresszen",aeroleads:"Aeroleads",affinda:"Affinda",agencyzoom:"AgencyZoom",agentmail:"AgentMail",agentql:"AgentQL",agenty:"Agenty",agiled:"Agiled",agilitycms:"Agility CMS",ahrefs:"Ahrefs",aimlapi:"AI/ML API",airtable:"Airtable",aivoov:"AiVOOV",alchemy:"Alchemy",algolia:"Algolia",allimagesai:"All Images AI",alphavantage:"Alpha Vantage",altoviz:"Altoviz",alttextai:"AltText.ai",amara:"Amara",ambee:"Ambee",ambientweather:"Ambient Weather",amcards:"AMcards",amplitude:"Amplitude",anchorbrowser:"Anchor Browser",anonyflow:"Anonyflow",anthropicadministrator:"Anthropic Administrator",apaleo:"Apaleo",api2pdf:"API2PDF",apibible:"API.Bible",apify:"Apify",apilabz:"API Labz",apininjas:"API Ninjas",apipie:"APIpie AI",apisports:"API-Sports",appointo:"Appointo",aryn:"Aryn",asana:"Asana",ascora:"Ascora",ashby:"Ashby",asindataapi:"ASIN Data API",asticaai:"Astica AI",asyncinterview:"Async Interview",attio:"Attio",autom:"Autom",ayrshare:"Ayrshare",backendless:"Backendless",bannerbear:"Bannerbear",bart:"BART",basecamp:"Basecamp",baselinker:"BaseLinker",basin:"Basin",beaconstac:"Beaconstac",beamer:"Beamer",beeminder:"Beeminder",benchmarkemail:"BenchmarkEmail",bestbuy:"Best Buy",bettercontact:"BetterContact",betterproposals:"Better Proposals",betterstack:"Better Stack",bigdatacloud:"BigDataCloud",bigmailer:"BigMailer",bigml:"BigML",bigpictureio:"BigPicture.io",bitbucket:"Bitbucket",bitwarden:"Bitwarden",blazemeter:"BlazeMeter",blocknative:"Blocknative",bluesky:"Bluesky",boldsign:"Boldsign",boloforms:"Boloforms",boltiot:"Bolt IoT",bonsai:"Bonsai",bookingmood:"Bookingmood",booqable:"Booqable",borneo:"Borneo",botbaba:"Botbaba",botpress:"Botpress",botsonic:"Botsonic",bouncer:"Bouncer",box:"Box",boxhero:"BoxHero",brandfetch:"Brandfetch",breathehr:"Breathe HR",brevo:"Brevo",brex:"Brex",brightdata:"Bright Data",browseai:"Browse AI",browserless:"Browserless",browsertool:"Browser Tool",bubble:"Bubble",bugsnag:"BugSnag",buildkite:"Buildkite",bunnycdn:"Bunnycdn",byteforms:"ByteForms",cal:"Cal",calendly:"Calendly",campaigncleaner:"Campaign Cleaner",campayn:"Campayn",canny:"Canny",canva:"Canva",canvas:"Canvas LMS",capsulecrm:"Capsule CRM",carbone:"Carbone",castingwords:"CastingWords",cdrplatform:"CDR Platform",certifier:"Certifier",chaser:"Chaser",chatbotkit:"ChatBotKit",chatfai:"ChatFAI",chmeetings:"ChMeetings",cincopa:"Cincopa",circleci:"CircleCI",classmarker:"ClassMarker",clickhouse:"Clickhouse",clickmeeting:"ClickMeeting",clientary:"Clientary",clockify:"Clockify",cloudcart:"CloudCart",cloudflare:"Cloudflare",cloudflareapikey:"Cloudflare API Key",cloudinary:"Cloudinary",cody:"Cody",coinbase:"Coinbase",collegefootballdata:"College Football Data",confluence:"Confluence",connecteam:"Connecteam",contentfulgraphql:"Contentful GraphQL",contextsevenmcp:"Context7",convoloai:"ConvoloAi",cosmic:"Cosmic",countdownapi:"Countdown API",crowterminal:"CrowTerminal",currentsapi:"CurrentsApi",cursor:"Cursor",customerio:"Customer.io",customgpt:"CustomGPT",dadataru:"Dadataru",databricks:"Databricks",datadog:"Datadog",datarobot:"DataRobot",deepseek:"DeepSeek",devinmcp:"Devin MCP",diffbot:"Diffbot",digitalocean:"DigitalOcean",discord:"Discord",dockerhub:"Docker Hub",docupost:"Docupost",dodopayments:"Dodo Payments",doppler:"Doppler",dovetail:"Dovetail",dreamstudio:"DreamStudio",dripcel:"Dripcel",dropbox:"Dropbox",dropboxsign:"Dropbox Sign",dynapictures:"Dynapictures",emelia:"Emelia",epicgames:"Epic Games",everhour:"Everhour",exa:"Exa",exist:"Exist",extractaai:"Extracta.ai",facebook:"Facebook",faraday:"Faraday",figma:"Figma",filevine:"Filevine",filloutforms:"FilloutForms",firecrawl:"Firecrawl",fireflies:"Fireflies",flexisign:"Flexisign",flutterwave:"Flutterwave",formbricks:"Formbricks",gemini:"Gemini",giphy:"Giphy",github:"GitHub",gitlab:"GitLab",gladia:"Gladia",gmail:"Gmail",googleaddressvalidation:"Google Address Validation",googleanalytics:"Google Analytics",googlebigquery:"Google BigQuery",googlecalendar:"Google Calendar",googlecloudvision:"Google Cloud Vision",googledocs:"Google Docs",googledrive:"Google Drive",googlemaps:"Google Maps",googlemeet:"Google Meet",googlesheets:"Google Sheets",grafana:"Grafana",griptape:"Griptape",groqcloud:"GroqCloud",habitica:"Habitica",hackernews:"Hacker News",harvest:"Harvest",hashnode:"Hashnode",here:"HERE",heygen:"HeyGen",hookdeck:"Hookdeck",htmltoimage:"HtmlToImage",hubspot:"HubSpot",huggingface:"Hugging Face",imagior:"Imagior",humanitix:"Humanitix",imejisio:"Imejis.io",imgbb:"ImgBB",insightoai:"Insighto.ai",instagram:"Instagram",intercom:"Intercom",jigsawstack:"JigsawStack",jira:"Jira",kaggle:"Kaggle",kibana:"Kibana",leexi:"Leexi",linear:"Linear",linkedin:"LinkedIn",loyverse:"Loyverse",mailboxlayer:"MailboxLayer",mailcheck:"Mailcheck",mailchimp:"Mailchimp",mailtrap:"Mailtrap",marketstack:"Marketstack",merriamwebsterdict:"Merriam-Webster Dictionary",monday:"Monday",neon:"Neon",nextdns:"NextDNS",northflank:"Northflank",notion:"Notion",ocrspace:"OCR.space",ocrwebservice:"OcrWebService",ollama:"Ollama",onedrive:"OneDrive",onepassword:"1Password",openai:"OpenAI",openrouter:"OpenRouter",openweathermap:"OpenWeatherMap",oura:"Oura",outlook:"Outlook",pagerduty:"PagerDuty",parseur:"Parseur",pdfco:"PDF.co",pdfmonkey:"PDFMonkey",perplexityai:"Perplexity AI",phantombuster:"PhantomBuster",pinecone:"Pinecone",plain:"Plain",posthog:"PostHog",postman:"Postman",prisma:"Prisma",pushbullet:"Pushbullet",razorpay:"Razorpay",reddit:"Reddit",reducto:"Reducto",replicate:"Replicate",removebg:"remove.bg",replyio:"Reply.io",resend:"Resend",retailed:"Retailed",rootly:"Rootly",runpod:"RunPod",salesforce:"Salesforce",sapsuccessfactors:"SAP SuccessFactors",scaleai:"Scale AI",scrapegraphai:"ScrapeGraphAI",securitytrails:"SecurityTrails",semanticscholar:"Semantic Scholar",sendgrid:"SendGrid",sentry:"Sentry",serpapi:"Serpapi",sharepoint:"SharePoint",slack:"Slack",snapchat:"Snapchat",slackbot:"Slackbot",sourcegraph:"Sourcegraph",spoki:"Spoki",spotify:"Spotify",strava:"Strava",streamtime:"Streamtime",stripe:"Stripe",studiobyai21labs:"StudioByAI21Labs",supabase:"Supabase",supadata:"Supadata",synthflowai:"Synthflow AI",tally:"Tally",tavily:"Tavily",tavilymcp:"Tavily MCP",teams:"Teams",telegram:"Telegram",textrazor:"TextRazor",ticktick:"TickTick",timecamp:"TimeCamp",timelink:"Timelink",tinyurl:"TinyURL",tisane:"Tisane",todoist:"Todoist",toggl:"Toggl",tokenmetrics:"Token Metrics",tpscheck:"TPSCheck",trello:"Trello",tripadvisor:"Tripadvisor",twentyonerisk:"TwentyOneRisk",twilio:"Twilio",twitter:"Twitter",twitterapiio:"Twitter API IO",twochat:"TwoChat",typeform:"Typeform",unione:"Unione",uniswapapi:"Uniswap",uploadcare:"Uploadcare",vapi:"Vapi",vercel:"Vercel",veriphone:"Veriphone",vestaboard:"Vestaboard",waboxapp:"Waboxapp",wakatime:"WakaTime",webflow:"Webflow",webscrapingai:"WebScraping.AI",webvizio:"Webvizio",whatsapp:"WhatsApp",whoisfreaks:"Whoisfreaks",whautomate:"Whautomate",winstonai:"Winston AI",witai:"WitAi",wix:"Wix",wiza:"Wiza",workday:"Workday",workiom:"Workiom",worldnewsapi:"World News API",xero:"Xero",writer:"Writer",xquik:"XQuik",youcom:"You.com",youtube:"YouTube",zendesk:"Zendesk",zenserp:"Zenserp",zohobigin:"Zoho Bigin",zohoinventory:"Zoho Inventory",zohomail:"Zoho Mail",zoom:"Zoom",zoominfo:"ZoomInfo"};function J(t){let o=Me[t];return o||t.charAt(0).toUpperCase()+t.slice(1)}var ge="data:image/png;base64,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";import{useEffect as Fe,useState as qe}from"react";import{jsx as Q}from"react/jsx-runtime";var Ne={github:"github.com",gitlab:"gitlab.com",slack:"slack.com",notion:"notion.so",airtable:"airtable.com",linear:"linear.app",jira:"atlassian.com",confluence:"atlassian.com",google:"google.com",gmail:"gmail.com",gdrive:"drive.google.com",gcalendar:"calendar.google.com",hubspot:"hubspot.com",salesforce:"salesforce.com",stripe:"stripe.com",discord:"discord.com",intercom:"intercom.com",zendesk:"zendesk.com",figma:"figma.com",dropbox:"dropbox.com",asana:"asana.com",trello:"trello.com",clickup:"clickup.com",monday:"monday.com",twilio:"twilio.com",sendgrid:"sendgrid.com",shopify:"shopify.com",agentql:"agentql.com",ahrefs:"ahrefs.com",amplitude:"amplitude.com",bitwarden:"bitwarden.com",bluesky:"bsky.app",box:"box.com",cal:"cal.com",calendly:"calendly.com",cloudflare:"cloudflare.com",cursor:"cursor.com",dodopayments:"dodopayments.com",exa:"exa.ai",firecrawl:"firecrawl.dev",fireflies:"fireflies.ai",googlecalendar:"calendar.google.com",googledocs:"docs.google.com",googledrive:"drive.google.com",googlemeet:"meet.google.com",googlesheets:"docs.google.com",grafana:"grafana.com",hackernews:"news.ycombinator.com",instagram:"instagram.com",onedrive:"onedrive.live.com",openweathermap:"openweathermap.org",oura:"ouraring.com",outlook:"outlook.live.com",pagerduty:"pagerduty.com",posthog:"posthog.com",razorpay:"razorpay.com",reddit:"reddit.com",resend:"resend.com",sentry:"sentry.io",sharepoint:"sharepoint.com",spotify:"spotify.com",strava:"strava.com",supabase:"supabase.com",tally:"tally.so",tavily:"tavily.com",teams:"teams.microsoft.com",telegram:"telegram.org",todoist:"todoist.com",twitter:"x.com",twitterapiio:"twitter.com",typeform:"typeform.com",vapi:"vapi.ai",vercel:"vercel.com",youtube:"youtube.com",zohomail:"zoho.com",zoom:"zoom.us"},Ge={"outlook.live.com":"https://svgl.app/library/microsoft-outlook.svg","onedrive.live.com":"https://svgl.app/library/microsoft-onedrive.svg","sharepoint.com":"https://svgl.app/library/microsoft-sharepoint.svg","teams.microsoft.com":"https://svgl.app/library/microsoft-teams.svg","gmail.com":"https://svgl.app/library/gmail.svg","drive.google.com":"https://svgl.app/library/drive.svg","calendar.google.com":"https://svgl.app/library/google-calendar.svg","meet.google.com":"https://svgl.app/library/google-meet.svg","docs.google.com":"https://svgl.app/library/google-sheets.svg"},fe={googledocs:"https://www.gstatic.com/images/branding/product/2x/docs_2020q4_96dp.png"};function W(t){let o=t.toLowerCase().replace(/_/g,"");return Ne[o]??`${o}.com`}function be(t){let o=t.replace(/^(https?:\/\/)|(www\.)/g,"").replace(/\/$/,"");return Ge[o]??`https://twenty-icons.com/${o}`}function We(t){let o=t.toLowerCase().replace(/_/g,"");return fe[o]?fe[o]:be(W(t))}function H({domain:t,pluginId:o,label:a,size:n=24,radius:s}){let i=o?We(o):be(t),[e,r]=qe(null);Fe(()=>{let p=!0;r(null);let m=new Image;return m.referrerPolicy="no-referrer",m.onload=()=>{p&&m.naturalWidth>0&&r(m.src)},m.src=i,()=>{p=!1}},[i]);let c={width:n,height:n,borderRadius:s??Math.round(n*.28),flexShrink:0,display:"flex",alignItems:"center",justifyContent:"center",overflow:"hidden",background:e?"#fff":"#f1f1f1",border:"1px solid #1c1c1c12"};return Q("span",{style:c,children:e?Q("img",{src:e,alt:"",width:Math.round(n*.62),height:Math.round(n*.62),referrerPolicy:"no-referrer",style:{objectFit:"contain"}}):Q("span",{style:{fontSize:Math.round(n*.4),fontWeight:600,color:"#7a7a7a"},children:(a[0]??"?").toUpperCase()})})}import{jsx as d,jsxs as h}from"react/jsx-runtime";function Ue(t){return typeof t=="string"?t:t?.theme}function je(t){let[o,a]=X(t==="dark");return K(()=>{if(t==="dark"||t==="light"){a(t==="dark");return}let n=window.matchMedia("(prefers-color-scheme: dark)");a(n.matches);let s=i=>a(i.matches);return n.addEventListener("change",s),()=>n.removeEventListener("change",s)},[t]),o}var Ye="#4a38f5",E="#1c1c1c",Z="#1a7f4b",Ve="ui-monospace, SFMono-Regular, Menlo, monospace",Je='-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, system-ui, sans-serif',Qe=`
|
|
2
|
+
import{useCallback as ve,useEffect as lt,useReducer as xe,useRef as Ae}from"react";var M=class extends Error{status;code;extra;constructor(o,r,n,s={}){super(n),this.name="CorsairClientError",this.status=o,this.code=r,this.extra=s}};function Le(t){return t.endsWith("/")?t.slice(0,-1):t}async function ne(t){let o={};try{o=await t.json()}catch{}let r=typeof o.error=="string"?o.error:"request_failed",n=typeof o.message=="string"?o.message:`Request failed (${t.status})`,{error:s,message:i,...e}=o;return new M(t.status,r,n,e)}function G(t){let o=Le(t.baseURL),r=t.fetch??((...e)=>globalThis.fetch(...e));async function n(e,a){let c=a&&Object.keys(a).length?`?${new URLSearchParams(a).toString()}`:"",p=await r(`${o}${e}${c}`,{method:"GET"});if(!p.ok)throw await ne(p);return await p.json()}async function s(e,a){let c=await r(`${o}${e}`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(a)});if(!c.ok)throw await ne(c);return await c.json()}let i=encodeURIComponent;return{ok:()=>n("/ok"),tenants:{list:()=>n("/tenants"),create:e=>s("/tenants",e),get:e=>n(`/tenants/${i(e)}`)},plugins:{list:()=>n("/plugins"),get:e=>n(`/plugins/${i(e)}`)},connectionStatus:{get:e=>{let a={};return e?.tenantId&&(a.tenantId=e.tenantId),n("/connection-status",a)}},permissions:{get:e=>"id"in e?n(`/permissions/${i(e.id)}`):s("/permissions/lookup-by-token",{token:e.token})},connect:{createLink:e=>s("/connect/links",e),resolve:e=>n("/connect/resolve",{state:e}),oauthCallback:e=>s("/connect/oauth/callback",e)},connectRequest:{get:e=>{let a={};return e?.tenantId&&(a.tenantId=e.tenantId),n("/connect/request",a)},clear:e=>s("/connect/request/clear",e??{})},call(e,a,c,p){return s(`/${i(c)}/${i(e)}/call/${i(a)}`,{args:p}).then(m=>m.data)}}}import{createContext as Xe,useCallback as v,useContext as Ze,useEffect as U,useMemo as Ke,useReducer as _e,useRef as S,useState as Ce}from"react";var V={phase:"idle",plugin:null,connectUrl:null,tenantId:null};function ae(t,o){switch(o.type){case"OPEN":return{phase:"connecting",plugin:o.plugin,connectUrl:o.connectUrl,tenantId:o.tenantId};case"SUCCESS":return{...t,phase:"success"};case"CLOSE":return V}}function re(t,o){return t?.[o]==="connected"}function ie(t){return t.capturedAttempt===t.currentAttempt&&re(t.status,t.plugin)}var De=4,se=250;async function ce(t,o){let r=o?.retries??De,n=o?.backoffMs??se,s=o?.sleep??(e=>new Promise(a=>setTimeout(a,e))),i;for(let e=0;e<=r;e++)try{return await t()}catch(a){i=a,e<r&&await s(n*(e+1))}throw i}var ze=3;async function le(t,o,r){let n=r?.retries??ze,s=r?.backoffMs??se,i=r?.sleep??(e=>new Promise(a=>setTimeout(a,e)));for(let e=0;e<=n;e++){try{if(re(await t(),o))return!0}catch{}e<n&&await i(s*(e+1))}return!1}function ue(t){if(t==null)return!1;let o=t;if(o.name==="AuthMissingError"||o.name==="ReconnectRequiredError")return!0;let r=typeof t=="string"?t:typeof o.message=="string"?o.message:"";return/\[auth-missing:/.test(r)||/\breconnect required\b/i.test(r)}function pe(t){switch(t){case"connected":return"retry";case"none":return"rethrow";case"cancelled":return"dismissed"}}function de(){let t=[];return{add:o=>{t.push(o)},settleAll:o=>{let r=t;t=[];for(let n of r)n(o)},size:()=>t.length}}function me(t,o,r,n){return!n||t.phase!=="connecting"||t.plugin!==o?!1:t.tenantId===r}import{useEffect as K,useState as X}from"react";var Me={ably:"Ably",abstract:"Abstract",abuseipdb:"AbuseIPDB",abyssale:"Abyssale",accrediblecertificates:"Accredible Certificates",activecampaign:"ActiveCampaign",activetrail:"Active Trail",addresszen:"Addresszen",aeroleads:"Aeroleads",affinda:"Affinda",agencyzoom:"AgencyZoom",agentmail:"AgentMail",agentql:"AgentQL",agenty:"Agenty",agiled:"Agiled",agilitycms:"Agility CMS",ahrefs:"Ahrefs",aimlapi:"AI/ML API",airtable:"Airtable",aivoov:"AiVOOV",akta:"Akta",alchemy:"Alchemy",algolia:"Algolia",alibaba:"Alibaba Cloud Model Studio",allimagesai:"All Images AI",alphavantage:"Alpha Vantage",altoviz:"Altoviz",alttextai:"AltText.ai",amara:"Amara",ambee:"Ambee",ambientweather:"Ambient Weather",amcards:"AMcards",amplitude:"Amplitude",anchorbrowser:"Anchor Browser",anonyflow:"Anonyflow",anthropicadministrator:"Anthropic Administrator",apaleo:"Apaleo",api2pdf:"API2PDF",apibible:"API.Bible",apify:"Apify",apilabz:"API Labz",apininjas:"API Ninjas",apipie:"APIpie AI",apisports:"API-Sports",apollo:"Apollo",appointo:"Appointo",aryn:"Aryn",asana:"Asana",ascora:"Ascora",ashby:"Ashby",asindataapi:"ASIN Data API",asticaai:"Astica AI",asyncinterview:"Async Interview",attio:"Attio",autom:"Autom",ayrshare:"Ayrshare",backendless:"Backendless",bannerbear:"Bannerbear",bart:"BART",basecamp:"Basecamp",baselinker:"BaseLinker",basin:"Basin",beaconstac:"Beaconstac",beamer:"Beamer",beeminder:"Beeminder",benchmarkemail:"BenchmarkEmail",benzinga:"Benzinga",bestbuy:"Best Buy",bettercontact:"BetterContact",betterproposals:"Better Proposals",betterstack:"Better Stack",bigdatacloud:"BigDataCloud",bigmailer:"BigMailer",bigml:"BigML",bigpictureio:"BigPicture.io",bitbucket:"Bitbucket",bitwarden:"Bitwarden",blackbaud:"Blackbaud",blazemeter:"BlazeMeter",blocknative:"Blocknative",bluesky:"Bluesky",boldsign:"Boldsign",boloforms:"Boloforms",boltiot:"Bolt IoT",bonsai:"Bonsai",bookingmood:"Bookingmood",booqable:"Booqable",borneo:"Borneo",botbaba:"Botbaba",botpress:"Botpress",botsonic:"Botsonic",bouncer:"Bouncer",box:"Box",boxhero:"BoxHero",brandfetch:"Brandfetch",breathehr:"Breathe HR",brevo:"Brevo",brex:"Brex",brightdata:"Bright Data",browseai:"Browse AI",builtwith:"BuiltWith",browserless:"Browserless",browsertool:"Browser Tool",bubble:"Bubble",bugsnag:"BugSnag",buildkite:"Buildkite",bunnycdn:"Bunnycdn",bytedance:"ByteDance",byteforms:"ByteForms",cal:"Cal",callpage:"CallPage",calendly:"Calendly",callingly:"Callingly",campaigncleaner:"Campaign Cleaner",campayn:"Campayn",canny:"Canny",canva:"Canva",canvas:"Canvas LMS",capsulecrm:"Capsule CRM",carbone:"Carbone",castingwords:"CastingWords",cdrplatform:"CDR Platform",celigo:"Celigo",certifier:"Certifier",chaser:"Chaser",chatbotkit:"ChatBotKit",chatfai:"ChatFAI",chatwork:"Chatwork",chmeetings:"ChMeetings",cincopa:"Cincopa",circleci:"CircleCI",claidai:"Claid.ai",classmarker:"ClassMarker",clay:"Clay",clickhouse:"Clickhouse",clickmeeting:"ClickMeeting",clickup:"ClickUp",clicksend:"ClickSend",clientary:"Clientary",clockify:"Clockify",close:"Close",cloro:"cloro",cloudcart:"CloudCart",cloudflare:"Cloudflare",cloudflareapikey:"Cloudflare API Key",cloudinary:"Cloudinary",coassemble:"Coassemble",codeinterpreter:"CodeInterpreter",coda:"Coda",cody:"Cody",coinbase:"Coinbase",coinmarketcal:"Coinmarketcal",collegefootballdata:"College Football Data",composio:"Composio",confluence:"Confluence",connecteam:"Connecteam",contactout:"ContactOut",contentfulgraphql:"Contentful GraphQL",contextdev:"Context.dev",contextsevenmcp:"Context7",convex:"Convex",convoloai:"ConvoloAi",cosmic:"Cosmic",countdownapi:"Countdown API",crowterminal:"CrowTerminal",currentsapi:"CurrentsApi",cursor:"Cursor",customerio:"Customer.io",customgpt:"CustomGPT",cuttly:"Cutt.ly",dadataru:"Dadataru",daffy:"Daffy",databricks:"Databricks",datadog:"Datadog",dataforseo:"DataForSEO",datarobot:"DataRobot",deepseek:"DeepSeek",devinmcp:"Devin MCP",diffbot:"Diffbot",digitalocean:"DigitalOcean",discord:"Discord",dockerhub:"Docker Hub",docmosis:"Docmosis",docupost:"Docupost",docsumo:"Docsumo",docusign:"DocuSign",dodopayments:"Dodo Payments",doppler:"Doppler",dovetail:"Dovetail",dreamstudio:"DreamStudio",dripcel:"Dripcel",dropbox:"Dropbox",dropboxsign:"Dropbox Sign",dynapictures:"Dynapictures",emelia:"Emelia",epicgames:"Epic Games",everhour:"Everhour",exa:"Exa",exist:"Exist",extractaai:"Extracta.ai",facebook:"Facebook",faraday:"Faraday",figma:"Figma",filevine:"Filevine",filloutforms:"FilloutForms",firecrawl:"Firecrawl",fireflies:"Fireflies",fixer:"Fixer",flexisign:"Flexisign",flutterwave:"Flutterwave",formbricks:"Formbricks",fundable:"Fundable",gemini:"Gemini",giphy:"Giphy",github:"GitHub",gitlab:"GitLab",gladia:"Gladia",gmail:"Gmail",googleaddressvalidation:"Google Address Validation",googleanalytics:"Google Analytics",googlebigquery:"Google BigQuery",googlecalendar:"Google Calendar",googlecloudvision:"Google Cloud Vision",googledocs:"Google Docs",googledrive:"Google Drive",googlemaps:"Google Maps",googlemeet:"Google Meet",googlesheets:"Google Sheets",grafana:"Grafana",griptape:"Griptape",groqcloud:"GroqCloud",habitica:"Habitica",hackernews:"Hacker News",harvest:"Harvest",hashnode:"Hashnode",here:"HERE",heygen:"HeyGen",hookdeck:"Hookdeck",htmltoimage:"HtmlToImage",hubspot:"HubSpot",huggingface:"Hugging Face",humanitix:"Humanitix",hunterio:"Hunter.io",imagior:"Imagior",imejisio:"Imejis.io",imgbb:"ImgBB",insightoai:"Insighto.ai",instagram:"Instagram",intercom:"Intercom",jigsawstack:"JigsawStack",jira:"Jira",kaggle:"Kaggle",keenable:"Keenable",kibana:"Kibana",kling:"Kling",leexi:"Leexi",linear:"Linear",linkedin:"LinkedIn",litescrape:"LiteScrape",loyverse:"Loyverse",magichour:"Magic Hour",mailboxlayer:"MailboxLayer",mailcheck:"Mailcheck",mailchimp:"Mailchimp",mailtrap:"Mailtrap",marketstack:"Marketstack",merriamwebsterdict:"Merriam-Webster Dictionary",minimax:"MiniMax",monday:"Monday",mrscraper:"MrScraper",neon:"Neon",nextdns:"NextDNS",northflank:"Northflank",notion:"Notion",ocrspace:"OCR.space",ocrwebservice:"OcrWebService",octen:"Octen",ollama:"Ollama",onedrive:"OneDrive",onepassword:"1Password",openai:"OpenAI",openrouter:"OpenRouter",openweathermap:"OpenWeatherMap",orbit:"Orbit",oura:"Oura",outlook:"Outlook",pagerduty:"PagerDuty",parseur:"Parseur",pdfco:"PDF.co",pdfmonkey:"PDFMonkey",pdl:"People Data Labs",perplexityai:"Perplexity AI",phantombuster:"PhantomBuster",pinecone:"Pinecone",plain:"Plain",ploid:"Ploid",posthog:"PostHog",postman:"Postman",prisma:"Prisma",pushbullet:"Pushbullet",razorpay:"Razorpay",reddit:"Reddit",reducto:"Reducto",remoet:"Remoet",removebg:"remove.bg",replicate:"Replicate",replyio:"Reply.io",resend:"Resend",retailed:"Retailed",revai:"RevAI",rootly:"Rootly",runpod:"RunPod",salesforce:"Salesforce",saperly:"Saperly",sapsuccessfactors:"SAP SuccessFactors",scaleai:"Scale AI",scrapegraphai:"ScrapeGraphAI",search1api:"Search1API",securitytrails:"SecurityTrails",semanticscholar:"Semantic Scholar",sendgrid:"SendGrid",sentry:"Sentry",serpapi:"Serpapi",sharepoint:"SharePoint",slack:"Slack",slackbot:"Slackbot",snapchat:"Snapchat",sourcegraph:"Sourcegraph",spoki:"Spoki",spotify:"Spotify",starton:"Starton",strava:"Strava",streamtime:"Streamtime",stripe:"Stripe",studiobyai21labs:"StudioByAI21Labs",supabase:"Supabase",supadata:"Supadata",suzanne:"Suzanne",surf:"Surf",synthflowai:"Synthflow AI",tally:"Tally",tavily:"Tavily",tavilymcp:"Tavily MCP",teams:"Teams",telegram:"Telegram",textrazor:"TextRazor",ticktick:"TickTick",timecamp:"TimeCamp",timelink:"Timelink",tinypng:"TinyPNG",tinyfish:"TinyFish",tinyurl:"TinyURL",tisane:"Tisane",todoist:"Todoist",toggl:"Toggl",tokenmetrics:"Token Metrics",tpscheck:"TPSCheck",trello:"Trello",tripadvisor:"Tripadvisor",turso:"Turso",twentyonerisk:"TwentyOneRisk",twilio:"Twilio",twitter:"Twitter",twitterapiio:"Twitter API IO",twochat:"TwoChat",typeform:"Typeform",unione:"Unione",uniswapapi:"Uniswap",updownio:"Updown.io",uploadcare:"Uploadcare",vapi:"Vapi",vaquill:"Vaquill",vercel:"Vercel",veriphone:"Veriphone",vestaboard:"Vestaboard",waboxapp:"Waboxapp",wakatime:"WakaTime",webflow:"Webflow",webscrapingai:"WebScraping.AI",webvizio:"Webvizio",whatsapp:"WhatsApp",whautomate:"Whautomate",whoisfreaks:"Whoisfreaks",winstonai:"Winston AI",witai:"WitAi",wix:"Wix",wiza:"Wiza",workday:"Workday",workiom:"Workiom",worldnewsapi:"World News API",writer:"Writer",xero:"Xero",xquik:"XQuik",youcom:"You.com",youtube:"YouTube",zendesk:"Zendesk",zenserp:"Zenserp",zohobigin:"Zoho Bigin",zohoinventory:"Zoho Inventory",zohomail:"Zoho Mail",zoom:"Zoom",zoominfo:"ZoomInfo"};function J(t){let o=Me[t];return o||t.charAt(0).toUpperCase()+t.slice(1)}var ge="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAYKADAAQAAAABAAAAYAAAAACpM19OAAAj+klEQVR4Ae18CXAc15ne/2Z67hlcg/sGCRAEQYIHeFOkDsqURYk6TB221uu1rV2Xa7Oxy8lGiTeuTbayu7WbbJxVEq03dhRpXZbl6LRo6rR4SeIpUSR4ACDu+z4Gx5w9053vfz0DgNJKkYgBJavmoWa6Md39+vX33//7XxOlWgqBFAIpBFIIpBBIIZBCIIVACoEUAikEUgikEEghkEIghUAKgRQC1wUBcV3uksybbNvmsJnzS2Imc7kwaSW6yZIvhCmLtJhNE0I3ka7rJKbNmjaqC9GnR6Od9rDePXPmxfFkDiNZff0uEEBYd95doyv2m0iYbiRFrNfJVKybTA5hMgEH4xH0OCLzD4RfQApdi2lC14eFrjXpsdhbFFPfiI61nKXLlyPJAnEx/cyPdzG9LMG1jhv2lUYtjv26WdkPsOtJUex8G13TSIvGiGL4AGCJvxBkxoeJID/8uxY/ZjKTUMxkwpZwjoipOmnaeYqqT1sCs08HT7/atwTD/8Rdfu4IYNm5bwNZXN/VFOUrwmLxskKJqSpRNAoBMFGmx0WFOVlUmOel3OxMysxII5fTQVa7DadqQg1HKRQKk296Vh8ZGxcDQ2PUPzJO41OzwF0jEJLMioVpQVBPIyIWfdzqm/wfgbOvD35i1JJ44ueGAFAzq3Sb899qZuUBYVbsmhYlLaKSGaCXAux1qyr12pXLRXFJAaWneyAYCtjZEAJmeCibuDJiRufH4sM6GD1KszOz1Ns3BK3TQmcb2/Se4THBZ5stFiKWjGikx6SG/kI98vwTuBC9Xb/22ROgeofHWlj8p5rV8n1SLOkaOF2LRMjjctCm1Sv0G7aup+XLSoTd5WTzCqaNQaXPY5R4gPlf5sGTv/G5JoANoE3YBmYDdKW5jd58611quNJJMRBCsYIQaCIaedbqm/qe/91XhuZ7Wdq9xPiX9i4f0buyc9+NZPP8mKy2DTCWFGPgHXa6eetaffeuLZRXmCvgyegx6HyoDzlW/mJgDS6f7xj/M33mngf8r2v4nyWD2xzRIB0WiwL1E6NLl1r0539ziFp7B4UJRDBBNZEavmwKzj4UefvAhfnel25vbsBLd4t/tmeh3PTAI2Sz/Ucym+1RAK/gtJ31q/W7bt8lCosLSAVAbHCNtmCYC3Y/1LNU7PwrYDdwT8A/93+cfNIGWKCCQoEAHTx4hA4cOUUxXG+2WEGcSJ8pGLxbffuF9z90jyT/8HGPk+RbxbuDyrEUF/9P3er4BowmxcIRKs330tfv3UNr19VSDMjF2MPhNgco78tf5Bdja2KwzFArZrii8HhY12vcH/b5mPzA4AqoHY2Px6IgaJwq3Bd2ecPHLTjvzKn36WdPH6RZ2B3FamVvqcvs9+0OvfNyh7zpEn0teKwlusOCbl2b9uaH09Ke0u2OW6DMSQNoN29aTQ/dv1f3ZKQJFQ9vwGIoDmll49czdAyWwqCCSFO+KervHaSOnn7qGxylsckpCgTDIIAG8E0QLgtlprnhLeVQRXmRXlFeTBmZ6YJlCnZkIT3lHfj8potX6NHHn6HpMIw/iEDh4NGov3svnTwZjA8j6ZvrR4BtdxYpLs+vyWbfyLreCi792r5b6LY9OyXXswKHnsB42HeJc2ocpgSXBv0BvfFyizj9/iVqbOuRoLN7CqVOVtgOu80u9Tu7m2FIVjAYJD0cRpeCMjPTae3K5XTjjnqqrF6GOwhi2yIBwBff0WazUsO5S/qj//sZwVGatAn+2R9Fjz77V0lHPt7hdSGAs/62gkhm1gEGn/W9Bwbvu79/j75xY52IsI/PCnvOiPKQDAIgxSAB9U346Pjx9+jY6QbqGRxBEKaRC4CWlRRTSXkZ5RcUkCcjHd3bZcDFtIxFVQr6/TQxOkbdXV3U2tpOEyOjAFWhbetqaP89e/TcgjwRgdSBPpIQBhEs9MrLh+kXLx2SqgjOgc8S8NUvlSpaegLU35quZOQc0G32XbFImDLAqT/4wwf06toVxsNLuJkfjUg2wWkKPBUQS3/rrTN08M3jYmgYqRwQrrysmNasraPlK1aQOyMDasksAyxkHObkJtGHtAOwEbwNBfx6R3MznXznhOjv6YNEZNDDD+2jtfVrSI0gyEuMA+fCf6K/e/QJutTRRwqICkr+ffTwMz9I9JvMLaKQJW1my6pNT5DNcQernXS7lf71d76qr1xdTZFIhB91wc3j+/jVCqDbWjroJ48/I954610xC51ctbKS9t65l3bs3q0XlJYJ1tExgM4GW4LPUiQVy3yXLAmsjvi4yayI/OJisWbtGtBR0a+0doj3zjVSMaLqopJCCJVh+LkXi9WmZ3mc4tTZS6TD7mCYZW5v7pOR/s6k24IlJYCya/+fkdP1PQ6u7CaT/r1v30+r19ZQOBQG9vPwQ9UAKh2ZBhNyOkSvvXqU/tdTB2hweIygJmjvXXfoN9x6q8jMzpFejqZxMDYPtOyLr4VXhAgZYMM7UhRgh5twk+eCGCCEMClUsaJKZENlNTe30MXGVlpbUymdAJmqANrcv9ebSU0I2EYnpjh14YEndSbW09y04K5J2V0yAth33rNbc7p/imc3s6H89gO30/btGykUZvCZqeaxwTmCwVORw3ni5y/QS2+eQIRKtHnrJrrzvq9QQUmpYG5nANESl0pvh6NYVhmBmWkaHxykgZ5uGujt1UexP+ubhF7TyYFckYX9eyYz/rivgtISckIiLzZcoknftNhcv1rm7/gGTC8rJGx2eka/1NSOII2v1Ya0zsuv8fFkNo5/kt9uuCMzanM8Bpa0xuCJ3LFrM91841YB8I2nA/aSKeW34c8HZmb0x376K9HQ3EFOj5v23L6Haus3wFtFgk26p3OXSkNrhqj4xsaotbGJ2q600AiMbRAEjLIqiUfELAB2gJeT46U1dWto9YZ6stgdMNBRisBLWr9lC65tpYbGFupo76GKynIjBsHgolBtFaWFUqqYcEIoK5MPFHKDS9KpxfkjuCTV0VCIVpQV0n1fuU1XYzHDyjLjM/pIEjAzM+f7Af6jP3lKXG7tpszsLLpr/71UvGwZjLAqz5obIwBl4+wbGaF3T5ygxkuNNBuAWmbVg4+A+lEE/HdDuOR9IrABPQPD1NPbDxezgfbdezdlFxXLwA36iDZv30LNl5voEoiwfEUFhJXBloKjp6V5hA0SFjYCuGyMgycgpBjOjWmRO0kngOWGe+o1q/2POdByAKxv3L8XNtguOFJd2Bh+1vnhYIge+9mvxOWWLvLmZdP+rz5I2YWF8EzYE4+rKeCBZBonhfT3jh0TJ46fpJlZP4IlCyk2GzqCJo1GdBGJtkDTN8FAIJkm2LXJhr5ahezqGrI4Rd/QMD3z1NP0e9/+JnmysqUk5IMYaVmZ1Ns/jPmahG0xVJXBIqAjhoEhJMi68DEWvZ9sAgjdZv0LWC27FgzQl2/dTlUIekLwYrjJJ8BT8YPxf6y7f/7Ll6ihqYMyYPS+8uAD5JXgxyNilhkwpIJAa3p8lN44cFC0tnWQCf8rCJoM4KOzmAT4pa6G/imvY+RcX98Hotb6eoviKt0prI7/oljtG8Z90/T24SN05wP3Q10h+IJbnJWVRX5/kLN3cmSGgRdiZnqWQlB/bAMw6gl8JZX7+WZJJYB9+76boxb77RqCqwJvhn77nl0UUaF64s14PIMANkjHy68c0Y+ebpCp5n3776EccKPKgZls8mxhwcMPdHXSb557gcaRfpDAMykhPXCnXhXh8A/Vd15s4Ev6jAuv/j57FrJ39rBj2y13Rd35x002W1l7ewfNTk6SMy1dSiG7vW64nviHpQy8AdWI/rt6B6RUKKySSE+6B8QDZZ2WrCaiducPwJUmHVHo3lu2UVpmmjBcu6tvwfmcK01t9Pwrx2DbzHTrbbfqpZVV0MsJ8A0iMed3XmmiZ5/6lZiYnonn7QE+AEHK+K+jh351VwL8q+/w4f+CJw/3Q+c8x4FbAMZ6ZmqKhyqlEihTSXE+RBJT+vFLI3AY3jvfCPcMPApJNavq4Q/3uvhfkkYAy7a71sHX28MpgCIEN9u2rEOke7Xel8MFeGF4Rk89/xpyNSFaW7ea6jZtmvN0+BwGgcHva2+jl559gQKwB2YQSioxZv5w4IeRI8/9e/zwz9wAv35EQ3rbx4c4MkYwhpgDLqkaIVNMxThWwWwhY4qbc5q64Xyj3tYzIMw4DwasKzI7/fkmANkdXwdqVh1cvGvLWt2d7pF+Nz9wwnFnYPnBjxw7rbd29sPjyaRdX9otgys+TzacxMGUb2SIDj7/awpCgZg55cwXg3tFKPDfI4ef/Zv42R+58Wze7cXBOfWHfRgOy50auD0jzUO5OZlkAQG00Cxt31Sn5xXmIdaIIdtqlvmjFw4eQo0LiA5VhPmBx+jsm1MfebNFHEiODai9yQ2U7uVAyY2gZ8vGNYInVLiB2QyxBoDs9YyPjtOrR05ByQrasesGcmdmxT0eeTazJxyaEL360m9oEnO57HbKDuBmUiR0Wp3u/KHs+GO+rNv2rQy6PYeUL33tvCmsPq6ZYgFY7u/oimWLDtf4xu03gghOqfLs6S4q2LZRpqjZFvinpun//Pw5GkJ6W0HMIMKhc+rw2D9+zO0WdSgpBFCyMrboirmCje/q6ko9Nz93jgDMuFKusWHuOnLsDI2P+6ikopRq1q4D+ND70sPjM3Wpeo4fPkTd3b3GxAgoKPvQtDBFAv+Kzp4NcJcf21AdAX2eA12yVzNb9vL1PNGjwMDuvWU77dy5GVE1Jl4gASwi+Agr5gN6Orrpqf97kDoxvyCTcNGoD4m479Dlo7Mfe79FHEwKAUwW65dRzQAOVWkDcj3IxfAU1ELxl5w97ZvS33rvgjS8G7dulj48gq254XMOZ6Svh86cfk+mje0ZXlL901BRyOFEwgfUt146MXfyx+xETr3cZL35vv+mWSyPMPV4vrmqIIf2372HKmuq5HQnE5tVI+epxoZH6OTpc/qxU+dhb1QhwddiM+bA1NfDxw+89zG3WvShZBDArJlMN7K343bYqGp5qWBj9sHG036nLzSL0dFJyi3M05dVVxvBmdRR7O4b6urU2+9wvogcGZlkR7AUnBwFM5s1PRL6VGog0nv+zy1l9fkodfkGy9Aw/P/XDx+nS02tlA4bwFI5gd96+waps3+I/MGwzLBKtRMNd+sB/8Phtw8c+uBzJPv/RRPAvn1vcdSsrGROKirOo+xsL5wNo4JBDpY5EDts/N49D1caD169slrYHE5D/cRtBHP/UG8PtbS0SfcwrWIlBUcGQBW4irFoi9oz+Ym4fw6gtraw2tb2sPWm+1o1m/0Rf1T3nGvppnNN7XIM8jwmPuwS1wcpTif0lBoRodmnFd/EnwfPvtkz19cS7iyaAFGTrQbOsgez61RWlIdcukWEoVZY/zDw3Nj4Tk1O6a3d/RBvm5xMYbUiTzJOwTmCLjdckERxgPNt3lzytVxil4jTDMep62gofuqn2UQjR5/7S+v2O36t210Pm8yW29hW4WZ2wzvACDUtCFHshJr6rQgFf6FC5cwrxU9zq2s7d9EEgCWrRe2m5KqS4gJDsfJYMMUIbpd2gAOebvjUvhk/5ebmUFZeLp6XDSWyNhrOASfy9GFHWzsYXpC7qAyun4o6oZARCGmxRZWHRE68DErSD6i83G4rqiuLKUohHFA77hUwq+HB8BBEAxJzbRAu7qpFEwCRygoUT0kuz0Pal8tCuCGFK8Hn/zjw6erpBydHKT8/F5Pfdukl4QSDQCDg2MAA+aCTzRYbOXKLSJ2dMuqCTJhqjGrdstPFfnV1hcJdXVfQDX9k+7C1Shy5PttFR8KAuZhDdTay6R4XWDqheOYfgAusBobG5QFvTo7Uu3w0cSqrqMF+zhREyer2kIJPLBzXOOwBCdPkfG9frL3FEoD9bVnBbLcq5EBm8SoCxFmc63DgcbCYkCc9/epzJCF0GkPFAjerJ0OWg3B+xmi6bnFYP2tGjY8l+ZvFEaC2FsWUwsOgK/BirEgRS66WiiU+WKgf5mw/EmCs6x0OhzyHxSHx4ePT09NSISlOl3EhzpUNsyNqIOgw/vnifS+OAH4/fERhZiRlZjEBmlQ2ACu+5TlYWf8DA8vqRnr9TKm4DuIEXgiJOXY5jflXZIatmGhB4+ylbjYXyH++gF+LIwADwuy/kOMTqC8Ai11MnjLkQzCpBv7x40wjngjhOVimn6QnTpEBEYjFYgFvZfWC7r5Qu4sjgNfLilq6zZyIY2PLgF3VACZnN93w/+Fzw90MSLeTz5ECwl8gEOeJcCqXhDBRyex0I39mVDJAvHbhrA90zD387rfFEQCzTQBrlksII0gbh1HJxhPaDNVCtLgeHylguN4aTU5MSP+UwWbsWRy4XNDOFWj4UYPvLwmAOk9rWgaiU+ToTeaN1k23rfrdh/vDT7A4AnB/ujbGoIeQCZ2d9WPXgJ7BTTTW+yVFOZIsw/0DKP2IOzUAnDWYCcVS6SgzZODV2RlsIEm4xplXiO6hmhSrQ/Ok/2Givy/SdtEEwEx2N7M7u5qTk9PADf8sRB9oYaUKLSsvkasVB4eGhV96PEaaGYdkyy+EncWlkRkf8aQOS4sjr5gsDhfxPC1y+d+2br235osEPj/LoiNhhL6NzLnMyYMj4/PlgAuQYuKUlxWRFysaxxDtdre166s2bsQ0JNsMaBmAXVBSgmo0G9LPs5IItqxcMiNh5ymroonm8+wVpWku26NUX38H5gSWPF1j37WvQlccqzGPUIX5ikxM1yNpYho1x2INodbOszTwCeYlFmDwUbuLJoBu0i9AT8MTMgleiSgNMTj5KikAcdJlff4yOnT8fbr4/jmxoq4OHG9Ii5wmzM2lgvw85Ix6KTDQTfbsPHB+jNzlVRQc7qegb4xMNvuXrJ6Kv47Q2X/zUQ+0mN+5jF5Nz5Brk6MmUQ/j72HXmJvBKpB0rN601FZfFFWl/yly7MVnF3M/vpZnuhfVnJnZoZjD8y346i7MiIkbtq6TXg9ScRLfhDXmJFua06EfP3tR+DDtl+PNwrxAETSN8Wg8CY/ZEVRFt1IsFCBnbiEDjufHapf0LAoO9srJE6Rbt5uKqxStq/Hooga+4GIHFo9Q9YYfxtyen6Ci7wHo0XJItE2WqHBEzjYJWx2zaJKxLNY8qMT9SmFVc6y76fKCrj717qIJEBnqCZjKa2/FnN7ygD9Am9ZU65neTFmOwoIQt8kAWidUHIu+7j4dS4rExNgoVa9aKZcC8fOx5GRme6kbBJiexvw3qhVcBSXSFrAqsrjSKDjUJ1Ud7rXLXLqyyl5cfFLtab/m6cK0bbdl6dX1/zJmdz4O4PditB7OwmLwZPekUUZROXmXV1Nm+QrKKltO7px8maOKQE2iDJLd6TWaWzxJw8PXrBIXTQAmual8Za6w2m9TMZOVm5lGNTWVssJAaiL+ko29HTMV5nrFyfcu0hQm3KOonlteUyNBZRtiAcfzrFpL8xVpC7iQ1pqZLVWRBS6pDaCERgcNSbDZ1miKfb+5tFr1eLLawiM9n3i+gNeq6TUbvhO1u/9RtzkeBJCeBLe7ofoK6jZS7qoN5Ckug/R5yeryyCShPTOH0vHbLKRRDaMmlShTiSnPxvrbho1n/PTfSSGAUlQ6jZdpPIxlEApqfsSOzWulGymHM0cAY7ViFkpRNOSFGlu7aAQJOCcqEQrLyyHhRiDnzc+nwOQ4DaK8XPWNkzUd5SNuJPCgAjgucGbnkzo1SVE/3FWzkgGVdEfU6bnfXLGqzFS0UnPkVQTUgVZGZ94Xq6212mt3lJgqVt9iWl73SNTp/Dtw/H5whJe9LQbfhsCvEMDnrUYFdVqWHDrfkyVTusWQYN7nmGV2sI/CuD9cbpOiaU9Ge5qRa7+2NgfPtV0+d5VJ2f3gESw93YU6TfqzP/l9vXrViqsKchkN5nLWSVy4+/eP/ZwuoBqag7Rbv3wb1dTXoywxKt1YTkX/+qlfUl//IBbfOSl77WZy5JdIoDg3xMHZTFcLTXW2kAop4qpoLDCQehqAjuEOfbjbKDwD+K9kxy3zMGlUIo0qpzcAJAZjjAf6L6tkGeXWriez3bUgRsGAGR2eEsU1vMvPoIHzO4++jPL2MKuqWcU3Uhc680YnDl1TS4oE4M66uXQFlira98n1ujDGmzZgwQNzDQ4aVOY94yGYi6qXl+sNF5rEdCBEXR0dZFdMVFhWKu0dz9FWVC7T+zo6xDRKCEOYG2b1ZYM6MkBB3b83j9yFJbLeXwPRGRipRoRwInLOx2c5CjyrQPAK7OeAW20MemIVBnteXAFXtHYTZdewxCpy3loOEl9cksj9hSfHyM9e2NgwltWGKTA2RFP9PQbRY9HGSKD3v0JcDU8icfGn2CaLAORyFHVHXbbfg0pIGxkZo/V4uUZGVgaYxAA+MSYmhqygQO19ZVmhfr6hSQRQwtjd0UlBgF2IlSu8UBr2QCxbUamPDfSLiYlJCo4PS5VkgarglLXsFSBxvOCGsXQharbDW7JAYhTEExakNmxOjzSmnCqPgmPjnACgo+Tx5lDJ5p3kyi+WwEvpxNgSkfx0bxsNN5ym8bYmmobOnwUTTPd1kx8EYIlggpkiwSdjJ958I/Fs17JNGgEiY51BU0llBsodboxAx4ewcGIzViBiinJOAIwdHibmCMCB3pwssby0UOe3mHA9zhDq97tbW2GI7ShXzyK72yOW11TrGsAbHhwSoRksxh7qpcjUBOfvgAFWtEMy+KMgYrZjIt8FVeUpLJUeixVzD9GAHzHEpASds66cFsmvrqXC9VulypHvHgI5WThMSAhG4IENnj1O4x3NqAUA0dBY+rhqg9WnpCJvtVhYhP3fj/VcuWYDzH3PY8L/LbLF1wOfg4+cZ4I796fffUivrau5qvCWb8HcxhzMwsE2oLerV//pPz1PvcMTyEZD3+J4WSmWo25YTyXL4f6lp+l97a3i1LF39K7uPlSpwFYALIsNa79cqIoE+PyOB34YXgobDfpJDcDLAuH4TpwsZIQ9OQj2ajeg4iIHnhQMLI8DY+CxsA2Z6e+i4YvvQb+HQGDMTXD/GbmkuFDGDrXp725EshBEwT6F/M9HDz1zHy5dVEuaBPAo1MH2WVNxpS5s9j2cfhjsHxRbIQWcjk40fuCFjecB+BUC9aiom8QLlvqGMDUJInCwxu5oe1MTjQ0OCpfHo6+sXUVlxYXCAqTDkDBeDa8iaGOuDUMqQr4JimAyn5dG8XsjJEVwQ2daGhWtXk/58HCYWBJ8Jo1EHgRHf+PNF2no0vtSMnlyyeYtIkdRJSmeLDKDELHANEUmwewsejEthPqhb2k9LYMLn+Va9pNKAB6Alu1qMFk8t4N7Csaxwh11gHpd3UohywvlCA3uXzhYPoY3XokN61ZRdppb7+keEAGAyK8KCKE0fXBgkJobm8TlC5fEwMAQKucisCMxwrozgIx4CKAwl0vdjI6luwj0XciwFq6qk4bWyamNhEspeR5YguvZ4xo8d4omulolwUyoynAWVUkCsD1g4ugICgM9zTDKiLfMWJUZCv6DeuzFJxY+w7XuJ50A8AhUU2F5E/TDQ3APlbbOXoH1AnpJaaFgbudmcB6L/jwxWD+zK1G+rFTU161ENVyMhoZHweVYIgQ1xTNqzLCYc0AZYYjCUEMMEF+nyxgiJvW7A8Gat6Sciteso4JVa8nFwIMYDP5cQ198Lfvz/e+fID+WPzFnW5x4/VlZDaoyjNS4QRHULPUjPRJAdM6vOlPDbapv6Bs02PX/LxKeu+FH7ySfALiX1tvaYyqqNGNd1k1cldzU3C5qK8t0rAeQEXJCC0lC8NgW/MABmQ0l7mtWr6R1tVW6FZw9Pj4hAlA5bDPYiPJHciY6cEG95JYvo4LqVVSyGqDXrKEMRKscvcquJfAsJbgOqoXdz8DoEA1dPEsjLZeR8QhLSbB7C8hZsgJZV+Sf0K/kfhjfyBiCrjGUSGIfVIyYZ/1fj5157aLsPAlfS0IAHpfmNp002TPWQxWt4PW7V660i7qaSgDm4ao45n3O10lp4IdldTDHpUCa1ZIrzS1qV6+gDWtqKBuvs2G9P4PqOl5HxlzN1+Ei3gMDg8u5P5YyfHQk9nirwRnglEdwYhRqpo2GGs/TaFszBeFRgZJIMaSTqwQqJ7sI/RkOALqTRln1jSIz2y7VHJ+L+dT/oL794pO4TdIabrV0zbVld17Yk/1bhLNr2DBW5Hv1f/FHXxOZudnxxXgGiOODw/o0lp1WVFbAC8KKeUTETBkGlCdzJNhQEZGwqvf1DfCrxsSVNqQysNgjHD9XggYi8FImM/Q0G37meuZ4rrqQy49YGuQ5iBk96Uh5FyDtwMEdKjVwjO/H92W3Vp0ep9nuJoMpEG/AB/6Fevi5b+IMQ4/yuUloSyYBPDa1v9NvKSg5DCW+F6sTMyd8M6IJ5eErKkooPStDVkLwA9vxgr7LF5ro9dePCV6RiJXtOmqMBKscI5rWday4EVGUO7o8aaJsWRnVrFpBy5YjW4nlrfyeH+ZedCWDPH47VhSGk1+Nw0EXg26BanEir5SGDGt6aRXihTIEbYaaAuoYLfOioaoivhHy91wxwGcPLhx4PTo8+gc02mUEBvxwSWpLKgGJMVo37lkdy/C+hDTysii8Dq/bSd/86l1UA2PLriQ/Ppc2Xmxo1F948TVGgbYhobduXa2elZ3Fa7V0rNcVLBns+ahY4BuGmxsFhVQwNf/Oam4K6mkGb0X0Q1Xxe4BUVnVMGDOqK2BAdUgG1wSzNCTessIENqRMMj8mf3oQ7HUb/zD4wcCh6Gj//XTxnSUpj1xSCUgQIDbQPmLJKXkTXsTNmGTJ4WWi7zc0Et7vrFdUlMgVM6zX8wpyxXq8N24K05avHz1Fb598X3R19kCHB4UDZS12RMgcELFkMLgRAJkgCubk5DGuJ7IhOLOhvlTWmSLBhsXGGArUEasZuK8MeELFSdXFqgrGeLa7GeluJDYhMTLYCvoPRCdGHqILb8GfXpp2XQjAQ0fOfNTmLfyNppjXYX63AuqELsM7wgQNlWLFTAZeFwAwUWxtoZraaqw1wwp7uJsXr3TQ+XOX6Qw+7W2dCNYmeHEdkpswFyAGZ0KZyznjwRLBXhQTh7dsyBls+WFOx8fAnmUODcCzAQ+ND9J0RyNFsBxKZlVBAD0U+Ems490/oubz1zzhY9zk47+viwq6agh1dS5LVtXfIHX9JxzxRqGC3HhtzC07Nuo37NgoXCje5eBL6mPgMNQ/LBouNDKxaABJPp5LYOAceJFrZnoaZcKWpOHdP3YX0hFIwmGOQL6MlYmgqjF+MRQIgO7sbvyO+zERADoThXNEU73tFELGU0a4uBYWewZLYf+deuyFf7hq3Ev0z/UnQPxBrDvuflB3OP8W1rYs8bbcvKx02rFlPa1bX0sevFIsKrkYcGGUvKh7eHhM7+nqE/2IhkfHJ2kas2psQ5jb2QnlYI1X4fNyU14CxUGZA9EwV1zDE0OgBwLAhgQAvK+vCwHYCKSC644MKRJYBitmp7+vnnrl9BLh/aFuPzMC8Eic679UqGZk/Ei3WL8F+2Dnl3RzTVAGXtC9BjFDXV2NXlBcwOllwZzL4EVjMLzQ/cEQ0gNYcR/AfEKIjTOMslQ1XCsMN1JHuhjQQh3piJ7xAj8Qa2p0mCYH+ymAGTW2B/I1BCAaorFJ+Lg/js50/vgTLYP9EIzX/sNnSoDEsC3b7tys252PIDV6Fy8UZteR1xwrUDW53gwqLymiUtQVZWHS3u6GqoFHw0ZXBVH4w5IiVQ57RwCbpSIAiZlFQs83No7PKN6e5ZNZThYn5ngZ2apqEKnVp00h338OH3/tSmI813P7uSBA4oEtW/duIYcbK9oVJkQ2GBgqGbOK+HCzw0C7EDOkedy60+nE1AOXrYCDEaSxvpfAY60Zpy34naH8VixNR9wE0PHSPgN0dnqj0WH4tM8hZ/0z9Z2DDYn7fxbbzxUBEgA4Nu0pibpcd+iK9R4gvBksn8kcK/P3cVeSk3DSpUlchCdhj0ZyOGdH2cOBd8T/w/cE6DHUPGqnRSzygiUyfTBw/LdI8Hz27XNJgIWwMDFiTvdGzWTeBlzX8lwv3M4ccL0b6BpZucQF7GMiGAZh/EiowWXSOlHR0GCKaSdNauBM6MQr3YlTPy/bzz0BPghUYX29c9JV7I2qerZuUTx4sVIaEnBmcDxeNilmsEx/xqxFxjxTgfHRJXzHwwfHlfo/hUAKgRQCKQRSCKQQSCGQQiCFQAqBFAIpBFIIpBBIIZBCIIVACoHPOQL/D2wxi8g8FWsSAAAAAElFTkSuQmCC";import{useEffect as Fe,useState as qe}from"react";import{jsx as H}from"react/jsx-runtime";var Ne={github:"github.com",gitlab:"gitlab.com",slack:"slack.com",notion:"notion.so",airtable:"airtable.com",linear:"linear.app",jira:"atlassian.com",confluence:"atlassian.com",google:"google.com",gmail:"gmail.com",gdrive:"drive.google.com",gcalendar:"calendar.google.com",hubspot:"hubspot.com",salesforce:"salesforce.com",stripe:"stripe.com",discord:"discord.com",intercom:"intercom.com",zendesk:"zendesk.com",figma:"figma.com",dropbox:"dropbox.com",asana:"asana.com",trello:"trello.com",clickup:"clickup.com",monday:"monday.com",twilio:"twilio.com",sendgrid:"sendgrid.com",shopify:"shopify.com",agentql:"agentql.com",ahrefs:"ahrefs.com",amplitude:"amplitude.com",bitwarden:"bitwarden.com",bluesky:"bsky.app",box:"box.com",cal:"cal.com",calendly:"calendly.com",cloudflare:"cloudflare.com",cursor:"cursor.com",dodopayments:"dodopayments.com",exa:"exa.ai",firecrawl:"firecrawl.dev",fireflies:"fireflies.ai",googlecalendar:"calendar.google.com",googledocs:"docs.google.com",googledrive:"drive.google.com",googlemeet:"meet.google.com",googlesheets:"docs.google.com",grafana:"grafana.com",hackernews:"news.ycombinator.com",instagram:"instagram.com",onedrive:"onedrive.live.com",openweathermap:"openweathermap.org",oura:"ouraring.com",outlook:"outlook.live.com",pagerduty:"pagerduty.com",posthog:"posthog.com",razorpay:"razorpay.com",reddit:"reddit.com",resend:"resend.com",sentry:"sentry.io",sharepoint:"sharepoint.com",spotify:"spotify.com",strava:"strava.com",supabase:"supabase.com",tally:"tally.so",tavily:"tavily.com",teams:"teams.microsoft.com",telegram:"telegram.org",todoist:"todoist.com",twitter:"x.com",twitterapiio:"twitter.com",typeform:"typeform.com",vapi:"vapi.ai",vercel:"vercel.com",youtube:"youtube.com",zohomail:"zoho.com",zoom:"zoom.us",accrediblecertificates:"accredible.com",agentmail:"agentmail.to"},Ge={"outlook.live.com":"https://svgl.app/library/microsoft-outlook.svg","onedrive.live.com":"https://svgl.app/library/microsoft-onedrive.svg","sharepoint.com":"https://svgl.app/library/microsoft-sharepoint.svg","teams.microsoft.com":"https://svgl.app/library/microsoft-teams.svg","gmail.com":"https://svgl.app/library/gmail.svg","drive.google.com":"https://svgl.app/library/drive.svg","calendar.google.com":"https://svgl.app/library/google-calendar.svg","meet.google.com":"https://svgl.app/library/google-meet.svg","docs.google.com":"https://svgl.app/library/google-sheets.svg"},fe={googledocs:"https://www.gstatic.com/images/branding/product/2x/docs_2020q4_96dp.png"};function W(t){let o=t.toLowerCase().replace(/_/g,"");return Ne[o]??`${o}.com`}function be(t){let o=t.replace(/^(https?:\/\/)|(www\.)/g,"").replace(/\/$/,"");return Ge[o]??`https://twenty-icons.com/${o}`}function We(t){let o=t.toLowerCase().replace(/_/g,"");return fe[o]?fe[o]:be(W(t))}function Q({domain:t,pluginId:o,label:r,size:n=24,radius:s}){let i=o?We(o):be(t),[e,a]=qe(null);Fe(()=>{let p=!0;a(null);let m=new Image;return m.referrerPolicy="no-referrer",m.onload=()=>{p&&m.naturalWidth>0&&a(m.src)},m.src=i,()=>{p=!1}},[i]);let c={width:n,height:n,borderRadius:s??Math.round(n*.28),flexShrink:0,display:"flex",alignItems:"center",justifyContent:"center",overflow:"hidden",background:e?"#fff":"#f1f1f1",border:"1px solid #1c1c1c12"};return H("span",{style:c,children:e?H("img",{src:e,alt:"",width:Math.round(n*.62),height:Math.round(n*.62),referrerPolicy:"no-referrer",style:{objectFit:"contain"}}):H("span",{style:{fontSize:Math.round(n*.4),fontWeight:600,color:"#7a7a7a"},children:(r[0]??"?").toUpperCase()})})}import{jsx as d,jsxs as h}from"react/jsx-runtime";function Ue(t){return typeof t=="string"?t:t?.theme}function je(t){let[o,r]=X(t==="dark");return K(()=>{if(t==="dark"||t==="light"){r(t==="dark");return}let n=window.matchMedia("(prefers-color-scheme: dark)");r(n.matches);let s=i=>r(i.matches);return n.addEventListener("change",s),()=>n.removeEventListener("change",s)},[t]),o}var Ye="#4a38f5",E="#1c1c1c",Z="#1a7f4b",Ve="ui-monospace, SFMono-Regular, Menlo, monospace",Je='-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, system-ui, sans-serif',He=`
|
|
3
3
|
@keyframes corsair-fade { from { opacity: 0 } to { opacity: 1 } }
|
|
4
4
|
@keyframes corsair-rise {
|
|
5
5
|
from { opacity: 0; transform: translateY(8px) scale(0.985) }
|
|
@@ -17,4 +17,4 @@ import{useCallback as ve,useEffect as lt,useReducer as xe,useRef as Ae}from"reac
|
|
|
17
17
|
outline: 2px solid ${Ye}; outline-offset: 2px;
|
|
18
18
|
}
|
|
19
19
|
@media (prefers-reduced-motion: reduce) { .corsair-scrim, .corsair-card { animation: none } }
|
|
20
|
-
`;function ye(t){return t==="connected"}function He({client:t,activePlugin:o,ink:a,muted:n,faint:s,border:i,hair:e}){let[r,c]=X(null),[p,m]=X(!1);K(()=>{let g=!0;return t.connectionStatus.get().then(k=>{g&&c(k)}).catch(()=>{}),()=>{g=!1}},[t]);let u=r?Object.entries(r).filter(([g])=>g!==o):[];if(u.length===0)return null;let x=u.filter(([,g])=>ye(g)).length;return h("div",{style:{marginTop:12,borderTop:`1px solid ${e}`,paddingTop:12},children:[h("button",{type:"button",onClick:()=>m(g=>!g),"aria-expanded":p,className:"corsair-roster",style:{display:"flex",width:"100%",alignItems:"center",justifyContent:"space-between",gap:8,padding:"7px 8px",borderRadius:8,border:"none",background:"transparent",cursor:"pointer"},children:[d("span",{style:{fontFamily:Ve,fontSize:10.5,fontWeight:500,letterSpacing:"0.06em",textTransform:"uppercase",color:s},children:"Your connections"}),h("span",{style:{display:"flex",alignItems:"center",gap:8},children:[h("span",{style:{fontSize:12,fontWeight:500,color:n},children:[x,"/",u.length]}),d("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":!0,style:{transform:p?"rotate(180deg)":"none",transition:"transform 160ms ease"},children:d("path",{d:"M3 4.5L6 7.5L9 4.5",stroke:s,strokeWidth:"1.3",strokeLinecap:"round",strokeLinejoin:"round"})})]})]}),p?d("ul",{style:{listStyle:"none",margin:"4px 0 0",padding:0},children:u.map(([g,k])=>{let S=J(g),f=ye(k);return h("li",{style:{display:"flex",alignItems:"center",gap:10,padding:"7px 8px",borderRadius:8},children:[d(H,{domain:W(g),pluginId:g,label:S,size:20}),d("span",{style:{flex:1,fontSize:13,color:a},children:S}),h("span",{style:{display:"flex",alignItems:"center",gap:6,fontSize:11.5,color:f?Z:s},children:[d("span",{style:{width:6,height:6,borderRadius:999,background:f?Z:i}}),f?"Connected":"Not connected"]})]},g)})}):null]})}function he({state:t,client:o,appearance:a,onOpen:n,onClose:s}){let i=t.phase==="success";K(()=>{let y=q=>{q.key==="Escape"&&s()};return window.addEventListener("keydown",y),()=>window.removeEventListener("keydown",y)},[s]);let e=je(Ue(a)),r=e?"#141414":"#fff",c=e?"#f5f5f5":E,p=e?"#f5f5f5cc":`${E}a6`,m=e?"#f5f5f599":`${E}80`,u=e?"#ffffff1f":`${E}1a`,x=e?"#ffffff12":`${E}0d`,g=e?"#f5f5f5":E,k=e?E:"#fff",S=e?"#ffffff":"#000",f=t.plugin??"",C=f?J(f):"your account",O=W(f),T=e?"drop-shadow(0 8px 18px rgba(0,0,0,0.55))":"drop-shadow(0 8px 16px rgba(20,18,40,0.22))";return h("div",{role:"dialog","aria-modal":"true","aria-labelledby":"corsair-connect-title",className:"corsair-scrim",onMouseDown:y=>{y.target===y.currentTarget&&s()},style:{position:"fixed",inset:0,zIndex:2147483647,display:"flex",alignItems:"flex-start",justifyContent:"center",padding:16,overflowY:"auto",background:"rgba(20,20,22,0.5)",backdropFilter:"blur(3px)",fontFamily:Je},children:[d("style",{children:Qe}),d("div",{style:{position:"relative",width:"min(94vw, 380px)",marginTop:"clamp(40px, 20vh, 180px)",marginBottom:16},children:h("div",{className:"corsair-card",style:{overflow:"hidden",borderRadius:18,border:`1px solid ${u}`,background:r,boxShadow:"0 1px 0 0 rgba(255,255,255,0.04) inset, 0 24px 80px -12px rgba(20,18,40,0.34), 0 6px 18px -6px rgba(20,18,40,0.16)","--corsair-primary-hover":S},children:[i?h("div",{style:{padding:"40px 24px",textAlign:"center"},children:[d("div",{style:{width:48,height:48,margin:"0 auto 14px",borderRadius:999,display:"flex",alignItems:"center",justifyContent:"center",background:e?"#0f3d26":"#eafaf0"},children:d("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:Z,strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:d("path",{d:"M20 6L9 17l-5-5"})})}),h("p",{id:"corsair-connect-title",style:{margin:0,fontSize:15.5,fontWeight:700,color:c},children:[C," connected"]}),d("p",{style:{margin:"5px 0 0",fontSize:13,color:p},children:"Taking you back."})]}):h("div",{style:{padding:"32px 22px 18px"},children:[h("div",{style:{position:"relative",textAlign:"center"},children:[d("div",{style:{display:"flex",justifyContent:"center"},children:d("span",{style:{filter:T},children:d(H,{domain:O,pluginId:f,label:C,size:52,radius:14})})}),h("h2",{id:"corsair-connect-title",style:{position:"relative",margin:"18px 0 0",fontSize:20,fontWeight:700,letterSpacing:"-0.03em",color:c},children:["Connect ",C]})]}),h("div",{style:{margin:"20px 0 0"},children:[d("button",{type:"button",onClick:n,className:"corsair-primary",autoFocus:!0,style:{display:"flex",width:"100%",alignItems:"center",justifyContent:"center",gap:9,padding:"12px 16px",borderRadius:11,border:"none",background:g,color:k,fontSize:13.5,fontWeight:700,cursor:"pointer"},children:"Continue"}),d("button",{type:"button",onClick:s,className:"corsair-ghost",style:{display:"block",margin:"10px auto 0",padding:"4px 10px",border:"none",background:"transparent",color:m,fontSize:12.5,fontWeight:500,cursor:"pointer"},children:"Not now"})]}),d(He,{client:o,activePlugin:t.plugin,ink:c,muted:p,faint:m,border:u,hair:x})]}),h("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",gap:6,padding:"11px 18px",borderTop:`1px solid ${x}`},children:[d("span",{style:{fontSize:11,fontWeight:500,color:m},children:"Secured by"}),d("img",{src:ge,alt:"",width:15,height:15,style:{display:"block"}}),d("span",{style:{fontSize:12.5,fontWeight:600,letterSpacing:"-0.02em",color:p},children:"Corsair"})]})]})})]})}import{jsx as nt,jsxs as rt}from"react/jsx-runtime";var $e=2e3,et=1500,ke=Xe(null);function tt({baseURL:t,appearance:o,onConnected:a,captureUnhandled:n,children:s}){let i=R(null);i.current||(i.current=G({baseURL:t??"/api/corsair"}));let e=i.current,[r,c]=_e(re,V),[p,m]=Ce(null),[u,x]=Ce(!0),g=R(0),k=v(()=>{let l=++g.current;x(!0),e.connectionStatus.get().then(b=>{l===g.current&&m(b)}).catch(()=>{}).finally(()=>{l===g.current&&x(!1)})},[e]);U(()=>{k()},[k]);let S=R(null);S.current||(S.current=de());let f=S.current,C=R(null),O=R(null),T=R(null),y=R(0),q=R(a);q.current=a;let j=R(r);j.current=r;let I=v(()=>{O.current&&(clearInterval(O.current),O.current=null)},[]),P=v(l=>{I(),f.settleAll(l)},[I,f]),$=v((l,b)=>{I(),T.current&&(clearTimeout(T.current),T.current=null),y.current+=1;let w=y.current,A=b?{tenantId:b,plugin:l}:{plugin:l},z=b?{tenantId:b}:void 0,D=()=>w===y.current&&f.size()>0,oe=()=>{y.current+=1,C.current?.close(),C.current=null,c({type:"SUCCESS"}),e.connectRequest.clear(A).catch(()=>{}),q.current?.(),k(),P(!0)},Be=()=>{y.current+=1,C.current?.close(),C.current=null,e.connectRequest.clear(A).catch(()=>{}),c({type:"CLOSE"}),P(!1)},Oe=()=>{e.connectionStatus.get(z).then(Y=>{D()&&ie({capturedAttempt:w,currentAttempt:y.current,status:Y,plugin:l})&&oe()}).catch(()=>{})};O.current=setInterval(()=>{Oe(),C.current?.closed&&(I(),T.current=setTimeout(()=>{D()&&le(()=>e.connectionStatus.get(z),l).then(Y=>{D()&&(Y?oe():Be())})},et))},$e)},[e,P,I,k]),N=v((l,b,w)=>me(j.current,l,w,f.size()>0)?new Promise(A=>f.add(A)):(y.current+=1,f.settleAll(!1),c({type:"OPEN",plugin:l,connectUrl:b,tenantId:w}),new Promise(A=>f.add(A))),[f]),ee=v(async(l,b)=>{let{connectUrl:w,tenantId:A}=await e.connect.createLink({plugin:l,tenantId:b?.tenantId});return N(l,w,A)},[e,N]),L=v(async()=>{let{request:l}=await e.connectRequest.get();return l?await N(l.plugin,l.connectUrl,l.tenantId)?"connected":"cancelled":"none"},[e,N]),te=v(async l=>{try{return await l()}catch(b){let w=await L();if(w==="none")throw b;return w==="cancelled"?null:await ce(l)}},[L]),Te=v(()=>{let{connectUrl:l,plugin:b,tenantId:w}=r;if(!l||!b)return;let A=l;try{let D=new URL(l);D.searchParams.set("forward","1"),A=D.toString()}catch{}let z=window.open(A,"corsair-connect","width=520,height=720");if(!z){y.current+=1,P(!1),c({type:"CLOSE"});return}C.current=z,$(b,w)},[$,r,P]),Ie=v(()=>{y.current+=1,C.current?.close(),C.current=null;let l=r.plugin?r.tenantId?{tenantId:r.tenantId,plugin:r.plugin}:{plugin:r.plugin}:void 0;e.connectRequest.clear(l).catch(()=>{}),P(!1),c({type:"CLOSE"})},[e,P,r.tenantId,r.plugin]);U(()=>()=>{I(),T.current&&clearTimeout(T.current),y.current+=1,C.current?.close(),C.current=null,f.settleAll(!1)},[I,f]),U(()=>{if(r.phase!=="success")return;let l=setTimeout(()=>c({type:"CLOSE"}),1100);return()=>clearTimeout(l)},[r.phase]),U(()=>{if(n===!1)return;let l=b=>{ue(b.reason)&&j.current.phase==="idle"&&(b.preventDefault(),L())};return window.addEventListener("unhandledrejection",l),()=>window.removeEventListener("unhandledrejection",l)},[n,L]);let Pe=Ke(()=>({client:e,connect:ee,call:te,requireConnect:L,connections:p,connectionsLoading:u,refreshConnections:k}),[e,ee,te,L,p,u,k]),Ee=r.phase==="connecting"||r.phase==="success";return rt(ke.Provider,{value:Pe,children:[s,Ee?nt(he,{state:r,client:e,appearance:o,onOpen:Te,onClose:Ie}):null]})}function F(){let t=Ze(ke);if(!t)throw new Error("useConnections must be used within <CorsairProvider>");return t}function ot(){let{connect:t,call:o,connections:a,connectionsLoading:n}=F(),s=v(i=>a?.[i]==="connected",[a]);return{connections:a,isConnected:s,loading:n,connect:t,call:o}}import{useEffect as at,useRef as it,useState as we}from"react";import{jsx as ct}from"react/jsx-runtime";function st({error:t,reset:o}){let{requireConnect:a}=F(),[n,s]=we(!1),[i,e]=we(!1),r=it(!1);if(at(()=>{if(r.current)return;r.current=!0;let c=!0;return a().then(p=>{if(!c)return;let m=pe(p);m==="retry"?o():m==="rethrow"?e(!0):s(!0)}).catch(()=>{c&&e(!0)}),()=>{c=!1}},[a,o]),i)throw t;return n?ct("button",{type:"button",onClick:o,children:"Try again"}):null}function Re(t,o){switch(o.type){case"FETCH":return{status:"loading",data:null,error:null,loading:!0};case"SUCCESS":return{status:"success",data:o.data,error:null,loading:!1};case"ERROR":return{status:"error",data:null,error:o.error,loading:!1};case"RESET":return{status:"idle",data:null,error:null,loading:!1}}}var Se={status:"idle",data:null,error:null,loading:!1};function B(t,o){let[a,n]=xe(Re,Se),s=Ae(t);s.current=t;let i=Ae(0),e=ve(()=>{let r=++i.current;n({type:"FETCH"}),s.current().then(c=>{r===i.current&&n({type:"SUCCESS",data:c})}).catch(c=>{r===i.current&&n({type:"ERROR",error:c instanceof Error?c:new Error(String(c))})})},[]);return lt(()=>(e(),()=>{i.current++}),o),{...a,refetch:e}}function _(t){let[o,a]=xe(Re,Se),n=ve(async s=>{a({type:"FETCH"});try{let i=await t(s);return a({type:"SUCCESS",data:i}),i}catch(i){let e=i instanceof Error?i:new Error(String(i));throw a({type:"ERROR",error:e}),e}},[]);return{data:o.data,loading:o.loading,error:o.error,mutate:n}}function Gt(t){let o=G(t);function a(){return B(()=>o.tenants.list(),[])}function n(u){return B(()=>o.tenants.get(u),[u])}function s(){return _(u=>o.tenants.create(u))}function i(){return B(()=>o.plugins.list(),[])}function e(u){return B(()=>o.plugins.get(u),[u])}function r(u){return B(()=>o.connectionStatus.get(u),[u?.tenantId])}function c(u){let x="id"in u?u.id:u.token;return B(()=>o.permissions.get(u),[x])}function p(){return _(u=>o.connect.createLink(u))}function m(){return _(u=>o.connect.oauthCallback(u))}return{client:o,useTenants:a,useTenant:n,useCreateTenant:s,usePlugins:i,usePlugin:e,useConnectionStatus:r,usePermission:c,useCreateConnectLink:p,useOAuthCallback:m}}function Wt(){let{client:t}=F();function o(a,n,s){let i=a.indexOf("."),e=i===-1?a:a.slice(0,i),r=i===-1?"":a.slice(i+1),c=s?.tenantId??"default";return B(()=>t.call(e,r,c,n),[t,e,r,c,JSON.stringify(n)])}return{useApi:o,db:void 0}}export{st as CorsairErrorBoundary,tt as CorsairProvider,Gt as createCorsairReactClient,ot as useConnections,Wt as useCorsair};
|
|
20
|
+
`;function ye(t){return t==="connected"}function Qe({client:t,activePlugin:o,ink:r,muted:n,faint:s,border:i,hair:e}){let[a,c]=X(null),[p,m]=X(!1);K(()=>{let g=!0;return t.connectionStatus.get().then(k=>{g&&c(k)}).catch(()=>{}),()=>{g=!1}},[t]);let u=a?Object.entries(a).filter(([g])=>g!==o):[];if(u.length===0)return null;let x=u.filter(([,g])=>ye(g)).length;return h("div",{style:{marginTop:12,borderTop:`1px solid ${e}`,paddingTop:12},children:[h("button",{type:"button",onClick:()=>m(g=>!g),"aria-expanded":p,className:"corsair-roster",style:{display:"flex",width:"100%",alignItems:"center",justifyContent:"space-between",gap:8,padding:"7px 8px",borderRadius:8,border:"none",background:"transparent",cursor:"pointer"},children:[d("span",{style:{fontFamily:Ve,fontSize:10.5,fontWeight:500,letterSpacing:"0.06em",textTransform:"uppercase",color:s},children:"Your connections"}),h("span",{style:{display:"flex",alignItems:"center",gap:8},children:[h("span",{style:{fontSize:12,fontWeight:500,color:n},children:[x,"/",u.length]}),d("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":!0,style:{transform:p?"rotate(180deg)":"none",transition:"transform 160ms ease"},children:d("path",{d:"M3 4.5L6 7.5L9 4.5",stroke:s,strokeWidth:"1.3",strokeLinecap:"round",strokeLinejoin:"round"})})]})]}),p?d("ul",{style:{listStyle:"none",margin:"4px 0 0",padding:0},children:u.map(([g,k])=>{let R=J(g),f=ye(k);return h("li",{style:{display:"flex",alignItems:"center",gap:10,padding:"7px 8px",borderRadius:8},children:[d(Q,{domain:W(g),pluginId:g,label:R,size:20}),d("span",{style:{flex:1,fontSize:13,color:r},children:R}),h("span",{style:{display:"flex",alignItems:"center",gap:6,fontSize:11.5,color:f?Z:s},children:[d("span",{style:{width:6,height:6,borderRadius:999,background:f?Z:i}}),f?"Connected":"Not connected"]})]},g)})}):null]})}function he({state:t,client:o,appearance:r,onOpen:n,onClose:s}){let i=t.phase==="success";K(()=>{let y=q=>{q.key==="Escape"&&s()};return window.addEventListener("keydown",y),()=>window.removeEventListener("keydown",y)},[s]);let e=je(Ue(r)),a=e?"#141414":"#fff",c=e?"#f5f5f5":E,p=e?"#f5f5f5cc":`${E}a6`,m=e?"#f5f5f599":`${E}80`,u=e?"#ffffff1f":`${E}1a`,x=e?"#ffffff12":`${E}0d`,g=e?"#f5f5f5":E,k=e?E:"#fff",R=e?"#ffffff":"#000",f=t.plugin??"",C=f?J(f):"your account",O=W(f),T=e?"drop-shadow(0 8px 18px rgba(0,0,0,0.55))":"drop-shadow(0 8px 16px rgba(20,18,40,0.22))";return h("div",{role:"dialog","aria-modal":"true","aria-labelledby":"corsair-connect-title",className:"corsair-scrim",onMouseDown:y=>{y.target===y.currentTarget&&s()},style:{position:"fixed",inset:0,zIndex:2147483647,display:"flex",alignItems:"flex-start",justifyContent:"center",padding:16,overflowY:"auto",background:"rgba(20,20,22,0.5)",backdropFilter:"blur(3px)",fontFamily:Je},children:[d("style",{children:He}),d("div",{style:{position:"relative",width:"min(94vw, 380px)",marginTop:"clamp(40px, 20vh, 180px)",marginBottom:16},children:h("div",{className:"corsair-card",style:{overflow:"hidden",borderRadius:18,border:`1px solid ${u}`,background:a,boxShadow:"0 1px 0 0 rgba(255,255,255,0.04) inset, 0 24px 80px -12px rgba(20,18,40,0.34), 0 6px 18px -6px rgba(20,18,40,0.16)","--corsair-primary-hover":R},children:[i?h("div",{style:{padding:"40px 24px",textAlign:"center"},children:[d("div",{style:{width:48,height:48,margin:"0 auto 14px",borderRadius:999,display:"flex",alignItems:"center",justifyContent:"center",background:e?"#0f3d26":"#eafaf0"},children:d("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:Z,strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":!0,children:d("path",{d:"M20 6L9 17l-5-5"})})}),h("p",{id:"corsair-connect-title",style:{margin:0,fontSize:15.5,fontWeight:700,color:c},children:[C," connected"]}),d("p",{style:{margin:"5px 0 0",fontSize:13,color:p},children:"Taking you back."})]}):h("div",{style:{padding:"32px 22px 18px"},children:[h("div",{style:{position:"relative",textAlign:"center"},children:[d("div",{style:{display:"flex",justifyContent:"center"},children:d("span",{style:{filter:T},children:d(Q,{domain:O,pluginId:f,label:C,size:52,radius:14})})}),h("h2",{id:"corsair-connect-title",style:{position:"relative",margin:"18px 0 0",fontSize:20,fontWeight:700,letterSpacing:"-0.03em",color:c},children:["Connect ",C]})]}),h("div",{style:{margin:"20px 0 0"},children:[d("button",{type:"button",onClick:n,className:"corsair-primary",autoFocus:!0,style:{display:"flex",width:"100%",alignItems:"center",justifyContent:"center",gap:9,padding:"12px 16px",borderRadius:11,border:"none",background:g,color:k,fontSize:13.5,fontWeight:700,cursor:"pointer"},children:"Continue"}),d("button",{type:"button",onClick:s,className:"corsair-ghost",style:{display:"block",margin:"10px auto 0",padding:"4px 10px",border:"none",background:"transparent",color:m,fontSize:12.5,fontWeight:500,cursor:"pointer"},children:"Not now"})]}),d(Qe,{client:o,activePlugin:t.plugin,ink:c,muted:p,faint:m,border:u,hair:x})]}),h("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",gap:6,padding:"11px 18px",borderTop:`1px solid ${x}`},children:[d("span",{style:{fontSize:11,fontWeight:500,color:m},children:"Secured by"}),d("img",{src:ge,alt:"",width:15,height:15,style:{display:"block"}}),d("span",{style:{fontSize:12.5,fontWeight:600,letterSpacing:"-0.02em",color:p},children:"Corsair"})]})]})})]})}import{jsx as nt,jsxs as at}from"react/jsx-runtime";var $e=2e3,et=1500,ke=Xe(null);function tt({baseURL:t,appearance:o,onConnected:r,captureUnhandled:n,children:s}){let i=S(null);i.current||(i.current=G({baseURL:t??"/api/corsair"}));let e=i.current,[a,c]=_e(ae,V),[p,m]=Ce(null),[u,x]=Ce(!0),g=S(0),k=v(()=>{let l=++g.current;x(!0),e.connectionStatus.get().then(b=>{l===g.current&&m(b)}).catch(()=>{}).finally(()=>{l===g.current&&x(!1)})},[e]);U(()=>{k()},[k]);let R=S(null);R.current||(R.current=de());let f=R.current,C=S(null),O=S(null),T=S(null),y=S(0),q=S(r);q.current=r;let j=S(a);j.current=a;let I=v(()=>{O.current&&(clearInterval(O.current),O.current=null)},[]),P=v(l=>{I(),f.settleAll(l)},[I,f]),$=v((l,b)=>{I(),T.current&&(clearTimeout(T.current),T.current=null),y.current+=1;let w=y.current,A=b?{tenantId:b,plugin:l}:{plugin:l},z=b?{tenantId:b}:void 0,D=()=>w===y.current&&f.size()>0,oe=()=>{y.current+=1,C.current?.close(),C.current=null,c({type:"SUCCESS"}),e.connectRequest.clear(A).catch(()=>{}),q.current?.(),k(),P(!0)},Be=()=>{y.current+=1,C.current?.close(),C.current=null,e.connectRequest.clear(A).catch(()=>{}),c({type:"CLOSE"}),P(!1)},Oe=()=>{e.connectionStatus.get(z).then(Y=>{D()&&ie({capturedAttempt:w,currentAttempt:y.current,status:Y,plugin:l})&&oe()}).catch(()=>{})};O.current=setInterval(()=>{Oe(),C.current?.closed&&(I(),T.current=setTimeout(()=>{D()&&le(()=>e.connectionStatus.get(z),l).then(Y=>{D()&&(Y?oe():Be())})},et))},$e)},[e,P,I,k]),N=v((l,b,w)=>me(j.current,l,w,f.size()>0)?new Promise(A=>f.add(A)):(y.current+=1,f.settleAll(!1),c({type:"OPEN",plugin:l,connectUrl:b,tenantId:w}),new Promise(A=>f.add(A))),[f]),ee=v(async(l,b)=>{let{connectUrl:w,tenantId:A}=await e.connect.createLink({plugin:l,tenantId:b?.tenantId});return N(l,w,A)},[e,N]),L=v(async()=>{let{request:l}=await e.connectRequest.get();return l?await N(l.plugin,l.connectUrl,l.tenantId)?"connected":"cancelled":"none"},[e,N]),te=v(async l=>{try{return await l()}catch(b){let w=await L();if(w==="none")throw b;return w==="cancelled"?null:await ce(l)}},[L]),Te=v(()=>{let{connectUrl:l,plugin:b,tenantId:w}=a;if(!l||!b)return;let A=l;try{let D=new URL(l);D.searchParams.set("forward","1"),A=D.toString()}catch{}let z=window.open(A,"corsair-connect","width=520,height=720");if(!z){y.current+=1,P(!1),c({type:"CLOSE"});return}C.current=z,$(b,w)},[$,a,P]),Ie=v(()=>{y.current+=1,C.current?.close(),C.current=null;let l=a.plugin?a.tenantId?{tenantId:a.tenantId,plugin:a.plugin}:{plugin:a.plugin}:void 0;e.connectRequest.clear(l).catch(()=>{}),P(!1),c({type:"CLOSE"})},[e,P,a.tenantId,a.plugin]);U(()=>()=>{I(),T.current&&clearTimeout(T.current),y.current+=1,C.current?.close(),C.current=null,f.settleAll(!1)},[I,f]),U(()=>{if(a.phase!=="success")return;let l=setTimeout(()=>c({type:"CLOSE"}),1100);return()=>clearTimeout(l)},[a.phase]),U(()=>{if(n===!1)return;let l=b=>{ue(b.reason)&&j.current.phase==="idle"&&(b.preventDefault(),L())};return window.addEventListener("unhandledrejection",l),()=>window.removeEventListener("unhandledrejection",l)},[n,L]);let Pe=Ke(()=>({client:e,connect:ee,call:te,requireConnect:L,connections:p,connectionsLoading:u,refreshConnections:k}),[e,ee,te,L,p,u,k]),Ee=a.phase==="connecting"||a.phase==="success";return at(ke.Provider,{value:Pe,children:[s,Ee?nt(he,{state:a,client:e,appearance:o,onOpen:Te,onClose:Ie}):null]})}function F(){let t=Ze(ke);if(!t)throw new Error("useConnections must be used within <CorsairProvider>");return t}function ot(){let{connect:t,call:o,connections:r,connectionsLoading:n}=F(),s=v(i=>r?.[i]==="connected",[r]);return{connections:r,isConnected:s,loading:n,connect:t,call:o}}import{useEffect as rt,useRef as it,useState as we}from"react";import{jsx as ct}from"react/jsx-runtime";function st({error:t,reset:o}){let{requireConnect:r}=F(),[n,s]=we(!1),[i,e]=we(!1),a=it(!1);if(rt(()=>{if(a.current)return;a.current=!0;let c=!0;return r().then(p=>{if(!c)return;let m=pe(p);m==="retry"?o():m==="rethrow"?e(!0):s(!0)}).catch(()=>{c&&e(!0)}),()=>{c=!1}},[r,o]),i)throw t;return n?ct("button",{type:"button",onClick:o,children:"Try again"}):null}function Se(t,o){switch(o.type){case"FETCH":return{status:"loading",data:null,error:null,loading:!0};case"SUCCESS":return{status:"success",data:o.data,error:null,loading:!1};case"ERROR":return{status:"error",data:null,error:o.error,loading:!1};case"RESET":return{status:"idle",data:null,error:null,loading:!1}}}var Re={status:"idle",data:null,error:null,loading:!1};function B(t,o){let[r,n]=xe(Se,Re),s=Ae(t);s.current=t;let i=Ae(0),e=ve(()=>{let a=++i.current;n({type:"FETCH"}),s.current().then(c=>{a===i.current&&n({type:"SUCCESS",data:c})}).catch(c=>{a===i.current&&n({type:"ERROR",error:c instanceof Error?c:new Error(String(c))})})},[]);return lt(()=>(e(),()=>{i.current++}),o),{...r,refetch:e}}function _(t){let[o,r]=xe(Se,Re),n=ve(async s=>{r({type:"FETCH"});try{let i=await t(s);return r({type:"SUCCESS",data:i}),i}catch(i){let e=i instanceof Error?i:new Error(String(i));throw r({type:"ERROR",error:e}),e}},[]);return{data:o.data,loading:o.loading,error:o.error,mutate:n}}function Gt(t){let o=G(t);function r(){return B(()=>o.tenants.list(),[])}function n(u){return B(()=>o.tenants.get(u),[u])}function s(){return _(u=>o.tenants.create(u))}function i(){return B(()=>o.plugins.list(),[])}function e(u){return B(()=>o.plugins.get(u),[u])}function a(u){return B(()=>o.connectionStatus.get(u),[u?.tenantId])}function c(u){let x="id"in u?u.id:u.token;return B(()=>o.permissions.get(u),[x])}function p(){return _(u=>o.connect.createLink(u))}function m(){return _(u=>o.connect.oauthCallback(u))}return{client:o,useTenants:r,useTenant:n,useCreateTenant:s,usePlugins:i,usePlugin:e,useConnectionStatus:a,usePermission:c,useCreateConnectLink:p,useOAuthCallback:m}}function Wt(){let{client:t}=F();function o(r,n,s){let i=r.indexOf("."),e=i===-1?r:r.slice(0,i),a=i===-1?"":r.slice(i+1),c=s?.tenantId??"default";return B(()=>t.call(e,a,c,n),[t,e,a,c,JSON.stringify(n)])}return{useApi:o,db:void 0}}export{st as CorsairErrorBoundary,tt as CorsairProvider,Gt as createCorsairReactClient,ot as useConnections,Wt as useCorsair};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{$ as b,_ as a,aa as c}from"./chunk-JAIV6R7Z.js";import"./chunk-6IURNA4L.js";import"./chunk-XCTHEKDP.js";import"./chunk-WUEWJTDA.js";import"./chunk-XPXWKPFZ.js";import"./chunk-Z2KT4F2U.js";import"./chunk-SOY77BN4.js";export{c as createHubConnectSession,b as createHubConnectSessionForPlugin,a as postHubConnectSession};
|
package/dist/core.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
export { C as CORSAIR_INTERNAL, a as CorsairInternalConfig, c as createCorsair, s as shouldStartTunnel, b as superviseTunnel } from './index-
|
|
1
|
+
export { C as CORSAIR_INTERNAL, a as CorsairInternalConfig, c as createCorsair, s as shouldStartTunnel, b as superviseTunnel } from './index-B7db41xb.js';
|
|
2
|
+
import { A as AuthTypes, f as AccountKeyManagerFor, I as IntegrationKeyManagerFor, H as HubConfig, E as EndpointRiskLevel, g as CorsairPluginSubscribeResult } from './index-mt7HsVnu.js';
|
|
3
|
+
export { h as AccountFieldNames, i as AgentMessageRole, j as AgentReply, k as AllProviders, B as BASE_AUTH_FIELDS, l as BaseAuthFieldConfig, m as BaseKeyManager, n as BaseProviders, o as BeforeHookResult, p as BindEndpoints, q as BindWebhooks, r as Bivariant, s as BoundEndpointFn, t as BoundEndpointTree, u as BoundWebhook, v as BoundWebhookTree, w as ChatHandle, x as ChatMessage, y as ChatSummary, z as CorsairChatsNamespace, D as CorsairClient, F as CorsairContext, G as CorsairEndpoint, J as CorsairErrorHandler, c as CorsairIntegration, K as CorsairKeyBuilder, L as CorsairKeyBuilderBase, M as CorsairOAuthWebhookTenantLinkResolver, N as CorsairPermissionsNamespace, C as CorsairPlugin, P as CorsairPluginContext, Q as CorsairPluginSubscribe, R as CorsairRunsNamespace, e as CorsairSingleTenantClient, d as CorsairTenantWrapper, S as CorsairWebhook, T as CorsairWebhookHandler, U as CorsairWebhookMatcher, V as CorsairWebhookTenantMatcher, X as CorsairWorkflowsNamespace, Y as CreateChatResult, Z as EndpointHooks, _ as EndpointMetaEntry, $ as EndpointPathsOf, a0 as EndpointTree, a1 as EnforcePermissionOptions, a2 as EnforcePermissionResult, a3 as ErrorContext, a4 as ErrorHandler, a5 as ErrorHandlerAndMatchFunction, a6 as ErrorMatcher, a7 as IntegrationFieldNames, a8 as KeyBuilderContext, a9 as OAuth2IntegrationCredentials, O as OAuthConfig, aa as PermissionMode, ab as PermissionPolicy, ac as PickAuth, ad as PluginAuthConfig, ae as PluginEndpointMeta, af as PluginPermissionsConfig, ag as ProviderDisplayNames, ah as RawWebhookRequest, ai as ReadonlyForbiddenError, aj as RequiredPluginEndpointMeta, ak as RequiredPluginEndpointSchemas, al as RequiredPluginWebhookSchemas, am as RetryStrategies, an as RetryStrategy, ao as TokenResponse, ap as TriggerRunResult, aq as UnionToIntersection, ar as WebhookHooks, as as WebhookPathsOf, at as WebhookRequest, au as WebhookResponse, W as WebhookTenantMatch, av as WebhookTree, aw as WorkflowRun, ax as WorkflowRunStatus, ay as WorkflowRunStep, az as WorkflowStatus, aA as WorkflowSummary, aB as activeMode, aC as assertModeAllows, aD as assertReadonlyAllowed, aE as exchangeCodeForTokens, aF as formatProviderDisplayName, aG as isReadonlyScopeActive, aH as runReadonly, aI as runWithMode } from './index-mt7HsVnu.js';
|
|
4
|
+
export { A as AuthMissingError, a as AuthType, C as CloudAccess, b as CloudApiError, c as CloudCatalogIntegration, d as CloudConnectSession, e as CloudConnection, f as CloudDeleted, g as CloudDelivery, h as CloudEmbeddedList, i as CloudInstance, j as CloudInstanceApply, k as CloudInstancePlane, l as CloudInstanceRemoval, m as CloudIntegration, n as CloudIntegrationOperations, o as CloudKey, p as CloudKeyRotation, q as CloudLink, r as CloudLinkLine, s as CloudList, t as CloudMcpToken, u as CloudOauthApp, v as CloudOperation, w as CloudProject, x as CloudProjectPlane, y as CloudSigningSecret, z as CloudSigningSecretRotation, B as CloudTenant, D as CloudWebhook, E as CorsairCloudConfig, F as CorsairCloudInstance, G as CorsairCloudInstanceHandle, H as CorsairCloudManage, I as CorsairCloudRegistry, J as CorsairKekMissingError, K as CreateConnectSessionInput, L as CreateInstanceInput, M as CreateTenantInput, N as CreateWebhookInput, O as CredentialSource, P as DocSchemaFieldRow, Q as DocSchemaShape, R as DocsApiEndpoint, S as DocsDbEntity, T as DocsDbFilterField, U as DocsWebhook, V as EndpointSchemaResult, W as IntrospectPluginForDocsResult, X as LinkLine, Y as LinkPolicy, Z as ListOperationsOptions, _ as ListQuery, $ as ManagementApiError, a0 as MintLinkInput, a1 as MintTokenInput, a2 as Permission, a3 as PermissionDecision, a4 as PermissionRequiredError, a5 as PluginDocsIntrospection, a6 as PluginWebhookMatchers, a7 as ProjectStatus, a8 as PutIntegrationInput, a9 as PutOauthAppInput, aa as ReconnectRequiredError, ab as RequestOptions, ac as ResolveConnectLinkResult, ad as RotateWebhookSecretInput, ae as SetAccessInput, af as UpdateInstanceInput, ag as UpdateLinkInput, ah as UpdateTenantInput, ai as V1Transport, aj as WebhookPluginTenantMatch, ak as asRecord, al as buildInstancePlane, am as buildProjectPlane, an as collectPluginWebhookMatchers, ao as corsairCloud, ap as decodePubSubData, aq as extractMicrosoftGraphValidationToken, ar as firstString, as as formatDocSchemaShape, at as getHeader, au as introspectPluginForDocs, av as isMicrosoftGraphValidationHandshake, aw as mapV1Error, ax as matchWebhookPlugin, ay as matchWebhookPluginAndTenant, az as readBodyRecord, aA as readQueryParam, aB as resolveConnectLink, aC as toExternalId } from './tenant-match-utils-6YEqXPZw.js';
|
|
2
5
|
import { CorsairDatabase } from './db.js';
|
|
3
|
-
import { A as AuthTypes, f as AccountKeyManagerFor, I as IntegrationKeyManagerFor, H as HubConfig, E as EndpointRiskLevel, g as CorsairPluginSubscribeResult } from './index-BEutbXHG.js';
|
|
4
|
-
export { h as AccountFieldNames, n as AgentMessageRole, o as AgentReply, v as AllProviders, l as BASE_AUTH_FIELDS, B as BaseAuthFieldConfig, i as BaseKeyManager, w as BaseProviders, a6 as BeforeHookResult, D as BindEndpoints, as as BindWebhooks, aq as Bivariant, F as BoundEndpointFn, G as BoundEndpointTree, at as BoundWebhook, au as BoundWebhookTree, p as ChatHandle, q as ChatMessage, r as ChatSummary, s as CorsairChatsNamespace, u as CorsairClient, J as CorsairContext, K as CorsairEndpoint, N as CorsairErrorHandler, c as CorsairIntegration, a7 as CorsairKeyBuilder, a8 as CorsairKeyBuilderBase, av as CorsairOAuthWebhookTenantLinkResolver, Y as CorsairPermissionsNamespace, C as CorsairPlugin, a9 as CorsairPluginContext, aa as CorsairPluginSubscribe, am as CorsairRunsNamespace, e as CorsairSingleTenantClient, d as CorsairTenantWrapper, aw as CorsairWebhook, ax as CorsairWebhookHandler, ay as CorsairWebhookMatcher, az as CorsairWebhookTenantMatcher, aF as CorsairWorkflowsNamespace, t as CreateChatResult, ab as EndpointHooks, ac as EndpointMetaEntry, L as EndpointPathsOf, M as EndpointTree, Z as EnforcePermissionOptions, _ as EnforcePermissionResult, Q as ErrorContext, R as ErrorHandler, S as ErrorHandlerAndMatchFunction, U as ErrorMatcher, j as IntegrationFieldNames, ad as KeyBuilderContext, k as OAuth2IntegrationCredentials, O as OAuthConfig, ae as PermissionMode, af as PermissionPolicy, x as PickAuth, P as PluginAuthConfig, ag as PluginEndpointMeta, ah as PluginPermissionsConfig, z as ProviderDisplayNames, aA as RawWebhookRequest, a3 as ReadonlyForbiddenError, ai as RequiredPluginEndpointMeta, aj as RequiredPluginEndpointSchemas, ak as RequiredPluginWebhookSchemas, V as RetryStrategies, X as RetryStrategy, T as TokenResponse, aG as TriggerRunResult, ar as UnionToIntersection, al as WebhookHooks, aB as WebhookPathsOf, aC as WebhookRequest, aD as WebhookResponse, W as WebhookTenantMatch, aE as WebhookTree, an as WorkflowRun, ao as WorkflowRunStatus, ap as WorkflowRunStep, aH as WorkflowStatus, aI as WorkflowSummary, $ as activeMode, a0 as assertModeAllows, a1 as assertReadonlyAllowed, m as exchangeCodeForTokens, y as formatProviderDisplayName, a2 as isReadonlyScopeActive, a4 as runReadonly, a5 as runWithMode } from './index-BEutbXHG.js';
|
|
5
|
-
export { A as AuthMissingError, ab as AuthType, ah as CloudAccess, g as CloudApiError, ak as CloudCatalogIntegration, ar as CloudConnectSession, ai as CloudConnection, aA as CloudDeleted, an as CloudDelivery, aB as CloudEmbeddedList, af as CloudInstance, aw as CloudInstanceApply, Q as CloudInstancePlane, ax as CloudInstanceRemoval, aj as CloudIntegration, az as CloudIntegrationOperations, au as CloudKey, av as CloudKeyRotation, ap as CloudLink, ao as CloudLinkLine, K as CloudList, aq as CloudMcpToken, al as CloudOauthApp, ay as CloudOperation, aC as CloudProject, a1 as CloudProjectPlane, as as CloudSigningSecret, at as CloudSigningSecretRotation, ag as CloudTenant, am as CloudWebhook, a as CorsairCloudConfig, b as CorsairCloudInstance, c as CorsairCloudInstanceHandle, d as CorsairCloudManage, e as CorsairCloudRegistry, C as CorsairKekMissingError, S as CreateConnectSessionInput, a2 as CreateInstanceInput, T as CreateTenantInput, U as CreateWebhookInput, ad as CredentialSource, D as DocSchemaFieldRow, i as DocSchemaShape, j as DocsApiEndpoint, k as DocsDbEntity, l as DocsDbFilterField, m as DocsWebhook, E as EndpointSchemaResult, I as IntrospectPluginForDocsResult, a3 as LinkLine, a4 as LinkPolicy, L as ListOperationsOptions, N as ListQuery, M as ManagementApiError, a5 as MintLinkInput, a6 as MintTokenInput, aa as Permission, ac as PermissionDecision, p as PermissionRequiredError, P as PluginDocsIntrospection, u as PluginWebhookMatchers, ae as ProjectStatus, X as PutIntegrationInput, Y as PutOauthAppInput, R as ReconnectRequiredError, O as RequestOptions, h as ResolveConnectLinkResult, Z as RotateWebhookSecretInput, _ as SetAccessInput, a7 as UpdateInstanceInput, a8 as UpdateLinkInput, $ as UpdateTenantInput, V as V1Transport, W as WebhookPluginTenantMatch, v as asRecord, a0 as buildInstancePlane, a9 as buildProjectPlane, q as collectPluginWebhookMatchers, f as corsairCloud, w as decodePubSubData, x as extractMicrosoftGraphValidationToken, y as firstString, n as formatDocSchemaShape, z as getHeader, o as introspectPluginForDocs, B as isMicrosoftGraphValidationHandshake, J as mapV1Error, s as matchWebhookPlugin, t as matchWebhookPluginAndTenant, F as readBodyRecord, G as readQueryParam, r as resolveConnectLink, H as toExternalId } from './tenant-match-utils-DBGMMPn-.js';
|
|
6
|
-
import 'kysely';
|
|
7
6
|
import 'zod';
|
|
7
|
+
import './orm.js';
|
|
8
|
+
import 'kysely';
|
|
8
9
|
import 'pg';
|
|
9
10
|
import 'postgres';
|
|
10
|
-
import './orm.js';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Context interface with account ID resolver for logging events.
|
|
@@ -15,6 +15,9 @@ import './orm.js';
|
|
|
15
15
|
interface EventLoggingContext {
|
|
16
16
|
database?: CorsairDatabase | undefined;
|
|
17
17
|
$getAccountId: () => Promise<string>;
|
|
18
|
+
/** When true, `logEventFromContext` seals the payload with the account DEK. */
|
|
19
|
+
encryptDataAtRest?: boolean;
|
|
20
|
+
kek?: string;
|
|
18
21
|
}
|
|
19
22
|
/**
|
|
20
23
|
* Logs an event to the corsair_events table.
|
|
@@ -26,7 +29,7 @@ interface EventLoggingContext {
|
|
|
26
29
|
* @param status - The event status (defaults to 'pending')
|
|
27
30
|
* @returns The event ID if successful, null if failed
|
|
28
31
|
*/
|
|
29
|
-
declare function logEvent(database: CorsairDatabase | undefined, accountId: string, eventType: string, payload: Record<string, unknown>, status?: 'pending' | 'processing' | 'completed' | 'failed'): Promise<string | null>;
|
|
32
|
+
declare function logEvent(database: CorsairDatabase | undefined, accountId: string, eventType: string, payload: Record<string, unknown>, status?: 'pending' | 'processing' | 'completed' | 'failed', kek?: string): Promise<string | null>;
|
|
30
33
|
/**
|
|
31
34
|
* Logs an event from a plugin context, automatically resolving the account ID.
|
|
32
35
|
* This is a convenience wrapper around `logEvent` for use in plugin endpoints.
|
package/dist/core.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$b as
|
|
1
|
+
import{$b as O,Ab as D,Bb as E,Cb as F,D as m,Db as G,E as n,Eb as H,F as o,G as p,Sb as I,Tb as J,Ub as K,Vb as L,Zb as M,_b as N,a,ac as P,b,ba as q,bb as A,bc as Q,c,ca as r,cc as R,dc as S,ec as T,fa as s,fc as U,ga as t,gc as V,ha as u,hc as W,ia as v,ic as X,ja as w,jc as Y,ka as x,kc as Z,la as y,lc as _,ma as z,mc as $,nc as aa,oc as ba,pc as ca,qc as da,rc as ea,yb as B,zb as C}from"./chunk-JAIV6R7Z.js";import"./chunk-6IURNA4L.js";import"./chunk-XCTHEKDP.js";import{h as d,n as e,o as f,p as g,q as h,r as i,s as j,t as k,u as l}from"./chunk-WUEWJTDA.js";import"./chunk-XPXWKPFZ.js";import"./chunk-Z2KT4F2U.js";import"./chunk-SOY77BN4.js";export{A as AuthMissingError,d as BASE_AUTH_FIELDS,ba as CORSAIR_INTERNAL,G as CloudApiError,B as CorsairKekMissingError,C as DB_METHOD_RISK,P as MS_GRAPH_API_BASE,z as ManagementApiError,r as PermissionRequiredError,a as ProviderDisplayNames,s as ReadonlyForbiddenError,c as ReconnectRequiredError,u as activeMode,W as asRecord,y as assertModeAllows,x as assertReadonlyAllowed,F as callPluginDb,T as collectPluginWebhookMatchers,H as corsairCloud,n as createAccountKeyManager,ca as createCorsair,m as createIntegrationKeyManager,E as decodeDbArgs,aa as decodePubSubData,k as decryptConfig,g as decryptDEK,i as decryptWithDEK,D as encodeDbArgs,j as encryptConfig,f as encryptDEK,h as encryptWithDEK,K as exchangeCodeForTokens,Z as extractMicrosoftGraphValidationToken,$ as firstString,M as formatDocSchemaShape,b as formatProviderDisplayName,e as generateDEK,U as getHeader,L as getOAuthAccessToken,O as googleChannelSubscribe,p as initializeAccountDEK,o as initializeIntegrationDEK,N as introspectPluginForDocs,_ as isMicrosoftGraphValidationHandshake,w as isReadonlyScopeActive,I as logEvent,J as logEventFromContext,R as matchWebhookPlugin,S as matchWebhookPluginAndTenant,Q as msGraphSubscribe,l as reEncryptConfig,X as readBodyRecord,Y as readQueryParam,q as resolveConnectLink,v as runReadonly,t as runWithMode,da as shouldStartTunnel,ea as superviseTunnel,V as toExternalId};
|
package/dist/hub.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { aY as HubOAuthMode, A as AuthTypes, aZ as HubConnectSessionResult, a_ as HubPermissionSessionResult, H as HubConfig, a$ as HubConfigInput, b0 as HubConnectSessionInput, b1 as HubListProjectConnectionsInput, f as AccountKeyManagerFor, b2 as HubPermissionSessionInput } from './index-
|
|
2
|
-
export { b3 as DEFAULT_HUB_API_URL, b4 as HubEnvironmentSlug,
|
|
3
|
-
import {
|
|
4
|
-
export { n as BROWSER_DELIVERY_TTL_MS, o as BrowserDeliveryMode, B as BrowserDeliveryPayload, S as SIGNED_TUNNEL_REPLAY_WINDOW_MS,
|
|
5
|
-
export { b as buildBrowserDeliveryRedirectUrl, s as signBrowserDeliveryToken, v as verifyBrowserDeliveryToken } from './browser-delivery-
|
|
1
|
+
import { aY as HubOAuthMode, A as AuthTypes, aZ as HubConnectSessionResult, a_ as HubPermissionSessionResult, H as HubConfig, a$ as HubConfigInput, b0 as HubConnectSessionInput, b1 as HubListProjectConnectionsInput, f as AccountKeyManagerFor, b2 as HubPermissionSessionInput } from './index-mt7HsVnu.js';
|
|
2
|
+
export { b3 as DEFAULT_HUB_API_URL, b4 as HubEnvironmentSlug, aF as formatProviderDisplayName } from './index-mt7HsVnu.js';
|
|
3
|
+
import { R as RunResultPayload, P as ProbeResultPayload, h as TunnelType, c as ProcessCorsairRequest, m as WebhookTenantLink } from './index-C4Q-Nj2c.js';
|
|
4
|
+
export { n as BROWSER_DELIVERY_TTL_MS, o as BrowserDeliveryMode, B as BrowserDeliveryPayload, S as SIGNED_TUNNEL_REPLAY_WINDOW_MS, g as TunnelEnvelope } from './index-C4Q-Nj2c.js';
|
|
5
|
+
export { b as buildBrowserDeliveryRedirectUrl, s as signBrowserDeliveryToken, v as verifyBrowserDeliveryToken } from './browser-delivery-tqFM2jpE.js';
|
|
6
6
|
import 'zod';
|
|
7
7
|
import './db.js';
|
|
8
8
|
import 'kysely';
|
package/dist/hub.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{$a as ca,A as z,Aa as T,B as A,Ba as U,C as B,Ca as V,Da as W,L as C,Qa as X,Ra as Y,Sa as Z,Xa as _,Ya as $,Za as aa,_a as ba,aa as D,ab as da,b as a,cb as ea,d as b,da as E,db as fa,e as c,ea as F,eb as ga,f as d,fb as ha,g as e,gb as ia,h as f,hb as ja,i as g,ib as ka,j as i,jb as la,k as j,kb as ma,l as k,lb as na,m as l,mb as oa,n as m,na as G,nb as pa,o as n,oa as H,ob as qa,p as o,pa as I,pb as ra,q as p,qa as J,qb as sa,r as q,ra as K,rb as ta,s as r,sa as L,sb as ua,t as s,ta as M,tb as va,u as t,ua as N,ub as wa,v as u,va as O,vb as xa,w as v,wa as P,wb as ya,x as w,xa as Q,xb as za,y as x,ya as R,z as y,za as S}from"./chunk-JAIV6R7Z.js";import{a as h,b as Aa,c as Ba,d as Ca,e as Da,f as Ea}from"./chunk-6IURNA4L.js";import"./chunk-XCTHEKDP.js";import"./chunk-WUEWJTDA.js";import"./chunk-XPXWKPFZ.js";import"./chunk-Z2KT4F2U.js";import"./chunk-SOY77BN4.js";export{m as BROWSER_DELIVERY_TTL_MS,Ba as CORSAIR_TUNNEL_PATH,Aa as CORSAIR_TUNNEL_ZONE,u as DEFAULT_HUB_API_URL,Ca as FRPC_VERSION,w as HubCredentialsMissingError,v as HubNotConfiguredError,V as ManagedOAuthDeliveryError,n as SIGNED_TUNNEL_REPLAY_WINDOW_MS,fa as attachManagedRefreshAuth,p as buildBrowserDeliveryRedirectUrl,s as buildClientBridgeBrowserDeliveryUrl,la as createConnectSessionJti,qa as createConnectTokenJti,D as createHubConnectSession,E as createHubPermissionSession,ka as createHubRouteHandlers,ia as createManagedPricingCredentialCache,wa as createPermissionSessionJti,o as createSignedTokenJti,pa as decodeConnectSessionTokenFromPath,va as decodeConnectTokenFromPath,za as decodePermissionTokenFromPath,Q as deliverConnectCreateLink,U as deliverSignedEnvelope,S as describeDeliveryNetworkError,ua as encodeConnectTokenForPath,O as extractConnectLinkFromDeliveryAck,H as extractProbeFromDeliveryAck,G as extractRunFromDeliveryAck,N as extractSyncFromDeliveryAck,F as formatHubApprovalMessage,a as formatProviderDisplayName,T as formatServerDeliveryError,Da as frpcPlatformKey,ma as getConnectSessionExpiryMs,X as getConnectStatusForTenant,ra as getConnectTokenExpiryMs,z as getHubConfig,ea as getManagedAccessToken,ha as getManagedPricingApiKey,_ as handleHubDeliveryGet,$ as handleHubDeliveryPost,ba as handleHubDeliveryRequest,aa as hubDeliveryToResponse,B as inferHubEnvironmentSlug,i as isLoopbackUrl,M as isServerDeliveryAckSuccessful,Y as listHubProjectConnections,x as normalizeHubConfig,P as parseConnectLinkFromDeliveryBody,b as parseConnectSessionResponse,f as parseConnectStatusResponse,g as parseHubApiErrorBody,Z as parseManagedPricingCredentialsResponse,e as parseOAuthRefreshResponse,d as parsePermissionSessionResponse,c as parseProjectConnectionsResponse,L as parseServerDeliveryAckBody,R as parseSyncFromDeliveryBody,t as prepareClientBridgeDeliveryTransport,W as processManagedOAuthDelivery,C as registerHubWebhookTenantLink,ga as requireHubForManagedPricing,j as resolveDeliveryTransport,Ea as resolveFrpcBinary,y as resolveHubConfigInput,h as resolveHubDeliveryUrl,A as resolveHubOAuthCallbackUrl,ja as resolveManagedPricingApiKey,ca as respondToHubDelivery,da as respondToHubDeliveryFromRequest,q as signBrowserDeliveryToken,na as signConnectSessionToken,sa as signConnectToken,I as signDeliveryEnvelope,xa as signPermissionToken,k as usesBrowserDelivery,l as validateProductionDeliveryUrl,r as verifyBrowserDeliveryToken,oa as verifyConnectSessionToken,ta as verifyConnectToken,J as verifyDeliveryEnvelope,ya as verifyPermissionToken,K as verifySignedTunnelDelivery};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CorsairDatabase } from './db.js';
|
|
2
|
-
import { C as CorsairPlugin, a as CorsairPermissionsOptions, b as CorsairManualConfig, H as HubConfig, c as CorsairIntegration, d as CorsairTenantWrapper, e as CorsairSingleTenantClient } from './index-
|
|
2
|
+
import { C as CorsairPlugin, a as CorsairPermissionsOptions, b as CorsairManualConfig, H as HubConfig, c as CorsairIntegration, d as CorsairTenantWrapper, e as CorsairSingleTenantClient } from './index-mt7HsVnu.js';
|
|
3
3
|
|
|
4
4
|
declare const CORSAIR_INTERNAL: unique symbol;
|
|
5
5
|
type CorsairInternalConfig = {
|
|
@@ -10,6 +10,7 @@ type CorsairInternalConfig = {
|
|
|
10
10
|
permissions?: CorsairPermissionsOptions;
|
|
11
11
|
manual?: CorsairManualConfig;
|
|
12
12
|
hub?: HubConfig;
|
|
13
|
+
encryptDataAtRest: boolean;
|
|
13
14
|
};
|
|
14
15
|
/**
|
|
15
16
|
* Creates a Corsair integration with multi-tenancy enabled.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { W as WebhookTenantMatch, A as AuthTypes } from './index-
|
|
1
|
+
import { W as WebhookTenantMatch, A as AuthTypes } from './index-mt7HsVnu.js';
|
|
2
2
|
import { CorsairDatabase, CorsairAccount } from './db.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -268,4 +268,4 @@ type ProcessCorsairOptions = {
|
|
|
268
268
|
};
|
|
269
269
|
declare function processCorsair(corsair: unknown, request: ProcessCorsairRequest, options?: ProcessCorsairOptions): Promise<TunnelAck>;
|
|
270
270
|
|
|
271
|
-
export { type BrowserDeliveryPayload as B, type OAuthCallbackTunnelPayload as O, type ProbeResultPayload as P, type RunResultPayload as R, SIGNED_TUNNEL_REPLAY_WINDOW_MS as S, type TunnelAck as T, type WebhookTunnelPayload as W, type
|
|
271
|
+
export { type BrowserDeliveryPayload as B, type OAuthCallbackTunnelPayload as O, type ProbeResultPayload as P, type RunResultPayload as R, SIGNED_TUNNEL_REPLAY_WINDOW_MS as S, type TunnelAck as T, type WebhookTunnelPayload as W, type OAuthTokensTunnelPayload as a, type ProcessCorsairOptions as b, type ProcessCorsairRequest as c, type RunStepResult as d, type RunTriggerType as e, type RunTunnelPayload as f, type TunnelEnvelope as g, type TunnelType as h, applyPermissionDecision as i, resolveTenantFromWebhookLink as j, resolveTenantIdFromWebhookLink as k, type ResolveAccountFromWebhookLinkInput as l, type WebhookTenantLink as m, BROWSER_DELIVERY_TTL_MS as n, type BrowserDeliveryMode as o, processCorsair as p, resolveAccountFromWebhookLink as r, setWebhookTenantLink as s };
|