@corsair-dev/googlesheets 0.1.7 → 0.1.8

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/README.md ADDED
@@ -0,0 +1,42 @@
1
+ # @corsair-dev/googlesheets
2
+
3
+ Google sheets plugin for Corsair.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ pnpm add @corsair-dev/googlesheets
9
+ ```
10
+
11
+ ## Endpoints
12
+
13
+ | Operation | Operation ID | Risk | Description |
14
+ |-----------|--------------|------|-------------|
15
+ | `sheets.appendOrUpdateRow` | `googlesheets.api.sheets.appendOrUpdateRow` | `write` | Append a new row or update an existing one |
16
+ | `sheets.appendRow` | `googlesheets.api.sheets.appendRow` | `write` | Append a new row to a sheet |
17
+ | `sheets.clearSheet` | `googlesheets.api.sheets.clearSheet` | `destructive` | Clear all data from a sheet [DESTRUCTIVE] |
18
+ | `sheets.createSheet` | `googlesheets.api.sheets.createSheet` | `write` | Add a new sheet tab to a spreadsheet |
19
+ | `sheets.deleteRowsOrColumns` | `googlesheets.api.sheets.deleteRowsOrColumns` | `destructive` | Delete rows or columns from a sheet [DESTRUCTIVE] |
20
+ | `sheets.deleteSheet` | `googlesheets.api.sheets.deleteSheet` | `destructive` | Delete a sheet tab and all its data [DESTRUCTIVE · IRREVERSIBLE] |
21
+ | `sheets.getRows` | `googlesheets.api.sheets.getRows` | `read` | Read rows from a sheet |
22
+ | `sheets.listSheetsInSpreadsheet` | `googlesheets.api.sheets.listSheetsInSpreadsheet` | `read` | List all sheet tabs in a spreadsheet |
23
+ | `sheets.updateRow` | `googlesheets.api.sheets.updateRow` | `write` | Update an existing row in a sheet |
24
+ | `spreadsheets.create` | `googlesheets.api.spreadsheets.create` | `write` | Create a new spreadsheet |
25
+ | `spreadsheets.delete` | `googlesheets.api.spreadsheets.delete` | `destructive` | Permanently delete a spreadsheet [DESTRUCTIVE · IRREVERSIBLE] |
26
+ | `spreadsheets.list` | `googlesheets.api.spreadsheets.list` | `read` | List all spreadsheets in Google Drive |
27
+
28
+ ## Auth
29
+
30
+ Auth: OAuth 2.0. Corsair prompts your tenant for credentials on first use.
31
+
32
+ ## Webhooks
33
+
34
+ Handles 1 webhook event. See the reference for payloads and `webhookHooks`.
35
+
36
+ ## Reference
37
+
38
+ Full docs, types, and examples: https://docs.corsair.dev/plugins/googlesheets
39
+
40
+ ## License
41
+
42
+ Apache-2.0
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{AuthMissingError as ke,getOAuthAccessToken as ve}from"corsair/core";import{logEventFromContext as m}from"corsair/core";import{request as Y}from"corsair/http";var ee="https://sheets.googleapis.com/v4";async function v(s,e,o={}){let{method:a="GET",body:n,query:r}=o;return await Y({BASE:ee,VERSION:"1.0.0",WITH_CREDENTIALS:!1,CREDENTIALS:"omit",TOKEN:e,HEADERS:{"Content-Type":"application/json"}},{method:a,url:s,body:a==="POST"||a==="PUT"||a==="PATCH"?n:void 0,mediaType:"application/json",query:r})}function te(s){return s instanceof Error&&"status"in s&&s.status===401}var se="https://www.googleapis.com/drive/v3";async function T(s,e,o={}){return fetch(`${se}${s}`,{...o,headers:{...o.headers,Authorization:`Bearer ${e}`}})}async function b(s,e,o={}){let a=await T(s,e.key,o);if(a.status===401&&e._refreshAuth){let n=await e._refreshAuth();return T(s,n,o)}return a}async function g(s,e,o={}){try{return await v(s,e.key,o)}catch(a){if(te(a)&&e._refreshAuth){let n=await e._refreshAuth();return await v(s,n,o)}throw a}}var U=async(s,e)=>{let o=e.range||`${e.sheetName||"Sheet1"}!A:Z`,a=e.values?[e.values]:[],n=await g(`/spreadsheets/${e.spreadsheetId}/values/${o}:append`,s,{method:"POST",query:{valueInputOption:e.valueInputOption||"USER_ENTERED",insertDataOption:e.insertDataOption||"INSERT_ROWS"},body:{values:a,majorDimension:"ROWS"}});if(n.responses&&n.responses.length>0&&s.db.rows)try{let r=n.responses[0];if(r){let d=r.updatedRange||o,i=e.sheetName||"Sheet1",l=`${e.spreadsheetId}_${i}_${d}`;await s.db.rows.upsertByEntityId(l,{rowId:l,spreadsheetId:e.spreadsheetId,sheetName:i,range:d,values:e.values,createdAt:new Date})}}catch(r){console.warn("Failed to save row to database:",r)}return await m(s,"googlesheets.sheets.appendRow",{...e},"completed"),n},A=async(s,e)=>{let o=e.sheetName||"Sheet1",a=e.keyColumn||"A",n=e.keyValue;if(!n)throw new Error("keyValue is required for appendOrUpdateRow");let r=`${o}!${a}:${a}`,d=await g(`/spreadsheets/${e.spreadsheetId}/values/${r}`,s,{method:"GET"}),i=-1;if(d.values){for(let c=0;c<d.values.length;c++)if(d.values[c]?.[0]===String(n)){i=c;break}}let l=e.values?[e.values]:[],R=i>=0?`${o}!${i+1}:${i+1}`:`${o}!A:Z`;if(i>=0){let c=await g(`/spreadsheets/${e.spreadsheetId}/values/${R}`,s,{method:"PUT",query:{valueInputOption:e.valueInputOption||"USER_ENTERED"},body:{values:l,majorDimension:"ROWS"}});if(s.db.rows)try{let y=c.updatedRange||R,E=`${e.spreadsheetId}_${o}_${y}`;await s.db.rows.upsertByEntityId(E,{rowId:E,spreadsheetId:e.spreadsheetId,sheetName:o,range:y,values:e.values,createdAt:new Date})}catch(y){console.warn("Failed to update row in database:",y)}return await m(s,"googlesheets.sheets.appendOrUpdateRow",{...e,action:"update"},"completed"),c}else{let c=await g(`/spreadsheets/${e.spreadsheetId}/values/${R}:append`,s,{method:"POST",query:{valueInputOption:e.valueInputOption||"USER_ENTERED",insertDataOption:e.insertDataOption||"INSERT_ROWS"},body:{values:l,majorDimension:"ROWS"}});if(s.db.rows)try{let y=c.updates?.updatedRange||R,E=`${e.spreadsheetId}_${o}_${y}`;await s.db.rows.upsertByEntityId(E,{rowId:E,spreadsheetId:e.spreadsheetId,sheetName:o,range:y,values:e.values,createdAt:new Date})}catch(y){console.warn("Failed to save row to database:",y)}return await m(s,"googlesheets.sheets.appendOrUpdateRow",{...e,action:"append"},"completed"),c}},C=async(s,e)=>{let o=e.range||`${e.sheetName||"Sheet1"}!A:Z`,a=await g(`/spreadsheets/${e.spreadsheetId}/values/${o}`,s,{method:"GET",query:{valueRenderOption:e.valueRenderOption||"FORMATTED_VALUE",dateTimeRenderOption:e.dateTimeRenderOption||"FORMATTED_STRING"}});if(a.values&&s.db.rows)try{let n=e.sheetName||"Sheet1";for(let r=0;r<a.values.length;r++){let d=a.values[r];if(d){let i=r+1,l=`${n}!${i}:${i}`,R=`${e.spreadsheetId}_${n}_${l}`;await s.db.rows.upsertByEntityId(R,{rowId:R,spreadsheetId:e.spreadsheetId,sheetName:n,range:l,values:d,createdAt:new Date})}}}catch(n){console.warn("Failed to save rows to database:",n)}return await m(s,"googlesheets.sheets.getRows",{...e},"completed"),a},D=async(s,e)=>{let o=e.range||`${e.sheetName||"Sheet1"}!${e.rowIndex||1}:${e.rowIndex||1}`,a=e.values?[e.values]:[],n=await g(`/spreadsheets/${e.spreadsheetId}/values/${o}`,s,{method:"PUT",query:{valueInputOption:e.valueInputOption||"USER_ENTERED"},body:{values:a,majorDimension:"ROWS"}});if(n.responses&&n.responses.length>0&&s.db.rows)try{let r=n.responses[0];if(r){let d=r.updatedRange||o,i=e.sheetName||"Sheet1",l=`${e.spreadsheetId}_${i}_${d}`;await s.db.rows.upsertByEntityId(l,{rowId:l,spreadsheetId:e.spreadsheetId,sheetName:i,range:d,values:e.values,createdAt:new Date})}}catch(r){console.warn("Failed to update row in database:",r)}return await m(s,"googlesheets.sheets.updateRow",{...e},"completed"),n},P=async(s,e)=>{let o=e.range||e.sheetName||"Sheet1",a=await g(`/spreadsheets/${e.spreadsheetId}/values/${o}:clear`,s,{method:"POST"});if(a.clearedRange&&s.db.rows)try{let n=e.sheetName||"Sheet1",r=a.clearedRange,d=`${e.spreadsheetId}_${n}_${r}`;await s.db.rows.deleteByEntityId(d)}catch(n){console.warn("Failed to delete rows from database:",n)}return await m(s,"googlesheets.sheets.clearSheet",{...e},"completed"),a},N=async(s,e)=>{let o=await g(`/spreadsheets/${e.spreadsheetId}:batchUpdate`,s,{method:"POST",body:{requests:[{addSheet:{properties:{title:e.title||"Sheet1"}}}]}});if(o.replies&&o.replies.length>0&&s.db.sheets)try{let n=o.replies[0].addSheet?.properties;n?.sheetId!==void 0&&await s.db.sheets.upsertByEntityId(String(n.sheetId),{sheetId:String(n.sheetId),spreadsheetId:e.spreadsheetId,title:n.title||e.title||"Sheet1",index:n.index,createdAt:new Date})}catch(a){console.warn("Failed to save sheet to database:",a)}return await m(s,"googlesheets.sheets.createSheet",{...e},"completed"),o},$=async(s,e)=>{let o=await g(`/spreadsheets/${e.spreadsheetId}:batchUpdate`,s,{method:"POST",body:{requests:[{deleteSheet:{sheetId:e.sheetId}}]}});if(s.db.sheets)try{await s.db.sheets.deleteByEntityId(String(e.sheetId))}catch(a){console.warn("Failed to delete sheet from database:",a)}return await m(s,"googlesheets.sheets.deleteSheet",{...e},"completed"),o},x=async(s,e)=>{let o=await g(`/spreadsheets/${e.spreadsheetId}`,s,{method:"GET",query:{fields:"spreadsheetId,sheets.properties"}}),a={spreadsheetId:o.spreadsheetId,sheets:o.sheets?.map(n=>n.properties).filter(n=>n!=null)};return await m(s,"googlesheets.sheets.listSheets",{...e},"completed"),a},W=async(s,e)=>{let o=e.dimension||"ROWS",a=e.startIndex||0,n=e.endIndex||a+1,r=await g(`/spreadsheets/${e.spreadsheetId}:batchUpdate`,s,{method:"POST",body:{requests:[{deleteDimension:{range:{sheetId:e.sheetId,dimension:o,startIndex:a,endIndex:n}}}]}});if(o==="ROWS"&&s.db.rows)try{let d=`Sheet_${e.sheetId}`;for(let i=a;i<n;i++){let l=i+1,R=`${d}!${l}:${l}`,c=`${e.spreadsheetId}_${d}_${R}`;await s.db.rows.deleteByEntityId(c)}}catch(d){console.warn("Failed to delete rows from database:",d)}return await m(s,"googlesheets.sheets.deleteRowsOrColumns",{...e},"completed"),r};import{logEventFromContext as f}from"corsair/core";var L=async(s,e)=>{let o=await g("/spreadsheets",s,{method:"POST",body:{properties:e.properties}});if(o.spreadsheetId&&s.db.spreadsheets)try{await s.db.spreadsheets.upsertByEntityId(o.spreadsheetId,{spreadsheetId:o.spreadsheetId,title:o.properties?.title,spreadsheetUrl:o.spreadsheetUrl,createdAt:new Date})}catch(a){console.warn("Failed to save spreadsheet to database:",a)}return await f(s,"googlesheets.spreadsheets.create",{...e},"completed"),o},_=async(s,e)=>{let o=await b(`/files/${e.spreadsheetId}`,s,{method:"DELETE"});if(!o.ok&&o.status!==404){let a=await o.text();throw new Error(`Failed to delete spreadsheet: ${o.status} ${a}`)}if(s.db.spreadsheets)try{await s.db.spreadsheets.deleteByEntityId(e.spreadsheetId)}catch(a){console.warn("Failed to delete spreadsheet from database:",a)}await f(s,"googlesheets.spreadsheets.delete",{...e},"completed")},B=async(s,e)=>{let o="mimeType='application/vnd.google-apps.spreadsheet'",a=new URLSearchParams({q:e.query?`${o} AND ${e.query}`:o,fields:"files(id,name,createdTime,modifiedTime,webViewLink),nextPageToken"});e.pageSize&&a.set("pageSize",String(e.pageSize)),e.pageToken&&a.set("pageToken",e.pageToken);let n=await b(`/files?${a.toString()}`,s);if(!n.ok){let d=await n.text();throw new Error(`Failed to list spreadsheets: ${n.status} ${d}`)}let r=await n.json();return await f(s,"googlesheets.spreadsheets.list",{...e},"completed"),r};import{z as t}from"zod";var ne=t.object({properties:t.object({title:t.string().optional(),locale:t.string().optional(),timeZone:t.string().optional()}).optional()}),re=t.object({spreadsheetId:t.string()}),pe=t.object({spreadsheetId:t.string(),sheetName:t.string().optional(),range:t.string().optional(),values:t.array(t.union([t.string(),t.number(),t.boolean(),t.null()])).optional(),valueInputOption:t.enum(["RAW","USER_ENTERED"]).optional(),insertDataOption:t.enum(["OVERWRITE","INSERT_ROWS"]).optional()}),he=t.object({spreadsheetId:t.string(),sheetName:t.string().optional(),keyColumn:t.string().describe('Column letter (e.g. "A"), not a header name (e.g. "Company Name")').optional(),keyValue:t.union([t.string(),t.number()]).optional(),values:t.array(t.union([t.string(),t.number(),t.boolean(),t.null()])).optional(),valueInputOption:t.enum(["RAW","USER_ENTERED"]).optional(),insertDataOption:t.enum(["OVERWRITE","INSERT_ROWS"]).optional()}),de=t.object({spreadsheetId:t.string(),sheetName:t.string().optional(),range:t.string().optional(),valueRenderOption:t.enum(["FORMATTED_VALUE","UNFORMATTED_VALUE","FORMULA"]).optional(),dateTimeRenderOption:t.enum(["SERIAL_NUMBER","FORMATTED_STRING"]).optional()}),ie=t.object({spreadsheetId:t.string(),sheetName:t.string().optional(),range:t.string().optional(),rowIndex:t.number().optional(),values:t.array(t.union([t.string(),t.number(),t.boolean(),t.null()])).optional(),valueInputOption:t.enum(["RAW","USER_ENTERED"]).optional()}),le=t.object({spreadsheetId:t.string(),sheetName:t.string().optional(),range:t.string().optional()}),ge=t.object({spreadsheetId:t.string(),title:t.string().optional()}),ue=t.object({spreadsheetId:t.string(),sheetId:t.number()}),Se=t.object({spreadsheetId:t.string(),sheetId:t.number(),dimension:t.enum(["ROWS","COLUMNS"]).optional(),startIndex:t.number().optional(),endIndex:t.number().optional()}),ce=t.object({spreadsheetId:t.string()}),me=t.object({pageSize:t.number().optional(),pageToken:t.string().optional(),query:t.string().optional()}),u={spreadsheetsCreate:ne,spreadsheetsDelete:re,spreadsheetsList:me,sheetsAppendRow:pe,sheetsAppendOrUpdateRow:he,sheetsGetRows:de,sheetsUpdateRow:ie,sheetsClearSheet:le,sheetsCreateSheet:ge,sheetsDeleteSheet:ue,sheetsDeleteRowsOrColumns:Se,sheetsListSheetsInSpreadsheet:ce},we=t.object({title:t.string().optional(),locale:t.string().optional(),autoRecalc:t.enum(["ON_CHANGE","ON_UPDATE","HOUR","MINUTE"]).optional(),timeZone:t.string().optional()}),q=t.object({spreadsheetId:t.string().optional(),properties:we.optional(),spreadsheetUrl:t.string().optional()}),V=t.object({range:t.string().optional(),majorDimension:t.enum(["ROWS","COLUMNS","DIMENSION_UNSPECIFIED"]).optional(),values:t.array(t.array(t.union([t.string(),t.number(),t.boolean(),t.null()]))).optional()}),G=t.object({spreadsheetId:t.string().optional(),totalUpdatedRows:t.number().optional(),totalUpdatedColumns:t.number().optional(),totalUpdatedCells:t.number().optional(),totalUpdatedSheets:t.number().optional(),responses:t.array(V).optional()}),Re=t.object({spreadsheetId:t.string().optional(),clearedRange:t.string().optional()}),j=t.object({sheetId:t.number().optional(),title:t.string().optional(),index:t.number().optional(),sheetType:t.enum(["GRID","OBJECT","DATA_SOURCE"]).optional(),hidden:t.boolean().optional()}),Ve=t.object({properties:j.optional()}),O=t.object({spreadsheetId:t.string().optional(),replies:t.array(t.any()).optional(),updatedSpreadsheet:q.optional()}),ye=t.object({spreadsheetId:t.string().optional(),sheets:t.array(j).optional()}),Ee=t.object({id:t.string().optional(),name:t.string().optional(),createdTime:t.string().optional(),modifiedTime:t.string().optional(),webViewLink:t.string().optional()}),Ie=t.object({files:t.array(Ee).optional(),nextPageToken:t.string().optional()}),S={spreadsheetsCreate:q,spreadsheetsDelete:t.void(),spreadsheetsList:Ie,sheetsAppendRow:G,sheetsAppendOrUpdateRow:G,sheetsGetRows:V,sheetsUpdateRow:G,sheetsClearSheet:Re,sheetsCreateSheet:O,sheetsDeleteSheet:O,sheetsDeleteRowsOrColumns:O,sheetsListSheetsInSpreadsheet:ye};var I={create:L,delete:_,list:B},w={appendRow:U,appendOrUpdateRow:A,getRows:C,updateRow:D,clearSheet:P,createSheet:N,deleteSheet:$,deleteRowsOrColumns:W,listSheetsInSpreadsheet:x};import{z as h}from"zod";var F=h.object({spreadsheetId:h.string(),title:h.string().optional(),spreadsheetUrl:h.string().optional(),createdAt:h.coerce.date().optional()}),M=h.object({sheetId:h.string(),spreadsheetId:h.string(),title:h.string().optional(),index:h.number().optional(),createdAt:h.coerce.date().optional()}),z=h.object({rowId:h.string(),spreadsheetId:h.string(),sheetName:h.string().optional(),range:h.string().optional(),values:h.array(h.union([h.string(),h.number(),h.boolean(),h.null()])).optional(),createdAt:h.coerce.date().optional()});var K={version:"1.0.0",entities:{spreadsheets:F,sheets:M,rows:z}};import{logEventFromContext as fe}from"corsair/core";import{z as p}from"zod";var H=p.object({spreadsheetId:p.string().optional(),sheetName:p.string().optional(),range:p.string().optional(),values:p.array(p.union([p.string(),p.number(),p.boolean(),p.null()])).optional(),eventType:p.literal("rangeUpdated").optional(),timestamp:p.string().optional(),event:p.unknown().optional()}),Z=p.object({eventType:p.literal("rangeUpdated"),spreadsheetId:p.string(),sheetName:p.string(),range:p.string(),values:p.array(p.union([p.string(),p.number(),p.boolean(),p.null()])),timestamp:p.string()});function be(s){return typeof s=="string"?JSON.parse(s):s}function k(s){return e=>be(e.body).eventType===s}var J={match:k("rangeUpdated"),handler:async(s,e)=>{let o=e.payload;if(!o.spreadsheetId||!o.values)return{success:!1,error:"Missing required fields: spreadsheetId or values"};let a={eventType:"rangeUpdated",spreadsheetId:o.spreadsheetId,sheetName:o.sheetName||"Sheet1",range:o.range||"A:Z",values:o.values,timestamp:o.timestamp||new Date().toISOString()};if(s.db.rows)try{let n=`${o.spreadsheetId}_${o.sheetName}_${o.range||"A:Z"}`;await s.db.rows.upsertByEntityId(n,{rowId:n,spreadsheetId:o.spreadsheetId,sheetName:o.sheetName||"Sheet1",range:o.range||"A:Z",values:o.values,createdAt:new Date})}catch(n){console.warn("Failed to save/update range in database:",n)}return await fe(s,"googlesheets.webhook.rangeUpdated",{...a},"completed"),{success:!0,data:a}}};var Q={rangeUpdated:J};import{firstString as Ge,readBodyRecord as Oe}from"corsair/core";function X(s){let e=Oe(s);if(!e)return null;let o=Ge([e.spreadsheetId]);return o?{linkType:"spreadsheet_id",externalId:o}:null}var Te={spreadsheets:{create:I.create,delete:I.delete,list:I.list},sheets:{appendRow:w.appendRow,appendOrUpdateRow:w.appendOrUpdateRow,getRows:w.getRows,updateRow:w.updateRow,clearSheet:w.clearSheet,createSheet:w.createSheet,deleteSheet:w.deleteSheet,deleteRowsOrColumns:w.deleteRowsOrColumns,listSheetsInSpreadsheet:w.listSheetsInSpreadsheet}},Ue={"spreadsheets.create":{input:u.spreadsheetsCreate,output:S.spreadsheetsCreate},"spreadsheets.delete":{input:u.spreadsheetsDelete,output:S.spreadsheetsDelete},"spreadsheets.list":{input:u.spreadsheetsList,output:S.spreadsheetsList},"sheets.appendRow":{input:u.sheetsAppendRow,output:S.sheetsAppendRow},"sheets.appendOrUpdateRow":{input:u.sheetsAppendOrUpdateRow,output:S.sheetsAppendOrUpdateRow},"sheets.getRows":{input:u.sheetsGetRows,output:S.sheetsGetRows},"sheets.updateRow":{input:u.sheetsUpdateRow,output:S.sheetsUpdateRow},"sheets.clearSheet":{input:u.sheetsClearSheet,output:S.sheetsClearSheet},"sheets.createSheet":{input:u.sheetsCreateSheet,output:S.sheetsCreateSheet},"sheets.deleteSheet":{input:u.sheetsDeleteSheet,output:S.sheetsDeleteSheet},"sheets.deleteRowsOrColumns":{input:u.sheetsDeleteRowsOrColumns,output:S.sheetsDeleteRowsOrColumns},"sheets.listSheetsInSpreadsheet":{input:u.sheetsListSheetsInSpreadsheet,output:S.sheetsListSheetsInSpreadsheet}},Ae={rangeUpdated:Q.rangeUpdated},Ce={rangeUpdated:{description:"A range of cells in a Google Sheet was updated",payload:H,response:Z}},De="oauth_2",Pe={"spreadsheets.create":{riskLevel:"write",description:"Create a new spreadsheet"},"spreadsheets.delete":{riskLevel:"destructive",irreversible:!0,description:"Permanently delete a spreadsheet [DESTRUCTIVE \xB7 IRREVERSIBLE]"},"spreadsheets.list":{riskLevel:"read",description:"List all spreadsheets in Google Drive"},"sheets.appendRow":{riskLevel:"write",description:"Append a new row to a sheet"},"sheets.appendOrUpdateRow":{riskLevel:"write",description:"Append a new row or update an existing one"},"sheets.getRows":{riskLevel:"read",description:"Read rows from a sheet"},"sheets.updateRow":{riskLevel:"write",description:"Update an existing row in a sheet"},"sheets.clearSheet":{riskLevel:"destructive",description:"Clear all data from a sheet [DESTRUCTIVE]"},"sheets.createSheet":{riskLevel:"write",description:"Add a new sheet tab to a spreadsheet"},"sheets.deleteSheet":{riskLevel:"destructive",irreversible:!0,description:"Delete a sheet tab and all its data [DESTRUCTIVE \xB7 IRREVERSIBLE]"},"sheets.deleteRowsOrColumns":{riskLevel:"destructive",description:"Delete rows or columns from a sheet [DESTRUCTIVE]"},"sheets.listSheetsInSpreadsheet":{riskLevel:"read",description:"List all sheet tabs in a spreadsheet"}},Ne={oauth_2:{account:["spreadsheet_id"]}};function ut(s={}){let e={...s,authType:s.authType??De};return{id:"googlesheets",authConfig:Ne,schema:K,options:e,oauthConfig:{providerName:"Google",authUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:["https://www.googleapis.com/auth/spreadsheets","https://www.googleapis.com/auth/drive.readonly"],authParams:{access_type:"offline",prompt:"consent"}},hooks:e.hooks,webhookHooks:e.webhookHooks,endpoints:Te,webhooks:Ae,endpointMeta:Pe,endpointSchemas:Ue,webhookSchemas:Ce,keyBuilder:async o=>{let a=o.authType;if(e.key)return e.key;if(o.authType==="oauth_2")return ve(o,{plugin:"googlesheets",tokenUrl:"https://oauth2.googleapis.com/token"});throw new ke("googlesheets","oauth_2")},pluginWebhookMatcher:o=>{let a=o.body;if(!a)return!1;let n=typeof a?.spreadsheetId=="string",r=a?.eventType==="rangeUpdated";return n||r},pluginTenantWebhookMatcher:X}}export{k as createGoogleSheetsWebhookMatcher,ut as googlesheets,Ne as googlesheetsAuthConfig,Ue as googlesheetsEndpointSchemas};
1
+ import{AuthMissingError as ke,getOAuthAccessToken as ve}from"corsair/core";import{logEventFromContext as m}from"corsair/core";import{request as Y}from"corsair/http";var ee="https://sheets.googleapis.com/v4";async function v(s,e,o={}){let{method:a="GET",body:n,query:r}=o;return await Y({BASE:ee,VERSION:"1.0.0",WITH_CREDENTIALS:!1,CREDENTIALS:"omit",TOKEN:e,HEADERS:{"Content-Type":"application/json"}},{method:a,url:s,body:a==="POST"||a==="PUT"||a==="PATCH"?n:void 0,mediaType:"application/json",query:r})}function te(s){return s instanceof Error&&"status"in s&&s.status===401}var se="https://www.googleapis.com/drive/v3";async function T(s,e,o={}){return fetch(`${se}${s}`,{...o,headers:{...o.headers,Authorization:`Bearer ${e}`}})}async function b(s,e,o={}){let a=await T(s,e.key,o);if(a.status===401&&e._refreshAuth){let n=await e._refreshAuth();return T(s,n,o)}return a}async function g(s,e,o={}){try{return await v(s,e.key,o)}catch(a){if(te(a)&&e._refreshAuth){let n=await e._refreshAuth();return await v(s,n,o)}throw a}}var U=async(s,e)=>{let o=e.range||`${e.sheetName||"Sheet1"}!A:Z`,a=e.values?[e.values]:[],n=await g(`/spreadsheets/${e.spreadsheetId}/values/${o}:append`,s,{method:"POST",query:{valueInputOption:e.valueInputOption||"USER_ENTERED",insertDataOption:e.insertDataOption||"INSERT_ROWS"},body:{values:a,majorDimension:"ROWS"}});if(n.responses&&n.responses.length>0&&s.db.rows)try{let r=n.responses[0];if(r){let d=r.updatedRange||o,i=e.sheetName||"Sheet1",l=`${e.spreadsheetId}_${i}_${d}`;await s.db.rows.upsertByEntityId(l,{rowId:l,spreadsheetId:e.spreadsheetId,sheetName:i,range:d,values:e.values,createdAt:new Date})}}catch(r){console.warn("Failed to save row to database:",r)}return await m(s,"googlesheets.sheets.appendRow",{...e},"completed"),n},A=async(s,e)=>{let o=e.sheetName||"Sheet1",a=e.keyColumn||"A",n=e.keyValue;if(!n)throw new Error("keyValue is required for appendOrUpdateRow");let r=`${o}!${a}:${a}`,d=await g(`/spreadsheets/${e.spreadsheetId}/values/${r}`,s,{method:"GET"}),i=-1;if(d.values){for(let c=0;c<d.values.length;c++)if(d.values[c]?.[0]===String(n)){i=c;break}}let l=e.values?[e.values]:[],R=i>=0?`${o}!${i+1}:${i+1}`:`${o}!A:Z`;if(i>=0){let c=await g(`/spreadsheets/${e.spreadsheetId}/values/${R}`,s,{method:"PUT",query:{valueInputOption:e.valueInputOption||"USER_ENTERED"},body:{values:l,majorDimension:"ROWS"}});if(s.db.rows)try{let y=c.updatedRange||R,E=`${e.spreadsheetId}_${o}_${y}`;await s.db.rows.upsertByEntityId(E,{rowId:E,spreadsheetId:e.spreadsheetId,sheetName:o,range:y,values:e.values,createdAt:new Date})}catch(y){console.warn("Failed to update row in database:",y)}return await m(s,"googlesheets.sheets.appendOrUpdateRow",{...e,action:"update"},"completed"),c}else{let c=await g(`/spreadsheets/${e.spreadsheetId}/values/${R}:append`,s,{method:"POST",query:{valueInputOption:e.valueInputOption||"USER_ENTERED",insertDataOption:e.insertDataOption||"INSERT_ROWS"},body:{values:l,majorDimension:"ROWS"}});if(s.db.rows)try{let y=c.updates?.updatedRange||R,E=`${e.spreadsheetId}_${o}_${y}`;await s.db.rows.upsertByEntityId(E,{rowId:E,spreadsheetId:e.spreadsheetId,sheetName:o,range:y,values:e.values,createdAt:new Date})}catch(y){console.warn("Failed to save row to database:",y)}return await m(s,"googlesheets.sheets.appendOrUpdateRow",{...e,action:"append"},"completed"),c}},C=async(s,e)=>{let o=e.range||`${e.sheetName||"Sheet1"}!A:Z`,a=await g(`/spreadsheets/${e.spreadsheetId}/values/${o}`,s,{method:"GET",query:{valueRenderOption:e.valueRenderOption||"FORMATTED_VALUE",dateTimeRenderOption:e.dateTimeRenderOption||"FORMATTED_STRING"}});if(a.values&&s.db.rows)try{let n=e.sheetName||"Sheet1";for(let r=0;r<a.values.length;r++){let d=a.values[r];if(d){let i=r+1,l=`${n}!${i}:${i}`,R=`${e.spreadsheetId}_${n}_${l}`;await s.db.rows.upsertByEntityId(R,{rowId:R,spreadsheetId:e.spreadsheetId,sheetName:n,range:l,values:d,createdAt:new Date})}}}catch(n){console.warn("Failed to save rows to database:",n)}return await m(s,"googlesheets.sheets.getRows",{...e},"completed"),a},D=async(s,e)=>{let o=e.range||`${e.sheetName||"Sheet1"}!${e.rowIndex||1}:${e.rowIndex||1}`,a=e.values?[e.values]:[],n=await g(`/spreadsheets/${e.spreadsheetId}/values/${o}`,s,{method:"PUT",query:{valueInputOption:e.valueInputOption||"USER_ENTERED"},body:{values:a,majorDimension:"ROWS"}});if(n.responses&&n.responses.length>0&&s.db.rows)try{let r=n.responses[0];if(r){let d=r.updatedRange||o,i=e.sheetName||"Sheet1",l=`${e.spreadsheetId}_${i}_${d}`;await s.db.rows.upsertByEntityId(l,{rowId:l,spreadsheetId:e.spreadsheetId,sheetName:i,range:d,values:e.values,createdAt:new Date})}}catch(r){console.warn("Failed to update row in database:",r)}return await m(s,"googlesheets.sheets.updateRow",{...e},"completed"),n},P=async(s,e)=>{let o=e.range||e.sheetName||"Sheet1",a=await g(`/spreadsheets/${e.spreadsheetId}/values/${o}:clear`,s,{method:"POST"});if(a.clearedRange&&s.db.rows)try{let n=e.sheetName||"Sheet1",r=a.clearedRange,d=`${e.spreadsheetId}_${n}_${r}`;await s.db.rows.deleteByEntityId(d)}catch(n){console.warn("Failed to delete rows from database:",n)}return await m(s,"googlesheets.sheets.clearSheet",{...e},"completed"),a},N=async(s,e)=>{let o=await g(`/spreadsheets/${e.spreadsheetId}:batchUpdate`,s,{method:"POST",body:{requests:[{addSheet:{properties:{title:e.title||"Sheet1"}}}]}});if(o.replies&&o.replies.length>0&&s.db.sheets)try{let n=o.replies[0].addSheet?.properties;n?.sheetId!==void 0&&await s.db.sheets.upsertByEntityId(String(n.sheetId),{sheetId:String(n.sheetId),spreadsheetId:e.spreadsheetId,title:n.title||e.title||"Sheet1",index:n.index,createdAt:new Date})}catch(a){console.warn("Failed to save sheet to database:",a)}return await m(s,"googlesheets.sheets.createSheet",{...e},"completed"),o},$=async(s,e)=>{let o=await g(`/spreadsheets/${e.spreadsheetId}:batchUpdate`,s,{method:"POST",body:{requests:[{deleteSheet:{sheetId:e.sheetId}}]}});if(s.db.sheets)try{await s.db.sheets.deleteByEntityId(String(e.sheetId))}catch(a){console.warn("Failed to delete sheet from database:",a)}return await m(s,"googlesheets.sheets.deleteSheet",{...e},"completed"),o},x=async(s,e)=>{let o=await g(`/spreadsheets/${e.spreadsheetId}`,s,{method:"GET",query:{fields:"spreadsheetId,sheets.properties"}}),a={spreadsheetId:o.spreadsheetId,sheets:o.sheets?.map(n=>n.properties).filter(n=>n!=null)};return await m(s,"googlesheets.sheets.listSheets",{...e},"completed"),a},W=async(s,e)=>{let o=e.dimension||"ROWS",a=e.startIndex||0,n=e.endIndex||a+1,r=await g(`/spreadsheets/${e.spreadsheetId}:batchUpdate`,s,{method:"POST",body:{requests:[{deleteDimension:{range:{sheetId:e.sheetId,dimension:o,startIndex:a,endIndex:n}}}]}});if(o==="ROWS"&&s.db.rows)try{let d=`Sheet_${e.sheetId}`;for(let i=a;i<n;i++){let l=i+1,R=`${d}!${l}:${l}`,c=`${e.spreadsheetId}_${d}_${R}`;await s.db.rows.deleteByEntityId(c)}}catch(d){console.warn("Failed to delete rows from database:",d)}return await m(s,"googlesheets.sheets.deleteRowsOrColumns",{...e},"completed"),r};import{logEventFromContext as f}from"corsair/core";var L=async(s,e)=>{let o=await g("/spreadsheets",s,{method:"POST",body:{properties:e.properties}});if(o.spreadsheetId&&s.db.spreadsheets)try{await s.db.spreadsheets.upsertByEntityId(o.spreadsheetId,{spreadsheetId:o.spreadsheetId,title:o.properties?.title,spreadsheetUrl:o.spreadsheetUrl,createdAt:new Date})}catch(a){console.warn("Failed to save spreadsheet to database:",a)}return await f(s,"googlesheets.spreadsheets.create",{...e},"completed"),o},_=async(s,e)=>{let o=await b(`/files/${e.spreadsheetId}`,s,{method:"DELETE"});if(!o.ok&&o.status!==404){let a=await o.text();throw new Error(`Failed to delete spreadsheet: ${o.status} ${a}`)}if(s.db.spreadsheets)try{await s.db.spreadsheets.deleteByEntityId(e.spreadsheetId)}catch(a){console.warn("Failed to delete spreadsheet from database:",a)}await f(s,"googlesheets.spreadsheets.delete",{...e},"completed")},B=async(s,e)=>{let o="mimeType='application/vnd.google-apps.spreadsheet'",a=new URLSearchParams({q:e.query?`${o} AND ${e.query}`:o,fields:"files(id,name,createdTime,modifiedTime,webViewLink),nextPageToken"});e.pageSize&&a.set("pageSize",String(e.pageSize)),e.pageToken&&a.set("pageToken",e.pageToken);let n=await b(`/files?${a.toString()}`,s);if(!n.ok){let d=await n.text();throw new Error(`Failed to list spreadsheets: ${n.status} ${d}`)}let r=await n.json();return await f(s,"googlesheets.spreadsheets.list",{...e},"completed"),r};import{z as t}from"zod";var ne=t.object({properties:t.object({title:t.string().optional(),locale:t.string().optional(),timeZone:t.string().optional()}).optional()}),re=t.object({spreadsheetId:t.string()}),pe=t.object({spreadsheetId:t.string(),sheetName:t.string().optional(),range:t.string().optional(),values:t.array(t.union([t.string(),t.number(),t.boolean(),t.null()])).optional(),valueInputOption:t.enum(["RAW","USER_ENTERED"]).optional(),insertDataOption:t.enum(["OVERWRITE","INSERT_ROWS"]).optional()}),he=t.object({spreadsheetId:t.string(),sheetName:t.string().optional(),keyColumn:t.string().describe('Column letter (e.g. "A"), not a header name (e.g. "Company Name")').optional(),keyValue:t.union([t.string(),t.number()]).optional(),values:t.array(t.union([t.string(),t.number(),t.boolean(),t.null()])).optional(),valueInputOption:t.enum(["RAW","USER_ENTERED"]).optional(),insertDataOption:t.enum(["OVERWRITE","INSERT_ROWS"]).optional()}),de=t.object({spreadsheetId:t.string(),sheetName:t.string().optional(),range:t.string().optional(),valueRenderOption:t.enum(["FORMATTED_VALUE","UNFORMATTED_VALUE","FORMULA"]).optional(),dateTimeRenderOption:t.enum(["SERIAL_NUMBER","FORMATTED_STRING"]).optional()}),ie=t.object({spreadsheetId:t.string(),sheetName:t.string().optional(),range:t.string().optional(),rowIndex:t.number().optional(),values:t.array(t.union([t.string(),t.number(),t.boolean(),t.null()])).optional(),valueInputOption:t.enum(["RAW","USER_ENTERED"]).optional()}),le=t.object({spreadsheetId:t.string(),sheetName:t.string().optional(),range:t.string().optional()}),ge=t.object({spreadsheetId:t.string(),title:t.string().optional()}),ue=t.object({spreadsheetId:t.string(),sheetId:t.number()}),Se=t.object({spreadsheetId:t.string(),sheetId:t.number(),dimension:t.enum(["ROWS","COLUMNS"]).optional(),startIndex:t.number().optional(),endIndex:t.number().optional()}),ce=t.object({spreadsheetId:t.string()}),me=t.object({pageSize:t.number().optional(),pageToken:t.string().optional(),query:t.string().optional()}),u={spreadsheetsCreate:ne,spreadsheetsDelete:re,spreadsheetsList:me,sheetsAppendRow:pe,sheetsAppendOrUpdateRow:he,sheetsGetRows:de,sheetsUpdateRow:ie,sheetsClearSheet:le,sheetsCreateSheet:ge,sheetsDeleteSheet:ue,sheetsDeleteRowsOrColumns:Se,sheetsListSheetsInSpreadsheet:ce},we=t.object({title:t.string().optional(),locale:t.string().optional(),autoRecalc:t.enum(["ON_CHANGE","ON_UPDATE","HOUR","MINUTE"]).optional(),timeZone:t.string().optional()}),q=t.object({spreadsheetId:t.string().optional(),properties:we.optional(),spreadsheetUrl:t.string().optional()}),V=t.object({range:t.string().optional(),majorDimension:t.enum(["ROWS","COLUMNS","DIMENSION_UNSPECIFIED"]).optional(),values:t.array(t.array(t.union([t.string(),t.number(),t.boolean(),t.null()]))).optional()}),G=t.object({spreadsheetId:t.string().optional(),totalUpdatedRows:t.number().optional(),totalUpdatedColumns:t.number().optional(),totalUpdatedCells:t.number().optional(),totalUpdatedSheets:t.number().optional(),responses:t.array(V).optional()}),Re=t.object({spreadsheetId:t.string().optional(),clearedRange:t.string().optional()}),j=t.object({sheetId:t.number().optional(),title:t.string().optional(),index:t.number().optional(),sheetType:t.enum(["GRID","OBJECT","DATA_SOURCE"]).optional(),hidden:t.boolean().optional()}),Ve=t.object({properties:j.optional()}),O=t.object({spreadsheetId:t.string().optional(),replies:t.array(t.any()).optional(),updatedSpreadsheet:q.optional()}),ye=t.object({spreadsheetId:t.string().optional(),sheets:t.array(j).optional()}),Ee=t.object({id:t.string().optional(),name:t.string().optional(),createdTime:t.string().optional(),modifiedTime:t.string().optional(),webViewLink:t.string().optional()}),Ie=t.object({files:t.array(Ee).optional(),nextPageToken:t.string().optional()}),S={spreadsheetsCreate:q,spreadsheetsDelete:t.void(),spreadsheetsList:Ie,sheetsAppendRow:G,sheetsAppendOrUpdateRow:G,sheetsGetRows:V,sheetsUpdateRow:G,sheetsClearSheet:Re,sheetsCreateSheet:O,sheetsDeleteSheet:O,sheetsDeleteRowsOrColumns:O,sheetsListSheetsInSpreadsheet:ye};var I={create:L,delete:_,list:B},w={appendRow:U,appendOrUpdateRow:A,getRows:C,updateRow:D,clearSheet:P,createSheet:N,deleteSheet:$,deleteRowsOrColumns:W,listSheetsInSpreadsheet:x};import{z as h}from"zod";var F=h.object({spreadsheetId:h.string(),title:h.string().optional(),spreadsheetUrl:h.string().optional(),createdAt:h.coerce.date().optional()}),M=h.object({sheetId:h.string(),spreadsheetId:h.string(),title:h.string().optional(),index:h.number().optional(),createdAt:h.coerce.date().optional()}),z=h.object({rowId:h.string(),spreadsheetId:h.string(),sheetName:h.string().optional(),range:h.string().optional(),values:h.array(h.union([h.string(),h.number(),h.boolean(),h.null()])).optional(),createdAt:h.coerce.date().optional()});var K={version:"1.0.0",entities:{spreadsheets:F,sheets:M,rows:z}};import{logEventFromContext as fe}from"corsair/core";import{z as p}from"zod";var H=p.object({spreadsheetId:p.string().optional(),sheetName:p.string().optional(),range:p.string().optional(),values:p.array(p.union([p.string(),p.number(),p.boolean(),p.null()])).optional(),eventType:p.literal("rangeUpdated").optional(),timestamp:p.string().optional(),event:p.unknown().optional()}),Z=p.object({eventType:p.literal("rangeUpdated"),spreadsheetId:p.string(),sheetName:p.string(),range:p.string(),values:p.array(p.union([p.string(),p.number(),p.boolean(),p.null()])),timestamp:p.string()});function be(s){return typeof s=="string"?JSON.parse(s):s}function k(s){return e=>be(e.body).eventType===s}var J={match:k("rangeUpdated"),handler:async(s,e)=>{let o=e.payload;if(!o.spreadsheetId||!o.values)return{success:!1,error:"Missing required fields: spreadsheetId or values"};let a={eventType:"rangeUpdated",spreadsheetId:o.spreadsheetId,sheetName:o.sheetName||"Sheet1",range:o.range||"A:Z",values:o.values,timestamp:o.timestamp||new Date().toISOString()};if(s.db.rows)try{let n=`${o.spreadsheetId}_${o.sheetName}_${o.range||"A:Z"}`;await s.db.rows.upsertByEntityId(n,{rowId:n,spreadsheetId:o.spreadsheetId,sheetName:o.sheetName||"Sheet1",range:o.range||"A:Z",values:o.values,createdAt:new Date})}catch(n){console.warn("Failed to save/update range in database:",n)}return await fe(s,"googlesheets.webhook.rangeUpdated",{...a},"completed"),{success:!0,data:a}}};var Q={rangeUpdated:J};import{firstString as Ge,readBodyRecord as Oe}from"corsair/core";function X(s){let e=Oe(s);if(!e)return null;let o=Ge([e.spreadsheetId]);return o?{linkType:"spreadsheet_id",externalId:o}:null}var Te={spreadsheets:{create:I.create,delete:I.delete,list:I.list},sheets:{appendRow:w.appendRow,appendOrUpdateRow:w.appendOrUpdateRow,getRows:w.getRows,updateRow:w.updateRow,clearSheet:w.clearSheet,createSheet:w.createSheet,deleteSheet:w.deleteSheet,deleteRowsOrColumns:w.deleteRowsOrColumns,listSheetsInSpreadsheet:w.listSheetsInSpreadsheet}},Ue={"spreadsheets.create":{input:u.spreadsheetsCreate,output:S.spreadsheetsCreate},"spreadsheets.delete":{input:u.spreadsheetsDelete,output:S.spreadsheetsDelete},"spreadsheets.list":{input:u.spreadsheetsList,output:S.spreadsheetsList},"sheets.appendRow":{input:u.sheetsAppendRow,output:S.sheetsAppendRow},"sheets.appendOrUpdateRow":{input:u.sheetsAppendOrUpdateRow,output:S.sheetsAppendOrUpdateRow},"sheets.getRows":{input:u.sheetsGetRows,output:S.sheetsGetRows},"sheets.updateRow":{input:u.sheetsUpdateRow,output:S.sheetsUpdateRow},"sheets.clearSheet":{input:u.sheetsClearSheet,output:S.sheetsClearSheet},"sheets.createSheet":{input:u.sheetsCreateSheet,output:S.sheetsCreateSheet},"sheets.deleteSheet":{input:u.sheetsDeleteSheet,output:S.sheetsDeleteSheet},"sheets.deleteRowsOrColumns":{input:u.sheetsDeleteRowsOrColumns,output:S.sheetsDeleteRowsOrColumns},"sheets.listSheetsInSpreadsheet":{input:u.sheetsListSheetsInSpreadsheet,output:S.sheetsListSheetsInSpreadsheet}},Ae={rangeUpdated:Q.rangeUpdated},Ce={rangeUpdated:{description:"A range of cells in a Google Sheet was updated",payload:H,response:Z}},De="oauth_2",Pe={"spreadsheets.create":{riskLevel:"write",description:"Create a new spreadsheet"},"spreadsheets.delete":{riskLevel:"destructive",irreversible:!0,description:"Permanently delete a spreadsheet [DESTRUCTIVE \xB7 IRREVERSIBLE]"},"spreadsheets.list":{riskLevel:"read",description:"List all spreadsheets in Google Drive"},"sheets.appendRow":{riskLevel:"write",description:"Append a new row to a sheet"},"sheets.appendOrUpdateRow":{riskLevel:"write",description:"Append a new row or update an existing one"},"sheets.getRows":{riskLevel:"read",description:"Read rows from a sheet"},"sheets.updateRow":{riskLevel:"write",description:"Update an existing row in a sheet"},"sheets.clearSheet":{riskLevel:"destructive",description:"Clear all data from a sheet"},"sheets.createSheet":{riskLevel:"write",description:"Add a new sheet tab to a spreadsheet"},"sheets.deleteSheet":{riskLevel:"destructive",irreversible:!0,description:"Delete a sheet tab and all its data [DESTRUCTIVE \xB7 IRREVERSIBLE]"},"sheets.deleteRowsOrColumns":{riskLevel:"destructive",description:"Delete rows or columns from a sheet"},"sheets.listSheetsInSpreadsheet":{riskLevel:"read",description:"List all sheet tabs in a spreadsheet"}},Ne={oauth_2:{account:["spreadsheet_id"]}};function ut(s={}){let e={...s,authType:s.authType??De};return{id:"googlesheets",authConfig:Ne,schema:K,options:e,oauthConfig:{providerName:"Google",authUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:["https://www.googleapis.com/auth/spreadsheets","https://www.googleapis.com/auth/drive.readonly"],authParams:{access_type:"offline",prompt:"consent"}},hooks:e.hooks,webhookHooks:e.webhookHooks,endpoints:Te,webhooks:Ae,endpointMeta:Pe,endpointSchemas:Ue,webhookSchemas:Ce,keyBuilder:async o=>{let a=o.authType;if(e.key)return e.key;if(o.authType==="oauth_2")return ve(o,{plugin:"googlesheets",tokenUrl:"https://oauth2.googleapis.com/token"});throw new ke("googlesheets","oauth_2")},pluginWebhookMatcher:o=>{let a=o.body;if(!a)return!1;let n=typeof a?.spreadsheetId=="string",r=a?.eventType==="rangeUpdated";return n||r},pluginTenantWebhookMatcher:X}}export{k as createGoogleSheetsWebhookMatcher,ut as googlesheets,Ne as googlesheetsAuthConfig,Ue as googlesheetsEndpointSchemas};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@corsair-dev/googlesheets",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "description": "Google sheets plugin for Corsair",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -28,18 +28,24 @@
28
28
  "typescript": "^5.9.3",
29
29
  "zod": "^4.1.13",
30
30
  "jest": "^29.7.0",
31
- "corsair": "0.1.120"
31
+ "corsair": "0.1.129"
32
32
  },
33
33
  "keywords": [
34
34
  "corsair",
35
35
  "googlesheets",
36
36
  "plugin"
37
37
  ],
38
- "author": "",
38
+ "author": "Corsair (https://corsair.dev)",
39
39
  "license": "Apache-2.0",
40
40
  "files": [
41
41
  "dist"
42
42
  ],
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "git+https://github.com/corsairdev/corsair.git",
46
+ "directory": "packages/googlesheets"
47
+ },
48
+ "homepage": "https://docs.corsair.dev/plugins/googlesheets",
43
49
  "scripts": {
44
50
  "build": "rm -rf dist && tsc --build --force && tsup",
45
51
  "typecheck": "tsc --noEmit",