@corsair-dev/gmail 0.1.2 → 0.1.4

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.
@@ -10,7 +10,7 @@ export declare const MessagesEndpoints: {
10
10
  get: (ctx: import("..").GmailContext, args: {
11
11
  id: string;
12
12
  userId?: string | undefined;
13
- format?: "minimal" | "full" | "raw" | "metadata" | undefined;
13
+ format?: "raw" | "minimal" | "full" | "metadata" | undefined;
14
14
  metadataHeaders?: string[] | undefined;
15
15
  }) => Promise<import("..").Message>;
16
16
  send: (ctx: import("..").GmailContext, args: {
@@ -91,26 +91,26 @@ export declare const DraftsEndpoints: {
91
91
  get: (ctx: import("..").GmailContext, args: {
92
92
  id: string;
93
93
  userId?: string | undefined;
94
- format?: "minimal" | "full" | "raw" | "metadata" | undefined;
94
+ format?: "raw" | "minimal" | "full" | "metadata" | undefined;
95
95
  }) => Promise<import("..").Draft>;
96
96
  create: (ctx: import("..").GmailContext, args: {
97
- draft: {
97
+ userId?: string | undefined;
98
+ draft?: {
98
99
  message?: {
99
100
  raw?: string | undefined;
100
101
  threadId?: string | undefined;
101
102
  } | undefined;
102
- };
103
- userId?: string | undefined;
103
+ } | undefined;
104
104
  }) => Promise<import("..").Draft>;
105
105
  update: (ctx: import("..").GmailContext, args: {
106
106
  id: string;
107
- draft: {
107
+ userId?: string | undefined;
108
+ draft?: {
108
109
  message?: {
109
110
  raw?: string | undefined;
110
111
  threadId?: string | undefined;
111
112
  } | undefined;
112
- };
113
- userId?: string | undefined;
113
+ } | undefined;
114
114
  }) => Promise<import("..").Draft>;
115
115
  delete: (ctx: import("..").GmailContext, args: {
116
116
  id: string;
@@ -13,9 +13,9 @@ export declare const GmailEndpointInputSchemas: {
13
13
  userId: z.ZodOptional<z.ZodString>;
14
14
  id: z.ZodString;
15
15
  format: z.ZodOptional<z.ZodEnum<{
16
+ raw: "raw";
16
17
  minimal: "minimal";
17
18
  full: "full";
18
- raw: "raw";
19
19
  metadata: "metadata";
20
20
  }>>;
21
21
  metadataHeaders: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -109,30 +109,30 @@ export declare const GmailEndpointInputSchemas: {
109
109
  userId: z.ZodOptional<z.ZodString>;
110
110
  id: z.ZodString;
111
111
  format: z.ZodOptional<z.ZodEnum<{
112
+ raw: "raw";
112
113
  minimal: "minimal";
113
114
  full: "full";
114
- raw: "raw";
115
115
  metadata: "metadata";
116
116
  }>>;
117
117
  }, z.core.$strip>;
118
118
  readonly draftsCreate: z.ZodObject<{
119
119
  userId: z.ZodOptional<z.ZodString>;
120
- draft: z.ZodObject<{
120
+ draft: z.ZodOptional<z.ZodObject<{
121
121
  message: z.ZodOptional<z.ZodObject<{
122
122
  raw: z.ZodOptional<z.ZodString>;
123
123
  threadId: z.ZodOptional<z.ZodString>;
124
124
  }, z.core.$strip>>;
125
- }, z.core.$strip>;
125
+ }, z.core.$strip>>;
126
126
  }, z.core.$strip>;
127
127
  readonly draftsUpdate: z.ZodObject<{
128
128
  userId: z.ZodOptional<z.ZodString>;
129
129
  id: z.ZodString;
130
- draft: z.ZodObject<{
130
+ draft: z.ZodOptional<z.ZodObject<{
131
131
  message: z.ZodOptional<z.ZodObject<{
132
132
  raw: z.ZodOptional<z.ZodString>;
133
133
  threadId: z.ZodOptional<z.ZodString>;
134
134
  }, z.core.$strip>>;
135
- }, z.core.$strip>;
135
+ }, z.core.$strip>>;
136
136
  }, z.core.$strip>;
137
137
  readonly draftsDelete: z.ZodObject<{
138
138
  userId: z.ZodOptional<z.ZodString>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../endpoints/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EACX,KAAK,EACL,iBAAiB,EACjB,KAAK,EACL,iBAAiB,EACjB,OAAO,EACP,mBAAmB,EACnB,OAAO,EACP,MAAM,EACN,kBAAkB,EAClB,MAAM,UAAU,CAAC;AAsMlB,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2B5B,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG;KAChC,CAAC,IAAI,MAAM,OAAO,yBAAyB,GAAG,CAAC,CAAC,KAAK,CACrD,CAAC,OAAO,yBAAyB,CAAC,CAAC,CAAC,CAAC,CACrC;CACD,CAAC;AAqBF,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;iBAMzB,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,GAAG;IACtE,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC3B,CAAC;AA4FF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2B7B,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAAG;IAClC,YAAY,EAAE,mBAAmB,CAAC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,IAAI,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,mBAAmB,EAAE,IAAI,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,SAAS,EAAE,KAAK,CAAC;IACjB,YAAY,EAAE,KAAK,CAAC;IACpB,YAAY,EAAE,KAAK,CAAC;IACpB,YAAY,EAAE,IAAI,CAAC;IACnB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,SAAS,EAAE,KAAK,CAAC;IACjB,YAAY,EAAE,KAAK,CAAC;IACpB,YAAY,EAAE,KAAK,CAAC;IACpB,YAAY,EAAE,IAAI,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,kBAAkB,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;CACzB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../endpoints/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EACX,KAAK,EACL,iBAAiB,EACjB,KAAK,EACL,iBAAiB,EACjB,OAAO,EACP,mBAAmB,EACnB,OAAO,EACP,MAAM,EACN,kBAAkB,EAClB,MAAM,UAAU,CAAC;AA4MlB,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2B5B,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG;KAChC,CAAC,IAAI,MAAM,OAAO,yBAAyB,GAAG,CAAC,CAAC,KAAK,CACrD,CAAC,OAAO,yBAAyB,CAAC,CAAC,CAAC,CAAC,CACrC;CACD,CAAC;AAqBF,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;iBAMzB,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,GAAG;IACtE,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC3B,CAAC;AAiGF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2B7B,CAAC;AAEX,MAAM,MAAM,oBAAoB,GAAG;IAClC,YAAY,EAAE,mBAAmB,CAAC;IAClC,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,IAAI,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,mBAAmB,EAAE,IAAI,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,SAAS,EAAE,KAAK,CAAC;IACjB,YAAY,EAAE,KAAK,CAAC;IACpB,YAAY,EAAE,KAAK,CAAC;IACpB,YAAY,EAAE,IAAI,CAAC;IACnB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,SAAS,EAAE,KAAK,CAAC;IACjB,YAAY,EAAE,KAAK,CAAC;IACpB,YAAY,EAAE,KAAK,CAAC;IACpB,YAAY,EAAE,IAAI,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,kBAAkB,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;CACzB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -114,9 +114,9 @@ export declare const gmailEndpointSchemas: {
114
114
  userId: import("zod").ZodOptional<import("zod").ZodString>;
115
115
  id: import("zod").ZodString;
116
116
  format: import("zod").ZodOptional<import("zod").ZodEnum<{
117
+ raw: "raw";
117
118
  minimal: "minimal";
118
119
  full: "full";
119
- raw: "raw";
120
120
  metadata: "metadata";
121
121
  }>>;
122
122
  metadataHeaders: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
@@ -414,9 +414,9 @@ export declare const gmailEndpointSchemas: {
414
414
  userId: import("zod").ZodOptional<import("zod").ZodString>;
415
415
  id: import("zod").ZodString;
416
416
  format: import("zod").ZodOptional<import("zod").ZodEnum<{
417
+ raw: "raw";
417
418
  minimal: "minimal";
418
419
  full: "full";
419
- raw: "raw";
420
420
  metadata: "metadata";
421
421
  }>>;
422
422
  }, import("zod/v4/core").$strip>;
@@ -438,12 +438,12 @@ export declare const gmailEndpointSchemas: {
438
438
  readonly 'drafts.create': {
439
439
  readonly input: import("zod").ZodObject<{
440
440
  userId: import("zod").ZodOptional<import("zod").ZodString>;
441
- draft: import("zod").ZodObject<{
441
+ draft: import("zod").ZodOptional<import("zod").ZodObject<{
442
442
  message: import("zod").ZodOptional<import("zod").ZodObject<{
443
443
  raw: import("zod").ZodOptional<import("zod").ZodString>;
444
444
  threadId: import("zod").ZodOptional<import("zod").ZodString>;
445
445
  }, import("zod/v4/core").$strip>>;
446
- }, import("zod/v4/core").$strip>;
446
+ }, import("zod/v4/core").$strip>>;
447
447
  }, import("zod/v4/core").$strip>;
448
448
  readonly output: import("zod").ZodObject<{
449
449
  id: import("zod").ZodOptional<import("zod").ZodString>;
@@ -464,12 +464,12 @@ export declare const gmailEndpointSchemas: {
464
464
  readonly input: import("zod").ZodObject<{
465
465
  userId: import("zod").ZodOptional<import("zod").ZodString>;
466
466
  id: import("zod").ZodString;
467
- draft: import("zod").ZodObject<{
467
+ draft: import("zod").ZodOptional<import("zod").ZodObject<{
468
468
  message: import("zod").ZodOptional<import("zod").ZodObject<{
469
469
  raw: import("zod").ZodOptional<import("zod").ZodString>;
470
470
  threadId: import("zod").ZodOptional<import("zod").ZodString>;
471
471
  }, import("zod/v4/core").$strip>>;
472
- }, import("zod/v4/core").$strip>;
472
+ }, import("zod/v4/core").$strip>>;
473
473
  }, import("zod/v4/core").$strip>;
474
474
  readonly output: import("zod").ZodObject<{
475
475
  id: import("zod").ZodOptional<import("zod").ZodString>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
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 xe}from"corsair/http";var j=class extends Error{constructor(a,o){super(a);this.code=o;this.name="GmailAPIError"}},Re="https://gmail.googleapis.com/gmail/v1";async function Ae(e,t,a){let o=await fetch("https://oauth2.googleapis.com/token",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:e,client_secret:t,refresh_token:a,grant_type:"refresh_token"})});if(!o.ok){let i=await o.text();throw new j(`Failed to refresh access token: ${i}`,o.status)}return await o.json()}async function B({accessToken:e,expiresAt:t,clientId:a,clientSecret:o,refreshToken:n,forceRefresh:i=!1}){let d=Math.floor(Date.now()/1e3);if(!i&&e&&t&&Number(t)>d+300)return{accessToken:e,expiresAt:Number(t),refreshed:!1};let p=await Ae(a,o,n);return{accessToken:p.access_token,expiresAt:d+p.expires_in,refreshed:!0}}async function y(e,t,a={}){let{method:o="GET",body:n,query:i}=a;return await xe({BASE:Re,VERSION:"1.0.0",WITH_CREDENTIALS:!1,CREDENTIALS:"omit",TOKEN:t,HEADERS:{"Content-Type":"application/json"}},{method:o,url:e,body:o==="POST"||o==="PUT"||o==="PATCH"?n:void 0,mediaType:"application/json",query:o==="GET"?i:void 0})}function Oe(e){return e instanceof Error&&"status"in e&&e.status===401}async function c(e,t,a={}){try{return await y(e,t.key,a)}catch(o){if(Oe(o)&&t._refreshAuth){let n=await t._refreshAuth();return await y(e,n,a)}throw o}}import{logEventFromContext as M}from"corsair/core";var z=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/drafts`,e,{method:"GET",query:{maxResults:t.maxResults,pageToken:t.pageToken,q:t.q}});if(a.drafts&&e.db.drafts)try{for(let o of a.drafts)o.id&&await e.db.drafts.upsertByEntityId(o.id,{...o,id:o.id,messageId:o.message?.id,createdAt:new Date})}catch(o){console.warn("Failed to save drafts to database:",o)}return await M(e,"gmail.drafts.list",{...t},"completed"),a},F=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/drafts/${t.id}`,e,{method:"GET",query:{format:t.format}});if(a.id&&e.db.drafts)try{await e.db.drafts.upsertByEntityId(a.id,{...a,id:a.id,messageId:a.message?.id,createdAt:new Date})}catch(o){console.warn("Failed to save draft to database:",o)}return await M(e,"gmail.drafts.get",{...t},"completed"),a},V=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/drafts`,e,{method:"POST",body:t.draft});return a.id&&await e.endpoints.drafts.get({id:a.id,userId:t.userId}),await M(e,"gmail.drafts.create",{...t},"completed"),a},K=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/drafts/${t.id}`,e,{method:"PUT",body:t.draft});return a.id&&await e.endpoints.drafts.get({id:a.id,userId:t.userId}),await M(e,"gmail.drafts.update",{...t},"completed"),a},Y=async(e,t)=>{if(await c(`/users/${t.userId||"me"}/drafts/${t.id}`,e,{method:"DELETE"}),e.db.drafts)try{await e.db.drafts.deleteByEntityId(t.id)}catch(a){console.warn("Failed to delete draft from database:",a)}await M(e,"gmail.drafts.delete",{...t},"completed")},Z=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/drafts/send`,e,{method:"POST",body:{id:t.id,message:t.message}});return await M(e,"gmail.drafts.send",{...t},"completed"),a};import{logEventFromContext as v}from"corsair/core";var J=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/labels`,e,{method:"GET"});if(a.labels&&e.db.labels)try{for(let o of a.labels)o.id&&await e.db.labels.upsertByEntityId(o.id,{...o,id:o.id,createdAt:new Date})}catch(o){console.warn("Failed to save labels to database:",o)}return await v(e,"gmail.labels.list",{...t},"completed"),a},X=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/labels/${t.id}`,e,{method:"GET"});if(a.id&&e.db.labels)try{await e.db.labels.upsertByEntityId(a.id,{id:a.id,name:a.name,messageListVisibility:a.messageListVisibility,labelListVisibility:a.labelListVisibility,type:a.type,messagesTotal:a.messagesTotal,messagesUnread:a.messagesUnread,threadsTotal:a.threadsTotal,threadsUnread:a.threadsUnread,createdAt:new Date})}catch(o){console.warn("Failed to save label to database:",o)}return await v(e,"gmail.labels.get",{...t},"completed"),a},Q=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/labels`,e,{method:"POST",body:t.label});return a.id&&await e.endpoints.labels.get({id:a.id,userId:t.userId}),await v(e,"gmail.labels.create",{...t},"completed"),a},ee=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/labels/${t.id}`,e,{method:"PUT",body:t.label});return a.id&&await e.endpoints.labels.get({id:a.id,userId:t.userId}),await v(e,"gmail.labels.update",{...t},"completed"),a},te=async(e,t)=>{if(await c(`/users/${t.userId||"me"}/labels/${t.id}`,e,{method:"DELETE"}),e.db.labels)try{await e.db.labels.deleteByEntityId(t.id)}catch(a){console.warn("Failed to delete label from database:",a)}await v(e,"gmail.labels.delete",{...t},"completed")};import{logEventFromContext as I}from"corsair/core";function U(e,t){return e?.headers?e.headers.find(o=>o.name?.toLowerCase()===t.toLowerCase())?.value:void 0}function Ue(e){if(e.payload)return U(e.payload,"Subject")}function $e(e){if(e.payload)return U(e.payload,"From")}function _e(e){if(e.payload)return U(e.payload,"To")}function se(e){if(!e)return;let t,a;if(e.body?.data)try{let o=Buffer.from(e.body.data,"base64").toString("utf-8");e.mimeType==="text/plain"?t=o:e.mimeType==="text/html"&&(a=o)}catch{}if(e.parts&&e.parts.length>0)for(let o of e.parts){let n=se(o);n&&(o.mimeType==="text/plain"?t=n:o.mimeType==="text/html"&&!t&&(a=n))}return t||a}function Ne(e){if(e.payload)return se(e.payload)}var ae=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/messages`,e,{method:"GET",query:{q:t.q,maxResults:t.maxResults,pageToken:t.pageToken,labelIds:t.labelIds?.join(","),includeSpamTrash:t.includeSpamTrash}});if(a.messages&&e.db.messages)try{for(let o of a.messages)o.id&&await e.db.messages.upsertByEntityId(o.id,{...o,id:o.id,createdAt:new Date})}catch(o){console.warn("Failed to save messages to database:",o)}return await I(e,"gmail.messages.list",{...t},"completed"),a},oe=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/messages/${t.id}`,e,{method:"GET",query:{format:t.format,metadataHeaders:t.metadataHeaders?.join(",")}});if(a.id&&e.db.messages)try{let o=Ue(a),n=Ne(a),i=$e(a),d=_e(a);await e.db.messages.upsertByEntityId(a.id,{...a,subject:o,body:n,from:i,to:d,id:a.id,createdAt:new Date})}catch(o){console.warn("Failed to save message to database:",o)}return await I(e,"gmail.messages.get",{...t},"completed"),a},ie=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/messages/send`,e,{method:"POST",body:{raw:t.raw,threadId:t.threadId}});return a.id&&await e.endpoints.messages.get({id:a.id,userId:t.userId}),await I(e,"gmail.messages.send",{...t},"completed"),a},ne=async(e,t)=>{if(await c(`/users/${t.userId||"me"}/messages/${t.id}`,e,{method:"DELETE"}),e.db.messages)try{await e.db.messages.deleteByEntityId(t.id)}catch(a){console.warn("Failed to delete message from database:",a)}await I(e,"gmail.messages.delete",{...t},"completed")},re=async(e,t)=>{let a={};t.addLabelIds&&t.addLabelIds.length>0&&(a.addLabelIds=t.addLabelIds),t.removeLabelIds&&t.removeLabelIds.length>0&&(a.removeLabelIds=t.removeLabelIds);let o=await c(`/users/${t.userId||"me"}/messages/${t.id}/modify`,e,{method:"POST",body:a});return o.id&&await e.endpoints.messages.get({id:o.id,userId:t.userId}),await I(e,"gmail.messages.modify",{...t},"completed"),o},de=async(e,t)=>{let a={ids:t.ids};t.addLabelIds&&t.addLabelIds.length>0&&(a.addLabelIds=t.addLabelIds),t.removeLabelIds&&t.removeLabelIds.length>0&&(a.removeLabelIds=t.removeLabelIds),await c(`/users/${t.userId||"me"}/messages/batchModify`,e,{method:"POST",body:a}),await I(e,"gmail.messages.batchModify",{...t},"completed")},le=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/messages/${t.id}/trash`,e,{method:"POST"});return a.id&&await e.endpoints.messages.get({id:a.id,userId:t.userId}),await I(e,"gmail.messages.trash",{...t},"completed"),a},me=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/messages/${t.id}/untrash`,e,{method:"POST"});return a.id&&await e.endpoints.messages.get({id:a.id,userId:t.userId}),await I(e,"gmail.messages.untrash",{...t},"completed"),a};import{logEventFromContext as L}from"corsair/core";var pe=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/threads`,e,{method:"GET",query:{q:t.q,maxResults:t.maxResults,pageToken:t.pageToken,labelIds:t.labelIds?.join(","),includeSpamTrash:t.includeSpamTrash}});if(a.threads&&e.db.threads)try{for(let o of a.threads)o.id&&await e.db.threads.upsertByEntityId(o.id,{...o,id:o.id,createdAt:new Date})}catch(o){console.warn("Failed to save threads to database:",o)}return await L(e,"gmail.threads.list",{...t},"completed"),a},ge=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/threads/${t.id}`,e,{method:"GET",query:{format:t.format,metadataHeaders:t.metadataHeaders?.join(",")}});if(a.id&&e.db.threads)try{await e.db.threads.upsertByEntityId(a.id,{...a,id:a.id,createdAt:new Date})}catch(o){console.warn("Failed to save thread to database:",o)}return await L(e,"gmail.threads.get",{...t},"completed"),a},ce=async(e,t)=>{let a={};t.addLabelIds&&t.addLabelIds.length>0&&(a.addLabelIds=t.addLabelIds),t.removeLabelIds&&t.removeLabelIds.length>0&&(a.removeLabelIds=t.removeLabelIds);let o=await c(`/users/${t.userId||"me"}/threads/${t.id}/modify`,e,{method:"POST",body:a});return o.id&&await e.endpoints.threads.get({id:o.id,userId:t.userId}),await L(e,"gmail.threads.modify",{...t},"completed"),o},ue=async(e,t)=>{if(await c(`/users/${t.userId||"me"}/threads/${t.id}`,e,{method:"DELETE"}),e.db.threads)try{await e.db.threads.deleteByEntityId(t.id)}catch(a){console.warn("Failed to delete thread from database:",a)}await L(e,"gmail.threads.delete",{...t},"completed")},he=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/threads/${t.id}/trash`,e,{method:"POST"});return a.id&&await e.endpoints.threads.get({id:a.id,userId:t.userId}),await L(e,"gmail.threads.trash",{...t},"completed"),a},fe=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/threads/${t.id}/untrash`,e,{method:"POST"});return a.id&&await e.endpoints.threads.get({id:a.id,userId:t.userId}),await L(e,"gmail.threads.untrash",{...t},"completed"),a};import{z as s}from"zod";var He=s.object({userId:s.string().optional(),q:s.string().optional(),maxResults:s.number().optional(),pageToken:s.string().optional(),labelIds:s.array(s.string()).optional(),includeSpamTrash:s.boolean().optional()}),ze=s.object({userId:s.string().optional(),id:s.string(),format:s.enum(["minimal","full","raw","metadata"]).optional(),metadataHeaders:s.array(s.string()).optional()}),Fe=s.object({userId:s.string().optional(),raw:s.string(),threadId:s.string().optional()}),Ve=s.object({userId:s.string().optional(),id:s.string()}),Ke=s.object({userId:s.string().optional(),id:s.string(),addLabelIds:s.array(s.string()).optional(),removeLabelIds:s.array(s.string()).optional()}),Ye=s.object({userId:s.string().optional(),ids:s.array(s.string()).optional(),addLabelIds:s.array(s.string()).optional(),removeLabelIds:s.array(s.string()).optional()}),Ze=s.object({userId:s.string().optional(),id:s.string()}),Je=s.object({userId:s.string().optional(),id:s.string()}),Xe=s.object({userId:s.string().optional()}),Qe=s.object({userId:s.string().optional(),id:s.string()}),et=s.object({userId:s.string().optional(),label:s.object({name:s.string().optional(),messageListVisibility:s.enum(["show","hide"]).optional(),labelListVisibility:s.enum(["labelShow","labelShowIfUnread","labelHide"]).optional(),color:s.object({textColor:s.string().optional(),backgroundColor:s.string().optional()}).optional()})}),tt=s.object({userId:s.string().optional(),id:s.string(),label:s.object({name:s.string().optional(),messageListVisibility:s.enum(["show","hide"]).optional(),labelListVisibility:s.enum(["labelShow","labelShowIfUnread","labelHide"]).optional(),color:s.object({textColor:s.string().optional(),backgroundColor:s.string().optional()}).optional()})}),st=s.object({userId:s.string().optional(),id:s.string()}),at=s.object({userId:s.string().optional(),maxResults:s.number().optional(),pageToken:s.string().optional(),q:s.string().optional()}),ot=s.object({userId:s.string().optional(),id:s.string(),format:s.enum(["minimal","full","raw","metadata"]).optional()}),it=s.object({userId:s.string().optional(),draft:s.object({message:s.object({raw:s.string().optional(),threadId:s.string().optional()}).optional()})}),nt=s.object({userId:s.string().optional(),id:s.string(),draft:s.object({message:s.object({raw:s.string().optional(),threadId:s.string().optional()}).optional()})}),rt=s.object({userId:s.string().optional(),id:s.string()}),dt=s.object({userId:s.string().optional(),id:s.string().optional(),message:s.object({raw:s.string().optional(),threadId:s.string().optional()}).optional()}),lt=s.object({userId:s.string().optional(),q:s.string().optional(),maxResults:s.number().optional(),pageToken:s.string().optional(),labelIds:s.array(s.string()).optional(),includeSpamTrash:s.boolean().optional()}),mt=s.object({userId:s.string().optional(),id:s.string(),format:s.enum(["minimal","full","metadata"]).optional(),metadataHeaders:s.array(s.string()).optional()}),pt=s.object({userId:s.string().optional(),id:s.string(),addLabelIds:s.array(s.string()).optional(),removeLabelIds:s.array(s.string()).optional()}),gt=s.object({userId:s.string().optional(),id:s.string()}),ct=s.object({userId:s.string().optional(),id:s.string()}),ut=s.object({userId:s.string().optional(),id:s.string()}),ht=s.object({userId:s.string().optional()}),u={messagesList:He,messagesGet:ze,messagesSend:Fe,messagesDelete:Ve,messagesModify:Ke,messagesBatchModify:Ye,messagesTrash:Ze,messagesUntrash:Je,labelsList:Xe,labelsGet:Qe,labelsCreate:et,labelsUpdate:tt,labelsDelete:st,draftsList:at,draftsGet:ot,draftsCreate:it,draftsUpdate:nt,draftsDelete:rt,draftsSend:dt,threadsList:lt,threadsGet:mt,threadsModify:pt,threadsDelete:gt,threadsTrash:ct,threadsUntrash:ut,usersGetProfile:ht},ft=s.object({name:s.string().optional(),value:s.string().optional()}),bt=s.object({attachmentId:s.string().optional(),size:s.number().optional(),data:s.string().optional()}),yt=s.object({partId:s.string().optional(),mimeType:s.string().optional(),filename:s.string().optional(),headers:s.array(ft).optional(),body:bt.optional()}),be=yt.extend({parts:s.lazy(()=>s.array(be).optional())}),E=s.object({id:s.string().optional(),threadId:s.string().optional(),labelIds:s.array(s.string()).optional(),snippet:s.string().optional(),historyId:s.string().optional(),internalDate:s.union([s.string(),s.number(),s.date()]).transform(e=>{if(e instanceof Date)return e;if(typeof e=="number")return new Date(e);if(typeof e=="string"){let t=Number(e);return isNaN(t)?null:new Date(t)}return null}).nullable().optional(),sizeEstimate:s.number().optional(),payload:be.optional(),raw:s.string().optional()}),Et=s.object({messages:s.array(E).optional(),nextPageToken:s.string().optional(),resultSizeEstimate:s.number().optional()}),Gt=s.object({textColor:s.string().optional(),backgroundColor:s.string().optional()}),x=s.object({id:s.string().optional(),name:s.string().optional(),messageListVisibility:s.enum(["show","hide"]).optional(),labelListVisibility:s.enum(["labelShow","labelShowIfUnread","labelHide"]).optional(),type:s.enum(["system","user"]).optional(),messagesTotal:s.number().optional(),messagesUnread:s.number().optional(),threadsTotal:s.number().optional(),threadsUnread:s.number().optional(),color:Gt.optional()}),It=s.object({labels:s.array(x).optional()}),R=s.object({id:s.string().optional(),message:E.optional()}),wt=s.object({drafts:s.array(R).optional(),nextPageToken:s.string().optional(),resultSizeEstimate:s.number().optional()}),P=s.object({id:s.string().optional(),snippet:s.string().optional(),historyId:s.string().optional(),messages:s.array(E).optional()}),Tt=s.object({threads:s.array(P).optional(),nextPageToken:s.string().optional(),resultSizeEstimate:s.number().optional()}),Mt=s.object({emailAddress:s.string().optional(),messagesTotal:s.number().optional(),threadsTotal:s.number().optional(),historyId:s.string().optional()}),h={messagesList:Et,messagesGet:E,messagesSend:E,messagesDelete:s.void(),messagesModify:E,messagesBatchModify:s.void(),messagesTrash:E,messagesUntrash:E,labelsList:It,labelsGet:x,labelsCreate:x,labelsUpdate:x,labelsDelete:s.void(),draftsList:wt,draftsGet:R,draftsCreate:R,draftsUpdate:R,draftsDelete:s.void(),draftsSend:E,threadsList:Tt,threadsGet:P,threadsModify:P,threadsDelete:s.void(),threadsTrash:P,threadsUntrash:P,usersGetProfile:Mt};var G={list:ae,get:oe,send:ie,delete:ne,modify:re,batchModify:de,trash:le,untrash:me},S={list:J,get:X,create:Q,update:ee,delete:te},w={list:z,get:F,create:V,update:K,delete:Y,send:Z},T={list:pe,get:ge,modify:ce,delete:ue,trash:he,untrash:fe};import{z as C}from"zod";import{z as r}from"zod";var Lt=r.object({name:r.string().optional(),value:r.string().optional()}),St=r.object({attachmentId:r.string().optional(),size:r.number().optional(),data:r.string().optional()}),ye=r.lazy(()=>r.object({partId:r.string().optional(),mimeType:r.string().optional(),filename:r.string().optional(),headers:r.array(Lt).optional(),body:St.optional(),parts:r.array(ye).optional()})),Ee=r.object({id:r.string(),threadId:r.string().optional(),labelIds:r.array(r.string()).optional(),snippet:r.string().optional(),historyId:r.string().optional(),internalDate:r.string().optional(),sizeEstimate:r.number().optional(),payload:ye.optional(),raw:r.string().optional(),subject:r.string().optional(),body:r.string().optional(),from:r.string().optional(),to:r.string().optional(),createdAt:r.coerce.date().nullable().optional()}),Ge=r.object({id:r.string(),name:r.string().optional(),messageListVisibility:r.enum(["show","hide"]).optional(),labelListVisibility:r.enum(["labelShow","labelShowIfUnread","labelHide"]).optional(),type:r.enum(["system","user"]).optional(),messagesTotal:r.number().optional(),messagesUnread:r.number().optional(),threadsTotal:r.number().optional(),threadsUnread:r.number().optional(),createdAt:r.coerce.date().nullable().optional()}),Ie=r.object({id:r.string(),messageId:r.string().optional(),createdAt:r.coerce.date().nullable().optional()}),we=r.object({id:r.string(),snippet:r.string().optional(),historyId:r.string().optional(),createdAt:r.coerce.date().nullable().optional()});var us=C.object({clientId:C.string(),clientSecret:C.string(),accessToken:C.string(),refreshToken:C.string()}),$={version:"1.0.0",entities:{messages:Ee,labels:Ge,drafts:Ie,threads:we}};import{logEventFromContext as D}from"corsair/core";import{z as l}from"zod";var kt=l.object({data:l.string().optional(),attributes:l.record(l.string(),l.string()).optional(),messageId:l.string().optional(),publishTime:l.string().optional()}),Te=l.object({message:kt.optional(),subscription:l.string().optional(),event:l.unknown().optional()}),bs=l.object({emailAddress:l.string().optional(),historyId:l.string().optional()}),vt=l.object({type:l.literal("messageReceived"),emailAddress:l.string(),historyId:l.string(),message:l.custom()}),Pt=l.object({type:l.literal("messageDeleted"),emailAddress:l.string(),historyId:l.string(),message:l.custom()}),Ct=l.object({type:l.literal("messageLabelChanged"),emailAddress:l.string(),historyId:l.string(),message:l.custom(),labelsAdded:l.array(l.string()).optional(),labelsRemoved:l.array(l.string()).optional()}),Me=l.union([vt,Pt,Ct]);function k(e){let t=Buffer.from(e,"base64").toString("utf-8");return JSON.parse(t)}function _(e){return t=>{let a=t.body;if(!a.message?.data)return!1;try{let o=k(a.message.data);return!!o.historyId&&!!o.emailAddress}catch{return!1}}}var Dt=100,xt=10,Rt=10;function N(e,t){return e?.headers?e.headers.find(o=>o.name?.toLowerCase()===t.toLowerCase())?.value:void 0}function At(e){if(e.payload)return N(e.payload,"Subject")}function Ot(e){if(e.payload)return N(e.payload,"From")}function jt(e){if(e.payload)return N(e.payload,"To")}function ke(e){if(!e)return;let t,a;if(e.body?.data)try{let o=Buffer.from(e.body.data,"base64").toString("utf-8");e.mimeType==="text/plain"?t=o:e.mimeType==="text/html"&&(a=o)}catch{}if(e.parts&&e.parts.length>0)for(let o of e.parts){let n=ke(o);n&&(o.mimeType==="text/plain"?t=n:o.mimeType==="text/html"&&!t&&(a=n))}return t||a}function Bt(e){if(e.payload)return ke(e.payload)}function Ut(e){let t=[],a=[],o=[];if(!e)return{added:t,deleted:a,modified:o};for(let n of e){if(n.messagesAdded)for(let i of n.messagesAdded)i.message?.id&&t.push(i.message.id);if(n.messagesDeleted)for(let i of n.messagesDeleted)i.message?.id&&a.push(i.message.id);if(n.labelsAdded||n.labelsRemoved){if(n.labelsAdded)for(let i of n.labelsAdded)i.message?.id&&o.push(i.message.id);if(n.labelsRemoved)for(let i of n.labelsRemoved)i.message?.id&&o.push(i.message.id)}}return{added:[...new Set(t)],deleted:[...new Set(a)],modified:[...new Set(o)]}}async function q(e,t,a){let[o,n]=await Promise.all([y(`/users/${t}/messages/${a}`,e,{method:"GET",query:{format:"full"}}),y(`/users/${t}/messages/${a}`,e,{method:"GET",query:{format:"raw"}}).catch(()=>null)]);return{...o,raw:n?.raw}}async function $t(e,t,a,o){return y(`/users/${t}/messages/${a}/attachments/${o}`,e,{method:"GET"})}async function ve(e,t,a){if(!a.payload)return a;let o=async i=>{if(!i)return i;if(i.body?.attachmentId)try{let d=await $t(e,t,a.id,i.body.attachmentId);return{...i,body:{...i.body,data:d.data,size:d.size}}}catch(d){return console.warn(`Failed to fetch attachment ${i.body.attachmentId} for message ${a.id}:`,d),i}if(i.parts&&i.parts.length>0){let d=await Promise.all(i.parts.map(o));return{...i,parts:d.filter(m=>m!==void 0)}}return i},n=await o(a.payload);return{...a,payload:n}}function _t(e){let t=Number(e);return t>1?String(t-1):e}async function Pe(e,t){return!e.db?.messages||!t.id?"":(await e.db.messages.upsertByEntityId(t.id,{...t,id:t.id,subject:At(t),body:Bt(t),from:Ot(t),to:jt(t),createdAt:new Date}))?.id??""}async function Nt(e,t,a,o){let n=await y(`/users/${a}/messages`,t,{method:"GET",query:{maxResults:xt}}),i=[],d=[];if(!n.messages?.length)return{added:i,modified:d};let m=Number(o);for(let p of n.messages)if(p.id)try{let g=await q(t,a,p.id);(g.historyId?Number(g.historyId):0)>=m-Rt&&(e.db?.messages&&await e.db.messages.findByEntityId(p.id)?d.push(p.id):i.push(p.id))}catch{}return{added:i,modified:d}}async function Le(e,t,a,o){let n=null,i="";for(let d of o)try{let m=await q(t,a,d),p=await ve(t,a,m);n||(n=p);try{let g=await Pe(e,p);!i&&g&&(i=g)}catch(g){throw console.error(`Failed to save message ${p.id} to database:`,g),g}}catch(m){console.warn(`Failed to process message ${d}:`,m)}return{message:n,corsairEntityId:i}}async function qt(e,t,a,o){let n=null,i="";if(!e.db?.messages)return{message:null,corsairEntityId:i};for(let d of o)try{let m=null;try{m=await y(`/users/${a}/messages/${d}`,t,{method:"GET",query:{format:"full"}})}catch(p){if(p?.statusCode===404)continue}if(!n&&m&&(n=m),!i){let p=await e.db.messages.findByEntityId(d);p&&(i=p.id)}await e.db.messages.deleteByEntityId(d)}catch(m){console.warn(`Failed to delete message ${d} from database:`,m)}return{message:n,corsairEntityId:i}}async function Se(e,t,a,o){let n=null,i="";if(!e.db?.messages)return{message:null,corsairEntityId:i};for(let d of o)try{let m=await q(t,a,d),p=await ve(t,a,m);n||(n=p);try{let g=await Pe(e,p);!i&&g&&(i=g)}catch(g){throw console.error(`Failed to update message ${p.id} in database:`,g),g}}catch(m){console.warn(`Failed to process message ${d}:`,m)}return{message:n,corsairEntityId:i}}var Ce={match:_("messageChanged"),handler:async(e,t)=>{let a=t.payload;if(!a.message?.data)return{success:!1,error:"No message data in notification"};let o=k(a.message.data);if(!o.historyId||!o.emailAddress)return{success:!1,error:"Invalid push notification format"};let n=e.key,i=o.emailAddress,d=o.historyId;try{let m=_t(d),p=await y(`/users/${i}/history`,n,{method:"GET",query:{startHistoryId:m,maxResults:Dt}}),{added:g,deleted:A,modified:O}=Ut(p.history);if(O.length>0){let f=await Se(e,n,i,O),b={type:"messageLabelChanged",emailAddress:i,historyId:d,message:f.message??{}};return await D(e,"gmail.webhook.messageLabelChanged",{...b},"completed"),{success:!0,corsairEntityId:f.corsairEntityId,data:b}}if(g.length>0){let f=await Le(e,n,i,g),b={type:"messageReceived",emailAddress:i,historyId:d,message:f.message??{}};return await D(e,"gmail.webhook.messageReceived",{...b},"completed"),{success:!0,corsairEntityId:f.corsairEntityId,data:b}}if(A.length>0){let f=await qt(e,n,i,A),b={type:"messageDeleted",emailAddress:i,historyId:d,message:f.message??{}};return await D(e,"gmail.webhook.messageDeleted",{...b},"completed"),{success:!0,corsairEntityId:f.corsairEntityId,data:b}}let{added:W,modified:H}=await Nt(e,n,i,d);if(H.length>0){let f=await Se(e,n,i,H),b={type:"messageLabelChanged",emailAddress:i,historyId:d,message:f.message??{}};return await D(e,"gmail.webhook.messageLabelChanged",{...b},"completed"),{success:!0,corsairEntityId:f.corsairEntityId,data:b}}if(W.length>0){let f=await Le(e,n,i,W),b={type:"messageReceived",emailAddress:i,historyId:d,message:f.message??{}};return await D(e,"gmail.webhook.messageReceived",{...b},"completed"),{success:!0,corsairEntityId:f.corsairEntityId,data:b}}return{success:!0,corsairEntityId:"",data:{type:"messageReceived",emailAddress:i,historyId:d,message:{}}}}catch(m){return console.error("Failed to process Gmail webhook:",m),{success:!1,error:`Failed to process message: ${m instanceof Error?m.message:"Unknown error"}`}}}};var De={messageChanged:Ce};var Wt={oauth_2:{integration:["topic_id"]}},Ht={messages:{list:G.list,get:G.get,send:G.send,delete:G.delete,modify:G.modify,batchModify:G.batchModify,trash:G.trash,untrash:G.untrash},labels:{list:S.list,get:S.get,create:S.create,update:S.update,delete:S.delete},drafts:{list:w.list,get:w.get,create:w.create,update:w.update,delete:w.delete,send:w.send},threads:{list:T.list,get:T.get,modify:T.modify,delete:T.delete,trash:T.trash,untrash:T.untrash}},zt={"messages.list":{input:u.messagesList,output:h.messagesList},"messages.get":{input:u.messagesGet,output:h.messagesGet},"messages.send":{input:u.messagesSend,output:h.messagesSend},"messages.delete":{input:u.messagesDelete,output:h.messagesDelete},"messages.modify":{input:u.messagesModify,output:h.messagesModify},"messages.batchModify":{input:u.messagesBatchModify,output:h.messagesBatchModify},"messages.trash":{input:u.messagesTrash,output:h.messagesTrash},"messages.untrash":{input:u.messagesUntrash,output:h.messagesUntrash},"labels.list":{input:u.labelsList,output:h.labelsList},"labels.get":{input:u.labelsGet,output:h.labelsGet},"labels.create":{input:u.labelsCreate,output:h.labelsCreate},"labels.update":{input:u.labelsUpdate,output:h.labelsUpdate},"labels.delete":{input:u.labelsDelete,output:h.labelsDelete},"drafts.list":{input:u.draftsList,output:h.draftsList},"drafts.get":{input:u.draftsGet,output:h.draftsGet},"drafts.create":{input:u.draftsCreate,output:h.draftsCreate},"drafts.update":{input:u.draftsUpdate,output:h.draftsUpdate},"drafts.delete":{input:u.draftsDelete,output:h.draftsDelete},"drafts.send":{input:u.draftsSend,output:h.draftsSend},"threads.list":{input:u.threadsList,output:h.threadsList},"threads.get":{input:u.threadsGet,output:h.threadsGet},"threads.modify":{input:u.threadsModify,output:h.threadsModify},"threads.delete":{input:u.threadsDelete,output:h.threadsDelete},"threads.trash":{input:u.threadsTrash,output:h.threadsTrash},"threads.untrash":{input:u.threadsUntrash,output:h.threadsUntrash}},Ft={messageChanged:De.messageChanged},Vt={messageChanged:{description:"A Gmail message was received, deleted, or had its labels changed",payload:Te,response:Me}},Kt="oauth_2",Yt={"messages.list":{riskLevel:"read",description:"List messages in a mailbox"},"messages.get":{riskLevel:"read",description:"Get a specific message"},"messages.send":{riskLevel:"write",description:"Send an email to one or more recipients"},"messages.delete":{riskLevel:"destructive",irreversible:!0,description:"Permanently delete a message [DESTRUCTIVE \xB7 IRREVERSIBLE]"},"messages.modify":{riskLevel:"write",description:"Add or remove labels from a message"},"messages.batchModify":{riskLevel:"write",description:"Add or remove labels from multiple messages in bulk"},"messages.trash":{riskLevel:"write",description:"Move a message to the trash"},"messages.untrash":{riskLevel:"write",description:"Restore a message from the trash"},"labels.list":{riskLevel:"read",description:"List all labels in the mailbox"},"labels.get":{riskLevel:"read",description:"Get a specific label"},"labels.create":{riskLevel:"write",description:"Create a new label"},"labels.update":{riskLevel:"write",description:"Update an existing label"},"labels.delete":{riskLevel:"destructive",description:"Delete a label [DESTRUCTIVE]"},"drafts.list":{riskLevel:"read",description:"List drafts in the mailbox"},"drafts.get":{riskLevel:"read",description:"Get a specific draft"},"drafts.create":{riskLevel:"write",description:"Create a new draft"},"drafts.update":{riskLevel:"write",description:"Update an existing draft"},"drafts.delete":{riskLevel:"destructive",description:"Delete a draft [DESTRUCTIVE]"},"drafts.send":{riskLevel:"write",description:"Send a draft as an email"},"threads.list":{riskLevel:"read",description:"List threads in the mailbox"},"threads.get":{riskLevel:"read",description:"Get a specific thread"},"threads.modify":{riskLevel:"write",description:"Add or remove labels from a thread"},"threads.delete":{riskLevel:"destructive",irreversible:!0,description:"Permanently delete a thread [DESTRUCTIVE \xB7 IRREVERSIBLE]"},"threads.trash":{riskLevel:"write",description:"Move a thread to the trash"},"threads.untrash":{riskLevel:"write",description:"Restore a thread from the trash"}};function xs(e={}){let t={...e,authType:e.authType??Kt};return{id:"gmail",schema:$,options:t,authConfig:Wt,oauthConfig:{providerName:"Google",authUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:["https://www.googleapis.com/auth/gmail.modify","https://www.googleapis.com/auth/gmail.labels","https://www.googleapis.com/auth/gmail.send","https://www.googleapis.com/auth/gmail.compose"],authParams:{access_type:"offline",prompt:"consent"}},hooks:t.hooks,webhookHooks:t.webhookHooks,endpoints:Ht,webhooks:Ft,endpointMeta:Yt,endpointSchemas:zt,webhookSchemas:Vt,keyBuilder:async a=>{let o=a.authType;if(t.key)return t.key;if(a.authType==="oauth_2"){let[n,i,d]=await Promise.all([a.keys.get_access_token(),a.keys.get_expires_at(),a.keys.get_refresh_token()]);if(!d)throw new Error("[auth-missing:gmail:refresh_token]: Gmail refresh token is missing");let m=await a.keys.get_integration_credentials();if(!m.client_id||!m.client_secret)throw new Error("[auth-missing:gmail:client_credentials]: Gmail client credentials are missing");let p;try{p=await B({accessToken:n,expiresAt:i,refreshToken:d,clientId:m.client_id,clientSecret:m.client_secret})}catch(g){throw new Error(`[corsair:gmail] Failed to obtain valid access token: ${g instanceof Error?g.message:String(g)}`)}if(p.refreshed)try{await a.keys.set_access_token(p.accessToken),await a.keys.set_expires_at(String(p.expiresAt))}catch(g){throw new Error(`[corsair:gmail] Token was refreshed but failed to persist new credentials: ${g instanceof Error?g.message:String(g)}`)}return a._refreshAuth=async()=>{let g=await B({accessToken:null,expiresAt:null,refreshToken:d,clientId:m.client_id,clientSecret:m.client_secret,forceRefresh:!0});return await a.keys.set_access_token(g.accessToken),await a.keys.set_expires_at(String(g.expiresAt)),g.accessToken},p.accessToken}throw new Error(`[auth-missing:gmail:${o}]: Gmail key is missing`)},pluginWebhookMatcher:a=>{let o=a.headers;if(!(o.from==="noreply@google.com"||typeof o["user-agent"]=="string"&&o["user-agent"].includes("APIs-Google")))return!1;let i=a.body;if(!i?.message?.data)return!1;try{let d=k(i.message.data);return!!d.emailAddress&&!!d.historyId}catch{return!1}}}}export{$ as GmailSchema,_ as createGmailWebhookMatcher,k as decodePubSubMessage,xs as gmail,Wt as gmailAuthConfig,zt as gmailEndpointSchemas,Ht as gmailEndpointsNested,Ft as gmailWebhooksNested};
1
+ import{AuthMissingError as Ae}from"corsair/core";import{request as Oe}from"corsair/http";var j=class extends Error{constructor(a,o){super(a);this.code=o;this.name="GmailAPIError"}},je="https://gmail.googleapis.com/gmail/v1";async function Be(e,t,a){let o=await fetch("https://oauth2.googleapis.com/token",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:e,client_secret:t,refresh_token:a,grant_type:"refresh_token"})});if(!o.ok){let i=await o.text();throw new j(`Failed to refresh access token: ${i}`,o.status)}return await o.json()}async function B({accessToken:e,expiresAt:t,clientId:a,clientSecret:o,refreshToken:n,forceRefresh:i=!1}){let d=Math.floor(Date.now()/1e3);if(!i&&e&&t&&Number(t)>d+300)return{accessToken:e,expiresAt:Number(t),refreshed:!1};let p=await Be(a,o,n);return{accessToken:p.access_token,expiresAt:d+p.expires_in,refreshed:!0}}async function y(e,t,a={}){let{method:o="GET",body:n,query:i}=a;return await Oe({BASE:je,VERSION:"1.0.0",WITH_CREDENTIALS:!1,CREDENTIALS:"omit",TOKEN:t,HEADERS:{"Content-Type":"application/json"}},{method:o,url:e,body:o==="POST"||o==="PUT"||o==="PATCH"?n:void 0,mediaType:"application/json",query:o==="GET"?i:void 0})}function Ue(e){return e instanceof Error&&"status"in e&&e.status===401}async function c(e,t,a={}){try{return await y(e,t.key,a)}catch(o){if(Ue(o)&&t._refreshAuth){let n=await t._refreshAuth();return await y(e,n,a)}throw o}}import{logEventFromContext as M}from"corsair/core";var z=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/drafts`,e,{method:"GET",query:{maxResults:t.maxResults,pageToken:t.pageToken,q:t.q}});if(a.drafts&&e.db.drafts)try{for(let o of a.drafts)o.id&&await e.db.drafts.upsertByEntityId(o.id,{...o,id:o.id,messageId:o.message?.id,createdAt:new Date})}catch(o){console.warn("Failed to save drafts to database:",o)}return await M(e,"gmail.drafts.list",{...t},"completed"),a},V=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/drafts/${t.id}`,e,{method:"GET",query:{format:t.format}});if(a.id&&e.db.drafts)try{await e.db.drafts.upsertByEntityId(a.id,{...a,id:a.id,messageId:a.message?.id,createdAt:new Date})}catch(o){console.warn("Failed to save draft to database:",o)}return await M(e,"gmail.drafts.get",{...t},"completed"),a},K=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/drafts`,e,{method:"POST",body:t.draft});return a.id&&await e.endpoints.drafts.get({id:a.id,userId:t.userId}),await M(e,"gmail.drafts.create",{...t},"completed"),a},Y=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/drafts/${t.id}`,e,{method:"PUT",body:t.draft});return a.id&&await e.endpoints.drafts.get({id:a.id,userId:t.userId}),await M(e,"gmail.drafts.update",{...t},"completed"),a},Z=async(e,t)=>{if(await c(`/users/${t.userId||"me"}/drafts/${t.id}`,e,{method:"DELETE"}),e.db.drafts)try{await e.db.drafts.deleteByEntityId(t.id)}catch(a){console.warn("Failed to delete draft from database:",a)}await M(e,"gmail.drafts.delete",{...t},"completed")},J=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/drafts/send`,e,{method:"POST",body:{id:t.id,message:t.message}});return await M(e,"gmail.drafts.send",{...t},"completed"),a};import{logEventFromContext as v}from"corsair/core";var X=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/labels`,e,{method:"GET"});if(a.labels&&e.db.labels)try{for(let o of a.labels)o.id&&await e.db.labels.upsertByEntityId(o.id,{...o,id:o.id,createdAt:new Date})}catch(o){console.warn("Failed to save labels to database:",o)}return await v(e,"gmail.labels.list",{...t},"completed"),a},Q=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/labels/${t.id}`,e,{method:"GET"});if(a.id&&e.db.labels)try{await e.db.labels.upsertByEntityId(a.id,{id:a.id,name:a.name,messageListVisibility:a.messageListVisibility,labelListVisibility:a.labelListVisibility,type:a.type,messagesTotal:a.messagesTotal,messagesUnread:a.messagesUnread,threadsTotal:a.threadsTotal,threadsUnread:a.threadsUnread,createdAt:new Date})}catch(o){console.warn("Failed to save label to database:",o)}return await v(e,"gmail.labels.get",{...t},"completed"),a},ee=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/labels`,e,{method:"POST",body:t.label});return a.id&&await e.endpoints.labels.get({id:a.id,userId:t.userId}),await v(e,"gmail.labels.create",{...t},"completed"),a},te=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/labels/${t.id}`,e,{method:"PUT",body:t.label});return a.id&&await e.endpoints.labels.get({id:a.id,userId:t.userId}),await v(e,"gmail.labels.update",{...t},"completed"),a},se=async(e,t)=>{if(await c(`/users/${t.userId||"me"}/labels/${t.id}`,e,{method:"DELETE"}),e.db.labels)try{await e.db.labels.deleteByEntityId(t.id)}catch(a){console.warn("Failed to delete label from database:",a)}await v(e,"gmail.labels.delete",{...t},"completed")};import{logEventFromContext as I}from"corsair/core";function U(e,t){return e?.headers?e.headers.find(o=>o.name?.toLowerCase()===t.toLowerCase())?.value:void 0}function Ne(e){if(e.payload)return U(e.payload,"Subject")}function We(e){if(e.payload)return U(e.payload,"From")}function qe(e){if(e.payload)return U(e.payload,"To")}function ae(e){if(!e)return;let t,a;if(e.body?.data)try{let o=Buffer.from(e.body.data,"base64").toString("utf-8");e.mimeType==="text/plain"?t=o:e.mimeType==="text/html"&&(a=o)}catch{}if(e.parts&&e.parts.length>0)for(let o of e.parts){let n=ae(o);n&&(o.mimeType==="text/plain"?t=n:o.mimeType==="text/html"&&!t&&(a=n))}return t||a}function Fe(e){if(e.payload)return ae(e.payload)}var oe=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/messages`,e,{method:"GET",query:{q:t.q,maxResults:t.maxResults,pageToken:t.pageToken,labelIds:t.labelIds?.join(","),includeSpamTrash:t.includeSpamTrash}});if(a.messages&&e.db.messages)try{for(let o of a.messages)o.id&&await e.db.messages.upsertByEntityId(o.id,{...o,id:o.id,createdAt:new Date})}catch(o){console.warn("Failed to save messages to database:",o)}return await I(e,"gmail.messages.list",{...t},"completed"),a},ie=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/messages/${t.id}`,e,{method:"GET",query:{format:t.format,metadataHeaders:t.metadataHeaders?.join(",")}});if(a.id&&e.db.messages)try{let o=Ne(a),n=Fe(a),i=We(a),d=qe(a);await e.db.messages.upsertByEntityId(a.id,{...a,subject:o,body:n,from:i,to:d,id:a.id,createdAt:new Date})}catch(o){console.warn("Failed to save message to database:",o)}return await I(e,"gmail.messages.get",{...t},"completed"),a},ne=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/messages/send`,e,{method:"POST",body:{raw:t.raw,threadId:t.threadId}});return a.id&&await e.endpoints.messages.get({id:a.id,userId:t.userId}),await I(e,"gmail.messages.send",{...t},"completed"),a},re=async(e,t)=>{if(await c(`/users/${t.userId||"me"}/messages/${t.id}`,e,{method:"DELETE"}),e.db.messages)try{await e.db.messages.deleteByEntityId(t.id)}catch(a){console.warn("Failed to delete message from database:",a)}await I(e,"gmail.messages.delete",{...t},"completed")},de=async(e,t)=>{let a={};t.addLabelIds&&t.addLabelIds.length>0&&(a.addLabelIds=t.addLabelIds),t.removeLabelIds&&t.removeLabelIds.length>0&&(a.removeLabelIds=t.removeLabelIds);let o=await c(`/users/${t.userId||"me"}/messages/${t.id}/modify`,e,{method:"POST",body:a});return o.id&&await e.endpoints.messages.get({id:o.id,userId:t.userId}),await I(e,"gmail.messages.modify",{...t},"completed"),o},le=async(e,t)=>{let a={ids:t.ids};t.addLabelIds&&t.addLabelIds.length>0&&(a.addLabelIds=t.addLabelIds),t.removeLabelIds&&t.removeLabelIds.length>0&&(a.removeLabelIds=t.removeLabelIds),await c(`/users/${t.userId||"me"}/messages/batchModify`,e,{method:"POST",body:a}),await I(e,"gmail.messages.batchModify",{...t},"completed")},me=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/messages/${t.id}/trash`,e,{method:"POST"});return a.id&&await e.endpoints.messages.get({id:a.id,userId:t.userId}),await I(e,"gmail.messages.trash",{...t},"completed"),a},pe=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/messages/${t.id}/untrash`,e,{method:"POST"});return a.id&&await e.endpoints.messages.get({id:a.id,userId:t.userId}),await I(e,"gmail.messages.untrash",{...t},"completed"),a};import{logEventFromContext as S}from"corsair/core";var ge=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/threads`,e,{method:"GET",query:{q:t.q,maxResults:t.maxResults,pageToken:t.pageToken,labelIds:t.labelIds?.join(","),includeSpamTrash:t.includeSpamTrash}});if(a.threads&&e.db.threads)try{for(let o of a.threads)o.id&&await e.db.threads.upsertByEntityId(o.id,{...o,id:o.id,createdAt:new Date})}catch(o){console.warn("Failed to save threads to database:",o)}return await S(e,"gmail.threads.list",{...t},"completed"),a},ce=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/threads/${t.id}`,e,{method:"GET",query:{format:t.format,metadataHeaders:t.metadataHeaders?.join(",")}});if(a.id&&e.db.threads)try{await e.db.threads.upsertByEntityId(a.id,{...a,id:a.id,createdAt:new Date})}catch(o){console.warn("Failed to save thread to database:",o)}return await S(e,"gmail.threads.get",{...t},"completed"),a},ue=async(e,t)=>{let a={};t.addLabelIds&&t.addLabelIds.length>0&&(a.addLabelIds=t.addLabelIds),t.removeLabelIds&&t.removeLabelIds.length>0&&(a.removeLabelIds=t.removeLabelIds);let o=await c(`/users/${t.userId||"me"}/threads/${t.id}/modify`,e,{method:"POST",body:a});return o.id&&await e.endpoints.threads.get({id:o.id,userId:t.userId}),await S(e,"gmail.threads.modify",{...t},"completed"),o},he=async(e,t)=>{if(await c(`/users/${t.userId||"me"}/threads/${t.id}`,e,{method:"DELETE"}),e.db.threads)try{await e.db.threads.deleteByEntityId(t.id)}catch(a){console.warn("Failed to delete thread from database:",a)}await S(e,"gmail.threads.delete",{...t},"completed")},fe=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/threads/${t.id}/trash`,e,{method:"POST"});return a.id&&await e.endpoints.threads.get({id:a.id,userId:t.userId}),await S(e,"gmail.threads.trash",{...t},"completed"),a},be=async(e,t)=>{let a=await c(`/users/${t.userId||"me"}/threads/${t.id}/untrash`,e,{method:"POST"});return a.id&&await e.endpoints.threads.get({id:a.id,userId:t.userId}),await S(e,"gmail.threads.untrash",{...t},"completed"),a};import{z as s}from"zod";var ye="Base64url-encoded RFC 2822 email \u2014 do NOT pass plain email text. Build the MIME message (From, To, Subject, Content-Type headers, blank line, body; lines separated by \\r\\n), then base64url-encode: standard base64, replace + with -, / with _, remove trailing =.",$=s.object({raw:s.string().optional().describe(ye),threadId:s.string().optional()}),Ve=s.object({userId:s.string().optional(),q:s.string().optional(),maxResults:s.number().optional(),pageToken:s.string().optional(),labelIds:s.array(s.string()).optional(),includeSpamTrash:s.boolean().optional()}),Ke=s.object({userId:s.string().optional(),id:s.string(),format:s.enum(["minimal","full","raw","metadata"]).optional(),metadataHeaders:s.array(s.string()).optional()}),Ye=s.object({userId:s.string().optional(),raw:s.string().describe(ye),threadId:s.string().optional()}),Ze=s.object({userId:s.string().optional(),id:s.string()}),Je=s.object({userId:s.string().optional(),id:s.string(),addLabelIds:s.array(s.string()).optional(),removeLabelIds:s.array(s.string()).optional()}),Xe=s.object({userId:s.string().optional(),ids:s.array(s.string()).optional(),addLabelIds:s.array(s.string()).optional(),removeLabelIds:s.array(s.string()).optional()}),Qe=s.object({userId:s.string().optional(),id:s.string()}),et=s.object({userId:s.string().optional(),id:s.string()}),tt=s.object({userId:s.string().optional()}),st=s.object({userId:s.string().optional(),id:s.string()}),at=s.object({userId:s.string().optional(),label:s.object({name:s.string().optional(),messageListVisibility:s.enum(["show","hide"]).optional(),labelListVisibility:s.enum(["labelShow","labelShowIfUnread","labelHide"]).optional(),color:s.object({textColor:s.string().optional(),backgroundColor:s.string().optional()}).optional()})}),ot=s.object({userId:s.string().optional(),id:s.string(),label:s.object({name:s.string().optional(),messageListVisibility:s.enum(["show","hide"]).optional(),labelListVisibility:s.enum(["labelShow","labelShowIfUnread","labelHide"]).optional(),color:s.object({textColor:s.string().optional(),backgroundColor:s.string().optional()}).optional()})}),it=s.object({userId:s.string().optional(),id:s.string()}),nt=s.object({userId:s.string().optional(),maxResults:s.number().optional(),pageToken:s.string().optional(),q:s.string().optional()}),rt=s.object({userId:s.string().optional(),id:s.string(),format:s.enum(["minimal","full","raw","metadata"]).optional()}),dt=s.object({userId:s.string().optional(),draft:s.object({message:$.optional()}).optional().describe("Draft payload. message.raw must be a base64url-encoded RFC 2822 email, not plain text.")}),lt=s.object({userId:s.string().optional(),id:s.string(),draft:s.object({message:$.optional()}).optional().describe("Updated draft payload. message.raw must be a base64url-encoded RFC 2822 email, not plain text.")}),mt=s.object({userId:s.string().optional(),id:s.string()}),pt=s.object({userId:s.string().optional(),id:s.string().optional(),message:$.optional().describe("Optional message body when sending without a draft id. raw must be base64url-encoded RFC 2822, not plain text.")}),gt=s.object({userId:s.string().optional(),q:s.string().optional(),maxResults:s.number().optional(),pageToken:s.string().optional(),labelIds:s.array(s.string()).optional(),includeSpamTrash:s.boolean().optional()}),ct=s.object({userId:s.string().optional(),id:s.string(),format:s.enum(["minimal","full","metadata"]).optional(),metadataHeaders:s.array(s.string()).optional()}),ut=s.object({userId:s.string().optional(),id:s.string(),addLabelIds:s.array(s.string()).optional(),removeLabelIds:s.array(s.string()).optional()}),ht=s.object({userId:s.string().optional(),id:s.string()}),ft=s.object({userId:s.string().optional(),id:s.string()}),bt=s.object({userId:s.string().optional(),id:s.string()}),yt=s.object({userId:s.string().optional()}),u={messagesList:Ve,messagesGet:Ke,messagesSend:Ye,messagesDelete:Ze,messagesModify:Je,messagesBatchModify:Xe,messagesTrash:Qe,messagesUntrash:et,labelsList:tt,labelsGet:st,labelsCreate:at,labelsUpdate:ot,labelsDelete:it,draftsList:nt,draftsGet:rt,draftsCreate:dt,draftsUpdate:lt,draftsDelete:mt,draftsSend:pt,threadsList:gt,threadsGet:ct,threadsModify:ut,threadsDelete:ht,threadsTrash:ft,threadsUntrash:bt,usersGetProfile:yt},Et=s.object({name:s.string().optional(),value:s.string().optional()}),Gt=s.object({attachmentId:s.string().optional(),size:s.number().optional(),data:s.string().optional()}),It=s.object({partId:s.string().optional(),mimeType:s.string().optional(),filename:s.string().optional(),headers:s.array(Et).optional(),body:Gt.optional()}),Ee=It.extend({parts:s.lazy(()=>s.array(Ee).optional())}),E=s.object({id:s.string().optional(),threadId:s.string().optional(),labelIds:s.array(s.string()).optional(),snippet:s.string().optional(),historyId:s.string().optional(),internalDate:s.union([s.string(),s.number(),s.date()]).transform(e=>{if(e instanceof Date)return e;if(typeof e=="number")return new Date(e);if(typeof e=="string"){let t=Number(e);return isNaN(t)?null:new Date(t)}return null}).nullable().optional(),sizeEstimate:s.number().optional(),payload:Ee.optional(),raw:s.string().optional().describe("Full RFC 2822 message in base64url encoding (when format=raw). Not plain text \u2014 decode base64url before reading headers/body.")}),wt=s.object({messages:s.array(E).optional(),nextPageToken:s.string().optional(),resultSizeEstimate:s.number().optional()}),Tt=s.object({textColor:s.string().optional(),backgroundColor:s.string().optional()}),x=s.object({id:s.string().optional(),name:s.string().optional(),messageListVisibility:s.enum(["show","hide"]).optional(),labelListVisibility:s.enum(["labelShow","labelShowIfUnread","labelHide"]).optional(),type:s.enum(["system","user"]).optional(),messagesTotal:s.number().optional(),messagesUnread:s.number().optional(),threadsTotal:s.number().optional(),threadsUnread:s.number().optional(),color:Tt.optional()}),Mt=s.object({labels:s.array(x).optional()}),R=s.object({id:s.string().optional(),message:E.optional()}),St=s.object({drafts:s.array(R).optional(),nextPageToken:s.string().optional(),resultSizeEstimate:s.number().optional()}),P=s.object({id:s.string().optional(),snippet:s.string().optional(),historyId:s.string().optional(),messages:s.array(E).optional()}),Lt=s.object({threads:s.array(P).optional(),nextPageToken:s.string().optional(),resultSizeEstimate:s.number().optional()}),kt=s.object({emailAddress:s.string().optional(),messagesTotal:s.number().optional(),threadsTotal:s.number().optional(),historyId:s.string().optional()}),h={messagesList:wt,messagesGet:E,messagesSend:E,messagesDelete:s.void(),messagesModify:E,messagesBatchModify:s.void(),messagesTrash:E,messagesUntrash:E,labelsList:Mt,labelsGet:x,labelsCreate:x,labelsUpdate:x,labelsDelete:s.void(),draftsList:St,draftsGet:R,draftsCreate:R,draftsUpdate:R,draftsDelete:s.void(),draftsSend:E,threadsList:Lt,threadsGet:P,threadsModify:P,threadsDelete:s.void(),threadsTrash:P,threadsUntrash:P,usersGetProfile:kt};var G={list:oe,get:ie,send:ne,delete:re,modify:de,batchModify:le,trash:me,untrash:pe},L={list:X,get:Q,create:ee,update:te,delete:se},w={list:z,get:V,create:K,update:Y,delete:Z,send:J},T={list:ge,get:ce,modify:ue,delete:he,trash:fe,untrash:be};import{z as C}from"zod";import{z as r}from"zod";var vt=r.object({name:r.string().optional(),value:r.string().optional()}),Pt=r.object({attachmentId:r.string().optional(),size:r.number().optional(),data:r.string().optional()}),Ge=r.lazy(()=>r.object({partId:r.string().optional(),mimeType:r.string().optional(),filename:r.string().optional(),headers:r.array(vt).optional(),body:Pt.optional(),parts:r.array(Ge).optional()})),Ie=r.object({id:r.string(),threadId:r.string().optional(),labelIds:r.array(r.string()).optional(),snippet:r.string().optional(),historyId:r.string().optional(),internalDate:r.string().optional(),sizeEstimate:r.number().optional(),payload:Ge.optional(),raw:r.string().optional(),subject:r.string().optional(),body:r.string().optional(),from:r.string().optional(),to:r.string().optional(),createdAt:r.coerce.date().nullable().optional()}),we=r.object({id:r.string(),name:r.string().optional(),messageListVisibility:r.enum(["show","hide"]).optional(),labelListVisibility:r.enum(["labelShow","labelShowIfUnread","labelHide"]).optional(),type:r.enum(["system","user"]).optional(),messagesTotal:r.number().optional(),messagesUnread:r.number().optional(),threadsTotal:r.number().optional(),threadsUnread:r.number().optional(),createdAt:r.coerce.date().nullable().optional()}),Te=r.object({id:r.string(),messageId:r.string().optional(),createdAt:r.coerce.date().nullable().optional()}),Me=r.object({id:r.string(),snippet:r.string().optional(),historyId:r.string().optional(),createdAt:r.coerce.date().nullable().optional()});var bs=C.object({clientId:C.string(),clientSecret:C.string(),accessToken:C.string(),refreshToken:C.string()}),_={version:"1.0.0",entities:{messages:Ie,labels:we,drafts:Te,threads:Me}};import{logEventFromContext as D}from"corsair/core";import{z as l}from"zod";var Ct=l.object({data:l.string().optional(),attributes:l.record(l.string(),l.string()).optional(),messageId:l.string().optional(),publishTime:l.string().optional()}),Se=l.object({message:Ct.optional(),subscription:l.string().optional(),event:l.unknown().optional()}),Gs=l.object({emailAddress:l.string().optional(),historyId:l.string().optional()}),Dt=l.object({type:l.literal("messageReceived"),emailAddress:l.string(),historyId:l.string(),message:l.custom()}),xt=l.object({type:l.literal("messageDeleted"),emailAddress:l.string(),historyId:l.string(),message:l.custom()}),Rt=l.object({type:l.literal("messageLabelChanged"),emailAddress:l.string(),historyId:l.string(),message:l.custom(),labelsAdded:l.array(l.string()).optional(),labelsRemoved:l.array(l.string()).optional()}),Le=l.union([Dt,xt,Rt]);function k(e){let t=Buffer.from(e,"base64").toString("utf-8");return JSON.parse(t)}function N(e){return t=>{let a=t.body;if(!a.message?.data)return!1;try{let o=k(a.message.data);return!!o.historyId&&!!o.emailAddress}catch{return!1}}}var At=100,Ot=10,jt=10;function W(e,t){return e?.headers?e.headers.find(o=>o.name?.toLowerCase()===t.toLowerCase())?.value:void 0}function Bt(e){if(e.payload)return W(e.payload,"Subject")}function Ut(e){if(e.payload)return W(e.payload,"From")}function $t(e){if(e.payload)return W(e.payload,"To")}function Pe(e){if(!e)return;let t,a;if(e.body?.data)try{let o=Buffer.from(e.body.data,"base64").toString("utf-8");e.mimeType==="text/plain"?t=o:e.mimeType==="text/html"&&(a=o)}catch{}if(e.parts&&e.parts.length>0)for(let o of e.parts){let n=Pe(o);n&&(o.mimeType==="text/plain"?t=n:o.mimeType==="text/html"&&!t&&(a=n))}return t||a}function _t(e){if(e.payload)return Pe(e.payload)}function Nt(e){let t=[],a=[],o=[];if(!e)return{added:t,deleted:a,modified:o};for(let n of e){if(n.messagesAdded)for(let i of n.messagesAdded)i.message?.id&&t.push(i.message.id);if(n.messagesDeleted)for(let i of n.messagesDeleted)i.message?.id&&a.push(i.message.id);if(n.labelsAdded||n.labelsRemoved){if(n.labelsAdded)for(let i of n.labelsAdded)i.message?.id&&o.push(i.message.id);if(n.labelsRemoved)for(let i of n.labelsRemoved)i.message?.id&&o.push(i.message.id)}}return{added:[...new Set(t)],deleted:[...new Set(a)],modified:[...new Set(o)]}}async function q(e,t,a){let[o,n]=await Promise.all([y(`/users/${t}/messages/${a}`,e,{method:"GET",query:{format:"full"}}),y(`/users/${t}/messages/${a}`,e,{method:"GET",query:{format:"raw"}}).catch(()=>null)]);return{...o,raw:n?.raw}}async function Wt(e,t,a,o){return y(`/users/${t}/messages/${a}/attachments/${o}`,e,{method:"GET"})}async function Ce(e,t,a){if(!a.payload)return a;let o=async i=>{if(!i)return i;if(i.body?.attachmentId)try{let d=await Wt(e,t,a.id,i.body.attachmentId);return{...i,body:{...i.body,data:d.data,size:d.size}}}catch(d){return console.warn(`Failed to fetch attachment ${i.body.attachmentId} for message ${a.id}:`,d),i}if(i.parts&&i.parts.length>0){let d=await Promise.all(i.parts.map(o));return{...i,parts:d.filter(m=>m!==void 0)}}return i},n=await o(a.payload);return{...a,payload:n}}function qt(e){let t=Number(e);return t>1?String(t-1):e}async function De(e,t){return!e.db?.messages||!t.id?"":(await e.db.messages.upsertByEntityId(t.id,{...t,id:t.id,subject:Bt(t),body:_t(t),from:Ut(t),to:$t(t),createdAt:new Date}))?.id??""}async function Ft(e,t,a,o){let n=await y(`/users/${a}/messages`,t,{method:"GET",query:{maxResults:Ot}}),i=[],d=[];if(!n.messages?.length)return{added:i,modified:d};let m=Number(o);for(let p of n.messages)if(p.id)try{let g=await q(t,a,p.id);(g.historyId?Number(g.historyId):0)>=m-jt&&(e.db?.messages&&await e.db.messages.findByEntityId(p.id)?d.push(p.id):i.push(p.id))}catch{}return{added:i,modified:d}}async function ke(e,t,a,o){let n=null,i="";for(let d of o)try{let m=await q(t,a,d),p=await Ce(t,a,m);n||(n=p);try{let g=await De(e,p);!i&&g&&(i=g)}catch(g){throw console.error(`Failed to save message ${p.id} to database:`,g),g}}catch(m){console.warn(`Failed to process message ${d}:`,m)}return{message:n,corsairEntityId:i}}async function Ht(e,t,a,o){let n=null,i="";if(!e.db?.messages)return{message:null,corsairEntityId:i};for(let d of o)try{let m=null;try{m=await y(`/users/${a}/messages/${d}`,t,{method:"GET",query:{format:"full"}})}catch(p){if(p?.statusCode===404)continue}if(!n&&m&&(n=m),!i){let p=await e.db.messages.findByEntityId(d);p&&(i=p.id)}await e.db.messages.deleteByEntityId(d)}catch(m){console.warn(`Failed to delete message ${d} from database:`,m)}return{message:n,corsairEntityId:i}}async function ve(e,t,a,o){let n=null,i="";if(!e.db?.messages)return{message:null,corsairEntityId:i};for(let d of o)try{let m=await q(t,a,d),p=await Ce(t,a,m);n||(n=p);try{let g=await De(e,p);!i&&g&&(i=g)}catch(g){throw console.error(`Failed to update message ${p.id} in database:`,g),g}}catch(m){console.warn(`Failed to process message ${d}:`,m)}return{message:n,corsairEntityId:i}}var xe={match:N("messageChanged"),handler:async(e,t)=>{let a=t.payload;if(!a.message?.data)return{success:!1,error:"No message data in notification"};let o=k(a.message.data);if(!o.historyId||!o.emailAddress)return{success:!1,error:"Invalid push notification format"};let n=e.key,i=o.emailAddress,d=o.historyId;try{let m=qt(d),p=await y(`/users/${i}/history`,n,{method:"GET",query:{startHistoryId:m,maxResults:At}}),{added:g,deleted:A,modified:O}=Nt(p.history);if(O.length>0){let f=await ve(e,n,i,O),b={type:"messageLabelChanged",emailAddress:i,historyId:d,message:f.message??{}};return await D(e,"gmail.webhook.messageLabelChanged",{...b},"completed"),{success:!0,corsairEntityId:f.corsairEntityId,data:b}}if(g.length>0){let f=await ke(e,n,i,g),b={type:"messageReceived",emailAddress:i,historyId:d,message:f.message??{}};return await D(e,"gmail.webhook.messageReceived",{...b},"completed"),{success:!0,corsairEntityId:f.corsairEntityId,data:b}}if(A.length>0){let f=await Ht(e,n,i,A),b={type:"messageDeleted",emailAddress:i,historyId:d,message:f.message??{}};return await D(e,"gmail.webhook.messageDeleted",{...b},"completed"),{success:!0,corsairEntityId:f.corsairEntityId,data:b}}let{added:F,modified:H}=await Ft(e,n,i,d);if(H.length>0){let f=await ve(e,n,i,H),b={type:"messageLabelChanged",emailAddress:i,historyId:d,message:f.message??{}};return await D(e,"gmail.webhook.messageLabelChanged",{...b},"completed"),{success:!0,corsairEntityId:f.corsairEntityId,data:b}}if(F.length>0){let f=await ke(e,n,i,F),b={type:"messageReceived",emailAddress:i,historyId:d,message:f.message??{}};return await D(e,"gmail.webhook.messageReceived",{...b},"completed"),{success:!0,corsairEntityId:f.corsairEntityId,data:b}}return{success:!0,corsairEntityId:"",data:{type:"messageReceived",emailAddress:i,historyId:d,message:{}}}}catch(m){return console.error("Failed to process Gmail webhook:",m),{success:!1,error:`Failed to process message: ${m instanceof Error?m.message:"Unknown error"}`}}}};var Re={messageChanged:xe};var zt={oauth_2:{integration:["topic_id"]}},Vt={messages:{list:G.list,get:G.get,send:G.send,delete:G.delete,modify:G.modify,batchModify:G.batchModify,trash:G.trash,untrash:G.untrash},labels:{list:L.list,get:L.get,create:L.create,update:L.update,delete:L.delete},drafts:{list:w.list,get:w.get,create:w.create,update:w.update,delete:w.delete,send:w.send},threads:{list:T.list,get:T.get,modify:T.modify,delete:T.delete,trash:T.trash,untrash:T.untrash}},Kt={"messages.list":{input:u.messagesList,output:h.messagesList},"messages.get":{input:u.messagesGet,output:h.messagesGet},"messages.send":{input:u.messagesSend,output:h.messagesSend},"messages.delete":{input:u.messagesDelete,output:h.messagesDelete},"messages.modify":{input:u.messagesModify,output:h.messagesModify},"messages.batchModify":{input:u.messagesBatchModify,output:h.messagesBatchModify},"messages.trash":{input:u.messagesTrash,output:h.messagesTrash},"messages.untrash":{input:u.messagesUntrash,output:h.messagesUntrash},"labels.list":{input:u.labelsList,output:h.labelsList},"labels.get":{input:u.labelsGet,output:h.labelsGet},"labels.create":{input:u.labelsCreate,output:h.labelsCreate},"labels.update":{input:u.labelsUpdate,output:h.labelsUpdate},"labels.delete":{input:u.labelsDelete,output:h.labelsDelete},"drafts.list":{input:u.draftsList,output:h.draftsList},"drafts.get":{input:u.draftsGet,output:h.draftsGet},"drafts.create":{input:u.draftsCreate,output:h.draftsCreate},"drafts.update":{input:u.draftsUpdate,output:h.draftsUpdate},"drafts.delete":{input:u.draftsDelete,output:h.draftsDelete},"drafts.send":{input:u.draftsSend,output:h.draftsSend},"threads.list":{input:u.threadsList,output:h.threadsList},"threads.get":{input:u.threadsGet,output:h.threadsGet},"threads.modify":{input:u.threadsModify,output:h.threadsModify},"threads.delete":{input:u.threadsDelete,output:h.threadsDelete},"threads.trash":{input:u.threadsTrash,output:h.threadsTrash},"threads.untrash":{input:u.threadsUntrash,output:h.threadsUntrash}},Yt={messageChanged:Re.messageChanged},Zt={messageChanged:{description:"A Gmail message was received, deleted, or had its labels changed",payload:Se,response:Le}},Jt="oauth_2",Xt={"messages.list":{riskLevel:"read",description:"List messages in a mailbox"},"messages.get":{riskLevel:"read",description:"Get a specific message"},"messages.send":{riskLevel:"write",description:"Send an email to one or more recipients"},"messages.delete":{riskLevel:"destructive",irreversible:!0,description:"Permanently delete a message [DESTRUCTIVE \xB7 IRREVERSIBLE]"},"messages.modify":{riskLevel:"write",description:"Add or remove labels from a message"},"messages.batchModify":{riskLevel:"write",description:"Add or remove labels from multiple messages in bulk"},"messages.trash":{riskLevel:"write",description:"Move a message to the trash"},"messages.untrash":{riskLevel:"write",description:"Restore a message from the trash"},"labels.list":{riskLevel:"read",description:"List all labels in the mailbox"},"labels.get":{riskLevel:"read",description:"Get a specific label"},"labels.create":{riskLevel:"write",description:"Create a new label"},"labels.update":{riskLevel:"write",description:"Update an existing label"},"labels.delete":{riskLevel:"destructive",description:"Delete a label [DESTRUCTIVE]"},"drafts.list":{riskLevel:"read",description:"List drafts in the mailbox"},"drafts.get":{riskLevel:"read",description:"Get a specific draft"},"drafts.create":{riskLevel:"write",description:"Create a new draft"},"drafts.update":{riskLevel:"write",description:"Update an existing draft"},"drafts.delete":{riskLevel:"destructive",description:"Delete a draft [DESTRUCTIVE]"},"drafts.send":{riskLevel:"write",description:"Send a draft as an email"},"threads.list":{riskLevel:"read",description:"List threads in the mailbox"},"threads.get":{riskLevel:"read",description:"Get a specific thread"},"threads.modify":{riskLevel:"write",description:"Add or remove labels from a thread"},"threads.delete":{riskLevel:"destructive",irreversible:!0,description:"Permanently delete a thread [DESTRUCTIVE \xB7 IRREVERSIBLE]"},"threads.trash":{riskLevel:"write",description:"Move a thread to the trash"},"threads.untrash":{riskLevel:"write",description:"Restore a thread from the trash"}};function js(e={}){let t={...e,authType:e.authType??Jt};return{id:"gmail",schema:_,options:t,authConfig:zt,oauthConfig:{providerName:"Google",authUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:["https://www.googleapis.com/auth/gmail.modify","https://www.googleapis.com/auth/gmail.labels","https://www.googleapis.com/auth/gmail.send","https://www.googleapis.com/auth/gmail.compose"],authParams:{access_type:"offline",prompt:"consent"}},hooks:t.hooks,webhookHooks:t.webhookHooks,endpoints:Vt,webhooks:Yt,endpointMeta:Xt,endpointSchemas:Kt,webhookSchemas:Zt,keyBuilder:async a=>{let o=a.authType;if(t.key)return t.key;if(a.authType==="oauth_2"){let[n,i,d]=await Promise.all([a.keys.get_access_token(),a.keys.get_expires_at(),a.keys.get_refresh_token()]);if(!d)throw new Ae("gmail","oauth_2");let m=await a.keys.get_integration_credentials();if(!m.client_id||!m.client_secret)throw new Error("[auth-missing:gmail:client_credentials]: Gmail client credentials are missing");let p;try{p=await B({accessToken:n,expiresAt:i,refreshToken:d,clientId:m.client_id,clientSecret:m.client_secret})}catch(g){throw new Error(`[corsair:gmail] Failed to obtain valid access token: ${g instanceof Error?g.message:String(g)}`)}if(p.refreshed)try{await a.keys.set_access_token(p.accessToken),await a.keys.set_expires_at(String(p.expiresAt))}catch(g){throw new Error(`[corsair:gmail] Token was refreshed but failed to persist new credentials: ${g instanceof Error?g.message:String(g)}`)}return a._refreshAuth=async()=>{let g=await B({accessToken:null,expiresAt:null,refreshToken:d,clientId:m.client_id,clientSecret:m.client_secret,forceRefresh:!0});return await a.keys.set_access_token(g.accessToken),await a.keys.set_expires_at(String(g.expiresAt)),g.accessToken},p.accessToken}throw new Ae("gmail","oauth_2")},pluginWebhookMatcher:a=>{let o=a.headers;if(!(o.from==="noreply@google.com"||typeof o["user-agent"]=="string"&&o["user-agent"].includes("APIs-Google")))return!1;let i=a.body;if(!i?.message?.data)return!1;try{let d=k(i.message.data);return!!d.emailAddress&&!!d.historyId}catch{return!1}}}}export{_ as GmailSchema,N as createGmailWebhookMatcher,k as decodePubSubMessage,js as gmail,zt as gmailAuthConfig,Kt as gmailEndpointSchemas,Vt as gmailEndpointsNested,Yt as gmailWebhooksNested};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@corsair-dev/gmail",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "Gmail plugin for Corsair",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -27,7 +27,7 @@
27
27
  "tsup": "^8.0.1",
28
28
  "typescript": "^5.9.3",
29
29
  "zod": "^4.1.13",
30
- "corsair": "0.1.69"
30
+ "corsair": "0.1.75"
31
31
  },
32
32
  "keywords": [
33
33
  "corsair",