@corsair-dev/xquik 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/LICENSE +191 -0
  2. package/dist/api.test.d.ts +2 -0
  3. package/dist/api.test.d.ts.map +1 -0
  4. package/dist/client.d.ts +22 -0
  5. package/dist/client.d.ts.map +1 -0
  6. package/dist/endpoints/helpers.d.ts +8 -0
  7. package/dist/endpoints/helpers.d.ts.map +1 -0
  8. package/dist/endpoints/index.d.ts +9 -0
  9. package/dist/endpoints/index.d.ts.map +1 -0
  10. package/dist/endpoints/media.d.ts +4 -0
  11. package/dist/endpoints/media.d.ts.map +1 -0
  12. package/dist/endpoints/trends.d.ts +3 -0
  13. package/dist/endpoints/trends.d.ts.map +1 -0
  14. package/dist/endpoints/tweets.d.ts +10 -0
  15. package/dist/endpoints/tweets.d.ts.map +1 -0
  16. package/dist/endpoints/types.d.ts +1293 -0
  17. package/dist/endpoints/types.d.ts.map +1 -0
  18. package/dist/endpoints/users.d.ts +10 -0
  19. package/dist/endpoints/users.d.ts.map +1 -0
  20. package/dist/endpoints/webhooks.d.ts +8 -0
  21. package/dist/endpoints/webhooks.d.ts.map +1 -0
  22. package/dist/endpoints/write-actions.d.ts +3 -0
  23. package/dist/endpoints/write-actions.d.ts.map +1 -0
  24. package/dist/error-handlers.d.ts +47 -0
  25. package/dist/error-handlers.d.ts.map +1 -0
  26. package/dist/index.d.ts +805 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +1 -0
  29. package/dist/schema/database.d.ts +125 -0
  30. package/dist/schema/database.d.ts.map +1 -0
  31. package/dist/schema/index.d.ts +130 -0
  32. package/dist/schema/index.d.ts.map +1 -0
  33. package/dist/tsup.config.d.ts +3 -0
  34. package/dist/tsup.config.d.ts.map +1 -0
  35. package/dist/webhooks/events.d.ts +4 -0
  36. package/dist/webhooks/events.d.ts.map +1 -0
  37. package/dist/webhooks/index.d.ts +56 -0
  38. package/dist/webhooks/index.d.ts.map +1 -0
  39. package/dist/webhooks/types.d.ts +15 -0
  40. package/dist/webhooks/types.d.ts.map +1 -0
  41. package/package.json +46 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ var Xe=Object.defineProperty;var q=(t,o)=>{for(var s in o)Xe(t,s,{get:o[s],enumerable:!0})};var T={};q(T,{download:()=>Re,uploadFromUrl:()=>ve});import{logEventFromContext as V}from"corsair/core";import{ApiError as K,request as Se}from"corsair/http";var Ue="https://xquik.com/api/v1",Ie="2026-04-29",k=class extends Error{constructor(s,p,u){super(s,u);this.code=p;this.name="XquikAPIError",u?.cause instanceof K&&(this.body=u.cause.body,this.rateLimitLimit=u.cause.rateLimitLimit,this.rateLimitRemaining=u.cause.rateLimitRemaining,this.rateLimitReset=u.cause.rateLimitReset,this.retryAfter=u.cause.retryAfter,this.status=u.cause.status,this.statusText=u.cause.statusText)}body;rateLimitLimit;rateLimitRemaining;rateLimitReset;retryAfter;status;statusText};async function n(t,o,s={}){let{baseUrl:p=Ue,body:u,method:g="GET",query:I}=s,Ee={BASE:p,CREDENTIALS:"omit",HEADERS:{"Content-Type":"application/json","x-api-key":o,"xquik-api-contract":Ie},TOKEN:void 0,VERSION:"1.0.0",WITH_CREDENTIALS:!1},Te={body:g==="GET"?void 0:u,mediaType:"application/json; charset=utf-8",method:g,query:g==="GET"?I:void 0,url:t};try{return await Se(Ee,Te)}catch(y){throw y instanceof K?new k(y.message,y.status,{cause:y}):y instanceof Error?new k(y.message,void 0,{cause:y}):new k("Unknown Xquik API error")}}function i(t){return t.baseUrl}function v(t){return t.join(",")}function R(t){return{anyWords:t.anyWords,cashtags:t.cashtags,conversationId:t.conversationId,exactPhrase:t.exactPhrase,excludeWords:t.excludeWords,fromUser:t.fromUser,hashtags:t.hashtags,inReplyToTweetId:t.inReplyToTweetId,language:t.language,mediaType:t.mediaType,mentioning:t.mentioning,minFaves:t.minFaves,minQuotes:t.minQuotes,minReplies:t.minReplies,minRetweets:t.minRetweets,quotes:t.quotes,quotesOfTweetId:t.quotesOfTweetId,replies:t.replies,retweets:t.retweets,retweetsOfTweetId:t.retweetsOfTweetId,sinceDate:t.sinceDate,toUser:t.toUser,untilDate:t.untilDate,url:t.url,verifiedOnly:t.verifiedOnly}}var ve=async(t,o)=>{let s=await n("/x/media",t.key,{baseUrl:i(t.options),body:o,method:"POST"});return await V(t,"xquik.media.uploadFromUrl",{account:o.account},"completed"),s},Re=async(t,o)=>{let s=await n("/x/media/download",t.key,{baseUrl:i(t.options),body:o,method:"POST"});return await V(t,"xquik.media.download",{bulk:o.tweetIds!==void 0},"completed"),s};var A={};q(A,{get:()=>Pe});import{logEventFromContext as Ae}from"corsair/core";var Pe=async(t,o)=>{let s=await n("/x/trends",t.key,{baseUrl:i(t.options),query:{count:o.count,woeid:o.woeid}});return await Ae(t,"xquik.trends.get",{woeid:o.woeid??1},"completed"),s};var c={};q(c,{batch:()=>Ce,create:()=>Oe,deleteTweet:()=>De,get:()=>We,like:()=>Fe,retweet:()=>Me,search:()=>Le,unlike:()=>Ge});import{logEventFromContext as m}from"corsair/core";var Ce=async(t,o)=>{let s=await n("/x/tweets",t.key,{baseUrl:i(t.options),query:{ids:v(o.ids)}});return await m(t,"xquik.tweets.batch",{count:o.ids.length},"completed"),s},We=async(t,o)=>{let s=await n(`/x/tweets/${o.id}`,t.key,{baseUrl:i(t.options)});return await m(t,"xquik.tweets.get",{id:o.id},"completed"),s},Le=async(t,o)=>{let s=await n("/x/tweets/search",t.key,{baseUrl:i(t.options),query:{...R(o),cursor:o.cursor,limit:o.limit,q:o.q,queryType:o.queryType,sinceTime:o.sinceTime,untilTime:o.untilTime}});return await m(t,"xquik.tweets.search",{q:o.q},"completed"),s},Oe=async(t,o)=>{let s=await n("/x/tweets",t.key,{baseUrl:i(t.options),body:o,method:"POST"});return await m(t,"xquik.tweets.create",{account:o.account,pending:"status"in s&&s.status==="pending_confirmation"},"completed"),s},De=async(t,o)=>{let s=await n(`/x/tweets/${o.id}`,t.key,{baseUrl:i(t.options),body:{account:o.account},method:"DELETE"});return await m(t,"xquik.tweets.delete",{id:o.id},"completed"),s},Fe=async(t,o)=>{let s=await n(`/x/tweets/${o.id}/like`,t.key,{baseUrl:i(t.options),body:{account:o.account},method:"POST"});return await m(t,"xquik.tweets.like",{id:o.id},"completed"),s},Ge=async(t,o)=>{let s=await n(`/x/tweets/${o.id}/like`,t.key,{baseUrl:i(t.options),body:{account:o.account},method:"DELETE"});return await m(t,"xquik.tweets.unlike",{id:o.id},"completed"),s},Me=async(t,o)=>{let s=await n(`/x/tweets/${o.id}/retweet`,t.key,{baseUrl:i(t.options),body:{account:o.account},method:"POST"});return await m(t,"xquik.tweets.retweet",{id:o.id},"completed"),s};var d={};q(d,{batch:()=>Be,follow:()=>$e,followers:()=>Ne,following:()=>He,get:()=>_e,search:()=>ze,tweets:()=>je,unfollow:()=>Qe});import{logEventFromContext as h}from"corsair/core";var Be=async(t,o)=>{let s=await n("/x/users/batch",t.key,{baseUrl:i(t.options),query:{ids:v(o.ids)}});return await h(t,"xquik.users.batch",{count:o.ids.length},"completed"),s},_e=async(t,o)=>{let s=await n(`/x/users/${o.id}`,t.key,{baseUrl:i(t.options)});return await h(t,"xquik.users.get",{id:o.id},"completed"),s},ze=async(t,o)=>{let s=await n("/x/users/search",t.key,{baseUrl:i(t.options),query:{cursor:o.cursor,q:o.q}});return await h(t,"xquik.users.search",{q:o.q},"completed"),s},je=async(t,o)=>{let s=await n(`/x/users/${o.id}/tweets`,t.key,{baseUrl:i(t.options),query:{...R(o),cursor:o.cursor,includeParentTweet:o.includeParentTweet,includeReplies:o.includeReplies,pageSize:o.pageSize}});return await h(t,"xquik.users.tweets",{id:o.id},"completed"),s},Ne=async(t,o)=>{let s=await n(`/x/users/${o.id}/followers`,t.key,{baseUrl:i(t.options),query:{cursor:o.cursor,pageSize:o.pageSize}});return await h(t,"xquik.users.followers",{id:o.id},"completed"),s},He=async(t,o)=>{let s=await n(`/x/users/${o.id}/following`,t.key,{baseUrl:i(t.options),query:{cursor:o.cursor,pageSize:o.pageSize}});return await h(t,"xquik.users.following",{id:o.id},"completed"),s},$e=async(t,o)=>{let s=await n(`/x/users/${o.id}/follow`,t.key,{baseUrl:i(t.options),body:{account:o.account},method:"POST"});return await h(t,"xquik.users.follow",{id:o.id},"completed"),s},Qe=async(t,o)=>{let s=await n(`/x/users/${o.id}/follow`,t.key,{baseUrl:i(t.options),body:{account:o.account},method:"DELETE"});return await h(t,"xquik.users.unfollow",{id:o.id},"completed"),s};var w={};q(w,{create:()=>Ve,deactivate:()=>Ye,deliveries:()=>Ze,list:()=>Ke,test:()=>et,update:()=>Je});import{logEventFromContext as x}from"corsair/core";var Ke=async t=>{let o=await n("/webhooks",t.key,{baseUrl:i(t.options)});return await x(t,"xquik.webhooks.list",{count:o.webhooks.length},"completed"),o},Ve=async(t,o)=>{let s=await n("/webhooks",t.key,{baseUrl:i(t.options),body:o,method:"POST"});return await x(t,"xquik.webhooks.create",{eventTypes:o.eventTypes},"completed"),s},Je=async(t,o)=>{let{id:s,...p}=o,u=await n(`/webhooks/${s}`,t.key,{baseUrl:i(t.options),body:p,method:"PATCH"});return await x(t,"xquik.webhooks.update",{id:s},"completed"),u},Ye=async(t,o)=>{let s=await n(`/webhooks/${o.id}`,t.key,{baseUrl:i(t.options),method:"DELETE"});return await x(t,"xquik.webhooks.deactivate",{id:o.id},"completed"),s},Ze=async(t,o)=>{let s=await n(`/webhooks/${o.id}/deliveries`,t.key,{baseUrl:i(t.options)});return await x(t,"xquik.webhooks.deliveries",{id:o.id},"completed"),s},et=async(t,o)=>{let s=await n(`/webhooks/${o.id}/test`,t.key,{baseUrl:i(t.options),method:"POST"});return await x(t,"xquik.webhooks.test",{id:o.id,success:s.success},"completed"),s};var P={};q(P,{get:()=>ot});import{logEventFromContext as tt}from"corsair/core";var ot=async(t,o)=>{let s=await n(`/x/write-actions/${o.id}`,t.key,{baseUrl:i(t.options)});return await tt(t,"xquik.writeActions.get",{id:o.id},"completed"),s};import{z as e}from"zod";var ee=e.enum(["tweet.new","tweet.quote","tweet.reply","tweet.retweet"]),G=e.array(ee).min(1),J=e.string().regex(/^\d{4}-\d{2}-\d{2}$/),f=e.string(),S=e.string().min(1),M=e.string().min(1),B=e.string().min(1),st=e.enum(["gifs","images","links","media","none","videos"]),O=e.enum(["exclude","include","only"]),te=e.object({anyWords:e.string().optional(),cashtags:e.string().optional(),conversationId:e.string().optional(),exactPhrase:e.string().optional(),excludeWords:e.string().optional(),fromUser:e.string().optional(),hashtags:e.string().optional(),inReplyToTweetId:e.string().optional(),language:e.string().optional(),mediaType:st.optional(),mentioning:e.string().optional(),minFaves:e.number().int().min(0).optional(),minQuotes:e.number().int().min(0).optional(),minReplies:e.number().int().min(0).optional(),minRetweets:e.number().int().min(0).optional(),quotes:O.optional(),quotesOfTweetId:e.string().optional(),replies:O.optional(),retweets:O.optional(),retweetsOfTweetId:e.string().optional(),sinceDate:J.optional(),toUser:e.string().optional(),untilDate:J.optional(),url:e.string().optional(),verifiedOnly:e.boolean().optional()}),_=e.object({cursor:e.string().optional()}),oe=e.object({account:B}),se=e.object({mediaUrl:e.string().optional(),type:e.enum(["animated_gif","photo","video"]).optional(),url:e.string().optional()}).passthrough(),U=e.object({coverPicture:e.string().optional(),createdAt:e.string().optional(),description:e.string().optional(),followers:e.number().int().optional(),following:e.number().int().optional(),id:e.string(),location:e.string().optional(),name:e.string(),profilePicture:e.string().optional(),statusesCount:e.number().int().optional(),username:e.string(),verified:e.boolean().optional()}).passthrough(),nt=e.object({followers:e.number().int(),id:e.string(),profilePicture:e.string().optional(),username:e.string(),verified:e.boolean()}).passthrough(),z=e.object({author:U.optional(),bookmarkCount:e.number().int().optional(),conversationId:e.string().optional(),createdAt:e.string().optional(),entities:e.record(e.string(),e.unknown()).optional(),id:e.string(),inReplyToId:e.string().optional(),inReplyToUserId:e.string().optional(),inReplyToUsername:e.string().optional(),isLimitedReply:e.boolean().optional(),isNoteTweet:e.boolean().optional(),isQuoteStatus:e.boolean().optional(),isReply:e.boolean().optional(),lang:e.string().optional(),likeCount:e.number().int().optional(),media:e.array(se).optional(),quoteCount:e.number().int().optional(),replyCount:e.number().int().optional(),retweetCount:e.number().int().optional(),source:e.string().optional(),text:e.string(),type:e.string().optional(),url:e.string().optional(),viewCount:e.number().int().optional()}).passthrough(),j=e.object({bookmarkCount:e.number().int(),conversationId:e.string().optional(),createdAt:e.string().optional(),entities:e.record(e.string(),e.unknown()).optional(),id:e.string(),isNoteTweet:e.boolean().optional(),isQuoteStatus:e.boolean().optional(),isReply:e.boolean().optional(),likeCount:e.number().int(),media:e.array(se).optional(),quoteCount:e.number().int(),replyCount:e.number().int(),retweetCount:e.number().int(),source:e.string().optional(),text:e.string(),viewCount:e.number().int()}).passthrough(),D=e.object({has_next_page:e.boolean(),next_cursor:e.string().nullable().optional(),tweets:e.array(z)}),C=e.object({has_next_page:e.boolean(),next_cursor:e.string().nullable().optional(),users:e.array(U)}),it=e.object({author:nt.optional(),tweet:j}),b=e.object({success:e.literal(!0)}).passthrough(),rt=e.object({charged:e.boolean(),error:e.literal("x_write_unconfirmed"),message:e.string().optional(),retryable:e.literal(!1),status:e.literal("pending_confirmation"),writeActionId:e.string()}),at=e.union([e.object({success:e.literal(!0),tweetId:e.string()}),rt]),ut=e.object({action:e.string(),charged:e.boolean(),confirmationAttempts:e.number().int().optional(),confirmationCheckedAt:e.string().optional(),confirmationSource:e.string().nullable().optional(),confirmedAt:e.string().optional(),createdAt:e.string(),message:e.string().optional(),messageId:e.string().optional(),retryable:e.boolean(),sendDispatched:e.boolean(),sendDispatchedAt:e.string().optional(),status:e.enum(["failed","pending_confirmation","success"]),targetId:e.string().nullable().optional(),tweetId:e.string().optional(),writeActionId:e.string()}).passthrough(),pt=e.object({description:e.string().optional(),name:e.string(),query:e.string().optional(),rank:e.number().int().optional()}).passthrough(),ct=e.object({count:e.number().int(),trends:e.array(pt),woeid:e.number().int()}),dt=e.object({mediaId:e.string(),mediaUrl:e.string().url(),success:e.literal(!0)}),lt=e.object({cacheHit:e.boolean().optional(),galleryUrl:e.string().optional(),totalMedia:e.number().int().optional(),totalTweets:e.number().int().optional(),tweetId:e.string().optional()}).passthrough(),X=e.object({createdAt:f,eventTypes:G,id:e.string(),isActive:e.boolean(),url:e.string().url()}),N=e.object({attempts:e.number().int(),createdAt:f,deliveredAt:f.optional(),id:e.string(),lastError:e.string().optional(),lastStatusCode:e.number().int().optional(),status:e.string(),streamEventId:e.string()}),l=e.object({data:e.record(e.string(),e.unknown()),deliveryId:e.string().optional(),eventType:e.union([ee,e.literal("webhook.test")]),occurredAt:f.optional(),query:e.string().optional(),schemaVersion:e.string().optional(),streamEventId:e.string().optional(),timestamp:f.optional(),username:e.string().optional()}).passthrough(),wt=e.object({error:e.string().optional(),statusCode:e.number().int(),success:e.boolean()}),kt=e.object({ids:e.array(S).min(1).max(100)}),mt=e.object({id:S}),ht=te.merge(_).extend({limit:e.number().int().min(1).max(200).optional(),q:e.string().min(1),queryType:e.enum(["Latest","Top"]).optional(),sinceTime:f.optional(),untilTime:f.optional()}),yt=e.object({account:B,attachment_url:e.string().url().optional(),community_id:e.string().optional(),is_note_tweet:e.boolean().optional(),media:e.array(e.string().url()).max(4).optional(),reply_to_tweet_id:e.string().optional(),text:e.string().optional()}).refine(t=>t.text!==void 0&&t.text.length>0||t.media!==void 0&&t.media.length>0,{message:"Provide text, media, or both."}),W=oe.extend({id:S}),bt=e.object({ids:e.array(M).min(1).max(100)}),H=e.object({id:M}),ft=_.extend({q:e.string().min(1)}),ne=_.extend({pageSize:e.number().int().min(20).max(200).optional()}),gt=H.merge(ne).merge(te).extend({includeParentTweet:e.boolean().optional(),includeReplies:e.boolean().optional()}),Y=H.merge(ne),Z=oe.extend({id:M}),qt=e.object({count:e.number().int().min(1).max(50).optional(),woeid:e.number().int().optional()}),xt=e.object({account:B,url:e.string().url()}),Et=e.object({tweetId:S.optional(),tweetIds:e.array(S).max(50).optional(),tweetInput:e.string().optional(),tweetUrl:e.string().url().optional()}).refine(t=>t.tweetInput!==void 0||t.tweetId!==void 0||t.tweetUrl!==void 0||t.tweetIds!==void 0&&t.tweetIds.length>0,{message:"Provide tweetInput, tweetId, tweetUrl, or tweetIds."}),Tt=e.object({id:e.string().min(1)}),Xt=e.object({}),St=e.object({eventTypes:G,url:e.string().url()}),Ut=e.object({eventTypes:G.optional(),id:e.string().min(1),isActive:e.boolean().optional(),url:e.string().url().optional()}).refine(t=>t.eventTypes!==void 0||t.isActive!==void 0||t.url!==void 0,{message:"Provide at least one webhook field to update."}),F=e.object({id:e.string().min(1)}),r={mediaDownload:Et,mediaUploadFromUrl:xt,trendsGet:qt,tweetsBatch:kt,tweetsCreate:yt,tweetsDelete:W,tweetsGet:mt,tweetsLike:W,tweetsRetweet:W,tweetsSearch:ht,tweetsUnlike:W,usersBatch:bt,usersFollow:Z,usersFollowers:Y,usersFollowing:Y,usersGet:H,usersSearch:ft,usersTweets:gt,usersUnfollow:Z,webhooksCreate:St,webhooksDeactivate:F,webhooksDeliveries:F,webhooksList:Xt,webhooksTest:F,webhooksUpdate:Ut,writeActionsGet:Tt},a={mediaDownload:lt,mediaUploadFromUrl:dt,trendsGet:ct,tweetsBatch:D,tweetsCreate:at,tweetsDelete:b,tweetsGet:it,tweetsLike:b,tweetsRetweet:b,tweetsSearch:D,tweetsUnlike:b,usersBatch:C,usersFollow:b,usersFollowers:C,usersFollowing:C,usersGet:U,usersSearch:C,usersTweets:D,usersUnfollow:b,webhooksCreate:X.extend({secret:e.string()}),webhooksDeactivate:b,webhooksDeliveries:e.object({deliveries:e.array(N)}),webhooksList:e.object({webhooks:e.array(X)}),webhooksTest:wt,webhooksUpdate:X,writeActionsGet:ut};import{ApiError as re}from"corsair/http";function E(t){if(t instanceof re||t instanceof k)return t.status}function ie(t){if(t instanceof re||t instanceof k)return t.retryAfter}var ae={AUTH_ERROR:{match:t=>{let o=E(t),s=t.message.toLowerCase();return o===401||s.includes("unauthorized")||s.includes("invalid api key")},handler:async()=>({maxRetries:0})},PAYMENT_REQUIRED:{match:t=>{let o=E(t),s=t.message.toLowerCase();return o===402||s.includes("insufficient_credits")},handler:async()=>({maxRetries:0})},PERMISSION_ERROR:{match:t=>{let o=E(t),s=t.message.toLowerCase();return o===403||s.includes("account_needs_reauth")||s.includes("account_restricted")},handler:async()=>({maxRetries:0})},RATE_LIMIT_ERROR:{match:t=>{let o=E(t),s=t.message.toLowerCase();return o===429||s.includes("rate_limited")||s.includes("too many requests")},handler:async t=>({headersRetryAfterMs:ie(t),maxRetries:5})},SERVER_ERROR:{match:t=>{let o=E(t);return o===424||o===502||o===503},handler:async t=>({headersRetryAfterMs:ie(t),maxRetries:3})},VALIDATION_ERROR:{match:t=>{let o=E(t);return o===400||o===422},handler:async()=>({maxRetries:0})},DEFAULT:{match:()=>!0,handler:async()=>({maxRetries:0})}};var ue=z.or(j),pe=U,ce=X,de=N,le=l;var we={entities:{deliveries:de,events:le,tweets:ue,users:pe,webhooks:ce},version:"1.0.0"};import{logEventFromContext as ge}from"corsair/core";import{createHmac as It,timingSafeEqual as vt}from"crypto";var me="x-xquik-signature",Rt="x-xquik-timestamp",At="x-xquik-nonce",Pt="sha256=",Ct=300*1e3;function ke(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function he(t){if(typeof t=="string")try{let o=JSON.parse(t);return ke(o)?o:{}}catch{return{}}return ke(t)?t:{}}function L(t,o){let s=t[o]??t[o.toLowerCase()];if(Array.isArray(s))return s[0];if(typeof s=="string")return s;for(let[p,u]of Object.entries(t))if(p.toLowerCase()===o){if(Array.isArray(u))return u[0];if(typeof u=="string")return u}}function Wt(t){let o=Number.parseInt(t,10);return Number.isFinite(o)?Math.abs(Date.now()-o)<=Ct:!1}function Lt(t,o,s){return`${t}.${o}.${s}`}function Ot(t,o,s,p){let u=It("sha256",p).update(Lt(t,o,s)).digest("hex");return`${Pt}${u}`}function ye(t){return L(t.headers,me)!==void 0}function be(t){return o=>{let s=l.safeParse(he(o.body));return s.success&&s.data.eventType===t}}function fe(){return t=>{let o=l.safeParse(he(t.body));return o.success&&o.data.eventType!=="webhook.test"}}function $(t,o){if(o.trim().length===0)return{error:"Missing Xquik webhook secret",valid:!1};let s=L(t.headers,me),p=L(t.headers,Rt),u=L(t.headers,At);if(s===void 0)return{error:"Missing X-Xquik-Signature header",valid:!1};if(p===void 0)return{error:"Missing X-Xquik-Timestamp header",valid:!1};if(u===void 0)return{error:"Missing X-Xquik-Nonce header",valid:!1};if(!Wt(p))return{error:"Stale Xquik webhook timestamp",valid:!1};if(t.rawBody===void 0)return{error:"Missing raw body for signature verification",valid:!1};let g=Ot(p,u,t.rawBody,o);if(g.length!==s.length)return{error:"Invalid Xquik webhook signature",valid:!1};let I=vt(Buffer.from(g),Buffer.from(s));return I?{valid:I}:{error:"Invalid Xquik webhook signature",valid:!1}}var qe={match:fe(),handler:async(t,o)=>{let s=$(o,t.key);if(!s.valid)return{error:s.error??"Xquik webhook signature failed",statusCode:401,success:!1};let p=o.payload;return await ge(t,"xquik.webhook.monitorEvent",{eventType:p.eventType},"completed"),{data:p,success:!0}}},xe={match:be("webhook.test"),handler:async(t,o)=>{let s=$(o,t.key);if(!s.valid)return{error:s.error??"Xquik webhook signature failed",statusCode:401,success:!1};let p=o.payload;return await ge(t,"xquik.webhook.test",{eventType:p.eventType},"completed"),{data:p,success:!0}}};var Q={monitorEvent:qe,test:xe};var Dt={media:{download:T.download,uploadFromUrl:T.uploadFromUrl},trends:{get:A.get},tweets:{batch:c.batch,create:c.create,delete:c.deleteTweet,get:c.get,like:c.like,retweet:c.retweet,search:c.search,unlike:c.unlike},users:{batch:d.batch,follow:d.follow,followers:d.followers,following:d.following,get:d.get,search:d.search,tweets:d.tweets,unfollow:d.unfollow},webhooks:{create:w.create,deactivate:w.deactivate,deliveries:w.deliveries,list:w.list,test:w.test,update:w.update},writeActions:{get:P.get}},Ft={events:{monitor:Q.monitorEvent,test:Q.test}},Gt={"media.download":{input:r.mediaDownload,output:a.mediaDownload},"media.uploadFromUrl":{input:r.mediaUploadFromUrl,output:a.mediaUploadFromUrl},"trends.get":{input:r.trendsGet,output:a.trendsGet},"tweets.batch":{input:r.tweetsBatch,output:a.tweetsBatch},"tweets.create":{input:r.tweetsCreate,output:a.tweetsCreate},"tweets.delete":{input:r.tweetsDelete,output:a.tweetsDelete},"tweets.get":{input:r.tweetsGet,output:a.tweetsGet},"tweets.like":{input:r.tweetsLike,output:a.tweetsLike},"tweets.retweet":{input:r.tweetsRetweet,output:a.tweetsRetweet},"tweets.search":{input:r.tweetsSearch,output:a.tweetsSearch},"tweets.unlike":{input:r.tweetsUnlike,output:a.tweetsUnlike},"users.batch":{input:r.usersBatch,output:a.usersBatch},"users.follow":{input:r.usersFollow,output:a.usersFollow},"users.followers":{input:r.usersFollowers,output:a.usersFollowers},"users.following":{input:r.usersFollowing,output:a.usersFollowing},"users.get":{input:r.usersGet,output:a.usersGet},"users.search":{input:r.usersSearch,output:a.usersSearch},"users.tweets":{input:r.usersTweets,output:a.usersTweets},"users.unfollow":{input:r.usersUnfollow,output:a.usersUnfollow},"webhooks.create":{input:r.webhooksCreate,output:a.webhooksCreate},"webhooks.deactivate":{input:r.webhooksDeactivate,output:a.webhooksDeactivate},"webhooks.deliveries":{input:r.webhooksDeliveries,output:a.webhooksDeliveries},"webhooks.list":{input:r.webhooksList,output:a.webhooksList},"webhooks.test":{input:r.webhooksTest,output:a.webhooksTest},"webhooks.update":{input:r.webhooksUpdate,output:a.webhooksUpdate},"writeActions.get":{input:r.writeActionsGet,output:a.writeActionsGet}},Mt={"events.monitor":{description:"Handle a signed Xquik monitor event delivery",payload:l,response:l},"events.test":{description:"Handle a signed Xquik test webhook delivery",payload:l,response:l}},Bt="api_key",_t={"media.download":{description:"Download images and videos from one or more tweets",riskLevel:"read"},"media.uploadFromUrl":{description:"Upload public media URLs for use in Xquik tweet creation",riskLevel:"write"},"trends.get":{description:"Get trending X topics by WOEID region",riskLevel:"read"},"tweets.batch":{description:"Fetch up to 100 tweets by ID",riskLevel:"read"},"tweets.create":{description:"Create a tweet or reply from a connected X account",riskLevel:"write"},"tweets.delete":{description:"Delete a tweet from a connected X account",irreversible:!0,riskLevel:"destructive"},"tweets.get":{description:"Get a tweet with full text, author, metrics, and media",riskLevel:"read"},"tweets.like":{description:"Like a tweet from a connected X account",riskLevel:"write"},"tweets.retweet":{description:"Retweet a tweet from a connected X account",riskLevel:"write"},"tweets.search":{description:"Search tweets with X query operators and pagination",riskLevel:"read"},"tweets.unlike":{description:"Remove a like from a connected X account",riskLevel:"write"},"users.batch":{description:"Look up up to 100 X users by ID",riskLevel:"read"},"users.follow":{description:"Follow an X user from a connected account",riskLevel:"write"},"users.followers":{description:"List followers of an X user",riskLevel:"read"},"users.following":{description:"List accounts an X user follows",riskLevel:"read"},"users.get":{description:"Get an X user profile by username or user ID",riskLevel:"read"},"users.search":{description:"Search X users by name or username",riskLevel:"read"},"users.tweets":{description:"List recent tweets posted by an X user",riskLevel:"read"},"users.unfollow":{description:"Unfollow an X user from a connected account",riskLevel:"write"},"webhooks.create":{description:"Create an Xquik webhook endpoint subscription",riskLevel:"write"},"webhooks.deactivate":{description:"Deactivate an Xquik webhook endpoint",riskLevel:"write"},"webhooks.deliveries":{description:"List delivery attempts for an Xquik webhook endpoint",riskLevel:"read"},"webhooks.list":{description:"List configured Xquik webhook endpoints",riskLevel:"read"},"webhooks.test":{description:"Send a test delivery to an Xquik webhook endpoint",riskLevel:"write"},"webhooks.update":{description:"Update a Xquik webhook URL, event types, or active state",riskLevel:"write"},"writeActions.get":{description:"Check the status of a pending Xquik write action",riskLevel:"read"}},zt={api_key:{account:["one","webhook_signature"]}};function Go(t={}){let o={...t,authType:t.authType??Bt};return{authConfig:zt,endpointMeta:_t,endpointSchemas:Gt,endpoints:Dt,errorHandlers:{...ae,...o.errorHandlers},hooks:o.hooks,id:"xquik",keyBuilder:async(s,p)=>{if(p==="webhook"&&o.webhookSecret)return o.webhookSecret;if(p==="webhook")return await s.keys.get_webhook_signature()??"";if(p==="endpoint"&&o.key)return o.key;if(p==="endpoint"&&s.authType==="api_key")return await s.keys.get_api_key()??"";throw new Error(`[auth-missing:xquik:${s.authType}]: Xquik key is missing`)},options:o,pluginWebhookMatcher:ye,schema:we,webhookHooks:o.webhookHooks,webhookSchemas:Mt,webhooks:Ft}}export{Go as xquik,zt as xquikAuthConfig,Gt as xquikEndpointSchemas};
@@ -0,0 +1,125 @@
1
+ export declare const XquikTweet: import("zod").ZodUnion<[import("zod").ZodObject<{
2
+ author: import("zod").ZodOptional<import("zod").ZodObject<{
3
+ coverPicture: import("zod").ZodOptional<import("zod").ZodString>;
4
+ createdAt: import("zod").ZodOptional<import("zod").ZodString>;
5
+ description: import("zod").ZodOptional<import("zod").ZodString>;
6
+ followers: import("zod").ZodOptional<import("zod").ZodNumber>;
7
+ following: import("zod").ZodOptional<import("zod").ZodNumber>;
8
+ id: import("zod").ZodString;
9
+ location: import("zod").ZodOptional<import("zod").ZodString>;
10
+ name: import("zod").ZodString;
11
+ profilePicture: import("zod").ZodOptional<import("zod").ZodString>;
12
+ statusesCount: import("zod").ZodOptional<import("zod").ZodNumber>;
13
+ username: import("zod").ZodString;
14
+ verified: import("zod").ZodOptional<import("zod").ZodBoolean>;
15
+ }, import("zod/v4/core").$loose>>;
16
+ bookmarkCount: import("zod").ZodOptional<import("zod").ZodNumber>;
17
+ conversationId: import("zod").ZodOptional<import("zod").ZodString>;
18
+ createdAt: import("zod").ZodOptional<import("zod").ZodString>;
19
+ entities: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
20
+ id: import("zod").ZodString;
21
+ inReplyToId: import("zod").ZodOptional<import("zod").ZodString>;
22
+ inReplyToUserId: import("zod").ZodOptional<import("zod").ZodString>;
23
+ inReplyToUsername: import("zod").ZodOptional<import("zod").ZodString>;
24
+ isLimitedReply: import("zod").ZodOptional<import("zod").ZodBoolean>;
25
+ isNoteTweet: import("zod").ZodOptional<import("zod").ZodBoolean>;
26
+ isQuoteStatus: import("zod").ZodOptional<import("zod").ZodBoolean>;
27
+ isReply: import("zod").ZodOptional<import("zod").ZodBoolean>;
28
+ lang: import("zod").ZodOptional<import("zod").ZodString>;
29
+ likeCount: import("zod").ZodOptional<import("zod").ZodNumber>;
30
+ media: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
31
+ mediaUrl: import("zod").ZodOptional<import("zod").ZodString>;
32
+ type: import("zod").ZodOptional<import("zod").ZodEnum<{
33
+ animated_gif: "animated_gif";
34
+ photo: "photo";
35
+ video: "video";
36
+ }>>;
37
+ url: import("zod").ZodOptional<import("zod").ZodString>;
38
+ }, import("zod/v4/core").$loose>>>;
39
+ quoteCount: import("zod").ZodOptional<import("zod").ZodNumber>;
40
+ replyCount: import("zod").ZodOptional<import("zod").ZodNumber>;
41
+ retweetCount: import("zod").ZodOptional<import("zod").ZodNumber>;
42
+ source: import("zod").ZodOptional<import("zod").ZodString>;
43
+ text: import("zod").ZodString;
44
+ type: import("zod").ZodOptional<import("zod").ZodString>;
45
+ url: import("zod").ZodOptional<import("zod").ZodString>;
46
+ viewCount: import("zod").ZodOptional<import("zod").ZodNumber>;
47
+ }, import("zod/v4/core").$loose>, import("zod").ZodObject<{
48
+ bookmarkCount: import("zod").ZodNumber;
49
+ conversationId: import("zod").ZodOptional<import("zod").ZodString>;
50
+ createdAt: import("zod").ZodOptional<import("zod").ZodString>;
51
+ entities: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
52
+ id: import("zod").ZodString;
53
+ isNoteTweet: import("zod").ZodOptional<import("zod").ZodBoolean>;
54
+ isQuoteStatus: import("zod").ZodOptional<import("zod").ZodBoolean>;
55
+ isReply: import("zod").ZodOptional<import("zod").ZodBoolean>;
56
+ likeCount: import("zod").ZodNumber;
57
+ media: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
58
+ mediaUrl: import("zod").ZodOptional<import("zod").ZodString>;
59
+ type: import("zod").ZodOptional<import("zod").ZodEnum<{
60
+ animated_gif: "animated_gif";
61
+ photo: "photo";
62
+ video: "video";
63
+ }>>;
64
+ url: import("zod").ZodOptional<import("zod").ZodString>;
65
+ }, import("zod/v4/core").$loose>>>;
66
+ quoteCount: import("zod").ZodNumber;
67
+ replyCount: import("zod").ZodNumber;
68
+ retweetCount: import("zod").ZodNumber;
69
+ source: import("zod").ZodOptional<import("zod").ZodString>;
70
+ text: import("zod").ZodString;
71
+ viewCount: import("zod").ZodNumber;
72
+ }, import("zod/v4/core").$loose>]>;
73
+ export declare const XquikUser: import("zod").ZodObject<{
74
+ coverPicture: import("zod").ZodOptional<import("zod").ZodString>;
75
+ createdAt: import("zod").ZodOptional<import("zod").ZodString>;
76
+ description: import("zod").ZodOptional<import("zod").ZodString>;
77
+ followers: import("zod").ZodOptional<import("zod").ZodNumber>;
78
+ following: import("zod").ZodOptional<import("zod").ZodNumber>;
79
+ id: import("zod").ZodString;
80
+ location: import("zod").ZodOptional<import("zod").ZodString>;
81
+ name: import("zod").ZodString;
82
+ profilePicture: import("zod").ZodOptional<import("zod").ZodString>;
83
+ statusesCount: import("zod").ZodOptional<import("zod").ZodNumber>;
84
+ username: import("zod").ZodString;
85
+ verified: import("zod").ZodOptional<import("zod").ZodBoolean>;
86
+ }, import("zod/v4/core").$loose>;
87
+ export declare const XquikWebhookEndpoint: import("zod").ZodObject<{
88
+ createdAt: import("zod").ZodString;
89
+ eventTypes: import("zod").ZodArray<import("zod").ZodEnum<{
90
+ "tweet.new": "tweet.new";
91
+ "tweet.quote": "tweet.quote";
92
+ "tweet.reply": "tweet.reply";
93
+ "tweet.retweet": "tweet.retweet";
94
+ }>>;
95
+ id: import("zod").ZodString;
96
+ isActive: import("zod").ZodBoolean;
97
+ url: import("zod").ZodString;
98
+ }, import("zod/v4/core").$strip>;
99
+ export declare const XquikWebhookDelivery: import("zod").ZodObject<{
100
+ attempts: import("zod").ZodNumber;
101
+ createdAt: import("zod").ZodString;
102
+ deliveredAt: import("zod").ZodOptional<import("zod").ZodString>;
103
+ id: import("zod").ZodString;
104
+ lastError: import("zod").ZodOptional<import("zod").ZodString>;
105
+ lastStatusCode: import("zod").ZodOptional<import("zod").ZodNumber>;
106
+ status: import("zod").ZodString;
107
+ streamEventId: import("zod").ZodString;
108
+ }, import("zod/v4/core").$strip>;
109
+ export declare const XquikEvent: import("zod").ZodObject<{
110
+ data: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
111
+ deliveryId: import("zod").ZodOptional<import("zod").ZodString>;
112
+ eventType: import("zod").ZodUnion<readonly [import("zod").ZodEnum<{
113
+ "tweet.new": "tweet.new";
114
+ "tweet.quote": "tweet.quote";
115
+ "tweet.reply": "tweet.reply";
116
+ "tweet.retweet": "tweet.retweet";
117
+ }>, import("zod").ZodLiteral<"webhook.test">]>;
118
+ occurredAt: import("zod").ZodOptional<import("zod").ZodString>;
119
+ query: import("zod").ZodOptional<import("zod").ZodString>;
120
+ schemaVersion: import("zod").ZodOptional<import("zod").ZodString>;
121
+ streamEventId: import("zod").ZodOptional<import("zod").ZodString>;
122
+ timestamp: import("zod").ZodOptional<import("zod").ZodString>;
123
+ username: import("zod").ZodOptional<import("zod").ZodString>;
124
+ }, import("zod/v4/core").$loose>;
125
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../schema/database.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAA0C,CAAC;AAClE,eAAO,MAAM,SAAS;;;;;;;;;;;;;gCAAoB,CAAC;AAC3C,eAAO,MAAM,oBAAoB;;;;;;;;;;;gCAAgB,CAAC;AAClD,eAAO,MAAM,oBAAoB;;;;;;;;;gCAAiB,CAAC;AACnD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;gCAAqB,CAAC"}
@@ -0,0 +1,130 @@
1
+ export declare const XquikSchema: {
2
+ readonly entities: {
3
+ readonly deliveries: import("zod").ZodObject<{
4
+ attempts: import("zod").ZodNumber;
5
+ createdAt: import("zod").ZodString;
6
+ deliveredAt: import("zod").ZodOptional<import("zod").ZodString>;
7
+ id: import("zod").ZodString;
8
+ lastError: import("zod").ZodOptional<import("zod").ZodString>;
9
+ lastStatusCode: import("zod").ZodOptional<import("zod").ZodNumber>;
10
+ status: import("zod").ZodString;
11
+ streamEventId: import("zod").ZodString;
12
+ }, import("zod/v4/core").$strip>;
13
+ readonly events: import("zod").ZodObject<{
14
+ data: import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>;
15
+ deliveryId: import("zod").ZodOptional<import("zod").ZodString>;
16
+ eventType: import("zod").ZodUnion<readonly [import("zod").ZodEnum<{
17
+ "tweet.new": "tweet.new";
18
+ "tweet.quote": "tweet.quote";
19
+ "tweet.reply": "tweet.reply";
20
+ "tweet.retweet": "tweet.retweet";
21
+ }>, import("zod").ZodLiteral<"webhook.test">]>;
22
+ occurredAt: import("zod").ZodOptional<import("zod").ZodString>;
23
+ query: import("zod").ZodOptional<import("zod").ZodString>;
24
+ schemaVersion: import("zod").ZodOptional<import("zod").ZodString>;
25
+ streamEventId: import("zod").ZodOptional<import("zod").ZodString>;
26
+ timestamp: import("zod").ZodOptional<import("zod").ZodString>;
27
+ username: import("zod").ZodOptional<import("zod").ZodString>;
28
+ }, import("zod/v4/core").$loose>;
29
+ readonly tweets: import("zod").ZodUnion<[import("zod").ZodObject<{
30
+ author: import("zod").ZodOptional<import("zod").ZodObject<{
31
+ coverPicture: import("zod").ZodOptional<import("zod").ZodString>;
32
+ createdAt: import("zod").ZodOptional<import("zod").ZodString>;
33
+ description: import("zod").ZodOptional<import("zod").ZodString>;
34
+ followers: import("zod").ZodOptional<import("zod").ZodNumber>;
35
+ following: import("zod").ZodOptional<import("zod").ZodNumber>;
36
+ id: import("zod").ZodString;
37
+ location: import("zod").ZodOptional<import("zod").ZodString>;
38
+ name: import("zod").ZodString;
39
+ profilePicture: import("zod").ZodOptional<import("zod").ZodString>;
40
+ statusesCount: import("zod").ZodOptional<import("zod").ZodNumber>;
41
+ username: import("zod").ZodString;
42
+ verified: import("zod").ZodOptional<import("zod").ZodBoolean>;
43
+ }, import("zod/v4/core").$loose>>;
44
+ bookmarkCount: import("zod").ZodOptional<import("zod").ZodNumber>;
45
+ conversationId: import("zod").ZodOptional<import("zod").ZodString>;
46
+ createdAt: import("zod").ZodOptional<import("zod").ZodString>;
47
+ entities: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
48
+ id: import("zod").ZodString;
49
+ inReplyToId: import("zod").ZodOptional<import("zod").ZodString>;
50
+ inReplyToUserId: import("zod").ZodOptional<import("zod").ZodString>;
51
+ inReplyToUsername: import("zod").ZodOptional<import("zod").ZodString>;
52
+ isLimitedReply: import("zod").ZodOptional<import("zod").ZodBoolean>;
53
+ isNoteTweet: import("zod").ZodOptional<import("zod").ZodBoolean>;
54
+ isQuoteStatus: import("zod").ZodOptional<import("zod").ZodBoolean>;
55
+ isReply: import("zod").ZodOptional<import("zod").ZodBoolean>;
56
+ lang: import("zod").ZodOptional<import("zod").ZodString>;
57
+ likeCount: import("zod").ZodOptional<import("zod").ZodNumber>;
58
+ media: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
59
+ mediaUrl: import("zod").ZodOptional<import("zod").ZodString>;
60
+ type: import("zod").ZodOptional<import("zod").ZodEnum<{
61
+ animated_gif: "animated_gif";
62
+ photo: "photo";
63
+ video: "video";
64
+ }>>;
65
+ url: import("zod").ZodOptional<import("zod").ZodString>;
66
+ }, import("zod/v4/core").$loose>>>;
67
+ quoteCount: import("zod").ZodOptional<import("zod").ZodNumber>;
68
+ replyCount: import("zod").ZodOptional<import("zod").ZodNumber>;
69
+ retweetCount: import("zod").ZodOptional<import("zod").ZodNumber>;
70
+ source: import("zod").ZodOptional<import("zod").ZodString>;
71
+ text: import("zod").ZodString;
72
+ type: import("zod").ZodOptional<import("zod").ZodString>;
73
+ url: import("zod").ZodOptional<import("zod").ZodString>;
74
+ viewCount: import("zod").ZodOptional<import("zod").ZodNumber>;
75
+ }, import("zod/v4/core").$loose>, import("zod").ZodObject<{
76
+ bookmarkCount: import("zod").ZodNumber;
77
+ conversationId: import("zod").ZodOptional<import("zod").ZodString>;
78
+ createdAt: import("zod").ZodOptional<import("zod").ZodString>;
79
+ entities: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
80
+ id: import("zod").ZodString;
81
+ isNoteTweet: import("zod").ZodOptional<import("zod").ZodBoolean>;
82
+ isQuoteStatus: import("zod").ZodOptional<import("zod").ZodBoolean>;
83
+ isReply: import("zod").ZodOptional<import("zod").ZodBoolean>;
84
+ likeCount: import("zod").ZodNumber;
85
+ media: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
86
+ mediaUrl: import("zod").ZodOptional<import("zod").ZodString>;
87
+ type: import("zod").ZodOptional<import("zod").ZodEnum<{
88
+ animated_gif: "animated_gif";
89
+ photo: "photo";
90
+ video: "video";
91
+ }>>;
92
+ url: import("zod").ZodOptional<import("zod").ZodString>;
93
+ }, import("zod/v4/core").$loose>>>;
94
+ quoteCount: import("zod").ZodNumber;
95
+ replyCount: import("zod").ZodNumber;
96
+ retweetCount: import("zod").ZodNumber;
97
+ source: import("zod").ZodOptional<import("zod").ZodString>;
98
+ text: import("zod").ZodString;
99
+ viewCount: import("zod").ZodNumber;
100
+ }, import("zod/v4/core").$loose>]>;
101
+ readonly users: import("zod").ZodObject<{
102
+ coverPicture: import("zod").ZodOptional<import("zod").ZodString>;
103
+ createdAt: import("zod").ZodOptional<import("zod").ZodString>;
104
+ description: import("zod").ZodOptional<import("zod").ZodString>;
105
+ followers: import("zod").ZodOptional<import("zod").ZodNumber>;
106
+ following: import("zod").ZodOptional<import("zod").ZodNumber>;
107
+ id: import("zod").ZodString;
108
+ location: import("zod").ZodOptional<import("zod").ZodString>;
109
+ name: import("zod").ZodString;
110
+ profilePicture: import("zod").ZodOptional<import("zod").ZodString>;
111
+ statusesCount: import("zod").ZodOptional<import("zod").ZodNumber>;
112
+ username: import("zod").ZodString;
113
+ verified: import("zod").ZodOptional<import("zod").ZodBoolean>;
114
+ }, import("zod/v4/core").$loose>;
115
+ readonly webhooks: import("zod").ZodObject<{
116
+ createdAt: import("zod").ZodString;
117
+ eventTypes: import("zod").ZodArray<import("zod").ZodEnum<{
118
+ "tweet.new": "tweet.new";
119
+ "tweet.quote": "tweet.quote";
120
+ "tweet.reply": "tweet.reply";
121
+ "tweet.retweet": "tweet.retweet";
122
+ }>>;
123
+ id: import("zod").ZodString;
124
+ isActive: import("zod").ZodBoolean;
125
+ url: import("zod").ZodString;
126
+ }, import("zod/v4/core").$strip>;
127
+ };
128
+ readonly version: "1.0.0";
129
+ };
130
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../schema/index.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CASd,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const _default: import("tsup").Options | import("tsup").Options[] | ((overrideOptions: import("tsup").Options) => import("tsup").Options | import("tsup").Options[] | Promise<import("tsup").Options | import("tsup").Options[]>);
2
+ export default _default;
3
+ //# sourceMappingURL=tsup.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsup.config.d.ts","sourceRoot":"","sources":["../tsup.config.ts"],"names":[],"mappings":";AAEA,wBAYG"}
@@ -0,0 +1,4 @@
1
+ import type { XquikWebhooks } from '../index';
2
+ export declare const monitorEvent: XquikWebhooks['monitorEvent'];
3
+ export declare const test: XquikWebhooks['test'];
4
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../webhooks/events.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAO9C,eAAO,MAAM,YAAY,EAAE,aAAa,CAAC,cAAc,CAwBtD,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,aAAa,CAAC,MAAM,CAwBtC,CAAC"}
@@ -0,0 +1,56 @@
1
+ export declare const EventWebhooks: {
2
+ monitorEvent: {
3
+ match: import("corsair/core").CorsairWebhookMatcher;
4
+ handler: import("corsair/core").CorsairWebhookHandler<import("..").XquikContext, {
5
+ [x: string]: unknown;
6
+ data: Record<string, unknown>;
7
+ eventType: "tweet.new" | "tweet.quote" | "tweet.reply" | "tweet.retweet" | "webhook.test";
8
+ deliveryId?: string | undefined;
9
+ occurredAt?: string | undefined;
10
+ query?: string | undefined;
11
+ schemaVersion?: string | undefined;
12
+ streamEventId?: string | undefined;
13
+ timestamp?: string | undefined;
14
+ username?: string | undefined;
15
+ }, {
16
+ [x: string]: unknown;
17
+ data: Record<string, unknown>;
18
+ eventType: "tweet.new" | "tweet.quote" | "tweet.reply" | "tweet.retweet" | "webhook.test";
19
+ deliveryId?: string | undefined;
20
+ occurredAt?: string | undefined;
21
+ query?: string | undefined;
22
+ schemaVersion?: string | undefined;
23
+ streamEventId?: string | undefined;
24
+ timestamp?: string | undefined;
25
+ username?: string | undefined;
26
+ }>;
27
+ };
28
+ test: {
29
+ match: import("corsair/core").CorsairWebhookMatcher;
30
+ handler: import("corsair/core").CorsairWebhookHandler<import("..").XquikContext, {
31
+ [x: string]: unknown;
32
+ data: Record<string, unknown>;
33
+ eventType: "tweet.new" | "tweet.quote" | "tweet.reply" | "tweet.retweet" | "webhook.test";
34
+ deliveryId?: string | undefined;
35
+ occurredAt?: string | undefined;
36
+ query?: string | undefined;
37
+ schemaVersion?: string | undefined;
38
+ streamEventId?: string | undefined;
39
+ timestamp?: string | undefined;
40
+ username?: string | undefined;
41
+ }, {
42
+ [x: string]: unknown;
43
+ data: Record<string, unknown>;
44
+ eventType: "tweet.new" | "tweet.quote" | "tweet.reply" | "tweet.retweet" | "webhook.test";
45
+ deliveryId?: string | undefined;
46
+ occurredAt?: string | undefined;
47
+ query?: string | undefined;
48
+ schemaVersion?: string | undefined;
49
+ streamEventId?: string | undefined;
50
+ timestamp?: string | undefined;
51
+ username?: string | undefined;
52
+ }>;
53
+ };
54
+ };
55
+ export * from './types';
56
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../webhooks/index.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGzB,CAAC;AAEF,cAAc,SAAS,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { CorsairWebhookMatcher, RawWebhookRequest, WebhookRequest } from 'corsair/core';
2
+ import type { EventPayload } from '../endpoints/types';
3
+ export type XquikWebhookPayload = EventPayload;
4
+ export type XquikWebhookOutputs = {
5
+ monitorEvent: XquikWebhookPayload;
6
+ test: XquikWebhookPayload;
7
+ };
8
+ export declare function hasXquikSignature(request: RawWebhookRequest): boolean;
9
+ export declare function createXquikMatch(eventType: XquikWebhookPayload['eventType']): CorsairWebhookMatcher;
10
+ export declare function createXquikMonitorEventMatch(): CorsairWebhookMatcher;
11
+ export declare function verifyXquikWebhookSignature(request: WebhookRequest<XquikWebhookPayload>, secret: string): {
12
+ error?: string;
13
+ valid: boolean;
14
+ };
15
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../webhooks/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AASvD,MAAM,MAAM,mBAAmB,GAAG,YAAY,CAAC;AAE/C,MAAM,MAAM,mBAAmB,GAAG;IACjC,YAAY,EAAE,mBAAmB,CAAC;IAClC,IAAI,EAAE,mBAAmB,CAAC;CAC1B,CAAC;AA8DF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAErE;AAED,wBAAgB,gBAAgB,CAC/B,SAAS,EAAE,mBAAmB,CAAC,WAAW,CAAC,GACzC,qBAAqB,CAKvB;AAED,wBAAgB,4BAA4B,IAAI,qBAAqB,CAKpE;AAED,wBAAgB,2BAA2B,CAC1C,OAAO,EAAE,cAAc,CAAC,mBAAmB,CAAC,EAC5C,MAAM,EAAE,MAAM,GACZ;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAsCpC"}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@corsair-dev/xquik",
3
+ "version": "0.1.0",
4
+ "description": "Search tweets, inspect users, manage Xquik webhooks, upload media, and run X actions from Corsair",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "dev-source": "./index.ts",
12
+ "types": "./dist/index.d.ts",
13
+ "default": "./dist/index.js"
14
+ }
15
+ },
16
+ "peerDependencies": {
17
+ "corsair": ">=0.1.0",
18
+ "zod": "^4.1.13"
19
+ },
20
+ "devDependencies": {
21
+ "@types/jest": "^29.5.14",
22
+ "ts-jest": "^29.4.9",
23
+ "tsup": "^8.0.1",
24
+ "typescript": "^5.9.3",
25
+ "zod": "^4.1.13",
26
+ "corsair": "0.1.69"
27
+ },
28
+ "keywords": [
29
+ "corsair",
30
+ "xquik",
31
+ "plugin"
32
+ ],
33
+ "author": "",
34
+ "license": "Apache-2.0",
35
+ "files": [
36
+ "dist"
37
+ ],
38
+ "dependencies": {
39
+ "jest": "^29.7.0"
40
+ },
41
+ "scripts": {
42
+ "build": "rm -rf dist && tsc --build --force && tsup",
43
+ "typecheck": "tsc --noEmit",
44
+ "test": "jest"
45
+ }
46
+ }