@corsair-dev/googlecalendar 0.1.1 → 0.1.2
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/endpoints/index.d.ts +8 -8
- package/dist/endpoints/types.d.ts +277 -1923
- package/dist/endpoints/types.d.ts.map +1 -1
- package/dist/index.d.ts +278 -1924
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/schema/database.d.ts +43 -264
- package/dist/schema/database.d.ts.map +1 -1
- package/dist/schema/index.d.ts +43 -264
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/webhooks/index.d.ts +2 -2
- package/dist/webhooks/types.d.ts +15 -129
- package/dist/webhooks/types.d.ts.map +1 -1
- package/package.json +4 -4
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,aAAa,EACb,YAAY,EACZ,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,QAAQ,EACR,uBAAuB,EAGvB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EACX,4BAA4B,EAC5B,6BAA6B,EAC7B,MAAM,aAAa,CAAC;AAMrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EACX,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,4BAA4B,EAC5B,4BAA4B,EAC5B,MAAM,YAAY,CAAC;AASpB,MAAM,MAAM,qBAAqB,GAAG,oBAAoB,CACvD,OAAO,oBAAoB,EAC3B,2BAA2B,CAC3B,CAAC;AAEF,KAAK,sBAAsB,CAAC,CAAC,SAAS,MAAM,6BAA6B,IACxE,eAAe,CACd,qBAAqB,EACrB,4BAA4B,CAAC,CAAC,CAAC,EAC/B,6BAA6B,CAAC,CAAC,CAAC,CAChC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG;IACrC,YAAY,EAAE,sBAAsB,CAAC,cAAc,CAAC,CAAC;IACrD,SAAS,EAAE,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAC/C,aAAa,EAAE,sBAAsB,CAAC,eAAe,CAAC,CAAC;IACvD,YAAY,EAAE,sBAAsB,CAAC,cAAc,CAAC,CAAC;IACrD,YAAY,EAAE,sBAAsB,CAAC,cAAc,CAAC,CAAC;IACrD,uBAAuB,EAAE,sBAAsB,CAAC,yBAAyB,CAAC,CAAC;CAC3E,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,aAAa,CACvD,OAAO,6BAA6B,CACpC,CAAC;AAEF,KAAK,qBAAqB,CACzB,CAAC,SAAS,MAAM,4BAA4B,EAC5C,MAAM,IACH,cAAc,CACjB,qBAAqB,EACrB,4BAA4B,CAAC,MAAM,CAAC,EACpC,4BAA4B,CAAC,CAAC,CAAC,CAC/B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACpC,cAAc,EAAE,qBAAqB,CACpC,cAAc,EACd,iBAAiB,GAAG,iBAAiB,GAAG,iBAAiB,CACzD,CAAC;CACF,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,YAAY,CACrD,OAAO,4BAA4B,CACnC,CAAC;AAEF,QAAA,MAAM,6BAA6B;;;;;;;;;;;CAWzB,CAAC;AAEX,eAAO,MAAM,6BAA6B
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{request as J}from"corsair/http";var k=class extends Error{constructor(r,a){super(r);this.code=a;this.name="GoogleCalendarAPIError"}},Q="https://www.googleapis.com/calendar/v3";async function X(t,n,r){let a=await fetch("https://oauth2.googleapis.com/token",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:t,client_secret:n,refresh_token:r,grant_type:"refresh_token"})});if(!a.ok){let c=await a.text();throw new k(`Failed to refresh access token: ${c}`,a.status)}return await a.json()}async function w({accessToken:t,expiresAt:n,clientId:r,clientSecret:a,refreshToken:s,forceRefresh:c=!1}){let d=Math.floor(Date.now()/1e3);if(!c&&t&&n&&Number(n)>d+300)return{accessToken:t,expiresAt:Number(n),refreshed:!1};let p=await X(r,a,s);return{accessToken:p.access_token,expiresAt:d+p.expires_in,refreshed:!0}}async function E(t,n,r={}){let{method:a="GET",body:s,query:c}=r;return await J({BASE:Q,VERSION:"1.0.0",WITH_CREDENTIALS:!1,CREDENTIALS:"omit",TOKEN:n,HEADERS:{"Content-Type":"application/json"}},{method:a,url:t,body:a==="POST"||a==="PUT"||a==="PATCH"?s:void 0,mediaType:"application/json",query:c})}function ee(t){return t instanceof Error&&"status"in t&&t.status===401}async function g(t,n,r={}){try{return await E(t,n.key,r)}catch(a){if(ee(a)&&n._refreshAuth){let s=await n._refreshAuth();return await E(t,s,r)}throw a}}import{logEventFromContext as te}from"corsair/core";var I=async(t,n)=>{let r=await g("/freeBusy",t,{method:"POST",body:{timeMin:n.timeMin,timeMax:n.timeMax,timeZone:n.timeZone,groupExpansionMax:n.groupExpansionMax,calendarExpansionMax:n.calendarExpansionMax,items:n.items}});return await te(t,"googlecalendar.calendar.getAvailability",{...n},"completed"),r};import{logEventFromContext as C}from"corsair/core";var A=async(t,n)=>{let r=n.calendarId||"primary",a=await g(`/calendars/${r}/events`,t,{method:"POST",body:n.event});if(a.id&&t.db.events)try{await t.db.events.upsertByEntityId(a.id,{...a,id:a.id,calendarId:r,createdAt:new Date})}catch(s){console.warn("Failed to save event to database:",s)}return await C(t,"googlecalendar.events.create",{...n},"completed"),a},P=async(t,n)=>{let r=n.calendarId||"primary",a=await g(`/calendars/${r}/events/${n.id}`,t,{method:"GET",query:{timeZone:n.timeZone,maxAttendees:n.maxAttendees}});if(a.id&&t.db.events)try{await t.db.events.upsertByEntityId(a.id,{...a,id:a.id,calendarId:r,createdAt:new Date})}catch(s){console.warn("Failed to save event to database:",s)}return await C(t,"googlecalendar.events.get",{...n},"completed"),a},D=async(t,n)=>{let r=n.calendarId||"primary",a=await g(`/calendars/${r}/events`,t,{method:"GET",query:n});if(a.items&&t.db.events)try{for(let s of a.items)s.id&&await t.db.events.upsertByEntityId(s.id,{...s,id:s.id,calendarId:r,createdAt:new Date})}catch(s){console.warn("Failed to save events to database:",s)}return await C(t,"googlecalendar.events.getMany",{...n},"completed"),a},O=async(t,n)=>{let r=n.calendarId||"primary",a=await g(`/calendars/${r}/events/${n.id}`,t,{method:"PUT",body:n.event,query:{sendUpdates:n.sendUpdates,sendNotifications:n.sendNotifications,conferenceDataVersion:n.conferenceDataVersion,maxAttendees:n.maxAttendees,supportsAttachments:n.supportsAttachments}});if(a.id&&t.db.events)try{await t.db.events.upsertByEntityId(a.id,{...a,id:a.id,calendarId:r,createdAt:new Date})}catch(s){console.warn("Failed to save event to database:",s)}return await C(t,"googlecalendar.events.update",{...n},"completed"),a},M=async(t,n)=>{let r=n.calendarId||"primary";if(await g(`/calendars/${r}/events/${n.id}`,t,{method:"DELETE",query:{sendUpdates:n.sendUpdates,sendNotifications:n.sendNotifications}}),t.db.events)try{await t.db.events.deleteByEntityId(n.id)}catch(a){console.warn("Failed to delete event from database:",a)}await C(t,"googlecalendar.events.delete",{...n},"completed")};import{z as e}from"zod";var y=e.object({date:e.string().optional().describe('All-day event date in "YYYY-MM-DD" format'),dateTime:e.string().optional().describe('RFC 3339 timestamp, e.g. "2024-12-25T10:00:00-07:00". Required for timed events.'),timeZone:e.string().optional().describe('IANA time zone name, e.g. "America/New_York"')}),N=e.object({id:e.string().optional(),email:e.string().optional().describe("Attendee's email address. Required when adding an attendee."),displayName:e.string().optional(),organizer:e.boolean().optional(),self:e.boolean().optional(),resource:e.boolean().optional(),optional:e.boolean().optional(),responseStatus:e.enum(["needsAction","declined","tentative","accepted"]).optional(),comment:e.string().optional(),additionalGuests:e.number().optional()}),R=e.object({id:e.string().optional(),email:e.string().optional(),displayName:e.string().optional(),self:e.boolean().optional()}),U=e.object({method:e.enum(["email","popup"]).optional(),minutes:e.number().optional()}),_=e.object({useDefault:e.boolean().optional().describe("Use the calendar default reminders"),overrides:e.array(U).optional().describe("Custom reminders. Only used when useDefault is false.")}),W=e.object({summary:e.string().optional().describe("Title of the event"),description:e.string().optional().describe("Description of the event. HTML is supported."),location:e.string().optional().describe("Geographic location of the event as free-form text"),start:y.optional().describe('Start time. Use "date" for all-day events, "dateTime" for timed events.'),end:y.optional().describe('End time. Use "date" for all-day events, "dateTime" for timed events.'),attendees:e.array(N).optional().describe("List of attendees. Each attendee must include an email."),recurrence:e.array(e.string()).optional().describe('RRULE / EXDATE lines per RFC 5545, e.g. ["RRULE:FREQ=WEEKLY;COUNT=5"]'),colorId:e.string().optional().describe("Color ID (1\u201311). Use the colors endpoint to see options."),transparency:e.enum(["opaque","transparent"]).optional().describe('"opaque" blocks time on the calendar (default); "transparent" does not'),visibility:e.enum(["default","public","private","confidential"]).optional(),eventType:e.enum(["default","outOfOffice","focusTime","workingLocation"]).optional(),status:e.enum(["confirmed","tentative","cancelled"]).optional(),reminders:_.optional(),guestsCanModify:e.boolean().optional(),guestsCanInviteOthers:e.boolean().optional(),guestsCanSeeOtherGuests:e.boolean().optional(),anyoneCanAddSelf:e.boolean().optional(),sequence:e.number().optional().describe("Sequence number for recurring event updates"),originalStartTime:y.optional().describe("Original start time for a recurring event instance"),recurringEventId:e.string().optional().describe("ID of the recurring event this instance belongs to")}),ae=e.object({calendarId:e.string().optional().describe('Calendar ID. Defaults to "primary".'),event:W.describe('Event body. Provide at minimum "summary", "start", and "end".'),sendUpdates:e.enum(["all","externalOnly","none"]).optional(),sendNotifications:e.boolean().optional(),conferenceDataVersion:e.number().optional(),maxAttendees:e.number().optional(),supportsAttachments:e.boolean().optional()}),re=e.object({calendarId:e.string().optional(),id:e.string(),timeZone:e.string().optional(),maxAttendees:e.number().optional()}),ie=e.object({calendarId:e.string().optional(),timeMin:e.string().optional(),timeMax:e.string().optional(),timeZone:e.string().optional(),updatedMin:e.string().optional(),singleEvents:e.boolean().optional(),maxResults:e.number().optional(),pageToken:e.string().optional(),q:e.string().optional(),orderBy:e.enum(["startTime","updated"]).optional(),iCalUID:e.string().optional(),showDeleted:e.boolean().optional(),showHiddenInvitations:e.boolean().optional()}),se=e.object({calendarId:e.string().optional().describe('Calendar ID. Defaults to "primary".'),id:e.string().describe("Event ID to update"),event:W.describe("Updated event fields"),sendUpdates:e.enum(["all","externalOnly","none"]).optional(),sendNotifications:e.boolean().optional(),conferenceDataVersion:e.number().optional(),maxAttendees:e.number().optional(),supportsAttachments:e.boolean().optional()}),le=e.object({calendarId:e.string().optional(),id:e.string(),sendUpdates:e.enum(["all","externalOnly","none"]).optional(),sendNotifications:e.boolean().optional()}),de=e.object({timeMin:e.string(),timeMax:e.string(),timeZone:e.string().optional(),groupExpansionMax:e.number().optional(),calendarExpansionMax:e.number().optional(),items:e.array(e.object({id:e.string()})).optional()}),m={eventsCreate:ae,eventsGet:re,eventsGetMany:ie,eventsUpdate:se,eventsDelete:le,calendarGetAvailability:de},G=e.object({id:e.string().optional(),status:e.enum(["confirmed","tentative","cancelled"]).optional(),htmlLink:e.string().optional(),created:e.string().optional(),updated:e.string().optional(),summary:e.string().optional(),description:e.string().optional(),location:e.string().optional(),colorId:e.string().optional(),creator:R.optional(),organizer:R.optional(),start:y.optional(),end:y.optional(),endTimeUnspecified:e.boolean().optional(),recurrence:e.array(e.string()).optional(),recurringEventId:e.string().optional(),originalStartTime:y.optional(),transparency:e.enum(["opaque","transparent"]).optional(),visibility:e.enum(["default","public","private","confidential"]).optional(),iCalUID:e.string().optional(),sequence:e.number().optional(),attendees:e.array(N).optional(),attendeesOmitted:e.boolean().optional(),hangoutLink:e.string().optional(),reminders:_.optional(),anyoneCanAddSelf:e.boolean().optional(),guestsCanInviteOthers:e.boolean().optional(),guestsCanModify:e.boolean().optional(),guestsCanSeeOtherGuests:e.boolean().optional(),privateCopy:e.boolean().optional(),locked:e.boolean().optional(),eventType:e.enum(["default","outOfOffice","focusTime","workingLocation"]).optional()}),pe=e.object({kind:e.string().optional(),etag:e.string().optional(),summary:e.string().optional(),description:e.string().optional(),updated:e.string().optional(),timeZone:e.string().optional(),accessRole:e.string().optional(),defaultReminders:e.array(U).optional(),nextPageToken:e.string().optional(),nextSyncToken:e.string().optional(),items:e.array(G).optional()}),ce=e.object({busy:e.array(e.object({start:e.string().optional(),end:e.string().optional()})).optional(),errors:e.array(e.object({domain:e.string().optional(),reason:e.string().optional()})).optional()}),ge=e.object({kind:e.string().optional(),calendars:e.record(e.string(),ce).optional(),groups:e.record(e.string(),e.object({calendars:e.array(e.string()).optional(),errors:e.array(e.object({domain:e.string().optional(),reason:e.string().optional()})).optional()})).optional(),timeMin:e.string().optional(),timeMax:e.string().optional()}),v={eventsCreate:G,eventsGet:G,eventsGetMany:pe,eventsUpdate:G,eventsDelete:e.void(),calendarGetAvailability:ge};var b={create:A,get:P,getMany:D,update:O,delete:M},j={getAvailability:I};import{z as o}from"zod";var S=o.object({date:o.string().optional(),dateTime:o.string().optional(),timeZone:o.string().optional()}),ue=o.object({id:o.string().optional(),email:o.string().optional(),displayName:o.string().optional(),organizer:o.boolean().optional(),self:o.boolean().optional(),resource:o.boolean().optional(),optional:o.boolean().optional(),responseStatus:o.enum(["needsAction","declined","tentative","accepted"]).optional(),comment:o.string().optional(),additionalGuests:o.number().optional()}),q=o.object({id:o.string().optional(),email:o.string().optional(),displayName:o.string().optional(),self:o.boolean().optional()}),me=o.object({method:o.enum(["email","popup"]).optional(),minutes:o.number().optional()}),ve=o.object({useDefault:o.boolean().optional(),overrides:o.array(me).optional()}),B=o.object({id:o.string(),status:o.enum(["confirmed","tentative","cancelled"]).optional(),htmlLink:o.string().optional(),created:o.string().optional(),updated:o.string().optional(),summary:o.string().optional(),description:o.string().optional(),location:o.string().optional(),colorId:o.string().optional(),creator:q.optional(),organizer:q.optional(),start:S.optional(),end:S.optional(),endTimeUnspecified:o.boolean().optional(),recurrence:o.array(o.string()).optional(),recurringEventId:o.string().optional(),originalStartTime:S.optional(),transparency:o.enum(["opaque","transparent"]).optional(),visibility:o.enum(["default","public","private","confidential"]).optional(),iCalUID:o.string().optional(),sequence:o.number().optional(),attendees:o.array(ue).optional(),attendeesOmitted:o.boolean().optional(),hangoutLink:o.string().optional(),reminders:ve.optional(),anyoneCanAddSelf:o.boolean().optional(),guestsCanInviteOthers:o.boolean().optional(),guestsCanModify:o.boolean().optional(),guestsCanSeeOtherGuests:o.boolean().optional(),privateCopy:o.boolean().optional(),locked:o.boolean().optional(),eventType:o.enum(["default","outOfOffice","focusTime","workingLocation"]).optional(),calendarId:o.string().optional(),createdAt:o.coerce.date().optional()}),L=o.object({id:o.string(),summary:o.string().optional(),description:o.string().optional(),location:o.string().optional(),timeZone:o.string().optional(),createdAt:o.coerce.date().optional()});var z={version:"1.0.0",entities:{events:B,calendars:L}};import{logEventFromContext as x}from"corsair/core";import{z as i}from"zod";var fe=i.object({data:i.string().optional(),attributes:i.record(i.string()).optional(),messageId:i.string().optional(),publishTime:i.string().optional()}),F=i.object({message:fe.optional(),subscription:i.string().optional(),event:i.unknown().optional()}),Ye=i.object({resourceId:i.string().optional(),resourceState:i.string().optional(),resourceUri:i.string().optional(),channelId:i.string().optional(),channelExpiration:i.string().optional(),channelToken:i.string().optional(),changed:i.string().optional()}),ye=i.object({type:i.literal("eventCreated"),calendarId:i.string(),event:i.custom(),timestamp:i.string()}),be=i.object({type:i.literal("eventUpdated"),calendarId:i.string(),event:i.custom(),timestamp:i.string()}),he=i.object({type:i.literal("eventDeleted"),calendarId:i.string(),eventId:i.string(),timestamp:i.string()}),$=i.union([ye,be,he]);function h(t){let n=Buffer.from(t,"base64").toString("utf-8");return JSON.parse(n)}function T(t){return n=>{let r=n.body;if(!r.message?.data)return!1;try{let a=h(r.message.data);return!!a.channelId&&!!a.resourceId&&!!a.resourceUri&&a.resourceUri.includes("/calendar/")}catch{return!1}}}var Ee=/\/calendars\/([^\/\?]+)/,Ce=/\/calendars\/[^\/]+\/events\/([^\/\?]+)/,Ge=120*1e3,ke=5e3;function we(t){return{calendarId:t.match(Ee)?.[1],eventId:t.match(Ce)?.[1]}}function Se(t){return!t.created||!t.updated?!1:Math.abs(new Date(t.updated).getTime()-new Date(t.created).getTime())<ke}function Te(t,n,r){return E(`/calendars/${n}/events/${r}`,t,{method:"GET"})}async function H(t,n){let r=new Date(Date.now()-Ge).toISOString();return(await E(`/calendars/${n}/events`,t,{method:"GET",query:{maxResults:10,orderBy:"updated",updatedMin:r,showDeleted:!0}})).items??[]}async function xe(t,n,r){return r?Te(t,n,r):(await H(t,n)).at(-1)??null}async function Ie(t,n,r,a){return r||((await H(t,n)).find(d=>d.status==="cancelled")?.id??a.resourceId??"")}async function K(t,n,r){r&&t.db.events&&await t.db.events.deleteByEntityId(r);let a={type:"eventDeleted",calendarId:n,eventId:r,timestamp:new Date().toISOString()};return await x(t,"googlecalendar.webhook.eventDeleted",{...a},"completed"),{eventData:a}}var V={match:T("eventChanged"),handler:async(t,n)=>{let r=n.payload;if(!r.message?.data)return{success:!1,error:"No message data in notification"};let a=h(r.message.data);if(!a.resourceUri)return{success:!1,error:"Invalid push notification format"};let{calendarId:s,eventId:c}=we(a.resourceUri);if(!s)return{success:!1,error:"Could not parse calendar ID from resource URI"};let d=t.key;try{if(a.resourceState==="not_exists"){let u=await Ie(d,s,c,a),{eventData:Y}=await K(t,s,u);return{success:!0,data:Y}}let l=await xe(d,s,c);if(!l)return{success:!1,error:"No recently updated events found in calendar"};if(l.status==="cancelled"){let{eventData:u}=await K(t,s,l.id??"");return{success:!0,data:u}}let p="";if(l.id&&t.db.events&&(p=(await t.db.events.upsertByEntityId(l.id,{...l,id:l.id,calendarId:s,createdAt:new Date}))?.id??""),Se(l)){let u={type:"eventCreated",calendarId:s,event:l,timestamp:new Date().toISOString()};return await x(t,"googlecalendar.webhook.eventCreated",{...u},"completed"),{success:!0,corsairEntityId:p,data:u}}let f={type:"eventUpdated",calendarId:s,event:l,timestamp:new Date().toISOString()};return await x(t,"googlecalendar.webhook.eventUpdated",{...f},"completed"),{success:!0,corsairEntityId:p,data:f}}catch(l){return console.error("Failed to process webhook:",l),{success:!1,error:`Failed to process event: ${l instanceof Error?l.message:"Unknown error"}`}}}};var Z={onEventChanged:V};var Ae={events:{create:b.create,get:b.get,getMany:b.getMany,update:b.update,delete:b.delete},calendar:{getAvailability:j.getAvailability}},Pe={"events.create":{input:m.eventsCreate,output:v.eventsCreate},"events.get":{input:m.eventsGet,output:v.eventsGet},"events.getMany":{input:m.eventsGetMany,output:v.eventsGetMany},"events.update":{input:m.eventsUpdate,output:v.eventsUpdate},"events.delete":{input:m.eventsDelete,output:v.eventsDelete},"calendar.getAvailability":{input:m.calendarGetAvailability,output:v.calendarGetAvailability}},De={onEventChanged:Z.onEventChanged},Oe={onEventChanged:{description:"A Google Calendar event was created, updated, or deleted",payload:F,response:$}},Me="oauth_2",Re={"events.create":{riskLevel:"write",description:"Create a new calendar event"},"events.get":{riskLevel:"read",description:"Get a specific calendar event"},"events.getMany":{riskLevel:"read",description:"List calendar events"},"events.update":{riskLevel:"write",description:"Update an existing calendar event"},"events.delete":{riskLevel:"destructive",description:"Delete a calendar event [DESTRUCTIVE]"},"calendar.getAvailability":{riskLevel:"read",description:"Get free/busy availability for a calendar"}};function ct(t={}){let n={...t,authType:t.authType??Me};return{id:"googlecalendar",schema:z,options:n,oauthConfig:{providerName:"Google",authUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:["https://www.googleapis.com/auth/calendar"],authParams:{access_type:"offline",prompt:"consent"}},hooks:n.hooks,webhookHooks:n.webhookHooks,endpoints:Ae,webhooks:De,endpointMeta:Re,endpointSchemas:Pe,webhookSchemas:Oe,keyBuilder:async r=>{let a=r.authType;if(n.key)return n.key;if(r.authType==="oauth_2"){let[s,c,d]=await Promise.all([r.keys.get_access_token(),r.keys.get_expires_at(),r.keys.get_refresh_token()]);if(!d)throw new Error("[auth-missing:googlecalendar:refresh_token]: Google Calendar refresh token is missing");let l=await r.keys.get_integration_credentials();if(!l.client_id||!l.client_secret)throw new Error("[corsair:googlecalendar] No client id or client secret");try{let p=await w({accessToken:s,expiresAt:c,refreshToken:d,clientId:l.client_id,clientSecret:l.client_secret});return p.refreshed&&await Promise.all([r.keys.set_access_token(p.accessToken),r.keys.set_expires_at(String(p.expiresAt))]),r._refreshAuth=async()=>{let f=await w({accessToken:null,expiresAt:null,refreshToken:d,clientId:l.client_id,clientSecret:l.client_secret,forceRefresh:!0});return await r.keys.set_access_token(f.accessToken),await r.keys.set_expires_at(String(f.expiresAt)),f.accessToken},p.accessToken}catch(p){throw console.error("[corsair:googlecalendar] Failed to get valid access token:",p),p}}throw new Error(`[auth-missing:googlecalendar:${a}]: Google Calendar key is missing`)},pluginWebhookMatcher:r=>{let a=r.headers;if(!(a.from==="noreply@google.com"||typeof a["user-agent"]=="string"&&a["user-agent"].includes("APIs-Google")))return!1;let c=r.body;if(!c?.message?.data)return!1;try{let d=h(c.message.data);return!!d.resourceUri&&d.resourceUri.includes("calendar")}catch{return!1}}}}export{T as createGoogleCalendarWebhookMatcher,h as decodePubSubMessage,ct as googlecalendar,Pe as googlecalendarEndpointSchemas};
|
|
1
|
+
import{request as J}from"corsair/http";var k=class extends Error{constructor(r,a){super(r);this.code=a;this.name="GoogleCalendarAPIError"}},Q="https://www.googleapis.com/calendar/v3";async function X(t,n,r){let a=await fetch("https://oauth2.googleapis.com/token",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:t,client_secret:n,refresh_token:r,grant_type:"refresh_token"})});if(!a.ok){let c=await a.text();throw new k(`Failed to refresh access token: ${c}`,a.status)}return await a.json()}async function w({accessToken:t,expiresAt:n,clientId:r,clientSecret:a,refreshToken:s,forceRefresh:c=!1}){let d=Math.floor(Date.now()/1e3);if(!c&&t&&n&&Number(n)>d+300)return{accessToken:t,expiresAt:Number(n),refreshed:!1};let p=await X(r,a,s);return{accessToken:p.access_token,expiresAt:d+p.expires_in,refreshed:!0}}async function E(t,n,r={}){let{method:a="GET",body:s,query:c}=r;return await J({BASE:Q,VERSION:"1.0.0",WITH_CREDENTIALS:!1,CREDENTIALS:"omit",TOKEN:n,HEADERS:{"Content-Type":"application/json"}},{method:a,url:t,body:a==="POST"||a==="PUT"||a==="PATCH"?s:void 0,mediaType:"application/json",query:c})}function ee(t){return t instanceof Error&&"status"in t&&t.status===401}async function g(t,n,r={}){try{return await E(t,n.key,r)}catch(a){if(ee(a)&&n._refreshAuth){let s=await n._refreshAuth();return await E(t,s,r)}throw a}}import{logEventFromContext as te}from"corsair/core";var I=async(t,n)=>{let r=await g("/freeBusy",t,{method:"POST",body:{timeMin:n.timeMin,timeMax:n.timeMax,timeZone:n.timeZone,groupExpansionMax:n.groupExpansionMax,calendarExpansionMax:n.calendarExpansionMax,items:n.items}});return await te(t,"googlecalendar.calendar.getAvailability",{...n},"completed"),r};import{logEventFromContext as C}from"corsair/core";var A=async(t,n)=>{let r=n.calendarId||"primary",a=await g(`/calendars/${r}/events`,t,{method:"POST",body:n.event});if(a.id&&t.db.events)try{await t.db.events.upsertByEntityId(a.id,{...a,id:a.id,calendarId:r,createdAt:new Date})}catch(s){console.warn("Failed to save event to database:",s)}return await C(t,"googlecalendar.events.create",{...n},"completed"),a},P=async(t,n)=>{let r=n.calendarId||"primary",a=await g(`/calendars/${r}/events/${n.id}`,t,{method:"GET",query:{timeZone:n.timeZone,maxAttendees:n.maxAttendees}});if(a.id&&t.db.events)try{await t.db.events.upsertByEntityId(a.id,{...a,id:a.id,calendarId:r,createdAt:new Date})}catch(s){console.warn("Failed to save event to database:",s)}return await C(t,"googlecalendar.events.get",{...n},"completed"),a},D=async(t,n)=>{let r=n.calendarId||"primary",a=await g(`/calendars/${r}/events`,t,{method:"GET",query:n});if(a.items&&t.db.events)try{for(let s of a.items)s.id&&await t.db.events.upsertByEntityId(s.id,{...s,id:s.id,calendarId:r,createdAt:new Date})}catch(s){console.warn("Failed to save events to database:",s)}return await C(t,"googlecalendar.events.getMany",{...n},"completed"),a},O=async(t,n)=>{let r=n.calendarId||"primary",a=await g(`/calendars/${r}/events/${n.id}`,t,{method:"PUT",body:n.event,query:{sendUpdates:n.sendUpdates,sendNotifications:n.sendNotifications,conferenceDataVersion:n.conferenceDataVersion,maxAttendees:n.maxAttendees,supportsAttachments:n.supportsAttachments}});if(a.id&&t.db.events)try{await t.db.events.upsertByEntityId(a.id,{...a,id:a.id,calendarId:r,createdAt:new Date})}catch(s){console.warn("Failed to save event to database:",s)}return await C(t,"googlecalendar.events.update",{...n},"completed"),a},M=async(t,n)=>{let r=n.calendarId||"primary";if(await g(`/calendars/${r}/events/${n.id}`,t,{method:"DELETE",query:{sendUpdates:n.sendUpdates,sendNotifications:n.sendNotifications}}),t.db.events)try{await t.db.events.deleteByEntityId(n.id)}catch(a){console.warn("Failed to delete event from database:",a)}await C(t,"googlecalendar.events.delete",{...n},"completed")};import{z as e}from"zod";var y=e.object({date:e.string().optional().describe('All-day event date in "YYYY-MM-DD" format'),dateTime:e.string().optional().describe('RFC 3339 timestamp, e.g. "2024-12-25T10:00:00-07:00". Required for timed events.'),timeZone:e.string().optional().describe('IANA time zone name, e.g. "America/New_York"')}),N=e.object({id:e.string().optional(),email:e.string().optional().describe("Attendee's email address. Required when adding an attendee."),displayName:e.string().optional(),organizer:e.boolean().optional(),self:e.boolean().optional(),resource:e.boolean().optional(),optional:e.boolean().optional(),responseStatus:e.enum(["needsAction","declined","tentative","accepted"]).optional(),comment:e.string().optional(),additionalGuests:e.number().optional()}),R=e.object({id:e.string().optional(),email:e.string().optional(),displayName:e.string().optional(),self:e.boolean().optional()}),U=e.object({method:e.enum(["email","popup"]).optional(),minutes:e.number().optional()}),_=e.object({useDefault:e.boolean().optional().describe("Use the calendar default reminders"),overrides:e.array(U).optional().describe("Custom reminders. Only used when useDefault is false.")}),W=e.object({summary:e.string().optional().describe("Title of the event"),description:e.string().optional().describe("Description of the event. HTML is supported."),location:e.string().optional().describe("Geographic location of the event as free-form text"),start:y.optional().describe('Start time. Use "date" for all-day events, "dateTime" for timed events.'),end:y.optional().describe('End time. Use "date" for all-day events, "dateTime" for timed events.'),attendees:e.array(N).optional().describe("List of attendees. Each attendee must include an email."),recurrence:e.array(e.string()).optional().describe('RRULE / EXDATE lines per RFC 5545, e.g. ["RRULE:FREQ=WEEKLY;COUNT=5"]'),colorId:e.string().optional().describe("Color ID (1\u201311). Use the colors endpoint to see options."),transparency:e.enum(["opaque","transparent"]).optional().describe('"opaque" blocks time on the calendar (default); "transparent" does not'),visibility:e.enum(["default","public","private","confidential"]).optional(),eventType:e.enum(["default","outOfOffice","focusTime","workingLocation"]).optional(),status:e.enum(["confirmed","tentative","cancelled"]).optional(),reminders:_.optional(),guestsCanModify:e.boolean().optional(),guestsCanInviteOthers:e.boolean().optional(),guestsCanSeeOtherGuests:e.boolean().optional(),anyoneCanAddSelf:e.boolean().optional(),sequence:e.number().optional().describe("Sequence number for recurring event updates"),originalStartTime:y.optional().describe("Original start time for a recurring event instance"),recurringEventId:e.string().optional().describe("ID of the recurring event this instance belongs to")}),ae=e.object({calendarId:e.string().optional().describe('Calendar ID. Defaults to "primary".'),event:W.describe('Event body. Provide at minimum "summary", "start", and "end".'),sendUpdates:e.enum(["all","externalOnly","none"]).optional(),sendNotifications:e.boolean().optional(),conferenceDataVersion:e.number().optional(),maxAttendees:e.number().optional(),supportsAttachments:e.boolean().optional()}),re=e.object({calendarId:e.string().optional(),id:e.string(),timeZone:e.string().optional(),maxAttendees:e.number().optional()}),ie=e.object({calendarId:e.string().optional(),timeMin:e.string().optional(),timeMax:e.string().optional(),timeZone:e.string().optional(),updatedMin:e.string().optional(),singleEvents:e.boolean().optional(),maxResults:e.number().optional(),pageToken:e.string().optional(),q:e.string().optional(),orderBy:e.enum(["startTime","updated"]).optional(),iCalUID:e.string().optional(),showDeleted:e.boolean().optional(),showHiddenInvitations:e.boolean().optional()}),se=e.object({calendarId:e.string().optional().describe('Calendar ID. Defaults to "primary".'),id:e.string().describe("Event ID to update"),event:W.describe("Updated event fields"),sendUpdates:e.enum(["all","externalOnly","none"]).optional(),sendNotifications:e.boolean().optional(),conferenceDataVersion:e.number().optional(),maxAttendees:e.number().optional(),supportsAttachments:e.boolean().optional()}),le=e.object({calendarId:e.string().optional(),id:e.string(),sendUpdates:e.enum(["all","externalOnly","none"]).optional(),sendNotifications:e.boolean().optional()}),de=e.object({timeMin:e.string(),timeMax:e.string(),timeZone:e.string().optional(),groupExpansionMax:e.number().optional(),calendarExpansionMax:e.number().optional(),items:e.array(e.object({id:e.string()})).optional()}),m={eventsCreate:ae,eventsGet:re,eventsGetMany:ie,eventsUpdate:se,eventsDelete:le,calendarGetAvailability:de},G=e.object({id:e.string().optional(),status:e.enum(["confirmed","tentative","cancelled"]).optional(),htmlLink:e.string().optional(),created:e.string().optional(),updated:e.string().optional(),summary:e.string().optional(),description:e.string().optional(),location:e.string().optional(),colorId:e.string().optional(),creator:R.optional(),organizer:R.optional(),start:y.optional(),end:y.optional(),endTimeUnspecified:e.boolean().optional(),recurrence:e.array(e.string()).optional(),recurringEventId:e.string().optional(),originalStartTime:y.optional(),transparency:e.enum(["opaque","transparent"]).optional(),visibility:e.enum(["default","public","private","confidential"]).optional(),iCalUID:e.string().optional(),sequence:e.number().optional(),attendees:e.array(N).optional(),attendeesOmitted:e.boolean().optional(),hangoutLink:e.string().optional(),reminders:_.optional(),anyoneCanAddSelf:e.boolean().optional(),guestsCanInviteOthers:e.boolean().optional(),guestsCanModify:e.boolean().optional(),guestsCanSeeOtherGuests:e.boolean().optional(),privateCopy:e.boolean().optional(),locked:e.boolean().optional(),eventType:e.enum(["default","outOfOffice","focusTime","workingLocation"]).optional()}),pe=e.object({kind:e.string().optional(),etag:e.string().optional(),summary:e.string().optional(),description:e.string().optional(),updated:e.string().optional(),timeZone:e.string().optional(),accessRole:e.string().optional(),defaultReminders:e.array(U).optional(),nextPageToken:e.string().optional(),nextSyncToken:e.string().optional(),items:e.array(G).optional()}),ce=e.object({busy:e.array(e.object({start:e.string().optional(),end:e.string().optional()})).optional(),errors:e.array(e.object({domain:e.string().optional(),reason:e.string().optional()})).optional()}),ge=e.object({kind:e.string().optional(),calendars:e.record(e.string(),ce).optional(),groups:e.record(e.string(),e.object({calendars:e.array(e.string()).optional(),errors:e.array(e.object({domain:e.string().optional(),reason:e.string().optional()})).optional()})).optional(),timeMin:e.string().optional(),timeMax:e.string().optional()}),v={eventsCreate:G,eventsGet:G,eventsGetMany:pe,eventsUpdate:G,eventsDelete:e.void(),calendarGetAvailability:ge};var b={create:A,get:P,getMany:D,update:O,delete:M},j={getAvailability:I};import{z as o}from"zod";var S=o.object({date:o.string().optional(),dateTime:o.string().optional(),timeZone:o.string().optional()}),ue=o.object({id:o.string().optional(),email:o.string().optional(),displayName:o.string().optional(),organizer:o.boolean().optional(),self:o.boolean().optional(),resource:o.boolean().optional(),optional:o.boolean().optional(),responseStatus:o.enum(["needsAction","declined","tentative","accepted"]).optional(),comment:o.string().optional(),additionalGuests:o.number().optional()}),q=o.object({id:o.string().optional(),email:o.string().optional(),displayName:o.string().optional(),self:o.boolean().optional()}),me=o.object({method:o.enum(["email","popup"]).optional(),minutes:o.number().optional()}),ve=o.object({useDefault:o.boolean().optional(),overrides:o.array(me).optional()}),B=o.object({id:o.string(),status:o.enum(["confirmed","tentative","cancelled"]).optional(),htmlLink:o.string().optional(),created:o.string().optional(),updated:o.string().optional(),summary:o.string().optional(),description:o.string().optional(),location:o.string().optional(),colorId:o.string().optional(),creator:q.optional(),organizer:q.optional(),start:S.optional(),end:S.optional(),endTimeUnspecified:o.boolean().optional(),recurrence:o.array(o.string()).optional(),recurringEventId:o.string().optional(),originalStartTime:S.optional(),transparency:o.enum(["opaque","transparent"]).optional(),visibility:o.enum(["default","public","private","confidential"]).optional(),iCalUID:o.string().optional(),sequence:o.number().optional(),attendees:o.array(ue).optional(),attendeesOmitted:o.boolean().optional(),hangoutLink:o.string().optional(),reminders:ve.optional(),anyoneCanAddSelf:o.boolean().optional(),guestsCanInviteOthers:o.boolean().optional(),guestsCanModify:o.boolean().optional(),guestsCanSeeOtherGuests:o.boolean().optional(),privateCopy:o.boolean().optional(),locked:o.boolean().optional(),eventType:o.enum(["default","outOfOffice","focusTime","workingLocation"]).optional(),calendarId:o.string().optional(),createdAt:o.coerce.date().optional()}),L=o.object({id:o.string(),summary:o.string().optional(),description:o.string().optional(),location:o.string().optional(),timeZone:o.string().optional(),createdAt:o.coerce.date().optional()});var z={version:"1.0.0",entities:{events:B,calendars:L}};import{logEventFromContext as x}from"corsair/core";import{z as i}from"zod";var fe=i.object({data:i.string().optional(),attributes:i.record(i.string(),i.string()).optional(),messageId:i.string().optional(),publishTime:i.string().optional()}),F=i.object({message:fe.optional(),subscription:i.string().optional(),event:i.unknown().optional()}),Ye=i.object({resourceId:i.string().optional(),resourceState:i.string().optional(),resourceUri:i.string().optional(),channelId:i.string().optional(),channelExpiration:i.string().optional(),channelToken:i.string().optional(),changed:i.string().optional()}),ye=i.object({type:i.literal("eventCreated"),calendarId:i.string(),event:i.custom(),timestamp:i.string()}),be=i.object({type:i.literal("eventUpdated"),calendarId:i.string(),event:i.custom(),timestamp:i.string()}),he=i.object({type:i.literal("eventDeleted"),calendarId:i.string(),eventId:i.string(),timestamp:i.string()}),$=i.union([ye,be,he]);function h(t){let n=Buffer.from(t,"base64").toString("utf-8");return JSON.parse(n)}function T(t){return n=>{let r=n.body;if(!r.message?.data)return!1;try{let a=h(r.message.data);return!!a.channelId&&!!a.resourceId&&!!a.resourceUri&&a.resourceUri.includes("/calendar/")}catch{return!1}}}var Ee=/\/calendars\/([^\/\?]+)/,Ce=/\/calendars\/[^\/]+\/events\/([^\/\?]+)/,Ge=120*1e3,ke=5e3;function we(t){return{calendarId:t.match(Ee)?.[1],eventId:t.match(Ce)?.[1]}}function Se(t){return!t.created||!t.updated?!1:Math.abs(new Date(t.updated).getTime()-new Date(t.created).getTime())<ke}function Te(t,n,r){return E(`/calendars/${n}/events/${r}`,t,{method:"GET"})}async function H(t,n){let r=new Date(Date.now()-Ge).toISOString();return(await E(`/calendars/${n}/events`,t,{method:"GET",query:{maxResults:10,orderBy:"updated",updatedMin:r,showDeleted:!0}})).items??[]}async function xe(t,n,r){return r?Te(t,n,r):(await H(t,n)).at(-1)??null}async function Ie(t,n,r,a){return r||((await H(t,n)).find(d=>d.status==="cancelled")?.id??a.resourceId??"")}async function K(t,n,r){r&&t.db.events&&await t.db.events.deleteByEntityId(r);let a={type:"eventDeleted",calendarId:n,eventId:r,timestamp:new Date().toISOString()};return await x(t,"googlecalendar.webhook.eventDeleted",{...a},"completed"),{eventData:a}}var V={match:T("eventChanged"),handler:async(t,n)=>{let r=n.payload;if(!r.message?.data)return{success:!1,error:"No message data in notification"};let a=h(r.message.data);if(!a.resourceUri)return{success:!1,error:"Invalid push notification format"};let{calendarId:s,eventId:c}=we(a.resourceUri);if(!s)return{success:!1,error:"Could not parse calendar ID from resource URI"};let d=t.key;try{if(a.resourceState==="not_exists"){let u=await Ie(d,s,c,a),{eventData:Y}=await K(t,s,u);return{success:!0,data:Y}}let l=await xe(d,s,c);if(!l)return{success:!1,error:"No recently updated events found in calendar"};if(l.status==="cancelled"){let{eventData:u}=await K(t,s,l.id??"");return{success:!0,data:u}}let p="";if(l.id&&t.db.events&&(p=(await t.db.events.upsertByEntityId(l.id,{...l,id:l.id,calendarId:s,createdAt:new Date}))?.id??""),Se(l)){let u={type:"eventCreated",calendarId:s,event:l,timestamp:new Date().toISOString()};return await x(t,"googlecalendar.webhook.eventCreated",{...u},"completed"),{success:!0,corsairEntityId:p,data:u}}let f={type:"eventUpdated",calendarId:s,event:l,timestamp:new Date().toISOString()};return await x(t,"googlecalendar.webhook.eventUpdated",{...f},"completed"),{success:!0,corsairEntityId:p,data:f}}catch(l){return console.error("Failed to process webhook:",l),{success:!1,error:`Failed to process event: ${l instanceof Error?l.message:"Unknown error"}`}}}};var Z={onEventChanged:V};var Ae={events:{create:b.create,get:b.get,getMany:b.getMany,update:b.update,delete:b.delete},calendar:{getAvailability:j.getAvailability}},Pe={"events.create":{input:m.eventsCreate,output:v.eventsCreate},"events.get":{input:m.eventsGet,output:v.eventsGet},"events.getMany":{input:m.eventsGetMany,output:v.eventsGetMany},"events.update":{input:m.eventsUpdate,output:v.eventsUpdate},"events.delete":{input:m.eventsDelete,output:v.eventsDelete},"calendar.getAvailability":{input:m.calendarGetAvailability,output:v.calendarGetAvailability}},De={onEventChanged:Z.onEventChanged},Oe={onEventChanged:{description:"A Google Calendar event was created, updated, or deleted",payload:F,response:$}},Me="oauth_2",Re={"events.create":{riskLevel:"write",description:"Create a new calendar event"},"events.get":{riskLevel:"read",description:"Get a specific calendar event"},"events.getMany":{riskLevel:"read",description:"List calendar events"},"events.update":{riskLevel:"write",description:"Update an existing calendar event"},"events.delete":{riskLevel:"destructive",description:"Delete a calendar event [DESTRUCTIVE]"},"calendar.getAvailability":{riskLevel:"read",description:"Get free/busy availability for a calendar"}};function ct(t={}){let n={...t,authType:t.authType??Me};return{id:"googlecalendar",schema:z,options:n,oauthConfig:{providerName:"Google",authUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:["https://www.googleapis.com/auth/calendar"],authParams:{access_type:"offline",prompt:"consent"}},hooks:n.hooks,webhookHooks:n.webhookHooks,endpoints:Ae,webhooks:De,endpointMeta:Re,endpointSchemas:Pe,webhookSchemas:Oe,keyBuilder:async r=>{let a=r.authType;if(n.key)return n.key;if(r.authType==="oauth_2"){let[s,c,d]=await Promise.all([r.keys.get_access_token(),r.keys.get_expires_at(),r.keys.get_refresh_token()]);if(!d)throw new Error("[auth-missing:googlecalendar:refresh_token]: Google Calendar refresh token is missing");let l=await r.keys.get_integration_credentials();if(!l.client_id||!l.client_secret)throw new Error("[corsair:googlecalendar] No client id or client secret");try{let p=await w({accessToken:s,expiresAt:c,refreshToken:d,clientId:l.client_id,clientSecret:l.client_secret});return p.refreshed&&await Promise.all([r.keys.set_access_token(p.accessToken),r.keys.set_expires_at(String(p.expiresAt))]),r._refreshAuth=async()=>{let f=await w({accessToken:null,expiresAt:null,refreshToken:d,clientId:l.client_id,clientSecret:l.client_secret,forceRefresh:!0});return await r.keys.set_access_token(f.accessToken),await r.keys.set_expires_at(String(f.expiresAt)),f.accessToken},p.accessToken}catch(p){throw console.error("[corsair:googlecalendar] Failed to get valid access token:",p),p}}throw new Error(`[auth-missing:googlecalendar:${a}]: Google Calendar key is missing`)},pluginWebhookMatcher:r=>{let a=r.headers;if(!(a.from==="noreply@google.com"||typeof a["user-agent"]=="string"&&a["user-agent"].includes("APIs-Google")))return!1;let c=r.body;if(!c?.message?.data)return!1;try{let d=h(c.message.data);return!!d.resourceUri&&d.resourceUri.includes("calendar")}catch{return!1}}}}export{T as createGoogleCalendarWebhookMatcher,h as decodePubSubMessage,ct as googlecalendar,Pe as googlecalendarEndpointSchemas};
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
export declare const GoogleCalendarEvent: z.ZodObject<{
|
|
3
3
|
id: z.ZodString;
|
|
4
|
-
status: z.ZodOptional<z.ZodEnum<
|
|
4
|
+
status: z.ZodOptional<z.ZodEnum<{
|
|
5
|
+
tentative: "tentative";
|
|
6
|
+
confirmed: "confirmed";
|
|
7
|
+
cancelled: "cancelled";
|
|
8
|
+
}>>;
|
|
5
9
|
htmlLink: z.ZodOptional<z.ZodString>;
|
|
6
10
|
created: z.ZodOptional<z.ZodString>;
|
|
7
11
|
updated: z.ZodOptional<z.ZodString>;
|
|
@@ -14,77 +18,41 @@ export declare const GoogleCalendarEvent: z.ZodObject<{
|
|
|
14
18
|
email: z.ZodOptional<z.ZodString>;
|
|
15
19
|
displayName: z.ZodOptional<z.ZodString>;
|
|
16
20
|
self: z.ZodOptional<z.ZodBoolean>;
|
|
17
|
-
},
|
|
18
|
-
email?: string | undefined;
|
|
19
|
-
id?: string | undefined;
|
|
20
|
-
displayName?: string | undefined;
|
|
21
|
-
self?: boolean | undefined;
|
|
22
|
-
}, {
|
|
23
|
-
email?: string | undefined;
|
|
24
|
-
id?: string | undefined;
|
|
25
|
-
displayName?: string | undefined;
|
|
26
|
-
self?: boolean | undefined;
|
|
27
|
-
}>>;
|
|
21
|
+
}, z.core.$strip>>;
|
|
28
22
|
organizer: z.ZodOptional<z.ZodObject<{
|
|
29
23
|
id: z.ZodOptional<z.ZodString>;
|
|
30
24
|
email: z.ZodOptional<z.ZodString>;
|
|
31
25
|
displayName: z.ZodOptional<z.ZodString>;
|
|
32
26
|
self: z.ZodOptional<z.ZodBoolean>;
|
|
33
|
-
},
|
|
34
|
-
email?: string | undefined;
|
|
35
|
-
id?: string | undefined;
|
|
36
|
-
displayName?: string | undefined;
|
|
37
|
-
self?: boolean | undefined;
|
|
38
|
-
}, {
|
|
39
|
-
email?: string | undefined;
|
|
40
|
-
id?: string | undefined;
|
|
41
|
-
displayName?: string | undefined;
|
|
42
|
-
self?: boolean | undefined;
|
|
43
|
-
}>>;
|
|
27
|
+
}, z.core.$strip>>;
|
|
44
28
|
start: z.ZodOptional<z.ZodObject<{
|
|
45
29
|
date: z.ZodOptional<z.ZodString>;
|
|
46
30
|
dateTime: z.ZodOptional<z.ZodString>;
|
|
47
31
|
timeZone: z.ZodOptional<z.ZodString>;
|
|
48
|
-
},
|
|
49
|
-
date?: string | undefined;
|
|
50
|
-
dateTime?: string | undefined;
|
|
51
|
-
timeZone?: string | undefined;
|
|
52
|
-
}, {
|
|
53
|
-
date?: string | undefined;
|
|
54
|
-
dateTime?: string | undefined;
|
|
55
|
-
timeZone?: string | undefined;
|
|
56
|
-
}>>;
|
|
32
|
+
}, z.core.$strip>>;
|
|
57
33
|
end: z.ZodOptional<z.ZodObject<{
|
|
58
34
|
date: z.ZodOptional<z.ZodString>;
|
|
59
35
|
dateTime: z.ZodOptional<z.ZodString>;
|
|
60
36
|
timeZone: z.ZodOptional<z.ZodString>;
|
|
61
|
-
},
|
|
62
|
-
date?: string | undefined;
|
|
63
|
-
dateTime?: string | undefined;
|
|
64
|
-
timeZone?: string | undefined;
|
|
65
|
-
}, {
|
|
66
|
-
date?: string | undefined;
|
|
67
|
-
dateTime?: string | undefined;
|
|
68
|
-
timeZone?: string | undefined;
|
|
69
|
-
}>>;
|
|
37
|
+
}, z.core.$strip>>;
|
|
70
38
|
endTimeUnspecified: z.ZodOptional<z.ZodBoolean>;
|
|
71
|
-
recurrence: z.ZodOptional<z.ZodArray<z.ZodString
|
|
39
|
+
recurrence: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
72
40
|
recurringEventId: z.ZodOptional<z.ZodString>;
|
|
73
41
|
originalStartTime: z.ZodOptional<z.ZodObject<{
|
|
74
42
|
date: z.ZodOptional<z.ZodString>;
|
|
75
43
|
dateTime: z.ZodOptional<z.ZodString>;
|
|
76
44
|
timeZone: z.ZodOptional<z.ZodString>;
|
|
77
|
-
},
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
45
|
+
}, z.core.$strip>>;
|
|
46
|
+
transparency: z.ZodOptional<z.ZodEnum<{
|
|
47
|
+
opaque: "opaque";
|
|
48
|
+
transparent: "transparent";
|
|
49
|
+
}>>;
|
|
50
|
+
visibility: z.ZodOptional<z.ZodEnum<{
|
|
51
|
+
default: "default";
|
|
52
|
+
public: "public";
|
|
53
|
+
private: "private";
|
|
54
|
+
confidential: "confidential";
|
|
85
55
|
}>>;
|
|
86
|
-
transparency: z.ZodOptional<z.ZodEnum<["opaque", "transparent"]>>;
|
|
87
|
-
visibility: z.ZodOptional<z.ZodEnum<["default", "public", "private", "confidential"]>>;
|
|
88
56
|
iCalUID: z.ZodOptional<z.ZodString>;
|
|
89
57
|
sequence: z.ZodOptional<z.ZodNumber>;
|
|
90
58
|
attendees: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
@@ -95,239 +63,50 @@ export declare const GoogleCalendarEvent: z.ZodObject<{
|
|
|
95
63
|
self: z.ZodOptional<z.ZodBoolean>;
|
|
96
64
|
resource: z.ZodOptional<z.ZodBoolean>;
|
|
97
65
|
optional: z.ZodOptional<z.ZodBoolean>;
|
|
98
|
-
responseStatus: z.ZodOptional<z.ZodEnum<
|
|
66
|
+
responseStatus: z.ZodOptional<z.ZodEnum<{
|
|
67
|
+
needsAction: "needsAction";
|
|
68
|
+
declined: "declined";
|
|
69
|
+
tentative: "tentative";
|
|
70
|
+
accepted: "accepted";
|
|
71
|
+
}>>;
|
|
99
72
|
comment: z.ZodOptional<z.ZodString>;
|
|
100
73
|
additionalGuests: z.ZodOptional<z.ZodNumber>;
|
|
101
|
-
},
|
|
102
|
-
email?: string | undefined;
|
|
103
|
-
id?: string | undefined;
|
|
104
|
-
displayName?: string | undefined;
|
|
105
|
-
organizer?: boolean | undefined;
|
|
106
|
-
self?: boolean | undefined;
|
|
107
|
-
resource?: boolean | undefined;
|
|
108
|
-
optional?: boolean | undefined;
|
|
109
|
-
responseStatus?: "needsAction" | "declined" | "tentative" | "accepted" | undefined;
|
|
110
|
-
comment?: string | undefined;
|
|
111
|
-
additionalGuests?: number | undefined;
|
|
112
|
-
}, {
|
|
113
|
-
email?: string | undefined;
|
|
114
|
-
id?: string | undefined;
|
|
115
|
-
displayName?: string | undefined;
|
|
116
|
-
organizer?: boolean | undefined;
|
|
117
|
-
self?: boolean | undefined;
|
|
118
|
-
resource?: boolean | undefined;
|
|
119
|
-
optional?: boolean | undefined;
|
|
120
|
-
responseStatus?: "needsAction" | "declined" | "tentative" | "accepted" | undefined;
|
|
121
|
-
comment?: string | undefined;
|
|
122
|
-
additionalGuests?: number | undefined;
|
|
123
|
-
}>, "many">>;
|
|
74
|
+
}, z.core.$strip>>>;
|
|
124
75
|
attendeesOmitted: z.ZodOptional<z.ZodBoolean>;
|
|
125
76
|
hangoutLink: z.ZodOptional<z.ZodString>;
|
|
126
77
|
reminders: z.ZodOptional<z.ZodObject<{
|
|
127
78
|
useDefault: z.ZodOptional<z.ZodBoolean>;
|
|
128
79
|
overrides: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
129
|
-
method: z.ZodOptional<z.ZodEnum<
|
|
80
|
+
method: z.ZodOptional<z.ZodEnum<{
|
|
81
|
+
email: "email";
|
|
82
|
+
popup: "popup";
|
|
83
|
+
}>>;
|
|
130
84
|
minutes: z.ZodOptional<z.ZodNumber>;
|
|
131
|
-
},
|
|
132
|
-
|
|
133
|
-
minutes?: number | undefined;
|
|
134
|
-
}, {
|
|
135
|
-
method?: "email" | "popup" | undefined;
|
|
136
|
-
minutes?: number | undefined;
|
|
137
|
-
}>, "many">>;
|
|
138
|
-
}, "strip", z.ZodTypeAny, {
|
|
139
|
-
useDefault?: boolean | undefined;
|
|
140
|
-
overrides?: {
|
|
141
|
-
method?: "email" | "popup" | undefined;
|
|
142
|
-
minutes?: number | undefined;
|
|
143
|
-
}[] | undefined;
|
|
144
|
-
}, {
|
|
145
|
-
useDefault?: boolean | undefined;
|
|
146
|
-
overrides?: {
|
|
147
|
-
method?: "email" | "popup" | undefined;
|
|
148
|
-
minutes?: number | undefined;
|
|
149
|
-
}[] | undefined;
|
|
150
|
-
}>>;
|
|
85
|
+
}, z.core.$strip>>>;
|
|
86
|
+
}, z.core.$strip>>;
|
|
151
87
|
anyoneCanAddSelf: z.ZodOptional<z.ZodBoolean>;
|
|
152
88
|
guestsCanInviteOthers: z.ZodOptional<z.ZodBoolean>;
|
|
153
89
|
guestsCanModify: z.ZodOptional<z.ZodBoolean>;
|
|
154
90
|
guestsCanSeeOtherGuests: z.ZodOptional<z.ZodBoolean>;
|
|
155
91
|
privateCopy: z.ZodOptional<z.ZodBoolean>;
|
|
156
92
|
locked: z.ZodOptional<z.ZodBoolean>;
|
|
157
|
-
eventType: z.ZodOptional<z.ZodEnum<
|
|
93
|
+
eventType: z.ZodOptional<z.ZodEnum<{
|
|
94
|
+
default: "default";
|
|
95
|
+
outOfOffice: "outOfOffice";
|
|
96
|
+
focusTime: "focusTime";
|
|
97
|
+
workingLocation: "workingLocation";
|
|
98
|
+
}>>;
|
|
158
99
|
calendarId: z.ZodOptional<z.ZodString>;
|
|
159
|
-
createdAt: z.ZodOptional<z.
|
|
160
|
-
},
|
|
161
|
-
id: string;
|
|
162
|
-
location?: string | undefined;
|
|
163
|
-
status?: "tentative" | "confirmed" | "cancelled" | undefined;
|
|
164
|
-
organizer?: {
|
|
165
|
-
email?: string | undefined;
|
|
166
|
-
id?: string | undefined;
|
|
167
|
-
displayName?: string | undefined;
|
|
168
|
-
self?: boolean | undefined;
|
|
169
|
-
} | undefined;
|
|
170
|
-
summary?: string | undefined;
|
|
171
|
-
description?: string | undefined;
|
|
172
|
-
start?: {
|
|
173
|
-
date?: string | undefined;
|
|
174
|
-
dateTime?: string | undefined;
|
|
175
|
-
timeZone?: string | undefined;
|
|
176
|
-
} | undefined;
|
|
177
|
-
end?: {
|
|
178
|
-
date?: string | undefined;
|
|
179
|
-
dateTime?: string | undefined;
|
|
180
|
-
timeZone?: string | undefined;
|
|
181
|
-
} | undefined;
|
|
182
|
-
attendees?: {
|
|
183
|
-
email?: string | undefined;
|
|
184
|
-
id?: string | undefined;
|
|
185
|
-
displayName?: string | undefined;
|
|
186
|
-
organizer?: boolean | undefined;
|
|
187
|
-
self?: boolean | undefined;
|
|
188
|
-
resource?: boolean | undefined;
|
|
189
|
-
optional?: boolean | undefined;
|
|
190
|
-
responseStatus?: "needsAction" | "declined" | "tentative" | "accepted" | undefined;
|
|
191
|
-
comment?: string | undefined;
|
|
192
|
-
additionalGuests?: number | undefined;
|
|
193
|
-
}[] | undefined;
|
|
194
|
-
recurrence?: string[] | undefined;
|
|
195
|
-
colorId?: string | undefined;
|
|
196
|
-
transparency?: "opaque" | "transparent" | undefined;
|
|
197
|
-
visibility?: "default" | "public" | "private" | "confidential" | undefined;
|
|
198
|
-
eventType?: "default" | "outOfOffice" | "focusTime" | "workingLocation" | undefined;
|
|
199
|
-
reminders?: {
|
|
200
|
-
useDefault?: boolean | undefined;
|
|
201
|
-
overrides?: {
|
|
202
|
-
method?: "email" | "popup" | undefined;
|
|
203
|
-
minutes?: number | undefined;
|
|
204
|
-
}[] | undefined;
|
|
205
|
-
} | undefined;
|
|
206
|
-
guestsCanModify?: boolean | undefined;
|
|
207
|
-
guestsCanInviteOthers?: boolean | undefined;
|
|
208
|
-
guestsCanSeeOtherGuests?: boolean | undefined;
|
|
209
|
-
anyoneCanAddSelf?: boolean | undefined;
|
|
210
|
-
sequence?: number | undefined;
|
|
211
|
-
originalStartTime?: {
|
|
212
|
-
date?: string | undefined;
|
|
213
|
-
dateTime?: string | undefined;
|
|
214
|
-
timeZone?: string | undefined;
|
|
215
|
-
} | undefined;
|
|
216
|
-
recurringEventId?: string | undefined;
|
|
217
|
-
calendarId?: string | undefined;
|
|
218
|
-
updated?: string | undefined;
|
|
219
|
-
iCalUID?: string | undefined;
|
|
220
|
-
htmlLink?: string | undefined;
|
|
221
|
-
created?: string | undefined;
|
|
222
|
-
creator?: {
|
|
223
|
-
email?: string | undefined;
|
|
224
|
-
id?: string | undefined;
|
|
225
|
-
displayName?: string | undefined;
|
|
226
|
-
self?: boolean | undefined;
|
|
227
|
-
} | undefined;
|
|
228
|
-
endTimeUnspecified?: boolean | undefined;
|
|
229
|
-
attendeesOmitted?: boolean | undefined;
|
|
230
|
-
hangoutLink?: string | undefined;
|
|
231
|
-
privateCopy?: boolean | undefined;
|
|
232
|
-
locked?: boolean | undefined;
|
|
233
|
-
createdAt?: Date | undefined;
|
|
234
|
-
}, {
|
|
235
|
-
id: string;
|
|
236
|
-
location?: string | undefined;
|
|
237
|
-
status?: "tentative" | "confirmed" | "cancelled" | undefined;
|
|
238
|
-
organizer?: {
|
|
239
|
-
email?: string | undefined;
|
|
240
|
-
id?: string | undefined;
|
|
241
|
-
displayName?: string | undefined;
|
|
242
|
-
self?: boolean | undefined;
|
|
243
|
-
} | undefined;
|
|
244
|
-
summary?: string | undefined;
|
|
245
|
-
description?: string | undefined;
|
|
246
|
-
start?: {
|
|
247
|
-
date?: string | undefined;
|
|
248
|
-
dateTime?: string | undefined;
|
|
249
|
-
timeZone?: string | undefined;
|
|
250
|
-
} | undefined;
|
|
251
|
-
end?: {
|
|
252
|
-
date?: string | undefined;
|
|
253
|
-
dateTime?: string | undefined;
|
|
254
|
-
timeZone?: string | undefined;
|
|
255
|
-
} | undefined;
|
|
256
|
-
attendees?: {
|
|
257
|
-
email?: string | undefined;
|
|
258
|
-
id?: string | undefined;
|
|
259
|
-
displayName?: string | undefined;
|
|
260
|
-
organizer?: boolean | undefined;
|
|
261
|
-
self?: boolean | undefined;
|
|
262
|
-
resource?: boolean | undefined;
|
|
263
|
-
optional?: boolean | undefined;
|
|
264
|
-
responseStatus?: "needsAction" | "declined" | "tentative" | "accepted" | undefined;
|
|
265
|
-
comment?: string | undefined;
|
|
266
|
-
additionalGuests?: number | undefined;
|
|
267
|
-
}[] | undefined;
|
|
268
|
-
recurrence?: string[] | undefined;
|
|
269
|
-
colorId?: string | undefined;
|
|
270
|
-
transparency?: "opaque" | "transparent" | undefined;
|
|
271
|
-
visibility?: "default" | "public" | "private" | "confidential" | undefined;
|
|
272
|
-
eventType?: "default" | "outOfOffice" | "focusTime" | "workingLocation" | undefined;
|
|
273
|
-
reminders?: {
|
|
274
|
-
useDefault?: boolean | undefined;
|
|
275
|
-
overrides?: {
|
|
276
|
-
method?: "email" | "popup" | undefined;
|
|
277
|
-
minutes?: number | undefined;
|
|
278
|
-
}[] | undefined;
|
|
279
|
-
} | undefined;
|
|
280
|
-
guestsCanModify?: boolean | undefined;
|
|
281
|
-
guestsCanInviteOthers?: boolean | undefined;
|
|
282
|
-
guestsCanSeeOtherGuests?: boolean | undefined;
|
|
283
|
-
anyoneCanAddSelf?: boolean | undefined;
|
|
284
|
-
sequence?: number | undefined;
|
|
285
|
-
originalStartTime?: {
|
|
286
|
-
date?: string | undefined;
|
|
287
|
-
dateTime?: string | undefined;
|
|
288
|
-
timeZone?: string | undefined;
|
|
289
|
-
} | undefined;
|
|
290
|
-
recurringEventId?: string | undefined;
|
|
291
|
-
calendarId?: string | undefined;
|
|
292
|
-
updated?: string | undefined;
|
|
293
|
-
iCalUID?: string | undefined;
|
|
294
|
-
htmlLink?: string | undefined;
|
|
295
|
-
created?: string | undefined;
|
|
296
|
-
creator?: {
|
|
297
|
-
email?: string | undefined;
|
|
298
|
-
id?: string | undefined;
|
|
299
|
-
displayName?: string | undefined;
|
|
300
|
-
self?: boolean | undefined;
|
|
301
|
-
} | undefined;
|
|
302
|
-
endTimeUnspecified?: boolean | undefined;
|
|
303
|
-
attendeesOmitted?: boolean | undefined;
|
|
304
|
-
hangoutLink?: string | undefined;
|
|
305
|
-
privateCopy?: boolean | undefined;
|
|
306
|
-
locked?: boolean | undefined;
|
|
307
|
-
createdAt?: Date | undefined;
|
|
308
|
-
}>;
|
|
100
|
+
createdAt: z.ZodOptional<z.ZodCoercedDate<unknown>>;
|
|
101
|
+
}, z.core.$strip>;
|
|
309
102
|
export declare const GoogleCalendar: z.ZodObject<{
|
|
310
103
|
id: z.ZodString;
|
|
311
104
|
summary: z.ZodOptional<z.ZodString>;
|
|
312
105
|
description: z.ZodOptional<z.ZodString>;
|
|
313
106
|
location: z.ZodOptional<z.ZodString>;
|
|
314
107
|
timeZone: z.ZodOptional<z.ZodString>;
|
|
315
|
-
createdAt: z.ZodOptional<z.
|
|
316
|
-
},
|
|
317
|
-
id: string;
|
|
318
|
-
location?: string | undefined;
|
|
319
|
-
timeZone?: string | undefined;
|
|
320
|
-
summary?: string | undefined;
|
|
321
|
-
description?: string | undefined;
|
|
322
|
-
createdAt?: Date | undefined;
|
|
323
|
-
}, {
|
|
324
|
-
id: string;
|
|
325
|
-
location?: string | undefined;
|
|
326
|
-
timeZone?: string | undefined;
|
|
327
|
-
summary?: string | undefined;
|
|
328
|
-
description?: string | undefined;
|
|
329
|
-
createdAt?: Date | undefined;
|
|
330
|
-
}>;
|
|
108
|
+
createdAt: z.ZodOptional<z.ZodCoercedDate<unknown>>;
|
|
109
|
+
}, z.core.$strip>;
|
|
331
110
|
export type GoogleCalendarEvent = z.infer<typeof GoogleCalendarEvent>;
|
|
332
111
|
export type GoogleCalendar = z.infer<typeof GoogleCalendar>;
|
|
333
112
|
//# sourceMappingURL=database.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../schema/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAwCxB,eAAO,MAAM,mBAAmB
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../schema/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAwCxB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuC9B,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;iBAOzB,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC"}
|